<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>wordpress/wp-content/plugins/flickr-rss/flickrrss-settingspage.php</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/google-sitemap-generator/img/icon-donate.gif</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/google-sitemap-generator/img/icon-live.gif</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/google-sitemap-generator/screenshot-2.gif</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/google-sitemap-generator/screenshot-3.gif</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/intensedebate-comment-template.php</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/intensedebate.php</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/readme.txt</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/screenshot-1.png</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/screenshot-2.png</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/screenshot-3.png</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/screenshot-4.png</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/screenshot-5.png</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/intensedebate/screenshot-6.png</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-brightkite/gmap1.png</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-brightkite/readme.txt</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-brightkite/wp-brightkite.php</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-ar.mo</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-ar.po</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-ca.mo</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-ca.po</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-es_ES.mo</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-es_ES.po</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-fr_FR.mo</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-fr_FR.po</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-ko_KR.mo</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-ko_KR.po</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-nb_NO.mo</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-nb_NO.po</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-sv_SE.mo</filename>
    </added>
    <added>
      <filename>wordpress/wp-content/plugins/wp-db-backup/wp-db-backup-sv_SE.po</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -431,6 +431,9 @@ case 'get-tagcloud' :
 	if ( empty( $tags ) )
 		die( __('No tags found!') );
 
+	if ( is_wp_error($tags) )
+		die($tags-&gt;get_error_message());
+
 	foreach ( $tags as $key =&gt; $tag ) {
 		$tags[ $key ]-&gt;link = '#';
 		$tags[ $key ]-&gt;id = $tag-&gt;term_id;
@@ -720,7 +723,7 @@ case 'autosave' : // The name of this action is hardcoded in edit_post()
 	$do_lock = true;
 
 	$data = '';
-	$message = sprintf( __('Draft Saved at %s.'), date( __('g:i:s a'), current_time( 'timestamp', true ) ) );
+	$message = sprintf( __('Draft Saved at %s.'), date_i18n( __('g:i:s a') ) );
 
 	$supplemental = array();
 </diff>
      <filename>wordpress/wp-admin/admin-ajax.php</filename>
    </modified>
    <modified>
      <diff>@@ -61,7 +61,12 @@ if (isset($plugin_page)) {
 		$page_hook = get_plugin_page_hook($plugin_page, $plugin_page);
 		// backwards compatibility for plugins using add_management_page
 		if ( empty( $page_hook ) &amp;&amp; 'edit.php' == $pagenow &amp;&amp; '' != get_plugin_page_hook($plugin_page, 'tools.php') ) {
-			wp_redirect('tools.php?page=' . $plugin_page);
+			// There could be plugin specific params on the URL, so we need the whole query string
+			if ( !empty($_SERVER[ 'QUERY_STRING' ]) )
+				$query_string = $_SERVER[ 'QUERY_STRING' ];
+			else
+				$query_string = 'page=' . $plugin_page;
+			wp_redirect( 'tools.php?' . $query_string );
 			exit;
 		}
 	}</diff>
      <filename>wordpress/wp-admin/admin.php</filename>
    </modified>
    <modified>
      <diff>@@ -613,15 +613,15 @@ li.widget-list-control-item h4,
 	background-color: #fff;
 }
 
-.plugins .active {
+.plugins .active,
+.plugins .active th,
+.plugins .active td {
 	background-color: #e7f7d3;
 }
 
-.plugins .togl {
-	border-right-color: #ccc;
-}
-
-#the-comment-list .unapproved {
+#the-comment-list .unapproved,
+#the-comment-list .unapproved th,
+#the-comment-list .unapproved td {
 	background-color: #ffffe0;
 }
 </diff>
      <filename>wordpress/wp-admin/css/colors-classic.css</filename>
    </modified>
    <modified>
      <diff>@@ -613,15 +613,15 @@ li.widget-list-control-item h4,
 	background-color: #fff;
 }
 
-.plugins .active {
+.plugins .active,
+.plugins .active th,
+.plugins .active td {
 	background-color: #e7f7d3;
 }
 
-.plugins .togl {
-	border-right-color: #ccc;
-}
-
-#the-comment-list .unapproved {
+#the-comment-list .unapproved,
+#the-comment-list .unapproved th,
+#the-comment-list .unapproved td {
 	background-color: #ffffe0;
 }
 </diff>
      <filename>wordpress/wp-admin/css/colors-fresh.css</filename>
    </modified>
    <modified>
      <diff>@@ -179,6 +179,10 @@ ul#adminmenu {
 }
 /* end Inline Editor */
 
+input {
+	line-height: 1;
+}
+
 * html .row-actions {
 	visibility: visible;
 }
@@ -273,7 +277,8 @@ form#template div {
 	width: 100%;
 }
 
-#ed_toolbar input {
+#ed_toolbar input,
+#ed_reply_toolbar input {
 	overflow: visible;
 	padding: 0 4px;
 }</diff>
      <filename>wordpress/wp-admin/css/ie.css</filename>
    </modified>
    <modified>
      <diff>@@ -120,9 +120,7 @@ div.zerosize {
 	font-weight: bold;
 	padding: 7px;
 	margin: 0 0 10px;
-	background-image: url(../images/postbox-bg.gif);
-	background-position: left top;
-	background-repeat: repeat-x;
+	background: #dfdfdf url(&quot;../images/gray-grad.png&quot;) repeat-x left top;
 	font-size: 12px;
 	font-weight: bold;
 	line-height: 1;</diff>
      <filename>wordpress/wp-admin/css/press-this.css</filename>
    </modified>
    <modified>
      <diff>@@ -18,8 +18,11 @@ if ( ( isset( $_REQUEST['delete_all_spam'] ) || isset( $_REQUEST['delete_all_spa
 	check_admin_referer('bulk-spam-delete', '_spam_nonce');
 
 	$delete_time = $wpdb-&gt;escape( $_REQUEST['pagegen_timestamp'] );
-	$deleted_spam = $wpdb-&gt;query( &quot;DELETE FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' AND '$delete_time' &gt; comment_date_gmt&quot; );
-
+	if ( current_user_can('moderate_comments')) {
+		$deleted_spam = $wpdb-&gt;query( &quot;DELETE FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' AND '$delete_time' &gt; comment_date_gmt&quot; );
+	} else {
+		$deleted_spam = 0;
+	}
 	$redirect_to = 'edit-comments.php?comment_status=spam&amp;deleted=' . (int) $deleted_spam;
 	if ( $post_id )
 		$redirect_to = add_query_arg( 'p', absint( $post_id ), $redirect_to );
@@ -272,9 +275,11 @@ $page_links = paginate_links( array(
 &lt;?php }
 
 if ( 'spam' == $comment_status ) {
-	wp_nonce_field('bulk-spam-delete', '_spam_nonce'); ?&gt;
-&lt;input type=&quot;submit&quot; name=&quot;delete_all_spam&quot; value=&quot;&lt;?php _e('Delete All Spam'); ?&gt;&quot; class=&quot;button-secondary apply&quot; /&gt;
-&lt;?php } ?&gt;
+	wp_nonce_field('bulk-spam-delete', '_spam_nonce'); 
+        if ( current_user_can ('moderate_comments')) { ?&gt;
+		&lt;input type=&quot;submit&quot; name=&quot;delete_all_spam&quot; value=&quot;&lt;?php _e('Delete All Spam'); ?&gt;&quot; class=&quot;button-secondary apply&quot; /&gt;
+&lt;?php	}
+} ?&gt;
 &lt;?php do_action('manage_comments_nav', $comment_status); ?&gt;
 &lt;/div&gt;
 
@@ -324,7 +329,7 @@ if ( $page_links )
 &lt;?php if ( empty($comment_status) || 'approved' == $comment_status ): ?&gt;
 &lt;option value=&quot;unapprove&quot;&gt;&lt;?php _e('Unapprove'); ?&gt;&lt;/option&gt;
 &lt;?php endif; ?&gt;
-&lt;?php if ( empty($comment_status) || 'moderated' == $comment_status ): ?&gt;
+&lt;?php if ( empty($comment_status) || 'moderated' == $comment_status || 'spam' == $comment_status ): ?&gt;
 &lt;option value=&quot;approve&quot;&gt;&lt;?php _e('Approve'); ?&gt;&lt;/option&gt;
 &lt;?php endif; ?&gt;
 &lt;?php if ( 'spam' != $comment_status ): ?&gt;</diff>
      <filename>wordpress/wp-admin/edit-comments.php</filename>
    </modified>
    <modified>
      <diff>@@ -118,7 +118,7 @@ function link_categories_meta_box($link) { ?&gt;
 	&lt;p id=&quot;link-category-add&quot; class=&quot;wp-hidden-child&quot;&gt;
 		&lt;label class=&quot;hidden&quot; for=&quot;newcat&quot;&gt;&lt;?php _e( '+ Add New Category' ); ?&gt;&lt;/label&gt;
 		&lt;input type=&quot;text&quot; name=&quot;newcat&quot; id=&quot;newcat&quot; class=&quot;form-required form-input-tip&quot; value=&quot;&lt;?php _e( 'New category name' ); ?&gt;&quot; aria-required=&quot;true&quot; /&gt;
-		&lt;input type=&quot;button&quot; id=&quot;category-add-sumbit&quot; class=&quot;add:categorychecklist:linkcategorydiv button&quot; value=&quot;&lt;?php _e( 'Add' ); ?&gt;&quot; /&gt;
+		&lt;input type=&quot;button&quot; id=&quot;category-add-submit&quot; class=&quot;add:categorychecklist:linkcategorydiv button&quot; value=&quot;&lt;?php _e( 'Add' ); ?&gt;&quot; /&gt;
 		&lt;?php wp_nonce_field( 'add-link-category', '_ajax_nonce', false ); ?&gt;
 		&lt;span id=&quot;category-ajax-response&quot;&gt;&lt;/span&gt;
 	&lt;/p&gt;</diff>
      <filename>wordpress/wp-admin/edit-link-form.php</filename>
    </modified>
    <modified>
      <diff>@@ -550,7 +550,7 @@ class Blogger_Import {
 		$post_status  = isset( $entry-&gt;draft ) ? 'draft' : 'publish';
 
 		// Clean up content
-		$post_content = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $post_content);
+		$post_content = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $post_content);
 		$post_content = str_replace('&lt;br&gt;', '&lt;br /&gt;', $post_content);
 		$post_content = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $post_content);
 
@@ -603,7 +603,7 @@ class Blogger_Import {
 		$comment_content = addslashes( $this-&gt;no_apos( html_entity_decode( $entry-&gt;content ) ) );
 
 		// Clean up content
-		$comment_content = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $comment_content);
+		$comment_content = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $comment_content);
 		$comment_content = str_replace('&lt;br&gt;', '&lt;br /&gt;', $comment_content);
 		$comment_content = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $comment_content);
 </diff>
      <filename>wordpress/wp-admin/import/blogger.php</filename>
    </modified>
    <modified>
      <diff>@@ -89,7 +89,7 @@ class BW_Import {
 			}
 
 			// Clean up content
-			$post_content = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $post_content);
+			$post_content = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $post_content);
 			$post_content = str_replace('&lt;br&gt;', '&lt;br /&gt;', $post_content);
 			$post_content = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $post_content);
 			$post_content = $wpdb-&gt;escape($post_content);
@@ -129,7 +129,7 @@ class BW_Import {
 					$comment_content = $this-&gt;unhtmlentities($comment_content);
 
 					// Clean up content
-					$comment_content = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $comment_content);
+					$comment_content = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $comment_content);
 					$comment_content = str_replace('&lt;br&gt;', '&lt;br /&gt;', $comment_content);
 					$comment_content = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $comment_content);
 					$comment_content = $wpdb-&gt;escape($comment_content);</diff>
      <filename>wordpress/wp-admin/import/blogware.php</filename>
    </modified>
    <modified>
      <diff>@@ -70,7 +70,7 @@ class LJ_Import {
 			$post_content = $this-&gt;unhtmlentities($post_content);
 
 			// Clean up content
-			$post_content = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $post_content);
+			$post_content = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $post_content);
 			$post_content = str_replace('&lt;br&gt;', '&lt;br /&gt;', $post_content);
 			$post_content = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $post_content);
 			$post_content = $wpdb-&gt;escape($post_content);
@@ -106,7 +106,7 @@ class LJ_Import {
 					$comment_content = $this-&gt;unhtmlentities($comment_content);
 
 					// Clean up content
-					$comment_content = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $comment_content);
+					$comment_content = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $comment_content);
 					$comment_content = str_replace('&lt;br&gt;', '&lt;br /&gt;', $comment_content);
 					$comment_content = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $comment_content);
 					$comment_content = $wpdb-&gt;escape($comment_content);</diff>
      <filename>wordpress/wp-admin/import/livejournal.php</filename>
    </modified>
    <modified>
      <diff>@@ -438,8 +438,10 @@ class MT_Import {
 				$ping-&gt;comment_author = $blog;
 			} else {
 				// Processing multi-line field, check context.
-
-				$line .= &quot;\n&quot;;
+				
+				if( !empty($line) )
+					$line .= &quot;\n&quot;;
+					
 				if ( 'body' == $context ) {
 					$post-&gt;post_content .= $line;
 				} else if ( 'extended' ==  $context ) {</diff>
      <filename>wordpress/wp-admin/import/mt.php</filename>
    </modified>
    <modified>
      <diff>@@ -103,7 +103,7 @@ class RSS_Import {
 			}
 
 			// Clean up content
-			$post_content = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $post_content);
+			$post_content = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $post_content);
 			$post_content = str_replace('&lt;br&gt;', '&lt;br /&gt;', $post_content);
 			$post_content = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $post_content);
 </diff>
      <filename>wordpress/wp-admin/import/rss.php</filename>
    </modified>
    <modified>
      <diff>@@ -381,12 +381,12 @@ class WP_Import {
 		$post_author    = $this-&gt;get_tag( $post, 'dc:creator' );
 
 		$post_excerpt = $this-&gt;get_tag( $post, 'excerpt:encoded' );
-		$post_excerpt = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $post_excerpt);
+		$post_excerpt = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $post_excerpt);
 		$post_excerpt = str_replace('&lt;br&gt;', '&lt;br /&gt;', $post_excerpt);
 		$post_excerpt = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $post_excerpt);
 
 		$post_content = $this-&gt;get_tag( $post, 'content:encoded' );
-		$post_content = preg_replace('|&lt;(/?[A-Z]+)|e', &quot;'&lt;' . strtolower('$1')&quot;, $post_content);
+		$post_content = preg_replace_callback('|&lt;(/?[A-Z]+)|', create_function('$match', 'return &quot;&lt;&quot; . strtolower($match[1]);'), $post_content);
 		$post_content = str_replace('&lt;br&gt;', '&lt;br /&gt;', $post_content);
 		$post_content = str_replace('&lt;hr&gt;', '&lt;hr /&gt;', $post_content);
 </diff>
      <filename>wordpress/wp-admin/import/wordpress.php</filename>
    </modified>
    <modified>
      <diff>@@ -142,8 +142,13 @@ function wp_insert_link( $linkdata, $wp_error = false ) {
 	if ( !empty( $link_id ) )
 		$update = true;
 
-	if ( trim( $link_name ) == '' )
-		return 0;
+	if ( trim( $link_name ) == '' ) {
+		if ( trim( $link_url ) != '' ) {
+			$link_name = $link_url;
+		} else {
+			return 0;
+		}
+	}
 
 	if ( trim( $link_url ) == '' )
 		return 0;</diff>
      <filename>wordpress/wp-admin/includes/bookmark.php</filename>
    </modified>
    <modified>
      <diff>@@ -181,12 +181,13 @@ function wp_dashboard_right_now() {
 
 	// Posts
 	$num = number_format_i18n( $num_posts-&gt;publish );
-	if ( current_user_can( 'edit_posts' ) )
-		$text = &quot;&lt;a href='edit.php'&gt;$num&lt;/a&gt;&quot;;
-	else
-		$text = $num;
-	echo '&lt;td class=&quot;first b b-posts&quot;&gt;' . $text . '&lt;/td&gt;';
-	echo '&lt;td class=&quot;t posts&quot;&gt;' . __ngettext( 'Post', 'Posts', intval($num_posts-&gt;publish) ) . '&lt;/td&gt;';
+	$text = __ngettext( 'Post', 'Posts', intval($num_posts-&gt;publish) );
+	if ( current_user_can( 'edit_posts' ) ) {
+		$num = &quot;&lt;a href='edit.php'&gt;$num&lt;/a&gt;&quot;;
+		$text = &quot;&lt;a href='edit.php'&gt;$text&lt;/a&gt;&quot;;
+	}
+	echo '&lt;td class=&quot;first b b-posts&quot;&gt;' . $num . '&lt;/td&gt;';
+	echo '&lt;td class=&quot;t posts&quot;&gt;' . $text . '&lt;/td&gt;';
 	/* TODO: Show status breakdown on hover
 	if ( $can_edit_pages &amp;&amp; !empty($num_pages-&gt;publish) ) { // how many pages is not exposed in feeds.  Don't show if !current_user_can
 		$post_type_texts[] = '&lt;a href=&quot;edit-pages.php&quot;&gt;'.sprintf( __ngettext( '%s page', '%s pages', $num_pages-&gt;publish ), number_format_i18n( $num_pages-&gt;publish ) ).'&lt;/a&gt;';
@@ -206,58 +207,79 @@ function wp_dashboard_right_now() {
 
 	// Total Comments
 	$num = number_format_i18n($num_comm-&gt;total_comments);
-	if ( current_user_can( 'moderate_comments' ) )
+	$text = __ngettext( 'Comment', 'Comments', $num_comm-&gt;total_comments );
+	if ( current_user_can( 'moderate_comments' ) ) {
 		$num = &quot;&lt;a href='edit-comments.php'&gt;$num&lt;/a&gt;&quot;;
-	echo '&lt;td class=&quot;b b-comments&quot;&gt;'.$num.'&lt;/td&gt;';
-	echo '&lt;td class=&quot;last t comments&quot;&gt;' . __ngettext( 'Comment', 'Comments', $num_comm-&gt;total_comments ) . '&lt;/td&gt;';
+		$text = &quot;&lt;a href='edit-comments.php'&gt;$text&lt;/a&gt;&quot;;
+	}
+	echo '&lt;td class=&quot;b b-comments&quot;&gt;' . $num . '&lt;/td&gt;';
+	echo '&lt;td class=&quot;last t comments&quot;&gt;' . $text . '&lt;/td&gt;';
 
 	echo '&lt;/tr&gt;&lt;tr&gt;';
 
 	// Pages
 	$num = number_format_i18n( $num_pages-&gt;publish );
-	if ( current_user_can( 'edit_pages' ) )
+	$text = __ngettext( 'Page', 'Pages', $num_pages-&gt;publish );
+	if ( current_user_can( 'edit_pages' ) ) {
 		$num = &quot;&lt;a href='edit-pages.php'&gt;$num&lt;/a&gt;&quot;;
-	echo '&lt;td class=&quot;first b b_pages&quot;&gt;'.$num.'&lt;/td&gt;';
-	echo '&lt;td class=&quot;t pages&quot;&gt;' . __ngettext( 'Page', 'Pages', $num_pages-&gt;publish ) . '&lt;/td&gt;';
+		$text = &quot;&lt;a href='edit-pages.php'&gt;$text&lt;/a&gt;&quot;;
+	}
+	echo '&lt;td class=&quot;first b b_pages&quot;&gt;' . $num . '&lt;/td&gt;';
+	echo '&lt;td class=&quot;t pages&quot;&gt;' . $text . '&lt;/td&gt;';
 
 	// Approved Comments
 	$num = number_format_i18n($num_comm-&gt;approved);
-	if ( current_user_can( 'moderate_comments' ) )
+	$text = __ngettext( 'Approved', 'Approved', $num_comm-&gt;approved );
+	if ( current_user_can( 'moderate_comments' ) ) {
 		$num = &quot;&lt;a href='edit-comments.php?comment_status=approved'&gt;$num&lt;/a&gt;&quot;;
-	echo '&lt;td class=&quot;b b_approved&quot;&gt;'.$num.'&lt;/td&gt;';
-	echo '&lt;td class=&quot;last t approved&quot;&gt;' . __ngettext( 'Approved', 'Approved', $num_comm-&gt;approved ) . '&lt;/td&gt;';
+		$text = &quot;&lt;a class='approved' href='edit-comments.php?comment_status=approved'&gt;$text&lt;/a&gt;&quot;;
+	}
+	echo '&lt;td class=&quot;b b_approved&quot;&gt;' . $num . '&lt;/td&gt;';
+	echo '&lt;td class=&quot;last t&quot;&gt;' . $text . '&lt;/td&gt;';
 
 	echo &quot;&lt;/tr&gt;\n\t&lt;tr&gt;&quot;;
 
 	// Categories
 	$num = number_format_i18n( $num_cats );
-	if ( current_user_can( 'manage_categories' ) )
+	$text = __ngettext( 'Category', 'Categories', $num_cats );
+	if ( current_user_can( 'manage_categories' ) ) {
 		$num = &quot;&lt;a href='categories.php'&gt;$num&lt;/a&gt;&quot;;
-	echo '&lt;td class=&quot;first b b-cats&quot;&gt;'.$num.'&lt;/td&gt;';
-	echo '&lt;td class=&quot;t cats&quot;&gt;' . __ngettext( 'Category', 'Categories', $num_cats ) . '&lt;/td&gt;';
+		$text = &quot;&lt;a href='categories.php'&gt;$text&lt;/a&gt;&quot;;
+	}
+	echo '&lt;td class=&quot;first b b-cats&quot;&gt;' . $num . '&lt;/td&gt;';
+	echo '&lt;td class=&quot;t cats&quot;&gt;' . $text . '&lt;/td&gt;';
 
 	// Pending Comments
 	$num = number_format_i18n($num_comm-&gt;moderated);
-	if ( current_user_can( 'moderate_comments' ) )
+	$text = __ngettext( 'Pending', 'Pending', $num_comm-&gt;moderated );
+	if ( current_user_can( 'moderate_comments' ) ) {
 		$num = &quot;&lt;a href='edit-comments.php?comment_status=moderated'&gt;&lt;span class='pending-count'&gt;$num&lt;/span&gt;&lt;/a&gt;&quot;;
-	echo '&lt;td class=&quot;b b-waiting&quot;&gt;'.$num.'&lt;/td&gt;';
-	echo '&lt;td class=&quot;last t waiting&quot;&gt;' . __ngettext( 'Pending', 'Pending', $num_comm-&gt;moderated ) . '&lt;/td&gt;';
+		$text = &quot;&lt;a class='waiting' href='edit-comments.php?comment_status=moderated'&gt;$text&lt;/a&gt;&quot;;
+	}
+	echo '&lt;td class=&quot;b b-waiting&quot;&gt;' . $num . '&lt;/td&gt;';
+	echo '&lt;td class=&quot;last t&quot;&gt;' . $text . '&lt;/td&gt;';
 
 	echo &quot;&lt;/tr&gt;\n\t&lt;tr&gt;&quot;;
 
 	// Tags
 	$num = number_format_i18n( $num_tags );
-	if ( current_user_can( 'manage_categories' ) )
+	$text = __ngettext( 'Tag', 'Tags', $num_tags );
+	if ( current_user_can( 'manage_categories' ) ) {
 		$num = &quot;&lt;a href='edit-tags.php'&gt;$num&lt;/a&gt;&quot;;
-	echo '&lt;td class=&quot;first b b-tags&quot;&gt;'.$num.'&lt;/td&gt;';
-	echo '&lt;td class=&quot;t tags&quot;&gt;' . __ngettext( 'Tag', 'Tags', $num_tags ) . '&lt;/td&gt;';
+		$text = &quot;&lt;a href='edit-tags.php'&gt;$text&lt;/a&gt;&quot;;
+	}
+	echo '&lt;td class=&quot;first b b-tags&quot;&gt;' . $num . '&lt;/td&gt;';
+	echo '&lt;td class=&quot;t tags&quot;&gt;' . $text . '&lt;/td&gt;';
 
 	// Spam Comments
 	$num = number_format_i18n($num_comm-&gt;spam);
-	if ( current_user_can( 'moderate_comments' ) )
+	$text = __ngettext( 'Spam', 'Spam', $num_comm-&gt;spam );
+	if ( current_user_can( 'moderate_comments' ) ) {
 		$num = &quot;&lt;a href='edit-comments.php?comment_status=spam'&gt;&lt;span class='spam-count'&gt;$num&lt;/span&gt;&lt;/a&gt;&quot;;
-	echo '&lt;td class=&quot;b b-spam&quot;&gt;'.$num.'&lt;/td&gt;';
-	echo '&lt;td class=&quot;last t spam&quot;&gt;' . __ngettext( 'Spam', 'Spam', $num_comm-&gt;spam ) . '&lt;/td&gt;';
+		$text = &quot;&lt;a class='spam' href='edit-comments.php?comment_status=spam'&gt;$text&lt;/a&gt;&quot;;
+	}
+	echo '&lt;td class=&quot;b b-spam&quot;&gt;' . $num . '&lt;/td&gt;';
+	echo '&lt;td class=&quot;last t&quot;&gt;' . $text . '&lt;/td&gt;';
 
 	echo &quot;&lt;/tr&gt;&quot;;
 	do_action('right_now_table_end');
@@ -281,7 +303,7 @@ function wp_dashboard_right_now() {
 
 	update_right_now_message();
 
-	echo &quot;\n\t&quot;.'&lt;/div&gt;';
+	echo &quot;\n\t&quot;.'&lt;br class=&quot;clear&quot; /&gt;&lt;/div&gt;';
 	do_action( 'rightnow_end' );
 	do_action( 'activity_box_end' );
 }</diff>
      <filename>wordpress/wp-admin/includes/dashboard.php</filename>
    </modified>
    <modified>
      <diff>@@ -667,8 +667,13 @@ function request_filesystem_credentials($form_post, $type = '', $error = false)
 	$credentials['public_key'] = defined('FTP_PUBKEY') ? FTP_PUBKEY : (!empty($_POST['public_key']) ? $_POST['public_key'] : $credentials['public_key']);
 	$credentials['private_key'] = defined('FTP_PRIKEY') ? FTP_PRIKEY : (!empty($_POST['private_key']) ? $_POST['private_key'] : $credentials['private_key']);
 
+	//sanitize the hostname, Some people might pass in odd-data:
+	$credentials['hostname'] = preg_replace('|\w+://|', '', $credentials['hostname']); //Strip any schemes off
+
 	if ( strpos($credentials['hostname'], ':') )
 		list( $credentials['hostname'], $credentials['port'] ) = explode(':', $credentials['hostname'], 2);
+	else
+		unset($credentials['port']);
 
 	if ( defined('FTP_SSH') || (isset($_POST['connection_type']) &amp;&amp; 'ssh' == $_POST['connection_type']) )
 		$credentials['connection_type'] = 'ssh';
@@ -679,7 +684,10 @@ function request_filesystem_credentials($form_post, $type = '', $error = false)
 
 	if ( ! $error &amp;&amp; !empty($credentials['password']) &amp;&amp; !empty($credentials['username']) &amp;&amp; !empty($credentials['hostname']) ) {
 		$stored_credentials = $credentials;
-		unset($stored_credentials['password'], $stored_credentials['private_key'], $stored_credentials['public_key']);
+		if ( !empty($stored_credentials['port']) ) //save port as part of hostname to simplify above code.
+			$stored_credentials['hostname'] .= ':' . $stored_credentials['port'];
+
+		unset($stored_credentials['password'], $stored_credentials['port'], $stored_credentials['private_key'], $stored_credentials['public_key']);
 		update_option('ftp_credentials', $stored_credentials);
 		return $credentials;
 	}</diff>
      <filename>wordpress/wp-admin/includes/file.php</filename>
    </modified>
    <modified>
      <diff>@@ -369,6 +369,11 @@ add_action('media_upload_media', 'media_upload_handler');
 function media_upload_form_handler() {
 	check_admin_referer('media-form');
 
+	if ( isset($_POST['send']) ) {
+		$keys = array_keys($_POST['send']);
+		$send_id = (int) array_shift($keys);
+	}
+	
 	if ( !empty($_POST['attachments']) ) foreach ( $_POST['attachments'] as $attachment_id =&gt; $attachment ) {
 		$post = $_post = get_post($attachment_id, ARRAY_A);
 		if ( isset($attachment['post_content']) )
@@ -379,8 +384,10 @@ function media_upload_form_handler() {
 			$post['post_excerpt'] = $attachment['post_excerpt'];
 		if ( isset($attachment['menu_order']) )
 			$post['menu_order'] = $attachment['menu_order'];
-		if ( isset($attachment['post_parent']) )
-			$post['post_parent'] = $attachment['post_parent'];
+		if ( isset($send_id) &amp;&amp; $attachment_id == $send_id ) {
+			if ( isset($attachment['post_parent']) )
+				$post['post_parent'] = $attachment['post_parent'];
+		}
 
 		$post = apply_filters('attachment_fields_to_save', $post, $attachment);
 
@@ -408,9 +415,7 @@ function media_upload_form_handler() {
 		exit;
 	}
 
-	if ( isset($_POST['send']) ) {
-		$keys = array_keys($_POST['send']);
-		$send_id = (int) array_shift($keys);
+	if ( isset($send_id) ) {
 		$attachment = stripslashes_deep( $_POST['attachments'][$send_id] );
 		$html = $attachment['post_title'];
 		if ( !empty($attachment['url']) ) {</diff>
      <filename>wordpress/wp-admin/includes/media.php</filename>
    </modified>
    <modified>
      <diff>@@ -121,7 +121,7 @@ function _get_plugin_data_markup_translate($plugin_data, $markup = true, $transl
 		else
 			$plugin_data['Title'] = $plugin_data['Name'];
 
-		if ( ! empty($plugin_data['AuthorURI']) )
+		if ( ! empty($plugin_data['AuthorURI']) &amp;&amp; ! empty($plugin_data['Author']) )
 			$plugin_data['Author'] = '&lt;a href=&quot;' . $plugin_data['AuthorURI'] . '&quot; title=&quot;' . __( 'Visit author homepage' ) . '&quot;&gt;' . $plugin_data['Author'] . '&lt;/a&gt;';
 
 		$plugin_data['Description'] = wptexturize( $plugin_data['Description'] );
@@ -862,7 +862,7 @@ function user_can_access_admin_page() {
 
 	$parent = get_admin_page_parent();
 
-	if ( isset( $_wp_submenu_nopriv[$parent][$pagenow] ) )
+	if ( !isset( $plugin_page ) &amp;&amp; isset( $_wp_submenu_nopriv[$parent][$pagenow] ) )
 		return false;
 
 	if ( isset( $plugin_page ) &amp;&amp; isset( $_wp_submenu_nopriv[$parent][$plugin_page] ) )</diff>
      <filename>wordpress/wp-admin/includes/plugin.php</filename>
    </modified>
    <modified>
      <diff>@@ -228,7 +228,7 @@ function bulk_edit_posts( $post_data = null ) {
 	if ( empty($post_data) )
 		$post_data = &amp;$_POST;
 
-	if ( 'page' == $post_data['post_type'] ) {
+	if ( isset($post_data['post_type']) &amp;&amp; 'page' == $post_data['post_type'] ) {
 		if ( ! current_user_can( 'edit_pages' ) )
 			wp_die( __('You are not allowed to edit pages.') );
 	} else {
@@ -236,7 +236,7 @@ function bulk_edit_posts( $post_data = null ) {
 			wp_die( __('You are not allowed to edit posts.') );
 	}
 
-	$post_IDs = array_map( intval, (array) $post_data['post'] );
+	$post_IDs = array_map( 'intval', (array) $post_data['post'] );
 
 	$reset = array( 'post_author', 'post_status', 'post_password', 'post_parent', 'page_template', 'comment_status', 'ping_status', 'keep_private', 'tags_input', 'post_category', 'sticky' );
 	foreach ( $reset as $field ) {
@@ -909,6 +909,8 @@ function get_sample_permalink($id, $title=null, $name = null) {
 		$post-&gt;post_name = sanitize_title($name? $name : $title, $post-&gt;ID);
 	}
 
+	$post-&gt;filter = 'sample'; 
+
 	$permalink = get_permalink($post, true);
 
 	// Handle page hierarchy
@@ -926,6 +928,8 @@ function get_sample_permalink($id, $title=null, $name = null) {
 	$post-&gt;post_status = $original_status;
 	$post-&gt;post_date = $original_date;
 	$post-&gt;post_name = $original_name;
+	unset($post-&gt;filter);
+
 	return $permalink;
 }
 
@@ -1161,9 +1165,9 @@ function wp_tiny_mce( $teeny = false ) {
 
 			if ( ! empty($mce_external_languages) ) {
 				foreach ( $mce_external_languages as $name =&gt; $path ) {
-					if ( is_file($path) &amp;&amp; is_readable($path) ) {
+					if ( @is_file($path) &amp;&amp; @is_readable($path) ) {
 						include_once($path);
-						$ext_plugins .= $strings;
+						$ext_plugins .= $strings . &quot;\n&quot;;
 						$loaded_langs[] = $name;
 					}
 				}
@@ -1184,21 +1188,21 @@ function wp_tiny_mce( $teeny = false ) {
 					if ( function_exists('realpath') )
 						$path = trailingslashit( realpath($path) );
 
-					if ( is_file($path . $mce_locale . '.js') )
-						$strings .= @file_get_contents($path . $mce_locale . '.js');
+					if ( @is_file($path . $mce_locale . '.js') )
+						$strings .= @file_get_contents($path . $mce_locale . '.js') . &quot;\n&quot;;
 
-					if ( is_file($path . $mce_locale . '_dlg.js') )
-						$strings .= @file_get_contents($path . $mce_locale . '_dlg.js');
+					if ( @is_file($path . $mce_locale . '_dlg.js') )
+						$strings .= @file_get_contents($path . $mce_locale . '_dlg.js') . &quot;\n&quot;;
 
 					if ( 'en' != $mce_locale &amp;&amp; empty($strings) ) {
-						if ( is_file($path . 'en.js') ) {
+						if ( @is_file($path . 'en.js') ) {
 							$str1 = @file_get_contents($path . 'en.js');
-							$strings .= preg_replace( '/([\'&quot;])en\./', '$1' . $mce_locale . '.', $str1, 1 );
+							$strings .= preg_replace( '/([\'&quot;])en\./', '$1' . $mce_locale . '.', $str1, 1 ) . &quot;\n&quot;;
 						}
 
-						if ( is_file($path . 'en_dlg.js') ) {
+						if ( @is_file($path . 'en_dlg.js') ) {
 							$str2 = @file_get_contents($path . 'en_dlg.js');
-							$strings .= preg_replace( '/([\'&quot;])en\./', '$1' . $mce_locale . '.', $str2, 1 );
+							$strings .= preg_replace( '/([\'&quot;])en\./', '$1' . $mce_locale . '.', $str2, 1 ) . &quot;\n&quot;;
 						}
 					}
 
@@ -1346,4 +1350,4 @@ tinyMCE.init(tinyMCEPreInit.mceInit);
 
 &lt;?php
 }
-?&gt;
\ No newline at end of file
+?&gt;</diff>
      <filename>wordpress/wp-admin/includes/post.php</filename>
    </modified>
    <modified>
      <diff>@@ -351,7 +351,7 @@ function populate_roles_160() {
 	add_role('subscriber', 'Subscriber|User role');
 
 	// Add caps for Administrator role
-	$role = get_role('administrator');
+	$role =&amp; get_role('administrator');
 	$role-&gt;add_cap('switch_themes');
 	$role-&gt;add_cap('edit_themes');
 	$role-&gt;add_cap('activate_plugins');
@@ -384,7 +384,7 @@ function populate_roles_160() {
 	$role-&gt;add_cap('level_0');
 
 	// Add caps for Editor role
-	$role = get_role('editor');
+	$role =&amp; get_role('editor');
 	$role-&gt;add_cap('moderate_comments');
 	$role-&gt;add_cap('manage_categories');
 	$role-&gt;add_cap('manage_links');
@@ -406,7 +406,7 @@ function populate_roles_160() {
 	$role-&gt;add_cap('level_0');
 
 	// Add caps for Author role
-	$role = get_role('author');
+	$role =&amp; get_role('author');
 	$role-&gt;add_cap('upload_files');
 	$role-&gt;add_cap('edit_posts');
 	$role-&gt;add_cap('edit_published_posts');
@@ -417,14 +417,14 @@ function populate_roles_160() {
 	$role-&gt;add_cap('level_0');
 
 	// Add caps for Contributor role
-	$role = get_role('contributor');
+	$role =&amp; get_role('contributor');
 	$role-&gt;add_cap('edit_posts');
 	$role-&gt;add_cap('read');
 	$role-&gt;add_cap('level_1');
 	$role-&gt;add_cap('level_0');
 
 	// Add caps for Subscriber role
-	$role = get_role('subscriber');
+	$role =&amp; get_role('subscriber');
 	$role-&gt;add_cap('read');
 	$role-&gt;add_cap('level_0');
 }
@@ -437,7 +437,7 @@ function populate_roles_160() {
 function populate_roles_210() {
 	$roles = array('administrator', 'editor');
 	foreach ($roles as $role) {
-		$role = get_role($role);
+		$role =&amp; get_role($role);
 		if ( empty($role) )
 			continue;
 
@@ -458,19 +458,19 @@ function populate_roles_210() {
 		$role-&gt;add_cap('read_private_pages');
 	}
 
-	$role = get_role('administrator');
+	$role =&amp; get_role('administrator');
 	if ( ! empty($role) ) {
 		$role-&gt;add_cap('delete_users');
 		$role-&gt;add_cap('create_users');
 	}
 
-	$role = get_role('author');
+	$role =&amp; get_role('author');
 	if ( ! empty($role) ) {
 		$role-&gt;add_cap('delete_posts');
 		$role-&gt;add_cap('delete_published_posts');
 	}
 
-	$role = get_role('contributor');
+	$role =&amp; get_role('contributor');
 	if ( ! empty($role) ) {
 		$role-&gt;add_cap('delete_posts');
 	}
@@ -482,7 +482,7 @@ function populate_roles_210() {
  * @since 2.3.0
  */
 function populate_roles_230() {
-	$role = get_role( 'administrator' );
+	$role =&amp; get_role( 'administrator' );
 
 	if ( !empty( $role ) ) {
 		$role-&gt;add_cap( 'unfiltered_upload' );
@@ -495,7 +495,7 @@ function populate_roles_230() {
  * @since 2.5.0
  */
 function populate_roles_250() {
-	$role = get_role( 'administrator' );
+	$role =&amp; get_role( 'administrator' );
 
 	if ( !empty( $role ) ) {
 		$role-&gt;add_cap( 'edit_dashboard' );
@@ -508,7 +508,7 @@ function populate_roles_250() {
  * @since 2.6.0
  */
 function populate_roles_260() {
-	$role = get_role( 'administrator' );
+	$role =&amp; get_role( 'administrator' );
 
 	if ( !empty( $role ) ) {
 		$role-&gt;add_cap( 'update_plugins' );
@@ -522,7 +522,7 @@ function populate_roles_260() {
  * @since 2.7.0
  */
 function populate_roles_270() {
-	$role = get_role( 'administrator' );
+	$role =&amp; get_role( 'administrator' );
 
 	if ( !empty( $role ) ) {
 		$role-&gt;add_cap( 'install_plugins' );</diff>
      <filename>wordpress/wp-admin/includes/schema.php</filename>
    </modified>
    <modified>
      <diff>@@ -439,8 +439,10 @@ class Walker_Category_Checklist extends Walker {
  * @param unknown_type $selected_cats
  * @param unknown_type $popular_cats
  */
-function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false ) {
-	$walker = new Walker_Category_Checklist;
+function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null ) {
+	if ( empty($walker) || !is_a($walker, 'Walker') )
+		$walker = new Walker_Category_Checklist;
+
 	$descendants_and_self = (int) $descendants_and_self;
 
 	$args = array();
@@ -2397,7 +2399,7 @@ function touch_time( $edit = 1, $for_post = 1, $tab_index = 0, $multi = 0 ) {
 	global $wp_locale, $post, $comment;
 
 	if ( $for_post )
-		$edit = ( in_array($post-&gt;post_status, array('draft', 'pending') ) &amp;&amp; (!$post-&gt;post_date || '0000-00-00 00:00:00' == $post-&gt;post_date ) ) ? false : true;
+		$edit = ( in_array($post-&gt;post_status, array('draft', 'pending') ) &amp;&amp; (!$post-&gt;post_date_gmt || '0000-00-00 00:00:00' == $post-&gt;post_date_gmt ) ) ? false : true;
 
 	$tab_index_attribute = '';
 	if ( (int) $tab_index &gt; 0 )</diff>
      <filename>wordpress/wp-admin/includes/template.php</filename>
    </modified>
    <modified>
      <diff>@@ -41,4 +41,4 @@ $today = current_time('mysql', 1);
 
 &lt;/div&gt;&lt;!-- wrap --&gt;
 
-&lt;?php require('./admin-footer.php'); ?&gt;
+&lt;?php require(ABSPATH . 'wp-admin/admin-footer.php'); ?&gt;</diff>
      <filename>wordpress/wp-admin/index.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 
-wpCookies = {
+var wpCookies = {
 // The following functions are from Cookie.js class in TinyMCE, Moxiecode, used under LGPL.
 
 	each : function(o, cb, s) {</diff>
      <filename>wordpress/wp-admin/js/common.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 
-switchEditors = {
+var switchEditors = {
 
 	mode : '',
 
@@ -169,4 +169,4 @@ switchEditors = {
 
 		return pee;
 	}
-}
+};</diff>
      <filename>wordpress/wp-admin/js/editor.js</filename>
    </modified>
    <modified>
      <diff>@@ -11,7 +11,7 @@ jQuery(document).ready( function($) {
 
 	// Ajax Cat
 	var newCat = jQuery('#newcat').one( 'focus', function() { jQuery(this).val( '' ).removeClass( 'form-input-tip' ) } );
-	jQuery('#category-add-sumbit').click( function() { newCat.focus(); } );
+	jQuery('#category-add-submit').click( function() { newCat.focus(); } );
 	var noSyncChecks = false; // prophylactic. necessary?
 	var syncChecks = function() {
 		if ( noSyncChecks )</diff>
      <filename>wordpress/wp-admin/js/link.js</filename>
    </modified>
    <modified>
      <diff>@@ -29,8 +29,6 @@ jQuery(function($) {
 		$('#TB_ajaxWindowTitle').html('&lt;strong&gt;' + plugininstallL10n.plugin_information + '&lt;/strong&gt;&amp;nbsp;' + $(this).attr('title') );
 		return false;
 	});
-
-	$(window).resize( function() { tb_position() } );
 });
 
 /* Plugin install related JS*/</diff>
      <filename>wordpress/wp-admin/js/plugin-install.js</filename>
    </modified>
    <modified>
      <diff>@@ -168,7 +168,7 @@ if ( $links ) {
 		$link-&gt;link_name = attribute_escape($link-&gt;link_name);
 		$link-&gt;link_category = wp_get_link_cats($link-&gt;link_id);
 		$short_url = str_replace('http://', '', $link-&gt;link_url);
-		$short_url = str_replace('www.', '', $short_url);
+		$short_url = preg_replace('/^www./i', '', $short_url);
 		if ('/' == substr($short_url, -1))
 			$short_url = substr($short_url, 0, -1);
 		if (strlen($short_url) &gt; 35)</diff>
      <filename>wordpress/wp-admin/link-manager.php</filename>
    </modified>
    <modified>
      <diff>@@ -74,7 +74,7 @@ function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) {
 		} elseif ( $submenu_as_parent &amp;&amp; !empty($submenu[$item[2]]) ) {
 			$submenu[$item[2]] = array_values($submenu[$item[2]]);  // Re-index.
 			$menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]);
-			if ( file_exists(WP_PLUGIN_DIR . &quot;/{$submenu[$item[2]][0][2]}&quot;) || !empty($menu_hook)) {
+			if ( ( file_exists(WP_PLUGIN_DIR . &quot;/{$submenu[$item[2]][0][2]}&quot;) &amp;&amp; ('index.php' != $submenu[$item[2]][0][2]) ) || !empty($menu_hook)) {
 				$admin_is_parent = true;
 				echo &quot;$img$toggle&lt;a href='admin.php?page={$submenu[$item[2]][0][2]}'$class$tabindex&gt;{$item[0]}&lt;/a&gt;&quot;;
 			} else {
@@ -115,7 +115,7 @@ function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) {
 
 				$menu_hook = get_plugin_page_hook($sub_item[2], $item[2]);
 
-				if ( file_exists(WP_PLUGIN_DIR . &quot;/{$sub_item[2]}&quot;) || ! empty($menu_hook) ) {
+				if ( ( file_exists(WP_PLUGIN_DIR . &quot;/{$sub_item[2]}&quot;) &amp;&amp; ('index.php' != $sub_item[2]) ) || ! empty($menu_hook) ) {
 					// If admin.php is the current page or if the parent exists as a file in the plugins or admin dir
 					$parent_exists = (!$admin_is_parent &amp;&amp; file_exists(WP_PLUGIN_DIR . &quot;/{$item[2]}&quot;) &amp;&amp; !is_dir(WP_PLUGIN_DIR . &quot;/{$item[2]}&quot;) ) || file_exists($item[2]);
 					if ( $parent_exists )</diff>
      <filename>wordpress/wp-admin/menu-header.php</filename>
    </modified>
    <modified>
      <diff>@@ -83,7 +83,7 @@ if ( current_user_can('edit_users') ) {
 	$submenu['profile.php'][5] = array(__('Your Profile'), 'read', 'profile.php');
 }
 
-$menu[55] = array( __('Tools'), 'manage_options', 'tools.php', '', 'menu-top', 'menu-tools', 'div' );
+$menu[55] = array( __('Tools'), 'read', 'tools.php', '', 'menu-top', 'menu-tools', 'div' );
 	$submenu['tools.php'][5] = array( __('Tools'), 'read', 'tools.php' );
 	$submenu['tools.php'][10] = array( __('Import'), 'import', 'import.php' );
 	$submenu['tools.php'][15] = array( __('Export'), 'import', 'export.php' );</diff>
      <filename>wordpress/wp-admin/menu.php</filename>
    </modified>
    <modified>
      <diff>@@ -96,7 +96,7 @@ default:
 &lt;?php endif;
 
 $description = get_file_description($file);
-$desc_header = ( $description != $file_show ) ? &quot;$description&lt;/strong&gt; (%s)&quot; : &quot;%s&quot;;
+$desc_header = ( $description != $file_show ) ? &quot;&lt;strong&gt;$description&lt;/strong&gt; (%s)&quot; : &quot;%s&quot;;
 ?&gt;
 &lt;div class=&quot;wrap&quot;&gt;
 &lt;?php screen_icon(); ?&gt;
@@ -120,7 +120,7 @@ $desc_header = ( $description != $file_show ) ? &quot;$description&lt;/strong&gt; (%s)&quot; : &quot;
 &lt;/div&gt;
 &lt;div class=&quot;tablenav&quot;&gt;
 &lt;div class=&quot;alignleft&quot;&gt;
-&lt;big&gt;&lt;strong&gt;&lt;?php echo sprintf($desc_header, $file_show); ?&gt;&lt;/big&gt;
+&lt;big&gt;&lt;?php echo sprintf($desc_header, $file_show); ?&gt;&lt;/big&gt;
 &lt;/div&gt;
 &lt;br class=&quot;clear&quot; /&gt;
 &lt;/div&gt;</diff>
      <filename>wordpress/wp-admin/theme-editor.php</filename>
    </modified>
    <modified>
      <diff>@@ -134,7 +134,11 @@ function core_upgrade_preamble() {
 function do_core_upgrade( $reinstall = false ) {
 	global $wp_filesystem;
 
-	$url = wp_nonce_url('update-core.php?action=do-core-upgrade', 'upgrade-core');
+	if ( $reinstall )
+		$url = 'update-core.php?action=do-core-reinstall';
+	else
+		$url = 'update-core.php?action=do-core-upgrade';
+	$url = wp_nonce_url($url, 'upgrade-core');
 	if ( false === ($credentials = request_filesystem_credentials($url)) )
 		return;
 </diff>
      <filename>wordpress/wp-admin/update-core.php</filename>
    </modified>
    <modified>
      <diff>@@ -15,8 +15,8 @@ p, ul, ol, blockquote { font-size: 12px; }
 	padding: 0;
 }
 
-.plugins .togl {
-	width: 150px;
+.plugins .action-links { 
+	white-space: nowrap;
 }
 
 .import-system {
@@ -435,7 +435,8 @@ textarea.all-options, input.all-options {
 	padding: 2px 4px 0;
 }
 
-#ed_toolbar input {
+#ed_toolbar input,
+#ed_reply_toolbar input {
 	margin: 3px 1px 4px;
 	line-height: 18px;
 	display: inline-block;
@@ -450,6 +451,10 @@ textarea.all-options, input.all-options {
 	border-radius: 3px;
 }
 
+#ed_reply_toolbar input {
+	margin: 1px 2px 1px 1px;
+}
+
 #quicktags #ed_link,
 #ed_reply_toolbar #ed_reply_link {
 	text-decoration: underline;
@@ -1643,6 +1648,7 @@ input#link_url {
 }
 
 #edit-slug-box {
+	height: 1em;
 	margin-top: 8px;
 	padding: 0 7px;
 }
@@ -1854,6 +1860,31 @@ ul.categorychecklist li {
 	line-height: 19px;
 }
 
+#category-adder h4 {
+	margin-top: 4px;
+	margin-bottom: 0px;
+}
+
+#categorydiv .ui-tabs-panel {
+	border-width: 3px;
+	border-style: solid; 
+}
+
+ul#category-tabs {
+	margin-top: 12px;
+}
+
+ul#category-tabs li {
+	padding: 5px 8px;
+	-moz-border-radius: 3px 3px 0 0;
+	-webkit-border-top-left-radius: 3px;
+	-webkit-border-top-right-radius: 3px;
+	-khtml-border-top-left-radius: 3px;
+	-khtml-border-top-right-radius: 3px;
+	border-top-left-radius: 3px;
+	border-top-right-radius: 3px;
+}
+
 /* positioning etc. */
 
 form#tags-filter {
@@ -2252,19 +2283,7 @@ fieldset {
 	padding: 2px 3px;
 }
 
-#replyrow #ed_reply_toolbar input {
-	margin: 1px 2px 1px 1px;
-	min-width: 24px;
-	padding: 3px 4px;
-	font-size: 11px;
-	-moz-border-radius: 3px;
-	-khtml-border-radius: 3px;
-	-webkit-border-radius: 3px;
-	border-radius: 3px;
-}
-
 /* show/hide settings */
-
 #screen-meta {
 	position: relative;
 	clear: both;</diff>
      <filename>wordpress/wp-admin/wp-admin.css</filename>
    </modified>
    <modified>
      <diff>@@ -37,7 +37,7 @@ define('DB_COLLATE', '');
  * Authentication Unique Keys.
  *
  * Change these to different unique phrases!
- * You can generate these using the {@link http://api.wordpress.org/secret-key/1.1/ WordPress.org secret-key service}
+ * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/ WordPress.org secret-key service}
  *
  * @since 2.6.0
  */</diff>
      <filename>wordpress/wp-config-sample.php</filename>
    </modified>
    <modified>
      <filename>wordpress/wp-content/plugins/akismet/akismet.gif</filename>
    </modified>
    <modified>
      <diff>@@ -1,909 +1,909 @@
-&lt;?php
-/*
-Plugin Name: Akismet
-Plugin URI: http://akismet.com/
-Description: Akismet checks your comments against the Akismet web service to see if they look like spam or not. You need a &lt;a href=&quot;http://wordpress.com/api-keys/&quot;&gt;WordPress.com API key&lt;/a&gt; to use it. You can review the spam it catches under &quot;Comments.&quot; To show off your Akismet stats just put &lt;code&gt;&amp;lt;?php akismet_counter(); ?&amp;gt;&lt;/code&gt; in your template. See also: &lt;a href=&quot;http://wordpress.org/extend/plugins/stats/&quot;&gt;WP Stats plugin&lt;/a&gt;.
-Version: 2.2.3
-Author: Matt Mullenweg
-Author URI: http://ma.tt/
-*/
-
-// If you hardcode a WP.com API key here, all key config screens will be hidden
-$wpcom_api_key = '';
-
-function akismet_init() {
-	global $wpcom_api_key, $akismet_api_host, $akismet_api_port;
-
-	if ( $wpcom_api_key )
-		$akismet_api_host = $wpcom_api_key . '.rest.akismet.com';
-	else
-		$akismet_api_host = get_option('wordpress_api_key') . '.rest.akismet.com';
-
-	$akismet_api_port = 80;
-	add_action('admin_menu', 'akismet_config_page');
-	add_action('admin_menu', 'akismet_stats_page');
-}
-add_action('init', 'akismet_init');
-
-function akismet_admin_init() {
-	if ( function_exists( 'get_plugin_page_hook' ) )
-		$hook = get_plugin_page_hook( 'akismet-stats-display', 'index.php' );
-	else
-		$hook = 'dashboard_page_akismet-stats-display';
-	add_action('admin_head-'.$hook, 'akismet_stats_script');
-}
-add_action('admin_init', 'akismet_admin_init');
-
-if ( !function_exists('wp_nonce_field') ) {
-	function akismet_nonce_field($action = -1) { return; }
-	$akismet_nonce = -1;
-} else {
-	function akismet_nonce_field($action = -1) { return wp_nonce_field($action); }
-	$akismet_nonce = 'akismet-update-key';
-}
-
-if ( !function_exists('number_format_i18n') ) {
-	function number_format_i18n( $number, $decimals = null ) { return number_format( $number, $decimals ); }
-}
-
-function akismet_config_page() {
-	if ( function_exists('add_submenu_page') )
-		add_submenu_page('plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf');
-
-}
-
-function akismet_conf() {
-	global $akismet_nonce, $wpcom_api_key;
-
-	if ( isset($_POST['submit']) ) {
-		if ( function_exists('current_user_can') &amp;&amp; !current_user_can('manage_options') )
-			die(__('Cheatin&amp;#8217; uh?'));
-
-		check_admin_referer( $akismet_nonce );
-		$key = preg_replace( '/[^a-h0-9]/i', '', $_POST['key'] );
-
-		if ( empty($key) ) {
-			$key_status = 'empty';
-			$ms[] = 'new_key_empty';
-			delete_option('wordpress_api_key');
-		} else {
-			$key_status = akismet_verify_key( $key );
-		}
-
-		if ( $key_status == 'valid' ) {
-			update_option('wordpress_api_key', $key);
-			$ms[] = 'new_key_valid';
-		} else if ( $key_status == 'invalid' ) {
-			$ms[] = 'new_key_invalid';
-		} else if ( $key_status == 'failed' ) {
-			$ms[] = 'new_key_failed';
-		}
-
-		if ( isset( $_POST['akismet_discard_month'] ) )
-			update_option( 'akismet_discard_month', 'true' );
-		else
-			update_option( 'akismet_discard_month', 'false' );
-	}
-
-	if ( $key_status != 'valid' ) {
-		$key = get_option('wordpress_api_key');
-		if ( empty( $key ) ) {
-			if ( $key_status != 'failed' ) {
-				if ( akismet_verify_key( '1234567890ab' ) == 'failed' )
-					$ms[] = 'no_connection';
-				else
-					$ms[] = 'key_empty';
-			}
-			$key_status = 'empty';
-		} else {
-			$key_status = akismet_verify_key( $key );
-		}
-		if ( $key_status == 'valid' ) {
-			$ms[] = 'key_valid';
-		} else if ( $key_status == 'invalid' ) {
-			delete_option('wordpress_api_key');
-			$ms[] = 'key_empty';
-		} else if ( !empty($key) &amp;&amp; $key_status == 'failed' ) {
-			$ms[] = 'key_failed';
-		}
-	}
-
-	$messages = array(
-		'new_key_empty' =&gt; array('color' =&gt; 'aa0', 'text' =&gt; __('Your key has been cleared.')),
-		'new_key_valid' =&gt; array('color' =&gt; '2d2', 'text' =&gt; __('Your key has been verified. Happy blogging!')),
-		'new_key_invalid' =&gt; array('color' =&gt; 'd22', 'text' =&gt; __('The key you entered is invalid. Please double-check it.')),
-		'new_key_failed' =&gt; array('color' =&gt; 'd22', 'text' =&gt; __('The key you entered could not be verified because a connection to akismet.com could not be established. Please check your server configuration.')),
-		'no_connection' =&gt; array('color' =&gt; 'd22', 'text' =&gt; __('There was a problem connecting to the Akismet server. Please check your server configuration.')),
-		'key_empty' =&gt; array('color' =&gt; 'aa0', 'text' =&gt; sprintf(__('Please enter an API key. (&lt;a href=&quot;%s&quot; style=&quot;color:#fff&quot;&gt;Get your key.&lt;/a&gt;)'), 'http://wordpress.com/profile/')),
-		'key_valid' =&gt; array('color' =&gt; '2d2', 'text' =&gt; __('This key is valid.')),
-		'key_failed' =&gt; array('color' =&gt; 'aa0', 'text' =&gt; __('The key below was previously validated but a connection to akismet.com can not be established at this time. Please check your server configuration.')));
-?&gt;
-&lt;?php if ( !empty($_POST ) ) : ?&gt;
-&lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt;&lt;?php _e('Options saved.') ?&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
-&lt;?php endif; ?&gt;
-&lt;div class=&quot;wrap&quot;&gt;
-&lt;h2&gt;&lt;?php _e('Akismet Configuration'); ?&gt;&lt;/h2&gt;
-&lt;div class=&quot;narrow&quot;&gt;
-&lt;form action=&quot;&quot; method=&quot;post&quot; id=&quot;akismet-conf&quot; style=&quot;margin: auto; width: 400px; &quot;&gt;
-&lt;?php if ( !$wpcom_api_key ) { ?&gt;
-	&lt;p&gt;&lt;?php printf(__('For many people, &lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; will greatly reduce or even completely eliminate the comment and trackback spam you get on your site. If one does happen to get through, simply mark it as &quot;spam&quot; on the moderation screen and Akismet will learn from the mistakes. If you don\'t have a WordPress.com account yet, you can get one at &lt;a href=&quot;%2$s&quot;&gt;WordPress.com&lt;/a&gt;.'), 'http://akismet.com/', 'http://wordpress.com/api-keys/'); ?&gt;&lt;/p&gt;
-
-&lt;?php akismet_nonce_field($akismet_nonce) ?&gt;
-&lt;h3&gt;&lt;label for=&quot;key&quot;&gt;&lt;?php _e('WordPress.com API Key'); ?&gt;&lt;/label&gt;&lt;/h3&gt;
-&lt;?php foreach ( $ms as $m ) : ?&gt;
-	&lt;p style=&quot;padding: .5em; background-color: #&lt;?php echo $messages[$m]['color']; ?&gt;; color: #fff; font-weight: bold;&quot;&gt;&lt;?php echo $messages[$m]['text']; ?&gt;&lt;/p&gt;
-&lt;?php endforeach; ?&gt;
-&lt;p&gt;&lt;input id=&quot;key&quot; name=&quot;key&quot; type=&quot;text&quot; size=&quot;15&quot; maxlength=&quot;12&quot; value=&quot;&lt;?php echo get_option('wordpress_api_key'); ?&gt;&quot; style=&quot;font-family: 'Courier New', Courier, mono; font-size: 1.5em;&quot; /&gt; (&lt;?php _e('&lt;a href=&quot;http://faq.wordpress.com/2005/10/19/api-key/&quot;&gt;What is this?&lt;/a&gt;'); ?&gt;)&lt;/p&gt;
-&lt;?php if ( $invalid_key ) { ?&gt;
-&lt;h3&gt;&lt;?php _e('Why might my key be invalid?'); ?&gt;&lt;/h3&gt;
-&lt;p&gt;&lt;?php _e('This can mean one of two things, either you copied the key wrong or that the plugin is unable to reach the Akismet servers, which is most often caused by an issue with your web host around firewalls or similar.'); ?&gt;&lt;/p&gt;
-&lt;?php } ?&gt;
-&lt;?php } ?&gt;
-&lt;p&gt;&lt;label&gt;&lt;input name=&quot;akismet_discard_month&quot; id=&quot;akismet_discard_month&quot; value=&quot;true&quot; type=&quot;checkbox&quot; &lt;?php if ( get_option('akismet_discard_month') == 'true' ) echo ' checked=&quot;checked&quot; '; ?&gt; /&gt; &lt;?php _e('Automatically discard spam comments on posts older than a month.'); ?&gt;&lt;/label&gt;&lt;/p&gt;
-	&lt;p class=&quot;submit&quot;&gt;&lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;&lt;?php _e('Update options &amp;raquo;'); ?&gt;&quot; /&gt;&lt;/p&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;?php
-}
-
-function akismet_stats_page() {
-	if ( function_exists('add_submenu_page') )
-		add_submenu_page('index.php', __('Akismet Stats'), __('Akismet Stats'), 'manage_options', 'akismet-stats-display', 'akismet_stats_display');
-
-}
-
-function akismet_stats_script() {
-	?&gt;
-&lt;script type=&quot;text/javascript&quot;&gt;
-function resizeIframe() {
-    var height = document.documentElement.clientHeight;
-    height -= document.getElementById('akismet-stats-frame').offsetTop;
-    height += 100; // magic padding
-    
-    document.getElementById('akismet-stats-frame').style.height = height +&quot;px&quot;;
-    
-};
-function resizeIframeInit() {
-	document.getElementById('akismet-stats-frame').onload = resizeIframe;
-	window.onresize = resizeIframe;
-}
-addLoadEvent(resizeIframeInit);
-&lt;/script&gt;&lt;?php
-}
-
-
-function akismet_stats_display() {
-	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
-	$blog = urlencode( get_option('home') );
-	$url = &quot;http://&quot;.get_option('wordpress_api_key').&quot;.web.akismet.com/1.0/user-stats.php?blog={$blog}&quot;;
-	?&gt;
-	&lt;div class=&quot;wrap&quot;&gt;
-	&lt;iframe src=&quot;&lt;?php echo $url; ?&gt;&quot; width=&quot;100%&quot; height=&quot;100%&quot; frameborder=&quot;0&quot; id=&quot;akismet-stats-frame&quot;&gt;&lt;/iframe&gt;
-	&lt;/div&gt;
-	&lt;?php
-}
-
-function akismet_verify_key( $key ) {
-	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
-	$blog = urlencode( get_option('home') );
-	if ( $wpcom_api_key )
-		$key = $wpcom_api_key;
-	$response = akismet_http_post(&quot;key=$key&amp;blog=$blog&quot;, 'rest.akismet.com', '/1.1/verify-key', $akismet_api_port);
-	if ( !is_array($response) || !isset($response[1]) || $response[1] != 'valid' &amp;&amp; $response[1] != 'invalid' )
-		return 'failed';
-	return $response[1];
-}
-
-if ( !get_option('wordpress_api_key') &amp;&amp; !$wpcom_api_key &amp;&amp; !isset($_POST['submit']) ) {
-	function akismet_warning() {
-		echo &quot;
-		&lt;div id='akismet-warning' class='updated fade'&gt;&lt;p&gt;&lt;strong&gt;&quot;.__('Akismet is almost ready.').&quot;&lt;/strong&gt; &quot;.sprintf(__('You must &lt;a href=&quot;%1$s&quot;&gt;enter your WordPress.com API key&lt;/a&gt; for it to work.'), &quot;plugins.php?page=akismet-key-config&quot;).&quot;&lt;/p&gt;&lt;/div&gt;
-		&quot;;
-	}
-	add_action('admin_notices', 'akismet_warning');
-	return;
-}
-
-// Returns array with headers in $response[0] and body in $response[1]
-function akismet_http_post($request, $host, $path, $port = 80) {
-	global $wp_version;
-
-	$http_request  = &quot;POST $path HTTP/1.0\r\n&quot;;
-	$http_request .= &quot;Host: $host\r\n&quot;;
-	$http_request .= &quot;Content-Type: application/x-www-form-urlencoded; charset=&quot; . get_option('blog_charset') . &quot;\r\n&quot;;
-	$http_request .= &quot;Content-Length: &quot; . strlen($request) . &quot;\r\n&quot;;
-	$http_request .= &quot;User-Agent: WordPress/$wp_version | Akismet/2.0\r\n&quot;;
-	$http_request .= &quot;\r\n&quot;;
-	$http_request .= $request;
-
-	$response = '';
-	if( false != ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {
-		fwrite($fs, $http_request);
-
-		while ( !feof($fs) )
-			$response .= fgets($fs, 1160); // One TCP-IP packet
-		fclose($fs);
-		$response = explode(&quot;\r\n\r\n&quot;, $response, 2);
-	}
-	return $response;
-}
-
-function akismet_auto_check_comment( $comment ) {
-	global $akismet_api_host, $akismet_api_port;
-
-	$comment['user_ip']    = preg_replace( '/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR'] );
-	$comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
-	$comment['referrer']   = $_SERVER['HTTP_REFERER'];
-	$comment['blog']       = get_option('home');
-
-	$ignore = array( 'HTTP_COOKIE' );
-
-	foreach ( $_SERVER as $key =&gt; $value )
-		if ( !in_array( $key, $ignore ) )
-			$comment[&quot;$key&quot;] = $value;
-
-	$query_string = '';
-	foreach ( $comment as $key =&gt; $data )
-		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
-
-	$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
-	if ( 'true' == $response[1] ) {
-		add_filter('pre_comment_approved', create_function('$a', 'return \'spam\';'));
-		update_option( 'akismet_spam_count', get_option('akismet_spam_count') + 1 );
-
-		do_action( 'akismet_spam_caught' );
-
-		$post = get_post( $comment['comment_post_ID'] );
-		$last_updated = strtotime( $post-&gt;post_modified_gmt );
-		$diff = time() - $last_updated;
-		$diff = $diff / 86400;
-
-		if ( $post-&gt;post_type == 'post' &amp;&amp; $diff &gt; 30 &amp;&amp; get_option( 'akismet_discard_month' ) == 'true' )
-			die;
-	}
-	akismet_delete_old();
-	return $comment;
-}
-
-function akismet_delete_old() {
-	global $wpdb;
-	$now_gmt = current_time('mysql', 1);
-	$wpdb-&gt;query(&quot;DELETE FROM $wpdb-&gt;comments WHERE DATE_SUB('$now_gmt', INTERVAL 15 DAY) &gt; comment_date_gmt AND comment_approved = 'spam'&quot;);
-	$n = mt_rand(1, 5000);
-	if ( $n == 11 ) // lucky number
-		$wpdb-&gt;query(&quot;OPTIMIZE TABLE $wpdb-&gt;comments&quot;);
-}
-
-function akismet_submit_nonspam_comment ( $comment_id ) {
-	global $wpdb, $akismet_api_host, $akismet_api_port;
-	$comment_id = (int) $comment_id;
-
-	$comment = $wpdb-&gt;get_row(&quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_ID = '$comment_id'&quot;);
-	if ( !$comment ) // it was deleted
-		return;
-	$comment-&gt;blog = get_option('home');
-	$query_string = '';
-	foreach ( $comment as $key =&gt; $data )
-		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
-	$response = akismet_http_post($query_string, $akismet_api_host, &quot;/1.1/submit-ham&quot;, $akismet_api_port);
-}
-
-function akismet_submit_spam_comment ( $comment_id ) {
-	global $wpdb, $akismet_api_host, $akismet_api_port;
-	$comment_id = (int) $comment_id;
-
-	$comment = $wpdb-&gt;get_row(&quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_ID = '$comment_id'&quot;);
-	if ( !$comment ) // it was deleted
-		return;
-	if ( 'spam' != $comment-&gt;comment_approved )
-		return;
-	$comment-&gt;blog = get_option('home');
-	$query_string = '';
-	foreach ( $comment as $key =&gt; $data )
-		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
-
-	$response = akismet_http_post($query_string, $akismet_api_host, &quot;/1.1/submit-spam&quot;, $akismet_api_port);
-}
-
-add_action('wp_set_comment_status', 'akismet_submit_spam_comment');
-add_action('edit_comment', 'akismet_submit_spam_comment');
-add_action('preprocess_comment', 'akismet_auto_check_comment', 1);
-
-function akismet_spamtoham( $comment ) { akismet_submit_nonspam_comment( $comment-&gt;comment_ID ); }
-add_filter( 'comment_spam_to_approved', 'akismet_spamtoham' );
-
-// Total spam in queue
-// get_option( 'akismet_spam_count' ) is the total caught ever
-function akismet_spam_count( $type = false ) {
-	global $wpdb;
-
-	if ( !$type ) { // total
-		$count = wp_cache_get( 'akismet_spam_count', 'widget' );
-		if ( false === $count ) {
-			if ( function_exists('wp_count_comments') ) {
-				$count = wp_count_comments();
-				$count = $count-&gt;spam;
-			} else {
-				$count = (int) $wpdb-&gt;get_var(&quot;SELECT COUNT(comment_ID) FROM $wpdb-&gt;comments WHERE comment_approved = 'spam'&quot;);
-			}
-			wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 );
-		}
-		return $count;
-	} elseif ( 'comments' == $type || 'comment' == $type ) { // comments
-		$type = '';
-	} else { // pingback, trackback, ...
-		$type  = $wpdb-&gt;escape( $type );
-	}
-
-	return (int) $wpdb-&gt;get_var(&quot;SELECT COUNT(comment_ID) FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' AND comment_type='$type'&quot;);
-}
-
-function akismet_spam_comments( $type = false, $page = 1, $per_page = 50 ) {
-	global $wpdb;
-
-	$page = (int) $page;
-	if ( $page &lt; 2 )
-		$page = 1;
-
-	$per_page = (int) $per_page;
-	if ( $per_page &lt; 1 )
-		$per_page = 50;
-
-	$start = ( $page - 1 ) * $per_page;
-	$end = $start + $per_page;
-
-	if ( $type ) {
-		if ( 'comments' == $type || 'comment' == $type )
-			$type = '';
-		else
-			$type = $wpdb-&gt;escape( $type );
-		return $wpdb-&gt;get_results( &quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' AND comment_type='$type' ORDER BY comment_date DESC LIMIT $start, $end&quot;);
-	}
-
-	// All
-	return $wpdb-&gt;get_results( &quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT $start, $end&quot;);
-}
-
-// Totals for each comment type
-// returns array( type =&gt; count, ... )
-function akismet_spam_totals() {
-	global $wpdb;
-	$totals = $wpdb-&gt;get_results( &quot;SELECT comment_type, COUNT(*) AS cc FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' GROUP BY comment_type&quot; );
-	$return = array();
-	foreach ( $totals as $total )
-		$return[$total-&gt;comment_type ? $total-&gt;comment_type : 'comment'] = $total-&gt;cc;
-	return $return;
-}
-
-function akismet_manage_page() {
-	global $wpdb, $submenu, $wp_db_version;
-
-	// WP 2.7 has its own spam management page
-	if ( 8645 &lt;= $wp_db_version )
-		return;
-
-	$count = sprintf(__('Akismet Spam (%s)'), akismet_spam_count());
-	if ( isset( $submenu['edit-comments.php'] ) )
-		add_submenu_page('edit-comments.php', __('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught' );
-	elseif ( function_exists('add_management_page') )
-		add_management_page(__('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught');
-}
-
-function akismet_caught() {
-	global $wpdb, $comment, $akismet_caught, $akismet_nonce;
-
-	akismet_recheck_queue();
-	if (isset($_POST['submit']) &amp;&amp; 'recover' == $_POST['action'] &amp;&amp; ! empty($_POST['not_spam'])) {
-		check_admin_referer( $akismet_nonce );
-		if ( function_exists('current_user_can') &amp;&amp; !current_user_can('moderate_comments') )
-			die(__('You do not have sufficient permission to moderate comments.'));
-
-		$i = 0;
-		foreach ($_POST['not_spam'] as $comment):
-			$comment = (int) $comment;
-			if ( function_exists('wp_set_comment_status') )
-				wp_set_comment_status($comment, 'approve');
-			else
-				$wpdb-&gt;query(&quot;UPDATE $wpdb-&gt;comments SET comment_approved = '1' WHERE comment_ID = '$comment'&quot;);
-			akismet_submit_nonspam_comment($comment);
-			++$i;
-		endforeach;
-		$to = add_query_arg( 'recovered', $i, $_SERVER['HTTP_REFERER'] );
-		wp_redirect( $to );
-		exit;
-	}
-	if ('delete' == $_POST['action']) {
-		check_admin_referer( $akismet_nonce );
-		if ( function_exists('current_user_can') &amp;&amp; !current_user_can('moderate_comments') )
-			die(__('You do not have sufficient permission to moderate comments.'));
-
-		$delete_time = $wpdb-&gt;escape( $_POST['display_time'] );
-		$nuked = $wpdb-&gt;query( &quot;DELETE FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' AND '$delete_time' &gt; comment_date_gmt&quot; );
-		wp_cache_delete( 'akismet_spam_count', 'widget' );
-		$to = add_query_arg( 'deleted', 'all', $_SERVER['HTTP_REFERER'] );
-		wp_redirect( $to );
-		exit;
-	}
-
-if ( isset( $_GET['recovered'] ) ) {
-	$i = (int) $_GET['recovered'];
-	echo '&lt;div class=&quot;updated&quot;&gt;&lt;p&gt;' . sprintf(__('%1$s comments recovered.'), $i) . &quot;&lt;/p&gt;&lt;/div&gt;&quot;;
-}
-
-if (isset( $_GET['deleted'] ) )
-	echo '&lt;div class=&quot;updated&quot;&gt;&lt;p&gt;' . __('All spam deleted.') . '&lt;/p&gt;&lt;/div&gt;';
-
-if ( isset( $GLOBALS['submenu']['edit-comments.php'] ) )
-	$link = 'edit-comments.php';
-else
-	$link = 'edit.php';
-?&gt;
-&lt;style type=&quot;text/css&quot;&gt;
-.akismet-tabs {
-	list-style: none;
-	margin: 0;
-	padding: 0;
-	clear: both;
-	border-bottom: 1px solid #ccc;
-	height: 31px;
-	margin-bottom: 20px;
-	background: #ddd;
-	border-top: 1px solid #bdbdbd;
-}
-.akismet-tabs li {
-	float: left;
-	margin: 5px 0 0 20px;
-}
-.akismet-tabs a {
-	display: block;
-	padding: 4px .5em 3px;
-	border-bottom: none;
-	color: #036;
-}
-.akismet-tabs .active a {
-	background: #fff;
-	border: 1px solid #ccc;
-	border-bottom: none;
-	color: #000;
-	font-weight: bold;
-	padding-bottom: 4px;
-}
-#akismetsearch {
-	float: right;
-	margin-top: -.5em;
-}
-
-#akismetsearch p {
-	margin: 0;
-	padding: 0;
-}
-&lt;/style&gt;
-&lt;div class=&quot;wrap&quot;&gt;
-&lt;h2&gt;&lt;?php _e('Caught Spam') ?&gt;&lt;/h2&gt;
-&lt;?php
-$count = get_option( 'akismet_spam_count' );
-if ( $count ) {
-?&gt;
-&lt;p&gt;&lt;?php printf(__('Akismet has caught &lt;strong&gt;%1$s spam&lt;/strong&gt; for you since you first installed it.'), number_format_i18n($count) ); ?&gt;&lt;/p&gt;
-&lt;?php
-}
-
-$spam_count = akismet_spam_count();
-
-if ( 0 == $spam_count ) {
-	echo '&lt;p&gt;'.__('You have no spam currently in the queue. Must be your lucky day. :)').'&lt;/p&gt;';
-	echo '&lt;/div&gt;';
-} else {
-	echo '&lt;p&gt;'.__('You can delete all of the spam from your database with a single click. This operation cannot be undone, so you may wish to check to ensure that no legitimate comments got through first. Spam is automatically deleted after 15 days, so don&amp;#8217;t sweat it.').'&lt;/p&gt;';
-?&gt;
-&lt;?php if ( !isset( $_POST['s'] ) ) { ?&gt;
-&lt;form method=&quot;post&quot; action=&quot;&lt;?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?&gt;&quot;&gt;
-&lt;?php akismet_nonce_field($akismet_nonce) ?&gt;
-&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;delete&quot; /&gt;
-&lt;?php printf(__('There are currently %1$s comments identified as spam.'), $spam_count); ?&gt;&amp;nbsp; &amp;nbsp; &lt;input type=&quot;submit&quot; class=&quot;button delete&quot; name=&quot;Submit&quot; value=&quot;&lt;?php _e('Delete all'); ?&gt;&quot; /&gt;
-&lt;input type=&quot;hidden&quot; name=&quot;display_time&quot; value=&quot;&lt;?php echo current_time('mysql', 1); ?&gt;&quot; /&gt;
-&lt;/form&gt;
-&lt;?php } ?&gt;
-&lt;/div&gt;
-&lt;div class=&quot;wrap&quot;&gt;
-&lt;?php if ( isset( $_POST['s'] ) ) { ?&gt;
-&lt;h2&gt;&lt;?php _e('Search'); ?&gt;&lt;/h2&gt;
-&lt;?php } else { ?&gt;
-&lt;?php echo '&lt;p&gt;'.__('These are the latest comments identified as spam by Akismet. If you see any mistakes, simply mark the comment as &quot;not spam&quot; and Akismet will learn from the submission. If you wish to recover a comment from spam, simply select the comment, and click Not Spam. After 15 days we clean out the junk for you.').'&lt;/p&gt;'; ?&gt;
-&lt;?php } ?&gt;
-&lt;?php
-if ( isset( $_POST['s'] ) ) {
-	$s = $wpdb-&gt;escape($_POST['s']);
-	$comments = $wpdb-&gt;get_results(&quot;SELECT * FROM $wpdb-&gt;comments  WHERE
-		(comment_author LIKE '%$s%' OR
-		comment_author_email LIKE '%$s%' OR
-		comment_author_url LIKE ('%$s%') OR
-		comment_author_IP LIKE ('%$s%') OR
-		comment_content LIKE ('%$s%') ) AND
-		comment_approved = 'spam'
-		ORDER BY comment_date DESC&quot;);
-} else {
-	if ( isset( $_GET['apage'] ) )
-		$page = (int) $_GET['apage'];
-	else
-		$page = 1;
-
-	if ( $page &lt; 2 )
-		$page = 1;
-
-	$current_type = false;
-	if ( isset( $_GET['ctype'] ) )
-		$current_type = preg_replace( '|[^a-z]|', '', $_GET['ctype'] );
-
-	$comments = akismet_spam_comments( $current_type, $page );
-	$total = akismet_spam_count( $current_type );
-	$totals = akismet_spam_totals();
-?&gt;
-&lt;ul class=&quot;akismet-tabs&quot;&gt;
-&lt;li &lt;?php if ( !isset( $_GET['ctype'] ) ) echo ' class=&quot;active&quot;'; ?&gt;&gt;&lt;a href=&quot;edit-comments.php?page=akismet-admin&quot;&gt;&lt;?php _e('All'); ?&gt;&lt;/a&gt;&lt;/li&gt;
-&lt;?php
-foreach ( $totals as $type =&gt; $type_count ) {
-	if ( 'comment' == $type ) {
-		$type = 'comments';
-		$show = __('Comments');
-	} else {
-		$show = ucwords( $type );
-	}
-	$type_count = number_format_i18n( $type_count );
-	$extra = $current_type === $type ? ' class=&quot;active&quot;' : '';
-	echo &quot;&lt;li $extra&gt;&lt;a href='edit-comments.php?page=akismet-admin&amp;amp;ctype=$type'&gt;$show ($type_count)&lt;/a&gt;&lt;/li&gt;&quot;;
-}
-do_action( 'akismet_tabs' ); // so plugins can add more tabs easily
-?&gt;
-&lt;/ul&gt;
-&lt;?php
-}
-
-if ($comments) {
-?&gt;
-&lt;form method=&quot;post&quot; action=&quot;&lt;?php echo attribute_escape(&quot;$link?page=akismet-admin&quot;); ?&gt;&quot; id=&quot;akismetsearch&quot;&gt;
-&lt;p&gt;  &lt;input type=&quot;text&quot; name=&quot;s&quot; value=&quot;&lt;?php if (isset($_POST['s'])) echo attribute_escape($_POST['s']); ?&gt;&quot; size=&quot;17&quot; /&gt;
-  &lt;input type=&quot;submit&quot; class=&quot;button&quot; name=&quot;submit&quot; value=&quot;&lt;?php echo attribute_escape(__('Search Spam &amp;raquo;')) ?&gt;&quot;  /&gt;  &lt;/p&gt;
-&lt;/form&gt;
-&lt;?php if ( $total &gt; 50 ) {
-$total_pages = ceil( $total / 50 );
-$r = '';
-if ( 1 &lt; $page ) {
-	$args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1;
-	$r .=  '&lt;a class=&quot;prev&quot; href=&quot;' . clean_url(add_query_arg( $args )) . '&quot;&gt;'. __('&amp;laquo; Previous Page') .'&lt;/a&gt;' . &quot;\n&quot;;
-}
-if ( ( $total_pages = ceil( $total / 50 ) ) &gt; 1 ) {
-	for ( $page_num = 1; $page_num &lt;= $total_pages; $page_num++ ) :
-		if ( $page == $page_num ) :
-			$r .=  &quot;&lt;strong&gt;$page_num&lt;/strong&gt;\n&quot;;
-		else :
-			$p = false;
-			if ( $page_num &lt; 3 || ( $page_num &gt;= $page - 3 &amp;&amp; $page_num &lt;= $page + 3 ) || $page_num &gt; $total_pages - 3 ) :
-				$args['apage'] = ( 1 == $page_num ) ? '' : $page_num;
-				$r .= '&lt;a class=&quot;page-numbers&quot; href=&quot;' . clean_url(add_query_arg($args)) . '&quot;&gt;' . ( $page_num ) . &quot;&lt;/a&gt;\n&quot;;
-				$in = true;
-			elseif ( $in == true ) :
-				$r .= &quot;...\n&quot;;
-				$in = false;
-			endif;
-		endif;
-	endfor;
-}
-if ( ( $page ) * 50 &lt; $total || -1 == $total ) {
-	$args['apage'] = $page + 1;
-	$r .=  '&lt;a class=&quot;next&quot; href=&quot;' . clean_url(add_query_arg($args)) . '&quot;&gt;'. __('Next Page &amp;raquo;') .'&lt;/a&gt;' . &quot;\n&quot;;
-}
-echo &quot;&lt;p&gt;$r&lt;/p&gt;&quot;;
-?&gt;
-
-&lt;?php } ?&gt;
-&lt;form style=&quot;clear: both;&quot; method=&quot;post&quot; action=&quot;&lt;?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?&gt;&quot;&gt;
-&lt;?php akismet_nonce_field($akismet_nonce) ?&gt;
-&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;recover&quot; /&gt;
-&lt;ul id=&quot;spam-list&quot; class=&quot;commentlist&quot; style=&quot;list-style: none; margin: 0; padding: 0;&quot;&gt;
-&lt;?php
-$i = 0;
-foreach($comments as $comment) {
-	$i++;
-	$comment_date = mysql2date(get_option(&quot;date_format&quot;) . &quot; @ &quot; . get_option(&quot;time_format&quot;), $comment-&gt;comment_date);
-	$post = get_post($comment-&gt;comment_post_ID);
-	$post_title = $post-&gt;post_title;
-	if ($i % 2) $class = 'class=&quot;alternate&quot;';
-	else $class = '';
-	echo &quot;\n\t&lt;li id='comment-$comment-&gt;comment_ID' $class&gt;&quot;;
-	?&gt;
-
-&lt;p&gt;&lt;strong&gt;&lt;?php comment_author() ?&gt;&lt;/strong&gt; &lt;?php if ($comment-&gt;comment_author_email) { ?&gt;| &lt;?php comment_author_email_link() ?&gt; &lt;?php } if ($comment-&gt;comment_author_url &amp;&amp; 'http://' != $comment-&gt;comment_author_url) { ?&gt; | &lt;?php comment_author_url_link() ?&gt; &lt;?php } ?&gt;| &lt;?php _e('IP:') ?&gt; &lt;a href=&quot;http://ws.arin.net/cgi-bin/whois.pl?queryinput=&lt;?php comment_author_IP() ?&gt;&quot;&gt;&lt;?php comment_author_IP() ?&gt;&lt;/a&gt;&lt;/p&gt;
-
-&lt;?php comment_text() ?&gt;
-
-&lt;p&gt;&lt;label for=&quot;spam-&lt;?php echo $comment-&gt;comment_ID; ?&gt;&quot;&gt;
-&lt;input type=&quot;checkbox&quot; id=&quot;spam-&lt;?php echo $comment-&gt;comment_ID; ?&gt;&quot; name=&quot;not_spam[]&quot; value=&quot;&lt;?php echo $comment-&gt;comment_ID; ?&gt;&quot; /&gt;
-&lt;?php _e('Not Spam') ?&gt;&lt;/label&gt; &amp;#8212; &lt;?php comment_date('M j, g:i A');  ?&gt; &amp;#8212; [
-&lt;?php
-$post = get_post($comment-&gt;comment_post_ID);
-$post_title = wp_specialchars( $post-&gt;post_title, 'double' );
-$post_title = ('' == $post_title) ? &quot;# $comment-&gt;comment_post_ID&quot; : $post_title;
-?&gt;
- &lt;a href=&quot;&lt;?php echo get_permalink($comment-&gt;comment_post_ID); ?&gt;&quot; title=&quot;&lt;?php echo $post_title; ?&gt;&quot;&gt;&lt;?php _e('View Post') ?&gt;&lt;/a&gt; ] &lt;/p&gt;
-
-
-&lt;?php
-}
-?&gt;
-&lt;/ul&gt;
-&lt;?php if ( $total &gt; 50 ) {
-$total_pages = ceil( $total / 50 );
-$r = '';
-if ( 1 &lt; $page ) {
-	$args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1;
-	$r .=  '&lt;a class=&quot;prev&quot; href=&quot;' . clean_url(add_query_arg( $args )) . '&quot;&gt;'. __('&amp;laquo; Previous Page') .'&lt;/a&gt;' . &quot;\n&quot;;
-}
-if ( ( $total_pages = ceil( $total / 50 ) ) &gt; 1 ) {
-	for ( $page_num = 1; $page_num &lt;= $total_pages; $page_num++ ) :
-		if ( $page == $page_num ) :
-			$r .=  &quot;&lt;strong&gt;$page_num&lt;/strong&gt;\n&quot;;
-		else :
-			$p = false;
-			if ( $page_num &lt; 3 || ( $page_num &gt;= $page - 3 &amp;&amp; $page_num &lt;= $page + 3 ) || $page_num &gt; $total_pages - 3 ) :
-				$args['apage'] = ( 1 == $page_num ) ? '' : $page_num;
-				$r .= '&lt;a class=&quot;page-numbers&quot; href=&quot;' . clean_url(add_query_arg($args)) . '&quot;&gt;' . ( $page_num ) . &quot;&lt;/a&gt;\n&quot;;
-				$in = true;
-			elseif ( $in == true ) :
-				$r .= &quot;...\n&quot;;
-				$in = false;
-			endif;
-		endif;
-	endfor;
-}
-if ( ( $page ) * 50 &lt; $total || -1 == $total ) {
-	$args['apage'] = $page + 1;
-	$r .=  '&lt;a class=&quot;next&quot; href=&quot;' . clean_url(add_query_arg($args)) . '&quot;&gt;'. __('Next Page &amp;raquo;') .'&lt;/a&gt;' . &quot;\n&quot;;
-}
-echo &quot;&lt;p&gt;$r&lt;/p&gt;&quot;;
-}
-?&gt;
-&lt;p class=&quot;submit&quot;&gt;
-&lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;&lt;?php echo attribute_escape(__('De-spam marked comments &amp;raquo;')); ?&gt;&quot; /&gt;
-&lt;/p&gt;
-&lt;p&gt;&lt;?php _e('Comments you de-spam will be submitted to Akismet as mistakes so it can learn and get better.'); ?&gt;&lt;/p&gt;
-&lt;/form&gt;
-&lt;?php
-} else {
-?&gt;
-&lt;p&gt;&lt;?php _e('No results found.'); ?&gt;&lt;/p&gt;
-&lt;?php } ?&gt;
-
-&lt;?php if ( !isset( $_POST['s'] ) ) { ?&gt;
-&lt;form method=&quot;post&quot; action=&quot;&lt;?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?&gt;&quot;&gt;
-&lt;?php akismet_nonce_field($akismet_nonce) ?&gt;
-&lt;p&gt;&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;delete&quot; /&gt;
-&lt;?php printf(__('There are currently %1$s comments identified as spam.'), $spam_count); ?&gt;&amp;nbsp; &amp;nbsp; &lt;input type=&quot;submit&quot; name=&quot;Submit&quot; class=&quot;button&quot; value=&quot;&lt;?php echo attribute_escape(__('Delete all')); ?&gt;&quot; /&gt;
-&lt;input type=&quot;hidden&quot; name=&quot;display_time&quot; value=&quot;&lt;?php echo current_time('mysql', 1); ?&gt;&quot; /&gt;&lt;/p&gt;
-&lt;/form&gt;
-&lt;?php } ?&gt;
-&lt;/div&gt;
-&lt;?php
-	}
-}
-
-add_action('admin_menu', 'akismet_manage_page');
-
-// WP &lt; 2.5
-function akismet_stats() {
-	if ( !function_exists('did_action') || did_action( 'rightnow_end' ) ) // We already displayed this info in the &quot;Right Now&quot; section
-		return;
-	if ( !$count = get_option('akismet_spam_count') )
-		return;
-	$path = plugin_basename(__FILE__);
-	echo '&lt;h3&gt;'.__('Spam').'&lt;/h3&gt;';
-	global $submenu;
-	if ( isset( $submenu['edit-comments.php'] ) )
-		$link = 'edit-comments.php';
-	else
-		$link = 'edit.php';
-	echo '&lt;p&gt;'.sprintf(__('&lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; has protected your site from &lt;a href=&quot;%2$s&quot;&gt;%3$s spam comments&lt;/a&gt;.'), 'http://akismet.com/', clean_url(&quot;$link?page=akismet-admin&quot;), number_format_i18n($count) ).'&lt;/p&gt;';
-}
-
-add_action('activity_box_end', 'akismet_stats');
-
-// WP 2.5+
-function akismet_rightnow() {
-	global $submenu, $wp_db_version;
-
-	if ( 8645 &lt; $wp_db_version  ) // 2.7
-		$link = 'edit-comments.php?comment_status=spam';
-	elseif ( isset( $submenu['edit-comments.php'] ) )
-		$link = 'edit-comments.php?page=akismet-admin';
-	else
-		$link = 'edit.php?page=akismet-admin';
-
-	if ( $count = get_option('akismet_spam_count') ) {
-		$intro = sprintf( __ngettext(
-			'&lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; has protected your site from %2$s spam comment already,',
-			'&lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; has protected your site from %2$s spam comments already,',
-			$count
-		), 'http://akismet.com/', number_format_i18n( $count ) );
-	} else {
-		$intro = sprintf( __('&lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; blocks spam from getting to your blog,'), 'http://akismet.com/' );
-	}
-
-	if ( $queue_count = akismet_spam_count() ) {
-		$queue_text = sprintf( __ngettext(
-			'and there\'s &lt;a href=&quot;%2$s&quot;&gt;%1$s comment&lt;/a&gt; in your spam queue right now.',
-			'and there are &lt;a href=&quot;%2$s&quot;&gt;%1$s comments&lt;/a&gt; in your spam queue right now.',
-			$queue_count
-		), number_format_i18n( $queue_count ), clean_url($link) );
-	} else {
-		$queue_text = sprintf( __( &quot;but there's nothing in your &lt;a href='%1\$s'&gt;spam queue&lt;/a&gt; at the moment.&quot; ), clean_url($link) );
-	}
-
-	$text = sprintf( _c( '%1$s %2$s|akismet_rightnow' ), $intro, $queue_text );
-
-	echo &quot;&lt;p class='akismet-right-now'&gt;$text&lt;/p&gt;\n&quot;;
-}
-	
-add_action('rightnow_end', 'akismet_rightnow');
-
-// For WP &lt;= 2.3.x
-if ( 'moderation.php' == $pagenow ) {
-	function akismet_recheck_button( $page ) {
-		global $submenu;
-		if ( isset( $submenu['edit-comments.php'] ) )
-			$link = 'edit-comments.php';
-		else
-			$link = 'edit.php';
-		$button = &quot;&lt;a href='$link?page=akismet-admin&amp;amp;recheckqueue=true&amp;amp;noheader=true' style='display: block; width: 100px; position: absolute; right: 7%; padding: 5px; font-size: 14px; text-decoration: underline; background: #fff; border: 1px solid #ccc;'&gt;&quot; . __('Recheck Queue for Spam') . &quot;&lt;/a&gt;&quot;;
-		$page = str_replace( '&lt;div class=&quot;wrap&quot;&gt;', '&lt;div class=&quot;wrap&quot;&gt;' . $button, $page );
-		return $page;
-	}
-
-	if ( $wpdb-&gt;get_var( &quot;SELECT COUNT(*) FROM $wpdb-&gt;comments WHERE comment_approved = '0'&quot; ) )
-		ob_start( 'akismet_recheck_button' );
-}
-
-// For WP &gt;= 2.5
-function akismet_check_for_spam_button($comment_status) {
-	if ( 'approved' == $comment_status )
-		return;
-	if ( function_exists('plugins_url') )
-		$link = 'admin.php?action=akismet_recheck_queue';
-	else
-		$link = 'edit-comments.php?page=akismet-admin&amp;amp;recheckqueue=true&amp;amp;noheader=true';
-	echo &quot;&lt;/div&gt;&lt;div class='alignleft'&gt;&lt;a class='button-secondary checkforspam' href='$link'&gt;&quot; . __('Check for Spam') . &quot;&lt;/a&gt;&quot;;
-}
-add_action('manage_comments_nav', 'akismet_check_for_spam_button');
-
-function akismet_recheck_queue() {
-	global $wpdb, $akismet_api_host, $akismet_api_port;
-
-	if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) &amp;&amp; 'akismet_recheck_queue' == $_REQUEST['action'] ) ) )
-		return;
-
-	$moderation = $wpdb-&gt;get_results( &quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_approved = '0'&quot;, ARRAY_A );
-	foreach ( (array) $moderation as $c ) {
-		$c['user_ip']    = $c['comment_author_IP'];
-		$c['user_agent'] = $c['comment_agent'];
-		$c['referrer']   = '';
-		$c['blog']       = get_option('home');
-		$id = (int) $c['comment_ID'];
-
-		$query_string = '';
-		foreach ( $c as $key =&gt; $data )
-		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
-
-		$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
-		if ( 'true' == $response[1] ) {
-			$wpdb-&gt;query( &quot;UPDATE $wpdb-&gt;comments SET comment_approved = 'spam' WHERE comment_ID = $id&quot; );
-		}
-	}
-	wp_redirect( $_SERVER['HTTP_REFERER'] );
-	exit;
-}
-
-add_action('admin_action_akismet_recheck_queue', 'akismet_recheck_queue');
-
-function akismet_check_db_comment( $id ) {
-	global $wpdb, $akismet_api_host, $akismet_api_port;
-
-	$id = (int) $id;
-	$c = $wpdb-&gt;get_row( &quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_ID = '$id'&quot;, ARRAY_A );
-	if ( !$c )
-		return;
-
-	$c['user_ip']    = $c['comment_author_IP'];
-	$c['user_agent'] = $c['comment_agent'];
-	$c['referrer']   = '';
-	$c['blog']       = get_option('home');
-	$id = $c['comment_ID'];
-
-	$query_string = '';
-	foreach ( $c as $key =&gt; $data )
-	$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
-
-	$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
-	return $response[1];
-}
-
-// This option causes tons of FPs, was removed in 2.1
-function akismet_kill_proxy_check( $option ) { return 0; }
-add_filter('option_open_proxy_check', 'akismet_kill_proxy_check');
-
-// Widget stuff
-function widget_akismet_register() {
-	if ( function_exists('register_sidebar_widget') ) :
-	function widget_akismet($args) {
-		extract($args);
-		$options = get_option('widget_akismet');
-		$count = number_format_i18n(get_option('akismet_spam_count'));
-		?&gt;
-			&lt;?php echo $before_widget; ?&gt;
-				&lt;?php echo $before_title . $options['title'] . $after_title; ?&gt;
-				&lt;div id=&quot;akismetwrap&quot;&gt;&lt;div id=&quot;akismetstats&quot;&gt;&lt;a id=&quot;aka&quot; href=&quot;http://akismet.com&quot; title=&quot;&quot;&gt;&lt;?php printf( __( '%1$s %2$sspam comments%3$s %4$sblocked by%5$s&lt;br /&gt;%6$sAkismet%7$s' ), '&lt;div id=&quot;akismet1&quot;&gt;&lt;span id=&quot;akismetcount&quot;&gt;' . $count . '&lt;/span&gt;', '&lt;span id=&quot;akismetsc&quot;&gt;', '&lt;/span&gt;&lt;/div&gt;', '&lt;div id=&quot;akismet2&quot;&gt;&lt;span id=&quot;akismetbb&quot;&gt;', '&lt;/span&gt;', '&lt;span id=&quot;akismeta&quot;&gt;', '&lt;/span&gt;&lt;/div&gt;' ); ?&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
-			&lt;?php echo $after_widget; ?&gt;
-	&lt;?php
-	}
-
-	function widget_akismet_style() {
-		?&gt;
-&lt;style type=&quot;text/css&quot;&gt;
-#aka,#aka:link,#aka:hover,#aka:visited,#aka:active{color:#fff;text-decoration:none}
-#aka:hover{border:none;text-decoration:none}
-#aka:hover #akismet1{display:none}
-#aka:hover #akismet2,#akismet1{display:block}
-#akismet2{display:none;padding-top:2px}
-#akismeta{font-size:16px;font-weight:bold;line-height:18px;text-decoration:none}
-#akismetcount{display:block;font:15px Verdana,Arial,Sans-Serif;font-weight:bold;text-decoration:none}
-#akismetwrap #akismetstats{background:url(&lt;?php echo get_option('siteurl'); ?&gt;/wp-content/plugins/akismet/akismet.gif) no-repeat top left;border:none;color:#fff;font:11px 'Trebuchet MS','Myriad Pro',sans-serif;height:40px;line-height:100%;overflow:hidden;padding:8px 0 0;text-align:center;width:120px}
-&lt;/style&gt;
-		&lt;?php
-	}
-
-	function widget_akismet_control() {
-		$options = $newoptions = get_option('widget_akismet');
-		if ( $_POST[&quot;akismet-submit&quot;] ) {
-			$newoptions['title'] = strip_tags(stripslashes($_POST[&quot;akismet-title&quot;]));
-			if ( empty($newoptions['title']) ) $newoptions['title'] = 'Spam Blocked';
-		}
-		if ( $options != $newoptions ) {
-			$options = $newoptions;
-			update_option('widget_akismet', $options);
-		}
-		$title = htmlspecialchars($options['title'], ENT_QUOTES);
-	?&gt;
-				&lt;p&gt;&lt;label for=&quot;akismet-title&quot;&gt;&lt;?php _e('Title:'); ?&gt; &lt;input style=&quot;width: 250px;&quot; id=&quot;akismet-title&quot; name=&quot;akismet-title&quot; type=&quot;text&quot; value=&quot;&lt;?php echo $title; ?&gt;&quot; /&gt;&lt;/label&gt;&lt;/p&gt;
-				&lt;input type=&quot;hidden&quot; id=&quot;akismet-submit&quot; name=&quot;akismet-submit&quot; value=&quot;1&quot; /&gt;
-	&lt;?php
-	}
-
-	register_sidebar_widget('Akismet', 'widget_akismet', null, 'akismet');
-	register_widget_control('Akismet', 'widget_akismet_control', null, 75, 'akismet');
-	if ( is_active_widget('widget_akismet') )
-		add_action('wp_head', 'widget_akismet_style');
-	endif;
-}
-
-add_action('init', 'widget_akismet_register');
-
-// Counter for non-widget users
-function akismet_counter() {
-?&gt;
-&lt;style type=&quot;text/css&quot;&gt;
-#akismetwrap #aka,#aka:link,#aka:hover,#aka:visited,#aka:active{color:#fff;text-decoration:none}
-#aka:hover{border:none;text-decoration:none}
-#aka:hover #akismet1{display:none}
-#aka:hover #akismet2,#akismet1{display:block}
-#akismet2{display:none;padding-top:2px}
-#akismeta{font-size:16px;font-weight:bold;line-height:18px;text-decoration:none}
-#akismetcount{display:block;font:15px Verdana,Arial,Sans-Serif;font-weight:bold;text-decoration:none}
-#akismetwrap #akismetstats{background:url(&lt;?php echo get_option('siteurl'); ?&gt;/wp-content/plugins/akismet/akismet.gif) no-repeat top left;border:none;color:#fff;font:11px 'Trebuchet MS','Myriad Pro',sans-serif;height:40px;line-height:100%;overflow:hidden;padding:8px 0 0;text-align:center;width:120px}
-&lt;/style&gt;
-&lt;?php
-$count = number_format_i18n(get_option('akismet_spam_count'));
-?&gt;
-&lt;div id=&quot;akismetwrap&quot;&gt;&lt;div id=&quot;akismetstats&quot;&gt;&lt;a id=&quot;aka&quot; href=&quot;http://akismet.com&quot; title=&quot;&quot;&gt;&lt;div id=&quot;akismet1&quot;&gt;&lt;span id=&quot;akismetcount&quot;&gt;&lt;?php echo $count; ?&gt;&lt;/span&gt; &lt;span id=&quot;akismetsc&quot;&gt;&lt;?php _e('spam comments') ?&gt;&lt;/span&gt;&lt;/div&gt; &lt;div id=&quot;akismet2&quot;&gt;&lt;span id=&quot;akismetbb&quot;&gt;&lt;?php _e('blocked by') ?&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;akismeta&quot;&gt;Akismet&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
-&lt;?php
-}
-
-?&gt;
+&lt;?php
+/*
+Plugin Name: Akismet
+Plugin URI: http://akismet.com/
+Description: Akismet checks your comments against the Akismet web service to see if they look like spam or not. You need a &lt;a href=&quot;http://wordpress.com/api-keys/&quot;&gt;WordPress.com API key&lt;/a&gt; to use it. You can review the spam it catches under &quot;Comments.&quot; To show off your Akismet stats just put &lt;code&gt;&amp;lt;?php akismet_counter(); ?&amp;gt;&lt;/code&gt; in your template. See also: &lt;a href=&quot;http://wordpress.org/extend/plugins/stats/&quot;&gt;WP Stats plugin&lt;/a&gt;.
+Version: 2.2.3
+Author: Matt Mullenweg
+Author URI: http://ma.tt/
+*/
+
+// If you hardcode a WP.com API key here, all key config screens will be hidden
+$wpcom_api_key = '';
+
+function akismet_init() {
+	global $wpcom_api_key, $akismet_api_host, $akismet_api_port;
+
+	if ( $wpcom_api_key )
+		$akismet_api_host = $wpcom_api_key . '.rest.akismet.com';
+	else
+		$akismet_api_host = get_option('wordpress_api_key') . '.rest.akismet.com';
+
+	$akismet_api_port = 80;
+	add_action('admin_menu', 'akismet_config_page');
+	add_action('admin_menu', 'akismet_stats_page');
+}
+add_action('init', 'akismet_init');
+
+function akismet_admin_init() {
+	if ( function_exists( 'get_plugin_page_hook' ) )
+		$hook = get_plugin_page_hook( 'akismet-stats-display', 'index.php' );
+	else
+		$hook = 'dashboard_page_akismet-stats-display';
+	add_action('admin_head-'.$hook, 'akismet_stats_script');
+}
+add_action('admin_init', 'akismet_admin_init');
+
+if ( !function_exists('wp_nonce_field') ) {
+	function akismet_nonce_field($action = -1) { return; }
+	$akismet_nonce = -1;
+} else {
+	function akismet_nonce_field($action = -1) { return wp_nonce_field($action); }
+	$akismet_nonce = 'akismet-update-key';
+}
+
+if ( !function_exists('number_format_i18n') ) {
+	function number_format_i18n( $number, $decimals = null ) { return number_format( $number, $decimals ); }
+}
+
+function akismet_config_page() {
+	if ( function_exists('add_submenu_page') )
+		add_submenu_page('plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf');
+
+}
+
+function akismet_conf() {
+	global $akismet_nonce, $wpcom_api_key;
+
+	if ( isset($_POST['submit']) ) {
+		if ( function_exists('current_user_can') &amp;&amp; !current_user_can('manage_options') )
+			die(__('Cheatin&amp;#8217; uh?'));
+
+		check_admin_referer( $akismet_nonce );
+		$key = preg_replace( '/[^a-h0-9]/i', '', $_POST['key'] );
+
+		if ( empty($key) ) {
+			$key_status = 'empty';
+			$ms[] = 'new_key_empty';
+			delete_option('wordpress_api_key');
+		} else {
+			$key_status = akismet_verify_key( $key );
+		}
+
+		if ( $key_status == 'valid' ) {
+			update_option('wordpress_api_key', $key);
+			$ms[] = 'new_key_valid';
+		} else if ( $key_status == 'invalid' ) {
+			$ms[] = 'new_key_invalid';
+		} else if ( $key_status == 'failed' ) {
+			$ms[] = 'new_key_failed';
+		}
+
+		if ( isset( $_POST['akismet_discard_month'] ) )
+			update_option( 'akismet_discard_month', 'true' );
+		else
+			update_option( 'akismet_discard_month', 'false' );
+	}
+
+	if ( $key_status != 'valid' ) {
+		$key = get_option('wordpress_api_key');
+		if ( empty( $key ) ) {
+			if ( $key_status != 'failed' ) {
+				if ( akismet_verify_key( '1234567890ab' ) == 'failed' )
+					$ms[] = 'no_connection';
+				else
+					$ms[] = 'key_empty';
+			}
+			$key_status = 'empty';
+		} else {
+			$key_status = akismet_verify_key( $key );
+		}
+		if ( $key_status == 'valid' ) {
+			$ms[] = 'key_valid';
+		} else if ( $key_status == 'invalid' ) {
+			delete_option('wordpress_api_key');
+			$ms[] = 'key_empty';
+		} else if ( !empty($key) &amp;&amp; $key_status == 'failed' ) {
+			$ms[] = 'key_failed';
+		}
+	}
+
+	$messages = array(
+		'new_key_empty' =&gt; array('color' =&gt; 'aa0', 'text' =&gt; __('Your key has been cleared.')),
+		'new_key_valid' =&gt; array('color' =&gt; '2d2', 'text' =&gt; __('Your key has been verified. Happy blogging!')),
+		'new_key_invalid' =&gt; array('color' =&gt; 'd22', 'text' =&gt; __('The key you entered is invalid. Please double-check it.')),
+		'new_key_failed' =&gt; array('color' =&gt; 'd22', 'text' =&gt; __('The key you entered could not be verified because a connection to akismet.com could not be established. Please check your server configuration.')),
+		'no_connection' =&gt; array('color' =&gt; 'd22', 'text' =&gt; __('There was a problem connecting to the Akismet server. Please check your server configuration.')),
+		'key_empty' =&gt; array('color' =&gt; 'aa0', 'text' =&gt; sprintf(__('Please enter an API key. (&lt;a href=&quot;%s&quot; style=&quot;color:#fff&quot;&gt;Get your key.&lt;/a&gt;)'), 'http://wordpress.com/profile/')),
+		'key_valid' =&gt; array('color' =&gt; '2d2', 'text' =&gt; __('This key is valid.')),
+		'key_failed' =&gt; array('color' =&gt; 'aa0', 'text' =&gt; __('The key below was previously validated but a connection to akismet.com can not be established at this time. Please check your server configuration.')));
+?&gt;
+&lt;?php if ( !empty($_POST ) ) : ?&gt;
+&lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt;&lt;?php _e('Options saved.') ?&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
+&lt;?php endif; ?&gt;
+&lt;div class=&quot;wrap&quot;&gt;
+&lt;h2&gt;&lt;?php _e('Akismet Configuration'); ?&gt;&lt;/h2&gt;
+&lt;div class=&quot;narrow&quot;&gt;
+&lt;form action=&quot;&quot; method=&quot;post&quot; id=&quot;akismet-conf&quot; style=&quot;margin: auto; width: 400px; &quot;&gt;
+&lt;?php if ( !$wpcom_api_key ) { ?&gt;
+	&lt;p&gt;&lt;?php printf(__('For many people, &lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; will greatly reduce or even completely eliminate the comment and trackback spam you get on your site. If one does happen to get through, simply mark it as &quot;spam&quot; on the moderation screen and Akismet will learn from the mistakes. If you don\'t have a WordPress.com account yet, you can get one at &lt;a href=&quot;%2$s&quot;&gt;WordPress.com&lt;/a&gt;.'), 'http://akismet.com/', 'http://wordpress.com/api-keys/'); ?&gt;&lt;/p&gt;
+
+&lt;?php akismet_nonce_field($akismet_nonce) ?&gt;
+&lt;h3&gt;&lt;label for=&quot;key&quot;&gt;&lt;?php _e('WordPress.com API Key'); ?&gt;&lt;/label&gt;&lt;/h3&gt;
+&lt;?php foreach ( $ms as $m ) : ?&gt;
+	&lt;p style=&quot;padding: .5em; background-color: #&lt;?php echo $messages[$m]['color']; ?&gt;; color: #fff; font-weight: bold;&quot;&gt;&lt;?php echo $messages[$m]['text']; ?&gt;&lt;/p&gt;
+&lt;?php endforeach; ?&gt;
+&lt;p&gt;&lt;input id=&quot;key&quot; name=&quot;key&quot; type=&quot;text&quot; size=&quot;15&quot; maxlength=&quot;12&quot; value=&quot;&lt;?php echo get_option('wordpress_api_key'); ?&gt;&quot; style=&quot;font-family: 'Courier New', Courier, mono; font-size: 1.5em;&quot; /&gt; (&lt;?php _e('&lt;a href=&quot;http://faq.wordpress.com/2005/10/19/api-key/&quot;&gt;What is this?&lt;/a&gt;'); ?&gt;)&lt;/p&gt;
+&lt;?php if ( $invalid_key ) { ?&gt;
+&lt;h3&gt;&lt;?php _e('Why might my key be invalid?'); ?&gt;&lt;/h3&gt;
+&lt;p&gt;&lt;?php _e('This can mean one of two things, either you copied the key wrong or that the plugin is unable to reach the Akismet servers, which is most often caused by an issue with your web host around firewalls or similar.'); ?&gt;&lt;/p&gt;
+&lt;?php } ?&gt;
+&lt;?php } ?&gt;
+&lt;p&gt;&lt;label&gt;&lt;input name=&quot;akismet_discard_month&quot; id=&quot;akismet_discard_month&quot; value=&quot;true&quot; type=&quot;checkbox&quot; &lt;?php if ( get_option('akismet_discard_month') == 'true' ) echo ' checked=&quot;checked&quot; '; ?&gt; /&gt; &lt;?php _e('Automatically discard spam comments on posts older than a month.'); ?&gt;&lt;/label&gt;&lt;/p&gt;
+	&lt;p class=&quot;submit&quot;&gt;&lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;&lt;?php _e('Update options &amp;raquo;'); ?&gt;&quot; /&gt;&lt;/p&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+&lt;/div&gt;
+&lt;?php
+}
+
+function akismet_stats_page() {
+	if ( function_exists('add_submenu_page') )
+		add_submenu_page('index.php', __('Akismet Stats'), __('Akismet Stats'), 'manage_options', 'akismet-stats-display', 'akismet_stats_display');
+
+}
+
+function akismet_stats_script() {
+	?&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+function resizeIframe() {
+    var height = document.documentElement.clientHeight;
+    height -= document.getElementById('akismet-stats-frame').offsetTop;
+    height += 100; // magic padding
+    
+    document.getElementById('akismet-stats-frame').style.height = height +&quot;px&quot;;
+    
+};
+function resizeIframeInit() {
+	document.getElementById('akismet-stats-frame').onload = resizeIframe;
+	window.onresize = resizeIframe;
+}
+addLoadEvent(resizeIframeInit);
+&lt;/script&gt;&lt;?php
+}
+
+
+function akismet_stats_display() {
+	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
+	$blog = urlencode( get_option('home') );
+	$url = &quot;http://&quot;.get_option('wordpress_api_key').&quot;.web.akismet.com/1.0/user-stats.php?blog={$blog}&quot;;
+	?&gt;
+	&lt;div class=&quot;wrap&quot;&gt;
+	&lt;iframe src=&quot;&lt;?php echo $url; ?&gt;&quot; width=&quot;100%&quot; height=&quot;100%&quot; frameborder=&quot;0&quot; id=&quot;akismet-stats-frame&quot;&gt;&lt;/iframe&gt;
+	&lt;/div&gt;
+	&lt;?php
+}
+
+function akismet_verify_key( $key ) {
+	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
+	$blog = urlencode( get_option('home') );
+	if ( $wpcom_api_key )
+		$key = $wpcom_api_key;
+	$response = akismet_http_post(&quot;key=$key&amp;blog=$blog&quot;, 'rest.akismet.com', '/1.1/verify-key', $akismet_api_port);
+	if ( !is_array($response) || !isset($response[1]) || $response[1] != 'valid' &amp;&amp; $response[1] != 'invalid' )
+		return 'failed';
+	return $response[1];
+}
+
+if ( !get_option('wordpress_api_key') &amp;&amp; !$wpcom_api_key &amp;&amp; !isset($_POST['submit']) ) {
+	function akismet_warning() {
+		echo &quot;
+		&lt;div id='akismet-warning' class='updated fade'&gt;&lt;p&gt;&lt;strong&gt;&quot;.__('Akismet is almost ready.').&quot;&lt;/strong&gt; &quot;.sprintf(__('You must &lt;a href=&quot;%1$s&quot;&gt;enter your WordPress.com API key&lt;/a&gt; for it to work.'), &quot;plugins.php?page=akismet-key-config&quot;).&quot;&lt;/p&gt;&lt;/div&gt;
+		&quot;;
+	}
+	add_action('admin_notices', 'akismet_warning');
+	return;
+}
+
+// Returns array with headers in $response[0] and body in $response[1]
+function akismet_http_post($request, $host, $path, $port = 80) {
+	global $wp_version;
+
+	$http_request  = &quot;POST $path HTTP/1.0\r\n&quot;;
+	$http_request .= &quot;Host: $host\r\n&quot;;
+	$http_request .= &quot;Content-Type: application/x-www-form-urlencoded; charset=&quot; . get_option('blog_charset') . &quot;\r\n&quot;;
+	$http_request .= &quot;Content-Length: &quot; . strlen($request) . &quot;\r\n&quot;;
+	$http_request .= &quot;User-Agent: WordPress/$wp_version | Akismet/2.0\r\n&quot;;
+	$http_request .= &quot;\r\n&quot;;
+	$http_request .= $request;
+
+	$response = '';
+	if( false != ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {
+		fwrite($fs, $http_request);
+
+		while ( !feof($fs) )
+			$response .= fgets($fs, 1160); // One TCP-IP packet
+		fclose($fs);
+		$response = explode(&quot;\r\n\r\n&quot;, $response, 2);
+	}
+	return $response;
+}
+
+function akismet_auto_check_comment( $comment ) {
+	global $akismet_api_host, $akismet_api_port;
+
+	$comment['user_ip']    = preg_replace( '/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR'] );
+	$comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
+	$comment['referrer']   = $_SERVER['HTTP_REFERER'];
+	$comment['blog']       = get_option('home');
+
+	$ignore = array( 'HTTP_COOKIE' );
+
+	foreach ( $_SERVER as $key =&gt; $value )
+		if ( !in_array( $key, $ignore ) )
+			$comment[&quot;$key&quot;] = $value;
+
+	$query_string = '';
+	foreach ( $comment as $key =&gt; $data )
+		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
+
+	$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
+	if ( 'true' == $response[1] ) {
+		add_filter('pre_comment_approved', create_function('$a', 'return \'spam\';'));
+		update_option( 'akismet_spam_count', get_option('akismet_spam_count') + 1 );
+
+		do_action( 'akismet_spam_caught' );
+
+		$post = get_post( $comment['comment_post_ID'] );
+		$last_updated = strtotime( $post-&gt;post_modified_gmt );
+		$diff = time() - $last_updated;
+		$diff = $diff / 86400;
+
+		if ( $post-&gt;post_type == 'post' &amp;&amp; $diff &gt; 30 &amp;&amp; get_option( 'akismet_discard_month' ) == 'true' )
+			die;
+	}
+	akismet_delete_old();
+	return $comment;
+}
+
+function akismet_delete_old() {
+	global $wpdb;
+	$now_gmt = current_time('mysql', 1);
+	$wpdb-&gt;query(&quot;DELETE FROM $wpdb-&gt;comments WHERE DATE_SUB('$now_gmt', INTERVAL 15 DAY) &gt; comment_date_gmt AND comment_approved = 'spam'&quot;);
+	$n = mt_rand(1, 5000);
+	if ( $n == 11 ) // lucky number
+		$wpdb-&gt;query(&quot;OPTIMIZE TABLE $wpdb-&gt;comments&quot;);
+}
+
+function akismet_submit_nonspam_comment ( $comment_id ) {
+	global $wpdb, $akismet_api_host, $akismet_api_port;
+	$comment_id = (int) $comment_id;
+
+	$comment = $wpdb-&gt;get_row(&quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_ID = '$comment_id'&quot;);
+	if ( !$comment ) // it was deleted
+		return;
+	$comment-&gt;blog = get_option('home');
+	$query_string = '';
+	foreach ( $comment as $key =&gt; $data )
+		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
+	$response = akismet_http_post($query_string, $akismet_api_host, &quot;/1.1/submit-ham&quot;, $akismet_api_port);
+}
+
+function akismet_submit_spam_comment ( $comment_id ) {
+	global $wpdb, $akismet_api_host, $akismet_api_port;
+	$comment_id = (int) $comment_id;
+
+	$comment = $wpdb-&gt;get_row(&quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_ID = '$comment_id'&quot;);
+	if ( !$comment ) // it was deleted
+		return;
+	if ( 'spam' != $comment-&gt;comment_approved )
+		return;
+	$comment-&gt;blog = get_option('home');
+	$query_string = '';
+	foreach ( $comment as $key =&gt; $data )
+		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
+
+	$response = akismet_http_post($query_string, $akismet_api_host, &quot;/1.1/submit-spam&quot;, $akismet_api_port);
+}
+
+add_action('wp_set_comment_status', 'akismet_submit_spam_comment');
+add_action('edit_comment', 'akismet_submit_spam_comment');
+add_action('preprocess_comment', 'akismet_auto_check_comment', 1);
+
+function akismet_spamtoham( $comment ) { akismet_submit_nonspam_comment( $comment-&gt;comment_ID ); }
+add_filter( 'comment_spam_to_approved', 'akismet_spamtoham' );
+
+// Total spam in queue
+// get_option( 'akismet_spam_count' ) is the total caught ever
+function akismet_spam_count( $type = false ) {
+	global $wpdb;
+
+	if ( !$type ) { // total
+		$count = wp_cache_get( 'akismet_spam_count', 'widget' );
+		if ( false === $count ) {
+			if ( function_exists('wp_count_comments') ) {
+				$count = wp_count_comments();
+				$count = $count-&gt;spam;
+			} else {
+				$count = (int) $wpdb-&gt;get_var(&quot;SELECT COUNT(comment_ID) FROM $wpdb-&gt;comments WHERE comment_approved = 'spam'&quot;);
+			}
+			wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 );
+		}
+		return $count;
+	} elseif ( 'comments' == $type || 'comment' == $type ) { // comments
+		$type = '';
+	} else { // pingback, trackback, ...
+		$type  = $wpdb-&gt;escape( $type );
+	}
+
+	return (int) $wpdb-&gt;get_var(&quot;SELECT COUNT(comment_ID) FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' AND comment_type='$type'&quot;);
+}
+
+function akismet_spam_comments( $type = false, $page = 1, $per_page = 50 ) {
+	global $wpdb;
+
+	$page = (int) $page;
+	if ( $page &lt; 2 )
+		$page = 1;
+
+	$per_page = (int) $per_page;
+	if ( $per_page &lt; 1 )
+		$per_page = 50;
+
+	$start = ( $page - 1 ) * $per_page;
+	$end = $start + $per_page;
+
+	if ( $type ) {
+		if ( 'comments' == $type || 'comment' == $type )
+			$type = '';
+		else
+			$type = $wpdb-&gt;escape( $type );
+		return $wpdb-&gt;get_results( &quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' AND comment_type='$type' ORDER BY comment_date DESC LIMIT $start, $end&quot;);
+	}
+
+	// All
+	return $wpdb-&gt;get_results( &quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT $start, $end&quot;);
+}
+
+// Totals for each comment type
+// returns array( type =&gt; count, ... )
+function akismet_spam_totals() {
+	global $wpdb;
+	$totals = $wpdb-&gt;get_results( &quot;SELECT comment_type, COUNT(*) AS cc FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' GROUP BY comment_type&quot; );
+	$return = array();
+	foreach ( $totals as $total )
+		$return[$total-&gt;comment_type ? $total-&gt;comment_type : 'comment'] = $total-&gt;cc;
+	return $return;
+}
+
+function akismet_manage_page() {
+	global $wpdb, $submenu, $wp_db_version;
+
+	// WP 2.7 has its own spam management page
+	if ( 8645 &lt;= $wp_db_version )
+		return;
+
+	$count = sprintf(__('Akismet Spam (%s)'), akismet_spam_count());
+	if ( isset( $submenu['edit-comments.php'] ) )
+		add_submenu_page('edit-comments.php', __('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught' );
+	elseif ( function_exists('add_management_page') )
+		add_management_page(__('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught');
+}
+
+function akismet_caught() {
+	global $wpdb, $comment, $akismet_caught, $akismet_nonce;
+
+	akismet_recheck_queue();
+	if (isset($_POST['submit']) &amp;&amp; 'recover' == $_POST['action'] &amp;&amp; ! empty($_POST['not_spam'])) {
+		check_admin_referer( $akismet_nonce );
+		if ( function_exists('current_user_can') &amp;&amp; !current_user_can('moderate_comments') )
+			die(__('You do not have sufficient permission to moderate comments.'));
+
+		$i = 0;
+		foreach ($_POST['not_spam'] as $comment):
+			$comment = (int) $comment;
+			if ( function_exists('wp_set_comment_status') )
+				wp_set_comment_status($comment, 'approve');
+			else
+				$wpdb-&gt;query(&quot;UPDATE $wpdb-&gt;comments SET comment_approved = '1' WHERE comment_ID = '$comment'&quot;);
+			akismet_submit_nonspam_comment($comment);
+			++$i;
+		endforeach;
+		$to = add_query_arg( 'recovered', $i, $_SERVER['HTTP_REFERER'] );
+		wp_redirect( $to );
+		exit;
+	}
+	if ('delete' == $_POST['action']) {
+		check_admin_referer( $akismet_nonce );
+		if ( function_exists('current_user_can') &amp;&amp; !current_user_can('moderate_comments') )
+			die(__('You do not have sufficient permission to moderate comments.'));
+
+		$delete_time = $wpdb-&gt;escape( $_POST['display_time'] );
+		$nuked = $wpdb-&gt;query( &quot;DELETE FROM $wpdb-&gt;comments WHERE comment_approved = 'spam' AND '$delete_time' &gt; comment_date_gmt&quot; );
+		wp_cache_delete( 'akismet_spam_count', 'widget' );
+		$to = add_query_arg( 'deleted', 'all', $_SERVER['HTTP_REFERER'] );
+		wp_redirect( $to );
+		exit;
+	}
+
+if ( isset( $_GET['recovered'] ) ) {
+	$i = (int) $_GET['recovered'];
+	echo '&lt;div class=&quot;updated&quot;&gt;&lt;p&gt;' . sprintf(__('%1$s comments recovered.'), $i) . &quot;&lt;/p&gt;&lt;/div&gt;&quot;;
+}
+
+if (isset( $_GET['deleted'] ) )
+	echo '&lt;div class=&quot;updated&quot;&gt;&lt;p&gt;' . __('All spam deleted.') . '&lt;/p&gt;&lt;/div&gt;';
+
+if ( isset( $GLOBALS['submenu']['edit-comments.php'] ) )
+	$link = 'edit-comments.php';
+else
+	$link = 'edit.php';
+?&gt;
+&lt;style type=&quot;text/css&quot;&gt;
+.akismet-tabs {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+	clear: both;
+	border-bottom: 1px solid #ccc;
+	height: 31px;
+	margin-bottom: 20px;
+	background: #ddd;
+	border-top: 1px solid #bdbdbd;
+}
+.akismet-tabs li {
+	float: left;
+	margin: 5px 0 0 20px;
+}
+.akismet-tabs a {
+	display: block;
+	padding: 4px .5em 3px;
+	border-bottom: none;
+	color: #036;
+}
+.akismet-tabs .active a {
+	background: #fff;
+	border: 1px solid #ccc;
+	border-bottom: none;
+	color: #000;
+	font-weight: bold;
+	padding-bottom: 4px;
+}
+#akismetsearch {
+	float: right;
+	margin-top: -.5em;
+}
+
+#akismetsearch p {
+	margin: 0;
+	padding: 0;
+}
+&lt;/style&gt;
+&lt;div class=&quot;wrap&quot;&gt;
+&lt;h2&gt;&lt;?php _e('Caught Spam') ?&gt;&lt;/h2&gt;
+&lt;?php
+$count = get_option( 'akismet_spam_count' );
+if ( $count ) {
+?&gt;
+&lt;p&gt;&lt;?php printf(__('Akismet has caught &lt;strong&gt;%1$s spam&lt;/strong&gt; for you since you first installed it.'), number_format_i18n($count) ); ?&gt;&lt;/p&gt;
+&lt;?php
+}
+
+$spam_count = akismet_spam_count();
+
+if ( 0 == $spam_count ) {
+	echo '&lt;p&gt;'.__('You have no spam currently in the queue. Must be your lucky day. :)').'&lt;/p&gt;';
+	echo '&lt;/div&gt;';
+} else {
+	echo '&lt;p&gt;'.__('You can delete all of the spam from your database with a single click. This operation cannot be undone, so you may wish to check to ensure that no legitimate comments got through first. Spam is automatically deleted after 15 days, so don&amp;#8217;t sweat it.').'&lt;/p&gt;';
+?&gt;
+&lt;?php if ( !isset( $_POST['s'] ) ) { ?&gt;
+&lt;form method=&quot;post&quot; action=&quot;&lt;?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?&gt;&quot;&gt;
+&lt;?php akismet_nonce_field($akismet_nonce) ?&gt;
+&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;delete&quot; /&gt;
+&lt;?php printf(__('There are currently %1$s comments identified as spam.'), $spam_count); ?&gt;&amp;nbsp; &amp;nbsp; &lt;input type=&quot;submit&quot; class=&quot;button delete&quot; name=&quot;Submit&quot; value=&quot;&lt;?php _e('Delete all'); ?&gt;&quot; /&gt;
+&lt;input type=&quot;hidden&quot; name=&quot;display_time&quot; value=&quot;&lt;?php echo current_time('mysql', 1); ?&gt;&quot; /&gt;
+&lt;/form&gt;
+&lt;?php } ?&gt;
+&lt;/div&gt;
+&lt;div class=&quot;wrap&quot;&gt;
+&lt;?php if ( isset( $_POST['s'] ) ) { ?&gt;
+&lt;h2&gt;&lt;?php _e('Search'); ?&gt;&lt;/h2&gt;
+&lt;?php } else { ?&gt;
+&lt;?php echo '&lt;p&gt;'.__('These are the latest comments identified as spam by Akismet. If you see any mistakes, simply mark the comment as &quot;not spam&quot; and Akismet will learn from the submission. If you wish to recover a comment from spam, simply select the comment, and click Not Spam. After 15 days we clean out the junk for you.').'&lt;/p&gt;'; ?&gt;
+&lt;?php } ?&gt;
+&lt;?php
+if ( isset( $_POST['s'] ) ) {
+	$s = $wpdb-&gt;escape($_POST['s']);
+	$comments = $wpdb-&gt;get_results(&quot;SELECT * FROM $wpdb-&gt;comments  WHERE
+		(comment_author LIKE '%$s%' OR
+		comment_author_email LIKE '%$s%' OR
+		comment_author_url LIKE ('%$s%') OR
+		comment_author_IP LIKE ('%$s%') OR
+		comment_content LIKE ('%$s%') ) AND
+		comment_approved = 'spam'
+		ORDER BY comment_date DESC&quot;);
+} else {
+	if ( isset( $_GET['apage'] ) )
+		$page = (int) $_GET['apage'];
+	else
+		$page = 1;
+
+	if ( $page &lt; 2 )
+		$page = 1;
+
+	$current_type = false;
+	if ( isset( $_GET['ctype'] ) )
+		$current_type = preg_replace( '|[^a-z]|', '', $_GET['ctype'] );
+
+	$comments = akismet_spam_comments( $current_type, $page );
+	$total = akismet_spam_count( $current_type );
+	$totals = akismet_spam_totals();
+?&gt;
+&lt;ul class=&quot;akismet-tabs&quot;&gt;
+&lt;li &lt;?php if ( !isset( $_GET['ctype'] ) ) echo ' class=&quot;active&quot;'; ?&gt;&gt;&lt;a href=&quot;edit-comments.php?page=akismet-admin&quot;&gt;&lt;?php _e('All'); ?&gt;&lt;/a&gt;&lt;/li&gt;
+&lt;?php
+foreach ( $totals as $type =&gt; $type_count ) {
+	if ( 'comment' == $type ) {
+		$type = 'comments';
+		$show = __('Comments');
+	} else {
+		$show = ucwords( $type );
+	}
+	$type_count = number_format_i18n( $type_count );
+	$extra = $current_type === $type ? ' class=&quot;active&quot;' : '';
+	echo &quot;&lt;li $extra&gt;&lt;a href='edit-comments.php?page=akismet-admin&amp;amp;ctype=$type'&gt;$show ($type_count)&lt;/a&gt;&lt;/li&gt;&quot;;
+}
+do_action( 'akismet_tabs' ); // so plugins can add more tabs easily
+?&gt;
+&lt;/ul&gt;
+&lt;?php
+}
+
+if ($comments) {
+?&gt;
+&lt;form method=&quot;post&quot; action=&quot;&lt;?php echo attribute_escape(&quot;$link?page=akismet-admin&quot;); ?&gt;&quot; id=&quot;akismetsearch&quot;&gt;
+&lt;p&gt;  &lt;input type=&quot;text&quot; name=&quot;s&quot; value=&quot;&lt;?php if (isset($_POST['s'])) echo attribute_escape($_POST['s']); ?&gt;&quot; size=&quot;17&quot; /&gt;
+  &lt;input type=&quot;submit&quot; class=&quot;button&quot; name=&quot;submit&quot; value=&quot;&lt;?php echo attribute_escape(__('Search Spam &amp;raquo;')) ?&gt;&quot;  /&gt;  &lt;/p&gt;
+&lt;/form&gt;
+&lt;?php if ( $total &gt; 50 ) {
+$total_pages = ceil( $total / 50 );
+$r = '';
+if ( 1 &lt; $page ) {
+	$args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1;
+	$r .=  '&lt;a class=&quot;prev&quot; href=&quot;' . clean_url(add_query_arg( $args )) . '&quot;&gt;'. __('&amp;laquo; Previous Page') .'&lt;/a&gt;' . &quot;\n&quot;;
+}
+if ( ( $total_pages = ceil( $total / 50 ) ) &gt; 1 ) {
+	for ( $page_num = 1; $page_num &lt;= $total_pages; $page_num++ ) :
+		if ( $page == $page_num ) :
+			$r .=  &quot;&lt;strong&gt;$page_num&lt;/strong&gt;\n&quot;;
+		else :
+			$p = false;
+			if ( $page_num &lt; 3 || ( $page_num &gt;= $page - 3 &amp;&amp; $page_num &lt;= $page + 3 ) || $page_num &gt; $total_pages - 3 ) :
+				$args['apage'] = ( 1 == $page_num ) ? '' : $page_num;
+				$r .= '&lt;a class=&quot;page-numbers&quot; href=&quot;' . clean_url(add_query_arg($args)) . '&quot;&gt;' . ( $page_num ) . &quot;&lt;/a&gt;\n&quot;;
+				$in = true;
+			elseif ( $in == true ) :
+				$r .= &quot;...\n&quot;;
+				$in = false;
+			endif;
+		endif;
+	endfor;
+}
+if ( ( $page ) * 50 &lt; $total || -1 == $total ) {
+	$args['apage'] = $page + 1;
+	$r .=  '&lt;a class=&quot;next&quot; href=&quot;' . clean_url(add_query_arg($args)) . '&quot;&gt;'. __('Next Page &amp;raquo;') .'&lt;/a&gt;' . &quot;\n&quot;;
+}
+echo &quot;&lt;p&gt;$r&lt;/p&gt;&quot;;
+?&gt;
+
+&lt;?php } ?&gt;
+&lt;form style=&quot;clear: both;&quot; method=&quot;post&quot; action=&quot;&lt;?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?&gt;&quot;&gt;
+&lt;?php akismet_nonce_field($akismet_nonce) ?&gt;
+&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;recover&quot; /&gt;
+&lt;ul id=&quot;spam-list&quot; class=&quot;commentlist&quot; style=&quot;list-style: none; margin: 0; padding: 0;&quot;&gt;
+&lt;?php
+$i = 0;
+foreach($comments as $comment) {
+	$i++;
+	$comment_date = mysql2date(get_option(&quot;date_format&quot;) . &quot; @ &quot; . get_option(&quot;time_format&quot;), $comment-&gt;comment_date);
+	$post = get_post($comment-&gt;comment_post_ID);
+	$post_title = $post-&gt;post_title;
+	if ($i % 2) $class = 'class=&quot;alternate&quot;';
+	else $class = '';
+	echo &quot;\n\t&lt;li id='comment-$comment-&gt;comment_ID' $class&gt;&quot;;
+	?&gt;
+
+&lt;p&gt;&lt;strong&gt;&lt;?php comment_author() ?&gt;&lt;/strong&gt; &lt;?php if ($comment-&gt;comment_author_email) { ?&gt;| &lt;?php comment_author_email_link() ?&gt; &lt;?php } if ($comment-&gt;comment_author_url &amp;&amp; 'http://' != $comment-&gt;comment_author_url) { ?&gt; | &lt;?php comment_author_url_link() ?&gt; &lt;?php } ?&gt;| &lt;?php _e('IP:') ?&gt; &lt;a href=&quot;http://ws.arin.net/cgi-bin/whois.pl?queryinput=&lt;?php comment_author_IP() ?&gt;&quot;&gt;&lt;?php comment_author_IP() ?&gt;&lt;/a&gt;&lt;/p&gt;
+
+&lt;?php comment_text() ?&gt;
+
+&lt;p&gt;&lt;label for=&quot;spam-&lt;?php echo $comment-&gt;comment_ID; ?&gt;&quot;&gt;
+&lt;input type=&quot;checkbox&quot; id=&quot;spam-&lt;?php echo $comment-&gt;comment_ID; ?&gt;&quot; name=&quot;not_spam[]&quot; value=&quot;&lt;?php echo $comment-&gt;comment_ID; ?&gt;&quot; /&gt;
+&lt;?php _e('Not Spam') ?&gt;&lt;/label&gt; &amp;#8212; &lt;?php comment_date('M j, g:i A');  ?&gt; &amp;#8212; [
+&lt;?php
+$post = get_post($comment-&gt;comment_post_ID);
+$post_title = wp_specialchars( $post-&gt;post_title, 'double' );
+$post_title = ('' == $post_title) ? &quot;# $comment-&gt;comment_post_ID&quot; : $post_title;
+?&gt;
+ &lt;a href=&quot;&lt;?php echo get_permalink($comment-&gt;comment_post_ID); ?&gt;&quot; title=&quot;&lt;?php echo $post_title; ?&gt;&quot;&gt;&lt;?php _e('View Post') ?&gt;&lt;/a&gt; ] &lt;/p&gt;
+
+
+&lt;?php
+}
+?&gt;
+&lt;/ul&gt;
+&lt;?php if ( $total &gt; 50 ) {
+$total_pages = ceil( $total / 50 );
+$r = '';
+if ( 1 &lt; $page ) {
+	$args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1;
+	$r .=  '&lt;a class=&quot;prev&quot; href=&quot;' . clean_url(add_query_arg( $args )) . '&quot;&gt;'. __('&amp;laquo; Previous Page') .'&lt;/a&gt;' . &quot;\n&quot;;
+}
+if ( ( $total_pages = ceil( $total / 50 ) ) &gt; 1 ) {
+	for ( $page_num = 1; $page_num &lt;= $total_pages; $page_num++ ) :
+		if ( $page == $page_num ) :
+			$r .=  &quot;&lt;strong&gt;$page_num&lt;/strong&gt;\n&quot;;
+		else :
+			$p = false;
+			if ( $page_num &lt; 3 || ( $page_num &gt;= $page - 3 &amp;&amp; $page_num &lt;= $page + 3 ) || $page_num &gt; $total_pages - 3 ) :
+				$args['apage'] = ( 1 == $page_num ) ? '' : $page_num;
+				$r .= '&lt;a class=&quot;page-numbers&quot; href=&quot;' . clean_url(add_query_arg($args)) . '&quot;&gt;' . ( $page_num ) . &quot;&lt;/a&gt;\n&quot;;
+				$in = true;
+			elseif ( $in == true ) :
+				$r .= &quot;...\n&quot;;
+				$in = false;
+			endif;
+		endif;
+	endfor;
+}
+if ( ( $page ) * 50 &lt; $total || -1 == $total ) {
+	$args['apage'] = $page + 1;
+	$r .=  '&lt;a class=&quot;next&quot; href=&quot;' . clean_url(add_query_arg($args)) . '&quot;&gt;'. __('Next Page &amp;raquo;') .'&lt;/a&gt;' . &quot;\n&quot;;
+}
+echo &quot;&lt;p&gt;$r&lt;/p&gt;&quot;;
+}
+?&gt;
+&lt;p class=&quot;submit&quot;&gt;
+&lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;&lt;?php echo attribute_escape(__('De-spam marked comments &amp;raquo;')); ?&gt;&quot; /&gt;
+&lt;/p&gt;
+&lt;p&gt;&lt;?php _e('Comments you de-spam will be submitted to Akismet as mistakes so it can learn and get better.'); ?&gt;&lt;/p&gt;
+&lt;/form&gt;
+&lt;?php
+} else {
+?&gt;
+&lt;p&gt;&lt;?php _e('No results found.'); ?&gt;&lt;/p&gt;
+&lt;?php } ?&gt;
+
+&lt;?php if ( !isset( $_POST['s'] ) ) { ?&gt;
+&lt;form method=&quot;post&quot; action=&quot;&lt;?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?&gt;&quot;&gt;
+&lt;?php akismet_nonce_field($akismet_nonce) ?&gt;
+&lt;p&gt;&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;delete&quot; /&gt;
+&lt;?php printf(__('There are currently %1$s comments identified as spam.'), $spam_count); ?&gt;&amp;nbsp; &amp;nbsp; &lt;input type=&quot;submit&quot; name=&quot;Submit&quot; class=&quot;button&quot; value=&quot;&lt;?php echo attribute_escape(__('Delete all')); ?&gt;&quot; /&gt;
+&lt;input type=&quot;hidden&quot; name=&quot;display_time&quot; value=&quot;&lt;?php echo current_time('mysql', 1); ?&gt;&quot; /&gt;&lt;/p&gt;
+&lt;/form&gt;
+&lt;?php } ?&gt;
+&lt;/div&gt;
+&lt;?php
+	}
+}
+
+add_action('admin_menu', 'akismet_manage_page');
+
+// WP &lt; 2.5
+function akismet_stats() {
+	if ( !function_exists('did_action') || did_action( 'rightnow_end' ) ) // We already displayed this info in the &quot;Right Now&quot; section
+		return;
+	if ( !$count = get_option('akismet_spam_count') )
+		return;
+	$path = plugin_basename(__FILE__);
+	echo '&lt;h3&gt;'.__('Spam').'&lt;/h3&gt;';
+	global $submenu;
+	if ( isset( $submenu['edit-comments.php'] ) )
+		$link = 'edit-comments.php';
+	else
+		$link = 'edit.php';
+	echo '&lt;p&gt;'.sprintf(__('&lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; has protected your site from &lt;a href=&quot;%2$s&quot;&gt;%3$s spam comments&lt;/a&gt;.'), 'http://akismet.com/', clean_url(&quot;$link?page=akismet-admin&quot;), number_format_i18n($count) ).'&lt;/p&gt;';
+}
+
+add_action('activity_box_end', 'akismet_stats');
+
+// WP 2.5+
+function akismet_rightnow() {
+	global $submenu, $wp_db_version;
+
+	if ( 8645 &lt; $wp_db_version  ) // 2.7
+		$link = 'edit-comments.php?comment_status=spam';
+	elseif ( isset( $submenu['edit-comments.php'] ) )
+		$link = 'edit-comments.php?page=akismet-admin';
+	else
+		$link = 'edit.php?page=akismet-admin';
+
+	if ( $count = get_option('akismet_spam_count') ) {
+		$intro = sprintf( __ngettext(
+			'&lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; has protected your site from %2$s spam comment already,',
+			'&lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; has protected your site from %2$s spam comments already,',
+			$count
+		), 'http://akismet.com/', number_format_i18n( $count ) );
+	} else {
+		$intro = sprintf( __('&lt;a href=&quot;%1$s&quot;&gt;Akismet&lt;/a&gt; blocks spam from getting to your blog,'), 'http://akismet.com/' );
+	}
+
+	if ( $queue_count = akismet_spam_count() ) {
+		$queue_text = sprintf( __ngettext(
+			'and there\'s &lt;a href=&quot;%2$s&quot;&gt;%1$s comment&lt;/a&gt; in your spam queue right now.',
+			'and there are &lt;a href=&quot;%2$s&quot;&gt;%1$s comments&lt;/a&gt; in your spam queue right now.',
+			$queue_count
+		), number_format_i18n( $queue_count ), clean_url($link) );
+	} else {
+		$queue_text = sprintf( __( &quot;but there's nothing in your &lt;a href='%1\$s'&gt;spam queue&lt;/a&gt; at the moment.&quot; ), clean_url($link) );
+	}
+
+	$text = sprintf( _c( '%1$s %2$s|akismet_rightnow' ), $intro, $queue_text );
+
+	echo &quot;&lt;p class='akismet-right-now'&gt;$text&lt;/p&gt;\n&quot;;
+}
+	
+add_action('rightnow_end', 'akismet_rightnow');
+
+// For WP &lt;= 2.3.x
+if ( 'moderation.php' == $pagenow ) {
+	function akismet_recheck_button( $page ) {
+		global $submenu;
+		if ( isset( $submenu['edit-comments.php'] ) )
+			$link = 'edit-comments.php';
+		else
+			$link = 'edit.php';
+		$button = &quot;&lt;a href='$link?page=akismet-admin&amp;amp;recheckqueue=true&amp;amp;noheader=true' style='display: block; width: 100px; position: absolute; right: 7%; padding: 5px; font-size: 14px; text-decoration: underline; background: #fff; border: 1px solid #ccc;'&gt;&quot; . __('Recheck Queue for Spam') . &quot;&lt;/a&gt;&quot;;
+		$page = str_replace( '&lt;div class=&quot;wrap&quot;&gt;', '&lt;div class=&quot;wrap&quot;&gt;' . $button, $page );
+		return $page;
+	}
+
+	if ( $wpdb-&gt;get_var( &quot;SELECT COUNT(*) FROM $wpdb-&gt;comments WHERE comment_approved = '0'&quot; ) )
+		ob_start( 'akismet_recheck_button' );
+}
+
+// For WP &gt;= 2.5
+function akismet_check_for_spam_button($comment_status) {
+	if ( 'approved' == $comment_status )
+		return;
+	if ( function_exists('plugins_url') )
+		$link = 'admin.php?action=akismet_recheck_queue';
+	else
+		$link = 'edit-comments.php?page=akismet-admin&amp;amp;recheckqueue=true&amp;amp;noheader=true';
+	echo &quot;&lt;/div&gt;&lt;div class='alignleft'&gt;&lt;a class='button-secondary checkforspam' href='$link'&gt;&quot; . __('Check for Spam') . &quot;&lt;/a&gt;&quot;;
+}
+add_action('manage_comments_nav', 'akismet_check_for_spam_button');
+
+function akismet_recheck_queue() {
+	global $wpdb, $akismet_api_host, $akismet_api_port;
+
+	if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) &amp;&amp; 'akismet_recheck_queue' == $_REQUEST['action'] ) ) )
+		return;
+
+	$moderation = $wpdb-&gt;get_results( &quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_approved = '0'&quot;, ARRAY_A );
+	foreach ( (array) $moderation as $c ) {
+		$c['user_ip']    = $c['comment_author_IP'];
+		$c['user_agent'] = $c['comment_agent'];
+		$c['referrer']   = '';
+		$c['blog']       = get_option('home');
+		$id = (int) $c['comment_ID'];
+
+		$query_string = '';
+		foreach ( $c as $key =&gt; $data )
+		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
+
+		$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
+		if ( 'true' == $response[1] ) {
+			$wpdb-&gt;query( &quot;UPDATE $wpdb-&gt;comments SET comment_approved = 'spam' WHERE comment_ID = $id&quot; );
+		}
+	}
+	wp_redirect( $_SERVER['HTTP_REFERER'] );
+	exit;
+}
+
+add_action('admin_action_akismet_recheck_queue', 'akismet_recheck_queue');
+
+function akismet_check_db_comment( $id ) {
+	global $wpdb, $akismet_api_host, $akismet_api_port;
+
+	$id = (int) $id;
+	$c = $wpdb-&gt;get_row( &quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_ID = '$id'&quot;, ARRAY_A );
+	if ( !$c )
+		return;
+
+	$c['user_ip']    = $c['comment_author_IP'];
+	$c['user_agent'] = $c['comment_agent'];
+	$c['referrer']   = '';
+	$c['blog']       = get_option('home');
+	$id = $c['comment_ID'];
+
+	$query_string = '';
+	foreach ( $c as $key =&gt; $data )
+	$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&amp;';
+
+	$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
+	return $response[1];
+}
+
+// This option causes tons of FPs, was removed in 2.1
+function akismet_kill_proxy_check( $option ) { return 0; }
+add_filter('option_open_proxy_check', 'akismet_kill_proxy_check');
+
+// Widget stuff
+function widget_akismet_register() {
+	if ( function_exists('register_sidebar_widget') ) :
+	function widget_akismet($args) {
+		extract($args);
+		$options = get_option('widget_akismet');
+		$count = number_format_i18n(get_option('akismet_spam_count'));
+		?&gt;
+			&lt;?php echo $before_widget; ?&gt;
+				&lt;?php echo $before_title . $options['title'] . $after_title; ?&gt;
+				&lt;div id=&quot;akismetwrap&quot;&gt;&lt;div id=&quot;akismetstats&quot;&gt;&lt;a id=&quot;aka&quot; href=&quot;http://akismet.com&quot; title=&quot;&quot;&gt;&lt;?php printf( __( '%1$s %2$sspam comments%3$s %4$sblocked by%5$s&lt;br /&gt;%6$sAkismet%7$s' ), '&lt;div id=&quot;akismet1&quot;&gt;&lt;span id=&quot;akismetcount&quot;&gt;' . $count . '&lt;/span&gt;', '&lt;span id=&quot;akismetsc&quot;&gt;', '&lt;/span&gt;&lt;/div&gt;', '&lt;div id=&quot;akismet2&quot;&gt;&lt;span id=&quot;akismetbb&quot;&gt;', '&lt;/span&gt;', '&lt;span id=&quot;akismeta&quot;&gt;', '&lt;/span&gt;&lt;/div&gt;' ); ?&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
+			&lt;?php echo $after_widget; ?&gt;
+	&lt;?php
+	}
+
+	function widget_akismet_style() {
+		?&gt;
+&lt;style type=&quot;text/css&quot;&gt;
+#aka,#aka:link,#aka:hover,#aka:visited,#aka:active{color:#fff;text-decoration:none}
+#aka:hover{border:none;text-decoration:none}
+#aka:hover #akismet1{display:none}
+#aka:hover #akismet2,#akismet1{display:block}
+#akismet2{display:none;padding-top:2px}
+#akismeta{font-size:16px;font-weight:bold;line-height:18px;text-decoration:none}
+#akismetcount{display:block;font:15px Verdana,Arial,Sans-Serif;font-weight:bold;text-decoration:none}
+#akismetwrap #akismetstats{background:url(&lt;?php echo get_option('siteurl'); ?&gt;/wp-content/plugins/akismet/akismet.gif) no-repeat top left;border:none;color:#fff;font:11px 'Trebuchet MS','Myriad Pro',sans-serif;height:40px;line-height:100%;overflow:hidden;padding:8px 0 0;text-align:center;width:120px}
+&lt;/style&gt;
+		&lt;?php
+	}
+
+	function widget_akismet_control() {
+		$options = $newoptions = get_option('widget_akismet');
+		if ( $_POST[&quot;akismet-submit&quot;] ) {
+			$newoptions['title'] = strip_tags(stripslashes($_POST[&quot;akismet-title&quot;]));
+			if ( empty($newoptions['title']) ) $newoptions['title'] = 'Spam Blocked';
+		}
+		if ( $options != $newoptions ) {
+			$options = $newoptions;
+			update_option('widget_akismet', $options);
+		}
+		$title = htmlspecialchars($options['title'], ENT_QUOTES);
+	?&gt;
+				&lt;p&gt;&lt;label for=&quot;akismet-title&quot;&gt;&lt;?php _e('Title:'); ?&gt; &lt;input style=&quot;width: 250px;&quot; id=&quot;akismet-title&quot; name=&quot;akismet-title&quot; type=&quot;text&quot; value=&quot;&lt;?php echo $title; ?&gt;&quot; /&gt;&lt;/label&gt;&lt;/p&gt;
+				&lt;input type=&quot;hidden&quot; id=&quot;akismet-submit&quot; name=&quot;akismet-submit&quot; value=&quot;1&quot; /&gt;
+	&lt;?php
+	}
+
+	register_sidebar_widget('Akismet', 'widget_akismet', null, 'akismet');
+	register_widget_control('Akismet', 'widget_akismet_control', null, 75, 'akismet');
+	if ( is_active_widget('widget_akismet') )
+		add_action('wp_head', 'widget_akismet_style');
+	endif;
+}
+
+add_action('init', 'widget_akismet_register');
+
+// Counter for non-widget users
+function akismet_counter() {
+?&gt;
+&lt;style type=&quot;text/css&quot;&gt;
+#akismetwrap #aka,#aka:link,#aka:hover,#aka:visited,#aka:active{color:#fff;text-decoration:none}
+#aka:hover{border:none;text-decoration:none}
+#aka:hover #akismet1{display:none}
+#aka:hover #akismet2,#akismet1{display:block}
+#akismet2{display:none;padding-top:2px}
+#akismeta{font-size:16px;font-weight:bold;line-height:18px;text-decoration:none}
+#akismetcount{display:block;font:15px Verdana,Arial,Sans-Serif;font-weight:bold;text-decoration:none}
+#akismetwrap #akismetstats{background:url(&lt;?php echo get_option('siteurl'); ?&gt;/wp-content/plugins/akismet/akismet.gif) no-repeat top left;border:none;color:#fff;font:11px 'Trebuchet MS','Myriad Pro',sans-serif;height:40px;line-height:100%;overflow:hidden;padding:8px 0 0;text-align:center;width:120px}
+&lt;/style&gt;
+&lt;?php
+$count = number_format_i18n(get_option('akismet_spam_count'));
+?&gt;
+&lt;div id=&quot;akismetwrap&quot;&gt;&lt;div id=&quot;akismetstats&quot;&gt;&lt;a id=&quot;aka&quot; href=&quot;http://akismet.com&quot; title=&quot;&quot;&gt;&lt;div id=&quot;akismet1&quot;&gt;&lt;span id=&quot;akismetcount&quot;&gt;&lt;?php echo $count; ?&gt;&lt;/span&gt; &lt;span id=&quot;akismetsc&quot;&gt;&lt;?php _e('spam comments') ?&gt;&lt;/span&gt;&lt;/div&gt; &lt;div id=&quot;akismet2&quot;&gt;&lt;span id=&quot;akismetbb&quot;&gt;&lt;?php _e('blocked by') ?&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;akismeta&quot;&gt;Akismet&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
+&lt;?php
+}
+
+?&gt;</diff>
      <filename>wordpress/wp-content/plugins/akismet/akismet.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,22 +1,22 @@
-=== Akismet ===
-Contributors: matt, ryan, andy, mdawaffe
-Tags: akismet, comments, spam
-
-Akismet checks your comments against the Akismet web service to see if they look like spam or not.
-
-== Description ==
-
-Akismet checks your comments against the Akismet web service to see if they look like spam or not and lets you
-review the spam it catches under your blog's &quot;Comments&quot; admin screen.
-
-Want to show off how much spam Akismet has caught for you? Just put `&lt;?php akismet_counter(); ?&gt;` in your template.
-
-See also: [WP Stats plugin](http://wordpress.org/extend/plugins/stats/).
-
-PS: You'll need a [WordPress.com API key](http://wordpress.com/api-keys/) to use it.
-
-== Installation ==
-
-Upload the Akismet plugin to your blog, Activate it, then enter your [WordPress.com API key](http://wordpress.com/api-keys/).
-
-1, 2, 3: You're done!
+=== Akismet ===
+Contributors: matt, ryan, andy, mdawaffe
+Tags: akismet, comments, spam
+
+Akismet checks your comments against the Akismet web service to see if they look like spam or not.
+
+== Description ==
+
+Akismet checks your comments against the Akismet web service to see if they look like spam or not and lets you
+review the spam it catches under your blog's &quot;Comments&quot; admin screen.
+
+Want to show off how much spam Akismet has caught for you? Just put `&lt;?php akismet_counter(); ?&gt;` in your template.
+
+See also: [WP Stats plugin](http://wordpress.org/extend/plugins/stats/).
+
+PS: You'll need a [WordPress.com API key](http://wordpress.com/api-keys/) to use it.
+
+== Installation ==
+
+Upload the Akismet plugin to your blog, Activate it, then enter your [WordPress.com API key](http://wordpress.com/api-keys/).
+
+1, 2, 3: You're done!</diff>
      <filename>wordpress/wp-content/plugins/akismet/readme.txt</filename>
    </modified>
    <modified>
      <diff>@@ -1,2096 +1,2211 @@
-&lt;?php
-
-/*
-Plugin Name: All in One SEO Pack
-Plugin URI: http://semperfiwebdesign.com
-Description: Out-of-the-box SEO for your Wordpress blog.
-Version: 1.4.6.13
-Author: Michael Torbert
-Author URI: http://semperfiwebdesign.com
-*/
-
-/*
-Copyright (C) 2008 Michael Torbert, semperfiwebdesign.com (michael AT semperfiwebdesign DOT com)
-Original code by uberdose of uberdose.com
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
-*/
-
-/*******************************************************************************************************/
-
-$UTF8_TABLES['strtolower'] = array(
-	&quot;&#239;&#188;&#186;&quot; =&gt; &quot;&#239;&#189;&#353;&quot;,	&quot;&#239;&#188;&#185;&quot; =&gt; &quot;&#239;&#189;&#8482;&quot;,	&quot;&#239;&#188;&#184;&quot; =&gt; &quot;&#239;&#189;&#732;&quot;,
-	&quot;&#239;&#188;&#183;&quot; =&gt; &quot;&#239;&#189;&#8212;&quot;,	&quot;&#239;&#188;&#182;&quot; =&gt; &quot;&#239;&#189;&#8211;&quot;,	&quot;&#239;&#188;&#181;&quot; =&gt; &quot;&#239;&#189;&#8226;&quot;,
-	&quot;&#239;&#188;&#180;&quot; =&gt; &quot;&#239;&#189;&#8221;&quot;,	&quot;&#239;&#188;&#179;&quot; =&gt; &quot;&#239;&#189;&#8220;&quot;,	&quot;&#239;&#188;&#178;&quot; =&gt; &quot;&#239;&#189;&#8217;&quot;,
-	&quot;&#239;&#188;&#177;&quot; =&gt; &quot;&#239;&#189;&#8216;&quot;,	&quot;&#239;&#188;&#176;&quot; =&gt; &quot;&#239;&#189;*&quot;,	&quot;&#239;&#188;&#175;&quot; =&gt; &quot;&#239;&#189;*&quot;,
-	&quot;&#239;&#188;&#174;&quot; =&gt; &quot;&#239;&#189;&#381;&quot;,	&quot;&#239;&#188;&#173;&quot; =&gt; &quot;&#239;&#189;*&quot;,	&quot;&#239;&#188;&#172;&quot; =&gt; &quot;&#239;&#189;&#338;&quot;,
-	&quot;&#239;&#188;&#171;&quot; =&gt; &quot;&#239;&#189;&#8249;&quot;,	&quot;&#239;&#188;&#170;&quot; =&gt; &quot;&#239;&#189;&#352;&quot;,	&quot;&#239;&#188;&#169;&quot; =&gt; &quot;&#239;&#189;&#8240;&quot;,
-	&quot;&#239;&#188;&#168;&quot; =&gt; &quot;&#239;&#189;&#710;&quot;,	&quot;&#239;&#188;&#167;&quot; =&gt; &quot;&#239;&#189;&#8225;&quot;,	&quot;&#239;&#188;&#166;&quot; =&gt; &quot;&#239;&#189;&#8224;&quot;,
-	&quot;&#239;&#188;&#165;&quot; =&gt; &quot;&#239;&#189;&#8230;&quot;,	&quot;&#239;&#188;&#164;&quot; =&gt; &quot;&#239;&#189;&#8222;&quot;,	&quot;&#239;&#188;&#163;&quot; =&gt; &quot;&#239;&#189;&#402;&quot;,
-	&quot;&#239;&#188;&#162;&quot; =&gt; &quot;&#239;&#189;&#8218;&quot;,	&quot;&#239;&#188;&#161;&quot; =&gt; &quot;&#239;&#189;*&quot;,	&quot;&#226;&#8222;&#171;&quot; =&gt; &quot;&#195;&#165;&quot;,
-	&quot;&#226;&#8222;&#170;&quot; =&gt; &quot;k&quot;,	&quot;&#226;&#8222;&#166;&quot; =&gt; &quot;&#207;&#8240;&quot;,	&quot;&#225;&#191;&#187;&quot; =&gt; &quot;&#225;&#189;&#189;&quot;,
-	&quot;&#225;&#191;&#186;&quot; =&gt; &quot;&#225;&#189;&#188;&quot;,	&quot;&#225;&#191;&#185;&quot; =&gt; &quot;&#225;&#189;&#185;&quot;,	&quot;&#225;&#191;&#184;&quot; =&gt; &quot;&#225;&#189;&#184;&quot;,
-	&quot;&#225;&#191;&#172;&quot; =&gt; &quot;&#225;&#191;&#165;&quot;,	&quot;&#225;&#191;&#171;&quot; =&gt; &quot;&#225;&#189;&#187;&quot;,	&quot;&#225;&#191;&#170;&quot; =&gt; &quot;&#225;&#189;&#186;&quot;,
-	&quot;&#225;&#191;&#169;&quot; =&gt; &quot;&#225;&#191;&#161;&quot;,	&quot;&#225;&#191;&#168;&quot; =&gt; &quot;&#225;&#191; &quot;,	&quot;&#225;&#191;&#8250;&quot; =&gt; &quot;&#225;&#189;&#183;&quot;,
-	&quot;&#225;&#191;&#353;&quot; =&gt; &quot;&#225;&#189;&#182;&quot;,	&quot;&#225;&#191;&#8482;&quot; =&gt; &quot;&#225;&#191;&#8216;&quot;,	&quot;&#225;&#191;&#732;&quot; =&gt; &quot;&#225;&#191;*&quot;,
-	&quot;&#225;&#191;&#8249;&quot; =&gt; &quot;&#225;&#189;&#181;&quot;,	&quot;&#225;&#191;&#352;&quot; =&gt; &quot;&#225;&#189;&#180;&quot;,	&quot;&#225;&#191;&#8240;&quot; =&gt; &quot;&#225;&#189;&#179;&quot;,
-	&quot;&#225;&#191;&#710;&quot; =&gt; &quot;&#225;&#189;&#178;&quot;,	&quot;&#225;&#190;&#187;&quot; =&gt; &quot;&#225;&#189;&#177;&quot;,	&quot;&#225;&#190;&#186;&quot; =&gt; &quot;&#225;&#189;&#176;&quot;,
-	&quot;&#225;&#190;&#185;&quot; =&gt; &quot;&#225;&#190;&#177;&quot;,	&quot;&#225;&#190;&#184;&quot; =&gt; &quot;&#225;&#190;&#176;&quot;,	&quot;&#225;&#189;&#175;&quot; =&gt; &quot;&#225;&#189;&#167;&quot;,
-	&quot;&#225;&#189;&#174;&quot; =&gt; &quot;&#225;&#189;&#166;&quot;,	&quot;&#225;&#189;&#173;&quot; =&gt; &quot;&#225;&#189;&#165;&quot;,	&quot;&#225;&#189;&#172;&quot; =&gt; &quot;&#225;&#189;&#164;&quot;,
-	&quot;&#225;&#189;&#171;&quot; =&gt; &quot;&#225;&#189;&#163;&quot;,	&quot;&#225;&#189;&#170;&quot; =&gt; &quot;&#225;&#189;&#162;&quot;,	&quot;&#225;&#189;&#169;&quot; =&gt; &quot;&#225;&#189;&#161;&quot;,
-	&quot;&#225;&#189;&#168;&quot; =&gt; &quot;&#225;&#189; &quot;,	&quot;&#225;&#189;&#376;&quot; =&gt; &quot;&#225;&#189;&#8212;&quot;,	&quot;&#225;&#189;*&quot; =&gt; &quot;&#225;&#189;&#8226;&quot;,
-	&quot;&#225;&#189;&#8250;&quot; =&gt; &quot;&#225;&#189;&#8220;&quot;,	&quot;&#225;&#189;&#8482;&quot; =&gt; &quot;&#225;&#189;&#8216;&quot;,	&quot;&#225;&#189;*&quot; =&gt; &quot;&#225;&#189;&#8230;&quot;,
-	&quot;&#225;&#189;&#338;&quot; =&gt; &quot;&#225;&#189;&#8222;&quot;,	&quot;&#225;&#189;&#8249;&quot; =&gt; &quot;&#225;&#189;&#402;&quot;,	&quot;&#225;&#189;&#352;&quot; =&gt; &quot;&#225;&#189;&#8218;&quot;,
-	&quot;&#225;&#189;&#8240;&quot; =&gt; &quot;&#225;&#189;*&quot;,	&quot;&#225;&#189;&#710;&quot; =&gt; &quot;&#225;&#189;&#8364;&quot;,	&quot;&#225;&#188;&#191;&quot; =&gt; &quot;&#225;&#188;&#183;&quot;,
-	&quot;&#225;&#188;&#190;&quot; =&gt; &quot;&#225;&#188;&#182;&quot;,	&quot;&#225;&#188;&#189;&quot; =&gt; &quot;&#225;&#188;&#181;&quot;,	&quot;&#225;&#188;&#188;&quot; =&gt; &quot;&#225;&#188;&#180;&quot;,
-	&quot;&#225;&#188;&#187;&quot; =&gt; &quot;&#225;&#188;&#179;&quot;,	&quot;&#225;&#188;&#186;&quot; =&gt; &quot;&#225;&#188;&#178;&quot;,	&quot;&#225;&#188;&#185;&quot; =&gt; &quot;&#225;&#188;&#177;&quot;,
-	&quot;&#225;&#188;&#184;&quot; =&gt; &quot;&#225;&#188;&#176;&quot;,	&quot;&#225;&#188;&#175;&quot; =&gt; &quot;&#225;&#188;&#167;&quot;,	&quot;&#225;&#188;&#174;&quot; =&gt; &quot;&#225;&#188;&#166;&quot;,
-	&quot;&#225;&#188;&#173;&quot; =&gt; &quot;&#225;&#188;&#165;&quot;,	&quot;&#225;&#188;&#172;&quot; =&gt; &quot;&#225;&#188;&#164;&quot;,	&quot;&#225;&#188;&#171;&quot; =&gt; &quot;&#225;&#188;&#163;&quot;,
-	&quot;&#225;&#188;&#170;&quot; =&gt; &quot;&#225;&#188;&#162;&quot;,	&quot;&#225;&#188;&#169;&quot; =&gt; &quot;&#225;&#188;&#161;&quot;,	&quot;&#225;&#188;&#168;&quot; =&gt; &quot;&#225;&#188; &quot;,
-	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#8226;&quot;,	&quot;&#225;&#188;&#339;&quot; =&gt; &quot;&#225;&#188;&#8221;&quot;,	&quot;&#225;&#188;&#8250;&quot; =&gt; &quot;&#225;&#188;&#8220;&quot;,
-	&quot;&#225;&#188;&#353;&quot; =&gt; &quot;&#225;&#188;&#8217;&quot;,	&quot;&#225;&#188;&#8482;&quot; =&gt; &quot;&#225;&#188;&#8216;&quot;,	&quot;&#225;&#188;&#732;&quot; =&gt; &quot;&#225;&#188;*&quot;,
-	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#8225;&quot;,	&quot;&#225;&#188;&#381;&quot; =&gt; &quot;&#225;&#188;&#8224;&quot;,	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#8230;&quot;,
-	&quot;&#225;&#188;&#338;&quot; =&gt; &quot;&#225;&#188;&#8222;&quot;,	&quot;&#225;&#188;&#8249;&quot; =&gt; &quot;&#225;&#188;&#402;&quot;,	&quot;&#225;&#188;&#352;&quot; =&gt; &quot;&#225;&#188;&#8218;&quot;,
-	&quot;&#225;&#188;&#8240;&quot; =&gt; &quot;&#225;&#188;*&quot;,	&quot;&#225;&#188;&#710;&quot; =&gt; &quot;&#225;&#188;&#8364;&quot;,	&quot;&#225;&#187;&#184;&quot; =&gt; &quot;&#225;&#187;&#185;&quot;,
-	&quot;&#225;&#187;&#182;&quot; =&gt; &quot;&#225;&#187;&#183;&quot;,	&quot;&#225;&#187;&#180;&quot; =&gt; &quot;&#225;&#187;&#181;&quot;,	&quot;&#225;&#187;&#178;&quot; =&gt; &quot;&#225;&#187;&#179;&quot;,
-	&quot;&#225;&#187;&#176;&quot; =&gt; &quot;&#225;&#187;&#177;&quot;,	&quot;&#225;&#187;&#174;&quot; =&gt; &quot;&#225;&#187;&#175;&quot;,	&quot;&#225;&#187;&#172;&quot; =&gt; &quot;&#225;&#187;&#173;&quot;,
-	&quot;&#225;&#187;&#170;&quot; =&gt; &quot;&#225;&#187;&#171;&quot;,	&quot;&#225;&#187;&#168;&quot; =&gt; &quot;&#225;&#187;&#169;&quot;,	&quot;&#225;&#187;&#166;&quot; =&gt; &quot;&#225;&#187;&#167;&quot;,
-	&quot;&#225;&#187;&#164;&quot; =&gt; &quot;&#225;&#187;&#165;&quot;,	&quot;&#225;&#187;&#162;&quot; =&gt; &quot;&#225;&#187;&#163;&quot;,	&quot;&#225;&#187; &quot; =&gt; &quot;&#225;&#187;&#161;&quot;,
-	&quot;&#225;&#187;&#382;&quot; =&gt; &quot;&#225;&#187;&#376;&quot;,	&quot;&#225;&#187;&#339;&quot; =&gt; &quot;&#225;&#187;*&quot;,	&quot;&#225;&#187;&#353;&quot; =&gt; &quot;&#225;&#187;&#8250;&quot;,
-	&quot;&#225;&#187;&#732;&quot; =&gt; &quot;&#225;&#187;&#8482;&quot;,	&quot;&#225;&#187;&#8211;&quot; =&gt; &quot;&#225;&#187;&#8212;&quot;,	&quot;&#225;&#187;&#8221;&quot; =&gt; &quot;&#225;&#187;&#8226;&quot;,
-	&quot;&#225;&#187;&#8217;&quot; =&gt; &quot;&#225;&#187;&#8220;&quot;,	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#8216;&quot;,	&quot;&#225;&#187;&#381;&quot; =&gt; &quot;&#225;&#187;*&quot;,
-	&quot;&#225;&#187;&#338;&quot; =&gt; &quot;&#225;&#187;*&quot;,	&quot;&#225;&#187;&#352;&quot; =&gt; &quot;&#225;&#187;&#8249;&quot;,	&quot;&#225;&#187;&#710;&quot; =&gt; &quot;&#225;&#187;&#8240;&quot;,
-	&quot;&#225;&#187;&#8224;&quot; =&gt; &quot;&#225;&#187;&#8225;&quot;,	&quot;&#225;&#187;&#8222;&quot; =&gt; &quot;&#225;&#187;&#8230;&quot;,	&quot;&#225;&#187;&#8218;&quot; =&gt; &quot;&#225;&#187;&#402;&quot;,
-	&quot;&#225;&#187;&#8364;&quot; =&gt; &quot;&#225;&#187;*&quot;,	&quot;&#225;&#186;&#190;&quot; =&gt; &quot;&#225;&#186;&#191;&quot;,	&quot;&#225;&#186;&#188;&quot; =&gt; &quot;&#225;&#186;&#189;&quot;,
-	&quot;&#225;&#186;&#186;&quot; =&gt; &quot;&#225;&#186;&#187;&quot;,	&quot;&#225;&#186;&#184;&quot; =&gt; &quot;&#225;&#186;&#185;&quot;,	&quot;&#225;&#186;&#182;&quot; =&gt; &quot;&#225;&#186;&#183;&quot;,
-	&quot;&#225;&#186;&#180;&quot; =&gt; &quot;&#225;&#186;&#181;&quot;,	&quot;&#225;&#186;&#178;&quot; =&gt; &quot;&#225;&#186;&#179;&quot;,	&quot;&#225;&#186;&#176;&quot; =&gt; &quot;&#225;&#186;&#177;&quot;,
-	&quot;&#225;&#186;&#174;&quot; =&gt; &quot;&#225;&#186;&#175;&quot;,	&quot;&#225;&#186;&#172;&quot; =&gt; &quot;&#225;&#186;&#173;&quot;,	&quot;&#225;&#186;&#170;&quot; =&gt; &quot;&#225;&#186;&#171;&quot;,
-	&quot;&#225;&#186;&#168;&quot; =&gt; &quot;&#225;&#186;&#169;&quot;,	&quot;&#225;&#186;&#166;&quot; =&gt; &quot;&#225;&#186;&#167;&quot;,	&quot;&#225;&#186;&#164;&quot; =&gt; &quot;&#225;&#186;&#165;&quot;,
-	&quot;&#225;&#186;&#162;&quot; =&gt; &quot;&#225;&#186;&#163;&quot;,	&quot;&#225;&#186; &quot; =&gt; &quot;&#225;&#186;&#161;&quot;,	&quot;&#225;&#186;&#8221;&quot; =&gt; &quot;&#225;&#186;&#8226;&quot;,
-	&quot;&#225;&#186;&#8217;&quot; =&gt; &quot;&#225;&#186;&#8220;&quot;,	&quot;&#225;&#186;*&quot; =&gt; &quot;&#225;&#186;&#8216;&quot;,	&quot;&#225;&#186;&#381;&quot; =&gt; &quot;&#225;&#186;*&quot;,
-	&quot;&#225;&#186;&#338;&quot; =&gt; &quot;&#225;&#186;*&quot;,	&quot;&#225;&#186;&#352;&quot; =&gt; &quot;&#225;&#186;&#8249;&quot;,	&quot;&#225;&#186;&#710;&quot; =&gt; &quot;&#225;&#186;&#8240;&quot;,
-	&quot;&#225;&#186;&#8224;&quot; =&gt; &quot;&#225;&#186;&#8225;&quot;,	&quot;&#225;&#186;&#8222;&quot; =&gt; &quot;&#225;&#186;&#8230;&quot;,	&quot;&#225;&#186;&#8218;&quot; =&gt; &quot;&#225;&#186;&#402;&quot;,
-	&quot;&#225;&#186;&#8364;&quot; =&gt; &quot;&#225;&#186;*&quot;,	&quot;&#225;&#185;&#190;&quot; =&gt; &quot;&#225;&#185;&#191;&quot;,	&quot;&#225;&#185;&#188;&quot; =&gt; &quot;&#225;&#185;&#189;&quot;,
-	&quot;&#225;&#185;&#186;&quot; =&gt; &quot;&#225;&#185;&#187;&quot;,	&quot;&#225;&#185;&#184;&quot; =&gt; &quot;&#225;&#185;&#185;&quot;,	&quot;&#225;&#185;&#182;&quot; =&gt; &quot;&#225;&#185;&#183;&quot;,
-	&quot;&#225;&#185;&#180;&quot; =&gt; &quot;&#225;&#185;&#181;&quot;,	&quot;&#225;&#185;&#178;&quot; =&gt; &quot;&#225;&#185;&#179;&quot;,	&quot;&#225;&#185;&#176;&quot; =&gt; &quot;&#225;&#185;&#177;&quot;,
-	&quot;&#225;&#185;&#174;&quot; =&gt; &quot;&#225;&#185;&#175;&quot;,	&quot;&#225;&#185;&#172;&quot; =&gt; &quot;&#225;&#185;&#173;&quot;,	&quot;&#225;&#185;&#170;&quot; =&gt; &quot;&#225;&#185;&#171;&quot;,
-	&quot;&#225;&#185;&#168;&quot; =&gt; &quot;&#225;&#185;&#169;&quot;,	&quot;&#225;&#185;&#166;&quot; =&gt; &quot;&#225;&#185;&#167;&quot;,	&quot;&#225;&#185;&#164;&quot; =&gt; &quot;&#225;&#185;&#165;&quot;,
-	&quot;&#225;&#185;&#162;&quot; =&gt; &quot;&#225;&#185;&#163;&quot;,	&quot;&#225;&#185; &quot; =&gt; &quot;&#225;&#185;&#161;&quot;,	&quot;&#225;&#185;&#382;&quot; =&gt; &quot;&#225;&#185;&#376;&quot;,
-	&quot;&#225;&#185;&#339;&quot; =&gt; &quot;&#225;&#185;*&quot;,	&quot;&#225;&#185;&#353;&quot; =&gt; &quot;&#225;&#185;&#8250;&quot;,	&quot;&#225;&#185;&#732;&quot; =&gt; &quot;&#225;&#185;&#8482;&quot;,
-	&quot;&#225;&#185;&#8211;&quot; =&gt; &quot;&#225;&#185;&#8212;&quot;,	&quot;&#225;&#185;&#8221;&quot; =&gt; &quot;&#225;&#185;&#8226;&quot;,	&quot;&#225;&#185;&#8217;&quot; =&gt; &quot;&#225;&#185;&#8220;&quot;,
-	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#8216;&quot;,	&quot;&#225;&#185;&#381;&quot; =&gt; &quot;&#225;&#185;*&quot;,	&quot;&#225;&#185;&#338;&quot; =&gt; &quot;&#225;&#185;*&quot;,
-	&quot;&#225;&#185;&#352;&quot; =&gt; &quot;&#225;&#185;&#8249;&quot;,	&quot;&#225;&#185;&#710;&quot; =&gt; &quot;&#225;&#185;&#8240;&quot;,	&quot;&#225;&#185;&#8224;&quot; =&gt; &quot;&#225;&#185;&#8225;&quot;,
-	&quot;&#225;&#185;&#8222;&quot; =&gt; &quot;&#225;&#185;&#8230;&quot;,	&quot;&#225;&#185;&#8218;&quot; =&gt; &quot;&#225;&#185;&#402;&quot;,	&quot;&#225;&#185;&#8364;&quot; =&gt; &quot;&#225;&#185;*&quot;,
-	&quot;&#225;&#184;&#190;&quot; =&gt; &quot;&#225;&#184;&#191;&quot;,	&quot;&#225;&#184;&#188;&quot; =&gt; &quot;&#225;&#184;&#189;&quot;,	&quot;&#225;&#184;&#186;&quot; =&gt; &quot;&#225;&#184;&#187;&quot;,
-	&quot;&#225;&#184;&#184;&quot; =&gt; &quot;&#225;&#184;&#185;&quot;,	&quot;&#225;&#184;&#182;&quot; =&gt; &quot;&#225;&#184;&#183;&quot;,	&quot;&#225;&#184;&#180;&quot; =&gt; &quot;&#225;&#184;&#181;&quot;,
-	&quot;&#225;&#184;&#178;&quot; =&gt; &quot;&#225;&#184;&#179;&quot;,	&quot;&#225;&#184;&#176;&quot; =&gt; &quot;&#225;&#184;&#177;&quot;,	&quot;&#225;&#184;&#174;&quot; =&gt; &quot;&#225;&#184;&#175;&quot;,
-	&quot;&#225;&#184;&#172;&quot; =&gt; &quot;&#225;&#184;&#173;&quot;,	&quot;&#225;&#184;&#170;&quot; =&gt; &quot;&#225;&#184;&#171;&quot;,	&quot;&#225;&#184;&#168;&quot; =&gt; &quot;&#225;&#184;&#169;&quot;,
-	&quot;&#225;&#184;&#166;&quot; =&gt; &quot;&#225;&#184;&#167;&quot;,	&quot;&#225;&#184;&#164;&quot; =&gt; &quot;&#225;&#184;&#165;&quot;,	&quot;&#225;&#184;&#162;&quot; =&gt; &quot;&#225;&#184;&#163;&quot;,
-	&quot;&#225;&#184; &quot; =&gt; &quot;&#225;&#184;&#161;&quot;,	&quot;&#225;&#184;&#382;&quot; =&gt; &quot;&#225;&#184;&#376;&quot;,	&quot;&#225;&#184;&#339;&quot; =&gt; &quot;&#225;&#184;*&quot;,
-	&quot;&#225;&#184;&#353;&quot; =&gt; &quot;&#225;&#184;&#8250;&quot;,	&quot;&#225;&#184;&#732;&quot; =&gt; &quot;&#225;&#184;&#8482;&quot;,	&quot;&#225;&#184;&#8211;&quot; =&gt; &quot;&#225;&#184;&#8212;&quot;,
-	&quot;&#225;&#184;&#8221;&quot; =&gt; &quot;&#225;&#184;&#8226;&quot;,	&quot;&#225;&#184;&#8217;&quot; =&gt; &quot;&#225;&#184;&#8220;&quot;,	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#8216;&quot;,
-	&quot;&#225;&#184;&#381;&quot; =&gt; &quot;&#225;&#184;*&quot;,	&quot;&#225;&#184;&#338;&quot; =&gt; &quot;&#225;&#184;*&quot;,	&quot;&#225;&#184;&#352;&quot; =&gt; &quot;&#225;&#184;&#8249;&quot;,
-	&quot;&#225;&#184;&#710;&quot; =&gt; &quot;&#225;&#184;&#8240;&quot;,	&quot;&#225;&#184;&#8224;&quot; =&gt; &quot;&#225;&#184;&#8225;&quot;,	&quot;&#225;&#184;&#8222;&quot; =&gt; &quot;&#225;&#184;&#8230;&quot;,
-	&quot;&#225;&#184;&#8218;&quot; =&gt; &quot;&#225;&#184;&#402;&quot;,	&quot;&#225;&#184;&#8364;&quot; =&gt; &quot;&#225;&#184;*&quot;,	&quot;&#213;&#8211;&quot; =&gt; &quot;&#214;&#8224;&quot;,
-	&quot;&#213;&#8226;&quot; =&gt; &quot;&#214;&#8230;&quot;,	&quot;&#213;&#8221;&quot; =&gt; &quot;&#214;&#8222;&quot;,	&quot;&#213;&#8220;&quot; =&gt; &quot;&#214;&#402;&quot;,
-	&quot;&#213;&#8217;&quot; =&gt; &quot;&#214;&#8218;&quot;,	&quot;&#213;&#8216;&quot; =&gt; &quot;&#214;*&quot;,	&quot;&#213;*&quot; =&gt; &quot;&#214;&#8364;&quot;,
-	&quot;&#213;*&quot; =&gt; &quot;&#213;&#191;&quot;,	&quot;&#213;&#381;&quot; =&gt; &quot;&#213;&#190;&quot;,	&quot;&#213;*&quot; =&gt; &quot;&#213;&#189;&quot;,
-	&quot;&#213;&#338;&quot; =&gt; &quot;&#213;&#188;&quot;,	&quot;&#213;&#8249;&quot; =&gt; &quot;&#213;&#187;&quot;,	&quot;&#213;&#352;&quot; =&gt; &quot;&#213;&#186;&quot;,
-	&quot;&#213;&#8240;&quot; =&gt; &quot;&#213;&#185;&quot;,	&quot;&#213;&#710;&quot; =&gt; &quot;&#213;&#184;&quot;,	&quot;&#213;&#8225;&quot; =&gt; &quot;&#213;&#183;&quot;,
-	&quot;&#213;&#8224;&quot; =&gt; &quot;&#213;&#182;&quot;,	&quot;&#213;&#8230;&quot; =&gt; &quot;&#213;&#181;&quot;,	&quot;&#213;&#8222;&quot; =&gt; &quot;&#213;&#180;&quot;,
-	&quot;&#213;&#402;&quot; =&gt; &quot;&#213;&#179;&quot;,	&quot;&#213;&#8218;&quot; =&gt; &quot;&#213;&#178;&quot;,	&quot;&#213;*&quot; =&gt; &quot;&#213;&#177;&quot;,
-	&quot;&#213;&#8364;&quot; =&gt; &quot;&#213;&#176;&quot;,	&quot;&#212;&#191;&quot; =&gt; &quot;&#213;&#175;&quot;,	&quot;&#212;&#190;&quot; =&gt; &quot;&#213;&#174;&quot;,
-	&quot;&#212;&#189;&quot; =&gt; &quot;&#213;&#173;&quot;,	&quot;&#212;&#188;&quot; =&gt; &quot;&#213;&#172;&quot;,	&quot;&#212;&#187;&quot; =&gt; &quot;&#213;&#171;&quot;,
-	&quot;&#212;&#186;&quot; =&gt; &quot;&#213;&#170;&quot;,	&quot;&#212;&#185;&quot; =&gt; &quot;&#213;&#169;&quot;,	&quot;&#212;&#184;&quot; =&gt; &quot;&#213;&#168;&quot;,
-	&quot;&#212;&#183;&quot; =&gt; &quot;&#213;&#167;&quot;,	&quot;&#212;&#182;&quot; =&gt; &quot;&#213;&#166;&quot;,	&quot;&#212;&#181;&quot; =&gt; &quot;&#213;&#165;&quot;,
-	&quot;&#212;&#180;&quot; =&gt; &quot;&#213;&#164;&quot;,	&quot;&#212;&#179;&quot; =&gt; &quot;&#213;&#163;&quot;,	&quot;&#212;&#178;&quot; =&gt; &quot;&#213;&#162;&quot;,
-	&quot;&#212;&#177;&quot; =&gt; &quot;&#213;&#161;&quot;,	&quot;&#212;&#381;&quot; =&gt; &quot;&#212;*&quot;,	&quot;&#212;&#338;&quot; =&gt; &quot;&#212;*&quot;,
-	&quot;&#212;&#352;&quot; =&gt; &quot;&#212;&#8249;&quot;,	&quot;&#212;&#710;&quot; =&gt; &quot;&#212;&#8240;&quot;,	&quot;&#212;&#8224;&quot; =&gt; &quot;&#212;&#8225;&quot;,
-	&quot;&#212;&#8222;&quot; =&gt; &quot;&#212;&#8230;&quot;,	&quot;&#212;&#8218;&quot; =&gt; &quot;&#212;&#402;&quot;,	&quot;&#212;&#8364;&quot; =&gt; &quot;&#212;*&quot;,
-	&quot;&#211;&#184;&quot; =&gt; &quot;&#211;&#185;&quot;,	&quot;&#211;&#180;&quot; =&gt; &quot;&#211;&#181;&quot;,	&quot;&#211;&#178;&quot; =&gt; &quot;&#211;&#179;&quot;,
-	&quot;&#211;&#176;&quot; =&gt; &quot;&#211;&#177;&quot;,	&quot;&#211;&#174;&quot; =&gt; &quot;&#211;&#175;&quot;,	&quot;&#211;&#172;&quot; =&gt; &quot;&#211;&#173;&quot;,
-	&quot;&#211;&#170;&quot; =&gt; &quot;&#211;&#171;&quot;,	&quot;&#211;&#168;&quot; =&gt; &quot;&#211;&#169;&quot;,	&quot;&#211;&#166;&quot; =&gt; &quot;&#211;&#167;&quot;,
-	&quot;&#211;&#164;&quot; =&gt; &quot;&#211;&#165;&quot;,	&quot;&#211;&#162;&quot; =&gt; &quot;&#211;&#163;&quot;,	&quot;&#211; &quot; =&gt; &quot;&#211;&#161;&quot;,
-	&quot;&#211;&#382;&quot; =&gt; &quot;&#211;&#376;&quot;,	&quot;&#211;&#339;&quot; =&gt; &quot;&#211;*&quot;,	&quot;&#211;&#353;&quot; =&gt; &quot;&#211;&#8250;&quot;,
-	&quot;&#211;&#732;&quot; =&gt; &quot;&#211;&#8482;&quot;,	&quot;&#211;&#8211;&quot; =&gt; &quot;&#211;&#8212;&quot;,	&quot;&#211;&#8221;&quot; =&gt; &quot;&#211;&#8226;&quot;,
-	&quot;&#211;&#8217;&quot; =&gt; &quot;&#211;&#8220;&quot;,	&quot;&#211;*&quot; =&gt; &quot;&#211;&#8216;&quot;,	&quot;&#211;*&quot; =&gt; &quot;&#211;&#381;&quot;,
-	&quot;&#211;&#8249;&quot; =&gt; &quot;&#211;&#338;&quot;,	&quot;&#211;&#8240;&quot; =&gt; &quot;&#211;&#352;&quot;,	&quot;&#211;&#8225;&quot; =&gt; &quot;&#211;&#710;&quot;,
-	&quot;&#211;&#8230;&quot; =&gt; &quot;&#211;&#8224;&quot;,	&quot;&#211;&#402;&quot; =&gt; &quot;&#211;&#8222;&quot;,	&quot;&#211;*&quot; =&gt; &quot;&#211;&#8218;&quot;,
-	&quot;&#210;&#190;&quot; =&gt; &quot;&#210;&#191;&quot;,	&quot;&#210;&#188;&quot; =&gt; &quot;&#210;&#189;&quot;,	&quot;&#210;&#186;&quot; =&gt; &quot;&#210;&#187;&quot;,
-	&quot;&#210;&#184;&quot; =&gt; &quot;&#210;&#185;&quot;,	&quot;&#210;&#182;&quot; =&gt; &quot;&#210;&#183;&quot;,	&quot;&#210;&#180;&quot; =&gt; &quot;&#210;&#181;&quot;,
-	&quot;&#210;&#178;&quot; =&gt; &quot;&#210;&#179;&quot;,	&quot;&#210;&#176;&quot; =&gt; &quot;&#210;&#177;&quot;,	&quot;&#210;&#174;&quot; =&gt; &quot;&#210;&#175;&quot;,
-	&quot;&#210;&#172;&quot; =&gt; &quot;&#210;&#173;&quot;,	&quot;&#210;&#170;&quot; =&gt; &quot;&#210;&#171;&quot;,	&quot;&#210;&#168;&quot; =&gt; &quot;&#210;&#169;&quot;,
-	&quot;&#210;&#166;&quot; =&gt; &quot;&#210;&#167;&quot;,	&quot;&#210;&#164;&quot; =&gt; &quot;&#210;&#165;&quot;,	&quot;&#210;&#162;&quot; =&gt; &quot;&#210;&#163;&quot;,
-	&quot;&#210; &quot; =&gt; &quot;&#210;&#161;&quot;,	&quot;&#210;&#382;&quot; =&gt; &quot;&#210;&#376;&quot;,	&quot;&#210;&#339;&quot; =&gt; &quot;&#210;*&quot;,
-	&quot;&#210;&#353;&quot; =&gt; &quot;&#210;&#8250;&quot;,	&quot;&#210;&#732;&quot; =&gt; &quot;&#210;&#8482;&quot;,	&quot;&#210;&#8211;&quot; =&gt; &quot;&#210;&#8212;&quot;,
-	&quot;&#210;&#8221;&quot; =&gt; &quot;&#210;&#8226;&quot;,	&quot;&#210;&#8217;&quot; =&gt; &quot;&#210;&#8220;&quot;,	&quot;&#210;*&quot; =&gt; &quot;&#210;&#8216;&quot;,
-	&quot;&#210;&#381;&quot; =&gt; &quot;&#210;*&quot;,	&quot;&#210;&#338;&quot; =&gt; &quot;&#210;*&quot;,	&quot;&#210;&#352;&quot; =&gt; &quot;&#210;&#8249;&quot;,
-	&quot;&#210;&#8364;&quot; =&gt; &quot;&#210;*&quot;,	&quot;&#209;&#190;&quot; =&gt; &quot;&#209;&#191;&quot;,	&quot;&#209;&#188;&quot; =&gt; &quot;&#209;&#189;&quot;,
-	&quot;&#209;&#186;&quot; =&gt; &quot;&#209;&#187;&quot;,	&quot;&#209;&#184;&quot; =&gt; &quot;&#209;&#185;&quot;,	&quot;&#209;&#182;&quot; =&gt; &quot;&#209;&#183;&quot;,
-	&quot;&#209;&#180;&quot; =&gt; &quot;&#209;&#181;&quot;,	&quot;&#209;&#178;&quot; =&gt; &quot;&#209;&#179;&quot;,	&quot;&#209;&#176;&quot; =&gt; &quot;&#209;&#177;&quot;,
-	&quot;&#209;&#174;&quot; =&gt; &quot;&#209;&#175;&quot;,	&quot;&#209;&#172;&quot; =&gt; &quot;&#209;&#173;&quot;,	&quot;&#209;&#170;&quot; =&gt; &quot;&#209;&#171;&quot;,
-	&quot;&#209;&#168;&quot; =&gt; &quot;&#209;&#169;&quot;,	&quot;&#209;&#166;&quot; =&gt; &quot;&#209;&#167;&quot;,	&quot;&#209;&#164;&quot; =&gt; &quot;&#209;&#165;&quot;,
-	&quot;&#209;&#162;&quot; =&gt; &quot;&#209;&#163;&quot;,	&quot;&#209; &quot; =&gt; &quot;&#209;&#161;&quot;,	&quot;&#208;&#175;&quot; =&gt; &quot;&#209;*&quot;,
-	&quot;&#208;&#174;&quot; =&gt; &quot;&#209;&#381;&quot;,	&quot;&#208;&#173;&quot; =&gt; &quot;&#209;*&quot;,	&quot;&#208;&#172;&quot; =&gt; &quot;&#209;&#338;&quot;,
-	&quot;&#208;&#171;&quot; =&gt; &quot;&#209;&#8249;&quot;,	&quot;&#208;&#170;&quot; =&gt; &quot;&#209;&#352;&quot;,	&quot;&#208;&#169;&quot; =&gt; &quot;&#209;&#8240;&quot;,
-	&quot;&#208;&#168;&quot; =&gt; &quot;&#209;&#710;&quot;,	&quot;&#208;&#167;&quot; =&gt; &quot;&#209;&#8225;&quot;,	&quot;&#208;&#166;&quot; =&gt; &quot;&#209;&#8224;&quot;,
-	&quot;&#208;&#165;&quot; =&gt; &quot;&#209;&#8230;&quot;,	&quot;&#208;&#164;&quot; =&gt; &quot;&#209;&#8222;&quot;,	&quot;&#208;&#163;&quot; =&gt; &quot;&#209;&#402;&quot;,
-	&quot;&#208;&#162;&quot; =&gt; &quot;&#209;&#8218;&quot;,	&quot;&#208;&#161;&quot; =&gt; &quot;&#209;*&quot;,	&quot;&#208; &quot; =&gt; &quot;&#209;&#8364;&quot;,
-	&quot;&#208;&#376;&quot; =&gt; &quot;&#208;&#191;&quot;,	&quot;&#208;&#382;&quot; =&gt; &quot;&#208;&#190;&quot;,	&quot;&#208;*&quot; =&gt; &quot;&#208;&#189;&quot;,
-	&quot;&#208;&#339;&quot; =&gt; &quot;&#208;&#188;&quot;,	&quot;&#208;&#8250;&quot; =&gt; &quot;&#208;&#187;&quot;,	&quot;&#208;&#353;&quot; =&gt; &quot;&#208;&#186;&quot;,
-	&quot;&#208;&#8482;&quot; =&gt; &quot;&#208;&#185;&quot;,	&quot;&#208;&#732;&quot; =&gt; &quot;&#208;&#184;&quot;,	&quot;&#208;&#8212;&quot; =&gt; &quot;&#208;&#183;&quot;,
-	&quot;&#208;&#8211;&quot; =&gt; &quot;&#208;&#182;&quot;,	&quot;&#208;&#8226;&quot; =&gt; &quot;&#208;&#181;&quot;,	&quot;&#208;&#8221;&quot; =&gt; &quot;&#208;&#180;&quot;,
-	&quot;&#208;&#8220;&quot; =&gt; &quot;&#208;&#179;&quot;,	&quot;&#208;&#8217;&quot; =&gt; &quot;&#208;&#178;&quot;,	&quot;&#208;&#8216;&quot; =&gt; &quot;&#208;&#177;&quot;,
-	&quot;&#208;*&quot; =&gt; &quot;&#208;&#176;&quot;,	&quot;&#208;*&quot; =&gt; &quot;&#209;&#376;&quot;,	&quot;&#208;&#381;&quot; =&gt; &quot;&#209;&#382;&quot;,
-	&quot;&#208;*&quot; =&gt; &quot;&#209;*&quot;,	&quot;&#208;&#338;&quot; =&gt; &quot;&#209;&#339;&quot;,	&quot;&#208;&#8249;&quot; =&gt; &quot;&#209;&#8250;&quot;,
-	&quot;&#208;&#352;&quot; =&gt; &quot;&#209;&#353;&quot;,	&quot;&#208;&#8240;&quot; =&gt; &quot;&#209;&#8482;&quot;,	&quot;&#208;&#710;&quot; =&gt; &quot;&#209;&#732;&quot;,
-	&quot;&#208;&#8225;&quot; =&gt; &quot;&#209;&#8212;&quot;,	&quot;&#208;&#8224;&quot; =&gt; &quot;&#209;&#8211;&quot;,	&quot;&#208;&#8230;&quot; =&gt; &quot;&#209;&#8226;&quot;,
-	&quot;&#208;&#8222;&quot; =&gt; &quot;&#209;&#8221;&quot;,	&quot;&#208;&#402;&quot; =&gt; &quot;&#209;&#8220;&quot;,	&quot;&#208;&#8218;&quot; =&gt; &quot;&#209;&#8217;&quot;,
-	&quot;&#208;*&quot; =&gt; &quot;&#209;&#8216;&quot;,	&quot;&#208;&#8364;&quot; =&gt; &quot;&#209;*&quot;,	&quot;&#207;&#180;&quot; =&gt; &quot;&#206;&#184;&quot;,
-	&quot;&#207;&#174;&quot; =&gt; &quot;&#207;&#175;&quot;,	&quot;&#207;&#172;&quot; =&gt; &quot;&#207;&#173;&quot;,	&quot;&#207;&#170;&quot; =&gt; &quot;&#207;&#171;&quot;,
-	&quot;&#207;&#168;&quot; =&gt; &quot;&#207;&#169;&quot;,	&quot;&#207;&#166;&quot; =&gt; &quot;&#207;&#167;&quot;,	&quot;&#207;&#164;&quot; =&gt; &quot;&#207;&#165;&quot;,
-	&quot;&#207;&#162;&quot; =&gt; &quot;&#207;&#163;&quot;,	&quot;&#207; &quot; =&gt; &quot;&#207;&#161;&quot;,	&quot;&#207;&#382;&quot; =&gt; &quot;&#207;&#376;&quot;,
-	&quot;&#207;&#339;&quot; =&gt; &quot;&#207;*&quot;,	&quot;&#207;&#353;&quot; =&gt; &quot;&#207;&#8250;&quot;,	&quot;&#207;&#732;&quot; =&gt; &quot;&#207;&#8482;&quot;,
-	&quot;&#206;&#171;&quot; =&gt; &quot;&#207;&#8249;&quot;,	&quot;&#206;&#170;&quot; =&gt; &quot;&#207;&#352;&quot;,	&quot;&#206;&#169;&quot; =&gt; &quot;&#207;&#8240;&quot;,
-	&quot;&#206;&#168;&quot; =&gt; &quot;&#207;&#710;&quot;,	&quot;&#206;&#167;&quot; =&gt; &quot;&#207;&#8225;&quot;,	&quot;&#206;&#166;&quot; =&gt; &quot;&#207;&#8224;&quot;,
-	&quot;&#206;&#165;&quot; =&gt; &quot;&#207;&#8230;&quot;,	&quot;&#206;&#164;&quot; =&gt; &quot;&#207;&#8222;&quot;,	&quot;&#206;&#163;&quot; =&gt; &quot;&#207;&#402;&quot;,
-	&quot;&#206;&#161;&quot; =&gt; &quot;&#207;*&quot;,	&quot;&#206; &quot; =&gt; &quot;&#207;&#8364;&quot;,	&quot;&#206;&#376;&quot; =&gt; &quot;&#206;&#191;&quot;,
-	&quot;&#206;&#382;&quot; =&gt; &quot;&#206;&#190;&quot;,	&quot;&#206;*&quot; =&gt; &quot;&#206;&#189;&quot;,	&quot;&#206;&#339;&quot; =&gt; &quot;&#206;&#188;&quot;,
-	&quot;&#206;&#8250;&quot; =&gt; &quot;&#206;&#187;&quot;,	&quot;&#206;&#353;&quot; =&gt; &quot;&#206;&#186;&quot;,	&quot;&#206;&#8482;&quot; =&gt; &quot;&#206;&#185;&quot;,
-	&quot;&#206;&#732;&quot; =&gt; &quot;&#206;&#184;&quot;,	&quot;&#206;&#8212;&quot; =&gt; &quot;&#206;&#183;&quot;,	&quot;&#206;&#8211;&quot; =&gt; &quot;&#206;&#182;&quot;,
-	&quot;&#206;&#8226;&quot; =&gt; &quot;&#206;&#181;&quot;,	&quot;&#206;&#8221;&quot; =&gt; &quot;&#206;&#180;&quot;,	&quot;&#206;&#8220;&quot; =&gt; &quot;&#206;&#179;&quot;,
-	&quot;&#206;&#8217;&quot; =&gt; &quot;&#206;&#178;&quot;,	&quot;&#206;&#8216;&quot; =&gt; &quot;&#206;&#177;&quot;,	&quot;&#206;*&quot; =&gt; &quot;&#207;&#381;&quot;,
-	&quot;&#206;&#381;&quot; =&gt; &quot;&#207;*&quot;,	&quot;&#206;&#338;&quot; =&gt; &quot;&#207;&#338;&quot;,	&quot;&#206;&#352;&quot; =&gt; &quot;&#206;&#175;&quot;,
-	&quot;&#206;&#8240;&quot; =&gt; &quot;&#206;&#174;&quot;,	&quot;&#206;&#710;&quot; =&gt; &quot;&#206;&#173;&quot;,	&quot;&#206;&#8224;&quot; =&gt; &quot;&#206;&#172;&quot;,
-	&quot;&#200;&#178;&quot; =&gt; &quot;&#200;&#179;&quot;,	&quot;&#200;&#176;&quot; =&gt; &quot;&#200;&#177;&quot;,	&quot;&#200;&#174;&quot; =&gt; &quot;&#200;&#175;&quot;,
-	&quot;&#200;&#172;&quot; =&gt; &quot;&#200;&#173;&quot;,	&quot;&#200;&#170;&quot; =&gt; &quot;&#200;&#171;&quot;,	&quot;&#200;&#168;&quot; =&gt; &quot;&#200;&#169;&quot;,
-	&quot;&#200;&#166;&quot; =&gt; &quot;&#200;&#167;&quot;,	&quot;&#200;&#164;&quot; =&gt; &quot;&#200;&#165;&quot;,	&quot;&#200;&#162;&quot; =&gt; &quot;&#200;&#163;&quot;,
-	&quot;&#200; &quot; =&gt; &quot;&#198;&#382;&quot;,	&quot;&#200;&#382;&quot; =&gt; &quot;&#200;&#376;&quot;,	&quot;&#200;&#339;&quot; =&gt; &quot;&#200;*&quot;,
-	&quot;&#200;&#353;&quot; =&gt; &quot;&#200;&#8250;&quot;,	&quot;&#200;&#732;&quot; =&gt; &quot;&#200;&#8482;&quot;,	&quot;&#200;&#8211;&quot; =&gt; &quot;&#200;&#8212;&quot;,
-	&quot;&#200;&#8221;&quot; =&gt; &quot;&#200;&#8226;&quot;,	&quot;&#200;&#8217;&quot; =&gt; &quot;&#200;&#8220;&quot;,	&quot;&#200;*&quot; =&gt; &quot;&#200;&#8216;&quot;,
-	&quot;&#200;&#381;&quot; =&gt; &quot;&#200;*&quot;,	&quot;&#200;&#338;&quot; =&gt; &quot;&#200;*&quot;,	&quot;&#200;&#352;&quot; =&gt; &quot;&#200;&#8249;&quot;,
-	&quot;&#200;&#710;&quot; =&gt; &quot;&#200;&#8240;&quot;,	&quot;&#200;&#8224;&quot; =&gt; &quot;&#200;&#8225;&quot;,	&quot;&#200;&#8222;&quot; =&gt; &quot;&#200;&#8230;&quot;,
-	&quot;&#200;&#8218;&quot; =&gt; &quot;&#200;&#402;&quot;,	&quot;&#200;&#8364;&quot; =&gt; &quot;&#200;*&quot;,	&quot;&#199;&#190;&quot; =&gt; &quot;&#199;&#191;&quot;,
-	&quot;&#199;&#188;&quot; =&gt; &quot;&#199;&#189;&quot;,	&quot;&#199;&#186;&quot; =&gt; &quot;&#199;&#187;&quot;,	&quot;&#199;&#184;&quot; =&gt; &quot;&#199;&#185;&quot;,
-	&quot;&#199;&#183;&quot; =&gt; &quot;&#198;&#191;&quot;,	&quot;&#199;&#182;&quot; =&gt; &quot;&#198;&#8226;&quot;,	&quot;&#199;&#180;&quot; =&gt; &quot;&#199;&#181;&quot;,
-	&quot;&#199;&#177;&quot; =&gt; &quot;&#199;&#179;&quot;,	&quot;&#199;&#174;&quot; =&gt; &quot;&#199;&#175;&quot;,	&quot;&#199;&#172;&quot; =&gt; &quot;&#199;&#173;&quot;,
-	&quot;&#199;&#170;&quot; =&gt; &quot;&#199;&#171;&quot;,	&quot;&#199;&#168;&quot; =&gt; &quot;&#199;&#169;&quot;,	&quot;&#199;&#166;&quot; =&gt; &quot;&#199;&#167;&quot;,
-	&quot;&#199;&#164;&quot; =&gt; &quot;&#199;&#165;&quot;,	&quot;&#199;&#162;&quot; =&gt; &quot;&#199;&#163;&quot;,	&quot;&#199; &quot; =&gt; &quot;&#199;&#161;&quot;,
-	&quot;&#199;&#382;&quot; =&gt; &quot;&#199;&#376;&quot;,	&quot;&#199;&#8250;&quot; =&gt; &quot;&#199;&#339;&quot;,	&quot;&#199;&#8482;&quot; =&gt; &quot;&#199;&#353;&quot;,
-	&quot;&#199;&#8212;&quot; =&gt; &quot;&#199;&#732;&quot;,	&quot;&#199;&#8226;&quot; =&gt; &quot;&#199;&#8211;&quot;,	&quot;&#199;&#8220;&quot; =&gt; &quot;&#199;&#8221;&quot;,
-	&quot;&#199;&#8216;&quot; =&gt; &quot;&#199;&#8217;&quot;,	&quot;&#199;*&quot; =&gt; &quot;&#199;*&quot;,	&quot;&#199;*&quot; =&gt; &quot;&#199;&#381;&quot;,
-	&quot;&#199;&#352;&quot; =&gt; &quot;&#199;&#338;&quot;,	&quot;&#199;&#8225;&quot; =&gt; &quot;&#199;&#8240;&quot;,	&quot;&#199;&#8222;&quot; =&gt; &quot;&#199;&#8224;&quot;,
-	&quot;&#198;&#188;&quot; =&gt; &quot;&#198;&#189;&quot;,	&quot;&#198;&#184;&quot; =&gt; &quot;&#198;&#185;&quot;,	&quot;&#198;&#183;&quot; =&gt; &quot;&#202;&#8217;&quot;,
-	&quot;&#198;&#181;&quot; =&gt; &quot;&#198;&#182;&quot;,	&quot;&#198;&#179;&quot; =&gt; &quot;&#198;&#180;&quot;,	&quot;&#198;&#178;&quot; =&gt; &quot;&#202;&#8249;&quot;,
-	&quot;&#198;&#177;&quot; =&gt; &quot;&#202;&#352;&quot;,	&quot;&#198;&#175;&quot; =&gt; &quot;&#198;&#176;&quot;,	&quot;&#198;&#174;&quot; =&gt; &quot;&#202;&#710;&quot;,
-	&quot;&#198;&#172;&quot; =&gt; &quot;&#198;&#173;&quot;,	&quot;&#198;&#169;&quot; =&gt; &quot;&#202;&#402;&quot;,	&quot;&#198;&#167;&quot; =&gt; &quot;&#198;&#168;&quot;,
-	&quot;&#198;&#166;&quot; =&gt; &quot;&#202;&#8364;&quot;,	&quot;&#198;&#164;&quot; =&gt; &quot;&#198;&#165;&quot;,	&quot;&#198;&#162;&quot; =&gt; &quot;&#198;&#163;&quot;,
-	&quot;&#198; &quot; =&gt; &quot;&#198;&#161;&quot;,	&quot;&#198;&#376;&quot; =&gt; &quot;&#201;&#181;&quot;,	&quot;&#198;*&quot; =&gt; &quot;&#201;&#178;&quot;,
-	&quot;&#198;&#339;&quot; =&gt; &quot;&#201;&#175;&quot;,	&quot;&#198;&#732;&quot; =&gt; &quot;&#198;&#8482;&quot;,	&quot;&#198;&#8212;&quot; =&gt; &quot;&#201;&#168;&quot;,
-	&quot;&#198;&#8211;&quot; =&gt; &quot;&#201;&#169;&quot;,	&quot;&#198;&#8221;&quot; =&gt; &quot;&#201;&#163;&quot;,	&quot;&#198;&#8220;&quot; =&gt; &quot;&#201; &quot;,
-	&quot;&#198;&#8216;&quot; =&gt; &quot;&#198;&#8217;&quot;,	&quot;&#198;*&quot; =&gt; &quot;&#201;&#8250;&quot;,	&quot;&#198;*&quot; =&gt; &quot;&#201;&#8482;&quot;,
-	&quot;&#198;&#381;&quot; =&gt; &quot;&#199;*&quot;,	&quot;&#198;&#8249;&quot; =&gt; &quot;&#198;&#338;&quot;,	&quot;&#198;&#352;&quot; =&gt; &quot;&#201;&#8212;&quot;,
-	&quot;&#198;&#8240;&quot; =&gt; &quot;&#201;&#8211;&quot;,	&quot;&#198;&#8225;&quot; =&gt; &quot;&#198;&#710;&quot;,	&quot;&#198;&#8224;&quot; =&gt; &quot;&#201;&#8221;&quot;,
-	&quot;&#198;&#8222;&quot; =&gt; &quot;&#198;&#8230;&quot;,	&quot;&#198;&#8218;&quot; =&gt; &quot;&#198;&#402;&quot;,	&quot;&#198;*&quot; =&gt; &quot;&#201;&#8220;&quot;,
-	&quot;&#197;&#189;&quot; =&gt; &quot;&#197;&#190;&quot;,	&quot;&#197;&#187;&quot; =&gt; &quot;&#197;&#188;&quot;,	&quot;&#197;&#185;&quot; =&gt; &quot;&#197;&#186;&quot;,
-	&quot;&#197;&#184;&quot; =&gt; &quot;&#195;&#191;&quot;,	&quot;&#197;&#182;&quot; =&gt; &quot;&#197;&#183;&quot;,	&quot;&#197;&#180;&quot; =&gt; &quot;&#197;&#181;&quot;,
-	&quot;&#197;&#178;&quot; =&gt; &quot;&#197;&#179;&quot;,	&quot;&#197;&#176;&quot; =&gt; &quot;&#197;&#177;&quot;,	&quot;&#197;&#174;&quot; =&gt; &quot;&#197;&#175;&quot;,
-	&quot;&#197;&#172;&quot; =&gt; &quot;&#197;&#173;&quot;,	&quot;&#197;&#170;&quot; =&gt; &quot;&#197;&#171;&quot;,	&quot;&#197;&#168;&quot; =&gt; &quot;&#197;&#169;&quot;,
-	&quot;&#197;&#166;&quot; =&gt; &quot;&#197;&#167;&quot;,	&quot;&#197;&#164;&quot; =&gt; &quot;&#197;&#165;&quot;,	&quot;&#197;&#162;&quot; =&gt; &quot;&#197;&#163;&quot;,
-	&quot;&#197; &quot; =&gt; &quot;&#197;&#161;&quot;,	&quot;&#197;&#382;&quot; =&gt; &quot;&#197;&#376;&quot;,	&quot;&#197;&#339;&quot; =&gt; &quot;&#197;*&quot;,
-	&quot;&#197;&#353;&quot; =&gt; &quot;&#197;&#8250;&quot;,	&quot;&#197;&#732;&quot; =&gt; &quot;&#197;&#8482;&quot;,	&quot;&#197;&#8211;&quot; =&gt; &quot;&#197;&#8212;&quot;,
-	&quot;&#197;&#8221;&quot; =&gt; &quot;&#197;&#8226;&quot;,	&quot;&#197;&#8217;&quot; =&gt; &quot;&#197;&#8220;&quot;,	&quot;&#197;*&quot; =&gt; &quot;&#197;&#8216;&quot;,
-	&quot;&#197;&#381;&quot; =&gt; &quot;&#197;*&quot;,	&quot;&#197;&#338;&quot; =&gt; &quot;&#197;*&quot;,	&quot;&#197;&#352;&quot; =&gt; &quot;&#197;&#8249;&quot;,
-	&quot;&#197;&#8225;&quot; =&gt; &quot;&#197;&#710;&quot;,	&quot;&#197;&#8230;&quot; =&gt; &quot;&#197;&#8224;&quot;,	&quot;&#197;&#402;&quot; =&gt; &quot;&#197;&#8222;&quot;,
-	&quot;&#197;*&quot; =&gt; &quot;&#197;&#8218;&quot;,	&quot;&#196;&#191;&quot; =&gt; &quot;&#197;&#8364;&quot;,	&quot;&#196;&#189;&quot; =&gt; &quot;&#196;&#190;&quot;,
-	&quot;&#196;&#187;&quot; =&gt; &quot;&#196;&#188;&quot;,	&quot;&#196;&#185;&quot; =&gt; &quot;&#196;&#186;&quot;,	&quot;&#196;&#182;&quot; =&gt; &quot;&#196;&#183;&quot;,
-	&quot;&#196;&#180;&quot; =&gt; &quot;&#196;&#181;&quot;,	&quot;&#196;&#178;&quot; =&gt; &quot;&#196;&#179;&quot;,	&quot;&#196;&#176;&quot; =&gt; &quot;i&quot;,
-	&quot;&#196;&#174;&quot; =&gt; &quot;&#196;&#175;&quot;,	&quot;&#196;&#172;&quot; =&gt; &quot;&#196;&#173;&quot;,	&quot;&#196;&#170;&quot; =&gt; &quot;&#196;&#171;&quot;,
-	&quot;&#196;&#168;&quot; =&gt; &quot;&#196;&#169;&quot;,	&quot;&#196;&#166;&quot; =&gt; &quot;&#196;&#167;&quot;,	&quot;&#196;&#164;&quot; =&gt; &quot;&#196;&#165;&quot;,
-	&quot;&#196;&#162;&quot; =&gt; &quot;&#196;&#163;&quot;,	&quot;&#196; &quot; =&gt; &quot;&#196;&#161;&quot;,	&quot;&#196;&#382;&quot; =&gt; &quot;&#196;&#376;&quot;,
-	&quot;&#196;&#339;&quot; =&gt; &quot;&#196;*&quot;,	&quot;&#196;&#353;&quot; =&gt; &quot;&#196;&#8250;&quot;,	&quot;&#196;&#732;&quot; =&gt; &quot;&#196;&#8482;&quot;,
-	&quot;&#196;&#8211;&quot; =&gt; &quot;&#196;&#8212;&quot;,	&quot;&#196;&#8221;&quot; =&gt; &quot;&#196;&#8226;&quot;,	&quot;&#196;&#8217;&quot; =&gt; &quot;&#196;&#8220;&quot;,
-	&quot;&#196;*&quot; =&gt; &quot;&#196;&#8216;&quot;,	&quot;&#196;&#381;&quot; =&gt; &quot;&#196;*&quot;,	&quot;&#196;&#338;&quot; =&gt; &quot;&#196;*&quot;,
-	&quot;&#196;&#352;&quot; =&gt; &quot;&#196;&#8249;&quot;,	&quot;&#196;&#710;&quot; =&gt; &quot;&#196;&#8240;&quot;,	&quot;&#196;&#8224;&quot; =&gt; &quot;&#196;&#8225;&quot;,
-	&quot;&#196;&#8222;&quot; =&gt; &quot;&#196;&#8230;&quot;,	&quot;&#196;&#8218;&quot; =&gt; &quot;&#196;&#402;&quot;,	&quot;&#196;&#8364;&quot; =&gt; &quot;&#196;*&quot;,
-	&quot;&#195;&#382;&quot; =&gt; &quot;&#195;&#190;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#189;&quot;,	&quot;&#195;&#339;&quot; =&gt; &quot;&#195;&#188;&quot;,
-	&quot;&#195;&#8250;&quot; =&gt; &quot;&#195;&#187;&quot;,	&quot;&#195;&#353;&quot; =&gt; &quot;&#195;&#186;&quot;,	&quot;&#195;&#8482;&quot; =&gt; &quot;&#195;&#185;&quot;,
-	&quot;&#195;&#732;&quot; =&gt; &quot;&#195;&#184;&quot;,	&quot;&#195;&#8211;&quot; =&gt; &quot;&#195;&#182;&quot;,	&quot;&#195;&#8226;&quot; =&gt; &quot;&#195;&#181;&quot;,
-	&quot;&#195;&#8221;&quot; =&gt; &quot;&#195;&#180;&quot;,	&quot;&#195;&#8220;&quot; =&gt; &quot;&#195;&#179;&quot;,	&quot;&#195;&#8217;&quot; =&gt; &quot;&#195;&#178;&quot;,
-	&quot;&#195;&#8216;&quot; =&gt; &quot;&#195;&#177;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#176;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#175;&quot;,
-	&quot;&#195;&#381;&quot; =&gt; &quot;&#195;&#174;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#173;&quot;,	&quot;&#195;&#338;&quot; =&gt; &quot;&#195;&#172;&quot;,
-	&quot;&#195;&#8249;&quot; =&gt; &quot;&#195;&#171;&quot;,	&quot;&#195;&#352;&quot; =&gt; &quot;&#195;&#170;&quot;,	&quot;&#195;&#8240;&quot; =&gt; &quot;&#195;&#169;&quot;,
-	&quot;&#195;&#710;&quot; =&gt; &quot;&#195;&#168;&quot;,	&quot;&#195;&#8225;&quot; =&gt; &quot;&#195;&#167;&quot;,	&quot;&#195;&#8224;&quot; =&gt; &quot;&#195;&#166;&quot;,
-	&quot;&#195;&#8230;&quot; =&gt; &quot;&#195;&#165;&quot;,	&quot;&#195;&#8222;&quot; =&gt; &quot;&#195;&#164;&quot;,	&quot;&#195;&#402;&quot; =&gt; &quot;&#195;&#163;&quot;,
-	&quot;&#195;&#8218;&quot; =&gt; &quot;&#195;&#162;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#161;&quot;,	&quot;&#195;&#8364;&quot; =&gt; &quot;&#195; &quot;,
-	&quot;Z&quot; =&gt; &quot;z&quot;,		&quot;Y&quot; =&gt; &quot;y&quot;,		&quot;X&quot; =&gt; &quot;x&quot;,
-	&quot;W&quot; =&gt; &quot;w&quot;,		&quot;V&quot; =&gt; &quot;v&quot;,		&quot;U&quot; =&gt; &quot;u&quot;,
-	&quot;T&quot; =&gt; &quot;t&quot;,		&quot;S&quot; =&gt; &quot;s&quot;,		&quot;R&quot; =&gt; &quot;r&quot;,
-	&quot;Q&quot; =&gt; &quot;q&quot;,		&quot;P&quot; =&gt; &quot;p&quot;,		&quot;O&quot; =&gt; &quot;o&quot;,
-	&quot;N&quot; =&gt; &quot;n&quot;,		&quot;M&quot; =&gt; &quot;m&quot;,		&quot;L&quot; =&gt; &quot;l&quot;,
-	&quot;K&quot; =&gt; &quot;k&quot;,		&quot;J&quot; =&gt; &quot;j&quot;,		&quot;I&quot; =&gt; &quot;i&quot;,
-	&quot;H&quot; =&gt; &quot;h&quot;,		&quot;G&quot; =&gt; &quot;g&quot;,		&quot;F&quot; =&gt; &quot;f&quot;,
-	&quot;E&quot; =&gt; &quot;e&quot;,		&quot;D&quot; =&gt; &quot;d&quot;,		&quot;C&quot; =&gt; &quot;c&quot;,
-	&quot;B&quot; =&gt; &quot;b&quot;,		&quot;A&quot; =&gt; &quot;a&quot;,
-);
-
-
-$UTF8_TABLES['strtoupper'] = array(
-	&quot;&#239;&#189;&#353;&quot; =&gt; &quot;&#239;&#188;&#186;&quot;,	&quot;&#239;&#189;&#8482;&quot; =&gt; &quot;&#239;&#188;&#185;&quot;,	&quot;&#239;&#189;&#732;&quot; =&gt; &quot;&#239;&#188;&#184;&quot;,
-	&quot;&#239;&#189;&#8212;&quot; =&gt; &quot;&#239;&#188;&#183;&quot;,	&quot;&#239;&#189;&#8211;&quot; =&gt; &quot;&#239;&#188;&#182;&quot;,	&quot;&#239;&#189;&#8226;&quot; =&gt; &quot;&#239;&#188;&#181;&quot;,
-	&quot;&#239;&#189;&#8221;&quot; =&gt; &quot;&#239;&#188;&#180;&quot;,	&quot;&#239;&#189;&#8220;&quot; =&gt; &quot;&#239;&#188;&#179;&quot;,	&quot;&#239;&#189;&#8217;&quot; =&gt; &quot;&#239;&#188;&#178;&quot;,
-	&quot;&#239;&#189;&#8216;&quot; =&gt; &quot;&#239;&#188;&#177;&quot;,	&quot;&#239;&#189;*&quot; =&gt; &quot;&#239;&#188;&#176;&quot;,	&quot;&#239;&#189;*&quot; =&gt; &quot;&#239;&#188;&#175;&quot;,
-	&quot;&#239;&#189;&#381;&quot; =&gt; &quot;&#239;&#188;&#174;&quot;,	&quot;&#239;&#189;*&quot; =&gt; &quot;&#239;&#188;&#173;&quot;,	&quot;&#239;&#189;&#338;&quot; =&gt; &quot;&#239;&#188;&#172;&quot;,
-	&quot;&#239;&#189;&#8249;&quot; =&gt; &quot;&#239;&#188;&#171;&quot;,	&quot;&#239;&#189;&#352;&quot; =&gt; &quot;&#239;&#188;&#170;&quot;,	&quot;&#239;&#189;&#8240;&quot; =&gt; &quot;&#239;&#188;&#169;&quot;,
-	&quot;&#239;&#189;&#710;&quot; =&gt; &quot;&#239;&#188;&#168;&quot;,	&quot;&#239;&#189;&#8225;&quot; =&gt; &quot;&#239;&#188;&#167;&quot;,	&quot;&#239;&#189;&#8224;&quot; =&gt; &quot;&#239;&#188;&#166;&quot;,
-	&quot;&#239;&#189;&#8230;&quot; =&gt; &quot;&#239;&#188;&#165;&quot;,	&quot;&#239;&#189;&#8222;&quot; =&gt; &quot;&#239;&#188;&#164;&quot;,	&quot;&#239;&#189;&#402;&quot; =&gt; &quot;&#239;&#188;&#163;&quot;,
-	&quot;&#239;&#189;&#8218;&quot; =&gt; &quot;&#239;&#188;&#162;&quot;,	&quot;&#239;&#189;*&quot; =&gt; &quot;&#239;&#188;&#161;&quot;,	&quot;&#225;&#191;&#179;&quot; =&gt; &quot;&#225;&#191;&#188;&quot;,
-	&quot;&#225;&#191;&#165;&quot; =&gt; &quot;&#225;&#191;&#172;&quot;,	&quot;&#225;&#191;&#161;&quot; =&gt; &quot;&#225;&#191;&#169;&quot;,	&quot;&#225;&#191; &quot; =&gt; &quot;&#225;&#191;&#168;&quot;,
-	&quot;&#225;&#191;&#8216;&quot; =&gt; &quot;&#225;&#191;&#8482;&quot;,	&quot;&#225;&#191;*&quot; =&gt; &quot;&#225;&#191;&#732;&quot;,	&quot;&#225;&#191;&#402;&quot; =&gt; &quot;&#225;&#191;&#338;&quot;,
-	&quot;&#225;&#190;&#190;&quot; =&gt; &quot;&#206;&#8482;&quot;,	&quot;&#225;&#190;&#179;&quot; =&gt; &quot;&#225;&#190;&#188;&quot;,	&quot;&#225;&#190;&#177;&quot; =&gt; &quot;&#225;&#190;&#185;&quot;,
-	&quot;&#225;&#190;&#176;&quot; =&gt; &quot;&#225;&#190;&#184;&quot;,	&quot;&#225;&#190;&#167;&quot; =&gt; &quot;&#225;&#190;&#175;&quot;,	&quot;&#225;&#190;&#166;&quot; =&gt; &quot;&#225;&#190;&#174;&quot;,
-	&quot;&#225;&#190;&#165;&quot; =&gt; &quot;&#225;&#190;&#173;&quot;,	&quot;&#225;&#190;&#164;&quot; =&gt; &quot;&#225;&#190;&#172;&quot;,	&quot;&#225;&#190;&#163;&quot; =&gt; &quot;&#225;&#190;&#171;&quot;,
-	&quot;&#225;&#190;&#162;&quot; =&gt; &quot;&#225;&#190;&#170;&quot;,	&quot;&#225;&#190;&#161;&quot; =&gt; &quot;&#225;&#190;&#169;&quot;,	&quot;&#225;&#190; &quot; =&gt; &quot;&#225;&#190;&#168;&quot;,
-	&quot;&#225;&#190;&#8212;&quot; =&gt; &quot;&#225;&#190;&#376;&quot;,	&quot;&#225;&#190;&#8211;&quot; =&gt; &quot;&#225;&#190;&#382;&quot;,	&quot;&#225;&#190;&#8226;&quot; =&gt; &quot;&#225;&#190;*&quot;,
-	&quot;&#225;&#190;&#8221;&quot; =&gt; &quot;&#225;&#190;&#339;&quot;,	&quot;&#225;&#190;&#8220;&quot; =&gt; &quot;&#225;&#190;&#8250;&quot;,	&quot;&#225;&#190;&#8217;&quot; =&gt; &quot;&#225;&#190;&#353;&quot;,
-	&quot;&#225;&#190;&#8216;&quot; =&gt; &quot;&#225;&#190;&#8482;&quot;,	&quot;&#225;&#190;*&quot; =&gt; &quot;&#225;&#190;&#732;&quot;,	&quot;&#225;&#190;&#8225;&quot; =&gt; &quot;&#225;&#190;*&quot;,
-	&quot;&#225;&#190;&#8224;&quot; =&gt; &quot;&#225;&#190;&#381;&quot;,	&quot;&#225;&#190;&#8230;&quot; =&gt; &quot;&#225;&#190;*&quot;,	&quot;&#225;&#190;&#8222;&quot; =&gt; &quot;&#225;&#190;&#338;&quot;,
-	&quot;&#225;&#190;&#402;&quot; =&gt; &quot;&#225;&#190;&#8249;&quot;,	&quot;&#225;&#190;&#8218;&quot; =&gt; &quot;&#225;&#190;&#352;&quot;,	&quot;&#225;&#190;*&quot; =&gt; &quot;&#225;&#190;&#8240;&quot;,
-	&quot;&#225;&#190;&#8364;&quot; =&gt; &quot;&#225;&#190;&#710;&quot;,	&quot;&#225;&#189;&#189;&quot; =&gt; &quot;&#225;&#191;&#187;&quot;,	&quot;&#225;&#189;&#188;&quot; =&gt; &quot;&#225;&#191;&#186;&quot;,
-	&quot;&#225;&#189;&#187;&quot; =&gt; &quot;&#225;&#191;&#171;&quot;,	&quot;&#225;&#189;&#186;&quot; =&gt; &quot;&#225;&#191;&#170;&quot;,	&quot;&#225;&#189;&#185;&quot; =&gt; &quot;&#225;&#191;&#185;&quot;,
-	&quot;&#225;&#189;&#184;&quot; =&gt; &quot;&#225;&#191;&#184;&quot;,	&quot;&#225;&#189;&#183;&quot; =&gt; &quot;&#225;&#191;&#8250;&quot;,	&quot;&#225;&#189;&#182;&quot; =&gt; &quot;&#225;&#191;&#353;&quot;,
-	&quot;&#225;&#189;&#181;&quot; =&gt; &quot;&#225;&#191;&#8249;&quot;,	&quot;&#225;&#189;&#180;&quot; =&gt; &quot;&#225;&#191;&#352;&quot;,	&quot;&#225;&#189;&#179;&quot; =&gt; &quot;&#225;&#191;&#8240;&quot;,
-	&quot;&#225;&#189;&#178;&quot; =&gt; &quot;&#225;&#191;&#710;&quot;,	&quot;&#225;&#189;&#177;&quot; =&gt; &quot;&#225;&#190;&#187;&quot;,	&quot;&#225;&#189;&#176;&quot; =&gt; &quot;&#225;&#190;&#186;&quot;,
-	&quot;&#225;&#189;&#167;&quot; =&gt; &quot;&#225;&#189;&#175;&quot;,	&quot;&#225;&#189;&#166;&quot; =&gt; &quot;&#225;&#189;&#174;&quot;,	&quot;&#225;&#189;&#165;&quot; =&gt; &quot;&#225;&#189;&#173;&quot;,
-	&quot;&#225;&#189;&#164;&quot; =&gt; &quot;&#225;&#189;&#172;&quot;,	&quot;&#225;&#189;&#163;&quot; =&gt; &quot;&#225;&#189;&#171;&quot;,	&quot;&#225;&#189;&#162;&quot; =&gt; &quot;&#225;&#189;&#170;&quot;,
-	&quot;&#225;&#189;&#161;&quot; =&gt; &quot;&#225;&#189;&#169;&quot;,	&quot;&#225;&#189; &quot; =&gt; &quot;&#225;&#189;&#168;&quot;,	&quot;&#225;&#189;&#8212;&quot; =&gt; &quot;&#225;&#189;&#376;&quot;,
-	&quot;&#225;&#189;&#8226;&quot; =&gt; &quot;&#225;&#189;*&quot;,	&quot;&#225;&#189;&#8220;&quot; =&gt; &quot;&#225;&#189;&#8250;&quot;,	&quot;&#225;&#189;&#8216;&quot; =&gt; &quot;&#225;&#189;&#8482;&quot;,
-	&quot;&#225;&#189;&#8230;&quot; =&gt; &quot;&#225;&#189;*&quot;,	&quot;&#225;&#189;&#8222;&quot; =&gt; &quot;&#225;&#189;&#338;&quot;,	&quot;&#225;&#189;&#402;&quot; =&gt; &quot;&#225;&#189;&#8249;&quot;,
-	&quot;&#225;&#189;&#8218;&quot; =&gt; &quot;&#225;&#189;&#352;&quot;,	&quot;&#225;&#189;*&quot; =&gt; &quot;&#225;&#189;&#8240;&quot;,	&quot;&#225;&#189;&#8364;&quot; =&gt; &quot;&#225;&#189;&#710;&quot;,
-	&quot;&#225;&#188;&#183;&quot; =&gt; &quot;&#225;&#188;&#191;&quot;,	&quot;&#225;&#188;&#182;&quot; =&gt; &quot;&#225;&#188;&#190;&quot;,	&quot;&#225;&#188;&#181;&quot; =&gt; &quot;&#225;&#188;&#189;&quot;,
-	&quot;&#225;&#188;&#180;&quot; =&gt; &quot;&#225;&#188;&#188;&quot;,	&quot;&#225;&#188;&#179;&quot; =&gt; &quot;&#225;&#188;&#187;&quot;,	&quot;&#225;&#188;&#178;&quot; =&gt; &quot;&#225;&#188;&#186;&quot;,
-	&quot;&#225;&#188;&#177;&quot; =&gt; &quot;&#225;&#188;&#185;&quot;,	&quot;&#225;&#188;&#176;&quot; =&gt; &quot;&#225;&#188;&#184;&quot;,	&quot;&#225;&#188;&#167;&quot; =&gt; &quot;&#225;&#188;&#175;&quot;,
-	&quot;&#225;&#188;&#166;&quot; =&gt; &quot;&#225;&#188;&#174;&quot;,	&quot;&#225;&#188;&#165;&quot; =&gt; &quot;&#225;&#188;&#173;&quot;,	&quot;&#225;&#188;&#164;&quot; =&gt; &quot;&#225;&#188;&#172;&quot;,
-	&quot;&#225;&#188;&#163;&quot; =&gt; &quot;&#225;&#188;&#171;&quot;,	&quot;&#225;&#188;&#162;&quot; =&gt; &quot;&#225;&#188;&#170;&quot;,	&quot;&#225;&#188;&#161;&quot; =&gt; &quot;&#225;&#188;&#169;&quot;,
-	&quot;&#225;&#188; &quot; =&gt; &quot;&#225;&#188;&#168;&quot;,	&quot;&#225;&#188;&#8226;&quot; =&gt; &quot;&#225;&#188;*&quot;,	&quot;&#225;&#188;&#8221;&quot; =&gt; &quot;&#225;&#188;&#339;&quot;,
-	&quot;&#225;&#188;&#8220;&quot; =&gt; &quot;&#225;&#188;&#8250;&quot;,	&quot;&#225;&#188;&#8217;&quot; =&gt; &quot;&#225;&#188;&#353;&quot;,	&quot;&#225;&#188;&#8216;&quot; =&gt; &quot;&#225;&#188;&#8482;&quot;,
-	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#732;&quot;,	&quot;&#225;&#188;&#8225;&quot; =&gt; &quot;&#225;&#188;*&quot;,	&quot;&#225;&#188;&#8224;&quot; =&gt; &quot;&#225;&#188;&#381;&quot;,
-	&quot;&#225;&#188;&#8230;&quot; =&gt; &quot;&#225;&#188;*&quot;,	&quot;&#225;&#188;&#8222;&quot; =&gt; &quot;&#225;&#188;&#338;&quot;,	&quot;&#225;&#188;&#402;&quot; =&gt; &quot;&#225;&#188;&#8249;&quot;,
-	&quot;&#225;&#188;&#8218;&quot; =&gt; &quot;&#225;&#188;&#352;&quot;,	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#8240;&quot;,	&quot;&#225;&#188;&#8364;&quot; =&gt; &quot;&#225;&#188;&#710;&quot;,
-	&quot;&#225;&#187;&#185;&quot; =&gt; &quot;&#225;&#187;&#184;&quot;,	&quot;&#225;&#187;&#183;&quot; =&gt; &quot;&#225;&#187;&#182;&quot;,	&quot;&#225;&#187;&#181;&quot; =&gt; &quot;&#225;&#187;&#180;&quot;,
-	&quot;&#225;&#187;&#179;&quot; =&gt; &quot;&#225;&#187;&#178;&quot;,	&quot;&#225;&#187;&#177;&quot; =&gt; &quot;&#225;&#187;&#176;&quot;,	&quot;&#225;&#187;&#175;&quot; =&gt; &quot;&#225;&#187;&#174;&quot;,
-	&quot;&#225;&#187;&#173;&quot; =&gt; &quot;&#225;&#187;&#172;&quot;,	&quot;&#225;&#187;&#171;&quot; =&gt; &quot;&#225;&#187;&#170;&quot;,	&quot;&#225;&#187;&#169;&quot; =&gt; &quot;&#225;&#187;&#168;&quot;,
-	&quot;&#225;&#187;&#167;&quot; =&gt; &quot;&#225;&#187;&#166;&quot;,	&quot;&#225;&#187;&#165;&quot; =&gt; &quot;&#225;&#187;&#164;&quot;,	&quot;&#225;&#187;&#163;&quot; =&gt; &quot;&#225;&#187;&#162;&quot;,
-	&quot;&#225;&#187;&#161;&quot; =&gt; &quot;&#225;&#187; &quot;,	&quot;&#225;&#187;&#376;&quot; =&gt; &quot;&#225;&#187;&#382;&quot;,	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#339;&quot;,
-	&quot;&#225;&#187;&#8250;&quot; =&gt; &quot;&#225;&#187;&#353;&quot;,	&quot;&#225;&#187;&#8482;&quot; =&gt; &quot;&#225;&#187;&#732;&quot;,	&quot;&#225;&#187;&#8212;&quot; =&gt; &quot;&#225;&#187;&#8211;&quot;,
-	&quot;&#225;&#187;&#8226;&quot; =&gt; &quot;&#225;&#187;&#8221;&quot;,	&quot;&#225;&#187;&#8220;&quot; =&gt; &quot;&#225;&#187;&#8217;&quot;,	&quot;&#225;&#187;&#8216;&quot; =&gt; &quot;&#225;&#187;*&quot;,
-	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#381;&quot;,	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#338;&quot;,	&quot;&#225;&#187;&#8249;&quot; =&gt; &quot;&#225;&#187;&#352;&quot;,
-	&quot;&#225;&#187;&#8240;&quot; =&gt; &quot;&#225;&#187;&#710;&quot;,	&quot;&#225;&#187;&#8225;&quot; =&gt; &quot;&#225;&#187;&#8224;&quot;,	&quot;&#225;&#187;&#8230;&quot; =&gt; &quot;&#225;&#187;&#8222;&quot;,
-	&quot;&#225;&#187;&#402;&quot; =&gt; &quot;&#225;&#187;&#8218;&quot;,	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#8364;&quot;,	&quot;&#225;&#186;&#191;&quot; =&gt; &quot;&#225;&#186;&#190;&quot;,
-	&quot;&#225;&#186;&#189;&quot; =&gt; &quot;&#225;&#186;&#188;&quot;,	&quot;&#225;&#186;&#187;&quot; =&gt; &quot;&#225;&#186;&#186;&quot;,	&quot;&#225;&#186;&#185;&quot; =&gt; &quot;&#225;&#186;&#184;&quot;,
-	&quot;&#225;&#186;&#183;&quot; =&gt; &quot;&#225;&#186;&#182;&quot;,	&quot;&#225;&#186;&#181;&quot; =&gt; &quot;&#225;&#186;&#180;&quot;,	&quot;&#225;&#186;&#179;&quot; =&gt; &quot;&#225;&#186;&#178;&quot;,
-	&quot;&#225;&#186;&#177;&quot; =&gt; &quot;&#225;&#186;&#176;&quot;,	&quot;&#225;&#186;&#175;&quot; =&gt; &quot;&#225;&#186;&#174;&quot;,	&quot;&#225;&#186;&#173;&quot; =&gt; &quot;&#225;&#186;&#172;&quot;,
-	&quot;&#225;&#186;&#171;&quot; =&gt; &quot;&#225;&#186;&#170;&quot;,	&quot;&#225;&#186;&#169;&quot; =&gt; &quot;&#225;&#186;&#168;&quot;,	&quot;&#225;&#186;&#167;&quot; =&gt; &quot;&#225;&#186;&#166;&quot;,
-	&quot;&#225;&#186;&#165;&quot; =&gt; &quot;&#225;&#186;&#164;&quot;,	&quot;&#225;&#186;&#163;&quot; =&gt; &quot;&#225;&#186;&#162;&quot;,	&quot;&#225;&#186;&#161;&quot; =&gt; &quot;&#225;&#186; &quot;,
-	&quot;&#225;&#186;&#8250;&quot; =&gt; &quot;&#225;&#185; &quot;,	&quot;&#225;&#186;&#8226;&quot; =&gt; &quot;&#225;&#186;&#8221;&quot;,	&quot;&#225;&#186;&#8220;&quot; =&gt; &quot;&#225;&#186;&#8217;&quot;,
-	&quot;&#225;&#186;&#8216;&quot; =&gt; &quot;&#225;&#186;*&quot;,	&quot;&#225;&#186;*&quot; =&gt; &quot;&#225;&#186;&#381;&quot;,	&quot;&#225;&#186;*&quot; =&gt; &quot;&#225;&#186;&#338;&quot;,
-	&quot;&#225;&#186;&#8249;&quot; =&gt; &quot;&#225;&#186;&#352;&quot;,	&quot;&#225;&#186;&#8240;&quot; =&gt; &quot;&#225;&#186;&#710;&quot;,	&quot;&#225;&#186;&#8225;&quot; =&gt; &quot;&#225;&#186;&#8224;&quot;,
-	&quot;&#225;&#186;&#8230;&quot; =&gt; &quot;&#225;&#186;&#8222;&quot;,	&quot;&#225;&#186;&#402;&quot; =&gt; &quot;&#225;&#186;&#8218;&quot;,	&quot;&#225;&#186;*&quot; =&gt; &quot;&#225;&#186;&#8364;&quot;,
-	&quot;&#225;&#185;&#191;&quot; =&gt; &quot;&#225;&#185;&#190;&quot;,	&quot;&#225;&#185;&#189;&quot; =&gt; &quot;&#225;&#185;&#188;&quot;,	&quot;&#225;&#185;&#187;&quot; =&gt; &quot;&#225;&#185;&#186;&quot;,
-	&quot;&#225;&#185;&#185;&quot; =&gt; &quot;&#225;&#185;&#184;&quot;,	&quot;&#225;&#185;&#183;&quot; =&gt; &quot;&#225;&#185;&#182;&quot;,	&quot;&#225;&#185;&#181;&quot; =&gt; &quot;&#225;&#185;&#180;&quot;,
-	&quot;&#225;&#185;&#179;&quot; =&gt; &quot;&#225;&#185;&#178;&quot;,	&quot;&#225;&#185;&#177;&quot; =&gt; &quot;&#225;&#185;&#176;&quot;,	&quot;&#225;&#185;&#175;&quot; =&gt; &quot;&#225;&#185;&#174;&quot;,
-	&quot;&#225;&#185;&#173;&quot; =&gt; &quot;&#225;&#185;&#172;&quot;,	&quot;&#225;&#185;&#171;&quot; =&gt; &quot;&#225;&#185;&#170;&quot;,	&quot;&#225;&#185;&#169;&quot; =&gt; &quot;&#225;&#185;&#168;&quot;,
-	&quot;&#225;&#185;&#167;&quot; =&gt; &quot;&#225;&#185;&#166;&quot;,	&quot;&#225;&#185;&#165;&quot; =&gt; &quot;&#225;&#185;&#164;&quot;,	&quot;&#225;&#185;&#163;&quot; =&gt; &quot;&#225;&#185;&#162;&quot;,
-	&quot;&#225;&#185;&#161;&quot; =&gt; &quot;&#225;&#185; &quot;,	&quot;&#225;&#185;&#376;&quot; =&gt; &quot;&#225;&#185;&#382;&quot;,	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#339;&quot;,
-	&quot;&#225;&#185;&#8250;&quot; =&gt; &quot;&#225;&#185;&#353;&quot;,	&quot;&#225;&#185;&#8482;&quot; =&gt; &quot;&#225;&#185;&#732;&quot;,	&quot;&#225;&#185;&#8212;&quot; =&gt; &quot;&#225;&#185;&#8211;&quot;,
-	&quot;&#225;&#185;&#8226;&quot; =&gt; &quot;&#225;&#185;&#8221;&quot;,	&quot;&#225;&#185;&#8220;&quot; =&gt; &quot;&#225;&#185;&#8217;&quot;,	&quot;&#225;&#185;&#8216;&quot; =&gt; &quot;&#225;&#185;*&quot;,
-	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#381;&quot;,	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#338;&quot;,	&quot;&#225;&#185;&#8249;&quot; =&gt; &quot;&#225;&#185;&#352;&quot;,
-	&quot;&#225;&#185;&#8240;&quot; =&gt; &quot;&#225;&#185;&#710;&quot;,	&quot;&#225;&#185;&#8225;&quot; =&gt; &quot;&#225;&#185;&#8224;&quot;,	&quot;&#225;&#185;&#8230;&quot; =&gt; &quot;&#225;&#185;&#8222;&quot;,
-	&quot;&#225;&#185;&#402;&quot; =&gt; &quot;&#225;&#185;&#8218;&quot;,	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#8364;&quot;,	&quot;&#225;&#184;&#191;&quot; =&gt; &quot;&#225;&#184;&#190;&quot;,
-	&quot;&#225;&#184;&#189;&quot; =&gt; &quot;&#225;&#184;&#188;&quot;,	&quot;&#225;&#184;&#187;&quot; =&gt; &quot;&#225;&#184;&#186;&quot;,	&quot;&#225;&#184;&#185;&quot; =&gt; &quot;&#225;&#184;&#184;&quot;,
-	&quot;&#225;&#184;&#183;&quot; =&gt; &quot;&#225;&#184;&#182;&quot;,	&quot;&#225;&#184;&#181;&quot; =&gt; &quot;&#225;&#184;&#180;&quot;,	&quot;&#225;&#184;&#179;&quot; =&gt; &quot;&#225;&#184;&#178;&quot;,
-	&quot;&#225;&#184;&#177;&quot; =&gt; &quot;&#225;&#184;&#176;&quot;,	&quot;&#225;&#184;&#175;&quot; =&gt; &quot;&#225;&#184;&#174;&quot;,	&quot;&#225;&#184;&#173;&quot; =&gt; &quot;&#225;&#184;&#172;&quot;,
-	&quot;&#225;&#184;&#171;&quot; =&gt; &quot;&#225;&#184;&#170;&quot;,	&quot;&#225;&#184;&#169;&quot; =&gt; &quot;&#225;&#184;&#168;&quot;,	&quot;&#225;&#184;&#167;&quot; =&gt; &quot;&#225;&#184;&#166;&quot;,
-	&quot;&#225;&#184;&#165;&quot; =&gt; &quot;&#225;&#184;&#164;&quot;,	&quot;&#225;&#184;&#163;&quot; =&gt; &quot;&#225;&#184;&#162;&quot;,	&quot;&#225;&#184;&#161;&quot; =&gt; &quot;&#225;&#184; &quot;,
-	&quot;&#225;&#184;&#376;&quot; =&gt; &quot;&#225;&#184;&#382;&quot;,	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#339;&quot;,	&quot;&#225;&#184;&#8250;&quot; =&gt; &quot;&#225;&#184;&#353;&quot;,
-	&quot;&#225;&#184;&#8482;&quot; =&gt; &quot;&#225;&#184;&#732;&quot;,	&quot;&#225;&#184;&#8212;&quot; =&gt; &quot;&#225;&#184;&#8211;&quot;,	&quot;&#225;&#184;&#8226;&quot; =&gt; &quot;&#225;&#184;&#8221;&quot;,
-	&quot;&#225;&#184;&#8220;&quot; =&gt; &quot;&#225;&#184;&#8217;&quot;,	&quot;&#225;&#184;&#8216;&quot; =&gt; &quot;&#225;&#184;*&quot;,	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#381;&quot;,
-	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#338;&quot;,	&quot;&#225;&#184;&#8249;&quot; =&gt; &quot;&#225;&#184;&#352;&quot;,	&quot;&#225;&#184;&#8240;&quot; =&gt; &quot;&#225;&#184;&#710;&quot;,
-	&quot;&#225;&#184;&#8225;&quot; =&gt; &quot;&#225;&#184;&#8224;&quot;,	&quot;&#225;&#184;&#8230;&quot; =&gt; &quot;&#225;&#184;&#8222;&quot;,	&quot;&#225;&#184;&#402;&quot; =&gt; &quot;&#225;&#184;&#8218;&quot;,
-	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#8364;&quot;,	&quot;&#214;&#8224;&quot; =&gt; &quot;&#213;&#8211;&quot;,	&quot;&#214;&#8230;&quot; =&gt; &quot;&#213;&#8226;&quot;,
-	&quot;&#214;&#8222;&quot; =&gt; &quot;&#213;&#8221;&quot;,	&quot;&#214;&#402;&quot; =&gt; &quot;&#213;&#8220;&quot;,	&quot;&#214;&#8218;&quot; =&gt; &quot;&#213;&#8217;&quot;,
-	&quot;&#214;*&quot; =&gt; &quot;&#213;&#8216;&quot;,	&quot;&#214;&#8364;&quot; =&gt; &quot;&#213;*&quot;,	&quot;&#213;&#191;&quot; =&gt; &quot;&#213;*&quot;,
-	&quot;&#213;&#190;&quot; =&gt; &quot;&#213;&#381;&quot;,	&quot;&#213;&#189;&quot; =&gt; &quot;&#213;*&quot;,	&quot;&#213;&#188;&quot; =&gt; &quot;&#213;&#338;&quot;,
-	&quot;&#213;&#187;&quot; =&gt; &quot;&#213;&#8249;&quot;,	&quot;&#213;&#186;&quot; =&gt; &quot;&#213;&#352;&quot;,	&quot;&#213;&#185;&quot; =&gt; &quot;&#213;&#8240;&quot;,
-	&quot;&#213;&#184;&quot; =&gt; &quot;&#213;&#710;&quot;,	&quot;&#213;&#183;&quot; =&gt; &quot;&#213;&#8225;&quot;,	&quot;&#213;&#182;&quot; =&gt; &quot;&#213;&#8224;&quot;,
-	&quot;&#213;&#181;&quot; =&gt; &quot;&#213;&#8230;&quot;,	&quot;&#213;&#180;&quot; =&gt; &quot;&#213;&#8222;&quot;,	&quot;&#213;&#179;&quot; =&gt; &quot;&#213;&#402;&quot;,
-	&quot;&#213;&#178;&quot; =&gt; &quot;&#213;&#8218;&quot;,	&quot;&#213;&#177;&quot; =&gt; &quot;&#213;*&quot;,	&quot;&#213;&#176;&quot; =&gt; &quot;&#213;&#8364;&quot;,
-	&quot;&#213;&#175;&quot; =&gt; &quot;&#212;&#191;&quot;,	&quot;&#213;&#174;&quot; =&gt; &quot;&#212;&#190;&quot;,	&quot;&#213;&#173;&quot; =&gt; &quot;&#212;&#189;&quot;,
-	&quot;&#213;&#172;&quot; =&gt; &quot;&#212;&#188;&quot;,	&quot;&#213;&#171;&quot; =&gt; &quot;&#212;&#187;&quot;,	&quot;&#213;&#170;&quot; =&gt; &quot;&#212;&#186;&quot;,
-	&quot;&#213;&#169;&quot; =&gt; &quot;&#212;&#185;&quot;,	&quot;&#213;&#168;&quot; =&gt; &quot;&#212;&#184;&quot;,	&quot;&#213;&#167;&quot; =&gt; &quot;&#212;&#183;&quot;,
-	&quot;&#213;&#166;&quot; =&gt; &quot;&#212;&#182;&quot;,	&quot;&#213;&#165;&quot; =&gt; &quot;&#212;&#181;&quot;,	&quot;&#213;&#164;&quot; =&gt; &quot;&#212;&#180;&quot;,
-	&quot;&#213;&#163;&quot; =&gt; &quot;&#212;&#179;&quot;,	&quot;&#213;&#162;&quot; =&gt; &quot;&#212;&#178;&quot;,	&quot;&#213;&#161;&quot; =&gt; &quot;&#212;&#177;&quot;,
-	&quot;&#212;*&quot; =&gt; &quot;&#212;&#381;&quot;,	&quot;&#212;*&quot; =&gt; &quot;&#212;&#338;&quot;,	&quot;&#212;&#8249;&quot; =&gt; &quot;&#212;&#352;&quot;,
-	&quot;&#212;&#8240;&quot; =&gt; &quot;&#212;&#710;&quot;,	&quot;&#212;&#8225;&quot; =&gt; &quot;&#212;&#8224;&quot;,	&quot;&#212;&#8230;&quot; =&gt; &quot;&#212;&#8222;&quot;,
-	&quot;&#212;&#402;&quot; =&gt; &quot;&#212;&#8218;&quot;,	&quot;&#212;*&quot; =&gt; &quot;&#212;&#8364;&quot;,	&quot;&#211;&#185;&quot; =&gt; &quot;&#211;&#184;&quot;,
-	&quot;&#211;&#181;&quot; =&gt; &quot;&#211;&#180;&quot;,	&quot;&#211;&#179;&quot; =&gt; &quot;&#211;&#178;&quot;,	&quot;&#211;&#177;&quot; =&gt; &quot;&#211;&#176;&quot;,
-	&quot;&#211;&#175;&quot; =&gt; &quot;&#211;&#174;&quot;,	&quot;&#211;&#173;&quot; =&gt; &quot;&#211;&#172;&quot;,	&quot;&#211;&#171;&quot; =&gt; &quot;&#211;&#170;&quot;,
-	&quot;&#211;&#169;&quot; =&gt; &quot;&#211;&#168;&quot;,	&quot;&#211;&#167;&quot; =&gt; &quot;&#211;&#166;&quot;,	&quot;&#211;&#165;&quot; =&gt; &quot;&#211;&#164;&quot;,
-	&quot;&#211;&#163;&quot; =&gt; &quot;&#211;&#162;&quot;,	&quot;&#211;&#161;&quot; =&gt; &quot;&#211; &quot;,	&quot;&#211;&#376;&quot; =&gt; &quot;&#211;&#382;&quot;,
-	&quot;&#211;*&quot; =&gt; &quot;&#211;&#339;&quot;,	&quot;&#211;&#8250;&quot; =&gt; &quot;&#211;&#353;&quot;,	&quot;&#211;&#8482;&quot; =&gt; &quot;&#211;&#732;&quot;,
-	&quot;&#211;&#8212;&quot; =&gt; &quot;&#211;&#8211;&quot;,	&quot;&#211;&#8226;&quot; =&gt; &quot;&#211;&#8221;&quot;,	&quot;&#211;&#8220;&quot; =&gt; &quot;&#211;&#8217;&quot;,
-	&quot;&#211;&#8216;&quot; =&gt; &quot;&#211;*&quot;,	&quot;&#211;&#381;&quot; =&gt; &quot;&#211;*&quot;,	&quot;&#211;&#338;&quot; =&gt; &quot;&#211;&#8249;&quot;,
-	&quot;&#211;&#352;&quot; =&gt; &quot;&#211;&#8240;&quot;,	&quot;&#211;&#710;&quot; =&gt; &quot;&#211;&#8225;&quot;,	&quot;&#211;&#8224;&quot; =&gt; &quot;&#211;&#8230;&quot;,
-	&quot;&#211;&#8222;&quot; =&gt; &quot;&#211;&#402;&quot;,	&quot;&#211;&#8218;&quot; =&gt; &quot;&#211;*&quot;,	&quot;&#210;&#191;&quot; =&gt; &quot;&#210;&#190;&quot;,
-	&quot;&#210;&#189;&quot; =&gt; &quot;&#210;&#188;&quot;,	&quot;&#210;&#187;&quot; =&gt; &quot;&#210;&#186;&quot;,	&quot;&#210;&#185;&quot; =&gt; &quot;&#210;&#184;&quot;,
-	&quot;&#210;&#183;&quot; =&gt; &quot;&#210;&#182;&quot;,	&quot;&#210;&#181;&quot; =&gt; &quot;&#210;&#180;&quot;,	&quot;&#210;&#179;&quot; =&gt; &quot;&#210;&#178;&quot;,
-	&quot;&#210;&#177;&quot; =&gt; &quot;&#210;&#176;&quot;,	&quot;&#210;&#175;&quot; =&gt; &quot;&#210;&#174;&quot;,	&quot;&#210;&#173;&quot; =&gt; &quot;&#210;&#172;&quot;,
-	&quot;&#210;&#171;&quot; =&gt; &quot;&#210;&#170;&quot;,	&quot;&#210;&#169;&quot; =&gt; &quot;&#210;&#168;&quot;,	&quot;&#210;&#167;&quot; =&gt; &quot;&#210;&#166;&quot;,
-	&quot;&#210;&#165;&quot; =&gt; &quot;&#210;&#164;&quot;,	&quot;&#210;&#163;&quot; =&gt; &quot;&#210;&#162;&quot;,	&quot;&#210;&#161;&quot; =&gt; &quot;&#210; &quot;,
-	&quot;&#210;&#376;&quot; =&gt; &quot;&#210;&#382;&quot;,	&quot;&#210;*&quot; =&gt; &quot;&#210;&#339;&quot;,	&quot;&#210;&#8250;&quot; =&gt; &quot;&#210;&#353;&quot;,
-	&quot;&#210;&#8482;&quot; =&gt; &quot;&#210;&#732;&quot;,	&quot;&#210;&#8212;&quot; =&gt; &quot;&#210;&#8211;&quot;,	&quot;&#210;&#8226;&quot; =&gt; &quot;&#210;&#8221;&quot;,
-	&quot;&#210;&#8220;&quot; =&gt; &quot;&#210;&#8217;&quot;,	&quot;&#210;&#8216;&quot; =&gt; &quot;&#210;*&quot;,	&quot;&#210;*&quot; =&gt; &quot;&#210;&#381;&quot;,
-	&quot;&#210;*&quot; =&gt; &quot;&#210;&#338;&quot;,	&quot;&#210;&#8249;&quot; =&gt; &quot;&#210;&#352;&quot;,	&quot;&#210;*&quot; =&gt; &quot;&#210;&#8364;&quot;,
-	&quot;&#209;&#191;&quot; =&gt; &quot;&#209;&#190;&quot;,	&quot;&#209;&#189;&quot; =&gt; &quot;&#209;&#188;&quot;,	&quot;&#209;&#187;&quot; =&gt; &quot;&#209;&#186;&quot;,
-	&quot;&#209;&#185;&quot; =&gt; &quot;&#209;&#184;&quot;,	&quot;&#209;&#183;&quot; =&gt; &quot;&#209;&#182;&quot;,	&quot;&#209;&#181;&quot; =&gt; &quot;&#209;&#180;&quot;,
-	&quot;&#209;&#179;&quot; =&gt; &quot;&#209;&#178;&quot;,	&quot;&#209;&#177;&quot; =&gt; &quot;&#209;&#176;&quot;,	&quot;&#209;&#175;&quot; =&gt; &quot;&#209;&#174;&quot;,
-	&quot;&#209;&#173;&quot; =&gt; &quot;&#209;&#172;&quot;,	&quot;&#209;&#171;&quot; =&gt; &quot;&#209;&#170;&quot;,	&quot;&#209;&#169;&quot; =&gt; &quot;&#209;&#168;&quot;,
-	&quot;&#209;&#167;&quot; =&gt; &quot;&#209;&#166;&quot;,	&quot;&#209;&#165;&quot; =&gt; &quot;&#209;&#164;&quot;,	&quot;&#209;&#163;&quot; =&gt; &quot;&#209;&#162;&quot;,
-	&quot;&#209;&#161;&quot; =&gt; &quot;&#209; &quot;,	&quot;&#209;&#376;&quot; =&gt; &quot;&#208;*&quot;,	&quot;&#209;&#382;&quot; =&gt; &quot;&#208;&#381;&quot;,
-	&quot;&#209;*&quot; =&gt; &quot;&#208;*&quot;,	&quot;&#209;&#339;&quot; =&gt; &quot;&#208;&#338;&quot;,	&quot;&#209;&#8250;&quot; =&gt; &quot;&#208;&#8249;&quot;,
-	&quot;&#209;&#353;&quot; =&gt; &quot;&#208;&#352;&quot;,	&quot;&#209;&#8482;&quot; =&gt; &quot;&#208;&#8240;&quot;,	&quot;&#209;&#732;&quot; =&gt; &quot;&#208;&#710;&quot;,
-	&quot;&#209;&#8212;&quot; =&gt; &quot;&#208;&#8225;&quot;,	&quot;&#209;&#8211;&quot; =&gt; &quot;&#208;&#8224;&quot;,	&quot;&#209;&#8226;&quot; =&gt; &quot;&#208;&#8230;&quot;,
-	&quot;&#209;&#8221;&quot; =&gt; &quot;&#208;&#8222;&quot;,	&quot;&#209;&#8220;&quot; =&gt; &quot;&#208;&#402;&quot;,	&quot;&#209;&#8217;&quot; =&gt; &quot;&#208;&#8218;&quot;,
-	&quot;&#209;&#8216;&quot; =&gt; &quot;&#208;*&quot;,	&quot;&#209;*&quot; =&gt; &quot;&#208;&#8364;&quot;,	&quot;&#209;*&quot; =&gt; &quot;&#208;&#175;&quot;,
-	&quot;&#209;&#381;&quot; =&gt; &quot;&#208;&#174;&quot;,	&quot;&#209;*&quot; =&gt; &quot;&#208;&#173;&quot;,	&quot;&#209;&#338;&quot; =&gt; &quot;&#208;&#172;&quot;,
-	&quot;&#209;&#8249;&quot; =&gt; &quot;&#208;&#171;&quot;,	&quot;&#209;&#352;&quot; =&gt; &quot;&#208;&#170;&quot;,	&quot;&#209;&#8240;&quot; =&gt; &quot;&#208;&#169;&quot;,
-	&quot;&#209;&#710;&quot; =&gt; &quot;&#208;&#168;&quot;,	&quot;&#209;&#8225;&quot; =&gt; &quot;&#208;&#167;&quot;,	&quot;&#209;&#8224;&quot; =&gt; &quot;&#208;&#166;&quot;,
-	&quot;&#209;&#8230;&quot; =&gt; &quot;&#208;&#165;&quot;,	&quot;&#209;&#8222;&quot; =&gt; &quot;&#208;&#164;&quot;,	&quot;&#209;&#402;&quot; =&gt; &quot;&#208;&#163;&quot;,
-	&quot;&#209;&#8218;&quot; =&gt; &quot;&#208;&#162;&quot;,	&quot;&#209;*&quot; =&gt; &quot;&#208;&#161;&quot;,	&quot;&#209;&#8364;&quot; =&gt; &quot;&#208; &quot;,
-	&quot;&#208;&#191;&quot; =&gt; &quot;&#208;&#376;&quot;,	&quot;&#208;&#190;&quot; =&gt; &quot;&#208;&#382;&quot;,	&quot;&#208;&#189;&quot; =&gt; &quot;&#208;*&quot;,
-	&quot;&#208;&#188;&quot; =&gt; &quot;&#208;&#339;&quot;,	&quot;&#208;&#187;&quot; =&gt; &quot;&#208;&#8250;&quot;,	&quot;&#208;&#186;&quot; =&gt; &quot;&#208;&#353;&quot;,
-	&quot;&#208;&#185;&quot; =&gt; &quot;&#208;&#8482;&quot;,	&quot;&#208;&#184;&quot; =&gt; &quot;&#208;&#732;&quot;,	&quot;&#208;&#183;&quot; =&gt; &quot;&#208;&#8212;&quot;,
-	&quot;&#208;&#182;&quot; =&gt; &quot;&#208;&#8211;&quot;,	&quot;&#208;&#181;&quot; =&gt; &quot;&#208;&#8226;&quot;,	&quot;&#208;&#180;&quot; =&gt; &quot;&#208;&#8221;&quot;,
-	&quot;&#208;&#179;&quot; =&gt; &quot;&#208;&#8220;&quot;,	&quot;&#208;&#178;&quot; =&gt; &quot;&#208;&#8217;&quot;,	&quot;&#208;&#177;&quot; =&gt; &quot;&#208;&#8216;&quot;,
-	&quot;&#208;&#176;&quot; =&gt; &quot;&#208;*&quot;,	&quot;&#207;&#181;&quot; =&gt; &quot;&#206;&#8226;&quot;,	&quot;&#207;&#178;&quot; =&gt; &quot;&#206;&#163;&quot;,
-	&quot;&#207;&#177;&quot; =&gt; &quot;&#206;&#161;&quot;,	&quot;&#207;&#176;&quot; =&gt; &quot;&#206;&#353;&quot;,	&quot;&#207;&#175;&quot; =&gt; &quot;&#207;&#174;&quot;,
-	&quot;&#207;&#173;&quot; =&gt; &quot;&#207;&#172;&quot;,	&quot;&#207;&#171;&quot; =&gt; &quot;&#207;&#170;&quot;,	&quot;&#207;&#169;&quot; =&gt; &quot;&#207;&#168;&quot;,
-	&quot;&#207;&#167;&quot; =&gt; &quot;&#207;&#166;&quot;,	&quot;&#207;&#165;&quot; =&gt; &quot;&#207;&#164;&quot;,	&quot;&#207;&#163;&quot; =&gt; &quot;&#207;&#162;&quot;,
-	&quot;&#207;&#161;&quot; =&gt; &quot;&#207; &quot;,	&quot;&#207;&#376;&quot; =&gt; &quot;&#207;&#382;&quot;,	&quot;&#207;*&quot; =&gt; &quot;&#207;&#339;&quot;,
-	&quot;&#207;&#8250;&quot; =&gt; &quot;&#207;&#353;&quot;,	&quot;&#207;&#8482;&quot; =&gt; &quot;&#207;&#732;&quot;,	&quot;&#207;&#8211;&quot; =&gt; &quot;&#206; &quot;,
-	&quot;&#207;&#8226;&quot; =&gt; &quot;&#206;&#166;&quot;,	&quot;&#207;&#8216;&quot; =&gt; &quot;&#206;&#732;&quot;,	&quot;&#207;*&quot; =&gt; &quot;&#206;&#8217;&quot;,
-	&quot;&#207;&#381;&quot; =&gt; &quot;&#206;*&quot;,	&quot;&#207;*&quot; =&gt; &quot;&#206;&#381;&quot;,	&quot;&#207;&#338;&quot; =&gt; &quot;&#206;&#338;&quot;,
-	&quot;&#207;&#8249;&quot; =&gt; &quot;&#206;&#171;&quot;,	&quot;&#207;&#352;&quot; =&gt; &quot;&#206;&#170;&quot;,	&quot;&#207;&#8240;&quot; =&gt; &quot;&#206;&#169;&quot;,
-	&quot;&#207;&#710;&quot; =&gt; &quot;&#206;&#168;&quot;,	&quot;&#207;&#8225;&quot; =&gt; &quot;&#206;&#167;&quot;,	&quot;&#207;&#8224;&quot; =&gt; &quot;&#206;&#166;&quot;,
-	&quot;&#207;&#8230;&quot; =&gt; &quot;&#206;&#165;&quot;,	&quot;&#207;&#8222;&quot; =&gt; &quot;&#206;&#164;&quot;,	&quot;&#207;&#402;&quot; =&gt; &quot;&#206;&#163;&quot;,
-	&quot;&#207;&#8218;&quot; =&gt; &quot;&#206;&#163;&quot;,	&quot;&#207;*&quot; =&gt; &quot;&#206;&#161;&quot;,	&quot;&#207;&#8364;&quot; =&gt; &quot;&#206; &quot;,
-	&quot;&#206;&#191;&quot; =&gt; &quot;&#206;&#376;&quot;,	&quot;&#206;&#190;&quot; =&gt; &quot;&#206;&#382;&quot;,	&quot;&#206;&#189;&quot; =&gt; &quot;&#206;*&quot;,
-	&quot;&#206;&#188;&quot; =&gt; &quot;&#206;&#339;&quot;,	&quot;&#206;&#187;&quot; =&gt; &quot;&#206;&#8250;&quot;,	&quot;&#206;&#186;&quot; =&gt; &quot;&#206;&#353;&quot;,
-	&quot;&#206;&#185;&quot; =&gt; &quot;&#206;&#8482;&quot;,	&quot;&#206;&#184;&quot; =&gt; &quot;&#206;&#732;&quot;,	&quot;&#206;&#183;&quot; =&gt; &quot;&#206;&#8212;&quot;,
-	&quot;&#206;&#182;&quot; =&gt; &quot;&#206;&#8211;&quot;,	&quot;&#206;&#181;&quot; =&gt; &quot;&#206;&#8226;&quot;,	&quot;&#206;&#180;&quot; =&gt; &quot;&#206;&#8221;&quot;,
-	&quot;&#206;&#179;&quot; =&gt; &quot;&#206;&#8220;&quot;,	&quot;&#206;&#178;&quot; =&gt; &quot;&#206;&#8217;&quot;,	&quot;&#206;&#177;&quot; =&gt; &quot;&#206;&#8216;&quot;,
-	&quot;&#206;&#175;&quot; =&gt; &quot;&#206;&#352;&quot;,	&quot;&#206;&#174;&quot; =&gt; &quot;&#206;&#8240;&quot;,	&quot;&#206;&#173;&quot; =&gt; &quot;&#206;&#710;&quot;,
-	&quot;&#206;&#172;&quot; =&gt; &quot;&#206;&#8224;&quot;,	&quot;&#202;&#8217;&quot; =&gt; &quot;&#198;&#183;&quot;,	&quot;&#202;&#8249;&quot; =&gt; &quot;&#198;&#178;&quot;,
-	&quot;&#202;&#352;&quot; =&gt; &quot;&#198;&#177;&quot;,	&quot;&#202;&#710;&quot; =&gt; &quot;&#198;&#174;&quot;,	&quot;&#202;&#402;&quot; =&gt; &quot;&#198;&#169;&quot;,
-	&quot;&#202;&#8364;&quot; =&gt; &quot;&#198;&#166;&quot;,	&quot;&#201;&#181;&quot; =&gt; &quot;&#198;&#376;&quot;,	&quot;&#201;&#178;&quot; =&gt; &quot;&#198;*&quot;,
-	&quot;&#201;&#175;&quot; =&gt; &quot;&#198;&#339;&quot;,	&quot;&#201;&#169;&quot; =&gt; &quot;&#198;&#8211;&quot;,	&quot;&#201;&#168;&quot; =&gt; &quot;&#198;&#8212;&quot;,
-	&quot;&#201;&#163;&quot; =&gt; &quot;&#198;&#8221;&quot;,	&quot;&#201; &quot; =&gt; &quot;&#198;&#8220;&quot;,	&quot;&#201;&#8250;&quot; =&gt; &quot;&#198;*&quot;,
-	&quot;&#201;&#8482;&quot; =&gt; &quot;&#198;*&quot;,	&quot;&#201;&#8212;&quot; =&gt; &quot;&#198;&#352;&quot;,	&quot;&#201;&#8211;&quot; =&gt; &quot;&#198;&#8240;&quot;,
-	&quot;&#201;&#8221;&quot; =&gt; &quot;&#198;&#8224;&quot;,	&quot;&#201;&#8220;&quot; =&gt; &quot;&#198;*&quot;,	&quot;&#200;&#179;&quot; =&gt; &quot;&#200;&#178;&quot;,
-	&quot;&#200;&#177;&quot; =&gt; &quot;&#200;&#176;&quot;,	&quot;&#200;&#175;&quot; =&gt; &quot;&#200;&#174;&quot;,	&quot;&#200;&#173;&quot; =&gt; &quot;&#200;&#172;&quot;,
-	&quot;&#200;&#171;&quot; =&gt; &quot;&#200;&#170;&quot;,	&quot;&#200;&#169;&quot; =&gt; &quot;&#200;&#168;&quot;,	&quot;&#200;&#167;&quot; =&gt; &quot;&#200;&#166;&quot;,
-	&quot;&#200;&#165;&quot; =&gt; &quot;&#200;&#164;&quot;,	&quot;&#200;&#163;&quot; =&gt; &quot;&#200;&#162;&quot;,	&quot;&#200;&#376;&quot; =&gt; &quot;&#200;&#382;&quot;,
-	&quot;&#200;*&quot; =&gt; &quot;&#200;&#339;&quot;,	&quot;&#200;&#8250;&quot; =&gt; &quot;&#200;&#353;&quot;,	&quot;&#200;&#8482;&quot; =&gt; &quot;&#200;&#732;&quot;,
-	&quot;&#200;&#8212;&quot; =&gt; &quot;&#200;&#8211;&quot;,	&quot;&#200;&#8226;&quot; =&gt; &quot;&#200;&#8221;&quot;,	&quot;&#200;&#8220;&quot; =&gt; &quot;&#200;&#8217;&quot;,
-	&quot;&#200;&#8216;&quot; =&gt; &quot;&#200;*&quot;,	&quot;&#200;*&quot; =&gt; &quot;&#200;&#381;&quot;,	&quot;&#200;*&quot; =&gt; &quot;&#200;&#338;&quot;,
-	&quot;&#200;&#8249;&quot; =&gt; &quot;&#200;&#352;&quot;,	&quot;&#200;&#8240;&quot; =&gt; &quot;&#200;&#710;&quot;,	&quot;&#200;&#8225;&quot; =&gt; &quot;&#200;&#8224;&quot;,
-	&quot;&#200;&#8230;&quot; =&gt; &quot;&#200;&#8222;&quot;,	&quot;&#200;&#402;&quot; =&gt; &quot;&#200;&#8218;&quot;,	&quot;&#200;*&quot; =&gt; &quot;&#200;&#8364;&quot;,
-	&quot;&#199;&#191;&quot; =&gt; &quot;&#199;&#190;&quot;,	&quot;&#199;&#189;&quot; =&gt; &quot;&#199;&#188;&quot;,	&quot;&#199;&#187;&quot; =&gt; &quot;&#199;&#186;&quot;,
-	&quot;&#199;&#185;&quot; =&gt; &quot;&#199;&#184;&quot;,	&quot;&#199;&#181;&quot; =&gt; &quot;&#199;&#180;&quot;,	&quot;&#199;&#179;&quot; =&gt; &quot;&#199;&#178;&quot;,
-	&quot;&#199;&#175;&quot; =&gt; &quot;&#199;&#174;&quot;,	&quot;&#199;&#173;&quot; =&gt; &quot;&#199;&#172;&quot;,	&quot;&#199;&#171;&quot; =&gt; &quot;&#199;&#170;&quot;,
-	&quot;&#199;&#169;&quot; =&gt; &quot;&#199;&#168;&quot;,	&quot;&#199;&#167;&quot; =&gt; &quot;&#199;&#166;&quot;,	&quot;&#199;&#165;&quot; =&gt; &quot;&#199;&#164;&quot;,
-	&quot;&#199;&#163;&quot; =&gt; &quot;&#199;&#162;&quot;,	&quot;&#199;&#161;&quot; =&gt; &quot;&#199; &quot;,	&quot;&#199;&#376;&quot; =&gt; &quot;&#199;&#382;&quot;,
-	&quot;&#199;*&quot; =&gt; &quot;&#198;&#381;&quot;,	&quot;&#199;&#339;&quot; =&gt; &quot;&#199;&#8250;&quot;,	&quot;&#199;&#353;&quot; =&gt; &quot;&#199;&#8482;&quot;,
-	&quot;&#199;&#732;&quot; =&gt; &quot;&#199;&#8212;&quot;,	&quot;&#199;&#8211;&quot; =&gt; &quot;&#199;&#8226;&quot;,	&quot;&#199;&#8221;&quot; =&gt; &quot;&#199;&#8220;&quot;,
-	&quot;&#199;&#8217;&quot; =&gt; &quot;&#199;&#8216;&quot;,	&quot;&#199;*&quot; =&gt; &quot;&#199;*&quot;,	&quot;&#199;&#381;&quot; =&gt; &quot;&#199;*&quot;,
-	&quot;&#199;&#338;&quot; =&gt; &quot;&#199;&#8249;&quot;,	&quot;&#199;&#8240;&quot; =&gt; &quot;&#199;&#710;&quot;,	&quot;&#199;&#8224;&quot; =&gt; &quot;&#199;&#8230;&quot;,
-	&quot;&#198;&#191;&quot; =&gt; &quot;&#199;&#183;&quot;,	&quot;&#198;&#189;&quot; =&gt; &quot;&#198;&#188;&quot;,	&quot;&#198;&#185;&quot; =&gt; &quot;&#198;&#184;&quot;,
-	&quot;&#198;&#182;&quot; =&gt; &quot;&#198;&#181;&quot;,	&quot;&#198;&#180;&quot; =&gt; &quot;&#198;&#179;&quot;,	&quot;&#198;&#176;&quot; =&gt; &quot;&#198;&#175;&quot;,
-	&quot;&#198;&#173;&quot; =&gt; &quot;&#198;&#172;&quot;,	&quot;&#198;&#168;&quot; =&gt; &quot;&#198;&#167;&quot;,	&quot;&#198;&#165;&quot; =&gt; &quot;&#198;&#164;&quot;,
-	&quot;&#198;&#163;&quot; =&gt; &quot;&#198;&#162;&quot;,	&quot;&#198;&#161;&quot; =&gt; &quot;&#198; &quot;,	&quot;&#198;&#382;&quot; =&gt; &quot;&#200; &quot;,
-	&quot;&#198;&#8482;&quot; =&gt; &quot;&#198;&#732;&quot;,	&quot;&#198;&#8226;&quot; =&gt; &quot;&#199;&#182;&quot;,	&quot;&#198;&#8217;&quot; =&gt; &quot;&#198;&#8216;&quot;,
-	&quot;&#198;&#338;&quot; =&gt; &quot;&#198;&#8249;&quot;,	&quot;&#198;&#710;&quot; =&gt; &quot;&#198;&#8225;&quot;,	&quot;&#198;&#8230;&quot; =&gt; &quot;&#198;&#8222;&quot;,
-	&quot;&#198;&#402;&quot; =&gt; &quot;&#198;&#8218;&quot;,	&quot;&#197;&#191;&quot; =&gt; &quot;S&quot;,	&quot;&#197;&#190;&quot; =&gt; &quot;&#197;&#189;&quot;,
-	&quot;&#197;&#188;&quot; =&gt; &quot;&#197;&#187;&quot;,	&quot;&#197;&#186;&quot; =&gt; &quot;&#197;&#185;&quot;,	&quot;&#197;&#183;&quot; =&gt; &quot;&#197;&#182;&quot;,
-	&quot;&#197;&#181;&quot; =&gt; &quot;&#197;&#180;&quot;,	&quot;&#197;&#179;&quot; =&gt; &quot;&#197;&#178;&quot;,	&quot;&#197;&#177;&quot; =&gt; &quot;&#197;&#176;&quot;,
-	&quot;&#197;&#175;&quot; =&gt; &quot;&#197;&#174;&quot;,	&quot;&#197;&#173;&quot; =&gt; &quot;&#197;&#172;&quot;,	&quot;&#197;&#171;&quot; =&gt; &quot;&#197;&#170;&quot;,
-	&quot;&#197;&#169;&quot; =&gt; &quot;&#197;&#168;&quot;,	&quot;&#197;&#167;&quot; =&gt; &quot;&#197;&#166;&quot;,	&quot;&#197;&#165;&quot; =&gt; &quot;&#197;&#164;&quot;,
-	&quot;&#197;&#163;&quot; =&gt; &quot;&#197;&#162;&quot;,	&quot;&#197;&#161;&quot; =&gt; &quot;&#197; &quot;,	&quot;&#197;&#376;&quot; =&gt; &quot;&#197;&#382;&quot;,
-	&quot;&#197;*&quot; =&gt; &quot;&#197;&#339;&quot;,	&quot;&#197;&#8250;&quot; =&gt; &quot;&#197;&#353;&quot;,	&quot;&#197;&#8482;&quot; =&gt; &quot;&#197;&#732;&quot;,
-	&quot;&#197;&#8212;&quot; =&gt; &quot;&#197;&#8211;&quot;,	&quot;&#197;&#8226;&quot; =&gt; &quot;&#197;&#8221;&quot;,	&quot;&#197;&#8220;&quot; =&gt; &quot;&#197;&#8217;&quot;,
-	&quot;&#197;&#8216;&quot; =&gt; &quot;&#197;*&quot;,	&quot;&#197;*&quot; =&gt; &quot;&#197;&#381;&quot;,	&quot;&#197;*&quot; =&gt; &quot;&#197;&#338;&quot;,
-	&quot;&#197;&#8249;&quot; =&gt; &quot;&#197;&#352;&quot;,	&quot;&#197;&#710;&quot; =&gt; &quot;&#197;&#8225;&quot;,	&quot;&#197;&#8224;&quot; =&gt; &quot;&#197;&#8230;&quot;,
-	&quot;&#197;&#8222;&quot; =&gt; &quot;&#197;&#402;&quot;,	&quot;&#197;&#8218;&quot; =&gt; &quot;&#197;*&quot;,	&quot;&#197;&#8364;&quot; =&gt; &quot;&#196;&#191;&quot;,
-	&quot;&#196;&#190;&quot; =&gt; &quot;&#196;&#189;&quot;,	&quot;&#196;&#188;&quot; =&gt; &quot;&#196;&#187;&quot;,	&quot;&#196;&#186;&quot; =&gt; &quot;&#196;&#185;&quot;,
-	&quot;&#196;&#183;&quot; =&gt; &quot;&#196;&#182;&quot;,	&quot;&#196;&#181;&quot; =&gt; &quot;&#196;&#180;&quot;,	&quot;&#196;&#179;&quot; =&gt; &quot;&#196;&#178;&quot;,
-	&quot;&#196;&#177;&quot; =&gt; &quot;I&quot;,	&quot;&#196;&#175;&quot; =&gt; &quot;&#196;&#174;&quot;,	&quot;&#196;&#173;&quot; =&gt; &quot;&#196;&#172;&quot;,
-	&quot;&#196;&#171;&quot; =&gt; &quot;&#196;&#170;&quot;,	&quot;&#196;&#169;&quot; =&gt; &quot;&#196;&#168;&quot;,	&quot;&#196;&#167;&quot; =&gt; &quot;&#196;&#166;&quot;,
-	&quot;&#196;&#165;&quot; =&gt; &quot;&#196;&#164;&quot;,	&quot;&#196;&#163;&quot; =&gt; &quot;&#196;&#162;&quot;,	&quot;&#196;&#161;&quot; =&gt; &quot;&#196; &quot;,
-	&quot;&#196;&#376;&quot; =&gt; &quot;&#196;&#382;&quot;,	&quot;&#196;*&quot; =&gt; &quot;&#196;&#339;&quot;,	&quot;&#196;&#8250;&quot; =&gt; &quot;&#196;&#353;&quot;,
-	&quot;&#196;&#8482;&quot; =&gt; &quot;&#196;&#732;&quot;,	&quot;&#196;&#8212;&quot; =&gt; &quot;&#196;&#8211;&quot;,	&quot;&#196;&#8226;&quot; =&gt; &quot;&#196;&#8221;&quot;,
-	&quot;&#196;&#8220;&quot; =&gt; &quot;&#196;&#8217;&quot;,	&quot;&#196;&#8216;&quot; =&gt; &quot;&#196;*&quot;,	&quot;&#196;*&quot; =&gt; &quot;&#196;&#381;&quot;,
-	&quot;&#196;*&quot; =&gt; &quot;&#196;&#338;&quot;,	&quot;&#196;&#8249;&quot; =&gt; &quot;&#196;&#352;&quot;,	&quot;&#196;&#8240;&quot; =&gt; &quot;&#196;&#710;&quot;,
-	&quot;&#196;&#8225;&quot; =&gt; &quot;&#196;&#8224;&quot;,	&quot;&#196;&#8230;&quot; =&gt; &quot;&#196;&#8222;&quot;,	&quot;&#196;&#402;&quot; =&gt; &quot;&#196;&#8218;&quot;,
-	&quot;&#196;*&quot; =&gt; &quot;&#196;&#8364;&quot;,	&quot;&#195;&#191;&quot; =&gt; &quot;&#197;&#184;&quot;,	&quot;&#195;&#190;&quot; =&gt; &quot;&#195;&#382;&quot;,
-	&quot;&#195;&#189;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195;&#188;&quot; =&gt; &quot;&#195;&#339;&quot;,	&quot;&#195;&#187;&quot; =&gt; &quot;&#195;&#8250;&quot;,
-	&quot;&#195;&#186;&quot; =&gt; &quot;&#195;&#353;&quot;,	&quot;&#195;&#185;&quot; =&gt; &quot;&#195;&#8482;&quot;,	&quot;&#195;&#184;&quot; =&gt; &quot;&#195;&#732;&quot;,
-	&quot;&#195;&#182;&quot; =&gt; &quot;&#195;&#8211;&quot;,	&quot;&#195;&#181;&quot; =&gt; &quot;&#195;&#8226;&quot;,	&quot;&#195;&#180;&quot; =&gt; &quot;&#195;&#8221;&quot;,
-	&quot;&#195;&#179;&quot; =&gt; &quot;&#195;&#8220;&quot;,	&quot;&#195;&#178;&quot; =&gt; &quot;&#195;&#8217;&quot;,	&quot;&#195;&#177;&quot; =&gt; &quot;&#195;&#8216;&quot;,
-	&quot;&#195;&#176;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195;&#175;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195;&#174;&quot; =&gt; &quot;&#195;&#381;&quot;,
-	&quot;&#195;&#173;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195;&#172;&quot; =&gt; &quot;&#195;&#338;&quot;,	&quot;&#195;&#171;&quot; =&gt; &quot;&#195;&#8249;&quot;,
-	&quot;&#195;&#170;&quot; =&gt; &quot;&#195;&#352;&quot;,	&quot;&#195;&#169;&quot; =&gt; &quot;&#195;&#8240;&quot;,	&quot;&#195;&#168;&quot; =&gt; &quot;&#195;&#710;&quot;,
-	&quot;&#195;&#167;&quot; =&gt; &quot;&#195;&#8225;&quot;,	&quot;&#195;&#166;&quot; =&gt; &quot;&#195;&#8224;&quot;,	&quot;&#195;&#165;&quot; =&gt; &quot;&#195;&#8230;&quot;,
-	&quot;&#195;&#164;&quot; =&gt; &quot;&#195;&#8222;&quot;,	&quot;&#195;&#163;&quot; =&gt; &quot;&#195;&#402;&quot;,	&quot;&#195;&#162;&quot; =&gt; &quot;&#195;&#8218;&quot;,
-	&quot;&#195;&#161;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195; &quot; =&gt; &quot;&#195;&#8364;&quot;,	&quot;&#194;&#181;&quot; =&gt; &quot;&#206;&#339;&quot;,
-	&quot;z&quot; =&gt; &quot;Z&quot;,		&quot;y&quot; =&gt; &quot;Y&quot;,		&quot;x&quot; =&gt; &quot;X&quot;,
-	&quot;w&quot; =&gt; &quot;W&quot;,		&quot;v&quot; =&gt; &quot;V&quot;,		&quot;u&quot; =&gt; &quot;U&quot;,
-	&quot;t&quot; =&gt; &quot;T&quot;,		&quot;s&quot; =&gt; &quot;S&quot;,		&quot;r&quot; =&gt; &quot;R&quot;,
-	&quot;q&quot; =&gt; &quot;Q&quot;,		&quot;p&quot; =&gt; &quot;P&quot;,		&quot;o&quot; =&gt; &quot;O&quot;,
-	&quot;n&quot; =&gt; &quot;N&quot;,		&quot;m&quot; =&gt; &quot;M&quot;,		&quot;l&quot; =&gt; &quot;L&quot;,
-	&quot;k&quot; =&gt; &quot;K&quot;,		&quot;j&quot; =&gt; &quot;J&quot;,		&quot;i&quot; =&gt; &quot;I&quot;,
-	&quot;h&quot; =&gt; &quot;H&quot;,		&quot;g&quot; =&gt; &quot;G&quot;,		&quot;f&quot; =&gt; &quot;F&quot;,
-	&quot;e&quot; =&gt; &quot;E&quot;,		&quot;d&quot; =&gt; &quot;D&quot;,		&quot;c&quot; =&gt; &quot;C&quot;,
-	&quot;b&quot; =&gt; &quot;B&quot;,		&quot;a&quot; =&gt; &quot;A&quot;,
-);
-
-class All_in_One_SEO_Pack {
-	
- 	var $version = &quot;1.4.6.13&quot;;
- 	
- 	/** Max numbers of chars in auto-generated description */
- 	var $maximum_description_length = 160;
- 	
- 	/** Minimum number of chars an excerpt should be so that it can be used
- 	 * as description. Touch only if you know what you're doing
- 	 */
- 	var $minimum_description_length = 1;
- 	
- 	var $ob_start_detected = false;
- 	
- 	var $title_start = -1;
- 	
- 	var $title_end = -1;
- 	
- 	/** The title before rewriting */
- 	var $orig_title = '';
- 	
- 	/** Temp filename for the latest version. */
- 	var $upgrade_filename = 'temp.zip';
- 	
- 	/** Where to extract the downloaded newest version. */
- 	var $upgrade_folder;
- 	
- 	/** Any error in upgrading. */
- 	var $upgrade_error;
- 	
- 	/** Which zip to download in order to upgrade .*/
- 	var $upgrade_url = 'http://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip';
- 	
- 	/** Filename of log file. */
- 	var $log_file;
- 	
- 	/** Flag whether there should be logging. */
- 	var $do_log;
- 	
- 	var $wp_version;
- 	
-	function All_in_One_SEO_Pack() {
-		global $wp_version;
-		$this-&gt;wp_version = $wp_version;
-		
-		$this-&gt;log_file = dirname(__FILE__) . '/all_in_one_seo_pack.log';
-		if (get_option('aiosp_do_log')) {
-			$this-&gt;do_log = true;
-		} else {
-			$this-&gt;do_log = false;
-		}
-
-		$this-&gt;upgrade_filename = dirname(__FILE__) . '/' . $this-&gt;upgrade_filename;
-		$this-&gt;upgrade_folder = dirname(__FILE__);
-	}
-	
-	/**      
-	 * Convert a string to lower case
-	 * Compatible with mb_strtolower(), an UTF-8 friendly replacement for strtolower()
-	 */
-	function strtolower($str) {
-		global $UTF8_TABLES;
-		return strtr($str, $UTF8_TABLES['strtolower']);
-	}
-	
-	/**      
-	 * Convert a string to upper case
-	 * Compatible with mb_strtoupper(), an UTF-8 friendly replacement for strtoupper()
-	 */
-	function strtoupper($str) {
-		global $UTF8_TABLES;
-		return strtr($str, $UTF8_TABLES['strtoupper']);
-	}	
-	
-	
-	function template_redirect() {
-		global $wp_query;
-		$post = $wp_query-&gt;get_queried_object();
-
-		if (is_feed()) {
-			return;
-		}
-
-		if (is_single() || is_page()) {
-		    $aiosp_disable = htmlspecialchars(stripcslashes(get_post_meta($post-&gt;ID, 'aiosp_disable', true)));
-		    if ($aiosp_disable) {
-		    	return;
-		    }
-		}
-
-		if (get_option('aiosp_rewrite_titles')) {
-			ob_start(array($this, 'output_callback_for_title'));
-		}
-	}
-	
-	function output_callback_for_title($content) {
-		return $this-&gt;rewrite_title($content);
-	}
-
-	function init() {
-		if (function_exists('load_plugin_textdomain')) {
-			load_plugin_textdomain('all_in_one_seo_pack', 'wp-content/plugins/all-in-one-seo-pack');
-		}
-	}
-
-	function is_static_front_page() {
-		global $wp_query;
-		$post = $wp_query-&gt;get_queried_object();
-		return get_option('show_on_front') == 'page' &amp;&amp; is_page() &amp;&amp; $post-&gt;ID == get_option('page_on_front');
-	}
-	
-	function is_static_posts_page() {
-		global $wp_query;
-		$post = $wp_query-&gt;get_queried_object();
-		return get_option('show_on_front') == 'page' &amp;&amp; is_home() &amp;&amp; $post-&gt;ID == get_option('page_for_posts');
-	}
-	
-	function get_base() {
-   		 return '/'.end(explode('/', str_replace(array('\\','/all_in_one_seo_pack.php'),array('/',''),__FILE__)));
-	}
-
-	function admin_head() {
-		$home = get_settings('siteurl');
-		$stylesheet = $home.'/wp-content/plugins' . $this-&gt;get_base() . '/css/all_in_one_seo_pack.css';
-		echo('&lt;link rel=&quot;stylesheet&quot; href=&quot;' . $stylesheet . '&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;');
-	}
-	
-	function wp_head() {
-		if (is_feed()) {
-			return;
-		}
-		
-		global $wp_query;
-		$post = $wp_query-&gt;get_queried_object();
-		$meta_string = null;
-		
-		//echo(&quot;wp_head() &quot; . wp_title('', false) . &quot; is_home() =&gt; &quot; . is_home() . &quot;, is_page() =&gt; &quot; . is_page() . &quot;, is_single() =&gt; &quot; . is_single() . &quot;, is_static_front_page() =&gt; &quot; . $this-&gt;is_static_front_page() . &quot;, is_static_posts_page() =&gt; &quot; . $this-&gt;is_static_posts_page());
-
-		if (is_single() || is_page()) {
-		    $aiosp_disable = htmlspecialchars(stripcslashes(get_post_meta($post-&gt;ID, 'aiosp_disable', true)));
-		    if ($aiosp_disable) {
-		    	return;
-		    }
-		}
-		
-		if (get_option('aiosp_rewrite_titles')) {
-			// make the title rewrite as short as possible
-			if (function_exists('ob_list_handlers')) {
-				$active_handlers = ob_list_handlers();
-			} else {
-				$active_handlers = array();
-			}
-			if (sizeof($active_handlers) &gt; 0 &amp;&amp;
-				strtolower($active_handlers[sizeof($active_handlers) - 1]) ==
-				strtolower('All_in_One_SEO_Pack::output_callback_for_title')) {
-				ob_end_flush();
-			} else {
-				$this-&gt;log(&quot;another plugin interfering?&quot;);
-				// if we get here there *could* be trouble with another plugin :(
-				$this-&gt;ob_start_detected = true;
-				if (function_exists('ob_list_handlers')) {
-					foreach (ob_list_handlers() as $handler) {
-						$this-&gt;log(&quot;detected output handler $handler&quot;);
-					}
-				}
-			}
-		}
-		
-		echo &quot;\n&lt;!-- all in one seo pack $this-&gt;version &quot;;
-		if ($this-&gt;ob_start_detected) {
-			echo &quot;ob_start_detected &quot;;
-		}
-		echo &quot;[$this-&gt;title_start,$this-&gt;title_end] &quot;;
-		echo &quot;--&gt;\n&quot;;
-		
-		if ((is_home() &amp;&amp; get_option('aiosp_home_keywords')) || $this-&gt;is_static_front_page()) {
-			$keywords = trim($this-&gt;internationalize(get_option('aiosp_home_keywords')));
-		} else {
-			$keywords = $this-&gt;get_all_keywords();
-		}
-		if (is_single() || is_page()) {
-            if ($this-&gt;is_static_front_page()) {
-				$description = trim(stripcslashes($this-&gt;internationalize(get_option('aiosp_home_description'))));
-            } else {
-            	$description = $this-&gt;get_post_description($post);
-            }
-		} else if (is_home()) {
-			$description = trim(stripcslashes($this-&gt;internationalize(get_option('aiosp_home_description'))));
-		} else if (is_category()) {
-			$description = $this-&gt;internationalize(category_description());
-		}
-		
-		if (isset($description) &amp;&amp; (strlen($description) &gt; $this-&gt;minimum_description_length) &amp;&amp; !(is_home() &amp;&amp; is_paged())) {
-			$description = trim(strip_tags($description));
-			$description = str_replace('&quot;', '', $description);
-			
-			// replace newlines on mac / windows?
-			$description = str_replace(&quot;\r\n&quot;, ' ', $description);
-			
-			// maybe linux uses this alone
-			$description = str_replace(&quot;\n&quot;, ' ', $description);
-			
-			if (isset($meta_string)) {
-				//$meta_string .= &quot;\n&quot;;
-			} else {
-				$meta_string = '';
-			}
-			
-			// description format
-            $description_format = get_option('aiosp_description_format');
-            if (!isset($description_format) || empty($description_format)) {
-            	$description_format = &quot;%description%&quot;;
-            }
-            $description = str_replace('%description%', $description, $description_format);
-            $description = str_replace('%blog_title%', get_bloginfo('name'), $description);
-            $description = str_replace('%blog_description%', get_bloginfo('description'), $description);
-            $description = str_replace('%wp_title%', $this-&gt;get_original_title(), $description);
-            
-            $meta_string .= sprintf(&quot;&lt;meta name=\&quot;description\&quot; content=\&quot;%s\&quot; /&gt;&quot;, $description);
-		}
-
-		if (isset ($keywords) &amp;&amp; !empty($keywords) &amp;&amp; !(is_home() &amp;&amp; is_paged())) {
-			if (isset($meta_string)) {
-				$meta_string .= &quot;\n&quot;;
-			}
-			$meta_string .= sprintf(&quot;&lt;meta name=\&quot;keywords\&quot; content=\&quot;%s\&quot; /&gt;&quot;, $keywords);
-		}
-
-		if (function_exists('is_tag')) {
-			$is_tag = is_tag();
-		}
-		
-		if ((is_category() &amp;&amp; get_option('aiosp_category_noindex')) ||
-			(!is_category() &amp;&amp; is_archive() &amp;&amp;!$is_tag &amp;&amp; get_option('aiosp_archive_noindex')) ||
-			(get_option('aiosp_tags_noindex') &amp;&amp; $is_tag)) {
-			if (isset($meta_string)) {
-				$meta_string .= &quot;\n&quot;;
-			}
-			$meta_string .= '&lt;meta name=&quot;robots&quot; content=&quot;noindex,follow&quot; /&gt;';
-		}
-		
-		$page_meta = stripcslashes(get_option('aiosp_page_meta_tags'));
-		$post_meta = stripcslashes(get_option('aiosp_post_meta_tags'));
-		$home_meta = stripcslashes(get_option('aiosp_home_meta_tags'));
-		if (is_page() &amp;&amp; isset($page_meta) &amp;&amp; !empty($page_meta)) {
-			if (isset($meta_string)) {
-				$meta_string .= &quot;\n&quot;;
-			}
-			echo &quot;\n$page_meta&quot;;
-		}
-		
-		if (is_single() &amp;&amp; isset($post_meta) &amp;&amp; !empty($post_meta)) {
-			if (isset($meta_string)) {
-				$meta_string .= &quot;\n&quot;;
-			}
-			$meta_string .= &quot;$post_meta&quot;;
-		}
-		
-		if (is_home() &amp;&amp; !empty($home_meta)) {
-			if (isset($meta_string)) {
-				$meta_string .= &quot;\n&quot;;
-			}
-			$meta_string .= &quot;$home_meta&quot;;
-		}
-		
-		if ($meta_string != null) {
-			echo &quot;$meta_string\n&quot;;
-		}
-		
-		echo &quot;&lt;!-- /all in one seo pack --&gt;\n&quot;;
-	}
-	
-	function get_post_description($post) {
-	    $description = trim(stripcslashes($this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;description&quot;, true))));
-		if (!$description) {
-			$description = $this-&gt;trim_excerpt_without_filters_full_length($this-&gt;internationalize($post-&gt;post_excerpt));
-			if (!$description &amp;&amp; get_option(&quot;aiosp_generate_descriptions&quot;)) {
-				$description = $this-&gt;trim_excerpt_without_filters($this-&gt;internationalize($post-&gt;post_content));
-			}				
-		}
-		
-		// &quot;internal whitespace trim&quot;
-		$description = preg_replace(&quot;/\s\s+/&quot;, &quot; &quot;, $description);
-		
-		return $description;
-	}
-	
-	function replace_title($content, $title) {
-		$title = trim(strip_tags($title));
-		
-		$title_tag_start = &quot;&lt;title&gt;&quot;;
-		$title_tag_end = &quot;&lt;/title&gt;&quot;;
-		$len_start = strlen($title_tag_start);
-		$len_end = strlen($title_tag_end);
-		$title = stripcslashes(trim($title));
-		$start = strpos($content, $title_tag_start);
-		$end = strpos($content, $title_tag_end);
-		
-		$this-&gt;title_start = $start;
-		$this-&gt;title_end = $end;
-		$this-&gt;orig_title = $title;
-		
-		if ($start &amp;&amp; $end) {
-			$header = substr($content, 0, $start + $len_start) . $title .  substr($content, $end);
-		} else {
-			// this breaks some sitemap plugins (like wpg2)
-			//$header = $content . &quot;&lt;title&gt;$title&lt;/title&gt;&quot;;
-			
-			$header = $content;
-		}
-		
-		return $header;
-	}
-	
-	function internationalize($in) {
-		if (function_exists('langswitch_filter_langs_with_message')) {
-			$in = langswitch_filter_langs_with_message($in);
-		}
-		if (function_exists('polyglot_filter')) {
-			$in = polyglot_filter($in);
-		}
-		if (function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')) {
-			$in = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($in);
-		}
-		$in = apply_filters('localization', $in);
-		return $in;
-	}
-	
-	/** @return The original title as delivered by WP (well, in most cases) */
-	function get_original_title() {
-		global $wp_query;
-		if (!$wp_query) {
-			return null;	
-		}
-		
-		$post = $wp_query-&gt;get_queried_object();
-		
-		// the_search_query() is not suitable, it cannot just return
-		global $s;
-		
-		$title = null;
-		
-		if (is_home()) {
-			$title = get_option('blogname');
-		} else if (is_single()) {
-			$title = $this-&gt;internationalize(wp_title('', false));
-		} else if (is_search() &amp;&amp; isset($s) &amp;&amp; !empty($s)) {
-			if (function_exists('attribute_escape')) {
-				$search = attribute_escape(stripcslashes($s));
-			} else {
-				$search = wp_specialchars(stripcslashes($s), true);
-			}
-			$search = $this-&gt;capitalize($search);
-			$title = $search;
-		} else if (is_category() &amp;&amp; !is_feed()) {
-			$category_description = $this-&gt;internationalize(category_description());
-			$category_name = ucwords($this-&gt;internationalize(single_cat_title('', false)));
-			$title = $category_name;
-		} else if (is_page()) {
-			$title = $this-&gt;internationalize(wp_title('', false));
-		} else if (function_exists('is_tag') &amp;&amp; is_tag()) {
-			global $utw;
-			if ($utw) {
-				$tags = $utw-&gt;GetCurrentTagSet();
-				$tag = $tags[0]-&gt;tag;
-		        $tag = str_replace('-', ' ', $tag);
-			} else {
-				// wordpress &gt; 2.3
-				$tag = $this-&gt;internationalize(wp_title('', false));
-			}
-			if ($tag) {
-				$title = $tag;
-			}
-		} else if (is_archive()) {
-			$title = $this-&gt;internationalize(wp_title('', false));
-		} else if (is_404()) {
-		    $title_format = get_option('aiosp_404_title_format');
-		    $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
-		    $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
-		    $new_title = str_replace('%request_url%', $_SERVER['REQUEST_URI'], $new_title);
-		    $new_title = str_replace('%request_words%', $this-&gt;request_as_words($_SERVER['REQUEST_URI']), $new_title);
-				$title = $new_title;
-			}
-			
-			return trim($title);
-		}
-	
-	function paged_title($title) {
-		// the page number if paged
-		global $paged;
-		
-		// simple tagging support
-		global $STagging;
-
-		if (is_paged() || (isset($STagging) &amp;&amp; $STagging-&gt;is_tag_view() &amp;&amp; $paged)) {
-			$part = $this-&gt;internationalize(get_option('aiosp_paged_format'));
-			if (isset($part) || !empty($part)) {
-				$part = &quot; &quot; . trim($part);
-				$part = str_replace('%page%', $paged, $part);
-				$this-&gt;log(&quot;paged_title() [$title] [$part]&quot;);
-				$title .= $part;
-			}
-		}
-		return $title;
-	}
-
-	function rewrite_title($header) {
-		global $wp_query;
-		if (!$wp_query) {
-			$header .= &quot;&lt;!-- no wp_query found! --&gt;\n&quot;;
-			return $header;	
-		}
-		
-		$post = $wp_query-&gt;get_queried_object();
-		
-		// the_search_query() is not suitable, it cannot just return
-		global $s;
-		
-		// simple tagging support
-		global $STagging;
-
-		if (is_home()) {
-			$title = $this-&gt;internationalize(get_option('aiosp_home_title'));
-			if (empty($title)) {
-				$title = $this-&gt;internationalize(get_option('blogname'));
-			}
-			$title = $this-&gt;paged_title($title);
-			$header = $this-&gt;replace_title($header, $title);
-		} else if (is_single()) {
-			// we're not in the loop :(
-			$authordata = get_userdata($post-&gt;post_author);
-			$categories = get_the_category();
-			$category = '';
-			if (count($categories) &gt; 0) {
-				$category = $categories[0]-&gt;cat_name;
-			}
-			$title = $this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;title&quot;, true));
-			if (!$title) {
-				$title = $this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;title_tag&quot;, true));
-				if (!$title) {
-					$title = $this-&gt;internationalize(wp_title('', false));
-				}
-			}
-            $title_format = get_option('aiosp_post_title_format');
-            $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
-            $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
-            $new_title = str_replace('%post_title%', $title, $new_title);
-            $new_title = str_replace('%category%', $category, $new_title);
-            $new_title = str_replace('%category_title%', $category, $new_title);
-            $new_title = str_replace('%post_author_login%', $authordata-&gt;user_login, $new_title);
-            $new_title = str_replace('%post_author_nicename%', $authordata-&gt;user_nicename, $new_title);
-            $new_title = str_replace('%post_author_firstname%', ucwords($authordata-&gt;first_name), $new_title);
-            $new_title = str_replace('%post_author_lastname%', ucwords($authordata-&gt;last_name), $new_title);
-			$title = $new_title;
-			$title = trim($title);
-			$header = $this-&gt;replace_title($header, $title);
-		} else if (is_search() &amp;&amp; isset($s) &amp;&amp; !empty($s)) {
-			if (function_exists('attribute_escape')) {
-				$search = attribute_escape(stripcslashes($s));
-			} else {
-				$search = wp_specialchars(stripcslashes($s), true);
-			}
-			$search = $this-&gt;capitalize($search);
-            $title_format = get_option('aiosp_search_title_format');
-            $title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
-            $title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $title);
-            $title = str_replace('%search%', $search, $title);
-			$header = $this-&gt;replace_title($header, $title);
-		} else if (is_category() &amp;&amp; !is_feed()) {
-			$category_description = $this-&gt;internationalize(category_description());
-			$category_name = ucwords($this-&gt;internationalize(single_cat_title('', false)));
-            $title_format = get_option('aiosp_category_title_format');
-            $title = str_replace('%category_title%', $category_name, $title_format);
-            $title = str_replace('%category_description%', $category_description, $title);
-            $title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title);
-            $title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $title);
-            $title = $this-&gt;paged_title($title);
-			$header = $this-&gt;replace_title($header, $title);
-		} else if (is_page()) {
-			// we're not in the loop :(
-			$authordata = get_userdata($post-&gt;post_author);
-			if ($this-&gt;is_static_front_page()) {
-				if ($this-&gt;internationalize(get_option('aiosp_home_title'))) {
-					$header = $this-&gt;replace_title($header, $this-&gt;internationalize(get_option('aiosp_home_title')));
-				}
-			} else {
-				$title = $this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;title&quot;, true));
-				if (!$title) {
-					$title = $this-&gt;internationalize(wp_title('', false));
-				}
-	            $title_format = get_option('aiosp_page_title_format');
-	            $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
-	            $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
-	            $new_title = str_replace('%page_title%', $title, $new_title);
-	            $new_title = str_replace('%page_author_login%', $authordata-&gt;user_login, $new_title);
-	            $new_title = str_replace('%page_author_nicename%', $authordata-&gt;user_nicename, $new_title);
-	            $new_title = str_replace('%page_author_firstname%', ucwords($authordata-&gt;first_name), $new_title);
-	            $new_title = str_replace('%page_author_lastname%', ucwords($authordata-&gt;last_name), $new_title);
-				$title = trim($new_title);
-				$header = $this-&gt;replace_title($header, $title);
-			}
-		} else if (function_exists('is_tag') &amp;&amp; is_tag()) {
-			global $utw;
-			if ($utw) {
-				$tags = $utw-&gt;GetCurrentTagSet();
-				$tag = $tags[0]-&gt;tag;
-	            $tag = str_replace('-', ' ', $tag);
-			} else {
-				// wordpress &gt; 2.3
-				$tag = $this-&gt;internationalize(wp_title('', false));
-			}
-			if ($tag) {
-	            $tag = $this-&gt;capitalize($tag);
-	            $title_format = get_option('aiosp_tag_title_format');
-	            $title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
-	            $title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $title);
-	            $title = str_replace('%tag%', $tag, $title);
-	            $title = $this-&gt;paged_title($title);
-				$header = $this-&gt;replace_title($header, $title);
-			}
-		} else if (isset($STagging) &amp;&amp; $STagging-&gt;is_tag_view()) { // simple tagging support
-			$tag = $STagging-&gt;search_tag;
-			if ($tag) {
-	            $tag = $this-&gt;capitalize($tag);
-	            $title_format = get_option('aiosp_tag_title_format');
-	            $title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
-	            $title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $title);
-	            $title = str_replace('%tag%', $tag, $title);
-	            $title = $this-&gt;paged_title($title);
-				$header = $this-&gt;replace_title($header, $title);
-			}
-		} else if (is_archive()) {
-			$date = $this-&gt;internationalize(wp_title('', false));
-            $title_format = get_option('aiosp_archive_title_format');
-            $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
-            $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
-            $new_title = str_replace('%date%', $date, $new_title);
-			$title = trim($new_title);
-            $title = $this-&gt;paged_title($title);
-			$header = $this-&gt;replace_title($header, $title);
-		} else if (is_404()) {
-            $title_format = get_option('aiosp_404_title_format');
-            $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
-            $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
-            $new_title = str_replace('%request_url%', $_SERVER['REQUEST_URI'], $new_title);
-            $new_title = str_replace('%request_words%', $this-&gt;request_as_words($_SERVER['REQUEST_URI']), $new_title);
-			$header = $this-&gt;replace_title($header, $new_title);
-		}
-		
-		return $header;
-
-	}
-	
-	/**
-	 * @return User-readable nice words for a given request.
-	 */
-	function request_as_words($request) {
-		$request = htmlspecialchars($request);
-		$request = str_replace('.html', ' ', $request);
-		$request = str_replace('.htm', ' ', $request);
-		$request = str_replace('.', ' ', $request);
-		$request = str_replace('/', ' ', $request);
-		$request_a = explode(' ', $request);
-		$request_new = array();
-		foreach ($request_a as $token) {
-			$request_new[] = ucwords(trim($token));
-		}
-		$request = implode(' ', $request_new);
-		return $request;
-	}
-	
-	function capitalize($s) {
-		$s = trim($s);
-		$tokens = explode(' ', $s);
-		while (list($key, $val) = each($tokens)) {
-			$tokens[$key] = trim($tokens[$key]);
-			$tokens[$key] = strtoupper(substr($tokens[$key], 0, 1)) . substr($tokens[$key], 1);
-		}
-		$s = implode(' ', $tokens);
-		return $s;
-	}
-	
-	function trim_excerpt_without_filters($text) {
-		$text = str_replace(']]&gt;', ']]&amp;gt;', $text);
-		$text = strip_tags($text);
-		$max = $this-&gt;maximum_description_length;
-		
-		if ($max &lt; strlen($text)) {
-			while($text[$max] != ' ' &amp;&amp; $max &gt; $this-&gt;minimum_description_length) {
-				$max--;
-			}
-		}
-		$text = substr($text, 0, $max);
-		return trim(stripcslashes($text));
-	}
-	
-	function trim_excerpt_without_filters_full_length($text) {
-		$text = str_replace(']]&gt;', ']]&amp;gt;', $text);
-		$text = strip_tags($text);
-		return trim(stripcslashes($text));
-	}
-	
-	/**
-	 * @return comma-separated list of unique keywords
-	 */
-	function get_all_keywords() {
-		global $posts;
-
-		if (is_404()) {
-			return null;
-		}
-		
-		// if we are on synthetic pages
-		if (!is_home() &amp;&amp; !is_page() &amp;&amp; !is_single() &amp;&amp;!$this-&gt;is_static_front_page() &amp;&amp; !$this-&gt;is_static_posts_page()) {
-			return null;
-		}
-
-	    $keywords = array();
-	    if (is_array($posts)) {
-	        foreach ($posts as $post) {
-	            if ($post) {
-
-	                // custom field keywords
-	                $keywords_a = $keywords_i = null;
-	                $description_a = $description_i = null;
-	                $id = $post-&gt;ID;
-		            $keywords_i = stripcslashes($this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;keywords&quot;, true)));
-	                $keywords_i = str_replace('&quot;', '', $keywords_i);
-	                if (isset($keywords_i) &amp;&amp; !empty($keywords_i)) {
-	                	$traverse = explode(',', $keywords_i);
-	                	foreach ($traverse as $keyword) {
-	                		$keywords[] = $keyword;
-	                	}
-	                }
-	                
-	                // WP 2.3 tags
-	                if (function_exists('get_the_tags')) {
-	                	$tags = get_the_tags($post-&gt;ID);
-	                	if ($tags &amp;&amp; is_array($tags)) {
-		                	foreach ($tags as $tag) {
-		                		$keywords[] = $this-&gt;internationalize($tag-&gt;name);
-		                	}
-	                	}
-	                }
-
-	                // Ultimate Tag Warrior integration
-	                global $utw;
-	                if ($utw) {
-	                	$tags = $utw-&gt;GetTagsForPost($post);
-	                	if (is_array($tags)) {
-		                	foreach ($tags as $tag) {
-								$tag = $tag-&gt;tag;
-								$tag = str_replace('_',' ', $tag);
-								$tag = str_replace('-',' ',$tag);
-								$tag = stripcslashes($tag);
-		                		$keywords[] = $tag;
-		                	}
-	                	}
-	                }
-	                
-	                // autometa
-	                $autometa = stripcslashes(get_post_meta($post-&gt;ID, &quot;autometa&quot;, true));
-	                if (isset($autometa) &amp;&amp; !empty($autometa)) {
-	                	$autometa_array = explode(' ', $autometa);
-	                	foreach ($autometa_array as $e) {
-	                		$keywords[] = $e;
-	                	}
-	                }
-
-	            	if (get_option('aiosp_use_categories') &amp;&amp; !is_page()) {
-		                $categories = get_the_category($post-&gt;ID);
-		                foreach ($categories as $category) {
-		                	$keywords[] = $this-&gt;internationalize($category-&gt;cat_name);
-		                }
-	            	}
-
-	            }
-	        }
-	    }
-	    
-	    return $this-&gt;get_unique_keywords($keywords);
-	}
-	
-	function get_meta_keywords() {
-		global $posts;
-
-	    $keywords = array();
-	    if (is_array($posts)) {
-	        foreach ($posts as $post) {
-	            if ($post) {
-	                // custom field keywords
-	                $keywords_a = $keywords_i = null;
-	                $description_a = $description_i = null;
-	                $id = $post-&gt;ID;
-		            $keywords_i = stripcslashes(get_post_meta($post-&gt;ID, &quot;keywords&quot;, true));
-	                $keywords_i = str_replace('&quot;', '', $keywords_i);
-	                if (isset($keywords_i) &amp;&amp; !empty($keywords_i)) {
-	                    $keywords[] = $keywords_i;
-	                }
-	            }
-	        }
-	    }
-	    
-	    return $this-&gt;get_unique_keywords($keywords);
-	}
-	
-	function get_unique_keywords($keywords) {
-		$small_keywords = array();
-		foreach ($keywords as $word) {
-			if (function_exists('mb_strtolower'))			
-				$small_keywords[] = mb_strtolower($word);
-			else 
-				$small_keywords[] = $this-&gt;strtolower($word);
-		}
-		$keywords_ar = array_unique($small_keywords);
-		return implode(',', $keywords_ar);
-	}
-	
-	function get_url($url)	{
-		if (function_exists('file_get_contents')) {
-			$file = file_get_contents($url);
-		} else {
-	        $curl = curl_init($url);
-	        curl_setopt($curl, CURLOPT_HEADER, 0);
-	        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
-	        $file = curl_exec($curl);
-	        curl_close($curl);
-	    }
-	    return $file;
-	}
-	
-	function log($message) {
-		if ($this-&gt;do_log) {
-			error_log(date('Y-m-d H:i:s') . &quot; &quot; . $message . &quot;\n&quot;, 3, $this-&gt;log_file);
-		}
-	}
-
-	function download_newest_version() {
-		$success = true;
-	    $file_content = $this-&gt;get_url($this-&gt;upgrade_url);
-	    if ($file_content === false) {
-	    	$this-&gt;upgrade_error = sprintf(__(&quot;Could not download distribution (%s)&quot;), $this-&gt;upgrade_url);
-			$success = false;
-	    } else if (strlen($file_content) &lt; 100) {
-	    	$this-&gt;upgrade_error = sprintf(__(&quot;Could not download distribution (%s): %s&quot;), $this-&gt;upgrade_url, $file_content);
-			$success = false;
-	    } else {
-	    	$this-&gt;log(sprintf(&quot;filesize of download ZIP: %d&quot;, strlen($file_content)));
-		    $fh = @fopen($this-&gt;upgrade_filename, 'w');
-		    $this-&gt;log(&quot;fh is $fh&quot;);
-		    if (!$fh) {
-		    	$this-&gt;upgrade_error = sprintf(__(&quot;Could not open %s for writing&quot;), $this-&gt;upgrade_filename);
-		    	$this-&gt;upgrade_error .= &quot;&lt;br /&gt;&quot;;
-		    	$this-&gt;upgrade_error .= sprintf(__(&quot;Please make sure %s is writable&quot;), $this-&gt;upgrade_folder);
-		    	$success = false;
-		    } else {
-		    	$bytes_written = @fwrite($fh, $file_content);
-			    $this-&gt;log(&quot;wrote $bytes_written bytes&quot;);
-		    	if (!$bytes_written) {
-			    	$this-&gt;upgrade_error = sprintf(__(&quot;Could not write to %s&quot;), $this-&gt;upgrade_filename);
-			    	$success = false;
-		    	}
-		    }
-		    if ($success) {
-		    	fclose($fh);
-		    }
-	    }
-	    return $success;
-	}
-
-	function install_newest_version() {
-		$success = $this-&gt;download_newest_version();
-	    if ($success) {
-		    $success = $this-&gt;extract_plugin();
-		    unlink($this-&gt;upgrade_filename);
-	    }
-	    return $success;
-	}
-
-	function extract_plugin() {
-	    if (!class_exists('PclZip')) {
-	        require_once ('pclzip.lib.php');
-	    }
-	    $archive = new PclZip($this-&gt;upgrade_filename);
-	    $files = $archive-&gt;extract(PCLZIP_OPT_STOP_ON_ERROR, PCLZIP_OPT_REPLACE_NEWER, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_PATH, $this-&gt;upgrade_folder);
-	    $this-&gt;log(&quot;files is $files&quot;);
-	    if (is_array($files)) {
-	    	$num_extracted = sizeof($files);
-		    $this-&gt;log(&quot;extracted $num_extracted files to $this-&gt;upgrade_folder&quot;);
-		    $this-&gt;log(print_r($files, true));
-	    	return true;
-	    } else {
-	    	$this-&gt;upgrade_error = $archive-&gt;errorInfo();
-	    	return false;
-	    }
-	}
-	
-	/** crude approximization of whether current user is an admin */
-	function is_admin() {
-		return current_user_can('level_8');
-	}
-	
-	function is_directory_writable($directory) {
-		$filename = $directory . '/' . 'tmp_file_' . time();
-		$fh = @fopen($filename, 'w');
-		if (!$fh) {
-			return false;
-		}
-		
-		$written = fwrite($fh, &quot;test&quot;);
-		fclose($fh);
-		unlink($filename);
-		if ($written) {
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	function is_upgrade_directory_writable() {
-		//return $this-&gt;is_directory_writable($this-&gt;upgrade_folder);
-		// let's assume it is
-		return true;
-	}
-
-	function post_meta_tags($id) {
-	    $awmp_edit = $_POST[&quot;aiosp_edit&quot;];
-	    if (isset($awmp_edit) &amp;&amp; !empty($awmp_edit)) {
-		    $keywords = $_POST[&quot;aiosp_keywords&quot;];
-		    $description = $_POST[&quot;aiosp_description&quot;];
-		    $title = $_POST[&quot;aiosp_title&quot;];
-		    $aiosp_meta = $_POST[&quot;aiosp_meta&quot;];
-		    $aiosp_disable = $_POST[&quot;aiosp_disable&quot;];
-
-		    delete_post_meta($id, 'keywords');
-		    delete_post_meta($id, 'description');
-		    delete_post_meta($id, 'title');
-		    if ($this-&gt;is_admin()) {
-		    	delete_post_meta($id, 'aiosp_disable');
-		    }
-		    //delete_post_meta($id, 'aiosp_meta');
-
-		    if (isset($keywords) &amp;&amp; !empty($keywords)) {
-			    add_post_meta($id, 'keywords', $keywords);
-		    }
-		    if (isset($description) &amp;&amp; !empty($description)) {
-			    add_post_meta($id, 'description', $description);
-		    }
-		    if (isset($title) &amp;&amp; !empty($title)) {
-			    add_post_meta($id, 'title', $title);
-		    }
-		    if (isset($aiosp_disable) &amp;&amp; !empty($aiosp_disable) &amp;&amp; $this-&gt;is_admin()) {
-			    add_post_meta($id, 'aiosp_disable', $aiosp_disable);
-		    }
-		    /*
-		    if (isset($aiosp_meta) &amp;&amp; !empty($aiosp_meta)) {
-			    add_post_meta($id, 'aiosp_meta', $aiosp_meta);
-		    }
-		    */
-	    }
-	}
-
-	function edit_category($id) {
-		global $wpdb;
-		$id = $wpdb-&gt;escape($id);
-	    $awmp_edit = $_POST[&quot;aiosp_edit&quot;];
-	    if (isset($awmp_edit) &amp;&amp; !empty($awmp_edit)) {
-		    $keywords = $wpdb-&gt;escape($_POST[&quot;aiosp_keywords&quot;]);
-		    $title = $wpdb-&gt;escape($_POST[&quot;aiosp_title&quot;]);
-		    $old_category = $wpdb-&gt;get_row(&quot;select * from $this-&gt;table_categories where category_id=$id&quot;, OBJECT);
-		    if ($old_category) {
-		    	$wpdb-&gt;query(&quot;update $this-&gt;table_categories
-		    			set meta_title='$title', meta_keywords='$keywords'
-		    			where category_id=$id&quot;);
-		    } else {
-		    	$wpdb-&gt;query(&quot;insert into $this-&gt;table_categories(meta_title, meta_keywords, category_id)
-		    			values ('$title', '$keywords', $id&quot;);
-		    }
-		    //$wpdb-&gt;query(&quot;insert into $this-&gt;table_categories&quot;)
-	    	/*
-		    delete_post_meta($id, 'keywords');
-		    delete_post_meta($id, 'description');
-		    delete_post_meta($id, 'title');
-
-		    if (isset($keywords) &amp;&amp; !empty($keywords)) {
-			    add_post_meta($id, 'keywords', $keywords);
-		    }
-		    if (isset($description) &amp;&amp; !empty($description)) {
-			    add_post_meta($id, 'description', $description);
-		    }
-		    if (isset($title) &amp;&amp; !empty($title)) {
-			    add_post_meta($id, 'title', $title);
-		    }
-		    */
-	    }
-	}
-
-	/**
-	 * @deprecated This was for the feature of dedicated meta tags for categories which never went mainstream.
-	 */
-	function edit_category_form() {
-	    global $post;
-	    $keywords = stripcslashes(get_post_meta($post-&gt;ID, 'keywords', true));
-	    $title = stripcslashes(get_post_meta($post-&gt;ID, 'title', true));
-	    $description = stripcslashes(get_post_meta($post-&gt;ID, 'description', true));
-		?&gt;
-		&lt;input value=&quot;aiosp_edit&quot; type=&quot;hidden&quot; name=&quot;aiosp_edit&quot; /&gt;
-		&lt;table class=&quot;editform&quot; width=&quot;100%&quot; cellspacing=&quot;2&quot; cellpadding=&quot;5&quot;&gt;
-		&lt;tr&gt;
-		&lt;th width=&quot;33%&quot; scope=&quot;row&quot; valign=&quot;top&quot;&gt;
-		&lt;a href=&quot;http://wp.uberdose.com/2007/03/24/all-in-one-seo-pack/&quot;&gt;&lt;?php _e('All in One SEO Pack', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
-		&lt;/th&gt;
-		&lt;/tr&gt;
-		&lt;tr&gt;
-		&lt;th width=&quot;33%&quot; scope=&quot;row&quot; valign=&quot;top&quot;&gt;&lt;label for=&quot;aiosp_title&quot;&gt;&lt;?php _e('Title:', 'all_in_one_seo_pack') ?&gt;&lt;/label&gt;&lt;/th&gt;
-		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $title ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_title&quot; size=&quot;70&quot;/&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-		&lt;tr&gt;
-		&lt;th width=&quot;33%&quot; scope=&quot;row&quot; valign=&quot;top&quot;&gt;&lt;label for=&quot;aiosp_keywords&quot;&gt;&lt;?php _e('Keywords (comma separated):', 'all_in_one_seo_pack') ?&gt;&lt;/label&gt;&lt;/th&gt;
-		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $keywords ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_keywords&quot; size=&quot;70&quot;/&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-		&lt;/table&gt;
-		&lt;?php
-	}
-
-	function add_meta_tags_textinput() {
-	    global $post;
-	    $post_id = $post;
-	    if (is_object($post_id)) {
-	    	$post_id = $post_id-&gt;ID;
-	    }
-	    $keywords = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'keywords', true)));
-	    $title = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'title', true)));
-	    $description = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'description', true)));
-	    $aiosp_meta = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'aiosp_meta', true)));
-	    $aiosp_disable = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'aiosp_disable', true)));
-		?&gt;
-		&lt;SCRIPT LANGUAGE=&quot;JavaScript&quot;&gt;
-		&lt;!-- Begin
-		function countChars(field,cntfield) {
-		cntfield.value = field.value.length;
-		}
-		//  End --&gt;
-		&lt;/script&gt;
-
-	 &lt;?php if (substr($this-&gt;wp_version, 0, 3) &gt;= '2.5') { ?&gt;
-                &lt;div id=&quot;postaiosp&quot; class=&quot;postbox closed&quot;&gt;
-                &lt;h3&gt;&lt;?php _e('All in One SEO Pack', 'all_in_one_seo_pack') ?&gt;&lt;/h3&gt;
-                &lt;div class=&quot;inside&quot;&gt;
-                &lt;div id=&quot;postaiosp&quot;&gt;
-                &lt;?php } else { ?&gt;
-                &lt;div class=&quot;dbx-b-ox-wrapper&quot;&gt;
-                &lt;fieldset id=&quot;seodiv&quot; class=&quot;dbx-box&quot;&gt;
-                &lt;div class=&quot;dbx-h-andle-wrapper&quot;&gt;
-                &lt;h3 class=&quot;dbx-handle&quot;&gt;&lt;?php _e('All in One SEO Pack', 'all_in_one_seo_pack') ?&gt;&lt;/h3&gt;
-                &lt;/div&gt;
-                &lt;div class=&quot;dbx-c-ontent-wrapper&quot;&gt;
-                &lt;div class=&quot;dbx-content&quot;&gt;
-                &lt;?php } ?&gt;
-	
-		&lt;a target=&quot;__blank&quot; href=&quot;http://semperfiwebdesign.com/portfolio/wordpress/wordpress-plugins/all-in-one-seo-pack/&quot;&gt;&lt;?php _e('Click here for Support', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
-		&lt;input value=&quot;aiosp_edit&quot; type=&quot;hidden&quot; name=&quot;aiosp_edit&quot; /&gt;
-		&lt;table style=&quot;margin-bottom:40px&quot;&gt;
-		&lt;tr&gt;
-		&lt;th style=&quot;text-align:left;&quot; colspan=&quot;2&quot;&gt;
-		&lt;/th&gt;
-		&lt;/tr&gt;
-		&lt;tr&gt;
-		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Title:', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
-		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $title ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_title&quot; size=&quot;62&quot;/&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-		&lt;tr&gt;
-		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Description:', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
-		&lt;td&gt;&lt;textarea name=&quot;aiosp_description&quot; rows=&quot;1&quot; cols=&quot;60&quot;
-		onKeyDown=&quot;countChars(document.post.aiosp_description,document.post.length1)&quot;
-		onKeyUp=&quot;countChars(document.post.aiosp_description,document.post.length1)&quot;&gt;&lt;?php echo $description ?&gt;&lt;/textarea&gt;&lt;br /&gt;
-		&lt;input readonly type=&quot;text&quot; name=&quot;length1&quot; size=&quot;3&quot; maxlength=&quot;3&quot; value=&quot;&lt;?php echo strlen($description);?&gt;&quot; /&gt;
-		&lt;?php _e(' characters. Most search engines use a maximum of 160 chars for the description.', 'all_in_one_seo_pack') ?&gt;
-		&lt;/td&gt;
-		&lt;/tr&gt;
-		&lt;tr&gt;
-		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Keywords (comma separated):', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
-		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $keywords ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_keywords&quot; size=&quot;62&quot;/&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-
-		&lt;?php if ($this-&gt;is_admin()) { ?&gt;
-		&lt;tr&gt;
-		&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-		&lt;?php _e('Disable on this page/post:', 'all_in_one_seo_pack')?&gt;
-		&lt;/th&gt;
-		&lt;td&gt;
-		&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_disable&quot; &lt;?php if ($aiosp_disable) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
-		&lt;/td&gt;
-		&lt;/tr&gt;
-		&lt;?php } ?&gt;
-
-		&lt;/table&gt;
-		
-		&lt;?php if (substr($this-&gt;wp_version, 0, 3) &gt;= '2.5') { ?&gt;
-		&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
-		&lt;?php } else { ?&gt;
-		&lt;/div&gt;
-		&lt;/fieldset&gt;
-		&lt;/div&gt;
-		&lt;?php } ?&gt;
-
-		&lt;?php
-	}
-
-	function admin_menu() {
-		$file = __FILE__;
-		
-		// hack for 1.5
-		if (substr($this-&gt;wp_version, 0, 3) == '1.5') {
-			$file = 'all-in-one-seo-pack/all_in_one_seo_pack.php';
-		}
-		//add_management_page(__('All in One SEO Title', 'all_in_one_seo_pack'), __('All in One SEO', 'all_in_one_seo_pack'), 10, $file, array($this, 'management_panel'));
-		add_submenu_page('options-general.php', __('All in One SEO', 'all_in_one_seo_pack'), __('All in One SEO', 'all_in_one_seo_pack'), 10, $file, array($this, 'options_panel'));
-	}
-	
-	function management_panel() {
-		$message = null;
-		$base_url = &quot;edit.php?page=&quot; . __FILE__;
-		//echo($base_url);
-		$type = $_REQUEST['type'];
-		if (!isset($type)) {
-			$type = &quot;posts&quot;;
-		}
-?&gt;
-
-  &lt;ul class=&quot;aiosp_menu&quot;&gt;
-    &lt;li&gt;&lt;a href=&quot;&lt;?php echo $base_url ?&gt;&amp;type=posts&quot;&gt;Posts&lt;/a&gt;
-    &lt;/li&gt;
-    &lt;li&gt;&lt;a href=&quot;&lt;?php echo $base_url ?&gt;&amp;type=pages&quot;&gt;Pages&lt;/a&gt;
-    &lt;/li&gt;
-  &lt;/ul&gt;
-  
-&lt;?php
-
-		if ($type == &quot;posts&quot;) {
-			echo(&quot;posts&quot;);
-		} elseif ($type == &quot;pages&quot;) {
-			echo(&quot;pages&quot;);
-		}
-
-	}
-
-	function options_panel() {
-		$message = null;
-		$message_updated = __(&quot;All in One SEO Options Updated.&quot;, 'all_in_one_seo_pack');
-		
-		// update options
-		if ($_POST['action'] &amp;&amp; $_POST['action'] == 'aiosp_update') {
-			$message = $message_updated;
-			update_option('aiosp_home_title', $_POST['aiosp_home_title']);
-			update_option('aiosp_home_description', $_POST['aiosp_home_description']);
-			update_option('aiosp_home_keywords', $_POST['aiosp_home_keywords']);
-			update_option('aiosp_max_words_excerpt', $_POST['aiosp_max_words_excerpt']);
-			update_option('aiosp_rewrite_titles', $_POST['aiosp_rewrite_titles']);
-			update_option('aiosp_post_title_format', $_POST['aiosp_post_title_format']);
-			update_option('aiosp_page_title_format', $_POST['aiosp_page_title_format']);
-			update_option('aiosp_category_title_format', $_POST['aiosp_category_title_format']);
-			update_option('aiosp_archive_title_format', $_POST['aiosp_archive_title_format']);
-			update_option('aiosp_tag_title_format', $_POST['aiosp_tag_title_format']);
-			update_option('aiosp_search_title_format', $_POST['aiosp_search_title_format']);
-			update_option('aiosp_description_format', $_POST['aiosp_description_format']);
-			update_option('aiosp_404_title_format', $_POST['aiosp_404_title_format']);
-			update_option('aiosp_paged_format', $_POST['aiosp_paged_format']);
-			update_option('aiosp_use_categories', $_POST['aiosp_use_categories']);
-			update_option('aiosp_category_noindex', $_POST['aiosp_category_noindex']);
-			update_option('aiosp_archive_noindex', $_POST['aiosp_archive_noindex']);
-			update_option('aiosp_tags_noindex', $_POST['aiosp_tags_noindex']);
-			update_option('aiosp_generate_descriptions', $_POST['aiosp_generate_descriptions']);
-			update_option('aiosp_debug_info', $_POST['aiosp_debug_info']);
-			update_option('aiosp_post_meta_tags', $_POST['aiosp_post_meta_tags']);
-			update_option('aiosp_page_meta_tags', $_POST['aiosp_page_meta_tags']);
-			update_option('aiosp_home_meta_tags', $_POST['aiosp_home_meta_tags']);
-			update_option('aiosp_do_log', $_POST['aiosp_do_log']);
-			if (function_exists('wp_cache_flush')) {
-				wp_cache_flush();
-			}
-		} elseif ($_POST['aiosp_upgrade']) {
-			$message = __(&quot;Upgraded to newest version. Please revisit the options page to make sure you see the newest version.&quot;, 'all_in_one_seo_pack');
-			$success = $this-&gt;install_newest_version();
-			if (!$success) {
-				$message = __(&quot;Upgrade failed&quot;, 'all_in_one_seo_pack');
-				if (isset($this-&gt;upgrade_error) &amp;&amp; !empty($this-&gt;upgrade_error)) {
-					$message .= &quot;: &quot; . $this-&gt;upgrade_error;
-				} else {
-					$message .= &quot;.&quot;;
-				}
-			}
-		}
-
-?&gt;
-&lt;?php if ($message) : ?&gt;
-&lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;?php echo $message; ?&gt;&lt;/p&gt;&lt;/div&gt;
-&lt;?php endif; ?&gt;
-&lt;div id=&quot;dropmessage&quot; class=&quot;updated&quot; style=&quot;display:none;&quot;&gt;&lt;/div&gt;
-&lt;div class=&quot;wrap&quot;&gt;
-&lt;h2&gt;&lt;?php _e('All in One SEO Plugin Options', 'all_in_one_seo_pack'); ?&gt;&lt;/h2&gt;
-&lt;p&gt;
-&lt;?php _e(&quot;This is version &quot;, 'all_in_one_seo_pack') ?&gt;&lt;?php _e(&quot;$this-&gt;version &quot;, 'all_in_one_seo_pack') ?&gt;
-&amp;nbsp;&lt;a target=&quot;_blank&quot; title=&quot;&lt;?php _e('All in One SEO Plugin Release History', 'all_in_one_seo_pack')?&gt;&quot;
-href=&quot;http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-pack-release-history/&quot;&gt;&lt;?php _e(&quot;Should I upgrade?&quot;, 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-| &lt;a target=&quot;_blank&quot; title=&quot;&lt;?php _e('FAQ', 'all_in_one_seo_pack') ?&gt;&quot;
-href=&quot;http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/&quot;&gt;&lt;?php _e('FAQ', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
-| &lt;a target=&quot;_blank&quot; title=&quot;&lt;?php _e('All in One SEO Plugin Feedback', 'all_in_one_seo_pack') ?&gt;&quot;
-href=&quot;http://semperfiwebdesign.com/portfolio/wordpress/wordpress-plugins/all-in-one-seo-pack/&quot;&gt;&lt;?php _e('Feedback', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
-| &lt;a target=&quot;_blank&quot; title=&quot;&lt;?php _e('All in One SEO Plugin Translations', 'all_in_one_seo_pack') ?&gt;&quot;
-href=&quot;http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/translations-for-all-in-one-seo-pack/&quot;&gt;&lt;?php _e('Translations', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
-| &lt;a target=&quot;_blank&quot; title=&quot;&lt;?php echo 'Donate' ?&gt;&quot;
-href=&quot;https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=mrtorbert%40gmail%2ecom&amp;item_name=All%20In%20One%20SEO%20Pack&amp;item_number=Support%20Open%20Source&amp;no_shipping=0&amp;no_note=1&amp;tax=0&amp;currency_code=USD&amp;lc=US&amp;bn=PP%2dDonationsBF&amp;charset=UTF%2d8&quot;&gt;&lt;?php echo 'Donate' ?&gt;&lt;/a&gt;
-&lt;/p&gt;
-&lt;p&gt;
-&lt;?php
-$canwrite = $this-&gt;is_upgrade_directory_writable();
-//$canwrite = false;
-?&gt;
-&lt;form class=&quot;form-table&quot; name=&quot;dofollow&quot; action=&quot;&quot; method=&quot;post&quot;&gt;
-&lt;p class=&quot;submit&quot;&gt;
-&lt;input type=&quot;submit&quot; &lt;?php if (!$canwrite) echo(' disabled=&quot;disabled&quot; ');?&gt; name=&quot;aiosp_upgrade&quot; value=&quot;&lt;?php _e('One Click Upgrade', 'all_in_one_seo_pack')?&gt; &amp;raquo;&quot; /&gt;
-&lt;strong&gt;&lt;?php _e(&quot;(Remember: Backup early, backup often!)&quot;, 'all_in_one_seo_pack') ?&gt;&lt;/strong&gt;
-&lt;/form&gt;
-&lt;/p&gt;
-&lt;p&gt;&lt;/p&gt;
-
-&lt;?php if (!$canwrite) {
-	echo(&quot;&lt;p&gt;&lt;strong&gt;&quot;); echo(sprintf(__(&quot;Please make sure that %s is writable.&quot;, 'all_in_one_seo_pack'), $this-&gt;upgrade_folder)); echo(&quot;&lt;/p&gt;&lt;/strong&gt;&quot;);
-} ?&gt;
-&lt;/p&gt;
-
-&lt;script type=&quot;text/javascript&quot;&gt;
-&lt;!--
-    function toggleVisibility(id) {
-       var e = document.getElementById(id);
-       if(e.style.display == 'block')
-          e.style.display = 'none';
-       else
-          e.style.display = 'block';
-    }
-//--&gt;
-&lt;/script&gt;
-
-&lt;h3&gt;&lt;?php _e('Click on option titles to get help!', 'all_in_one_seo_pack') ?&gt;&lt;/h3&gt;
-
-&lt;form name=&quot;dofollow&quot; action=&quot;&quot; method=&quot;post&quot;&gt;
-&lt;table class=&quot;form-table&quot;&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_home_title_tip');&quot;&gt;
-&lt;?php _e('Home Title:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_home_title&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_home_title')); ?&gt;&lt;/textarea&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_home_title_tip&quot;&gt;
-&lt;?php
-_e('As the name implies, this will be the title of your homepage. This is independent of any other option. If not set, the default blog title will get used.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_home_description_tip');&quot;&gt;
-&lt;?php _e('Home Description:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_home_description&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_home_description')); ?&gt;&lt;/textarea&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_home_description_tip&quot;&gt;
-&lt;?php
-_e('The META description for your homepage. Independent of any other options, the default is no META description at all if this is not set.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_home_keywords_tip');&quot;&gt;
-&lt;?php _e('Home Keywords (comma separated):', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_home_keywords&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_home_keywords')); ?&gt;&lt;/textarea&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_home_keywords_tip&quot;&gt;
-&lt;?php
-_e(&quot;A comma separated list of your most important keywords for your site that will be written as META keywords on your homepage. Don't stuff everything in here.&quot;, 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_rewrite_titles_tip');&quot;&gt;
-&lt;?php _e('Rewrite Titles:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_rewrite_titles&quot; &lt;?php if (get_option('aiosp_rewrite_titles')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_rewrite_titles_tip&quot;&gt;
-&lt;?php
-_e(&quot;Note that this is all about the title tag. This is what you see in your browser's window title bar. This is NOT visible on a page, only in the window title bar and of course in the source. If set, all page, post, category, search and archive page titles get rewritten. You can specify the format for most of them. For example: The default templates puts the title tag of posts like this: &#226;&#8364;&#339;Blog Archive &gt;&gt; Blog Name &gt;&gt; Post Title&#226;&#8364;* (maybe I've overdone slightly). This is far from optimal. With the default post title format, Rewrite Title rewrites this to &#226;&#8364;&#339;Post Title | Blog Name&#226;&#8364;*. If you have manually defined a title (in one of the text fields for All in One SEO Plugin input) this will become the title of your post in the format string.&quot;, 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_post_title_format_tip');&quot;&gt;
-&lt;?php _e('Post Title Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_post_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_post_title_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_post_title_format_tip&quot;&gt;
-&lt;?php
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%post_title% - The original title of the post', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%category_title% - The (main) category of the post', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%category% - Alias for %category_title%', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e(&quot;%post_author_login% - This post's author' login&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e(&quot;%post_author_nicename% - This post's author' nicename&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e(&quot;%post_author_firstname% - This post's author' first name (capitalized)&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e(&quot;%post_author_lastname% - This post's author' last name (capitalized)&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_page_title_format_tip');&quot;&gt;
-&lt;?php _e('Page Title Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_page_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_page_title_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_page_title_format_tip&quot;&gt;
-&lt;?php
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%page_title% - The original title of the page', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e(&quot;%page_author_login% - This page's author' login&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e(&quot;%page_author_nicename% - This page's author' nicename&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e(&quot;%page_author_firstname% - This page's author' first name (capitalized)&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e(&quot;%page_author_lastname% - This page's author' last name (capitalized)&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_category_title_format_tip');&quot;&gt;
-&lt;?php _e('Category Title Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_category_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_category_title_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_category_title_format_tip&quot;&gt;
-&lt;?php
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%category_title% - The original title of the category', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%category_description% - The description of the category', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_archive_title_format_tip');&quot;&gt;
-&lt;?php _e('Archive Title Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_archive_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_archive_title_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_archive_title_format_tip&quot;&gt;
-&lt;?php
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%date% - The original archive title given by wordpress, e.g. &quot;2007&quot; or &quot;2007 August&quot;', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_tag_title_format_tip');&quot;&gt;
-&lt;?php _e('Tag Title Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_tag_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_tag_title_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_tag_title_format_tip&quot;&gt;
-&lt;?php
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%tag% - The name of the tag', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_search_title_format_tip');&quot;&gt;
-&lt;?php _e('Search Title Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_search_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_search_title_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_search_title_format_tip&quot;&gt;
-&lt;?php
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%search% - What was searched for', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_description_format_tip');&quot;&gt;
-&lt;?php _e('Description Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_description_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_description_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_description_format_tip&quot;&gt;
-&lt;?php
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%description% - The original description as determined by the plugin, e.g. the excerpt if one is set or an auto-generated one if that option is set', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%wp_title% - The original wordpress title, e.g. post_title for posts', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_404_title_format_tip');&quot;&gt;
-&lt;?php _e('404 Title Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_404_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_404_title_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_404_title_format_tip&quot;&gt;
-&lt;?php
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%request_url% - The original URL path, like &quot;/url-that-does-not-exist/&quot;', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;li&gt;'); _e('%request_words% - The URL path in human readable form, like &quot;Url That Does Not Exist&quot;', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_paged_format_tip');&quot;&gt;
-&lt;?php _e('Paged Format:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input size=&quot;59&quot; name=&quot;aiosp_paged_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_paged_format')); ?&gt;&quot;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_paged_format_tip&quot;&gt;
-&lt;?php
-_e('This string gets appended/prepended to titles when they are for paged index pages (like home or archive pages).', 'all_in_one_seo_pack');
-_e('The following macros are supported:', 'all_in_one_seo_pack');
-echo('&lt;ul&gt;');
-echo('&lt;li&gt;'); _e('%page% - The page number', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
-echo('&lt;/ul&gt;');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_use_categories_tip');&quot;&gt;
-&lt;?php _e('Use Categories for META keywords:', 'all_in_one_seo_pack')?&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_use_categories&quot; &lt;?php if (get_option('aiosp_use_categories')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_use_categories_tip&quot;&gt;
-&lt;?php
-_e('Check this if you want your categories for a given post used as the META keywords for this post (in addition to any keywords and tags you specify on the post edit page).', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_category_noindex_tip');&quot;&gt;
-&lt;?php _e('Use noindex for Categories:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_category_noindex&quot; &lt;?php if (get_option('aiosp_category_noindex')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_category_noindex_tip&quot;&gt;
-&lt;?php
-_e('Check this for excluding category pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_archive_noindex_tip');&quot;&gt;
-&lt;?php _e('Use noindex for Archives:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_archive_noindex&quot; &lt;?php if (get_option('aiosp_archive_noindex')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_archive_noindex_tip&quot;&gt;
-&lt;?php
-_e('Check this for excluding archive pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_tags_noindex_tip');&quot;&gt;
-&lt;?php _e('Use noindex for Tag Archives:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_tags_noindex&quot; &lt;?php if (get_option('aiosp_tags_noindex')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_tags_noindex_tip&quot;&gt;
-&lt;?php
-_e('Check this for excluding tag pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_generate_descriptions_tip');&quot;&gt;
-&lt;?php _e('Autogenerate Descriptions:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_generate_descriptions&quot; &lt;?php if (get_option('aiosp_generate_descriptions')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_generate_descriptions_tip&quot;&gt;
-&lt;?php
-_e(&quot;Check this and your META descriptions will get autogenerated if there's no excerpt.&quot;, 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_post_meta_tags_tip');&quot;&gt;
-&lt;?php _e('Additional Post Headers:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_post_meta_tags&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_post_meta_tags')); ?&gt;&lt;/textarea&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_post_meta_tags_tip&quot;&gt;
-&lt;?php
-_e('What you enter here will be copied verbatim to your header on post pages. You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_page_meta_tags_tip');&quot;&gt;
-&lt;?php _e('Additional Page Headers:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_page_meta_tags&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_page_meta_tags')); ?&gt;&lt;/textarea&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_page_meta_tags_tip&quot;&gt;
-&lt;?php
-_e('What you enter here will be copied verbatim to your header on pages. You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_home_meta_tags_tip');&quot;&gt;
-&lt;?php _e('Additional Home Headers:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_home_meta_tags&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_home_meta_tags')); ?&gt;&lt;/textarea&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_home_meta_tags_tip&quot;&gt;
-&lt;?php
-_e('What you enter here will be copied verbatim to your header on the home page. You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;tr&gt;
-&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
-&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'auto_social')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_do_log_tip');&quot;&gt;
-&lt;?php _e('Log important events:', 'all_in_one_seo_pack')?&gt;
-&lt;/a&gt;
-&lt;/td&gt;
-&lt;td&gt;
-&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_do_log&quot; &lt;?php if (get_option('aiosp_do_log')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
-&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_do_log_tip&quot;&gt;
-&lt;?php
-_e('Check this and SEO pack will create a log of important events (all_in_one_seo_pack.log) in its plugin directory which might help debugging it. Make sure this directory is writable.', 'all_in_one_seo_pack');
- ?&gt;
-&lt;/div&gt;
-&lt;/td&gt;
-&lt;/tr&gt;
-
-&lt;/table&gt;
-&lt;p class=&quot;submit&quot;&gt;
-&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;aiosp_update&quot; /&gt; 
-&lt;input type=&quot;hidden&quot; name=&quot;page_options&quot; value=&quot;aiosp_home_description&quot; /&gt; 
-&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;&lt;?php _e('Update Options', 'all_in_one_seo_pack')?&gt; &amp;raquo;&quot; /&gt; 
-&lt;/p&gt;
-&lt;p&gt;&lt;br /&gt;
-&lt;strong&gt;Check out these other great plugins!&lt;/strong&gt;&lt;br /&gt;
-&lt;a href=&quot;http://semperfiwebdesign.com/custom-applications/sms-text-message/&quot; title=&quot;SMS Text Message WordPress plugin&quot;&gt;SMS Text Message&lt;/a&gt; - sends SMS updates to your readers&lt;br /&gt;
-&lt;a href=&quot;http://semperfiwebdesign.com/custom-applications/wp-security-scan/&quot; title=&quot;WordPress Security&quot;&gt;WordPress Security Scan&lt;/a&gt; - provides vital security for your WordPress site
-&lt;/p&gt;
-&lt;/form&gt;
-&lt;/div&gt;
-&lt;?php
-	
-	} // options_panel
-
-}
-
-add_option(&quot;aiosp_home_description&quot;, null, 'All in One SEO Plugin Home Description', 'yes');
-add_option(&quot;aiosp_home_title&quot;, null, 'All in One SEO Plugin Home Title', 'yes');
-add_option(&quot;aiosp_rewrite_titles&quot;, 1, 'All in One SEO Plugin Rewrite Titles', 'yes');
-add_option(&quot;aiosp_use_categories&quot;, 0, 'All in One SEO Plugin Use Categories', 'yes');
-add_option(&quot;aiosp_category_noindex&quot;, 1, 'All in One SEO Plugin Noindex for Categories', 'yes');
-add_option(&quot;aiosp_archive_noindex&quot;, 1, 'All in One SEO Plugin Noindex for Archives', 'yes');
-add_option(&quot;aiosp_tags_noindex&quot;, 0, 'All in One SEO Plugin Noindex for Tag Archives', 'yes');
-add_option(&quot;aiosp_generate_descriptions&quot;, 1, 'All in One SEO Plugin Autogenerate Descriptions', 'yes');
-add_option(&quot;aiosp_post_title_format&quot;, '%post_title% | %blog_title%', 'All in One SEO Plugin Post Title Format', 'yes');
-add_option(&quot;aiosp_page_title_format&quot;, '%page_title% | %blog_title%', 'All in One SEO Plugin Page Title Format', 'yes');
-add_option(&quot;aiosp_category_title_format&quot;, '%category_title% | %blog_title%', 'All in One SEO Plugin Category Title Format', 'yes');
-add_option(&quot;aiosp_archive_title_format&quot;, '%date% | %blog_title%', 'All in One SEO Plugin Archive Title Format', 'yes');
-add_option(&quot;aiosp_tag_title_format&quot;, '%tag% | %blog_title%', 'All in One SEO Plugin Tag Title Format', 'yes');
-add_option(&quot;aiosp_search_title_format&quot;, '%search% | %blog_title%', 'All in One SEO Plugin Search Title Format', 'yes');
-add_option(&quot;aiosp_description_format&quot;, '%description%', 'All in One SEO Plugin Description Format', 'yes');
-add_option(&quot;aiosp_paged_format&quot;, ' - Part %page%', 'All in One SEO Plugin Paged Format', 'yes');
-add_option(&quot;aiosp_404_title_format&quot;, 'Nothing found for %request_words%', 'All in One SEO Plugin 404 Title Format', 'yes');
-add_option(&quot;aiosp_post_meta_tags&quot;, '', 'All in One SEO Plugin Additional Post Meta Tags', 'yes');
-add_option(&quot;aiosp_page_meta_tags&quot;, '', 'All in One SEO Plugin Additional Post Meta Tags', 'yes');
-add_option(&quot;aiosp_home_meta_tags&quot;, '', 'All in One SEO Plugin Additional Home Meta Tags', 'yes');
-add_option(&quot;aiosp_do_log&quot;, null, 'All in One SEO Plugin write log file', 'yes');
-
-$aiosp = new All_in_One_SEO_Pack();
-add_action('wp_head', array($aiosp, 'wp_head'));
-add_action('template_redirect', array($aiosp, 'template_redirect'));
-
-add_action('init', array($aiosp, 'init'));
-
-if (substr($aiosp-&gt;wp_version, 0, 3) &gt;= '2.5') {
-	add_action('edit_form_advanced', array($aiosp, 'add_meta_tags_textinput'));
-	add_action('edit_page_form', array($aiosp, 'add_meta_tags_textinput'));
-} else {
-	add_action('dbx_post_advanced', array($aiosp, 'add_meta_tags_textinput'));
-	add_action('dbx_page_advanced', array($aiosp, 'add_meta_tags_textinput'));
-}
-
-add_action('edit_post', array($aiosp, 'post_meta_tags'));
-add_action('publish_post', array($aiosp, 'post_meta_tags'));
-add_action('save_post', array($aiosp, 'post_meta_tags'));
-add_action('edit_page_form', array($aiosp, 'post_meta_tags'));
-
-add_action('admin_menu', array($aiosp, 'admin_menu'));
-?&gt;
+&lt;?php
+
+/*
+Plugin Name: All in One SEO Pack
+Plugin URI: http://semperfiwebdesign.com
+Description: Out-of-the-box SEO for your Wordpress blog. &lt;a href=&quot;options-general.php?page=all-in-one-seo-pack/all_in_one_seo_pack.php&quot;&gt;Options configuration panel&lt;/a&gt; | &lt;a href=&quot;https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=mrtorbert%40gmail%2ecom&amp;item_name=All%20In%20One%20SEO%20Pack&amp;item_number=Support%20Open%20Source&amp;no_shipping=0&amp;no_note=1&amp;tax=0&amp;currency_code=USD&amp;lc=US&amp;bn=PP%2dDonationsBF&amp;charset=UTF%2d8&quot;&gt;Donate&lt;/a&gt; | &lt;a href=&quot;http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/&quot; &gt;Support&lt;/a&gt; 
+Version: 1.4.7.4
+Author: Michael Torbert
+Author URI: http://semperfiwebdesign.com
+*/
+
+/*
+Copyright (C) 2008-2009 Michael Torbert, semperfiwebdesign.com (michael AT semperfiwebdesign DOT com)
+Original code by uberdose of uberdose.com
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
+*/
+
+/*******************************************************************************************************/
+
+$UTF8_TABLES['strtolower'] = array(
+	&quot;&#239;&#188;&#186;&quot; =&gt; &quot;&#239;&#189;&#353;&quot;,	&quot;&#239;&#188;&#185;&quot; =&gt; &quot;&#239;&#189;&#8482;&quot;,	&quot;&#239;&#188;&#184;&quot; =&gt; &quot;&#239;&#189;&#732;&quot;,
+	&quot;&#239;&#188;&#183;&quot; =&gt; &quot;&#239;&#189;&#8212;&quot;,	&quot;&#239;&#188;&#182;&quot; =&gt; &quot;&#239;&#189;&#8211;&quot;,	&quot;&#239;&#188;&#181;&quot; =&gt; &quot;&#239;&#189;&#8226;&quot;,
+	&quot;&#239;&#188;&#180;&quot; =&gt; &quot;&#239;&#189;&#8221;&quot;,	&quot;&#239;&#188;&#179;&quot; =&gt; &quot;&#239;&#189;&#8220;&quot;,	&quot;&#239;&#188;&#178;&quot; =&gt; &quot;&#239;&#189;&#8217;&quot;,
+	&quot;&#239;&#188;&#177;&quot; =&gt; &quot;&#239;&#189;&#8216;&quot;,	&quot;&#239;&#188;&#176;&quot; =&gt; &quot;&#239;&#189;*&quot;,	&quot;&#239;&#188;&#175;&quot; =&gt; &quot;&#239;&#189;*&quot;,
+	&quot;&#239;&#188;&#174;&quot; =&gt; &quot;&#239;&#189;&#381;&quot;,	&quot;&#239;&#188;&#173;&quot; =&gt; &quot;&#239;&#189;*&quot;,	&quot;&#239;&#188;&#172;&quot; =&gt; &quot;&#239;&#189;&#338;&quot;,
+	&quot;&#239;&#188;&#171;&quot; =&gt; &quot;&#239;&#189;&#8249;&quot;,	&quot;&#239;&#188;&#170;&quot; =&gt; &quot;&#239;&#189;&#352;&quot;,	&quot;&#239;&#188;&#169;&quot; =&gt; &quot;&#239;&#189;&#8240;&quot;,
+	&quot;&#239;&#188;&#168;&quot; =&gt; &quot;&#239;&#189;&#710;&quot;,	&quot;&#239;&#188;&#167;&quot; =&gt; &quot;&#239;&#189;&#8225;&quot;,	&quot;&#239;&#188;&#166;&quot; =&gt; &quot;&#239;&#189;&#8224;&quot;,
+	&quot;&#239;&#188;&#165;&quot; =&gt; &quot;&#239;&#189;&#8230;&quot;,	&quot;&#239;&#188;&#164;&quot; =&gt; &quot;&#239;&#189;&#8222;&quot;,	&quot;&#239;&#188;&#163;&quot; =&gt; &quot;&#239;&#189;&#402;&quot;,
+	&quot;&#239;&#188;&#162;&quot; =&gt; &quot;&#239;&#189;&#8218;&quot;,	&quot;&#239;&#188;&#161;&quot; =&gt; &quot;&#239;&#189;*&quot;,	&quot;&#226;&#8222;&#171;&quot; =&gt; &quot;&#195;&#165;&quot;,
+	&quot;&#226;&#8222;&#170;&quot; =&gt; &quot;k&quot;,	&quot;&#226;&#8222;&#166;&quot; =&gt; &quot;&#207;&#8240;&quot;,	&quot;&#225;&#191;&#187;&quot; =&gt; &quot;&#225;&#189;&#189;&quot;,
+	&quot;&#225;&#191;&#186;&quot; =&gt; &quot;&#225;&#189;&#188;&quot;,	&quot;&#225;&#191;&#185;&quot; =&gt; &quot;&#225;&#189;&#185;&quot;,	&quot;&#225;&#191;&#184;&quot; =&gt; &quot;&#225;&#189;&#184;&quot;,
+	&quot;&#225;&#191;&#172;&quot; =&gt; &quot;&#225;&#191;&#165;&quot;,	&quot;&#225;&#191;&#171;&quot; =&gt; &quot;&#225;&#189;&#187;&quot;,	&quot;&#225;&#191;&#170;&quot; =&gt; &quot;&#225;&#189;&#186;&quot;,
+	&quot;&#225;&#191;&#169;&quot; =&gt; &quot;&#225;&#191;&#161;&quot;,	&quot;&#225;&#191;&#168;&quot; =&gt; &quot;&#225;&#191; &quot;,	&quot;&#225;&#191;&#8250;&quot; =&gt; &quot;&#225;&#189;&#183;&quot;,
+	&quot;&#225;&#191;&#353;&quot; =&gt; &quot;&#225;&#189;&#182;&quot;,	&quot;&#225;&#191;&#8482;&quot; =&gt; &quot;&#225;&#191;&#8216;&quot;,	&quot;&#225;&#191;&#732;&quot; =&gt; &quot;&#225;&#191;*&quot;,
+	&quot;&#225;&#191;&#8249;&quot; =&gt; &quot;&#225;&#189;&#181;&quot;,	&quot;&#225;&#191;&#352;&quot; =&gt; &quot;&#225;&#189;&#180;&quot;,	&quot;&#225;&#191;&#8240;&quot; =&gt; &quot;&#225;&#189;&#179;&quot;,
+	&quot;&#225;&#191;&#710;&quot; =&gt; &quot;&#225;&#189;&#178;&quot;,	&quot;&#225;&#190;&#187;&quot; =&gt; &quot;&#225;&#189;&#177;&quot;,	&quot;&#225;&#190;&#186;&quot; =&gt; &quot;&#225;&#189;&#176;&quot;,
+	&quot;&#225;&#190;&#185;&quot; =&gt; &quot;&#225;&#190;&#177;&quot;,	&quot;&#225;&#190;&#184;&quot; =&gt; &quot;&#225;&#190;&#176;&quot;,	&quot;&#225;&#189;&#175;&quot; =&gt; &quot;&#225;&#189;&#167;&quot;,
+	&quot;&#225;&#189;&#174;&quot; =&gt; &quot;&#225;&#189;&#166;&quot;,	&quot;&#225;&#189;&#173;&quot; =&gt; &quot;&#225;&#189;&#165;&quot;,	&quot;&#225;&#189;&#172;&quot; =&gt; &quot;&#225;&#189;&#164;&quot;,
+	&quot;&#225;&#189;&#171;&quot; =&gt; &quot;&#225;&#189;&#163;&quot;,	&quot;&#225;&#189;&#170;&quot; =&gt; &quot;&#225;&#189;&#162;&quot;,	&quot;&#225;&#189;&#169;&quot; =&gt; &quot;&#225;&#189;&#161;&quot;,
+	&quot;&#225;&#189;&#168;&quot; =&gt; &quot;&#225;&#189; &quot;,	&quot;&#225;&#189;&#376;&quot; =&gt; &quot;&#225;&#189;&#8212;&quot;,	&quot;&#225;&#189;*&quot; =&gt; &quot;&#225;&#189;&#8226;&quot;,
+	&quot;&#225;&#189;&#8250;&quot; =&gt; &quot;&#225;&#189;&#8220;&quot;,	&quot;&#225;&#189;&#8482;&quot; =&gt; &quot;&#225;&#189;&#8216;&quot;,	&quot;&#225;&#189;*&quot; =&gt; &quot;&#225;&#189;&#8230;&quot;,
+	&quot;&#225;&#189;&#338;&quot; =&gt; &quot;&#225;&#189;&#8222;&quot;,	&quot;&#225;&#189;&#8249;&quot; =&gt; &quot;&#225;&#189;&#402;&quot;,	&quot;&#225;&#189;&#352;&quot; =&gt; &quot;&#225;&#189;&#8218;&quot;,
+	&quot;&#225;&#189;&#8240;&quot; =&gt; &quot;&#225;&#189;*&quot;,	&quot;&#225;&#189;&#710;&quot; =&gt; &quot;&#225;&#189;&#8364;&quot;,	&quot;&#225;&#188;&#191;&quot; =&gt; &quot;&#225;&#188;&#183;&quot;,
+	&quot;&#225;&#188;&#190;&quot; =&gt; &quot;&#225;&#188;&#182;&quot;,	&quot;&#225;&#188;&#189;&quot; =&gt; &quot;&#225;&#188;&#181;&quot;,	&quot;&#225;&#188;&#188;&quot; =&gt; &quot;&#225;&#188;&#180;&quot;,
+	&quot;&#225;&#188;&#187;&quot; =&gt; &quot;&#225;&#188;&#179;&quot;,	&quot;&#225;&#188;&#186;&quot; =&gt; &quot;&#225;&#188;&#178;&quot;,	&quot;&#225;&#188;&#185;&quot; =&gt; &quot;&#225;&#188;&#177;&quot;,
+	&quot;&#225;&#188;&#184;&quot; =&gt; &quot;&#225;&#188;&#176;&quot;,	&quot;&#225;&#188;&#175;&quot; =&gt; &quot;&#225;&#188;&#167;&quot;,	&quot;&#225;&#188;&#174;&quot; =&gt; &quot;&#225;&#188;&#166;&quot;,
+	&quot;&#225;&#188;&#173;&quot; =&gt; &quot;&#225;&#188;&#165;&quot;,	&quot;&#225;&#188;&#172;&quot; =&gt; &quot;&#225;&#188;&#164;&quot;,	&quot;&#225;&#188;&#171;&quot; =&gt; &quot;&#225;&#188;&#163;&quot;,
+	&quot;&#225;&#188;&#170;&quot; =&gt; &quot;&#225;&#188;&#162;&quot;,	&quot;&#225;&#188;&#169;&quot; =&gt; &quot;&#225;&#188;&#161;&quot;,	&quot;&#225;&#188;&#168;&quot; =&gt; &quot;&#225;&#188; &quot;,
+	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#8226;&quot;,	&quot;&#225;&#188;&#339;&quot; =&gt; &quot;&#225;&#188;&#8221;&quot;,	&quot;&#225;&#188;&#8250;&quot; =&gt; &quot;&#225;&#188;&#8220;&quot;,
+	&quot;&#225;&#188;&#353;&quot; =&gt; &quot;&#225;&#188;&#8217;&quot;,	&quot;&#225;&#188;&#8482;&quot; =&gt; &quot;&#225;&#188;&#8216;&quot;,	&quot;&#225;&#188;&#732;&quot; =&gt; &quot;&#225;&#188;*&quot;,
+	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#8225;&quot;,	&quot;&#225;&#188;&#381;&quot; =&gt; &quot;&#225;&#188;&#8224;&quot;,	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#8230;&quot;,
+	&quot;&#225;&#188;&#338;&quot; =&gt; &quot;&#225;&#188;&#8222;&quot;,	&quot;&#225;&#188;&#8249;&quot; =&gt; &quot;&#225;&#188;&#402;&quot;,	&quot;&#225;&#188;&#352;&quot; =&gt; &quot;&#225;&#188;&#8218;&quot;,
+	&quot;&#225;&#188;&#8240;&quot; =&gt; &quot;&#225;&#188;*&quot;,	&quot;&#225;&#188;&#710;&quot; =&gt; &quot;&#225;&#188;&#8364;&quot;,	&quot;&#225;&#187;&#184;&quot; =&gt; &quot;&#225;&#187;&#185;&quot;,
+	&quot;&#225;&#187;&#182;&quot; =&gt; &quot;&#225;&#187;&#183;&quot;,	&quot;&#225;&#187;&#180;&quot; =&gt; &quot;&#225;&#187;&#181;&quot;,	&quot;&#225;&#187;&#178;&quot; =&gt; &quot;&#225;&#187;&#179;&quot;,
+	&quot;&#225;&#187;&#176;&quot; =&gt; &quot;&#225;&#187;&#177;&quot;,	&quot;&#225;&#187;&#174;&quot; =&gt; &quot;&#225;&#187;&#175;&quot;,	&quot;&#225;&#187;&#172;&quot; =&gt; &quot;&#225;&#187;&#173;&quot;,
+	&quot;&#225;&#187;&#170;&quot; =&gt; &quot;&#225;&#187;&#171;&quot;,	&quot;&#225;&#187;&#168;&quot; =&gt; &quot;&#225;&#187;&#169;&quot;,	&quot;&#225;&#187;&#166;&quot; =&gt; &quot;&#225;&#187;&#167;&quot;,
+	&quot;&#225;&#187;&#164;&quot; =&gt; &quot;&#225;&#187;&#165;&quot;,	&quot;&#225;&#187;&#162;&quot; =&gt; &quot;&#225;&#187;&#163;&quot;,	&quot;&#225;&#187; &quot; =&gt; &quot;&#225;&#187;&#161;&quot;,
+	&quot;&#225;&#187;&#382;&quot; =&gt; &quot;&#225;&#187;&#376;&quot;,	&quot;&#225;&#187;&#339;&quot; =&gt; &quot;&#225;&#187;*&quot;,	&quot;&#225;&#187;&#353;&quot; =&gt; &quot;&#225;&#187;&#8250;&quot;,
+	&quot;&#225;&#187;&#732;&quot; =&gt; &quot;&#225;&#187;&#8482;&quot;,	&quot;&#225;&#187;&#8211;&quot; =&gt; &quot;&#225;&#187;&#8212;&quot;,	&quot;&#225;&#187;&#8221;&quot; =&gt; &quot;&#225;&#187;&#8226;&quot;,
+	&quot;&#225;&#187;&#8217;&quot; =&gt; &quot;&#225;&#187;&#8220;&quot;,	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#8216;&quot;,	&quot;&#225;&#187;&#381;&quot; =&gt; &quot;&#225;&#187;*&quot;,
+	&quot;&#225;&#187;&#338;&quot; =&gt; &quot;&#225;&#187;*&quot;,	&quot;&#225;&#187;&#352;&quot; =&gt; &quot;&#225;&#187;&#8249;&quot;,	&quot;&#225;&#187;&#710;&quot; =&gt; &quot;&#225;&#187;&#8240;&quot;,
+	&quot;&#225;&#187;&#8224;&quot; =&gt; &quot;&#225;&#187;&#8225;&quot;,	&quot;&#225;&#187;&#8222;&quot; =&gt; &quot;&#225;&#187;&#8230;&quot;,	&quot;&#225;&#187;&#8218;&quot; =&gt; &quot;&#225;&#187;&#402;&quot;,
+	&quot;&#225;&#187;&#8364;&quot; =&gt; &quot;&#225;&#187;*&quot;,	&quot;&#225;&#186;&#190;&quot; =&gt; &quot;&#225;&#186;&#191;&quot;,	&quot;&#225;&#186;&#188;&quot; =&gt; &quot;&#225;&#186;&#189;&quot;,
+	&quot;&#225;&#186;&#186;&quot; =&gt; &quot;&#225;&#186;&#187;&quot;,	&quot;&#225;&#186;&#184;&quot; =&gt; &quot;&#225;&#186;&#185;&quot;,	&quot;&#225;&#186;&#182;&quot; =&gt; &quot;&#225;&#186;&#183;&quot;,
+	&quot;&#225;&#186;&#180;&quot; =&gt; &quot;&#225;&#186;&#181;&quot;,	&quot;&#225;&#186;&#178;&quot; =&gt; &quot;&#225;&#186;&#179;&quot;,	&quot;&#225;&#186;&#176;&quot; =&gt; &quot;&#225;&#186;&#177;&quot;,
+	&quot;&#225;&#186;&#174;&quot; =&gt; &quot;&#225;&#186;&#175;&quot;,	&quot;&#225;&#186;&#172;&quot; =&gt; &quot;&#225;&#186;&#173;&quot;,	&quot;&#225;&#186;&#170;&quot; =&gt; &quot;&#225;&#186;&#171;&quot;,
+	&quot;&#225;&#186;&#168;&quot; =&gt; &quot;&#225;&#186;&#169;&quot;,	&quot;&#225;&#186;&#166;&quot; =&gt; &quot;&#225;&#186;&#167;&quot;,	&quot;&#225;&#186;&#164;&quot; =&gt; &quot;&#225;&#186;&#165;&quot;,
+	&quot;&#225;&#186;&#162;&quot; =&gt; &quot;&#225;&#186;&#163;&quot;,	&quot;&#225;&#186; &quot; =&gt; &quot;&#225;&#186;&#161;&quot;,	&quot;&#225;&#186;&#8221;&quot; =&gt; &quot;&#225;&#186;&#8226;&quot;,
+	&quot;&#225;&#186;&#8217;&quot; =&gt; &quot;&#225;&#186;&#8220;&quot;,	&quot;&#225;&#186;*&quot; =&gt; &quot;&#225;&#186;&#8216;&quot;,	&quot;&#225;&#186;&#381;&quot; =&gt; &quot;&#225;&#186;*&quot;,
+	&quot;&#225;&#186;&#338;&quot; =&gt; &quot;&#225;&#186;*&quot;,	&quot;&#225;&#186;&#352;&quot; =&gt; &quot;&#225;&#186;&#8249;&quot;,	&quot;&#225;&#186;&#710;&quot; =&gt; &quot;&#225;&#186;&#8240;&quot;,
+	&quot;&#225;&#186;&#8224;&quot; =&gt; &quot;&#225;&#186;&#8225;&quot;,	&quot;&#225;&#186;&#8222;&quot; =&gt; &quot;&#225;&#186;&#8230;&quot;,	&quot;&#225;&#186;&#8218;&quot; =&gt; &quot;&#225;&#186;&#402;&quot;,
+	&quot;&#225;&#186;&#8364;&quot; =&gt; &quot;&#225;&#186;*&quot;,	&quot;&#225;&#185;&#190;&quot; =&gt; &quot;&#225;&#185;&#191;&quot;,	&quot;&#225;&#185;&#188;&quot; =&gt; &quot;&#225;&#185;&#189;&quot;,
+	&quot;&#225;&#185;&#186;&quot; =&gt; &quot;&#225;&#185;&#187;&quot;,	&quot;&#225;&#185;&#184;&quot; =&gt; &quot;&#225;&#185;&#185;&quot;,	&quot;&#225;&#185;&#182;&quot; =&gt; &quot;&#225;&#185;&#183;&quot;,
+	&quot;&#225;&#185;&#180;&quot; =&gt; &quot;&#225;&#185;&#181;&quot;,	&quot;&#225;&#185;&#178;&quot; =&gt; &quot;&#225;&#185;&#179;&quot;,	&quot;&#225;&#185;&#176;&quot; =&gt; &quot;&#225;&#185;&#177;&quot;,
+	&quot;&#225;&#185;&#174;&quot; =&gt; &quot;&#225;&#185;&#175;&quot;,	&quot;&#225;&#185;&#172;&quot; =&gt; &quot;&#225;&#185;&#173;&quot;,	&quot;&#225;&#185;&#170;&quot; =&gt; &quot;&#225;&#185;&#171;&quot;,
+	&quot;&#225;&#185;&#168;&quot; =&gt; &quot;&#225;&#185;&#169;&quot;,	&quot;&#225;&#185;&#166;&quot; =&gt; &quot;&#225;&#185;&#167;&quot;,	&quot;&#225;&#185;&#164;&quot; =&gt; &quot;&#225;&#185;&#165;&quot;,
+	&quot;&#225;&#185;&#162;&quot; =&gt; &quot;&#225;&#185;&#163;&quot;,	&quot;&#225;&#185; &quot; =&gt; &quot;&#225;&#185;&#161;&quot;,	&quot;&#225;&#185;&#382;&quot; =&gt; &quot;&#225;&#185;&#376;&quot;,
+	&quot;&#225;&#185;&#339;&quot; =&gt; &quot;&#225;&#185;*&quot;,	&quot;&#225;&#185;&#353;&quot; =&gt; &quot;&#225;&#185;&#8250;&quot;,	&quot;&#225;&#185;&#732;&quot; =&gt; &quot;&#225;&#185;&#8482;&quot;,
+	&quot;&#225;&#185;&#8211;&quot; =&gt; &quot;&#225;&#185;&#8212;&quot;,	&quot;&#225;&#185;&#8221;&quot; =&gt; &quot;&#225;&#185;&#8226;&quot;,	&quot;&#225;&#185;&#8217;&quot; =&gt; &quot;&#225;&#185;&#8220;&quot;,
+	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#8216;&quot;,	&quot;&#225;&#185;&#381;&quot; =&gt; &quot;&#225;&#185;*&quot;,	&quot;&#225;&#185;&#338;&quot; =&gt; &quot;&#225;&#185;*&quot;,
+	&quot;&#225;&#185;&#352;&quot; =&gt; &quot;&#225;&#185;&#8249;&quot;,	&quot;&#225;&#185;&#710;&quot; =&gt; &quot;&#225;&#185;&#8240;&quot;,	&quot;&#225;&#185;&#8224;&quot; =&gt; &quot;&#225;&#185;&#8225;&quot;,
+	&quot;&#225;&#185;&#8222;&quot; =&gt; &quot;&#225;&#185;&#8230;&quot;,	&quot;&#225;&#185;&#8218;&quot; =&gt; &quot;&#225;&#185;&#402;&quot;,	&quot;&#225;&#185;&#8364;&quot; =&gt; &quot;&#225;&#185;*&quot;,
+	&quot;&#225;&#184;&#190;&quot; =&gt; &quot;&#225;&#184;&#191;&quot;,	&quot;&#225;&#184;&#188;&quot; =&gt; &quot;&#225;&#184;&#189;&quot;,	&quot;&#225;&#184;&#186;&quot; =&gt; &quot;&#225;&#184;&#187;&quot;,
+	&quot;&#225;&#184;&#184;&quot; =&gt; &quot;&#225;&#184;&#185;&quot;,	&quot;&#225;&#184;&#182;&quot; =&gt; &quot;&#225;&#184;&#183;&quot;,	&quot;&#225;&#184;&#180;&quot; =&gt; &quot;&#225;&#184;&#181;&quot;,
+	&quot;&#225;&#184;&#178;&quot; =&gt; &quot;&#225;&#184;&#179;&quot;,	&quot;&#225;&#184;&#176;&quot; =&gt; &quot;&#225;&#184;&#177;&quot;,	&quot;&#225;&#184;&#174;&quot; =&gt; &quot;&#225;&#184;&#175;&quot;,
+	&quot;&#225;&#184;&#172;&quot; =&gt; &quot;&#225;&#184;&#173;&quot;,	&quot;&#225;&#184;&#170;&quot; =&gt; &quot;&#225;&#184;&#171;&quot;,	&quot;&#225;&#184;&#168;&quot; =&gt; &quot;&#225;&#184;&#169;&quot;,
+	&quot;&#225;&#184;&#166;&quot; =&gt; &quot;&#225;&#184;&#167;&quot;,	&quot;&#225;&#184;&#164;&quot; =&gt; &quot;&#225;&#184;&#165;&quot;,	&quot;&#225;&#184;&#162;&quot; =&gt; &quot;&#225;&#184;&#163;&quot;,
+	&quot;&#225;&#184; &quot; =&gt; &quot;&#225;&#184;&#161;&quot;,	&quot;&#225;&#184;&#382;&quot; =&gt; &quot;&#225;&#184;&#376;&quot;,	&quot;&#225;&#184;&#339;&quot; =&gt; &quot;&#225;&#184;*&quot;,
+	&quot;&#225;&#184;&#353;&quot; =&gt; &quot;&#225;&#184;&#8250;&quot;,	&quot;&#225;&#184;&#732;&quot; =&gt; &quot;&#225;&#184;&#8482;&quot;,	&quot;&#225;&#184;&#8211;&quot; =&gt; &quot;&#225;&#184;&#8212;&quot;,
+	&quot;&#225;&#184;&#8221;&quot; =&gt; &quot;&#225;&#184;&#8226;&quot;,	&quot;&#225;&#184;&#8217;&quot; =&gt; &quot;&#225;&#184;&#8220;&quot;,	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#8216;&quot;,
+	&quot;&#225;&#184;&#381;&quot; =&gt; &quot;&#225;&#184;*&quot;,	&quot;&#225;&#184;&#338;&quot; =&gt; &quot;&#225;&#184;*&quot;,	&quot;&#225;&#184;&#352;&quot; =&gt; &quot;&#225;&#184;&#8249;&quot;,
+	&quot;&#225;&#184;&#710;&quot; =&gt; &quot;&#225;&#184;&#8240;&quot;,	&quot;&#225;&#184;&#8224;&quot; =&gt; &quot;&#225;&#184;&#8225;&quot;,	&quot;&#225;&#184;&#8222;&quot; =&gt; &quot;&#225;&#184;&#8230;&quot;,
+	&quot;&#225;&#184;&#8218;&quot; =&gt; &quot;&#225;&#184;&#402;&quot;,	&quot;&#225;&#184;&#8364;&quot; =&gt; &quot;&#225;&#184;*&quot;,	&quot;&#213;&#8211;&quot; =&gt; &quot;&#214;&#8224;&quot;,
+	&quot;&#213;&#8226;&quot; =&gt; &quot;&#214;&#8230;&quot;,	&quot;&#213;&#8221;&quot; =&gt; &quot;&#214;&#8222;&quot;,	&quot;&#213;&#8220;&quot; =&gt; &quot;&#214;&#402;&quot;,
+	&quot;&#213;&#8217;&quot; =&gt; &quot;&#214;&#8218;&quot;,	&quot;&#213;&#8216;&quot; =&gt; &quot;&#214;*&quot;,	&quot;&#213;*&quot; =&gt; &quot;&#214;&#8364;&quot;,
+	&quot;&#213;*&quot; =&gt; &quot;&#213;&#191;&quot;,	&quot;&#213;&#381;&quot; =&gt; &quot;&#213;&#190;&quot;,	&quot;&#213;*&quot; =&gt; &quot;&#213;&#189;&quot;,
+	&quot;&#213;&#338;&quot; =&gt; &quot;&#213;&#188;&quot;,	&quot;&#213;&#8249;&quot; =&gt; &quot;&#213;&#187;&quot;,	&quot;&#213;&#352;&quot; =&gt; &quot;&#213;&#186;&quot;,
+	&quot;&#213;&#8240;&quot; =&gt; &quot;&#213;&#185;&quot;,	&quot;&#213;&#710;&quot; =&gt; &quot;&#213;&#184;&quot;,	&quot;&#213;&#8225;&quot; =&gt; &quot;&#213;&#183;&quot;,
+	&quot;&#213;&#8224;&quot; =&gt; &quot;&#213;&#182;&quot;,	&quot;&#213;&#8230;&quot; =&gt; &quot;&#213;&#181;&quot;,	&quot;&#213;&#8222;&quot; =&gt; &quot;&#213;&#180;&quot;,
+	&quot;&#213;&#402;&quot; =&gt; &quot;&#213;&#179;&quot;,	&quot;&#213;&#8218;&quot; =&gt; &quot;&#213;&#178;&quot;,	&quot;&#213;*&quot; =&gt; &quot;&#213;&#177;&quot;,
+	&quot;&#213;&#8364;&quot; =&gt; &quot;&#213;&#176;&quot;,	&quot;&#212;&#191;&quot; =&gt; &quot;&#213;&#175;&quot;,	&quot;&#212;&#190;&quot; =&gt; &quot;&#213;&#174;&quot;,
+	&quot;&#212;&#189;&quot; =&gt; &quot;&#213;&#173;&quot;,	&quot;&#212;&#188;&quot; =&gt; &quot;&#213;&#172;&quot;,	&quot;&#212;&#187;&quot; =&gt; &quot;&#213;&#171;&quot;,
+	&quot;&#212;&#186;&quot; =&gt; &quot;&#213;&#170;&quot;,	&quot;&#212;&#185;&quot; =&gt; &quot;&#213;&#169;&quot;,	&quot;&#212;&#184;&quot; =&gt; &quot;&#213;&#168;&quot;,
+	&quot;&#212;&#183;&quot; =&gt; &quot;&#213;&#167;&quot;,	&quot;&#212;&#182;&quot; =&gt; &quot;&#213;&#166;&quot;,	&quot;&#212;&#181;&quot; =&gt; &quot;&#213;&#165;&quot;,
+	&quot;&#212;&#180;&quot; =&gt; &quot;&#213;&#164;&quot;,	&quot;&#212;&#179;&quot; =&gt; &quot;&#213;&#163;&quot;,	&quot;&#212;&#178;&quot; =&gt; &quot;&#213;&#162;&quot;,
+	&quot;&#212;&#177;&quot; =&gt; &quot;&#213;&#161;&quot;,	&quot;&#212;&#381;&quot; =&gt; &quot;&#212;*&quot;,	&quot;&#212;&#338;&quot; =&gt; &quot;&#212;*&quot;,
+	&quot;&#212;&#352;&quot; =&gt; &quot;&#212;&#8249;&quot;,	&quot;&#212;&#710;&quot; =&gt; &quot;&#212;&#8240;&quot;,	&quot;&#212;&#8224;&quot; =&gt; &quot;&#212;&#8225;&quot;,
+	&quot;&#212;&#8222;&quot; =&gt; &quot;&#212;&#8230;&quot;,	&quot;&#212;&#8218;&quot; =&gt; &quot;&#212;&#402;&quot;,	&quot;&#212;&#8364;&quot; =&gt; &quot;&#212;*&quot;,
+	&quot;&#211;&#184;&quot; =&gt; &quot;&#211;&#185;&quot;,	&quot;&#211;&#180;&quot; =&gt; &quot;&#211;&#181;&quot;,	&quot;&#211;&#178;&quot; =&gt; &quot;&#211;&#179;&quot;,
+	&quot;&#211;&#176;&quot; =&gt; &quot;&#211;&#177;&quot;,	&quot;&#211;&#174;&quot; =&gt; &quot;&#211;&#175;&quot;,	&quot;&#211;&#172;&quot; =&gt; &quot;&#211;&#173;&quot;,
+	&quot;&#211;&#170;&quot; =&gt; &quot;&#211;&#171;&quot;,	&quot;&#211;&#168;&quot; =&gt; &quot;&#211;&#169;&quot;,	&quot;&#211;&#166;&quot; =&gt; &quot;&#211;&#167;&quot;,
+	&quot;&#211;&#164;&quot; =&gt; &quot;&#211;&#165;&quot;,	&quot;&#211;&#162;&quot; =&gt; &quot;&#211;&#163;&quot;,	&quot;&#211; &quot; =&gt; &quot;&#211;&#161;&quot;,
+	&quot;&#211;&#382;&quot; =&gt; &quot;&#211;&#376;&quot;,	&quot;&#211;&#339;&quot; =&gt; &quot;&#211;*&quot;,	&quot;&#211;&#353;&quot; =&gt; &quot;&#211;&#8250;&quot;,
+	&quot;&#211;&#732;&quot; =&gt; &quot;&#211;&#8482;&quot;,	&quot;&#211;&#8211;&quot; =&gt; &quot;&#211;&#8212;&quot;,	&quot;&#211;&#8221;&quot; =&gt; &quot;&#211;&#8226;&quot;,
+	&quot;&#211;&#8217;&quot; =&gt; &quot;&#211;&#8220;&quot;,	&quot;&#211;*&quot; =&gt; &quot;&#211;&#8216;&quot;,	&quot;&#211;*&quot; =&gt; &quot;&#211;&#381;&quot;,
+	&quot;&#211;&#8249;&quot; =&gt; &quot;&#211;&#338;&quot;,	&quot;&#211;&#8240;&quot; =&gt; &quot;&#211;&#352;&quot;,	&quot;&#211;&#8225;&quot; =&gt; &quot;&#211;&#710;&quot;,
+	&quot;&#211;&#8230;&quot; =&gt; &quot;&#211;&#8224;&quot;,	&quot;&#211;&#402;&quot; =&gt; &quot;&#211;&#8222;&quot;,	&quot;&#211;*&quot; =&gt; &quot;&#211;&#8218;&quot;,
+	&quot;&#210;&#190;&quot; =&gt; &quot;&#210;&#191;&quot;,	&quot;&#210;&#188;&quot; =&gt; &quot;&#210;&#189;&quot;,	&quot;&#210;&#186;&quot; =&gt; &quot;&#210;&#187;&quot;,
+	&quot;&#210;&#184;&quot; =&gt; &quot;&#210;&#185;&quot;,	&quot;&#210;&#182;&quot; =&gt; &quot;&#210;&#183;&quot;,	&quot;&#210;&#180;&quot; =&gt; &quot;&#210;&#181;&quot;,
+	&quot;&#210;&#178;&quot; =&gt; &quot;&#210;&#179;&quot;,	&quot;&#210;&#176;&quot; =&gt; &quot;&#210;&#177;&quot;,	&quot;&#210;&#174;&quot; =&gt; &quot;&#210;&#175;&quot;,
+	&quot;&#210;&#172;&quot; =&gt; &quot;&#210;&#173;&quot;,	&quot;&#210;&#170;&quot; =&gt; &quot;&#210;&#171;&quot;,	&quot;&#210;&#168;&quot; =&gt; &quot;&#210;&#169;&quot;,
+	&quot;&#210;&#166;&quot; =&gt; &quot;&#210;&#167;&quot;,	&quot;&#210;&#164;&quot; =&gt; &quot;&#210;&#165;&quot;,	&quot;&#210;&#162;&quot; =&gt; &quot;&#210;&#163;&quot;,
+	&quot;&#210; &quot; =&gt; &quot;&#210;&#161;&quot;,	&quot;&#210;&#382;&quot; =&gt; &quot;&#210;&#376;&quot;,	&quot;&#210;&#339;&quot; =&gt; &quot;&#210;*&quot;,
+	&quot;&#210;&#353;&quot; =&gt; &quot;&#210;&#8250;&quot;,	&quot;&#210;&#732;&quot; =&gt; &quot;&#210;&#8482;&quot;,	&quot;&#210;&#8211;&quot; =&gt; &quot;&#210;&#8212;&quot;,
+	&quot;&#210;&#8221;&quot; =&gt; &quot;&#210;&#8226;&quot;,	&quot;&#210;&#8217;&quot; =&gt; &quot;&#210;&#8220;&quot;,	&quot;&#210;*&quot; =&gt; &quot;&#210;&#8216;&quot;,
+	&quot;&#210;&#381;&quot; =&gt; &quot;&#210;*&quot;,	&quot;&#210;&#338;&quot; =&gt; &quot;&#210;*&quot;,	&quot;&#210;&#352;&quot; =&gt; &quot;&#210;&#8249;&quot;,
+	&quot;&#210;&#8364;&quot; =&gt; &quot;&#210;*&quot;,	&quot;&#209;&#190;&quot; =&gt; &quot;&#209;&#191;&quot;,	&quot;&#209;&#188;&quot; =&gt; &quot;&#209;&#189;&quot;,
+	&quot;&#209;&#186;&quot; =&gt; &quot;&#209;&#187;&quot;,	&quot;&#209;&#184;&quot; =&gt; &quot;&#209;&#185;&quot;,	&quot;&#209;&#182;&quot; =&gt; &quot;&#209;&#183;&quot;,
+	&quot;&#209;&#180;&quot; =&gt; &quot;&#209;&#181;&quot;,	&quot;&#209;&#178;&quot; =&gt; &quot;&#209;&#179;&quot;,	&quot;&#209;&#176;&quot; =&gt; &quot;&#209;&#177;&quot;,
+	&quot;&#209;&#174;&quot; =&gt; &quot;&#209;&#175;&quot;,	&quot;&#209;&#172;&quot; =&gt; &quot;&#209;&#173;&quot;,	&quot;&#209;&#170;&quot; =&gt; &quot;&#209;&#171;&quot;,
+	&quot;&#209;&#168;&quot; =&gt; &quot;&#209;&#169;&quot;,	&quot;&#209;&#166;&quot; =&gt; &quot;&#209;&#167;&quot;,	&quot;&#209;&#164;&quot; =&gt; &quot;&#209;&#165;&quot;,
+	&quot;&#209;&#162;&quot; =&gt; &quot;&#209;&#163;&quot;,	&quot;&#209; &quot; =&gt; &quot;&#209;&#161;&quot;,	&quot;&#208;&#175;&quot; =&gt; &quot;&#209;*&quot;,
+	&quot;&#208;&#174;&quot; =&gt; &quot;&#209;&#381;&quot;,	&quot;&#208;&#173;&quot; =&gt; &quot;&#209;*&quot;,	&quot;&#208;&#172;&quot; =&gt; &quot;&#209;&#338;&quot;,
+	&quot;&#208;&#171;&quot; =&gt; &quot;&#209;&#8249;&quot;,	&quot;&#208;&#170;&quot; =&gt; &quot;&#209;&#352;&quot;,	&quot;&#208;&#169;&quot; =&gt; &quot;&#209;&#8240;&quot;,
+	&quot;&#208;&#168;&quot; =&gt; &quot;&#209;&#710;&quot;,	&quot;&#208;&#167;&quot; =&gt; &quot;&#209;&#8225;&quot;,	&quot;&#208;&#166;&quot; =&gt; &quot;&#209;&#8224;&quot;,
+	&quot;&#208;&#165;&quot; =&gt; &quot;&#209;&#8230;&quot;,	&quot;&#208;&#164;&quot; =&gt; &quot;&#209;&#8222;&quot;,	&quot;&#208;&#163;&quot; =&gt; &quot;&#209;&#402;&quot;,
+	&quot;&#208;&#162;&quot; =&gt; &quot;&#209;&#8218;&quot;,	&quot;&#208;&#161;&quot; =&gt; &quot;&#209;*&quot;,	&quot;&#208; &quot; =&gt; &quot;&#209;&#8364;&quot;,
+	&quot;&#208;&#376;&quot; =&gt; &quot;&#208;&#191;&quot;,	&quot;&#208;&#382;&quot; =&gt; &quot;&#208;&#190;&quot;,	&quot;&#208;*&quot; =&gt; &quot;&#208;&#189;&quot;,
+	&quot;&#208;&#339;&quot; =&gt; &quot;&#208;&#188;&quot;,	&quot;&#208;&#8250;&quot; =&gt; &quot;&#208;&#187;&quot;,	&quot;&#208;&#353;&quot; =&gt; &quot;&#208;&#186;&quot;,
+	&quot;&#208;&#8482;&quot; =&gt; &quot;&#208;&#185;&quot;,	&quot;&#208;&#732;&quot; =&gt; &quot;&#208;&#184;&quot;,	&quot;&#208;&#8212;&quot; =&gt; &quot;&#208;&#183;&quot;,
+	&quot;&#208;&#8211;&quot; =&gt; &quot;&#208;&#182;&quot;,	&quot;&#208;&#8226;&quot; =&gt; &quot;&#208;&#181;&quot;,	&quot;&#208;&#8221;&quot; =&gt; &quot;&#208;&#180;&quot;,
+	&quot;&#208;&#8220;&quot; =&gt; &quot;&#208;&#179;&quot;,	&quot;&#208;&#8217;&quot; =&gt; &quot;&#208;&#178;&quot;,	&quot;&#208;&#8216;&quot; =&gt; &quot;&#208;&#177;&quot;,
+	&quot;&#208;*&quot; =&gt; &quot;&#208;&#176;&quot;,	&quot;&#208;*&quot; =&gt; &quot;&#209;&#376;&quot;,	&quot;&#208;&#381;&quot; =&gt; &quot;&#209;&#382;&quot;,
+	&quot;&#208;*&quot; =&gt; &quot;&#209;*&quot;,	&quot;&#208;&#338;&quot; =&gt; &quot;&#209;&#339;&quot;,	&quot;&#208;&#8249;&quot; =&gt; &quot;&#209;&#8250;&quot;,
+	&quot;&#208;&#352;&quot; =&gt; &quot;&#209;&#353;&quot;,	&quot;&#208;&#8240;&quot; =&gt; &quot;&#209;&#8482;&quot;,	&quot;&#208;&#710;&quot; =&gt; &quot;&#209;&#732;&quot;,
+	&quot;&#208;&#8225;&quot; =&gt; &quot;&#209;&#8212;&quot;,	&quot;&#208;&#8224;&quot; =&gt; &quot;&#209;&#8211;&quot;,	&quot;&#208;&#8230;&quot; =&gt; &quot;&#209;&#8226;&quot;,
+	&quot;&#208;&#8222;&quot; =&gt; &quot;&#209;&#8221;&quot;,	&quot;&#208;&#402;&quot; =&gt; &quot;&#209;&#8220;&quot;,	&quot;&#208;&#8218;&quot; =&gt; &quot;&#209;&#8217;&quot;,
+	&quot;&#208;*&quot; =&gt; &quot;&#209;&#8216;&quot;,	&quot;&#208;&#8364;&quot; =&gt; &quot;&#209;*&quot;,	&quot;&#207;&#180;&quot; =&gt; &quot;&#206;&#184;&quot;,
+	&quot;&#207;&#174;&quot; =&gt; &quot;&#207;&#175;&quot;,	&quot;&#207;&#172;&quot; =&gt; &quot;&#207;&#173;&quot;,	&quot;&#207;&#170;&quot; =&gt; &quot;&#207;&#171;&quot;,
+	&quot;&#207;&#168;&quot; =&gt; &quot;&#207;&#169;&quot;,	&quot;&#207;&#166;&quot; =&gt; &quot;&#207;&#167;&quot;,	&quot;&#207;&#164;&quot; =&gt; &quot;&#207;&#165;&quot;,
+	&quot;&#207;&#162;&quot; =&gt; &quot;&#207;&#163;&quot;,	&quot;&#207; &quot; =&gt; &quot;&#207;&#161;&quot;,	&quot;&#207;&#382;&quot; =&gt; &quot;&#207;&#376;&quot;,
+	&quot;&#207;&#339;&quot; =&gt; &quot;&#207;*&quot;,	&quot;&#207;&#353;&quot; =&gt; &quot;&#207;&#8250;&quot;,	&quot;&#207;&#732;&quot; =&gt; &quot;&#207;&#8482;&quot;,
+	&quot;&#206;&#171;&quot; =&gt; &quot;&#207;&#8249;&quot;,	&quot;&#206;&#170;&quot; =&gt; &quot;&#207;&#352;&quot;,	&quot;&#206;&#169;&quot; =&gt; &quot;&#207;&#8240;&quot;,
+	&quot;&#206;&#168;&quot; =&gt; &quot;&#207;&#710;&quot;,	&quot;&#206;&#167;&quot; =&gt; &quot;&#207;&#8225;&quot;,	&quot;&#206;&#166;&quot; =&gt; &quot;&#207;&#8224;&quot;,
+	&quot;&#206;&#165;&quot; =&gt; &quot;&#207;&#8230;&quot;,	&quot;&#206;&#164;&quot; =&gt; &quot;&#207;&#8222;&quot;,	&quot;&#206;&#163;&quot; =&gt; &quot;&#207;&#402;&quot;,
+	&quot;&#206;&#161;&quot; =&gt; &quot;&#207;*&quot;,	&quot;&#206; &quot; =&gt; &quot;&#207;&#8364;&quot;,	&quot;&#206;&#376;&quot; =&gt; &quot;&#206;&#191;&quot;,
+	&quot;&#206;&#382;&quot; =&gt; &quot;&#206;&#190;&quot;,	&quot;&#206;*&quot; =&gt; &quot;&#206;&#189;&quot;,	&quot;&#206;&#339;&quot; =&gt; &quot;&#206;&#188;&quot;,
+	&quot;&#206;&#8250;&quot; =&gt; &quot;&#206;&#187;&quot;,	&quot;&#206;&#353;&quot; =&gt; &quot;&#206;&#186;&quot;,	&quot;&#206;&#8482;&quot; =&gt; &quot;&#206;&#185;&quot;,
+	&quot;&#206;&#732;&quot; =&gt; &quot;&#206;&#184;&quot;,	&quot;&#206;&#8212;&quot; =&gt; &quot;&#206;&#183;&quot;,	&quot;&#206;&#8211;&quot; =&gt; &quot;&#206;&#182;&quot;,
+	&quot;&#206;&#8226;&quot; =&gt; &quot;&#206;&#181;&quot;,	&quot;&#206;&#8221;&quot; =&gt; &quot;&#206;&#180;&quot;,	&quot;&#206;&#8220;&quot; =&gt; &quot;&#206;&#179;&quot;,
+	&quot;&#206;&#8217;&quot; =&gt; &quot;&#206;&#178;&quot;,	&quot;&#206;&#8216;&quot; =&gt; &quot;&#206;&#177;&quot;,	&quot;&#206;*&quot; =&gt; &quot;&#207;&#381;&quot;,
+	&quot;&#206;&#381;&quot; =&gt; &quot;&#207;*&quot;,	&quot;&#206;&#338;&quot; =&gt; &quot;&#207;&#338;&quot;,	&quot;&#206;&#352;&quot; =&gt; &quot;&#206;&#175;&quot;,
+	&quot;&#206;&#8240;&quot; =&gt; &quot;&#206;&#174;&quot;,	&quot;&#206;&#710;&quot; =&gt; &quot;&#206;&#173;&quot;,	&quot;&#206;&#8224;&quot; =&gt; &quot;&#206;&#172;&quot;,
+	&quot;&#200;&#178;&quot; =&gt; &quot;&#200;&#179;&quot;,	&quot;&#200;&#176;&quot; =&gt; &quot;&#200;&#177;&quot;,	&quot;&#200;&#174;&quot; =&gt; &quot;&#200;&#175;&quot;,
+	&quot;&#200;&#172;&quot; =&gt; &quot;&#200;&#173;&quot;,	&quot;&#200;&#170;&quot; =&gt; &quot;&#200;&#171;&quot;,	&quot;&#200;&#168;&quot; =&gt; &quot;&#200;&#169;&quot;,
+	&quot;&#200;&#166;&quot; =&gt; &quot;&#200;&#167;&quot;,	&quot;&#200;&#164;&quot; =&gt; &quot;&#200;&#165;&quot;,	&quot;&#200;&#162;&quot; =&gt; &quot;&#200;&#163;&quot;,
+	&quot;&#200; &quot; =&gt; &quot;&#198;&#382;&quot;,	&quot;&#200;&#382;&quot; =&gt; &quot;&#200;&#376;&quot;,	&quot;&#200;&#339;&quot; =&gt; &quot;&#200;*&quot;,
+	&quot;&#200;&#353;&quot; =&gt; &quot;&#200;&#8250;&quot;,	&quot;&#200;&#732;&quot; =&gt; &quot;&#200;&#8482;&quot;,	&quot;&#200;&#8211;&quot; =&gt; &quot;&#200;&#8212;&quot;,
+	&quot;&#200;&#8221;&quot; =&gt; &quot;&#200;&#8226;&quot;,	&quot;&#200;&#8217;&quot; =&gt; &quot;&#200;&#8220;&quot;,	&quot;&#200;*&quot; =&gt; &quot;&#200;&#8216;&quot;,
+	&quot;&#200;&#381;&quot; =&gt; &quot;&#200;*&quot;,	&quot;&#200;&#338;&quot; =&gt; &quot;&#200;*&quot;,	&quot;&#200;&#352;&quot; =&gt; &quot;&#200;&#8249;&quot;,
+	&quot;&#200;&#710;&quot; =&gt; &quot;&#200;&#8240;&quot;,	&quot;&#200;&#8224;&quot; =&gt; &quot;&#200;&#8225;&quot;,	&quot;&#200;&#8222;&quot; =&gt; &quot;&#200;&#8230;&quot;,
+	&quot;&#200;&#8218;&quot; =&gt; &quot;&#200;&#402;&quot;,	&quot;&#200;&#8364;&quot; =&gt; &quot;&#200;*&quot;,	&quot;&#199;&#190;&quot; =&gt; &quot;&#199;&#191;&quot;,
+	&quot;&#199;&#188;&quot; =&gt; &quot;&#199;&#189;&quot;,	&quot;&#199;&#186;&quot; =&gt; &quot;&#199;&#187;&quot;,	&quot;&#199;&#184;&quot; =&gt; &quot;&#199;&#185;&quot;,
+	&quot;&#199;&#183;&quot; =&gt; &quot;&#198;&#191;&quot;,	&quot;&#199;&#182;&quot; =&gt; &quot;&#198;&#8226;&quot;,	&quot;&#199;&#180;&quot; =&gt; &quot;&#199;&#181;&quot;,
+	&quot;&#199;&#177;&quot; =&gt; &quot;&#199;&#179;&quot;,	&quot;&#199;&#174;&quot; =&gt; &quot;&#199;&#175;&quot;,	&quot;&#199;&#172;&quot; =&gt; &quot;&#199;&#173;&quot;,
+	&quot;&#199;&#170;&quot; =&gt; &quot;&#199;&#171;&quot;,	&quot;&#199;&#168;&quot; =&gt; &quot;&#199;&#169;&quot;,	&quot;&#199;&#166;&quot; =&gt; &quot;&#199;&#167;&quot;,
+	&quot;&#199;&#164;&quot; =&gt; &quot;&#199;&#165;&quot;,	&quot;&#199;&#162;&quot; =&gt; &quot;&#199;&#163;&quot;,	&quot;&#199; &quot; =&gt; &quot;&#199;&#161;&quot;,
+	&quot;&#199;&#382;&quot; =&gt; &quot;&#199;&#376;&quot;,	&quot;&#199;&#8250;&quot; =&gt; &quot;&#199;&#339;&quot;,	&quot;&#199;&#8482;&quot; =&gt; &quot;&#199;&#353;&quot;,
+	&quot;&#199;&#8212;&quot; =&gt; &quot;&#199;&#732;&quot;,	&quot;&#199;&#8226;&quot; =&gt; &quot;&#199;&#8211;&quot;,	&quot;&#199;&#8220;&quot; =&gt; &quot;&#199;&#8221;&quot;,
+	&quot;&#199;&#8216;&quot; =&gt; &quot;&#199;&#8217;&quot;,	&quot;&#199;*&quot; =&gt; &quot;&#199;*&quot;,	&quot;&#199;*&quot; =&gt; &quot;&#199;&#381;&quot;,
+	&quot;&#199;&#352;&quot; =&gt; &quot;&#199;&#338;&quot;,	&quot;&#199;&#8225;&quot; =&gt; &quot;&#199;&#8240;&quot;,	&quot;&#199;&#8222;&quot; =&gt; &quot;&#199;&#8224;&quot;,
+	&quot;&#198;&#188;&quot; =&gt; &quot;&#198;&#189;&quot;,	&quot;&#198;&#184;&quot; =&gt; &quot;&#198;&#185;&quot;,	&quot;&#198;&#183;&quot; =&gt; &quot;&#202;&#8217;&quot;,
+	&quot;&#198;&#181;&quot; =&gt; &quot;&#198;&#182;&quot;,	&quot;&#198;&#179;&quot; =&gt; &quot;&#198;&#180;&quot;,	&quot;&#198;&#178;&quot; =&gt; &quot;&#202;&#8249;&quot;,
+	&quot;&#198;&#177;&quot; =&gt; &quot;&#202;&#352;&quot;,	&quot;&#198;&#175;&quot; =&gt; &quot;&#198;&#176;&quot;,	&quot;&#198;&#174;&quot; =&gt; &quot;&#202;&#710;&quot;,
+	&quot;&#198;&#172;&quot; =&gt; &quot;&#198;&#173;&quot;,	&quot;&#198;&#169;&quot; =&gt; &quot;&#202;&#402;&quot;,	&quot;&#198;&#167;&quot; =&gt; &quot;&#198;&#168;&quot;,
+	&quot;&#198;&#166;&quot; =&gt; &quot;&#202;&#8364;&quot;,	&quot;&#198;&#164;&quot; =&gt; &quot;&#198;&#165;&quot;,	&quot;&#198;&#162;&quot; =&gt; &quot;&#198;&#163;&quot;,
+	&quot;&#198; &quot; =&gt; &quot;&#198;&#161;&quot;,	&quot;&#198;&#376;&quot; =&gt; &quot;&#201;&#181;&quot;,	&quot;&#198;*&quot; =&gt; &quot;&#201;&#178;&quot;,
+	&quot;&#198;&#339;&quot; =&gt; &quot;&#201;&#175;&quot;,	&quot;&#198;&#732;&quot; =&gt; &quot;&#198;&#8482;&quot;,	&quot;&#198;&#8212;&quot; =&gt; &quot;&#201;&#168;&quot;,
+	&quot;&#198;&#8211;&quot; =&gt; &quot;&#201;&#169;&quot;,	&quot;&#198;&#8221;&quot; =&gt; &quot;&#201;&#163;&quot;,	&quot;&#198;&#8220;&quot; =&gt; &quot;&#201; &quot;,
+	&quot;&#198;&#8216;&quot; =&gt; &quot;&#198;&#8217;&quot;,	&quot;&#198;*&quot; =&gt; &quot;&#201;&#8250;&quot;,	&quot;&#198;*&quot; =&gt; &quot;&#201;&#8482;&quot;,
+	&quot;&#198;&#381;&quot; =&gt; &quot;&#199;*&quot;,	&quot;&#198;&#8249;&quot; =&gt; &quot;&#198;&#338;&quot;,	&quot;&#198;&#352;&quot; =&gt; &quot;&#201;&#8212;&quot;,
+	&quot;&#198;&#8240;&quot; =&gt; &quot;&#201;&#8211;&quot;,	&quot;&#198;&#8225;&quot; =&gt; &quot;&#198;&#710;&quot;,	&quot;&#198;&#8224;&quot; =&gt; &quot;&#201;&#8221;&quot;,
+	&quot;&#198;&#8222;&quot; =&gt; &quot;&#198;&#8230;&quot;,	&quot;&#198;&#8218;&quot; =&gt; &quot;&#198;&#402;&quot;,	&quot;&#198;*&quot; =&gt; &quot;&#201;&#8220;&quot;,
+	&quot;&#197;&#189;&quot; =&gt; &quot;&#197;&#190;&quot;,	&quot;&#197;&#187;&quot; =&gt; &quot;&#197;&#188;&quot;,	&quot;&#197;&#185;&quot; =&gt; &quot;&#197;&#186;&quot;,
+	&quot;&#197;&#184;&quot; =&gt; &quot;&#195;&#191;&quot;,	&quot;&#197;&#182;&quot; =&gt; &quot;&#197;&#183;&quot;,	&quot;&#197;&#180;&quot; =&gt; &quot;&#197;&#181;&quot;,
+	&quot;&#197;&#178;&quot; =&gt; &quot;&#197;&#179;&quot;,	&quot;&#197;&#176;&quot; =&gt; &quot;&#197;&#177;&quot;,	&quot;&#197;&#174;&quot; =&gt; &quot;&#197;&#175;&quot;,
+	&quot;&#197;&#172;&quot; =&gt; &quot;&#197;&#173;&quot;,	&quot;&#197;&#170;&quot; =&gt; &quot;&#197;&#171;&quot;,	&quot;&#197;&#168;&quot; =&gt; &quot;&#197;&#169;&quot;,
+	&quot;&#197;&#166;&quot; =&gt; &quot;&#197;&#167;&quot;,	&quot;&#197;&#164;&quot; =&gt; &quot;&#197;&#165;&quot;,	&quot;&#197;&#162;&quot; =&gt; &quot;&#197;&#163;&quot;,
+	&quot;&#197; &quot; =&gt; &quot;&#197;&#161;&quot;,	&quot;&#197;&#382;&quot; =&gt; &quot;&#197;&#376;&quot;,	&quot;&#197;&#339;&quot; =&gt; &quot;&#197;*&quot;,
+	&quot;&#197;&#353;&quot; =&gt; &quot;&#197;&#8250;&quot;,	&quot;&#197;&#732;&quot; =&gt; &quot;&#197;&#8482;&quot;,	&quot;&#197;&#8211;&quot; =&gt; &quot;&#197;&#8212;&quot;,
+	&quot;&#197;&#8221;&quot; =&gt; &quot;&#197;&#8226;&quot;,	&quot;&#197;&#8217;&quot; =&gt; &quot;&#197;&#8220;&quot;,	&quot;&#197;*&quot; =&gt; &quot;&#197;&#8216;&quot;,
+	&quot;&#197;&#381;&quot; =&gt; &quot;&#197;*&quot;,	&quot;&#197;&#338;&quot; =&gt; &quot;&#197;*&quot;,	&quot;&#197;&#352;&quot; =&gt; &quot;&#197;&#8249;&quot;,
+	&quot;&#197;&#8225;&quot; =&gt; &quot;&#197;&#710;&quot;,	&quot;&#197;&#8230;&quot; =&gt; &quot;&#197;&#8224;&quot;,	&quot;&#197;&#402;&quot; =&gt; &quot;&#197;&#8222;&quot;,
+	&quot;&#197;*&quot; =&gt; &quot;&#197;&#8218;&quot;,	&quot;&#196;&#191;&quot; =&gt; &quot;&#197;&#8364;&quot;,	&quot;&#196;&#189;&quot; =&gt; &quot;&#196;&#190;&quot;,
+	&quot;&#196;&#187;&quot; =&gt; &quot;&#196;&#188;&quot;,	&quot;&#196;&#185;&quot; =&gt; &quot;&#196;&#186;&quot;,	&quot;&#196;&#182;&quot; =&gt; &quot;&#196;&#183;&quot;,
+	&quot;&#196;&#180;&quot; =&gt; &quot;&#196;&#181;&quot;,	&quot;&#196;&#178;&quot; =&gt; &quot;&#196;&#179;&quot;,	&quot;&#196;&#176;&quot; =&gt; &quot;i&quot;,
+	&quot;&#196;&#174;&quot; =&gt; &quot;&#196;&#175;&quot;,	&quot;&#196;&#172;&quot; =&gt; &quot;&#196;&#173;&quot;,	&quot;&#196;&#170;&quot; =&gt; &quot;&#196;&#171;&quot;,
+	&quot;&#196;&#168;&quot; =&gt; &quot;&#196;&#169;&quot;,	&quot;&#196;&#166;&quot; =&gt; &quot;&#196;&#167;&quot;,	&quot;&#196;&#164;&quot; =&gt; &quot;&#196;&#165;&quot;,
+	&quot;&#196;&#162;&quot; =&gt; &quot;&#196;&#163;&quot;,	&quot;&#196; &quot; =&gt; &quot;&#196;&#161;&quot;,	&quot;&#196;&#382;&quot; =&gt; &quot;&#196;&#376;&quot;,
+	&quot;&#196;&#339;&quot; =&gt; &quot;&#196;*&quot;,	&quot;&#196;&#353;&quot; =&gt; &quot;&#196;&#8250;&quot;,	&quot;&#196;&#732;&quot; =&gt; &quot;&#196;&#8482;&quot;,
+	&quot;&#196;&#8211;&quot; =&gt; &quot;&#196;&#8212;&quot;,	&quot;&#196;&#8221;&quot; =&gt; &quot;&#196;&#8226;&quot;,	&quot;&#196;&#8217;&quot; =&gt; &quot;&#196;&#8220;&quot;,
+	&quot;&#196;*&quot; =&gt; &quot;&#196;&#8216;&quot;,	&quot;&#196;&#381;&quot; =&gt; &quot;&#196;*&quot;,	&quot;&#196;&#338;&quot; =&gt; &quot;&#196;*&quot;,
+	&quot;&#196;&#352;&quot; =&gt; &quot;&#196;&#8249;&quot;,	&quot;&#196;&#710;&quot; =&gt; &quot;&#196;&#8240;&quot;,	&quot;&#196;&#8224;&quot; =&gt; &quot;&#196;&#8225;&quot;,
+	&quot;&#196;&#8222;&quot; =&gt; &quot;&#196;&#8230;&quot;,	&quot;&#196;&#8218;&quot; =&gt; &quot;&#196;&#402;&quot;,	&quot;&#196;&#8364;&quot; =&gt; &quot;&#196;*&quot;,
+	&quot;&#195;&#382;&quot; =&gt; &quot;&#195;&#190;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#189;&quot;,	&quot;&#195;&#339;&quot; =&gt; &quot;&#195;&#188;&quot;,
+	&quot;&#195;&#8250;&quot; =&gt; &quot;&#195;&#187;&quot;,	&quot;&#195;&#353;&quot; =&gt; &quot;&#195;&#186;&quot;,	&quot;&#195;&#8482;&quot; =&gt; &quot;&#195;&#185;&quot;,
+	&quot;&#195;&#732;&quot; =&gt; &quot;&#195;&#184;&quot;,	&quot;&#195;&#8211;&quot; =&gt; &quot;&#195;&#182;&quot;,	&quot;&#195;&#8226;&quot; =&gt; &quot;&#195;&#181;&quot;,
+	&quot;&#195;&#8221;&quot; =&gt; &quot;&#195;&#180;&quot;,	&quot;&#195;&#8220;&quot; =&gt; &quot;&#195;&#179;&quot;,	&quot;&#195;&#8217;&quot; =&gt; &quot;&#195;&#178;&quot;,
+	&quot;&#195;&#8216;&quot; =&gt; &quot;&#195;&#177;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#176;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#175;&quot;,
+	&quot;&#195;&#381;&quot; =&gt; &quot;&#195;&#174;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#173;&quot;,	&quot;&#195;&#338;&quot; =&gt; &quot;&#195;&#172;&quot;,
+	&quot;&#195;&#8249;&quot; =&gt; &quot;&#195;&#171;&quot;,	&quot;&#195;&#352;&quot; =&gt; &quot;&#195;&#170;&quot;,	&quot;&#195;&#8240;&quot; =&gt; &quot;&#195;&#169;&quot;,
+	&quot;&#195;&#710;&quot; =&gt; &quot;&#195;&#168;&quot;,	&quot;&#195;&#8225;&quot; =&gt; &quot;&#195;&#167;&quot;,	&quot;&#195;&#8224;&quot; =&gt; &quot;&#195;&#166;&quot;,
+	&quot;&#195;&#8230;&quot; =&gt; &quot;&#195;&#165;&quot;,	&quot;&#195;&#8222;&quot; =&gt; &quot;&#195;&#164;&quot;,	&quot;&#195;&#402;&quot; =&gt; &quot;&#195;&#163;&quot;,
+	&quot;&#195;&#8218;&quot; =&gt; &quot;&#195;&#162;&quot;,	&quot;&#195;*&quot; =&gt; &quot;&#195;&#161;&quot;,	&quot;&#195;&#8364;&quot; =&gt; &quot;&#195; &quot;,
+	&quot;Z&quot; =&gt; &quot;z&quot;,		&quot;Y&quot; =&gt; &quot;y&quot;,		&quot;X&quot; =&gt; &quot;x&quot;,
+	&quot;W&quot; =&gt; &quot;w&quot;,		&quot;V&quot; =&gt; &quot;v&quot;,		&quot;U&quot; =&gt; &quot;u&quot;,
+	&quot;T&quot; =&gt; &quot;t&quot;,		&quot;S&quot; =&gt; &quot;s&quot;,		&quot;R&quot; =&gt; &quot;r&quot;,
+	&quot;Q&quot; =&gt; &quot;q&quot;,		&quot;P&quot; =&gt; &quot;p&quot;,		&quot;O&quot; =&gt; &quot;o&quot;,
+	&quot;N&quot; =&gt; &quot;n&quot;,		&quot;M&quot; =&gt; &quot;m&quot;,		&quot;L&quot; =&gt; &quot;l&quot;,
+	&quot;K&quot; =&gt; &quot;k&quot;,		&quot;J&quot; =&gt; &quot;j&quot;,		&quot;I&quot; =&gt; &quot;i&quot;,
+	&quot;H&quot; =&gt; &quot;h&quot;,		&quot;G&quot; =&gt; &quot;g&quot;,		&quot;F&quot; =&gt; &quot;f&quot;,
+	&quot;E&quot; =&gt; &quot;e&quot;,		&quot;D&quot; =&gt; &quot;d&quot;,		&quot;C&quot; =&gt; &quot;c&quot;,
+	&quot;B&quot; =&gt; &quot;b&quot;,		&quot;A&quot; =&gt; &quot;a&quot;,
+);
+
+
+$UTF8_TABLES['strtoupper'] = array(
+	&quot;&#239;&#189;&#353;&quot; =&gt; &quot;&#239;&#188;&#186;&quot;,	&quot;&#239;&#189;&#8482;&quot; =&gt; &quot;&#239;&#188;&#185;&quot;,	&quot;&#239;&#189;&#732;&quot; =&gt; &quot;&#239;&#188;&#184;&quot;,
+	&quot;&#239;&#189;&#8212;&quot; =&gt; &quot;&#239;&#188;&#183;&quot;,	&quot;&#239;&#189;&#8211;&quot; =&gt; &quot;&#239;&#188;&#182;&quot;,	&quot;&#239;&#189;&#8226;&quot; =&gt; &quot;&#239;&#188;&#181;&quot;,
+	&quot;&#239;&#189;&#8221;&quot; =&gt; &quot;&#239;&#188;&#180;&quot;,	&quot;&#239;&#189;&#8220;&quot; =&gt; &quot;&#239;&#188;&#179;&quot;,	&quot;&#239;&#189;&#8217;&quot; =&gt; &quot;&#239;&#188;&#178;&quot;,
+	&quot;&#239;&#189;&#8216;&quot; =&gt; &quot;&#239;&#188;&#177;&quot;,	&quot;&#239;&#189;*&quot; =&gt; &quot;&#239;&#188;&#176;&quot;,	&quot;&#239;&#189;*&quot; =&gt; &quot;&#239;&#188;&#175;&quot;,
+	&quot;&#239;&#189;&#381;&quot; =&gt; &quot;&#239;&#188;&#174;&quot;,	&quot;&#239;&#189;*&quot; =&gt; &quot;&#239;&#188;&#173;&quot;,	&quot;&#239;&#189;&#338;&quot; =&gt; &quot;&#239;&#188;&#172;&quot;,
+	&quot;&#239;&#189;&#8249;&quot; =&gt; &quot;&#239;&#188;&#171;&quot;,	&quot;&#239;&#189;&#352;&quot; =&gt; &quot;&#239;&#188;&#170;&quot;,	&quot;&#239;&#189;&#8240;&quot; =&gt; &quot;&#239;&#188;&#169;&quot;,
+	&quot;&#239;&#189;&#710;&quot; =&gt; &quot;&#239;&#188;&#168;&quot;,	&quot;&#239;&#189;&#8225;&quot; =&gt; &quot;&#239;&#188;&#167;&quot;,	&quot;&#239;&#189;&#8224;&quot; =&gt; &quot;&#239;&#188;&#166;&quot;,
+	&quot;&#239;&#189;&#8230;&quot; =&gt; &quot;&#239;&#188;&#165;&quot;,	&quot;&#239;&#189;&#8222;&quot; =&gt; &quot;&#239;&#188;&#164;&quot;,	&quot;&#239;&#189;&#402;&quot; =&gt; &quot;&#239;&#188;&#163;&quot;,
+	&quot;&#239;&#189;&#8218;&quot; =&gt; &quot;&#239;&#188;&#162;&quot;,	&quot;&#239;&#189;*&quot; =&gt; &quot;&#239;&#188;&#161;&quot;,	&quot;&#225;&#191;&#179;&quot; =&gt; &quot;&#225;&#191;&#188;&quot;,
+	&quot;&#225;&#191;&#165;&quot; =&gt; &quot;&#225;&#191;&#172;&quot;,	&quot;&#225;&#191;&#161;&quot; =&gt; &quot;&#225;&#191;&#169;&quot;,	&quot;&#225;&#191; &quot; =&gt; &quot;&#225;&#191;&#168;&quot;,
+	&quot;&#225;&#191;&#8216;&quot; =&gt; &quot;&#225;&#191;&#8482;&quot;,	&quot;&#225;&#191;*&quot; =&gt; &quot;&#225;&#191;&#732;&quot;,	&quot;&#225;&#191;&#402;&quot; =&gt; &quot;&#225;&#191;&#338;&quot;,
+	&quot;&#225;&#190;&#190;&quot; =&gt; &quot;&#206;&#8482;&quot;,	&quot;&#225;&#190;&#179;&quot; =&gt; &quot;&#225;&#190;&#188;&quot;,	&quot;&#225;&#190;&#177;&quot; =&gt; &quot;&#225;&#190;&#185;&quot;,
+	&quot;&#225;&#190;&#176;&quot; =&gt; &quot;&#225;&#190;&#184;&quot;,	&quot;&#225;&#190;&#167;&quot; =&gt; &quot;&#225;&#190;&#175;&quot;,	&quot;&#225;&#190;&#166;&quot; =&gt; &quot;&#225;&#190;&#174;&quot;,
+	&quot;&#225;&#190;&#165;&quot; =&gt; &quot;&#225;&#190;&#173;&quot;,	&quot;&#225;&#190;&#164;&quot; =&gt; &quot;&#225;&#190;&#172;&quot;,	&quot;&#225;&#190;&#163;&quot; =&gt; &quot;&#225;&#190;&#171;&quot;,
+	&quot;&#225;&#190;&#162;&quot; =&gt; &quot;&#225;&#190;&#170;&quot;,	&quot;&#225;&#190;&#161;&quot; =&gt; &quot;&#225;&#190;&#169;&quot;,	&quot;&#225;&#190; &quot; =&gt; &quot;&#225;&#190;&#168;&quot;,
+	&quot;&#225;&#190;&#8212;&quot; =&gt; &quot;&#225;&#190;&#376;&quot;,	&quot;&#225;&#190;&#8211;&quot; =&gt; &quot;&#225;&#190;&#382;&quot;,	&quot;&#225;&#190;&#8226;&quot; =&gt; &quot;&#225;&#190;*&quot;,
+	&quot;&#225;&#190;&#8221;&quot; =&gt; &quot;&#225;&#190;&#339;&quot;,	&quot;&#225;&#190;&#8220;&quot; =&gt; &quot;&#225;&#190;&#8250;&quot;,	&quot;&#225;&#190;&#8217;&quot; =&gt; &quot;&#225;&#190;&#353;&quot;,
+	&quot;&#225;&#190;&#8216;&quot; =&gt; &quot;&#225;&#190;&#8482;&quot;,	&quot;&#225;&#190;*&quot; =&gt; &quot;&#225;&#190;&#732;&quot;,	&quot;&#225;&#190;&#8225;&quot; =&gt; &quot;&#225;&#190;*&quot;,
+	&quot;&#225;&#190;&#8224;&quot; =&gt; &quot;&#225;&#190;&#381;&quot;,	&quot;&#225;&#190;&#8230;&quot; =&gt; &quot;&#225;&#190;*&quot;,	&quot;&#225;&#190;&#8222;&quot; =&gt; &quot;&#225;&#190;&#338;&quot;,
+	&quot;&#225;&#190;&#402;&quot; =&gt; &quot;&#225;&#190;&#8249;&quot;,	&quot;&#225;&#190;&#8218;&quot; =&gt; &quot;&#225;&#190;&#352;&quot;,	&quot;&#225;&#190;*&quot; =&gt; &quot;&#225;&#190;&#8240;&quot;,
+	&quot;&#225;&#190;&#8364;&quot; =&gt; &quot;&#225;&#190;&#710;&quot;,	&quot;&#225;&#189;&#189;&quot; =&gt; &quot;&#225;&#191;&#187;&quot;,	&quot;&#225;&#189;&#188;&quot; =&gt; &quot;&#225;&#191;&#186;&quot;,
+	&quot;&#225;&#189;&#187;&quot; =&gt; &quot;&#225;&#191;&#171;&quot;,	&quot;&#225;&#189;&#186;&quot; =&gt; &quot;&#225;&#191;&#170;&quot;,	&quot;&#225;&#189;&#185;&quot; =&gt; &quot;&#225;&#191;&#185;&quot;,
+	&quot;&#225;&#189;&#184;&quot; =&gt; &quot;&#225;&#191;&#184;&quot;,	&quot;&#225;&#189;&#183;&quot; =&gt; &quot;&#225;&#191;&#8250;&quot;,	&quot;&#225;&#189;&#182;&quot; =&gt; &quot;&#225;&#191;&#353;&quot;,
+	&quot;&#225;&#189;&#181;&quot; =&gt; &quot;&#225;&#191;&#8249;&quot;,	&quot;&#225;&#189;&#180;&quot; =&gt; &quot;&#225;&#191;&#352;&quot;,	&quot;&#225;&#189;&#179;&quot; =&gt; &quot;&#225;&#191;&#8240;&quot;,
+	&quot;&#225;&#189;&#178;&quot; =&gt; &quot;&#225;&#191;&#710;&quot;,	&quot;&#225;&#189;&#177;&quot; =&gt; &quot;&#225;&#190;&#187;&quot;,	&quot;&#225;&#189;&#176;&quot; =&gt; &quot;&#225;&#190;&#186;&quot;,
+	&quot;&#225;&#189;&#167;&quot; =&gt; &quot;&#225;&#189;&#175;&quot;,	&quot;&#225;&#189;&#166;&quot; =&gt; &quot;&#225;&#189;&#174;&quot;,	&quot;&#225;&#189;&#165;&quot; =&gt; &quot;&#225;&#189;&#173;&quot;,
+	&quot;&#225;&#189;&#164;&quot; =&gt; &quot;&#225;&#189;&#172;&quot;,	&quot;&#225;&#189;&#163;&quot; =&gt; &quot;&#225;&#189;&#171;&quot;,	&quot;&#225;&#189;&#162;&quot; =&gt; &quot;&#225;&#189;&#170;&quot;,
+	&quot;&#225;&#189;&#161;&quot; =&gt; &quot;&#225;&#189;&#169;&quot;,	&quot;&#225;&#189; &quot; =&gt; &quot;&#225;&#189;&#168;&quot;,	&quot;&#225;&#189;&#8212;&quot; =&gt; &quot;&#225;&#189;&#376;&quot;,
+	&quot;&#225;&#189;&#8226;&quot; =&gt; &quot;&#225;&#189;*&quot;,	&quot;&#225;&#189;&#8220;&quot; =&gt; &quot;&#225;&#189;&#8250;&quot;,	&quot;&#225;&#189;&#8216;&quot; =&gt; &quot;&#225;&#189;&#8482;&quot;,
+	&quot;&#225;&#189;&#8230;&quot; =&gt; &quot;&#225;&#189;*&quot;,	&quot;&#225;&#189;&#8222;&quot; =&gt; &quot;&#225;&#189;&#338;&quot;,	&quot;&#225;&#189;&#402;&quot; =&gt; &quot;&#225;&#189;&#8249;&quot;,
+	&quot;&#225;&#189;&#8218;&quot; =&gt; &quot;&#225;&#189;&#352;&quot;,	&quot;&#225;&#189;*&quot; =&gt; &quot;&#225;&#189;&#8240;&quot;,	&quot;&#225;&#189;&#8364;&quot; =&gt; &quot;&#225;&#189;&#710;&quot;,
+	&quot;&#225;&#188;&#183;&quot; =&gt; &quot;&#225;&#188;&#191;&quot;,	&quot;&#225;&#188;&#182;&quot; =&gt; &quot;&#225;&#188;&#190;&quot;,	&quot;&#225;&#188;&#181;&quot; =&gt; &quot;&#225;&#188;&#189;&quot;,
+	&quot;&#225;&#188;&#180;&quot; =&gt; &quot;&#225;&#188;&#188;&quot;,	&quot;&#225;&#188;&#179;&quot; =&gt; &quot;&#225;&#188;&#187;&quot;,	&quot;&#225;&#188;&#178;&quot; =&gt; &quot;&#225;&#188;&#186;&quot;,
+	&quot;&#225;&#188;&#177;&quot; =&gt; &quot;&#225;&#188;&#185;&quot;,	&quot;&#225;&#188;&#176;&quot; =&gt; &quot;&#225;&#188;&#184;&quot;,	&quot;&#225;&#188;&#167;&quot; =&gt; &quot;&#225;&#188;&#175;&quot;,
+	&quot;&#225;&#188;&#166;&quot; =&gt; &quot;&#225;&#188;&#174;&quot;,	&quot;&#225;&#188;&#165;&quot; =&gt; &quot;&#225;&#188;&#173;&quot;,	&quot;&#225;&#188;&#164;&quot; =&gt; &quot;&#225;&#188;&#172;&quot;,
+	&quot;&#225;&#188;&#163;&quot; =&gt; &quot;&#225;&#188;&#171;&quot;,	&quot;&#225;&#188;&#162;&quot; =&gt; &quot;&#225;&#188;&#170;&quot;,	&quot;&#225;&#188;&#161;&quot; =&gt; &quot;&#225;&#188;&#169;&quot;,
+	&quot;&#225;&#188; &quot; =&gt; &quot;&#225;&#188;&#168;&quot;,	&quot;&#225;&#188;&#8226;&quot; =&gt; &quot;&#225;&#188;*&quot;,	&quot;&#225;&#188;&#8221;&quot; =&gt; &quot;&#225;&#188;&#339;&quot;,
+	&quot;&#225;&#188;&#8220;&quot; =&gt; &quot;&#225;&#188;&#8250;&quot;,	&quot;&#225;&#188;&#8217;&quot; =&gt; &quot;&#225;&#188;&#353;&quot;,	&quot;&#225;&#188;&#8216;&quot; =&gt; &quot;&#225;&#188;&#8482;&quot;,
+	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#732;&quot;,	&quot;&#225;&#188;&#8225;&quot; =&gt; &quot;&#225;&#188;*&quot;,	&quot;&#225;&#188;&#8224;&quot; =&gt; &quot;&#225;&#188;&#381;&quot;,
+	&quot;&#225;&#188;&#8230;&quot; =&gt; &quot;&#225;&#188;*&quot;,	&quot;&#225;&#188;&#8222;&quot; =&gt; &quot;&#225;&#188;&#338;&quot;,	&quot;&#225;&#188;&#402;&quot; =&gt; &quot;&#225;&#188;&#8249;&quot;,
+	&quot;&#225;&#188;&#8218;&quot; =&gt; &quot;&#225;&#188;&#352;&quot;,	&quot;&#225;&#188;*&quot; =&gt; &quot;&#225;&#188;&#8240;&quot;,	&quot;&#225;&#188;&#8364;&quot; =&gt; &quot;&#225;&#188;&#710;&quot;,
+	&quot;&#225;&#187;&#185;&quot; =&gt; &quot;&#225;&#187;&#184;&quot;,	&quot;&#225;&#187;&#183;&quot; =&gt; &quot;&#225;&#187;&#182;&quot;,	&quot;&#225;&#187;&#181;&quot; =&gt; &quot;&#225;&#187;&#180;&quot;,
+	&quot;&#225;&#187;&#179;&quot; =&gt; &quot;&#225;&#187;&#178;&quot;,	&quot;&#225;&#187;&#177;&quot; =&gt; &quot;&#225;&#187;&#176;&quot;,	&quot;&#225;&#187;&#175;&quot; =&gt; &quot;&#225;&#187;&#174;&quot;,
+	&quot;&#225;&#187;&#173;&quot; =&gt; &quot;&#225;&#187;&#172;&quot;,	&quot;&#225;&#187;&#171;&quot; =&gt; &quot;&#225;&#187;&#170;&quot;,	&quot;&#225;&#187;&#169;&quot; =&gt; &quot;&#225;&#187;&#168;&quot;,
+	&quot;&#225;&#187;&#167;&quot; =&gt; &quot;&#225;&#187;&#166;&quot;,	&quot;&#225;&#187;&#165;&quot; =&gt; &quot;&#225;&#187;&#164;&quot;,	&quot;&#225;&#187;&#163;&quot; =&gt; &quot;&#225;&#187;&#162;&quot;,
+	&quot;&#225;&#187;&#161;&quot; =&gt; &quot;&#225;&#187; &quot;,	&quot;&#225;&#187;&#376;&quot; =&gt; &quot;&#225;&#187;&#382;&quot;,	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#339;&quot;,
+	&quot;&#225;&#187;&#8250;&quot; =&gt; &quot;&#225;&#187;&#353;&quot;,	&quot;&#225;&#187;&#8482;&quot; =&gt; &quot;&#225;&#187;&#732;&quot;,	&quot;&#225;&#187;&#8212;&quot; =&gt; &quot;&#225;&#187;&#8211;&quot;,
+	&quot;&#225;&#187;&#8226;&quot; =&gt; &quot;&#225;&#187;&#8221;&quot;,	&quot;&#225;&#187;&#8220;&quot; =&gt; &quot;&#225;&#187;&#8217;&quot;,	&quot;&#225;&#187;&#8216;&quot; =&gt; &quot;&#225;&#187;*&quot;,
+	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#381;&quot;,	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#338;&quot;,	&quot;&#225;&#187;&#8249;&quot; =&gt; &quot;&#225;&#187;&#352;&quot;,
+	&quot;&#225;&#187;&#8240;&quot; =&gt; &quot;&#225;&#187;&#710;&quot;,	&quot;&#225;&#187;&#8225;&quot; =&gt; &quot;&#225;&#187;&#8224;&quot;,	&quot;&#225;&#187;&#8230;&quot; =&gt; &quot;&#225;&#187;&#8222;&quot;,
+	&quot;&#225;&#187;&#402;&quot; =&gt; &quot;&#225;&#187;&#8218;&quot;,	&quot;&#225;&#187;*&quot; =&gt; &quot;&#225;&#187;&#8364;&quot;,	&quot;&#225;&#186;&#191;&quot; =&gt; &quot;&#225;&#186;&#190;&quot;,
+	&quot;&#225;&#186;&#189;&quot; =&gt; &quot;&#225;&#186;&#188;&quot;,	&quot;&#225;&#186;&#187;&quot; =&gt; &quot;&#225;&#186;&#186;&quot;,	&quot;&#225;&#186;&#185;&quot; =&gt; &quot;&#225;&#186;&#184;&quot;,
+	&quot;&#225;&#186;&#183;&quot; =&gt; &quot;&#225;&#186;&#182;&quot;,	&quot;&#225;&#186;&#181;&quot; =&gt; &quot;&#225;&#186;&#180;&quot;,	&quot;&#225;&#186;&#179;&quot; =&gt; &quot;&#225;&#186;&#178;&quot;,
+	&quot;&#225;&#186;&#177;&quot; =&gt; &quot;&#225;&#186;&#176;&quot;,	&quot;&#225;&#186;&#175;&quot; =&gt; &quot;&#225;&#186;&#174;&quot;,	&quot;&#225;&#186;&#173;&quot; =&gt; &quot;&#225;&#186;&#172;&quot;,
+	&quot;&#225;&#186;&#171;&quot; =&gt; &quot;&#225;&#186;&#170;&quot;,	&quot;&#225;&#186;&#169;&quot; =&gt; &quot;&#225;&#186;&#168;&quot;,	&quot;&#225;&#186;&#167;&quot; =&gt; &quot;&#225;&#186;&#166;&quot;,
+	&quot;&#225;&#186;&#165;&quot; =&gt; &quot;&#225;&#186;&#164;&quot;,	&quot;&#225;&#186;&#163;&quot; =&gt; &quot;&#225;&#186;&#162;&quot;,	&quot;&#225;&#186;&#161;&quot; =&gt; &quot;&#225;&#186; &quot;,
+	&quot;&#225;&#186;&#8250;&quot; =&gt; &quot;&#225;&#185; &quot;,	&quot;&#225;&#186;&#8226;&quot; =&gt; &quot;&#225;&#186;&#8221;&quot;,	&quot;&#225;&#186;&#8220;&quot; =&gt; &quot;&#225;&#186;&#8217;&quot;,
+	&quot;&#225;&#186;&#8216;&quot; =&gt; &quot;&#225;&#186;*&quot;,	&quot;&#225;&#186;*&quot; =&gt; &quot;&#225;&#186;&#381;&quot;,	&quot;&#225;&#186;*&quot; =&gt; &quot;&#225;&#186;&#338;&quot;,
+	&quot;&#225;&#186;&#8249;&quot; =&gt; &quot;&#225;&#186;&#352;&quot;,	&quot;&#225;&#186;&#8240;&quot; =&gt; &quot;&#225;&#186;&#710;&quot;,	&quot;&#225;&#186;&#8225;&quot; =&gt; &quot;&#225;&#186;&#8224;&quot;,
+	&quot;&#225;&#186;&#8230;&quot; =&gt; &quot;&#225;&#186;&#8222;&quot;,	&quot;&#225;&#186;&#402;&quot; =&gt; &quot;&#225;&#186;&#8218;&quot;,	&quot;&#225;&#186;*&quot; =&gt; &quot;&#225;&#186;&#8364;&quot;,
+	&quot;&#225;&#185;&#191;&quot; =&gt; &quot;&#225;&#185;&#190;&quot;,	&quot;&#225;&#185;&#189;&quot; =&gt; &quot;&#225;&#185;&#188;&quot;,	&quot;&#225;&#185;&#187;&quot; =&gt; &quot;&#225;&#185;&#186;&quot;,
+	&quot;&#225;&#185;&#185;&quot; =&gt; &quot;&#225;&#185;&#184;&quot;,	&quot;&#225;&#185;&#183;&quot; =&gt; &quot;&#225;&#185;&#182;&quot;,	&quot;&#225;&#185;&#181;&quot; =&gt; &quot;&#225;&#185;&#180;&quot;,
+	&quot;&#225;&#185;&#179;&quot; =&gt; &quot;&#225;&#185;&#178;&quot;,	&quot;&#225;&#185;&#177;&quot; =&gt; &quot;&#225;&#185;&#176;&quot;,	&quot;&#225;&#185;&#175;&quot; =&gt; &quot;&#225;&#185;&#174;&quot;,
+	&quot;&#225;&#185;&#173;&quot; =&gt; &quot;&#225;&#185;&#172;&quot;,	&quot;&#225;&#185;&#171;&quot; =&gt; &quot;&#225;&#185;&#170;&quot;,	&quot;&#225;&#185;&#169;&quot; =&gt; &quot;&#225;&#185;&#168;&quot;,
+	&quot;&#225;&#185;&#167;&quot; =&gt; &quot;&#225;&#185;&#166;&quot;,	&quot;&#225;&#185;&#165;&quot; =&gt; &quot;&#225;&#185;&#164;&quot;,	&quot;&#225;&#185;&#163;&quot; =&gt; &quot;&#225;&#185;&#162;&quot;,
+	&quot;&#225;&#185;&#161;&quot; =&gt; &quot;&#225;&#185; &quot;,	&quot;&#225;&#185;&#376;&quot; =&gt; &quot;&#225;&#185;&#382;&quot;,	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#339;&quot;,
+	&quot;&#225;&#185;&#8250;&quot; =&gt; &quot;&#225;&#185;&#353;&quot;,	&quot;&#225;&#185;&#8482;&quot; =&gt; &quot;&#225;&#185;&#732;&quot;,	&quot;&#225;&#185;&#8212;&quot; =&gt; &quot;&#225;&#185;&#8211;&quot;,
+	&quot;&#225;&#185;&#8226;&quot; =&gt; &quot;&#225;&#185;&#8221;&quot;,	&quot;&#225;&#185;&#8220;&quot; =&gt; &quot;&#225;&#185;&#8217;&quot;,	&quot;&#225;&#185;&#8216;&quot; =&gt; &quot;&#225;&#185;*&quot;,
+	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#381;&quot;,	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#338;&quot;,	&quot;&#225;&#185;&#8249;&quot; =&gt; &quot;&#225;&#185;&#352;&quot;,
+	&quot;&#225;&#185;&#8240;&quot; =&gt; &quot;&#225;&#185;&#710;&quot;,	&quot;&#225;&#185;&#8225;&quot; =&gt; &quot;&#225;&#185;&#8224;&quot;,	&quot;&#225;&#185;&#8230;&quot; =&gt; &quot;&#225;&#185;&#8222;&quot;,
+	&quot;&#225;&#185;&#402;&quot; =&gt; &quot;&#225;&#185;&#8218;&quot;,	&quot;&#225;&#185;*&quot; =&gt; &quot;&#225;&#185;&#8364;&quot;,	&quot;&#225;&#184;&#191;&quot; =&gt; &quot;&#225;&#184;&#190;&quot;,
+	&quot;&#225;&#184;&#189;&quot; =&gt; &quot;&#225;&#184;&#188;&quot;,	&quot;&#225;&#184;&#187;&quot; =&gt; &quot;&#225;&#184;&#186;&quot;,	&quot;&#225;&#184;&#185;&quot; =&gt; &quot;&#225;&#184;&#184;&quot;,
+	&quot;&#225;&#184;&#183;&quot; =&gt; &quot;&#225;&#184;&#182;&quot;,	&quot;&#225;&#184;&#181;&quot; =&gt; &quot;&#225;&#184;&#180;&quot;,	&quot;&#225;&#184;&#179;&quot; =&gt; &quot;&#225;&#184;&#178;&quot;,
+	&quot;&#225;&#184;&#177;&quot; =&gt; &quot;&#225;&#184;&#176;&quot;,	&quot;&#225;&#184;&#175;&quot; =&gt; &quot;&#225;&#184;&#174;&quot;,	&quot;&#225;&#184;&#173;&quot; =&gt; &quot;&#225;&#184;&#172;&quot;,
+	&quot;&#225;&#184;&#171;&quot; =&gt; &quot;&#225;&#184;&#170;&quot;,	&quot;&#225;&#184;&#169;&quot; =&gt; &quot;&#225;&#184;&#168;&quot;,	&quot;&#225;&#184;&#167;&quot; =&gt; &quot;&#225;&#184;&#166;&quot;,
+	&quot;&#225;&#184;&#165;&quot; =&gt; &quot;&#225;&#184;&#164;&quot;,	&quot;&#225;&#184;&#163;&quot; =&gt; &quot;&#225;&#184;&#162;&quot;,	&quot;&#225;&#184;&#161;&quot; =&gt; &quot;&#225;&#184; &quot;,
+	&quot;&#225;&#184;&#376;&quot; =&gt; &quot;&#225;&#184;&#382;&quot;,	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#339;&quot;,	&quot;&#225;&#184;&#8250;&quot; =&gt; &quot;&#225;&#184;&#353;&quot;,
+	&quot;&#225;&#184;&#8482;&quot; =&gt; &quot;&#225;&#184;&#732;&quot;,	&quot;&#225;&#184;&#8212;&quot; =&gt; &quot;&#225;&#184;&#8211;&quot;,	&quot;&#225;&#184;&#8226;&quot; =&gt; &quot;&#225;&#184;&#8221;&quot;,
+	&quot;&#225;&#184;&#8220;&quot; =&gt; &quot;&#225;&#184;&#8217;&quot;,	&quot;&#225;&#184;&#8216;&quot; =&gt; &quot;&#225;&#184;*&quot;,	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#381;&quot;,
+	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#338;&quot;,	&quot;&#225;&#184;&#8249;&quot; =&gt; &quot;&#225;&#184;&#352;&quot;,	&quot;&#225;&#184;&#8240;&quot; =&gt; &quot;&#225;&#184;&#710;&quot;,
+	&quot;&#225;&#184;&#8225;&quot; =&gt; &quot;&#225;&#184;&#8224;&quot;,	&quot;&#225;&#184;&#8230;&quot; =&gt; &quot;&#225;&#184;&#8222;&quot;,	&quot;&#225;&#184;&#402;&quot; =&gt; &quot;&#225;&#184;&#8218;&quot;,
+	&quot;&#225;&#184;*&quot; =&gt; &quot;&#225;&#184;&#8364;&quot;,	&quot;&#214;&#8224;&quot; =&gt; &quot;&#213;&#8211;&quot;,	&quot;&#214;&#8230;&quot; =&gt; &quot;&#213;&#8226;&quot;,
+	&quot;&#214;&#8222;&quot; =&gt; &quot;&#213;&#8221;&quot;,	&quot;&#214;&#402;&quot; =&gt; &quot;&#213;&#8220;&quot;,	&quot;&#214;&#8218;&quot; =&gt; &quot;&#213;&#8217;&quot;,
+	&quot;&#214;*&quot; =&gt; &quot;&#213;&#8216;&quot;,	&quot;&#214;&#8364;&quot; =&gt; &quot;&#213;*&quot;,	&quot;&#213;&#191;&quot; =&gt; &quot;&#213;*&quot;,
+	&quot;&#213;&#190;&quot; =&gt; &quot;&#213;&#381;&quot;,	&quot;&#213;&#189;&quot; =&gt; &quot;&#213;*&quot;,	&quot;&#213;&#188;&quot; =&gt; &quot;&#213;&#338;&quot;,
+	&quot;&#213;&#187;&quot; =&gt; &quot;&#213;&#8249;&quot;,	&quot;&#213;&#186;&quot; =&gt; &quot;&#213;&#352;&quot;,	&quot;&#213;&#185;&quot; =&gt; &quot;&#213;&#8240;&quot;,
+	&quot;&#213;&#184;&quot; =&gt; &quot;&#213;&#710;&quot;,	&quot;&#213;&#183;&quot; =&gt; &quot;&#213;&#8225;&quot;,	&quot;&#213;&#182;&quot; =&gt; &quot;&#213;&#8224;&quot;,
+	&quot;&#213;&#181;&quot; =&gt; &quot;&#213;&#8230;&quot;,	&quot;&#213;&#180;&quot; =&gt; &quot;&#213;&#8222;&quot;,	&quot;&#213;&#179;&quot; =&gt; &quot;&#213;&#402;&quot;,
+	&quot;&#213;&#178;&quot; =&gt; &quot;&#213;&#8218;&quot;,	&quot;&#213;&#177;&quot; =&gt; &quot;&#213;*&quot;,	&quot;&#213;&#176;&quot; =&gt; &quot;&#213;&#8364;&quot;,
+	&quot;&#213;&#175;&quot; =&gt; &quot;&#212;&#191;&quot;,	&quot;&#213;&#174;&quot; =&gt; &quot;&#212;&#190;&quot;,	&quot;&#213;&#173;&quot; =&gt; &quot;&#212;&#189;&quot;,
+	&quot;&#213;&#172;&quot; =&gt; &quot;&#212;&#188;&quot;,	&quot;&#213;&#171;&quot; =&gt; &quot;&#212;&#187;&quot;,	&quot;&#213;&#170;&quot; =&gt; &quot;&#212;&#186;&quot;,
+	&quot;&#213;&#169;&quot; =&gt; &quot;&#212;&#185;&quot;,	&quot;&#213;&#168;&quot; =&gt; &quot;&#212;&#184;&quot;,	&quot;&#213;&#167;&quot; =&gt; &quot;&#212;&#183;&quot;,
+	&quot;&#213;&#166;&quot; =&gt; &quot;&#212;&#182;&quot;,	&quot;&#213;&#165;&quot; =&gt; &quot;&#212;&#181;&quot;,	&quot;&#213;&#164;&quot; =&gt; &quot;&#212;&#180;&quot;,
+	&quot;&#213;&#163;&quot; =&gt; &quot;&#212;&#179;&quot;,	&quot;&#213;&#162;&quot; =&gt; &quot;&#212;&#178;&quot;,	&quot;&#213;&#161;&quot; =&gt; &quot;&#212;&#177;&quot;,
+	&quot;&#212;*&quot; =&gt; &quot;&#212;&#381;&quot;,	&quot;&#212;*&quot; =&gt; &quot;&#212;&#338;&quot;,	&quot;&#212;&#8249;&quot; =&gt; &quot;&#212;&#352;&quot;,
+	&quot;&#212;&#8240;&quot; =&gt; &quot;&#212;&#710;&quot;,	&quot;&#212;&#8225;&quot; =&gt; &quot;&#212;&#8224;&quot;,	&quot;&#212;&#8230;&quot; =&gt; &quot;&#212;&#8222;&quot;,
+	&quot;&#212;&#402;&quot; =&gt; &quot;&#212;&#8218;&quot;,	&quot;&#212;*&quot; =&gt; &quot;&#212;&#8364;&quot;,	&quot;&#211;&#185;&quot; =&gt; &quot;&#211;&#184;&quot;,
+	&quot;&#211;&#181;&quot; =&gt; &quot;&#211;&#180;&quot;,	&quot;&#211;&#179;&quot; =&gt; &quot;&#211;&#178;&quot;,	&quot;&#211;&#177;&quot; =&gt; &quot;&#211;&#176;&quot;,
+	&quot;&#211;&#175;&quot; =&gt; &quot;&#211;&#174;&quot;,	&quot;&#211;&#173;&quot; =&gt; &quot;&#211;&#172;&quot;,	&quot;&#211;&#171;&quot; =&gt; &quot;&#211;&#170;&quot;,
+	&quot;&#211;&#169;&quot; =&gt; &quot;&#211;&#168;&quot;,	&quot;&#211;&#167;&quot; =&gt; &quot;&#211;&#166;&quot;,	&quot;&#211;&#165;&quot; =&gt; &quot;&#211;&#164;&quot;,
+	&quot;&#211;&#163;&quot; =&gt; &quot;&#211;&#162;&quot;,	&quot;&#211;&#161;&quot; =&gt; &quot;&#211; &quot;,	&quot;&#211;&#376;&quot; =&gt; &quot;&#211;&#382;&quot;,
+	&quot;&#211;*&quot; =&gt; &quot;&#211;&#339;&quot;,	&quot;&#211;&#8250;&quot; =&gt; &quot;&#211;&#353;&quot;,	&quot;&#211;&#8482;&quot; =&gt; &quot;&#211;&#732;&quot;,
+	&quot;&#211;&#8212;&quot; =&gt; &quot;&#211;&#8211;&quot;,	&quot;&#211;&#8226;&quot; =&gt; &quot;&#211;&#8221;&quot;,	&quot;&#211;&#8220;&quot; =&gt; &quot;&#211;&#8217;&quot;,
+	&quot;&#211;&#8216;&quot; =&gt; &quot;&#211;*&quot;,	&quot;&#211;&#381;&quot; =&gt; &quot;&#211;*&quot;,	&quot;&#211;&#338;&quot; =&gt; &quot;&#211;&#8249;&quot;,
+	&quot;&#211;&#352;&quot; =&gt; &quot;&#211;&#8240;&quot;,	&quot;&#211;&#710;&quot; =&gt; &quot;&#211;&#8225;&quot;,	&quot;&#211;&#8224;&quot; =&gt; &quot;&#211;&#8230;&quot;,
+	&quot;&#211;&#8222;&quot; =&gt; &quot;&#211;&#402;&quot;,	&quot;&#211;&#8218;&quot; =&gt; &quot;&#211;*&quot;,	&quot;&#210;&#191;&quot; =&gt; &quot;&#210;&#190;&quot;,
+	&quot;&#210;&#189;&quot; =&gt; &quot;&#210;&#188;&quot;,	&quot;&#210;&#187;&quot; =&gt; &quot;&#210;&#186;&quot;,	&quot;&#210;&#185;&quot; =&gt; &quot;&#210;&#184;&quot;,
+	&quot;&#210;&#183;&quot; =&gt; &quot;&#210;&#182;&quot;,	&quot;&#210;&#181;&quot; =&gt; &quot;&#210;&#180;&quot;,	&quot;&#210;&#179;&quot; =&gt; &quot;&#210;&#178;&quot;,
+	&quot;&#210;&#177;&quot; =&gt; &quot;&#210;&#176;&quot;,	&quot;&#210;&#175;&quot; =&gt; &quot;&#210;&#174;&quot;,	&quot;&#210;&#173;&quot; =&gt; &quot;&#210;&#172;&quot;,
+	&quot;&#210;&#171;&quot; =&gt; &quot;&#210;&#170;&quot;,	&quot;&#210;&#169;&quot; =&gt; &quot;&#210;&#168;&quot;,	&quot;&#210;&#167;&quot; =&gt; &quot;&#210;&#166;&quot;,
+	&quot;&#210;&#165;&quot; =&gt; &quot;&#210;&#164;&quot;,	&quot;&#210;&#163;&quot; =&gt; &quot;&#210;&#162;&quot;,	&quot;&#210;&#161;&quot; =&gt; &quot;&#210; &quot;,
+	&quot;&#210;&#376;&quot; =&gt; &quot;&#210;&#382;&quot;,	&quot;&#210;*&quot; =&gt; &quot;&#210;&#339;&quot;,	&quot;&#210;&#8250;&quot; =&gt; &quot;&#210;&#353;&quot;,
+	&quot;&#210;&#8482;&quot; =&gt; &quot;&#210;&#732;&quot;,	&quot;&#210;&#8212;&quot; =&gt; &quot;&#210;&#8211;&quot;,	&quot;&#210;&#8226;&quot; =&gt; &quot;&#210;&#8221;&quot;,
+	&quot;&#210;&#8220;&quot; =&gt; &quot;&#210;&#8217;&quot;,	&quot;&#210;&#8216;&quot; =&gt; &quot;&#210;*&quot;,	&quot;&#210;*&quot; =&gt; &quot;&#210;&#381;&quot;,
+	&quot;&#210;*&quot; =&gt; &quot;&#210;&#338;&quot;,	&quot;&#210;&#8249;&quot; =&gt; &quot;&#210;&#352;&quot;,	&quot;&#210;*&quot; =&gt; &quot;&#210;&#8364;&quot;,
+	&quot;&#209;&#191;&quot; =&gt; &quot;&#209;&#190;&quot;,	&quot;&#209;&#189;&quot; =&gt; &quot;&#209;&#188;&quot;,	&quot;&#209;&#187;&quot; =&gt; &quot;&#209;&#186;&quot;,
+	&quot;&#209;&#185;&quot; =&gt; &quot;&#209;&#184;&quot;,	&quot;&#209;&#183;&quot; =&gt; &quot;&#209;&#182;&quot;,	&quot;&#209;&#181;&quot; =&gt; &quot;&#209;&#180;&quot;,
+	&quot;&#209;&#179;&quot; =&gt; &quot;&#209;&#178;&quot;,	&quot;&#209;&#177;&quot; =&gt; &quot;&#209;&#176;&quot;,	&quot;&#209;&#175;&quot; =&gt; &quot;&#209;&#174;&quot;,
+	&quot;&#209;&#173;&quot; =&gt; &quot;&#209;&#172;&quot;,	&quot;&#209;&#171;&quot; =&gt; &quot;&#209;&#170;&quot;,	&quot;&#209;&#169;&quot; =&gt; &quot;&#209;&#168;&quot;,
+	&quot;&#209;&#167;&quot; =&gt; &quot;&#209;&#166;&quot;,	&quot;&#209;&#165;&quot; =&gt; &quot;&#209;&#164;&quot;,	&quot;&#209;&#163;&quot; =&gt; &quot;&#209;&#162;&quot;,
+	&quot;&#209;&#161;&quot; =&gt; &quot;&#209; &quot;,	&quot;&#209;&#376;&quot; =&gt; &quot;&#208;*&quot;,	&quot;&#209;&#382;&quot; =&gt; &quot;&#208;&#381;&quot;,
+	&quot;&#209;*&quot; =&gt; &quot;&#208;*&quot;,	&quot;&#209;&#339;&quot; =&gt; &quot;&#208;&#338;&quot;,	&quot;&#209;&#8250;&quot; =&gt; &quot;&#208;&#8249;&quot;,
+	&quot;&#209;&#353;&quot; =&gt; &quot;&#208;&#352;&quot;,	&quot;&#209;&#8482;&quot; =&gt; &quot;&#208;&#8240;&quot;,	&quot;&#209;&#732;&quot; =&gt; &quot;&#208;&#710;&quot;,
+	&quot;&#209;&#8212;&quot; =&gt; &quot;&#208;&#8225;&quot;,	&quot;&#209;&#8211;&quot; =&gt; &quot;&#208;&#8224;&quot;,	&quot;&#209;&#8226;&quot; =&gt; &quot;&#208;&#8230;&quot;,
+	&quot;&#209;&#8221;&quot; =&gt; &quot;&#208;&#8222;&quot;,	&quot;&#209;&#8220;&quot; =&gt; &quot;&#208;&#402;&quot;,	&quot;&#209;&#8217;&quot; =&gt; &quot;&#208;&#8218;&quot;,
+	&quot;&#209;&#8216;&quot; =&gt; &quot;&#208;*&quot;,	&quot;&#209;*&quot; =&gt; &quot;&#208;&#8364;&quot;,	&quot;&#209;*&quot; =&gt; &quot;&#208;&#175;&quot;,
+	&quot;&#209;&#381;&quot; =&gt; &quot;&#208;&#174;&quot;,	&quot;&#209;*&quot; =&gt; &quot;&#208;&#173;&quot;,	&quot;&#209;&#338;&quot; =&gt; &quot;&#208;&#172;&quot;,
+	&quot;&#209;&#8249;&quot; =&gt; &quot;&#208;&#171;&quot;,	&quot;&#209;&#352;&quot; =&gt; &quot;&#208;&#170;&quot;,	&quot;&#209;&#8240;&quot; =&gt; &quot;&#208;&#169;&quot;,
+	&quot;&#209;&#710;&quot; =&gt; &quot;&#208;&#168;&quot;,	&quot;&#209;&#8225;&quot; =&gt; &quot;&#208;&#167;&quot;,	&quot;&#209;&#8224;&quot; =&gt; &quot;&#208;&#166;&quot;,
+	&quot;&#209;&#8230;&quot; =&gt; &quot;&#208;&#165;&quot;,	&quot;&#209;&#8222;&quot; =&gt; &quot;&#208;&#164;&quot;,	&quot;&#209;&#402;&quot; =&gt; &quot;&#208;&#163;&quot;,
+	&quot;&#209;&#8218;&quot; =&gt; &quot;&#208;&#162;&quot;,	&quot;&#209;*&quot; =&gt; &quot;&#208;&#161;&quot;,	&quot;&#209;&#8364;&quot; =&gt; &quot;&#208; &quot;,
+	&quot;&#208;&#191;&quot; =&gt; &quot;&#208;&#376;&quot;,	&quot;&#208;&#190;&quot; =&gt; &quot;&#208;&#382;&quot;,	&quot;&#208;&#189;&quot; =&gt; &quot;&#208;*&quot;,
+	&quot;&#208;&#188;&quot; =&gt; &quot;&#208;&#339;&quot;,	&quot;&#208;&#187;&quot; =&gt; &quot;&#208;&#8250;&quot;,	&quot;&#208;&#186;&quot; =&gt; &quot;&#208;&#353;&quot;,
+	&quot;&#208;&#185;&quot; =&gt; &quot;&#208;&#8482;&quot;,	&quot;&#208;&#184;&quot; =&gt; &quot;&#208;&#732;&quot;,	&quot;&#208;&#183;&quot; =&gt; &quot;&#208;&#8212;&quot;,
+	&quot;&#208;&#182;&quot; =&gt; &quot;&#208;&#8211;&quot;,	&quot;&#208;&#181;&quot; =&gt; &quot;&#208;&#8226;&quot;,	&quot;&#208;&#180;&quot; =&gt; &quot;&#208;&#8221;&quot;,
+	&quot;&#208;&#179;&quot; =&gt; &quot;&#208;&#8220;&quot;,	&quot;&#208;&#178;&quot; =&gt; &quot;&#208;&#8217;&quot;,	&quot;&#208;&#177;&quot; =&gt; &quot;&#208;&#8216;&quot;,
+	&quot;&#208;&#176;&quot; =&gt; &quot;&#208;*&quot;,	&quot;&#207;&#181;&quot; =&gt; &quot;&#206;&#8226;&quot;,	&quot;&#207;&#178;&quot; =&gt; &quot;&#206;&#163;&quot;,
+	&quot;&#207;&#177;&quot; =&gt; &quot;&#206;&#161;&quot;,	&quot;&#207;&#176;&quot; =&gt; &quot;&#206;&#353;&quot;,	&quot;&#207;&#175;&quot; =&gt; &quot;&#207;&#174;&quot;,
+	&quot;&#207;&#173;&quot; =&gt; &quot;&#207;&#172;&quot;,	&quot;&#207;&#171;&quot; =&gt; &quot;&#207;&#170;&quot;,	&quot;&#207;&#169;&quot; =&gt; &quot;&#207;&#168;&quot;,
+	&quot;&#207;&#167;&quot; =&gt; &quot;&#207;&#166;&quot;,	&quot;&#207;&#165;&quot; =&gt; &quot;&#207;&#164;&quot;,	&quot;&#207;&#163;&quot; =&gt; &quot;&#207;&#162;&quot;,
+	&quot;&#207;&#161;&quot; =&gt; &quot;&#207; &quot;,	&quot;&#207;&#376;&quot; =&gt; &quot;&#207;&#382;&quot;,	&quot;&#207;*&quot; =&gt; &quot;&#207;&#339;&quot;,
+	&quot;&#207;&#8250;&quot; =&gt; &quot;&#207;&#353;&quot;,	&quot;&#207;&#8482;&quot; =&gt; &quot;&#207;&#732;&quot;,	&quot;&#207;&#8211;&quot; =&gt; &quot;&#206; &quot;,
+	&quot;&#207;&#8226;&quot; =&gt; &quot;&#206;&#166;&quot;,	&quot;&#207;&#8216;&quot; =&gt; &quot;&#206;&#732;&quot;,	&quot;&#207;*&quot; =&gt; &quot;&#206;&#8217;&quot;,
+	&quot;&#207;&#381;&quot; =&gt; &quot;&#206;*&quot;,	&quot;&#207;*&quot; =&gt; &quot;&#206;&#381;&quot;,	&quot;&#207;&#338;&quot; =&gt; &quot;&#206;&#338;&quot;,
+	&quot;&#207;&#8249;&quot; =&gt; &quot;&#206;&#171;&quot;,	&quot;&#207;&#352;&quot; =&gt; &quot;&#206;&#170;&quot;,	&quot;&#207;&#8240;&quot; =&gt; &quot;&#206;&#169;&quot;,
+	&quot;&#207;&#710;&quot; =&gt; &quot;&#206;&#168;&quot;,	&quot;&#207;&#8225;&quot; =&gt; &quot;&#206;&#167;&quot;,	&quot;&#207;&#8224;&quot; =&gt; &quot;&#206;&#166;&quot;,
+	&quot;&#207;&#8230;&quot; =&gt; &quot;&#206;&#165;&quot;,	&quot;&#207;&#8222;&quot; =&gt; &quot;&#206;&#164;&quot;,	&quot;&#207;&#402;&quot; =&gt; &quot;&#206;&#163;&quot;,
+	&quot;&#207;&#8218;&quot; =&gt; &quot;&#206;&#163;&quot;,	&quot;&#207;*&quot; =&gt; &quot;&#206;&#161;&quot;,	&quot;&#207;&#8364;&quot; =&gt; &quot;&#206; &quot;,
+	&quot;&#206;&#191;&quot; =&gt; &quot;&#206;&#376;&quot;,	&quot;&#206;&#190;&quot; =&gt; &quot;&#206;&#382;&quot;,	&quot;&#206;&#189;&quot; =&gt; &quot;&#206;*&quot;,
+	&quot;&#206;&#188;&quot; =&gt; &quot;&#206;&#339;&quot;,	&quot;&#206;&#187;&quot; =&gt; &quot;&#206;&#8250;&quot;,	&quot;&#206;&#186;&quot; =&gt; &quot;&#206;&#353;&quot;,
+	&quot;&#206;&#185;&quot; =&gt; &quot;&#206;&#8482;&quot;,	&quot;&#206;&#184;&quot; =&gt; &quot;&#206;&#732;&quot;,	&quot;&#206;&#183;&quot; =&gt; &quot;&#206;&#8212;&quot;,
+	&quot;&#206;&#182;&quot; =&gt; &quot;&#206;&#8211;&quot;,	&quot;&#206;&#181;&quot; =&gt; &quot;&#206;&#8226;&quot;,	&quot;&#206;&#180;&quot; =&gt; &quot;&#206;&#8221;&quot;,
+	&quot;&#206;&#179;&quot; =&gt; &quot;&#206;&#8220;&quot;,	&quot;&#206;&#178;&quot; =&gt; &quot;&#206;&#8217;&quot;,	&quot;&#206;&#177;&quot; =&gt; &quot;&#206;&#8216;&quot;,
+	&quot;&#206;&#175;&quot; =&gt; &quot;&#206;&#352;&quot;,	&quot;&#206;&#174;&quot; =&gt; &quot;&#206;&#8240;&quot;,	&quot;&#206;&#173;&quot; =&gt; &quot;&#206;&#710;&quot;,
+	&quot;&#206;&#172;&quot; =&gt; &quot;&#206;&#8224;&quot;,	&quot;&#202;&#8217;&quot; =&gt; &quot;&#198;&#183;&quot;,	&quot;&#202;&#8249;&quot; =&gt; &quot;&#198;&#178;&quot;,
+	&quot;&#202;&#352;&quot; =&gt; &quot;&#198;&#177;&quot;,	&quot;&#202;&#710;&quot; =&gt; &quot;&#198;&#174;&quot;,	&quot;&#202;&#402;&quot; =&gt; &quot;&#198;&#169;&quot;,
+	&quot;&#202;&#8364;&quot; =&gt; &quot;&#198;&#166;&quot;,	&quot;&#201;&#181;&quot; =&gt; &quot;&#198;&#376;&quot;,	&quot;&#201;&#178;&quot; =&gt; &quot;&#198;*&quot;,
+	&quot;&#201;&#175;&quot; =&gt; &quot;&#198;&#339;&quot;,	&quot;&#201;&#169;&quot; =&gt; &quot;&#198;&#8211;&quot;,	&quot;&#201;&#168;&quot; =&gt; &quot;&#198;&#8212;&quot;,
+	&quot;&#201;&#163;&quot; =&gt; &quot;&#198;&#8221;&quot;,	&quot;&#201; &quot; =&gt; &quot;&#198;&#8220;&quot;,	&quot;&#201;&#8250;&quot; =&gt; &quot;&#198;*&quot;,
+	&quot;&#201;&#8482;&quot; =&gt; &quot;&#198;*&quot;,	&quot;&#201;&#8212;&quot; =&gt; &quot;&#198;&#352;&quot;,	&quot;&#201;&#8211;&quot; =&gt; &quot;&#198;&#8240;&quot;,
+	&quot;&#201;&#8221;&quot; =&gt; &quot;&#198;&#8224;&quot;,	&quot;&#201;&#8220;&quot; =&gt; &quot;&#198;*&quot;,	&quot;&#200;&#179;&quot; =&gt; &quot;&#200;&#178;&quot;,
+	&quot;&#200;&#177;&quot; =&gt; &quot;&#200;&#176;&quot;,	&quot;&#200;&#175;&quot; =&gt; &quot;&#200;&#174;&quot;,	&quot;&#200;&#173;&quot; =&gt; &quot;&#200;&#172;&quot;,
+	&quot;&#200;&#171;&quot; =&gt; &quot;&#200;&#170;&quot;,	&quot;&#200;&#169;&quot; =&gt; &quot;&#200;&#168;&quot;,	&quot;&#200;&#167;&quot; =&gt; &quot;&#200;&#166;&quot;,
+	&quot;&#200;&#165;&quot; =&gt; &quot;&#200;&#164;&quot;,	&quot;&#200;&#163;&quot; =&gt; &quot;&#200;&#162;&quot;,	&quot;&#200;&#376;&quot; =&gt; &quot;&#200;&#382;&quot;,
+	&quot;&#200;*&quot; =&gt; &quot;&#200;&#339;&quot;,	&quot;&#200;&#8250;&quot; =&gt; &quot;&#200;&#353;&quot;,	&quot;&#200;&#8482;&quot; =&gt; &quot;&#200;&#732;&quot;,
+	&quot;&#200;&#8212;&quot; =&gt; &quot;&#200;&#8211;&quot;,	&quot;&#200;&#8226;&quot; =&gt; &quot;&#200;&#8221;&quot;,	&quot;&#200;&#8220;&quot; =&gt; &quot;&#200;&#8217;&quot;,
+	&quot;&#200;&#8216;&quot; =&gt; &quot;&#200;*&quot;,	&quot;&#200;*&quot; =&gt; &quot;&#200;&#381;&quot;,	&quot;&#200;*&quot; =&gt; &quot;&#200;&#338;&quot;,
+	&quot;&#200;&#8249;&quot; =&gt; &quot;&#200;&#352;&quot;,	&quot;&#200;&#8240;&quot; =&gt; &quot;&#200;&#710;&quot;,	&quot;&#200;&#8225;&quot; =&gt; &quot;&#200;&#8224;&quot;,
+	&quot;&#200;&#8230;&quot; =&gt; &quot;&#200;&#8222;&quot;,	&quot;&#200;&#402;&quot; =&gt; &quot;&#200;&#8218;&quot;,	&quot;&#200;*&quot; =&gt; &quot;&#200;&#8364;&quot;,
+	&quot;&#199;&#191;&quot; =&gt; &quot;&#199;&#190;&quot;,	&quot;&#199;&#189;&quot; =&gt; &quot;&#199;&#188;&quot;,	&quot;&#199;&#187;&quot; =&gt; &quot;&#199;&#186;&quot;,
+	&quot;&#199;&#185;&quot; =&gt; &quot;&#199;&#184;&quot;,	&quot;&#199;&#181;&quot; =&gt; &quot;&#199;&#180;&quot;,	&quot;&#199;&#179;&quot; =&gt; &quot;&#199;&#178;&quot;,
+	&quot;&#199;&#175;&quot; =&gt; &quot;&#199;&#174;&quot;,	&quot;&#199;&#173;&quot; =&gt; &quot;&#199;&#172;&quot;,	&quot;&#199;&#171;&quot; =&gt; &quot;&#199;&#170;&quot;,
+	&quot;&#199;&#169;&quot; =&gt; &quot;&#199;&#168;&quot;,	&quot;&#199;&#167;&quot; =&gt; &quot;&#199;&#166;&quot;,	&quot;&#199;&#165;&quot; =&gt; &quot;&#199;&#164;&quot;,
+	&quot;&#199;&#163;&quot; =&gt; &quot;&#199;&#162;&quot;,	&quot;&#199;&#161;&quot; =&gt; &quot;&#199; &quot;,	&quot;&#199;&#376;&quot; =&gt; &quot;&#199;&#382;&quot;,
+	&quot;&#199;*&quot; =&gt; &quot;&#198;&#381;&quot;,	&quot;&#199;&#339;&quot; =&gt; &quot;&#199;&#8250;&quot;,	&quot;&#199;&#353;&quot; =&gt; &quot;&#199;&#8482;&quot;,
+	&quot;&#199;&#732;&quot; =&gt; &quot;&#199;&#8212;&quot;,	&quot;&#199;&#8211;&quot; =&gt; &quot;&#199;&#8226;&quot;,	&quot;&#199;&#8221;&quot; =&gt; &quot;&#199;&#8220;&quot;,
+	&quot;&#199;&#8217;&quot; =&gt; &quot;&#199;&#8216;&quot;,	&quot;&#199;*&quot; =&gt; &quot;&#199;*&quot;,	&quot;&#199;&#381;&quot; =&gt; &quot;&#199;*&quot;,
+	&quot;&#199;&#338;&quot; =&gt; &quot;&#199;&#8249;&quot;,	&quot;&#199;&#8240;&quot; =&gt; &quot;&#199;&#710;&quot;,	&quot;&#199;&#8224;&quot; =&gt; &quot;&#199;&#8230;&quot;,
+	&quot;&#198;&#191;&quot; =&gt; &quot;&#199;&#183;&quot;,	&quot;&#198;&#189;&quot; =&gt; &quot;&#198;&#188;&quot;,	&quot;&#198;&#185;&quot; =&gt; &quot;&#198;&#184;&quot;,
+	&quot;&#198;&#182;&quot; =&gt; &quot;&#198;&#181;&quot;,	&quot;&#198;&#180;&quot; =&gt; &quot;&#198;&#179;&quot;,	&quot;&#198;&#176;&quot; =&gt; &quot;&#198;&#175;&quot;,
+	&quot;&#198;&#173;&quot; =&gt; &quot;&#198;&#172;&quot;,	&quot;&#198;&#168;&quot; =&gt; &quot;&#198;&#167;&quot;,	&quot;&#198;&#165;&quot; =&gt; &quot;&#198;&#164;&quot;,
+	&quot;&#198;&#163;&quot; =&gt; &quot;&#198;&#162;&quot;,	&quot;&#198;&#161;&quot; =&gt; &quot;&#198; &quot;,	&quot;&#198;&#382;&quot; =&gt; &quot;&#200; &quot;,
+	&quot;&#198;&#8482;&quot; =&gt; &quot;&#198;&#732;&quot;,	&quot;&#198;&#8226;&quot; =&gt; &quot;&#199;&#182;&quot;,	&quot;&#198;&#8217;&quot; =&gt; &quot;&#198;&#8216;&quot;,
+	&quot;&#198;&#338;&quot; =&gt; &quot;&#198;&#8249;&quot;,	&quot;&#198;&#710;&quot; =&gt; &quot;&#198;&#8225;&quot;,	&quot;&#198;&#8230;&quot; =&gt; &quot;&#198;&#8222;&quot;,
+	&quot;&#198;&#402;&quot; =&gt; &quot;&#198;&#8218;&quot;,	&quot;&#197;&#191;&quot; =&gt; &quot;S&quot;,	&quot;&#197;&#190;&quot; =&gt; &quot;&#197;&#189;&quot;,
+	&quot;&#197;&#188;&quot; =&gt; &quot;&#197;&#187;&quot;,	&quot;&#197;&#186;&quot; =&gt; &quot;&#197;&#185;&quot;,	&quot;&#197;&#183;&quot; =&gt; &quot;&#197;&#182;&quot;,
+	&quot;&#197;&#181;&quot; =&gt; &quot;&#197;&#180;&quot;,	&quot;&#197;&#179;&quot; =&gt; &quot;&#197;&#178;&quot;,	&quot;&#197;&#177;&quot; =&gt; &quot;&#197;&#176;&quot;,
+	&quot;&#197;&#175;&quot; =&gt; &quot;&#197;&#174;&quot;,	&quot;&#197;&#173;&quot; =&gt; &quot;&#197;&#172;&quot;,	&quot;&#197;&#171;&quot; =&gt; &quot;&#197;&#170;&quot;,
+	&quot;&#197;&#169;&quot; =&gt; &quot;&#197;&#168;&quot;,	&quot;&#197;&#167;&quot; =&gt; &quot;&#197;&#166;&quot;,	&quot;&#197;&#165;&quot; =&gt; &quot;&#197;&#164;&quot;,
+	&quot;&#197;&#163;&quot; =&gt; &quot;&#197;&#162;&quot;,	&quot;&#197;&#161;&quot; =&gt; &quot;&#197; &quot;,	&quot;&#197;&#376;&quot; =&gt; &quot;&#197;&#382;&quot;,
+	&quot;&#197;*&quot; =&gt; &quot;&#197;&#339;&quot;,	&quot;&#197;&#8250;&quot; =&gt; &quot;&#197;&#353;&quot;,	&quot;&#197;&#8482;&quot; =&gt; &quot;&#197;&#732;&quot;,
+	&quot;&#197;&#8212;&quot; =&gt; &quot;&#197;&#8211;&quot;,	&quot;&#197;&#8226;&quot; =&gt; &quot;&#197;&#8221;&quot;,	&quot;&#197;&#8220;&quot; =&gt; &quot;&#197;&#8217;&quot;,
+	&quot;&#197;&#8216;&quot; =&gt; &quot;&#197;*&quot;,	&quot;&#197;*&quot; =&gt; &quot;&#197;&#381;&quot;,	&quot;&#197;*&quot; =&gt; &quot;&#197;&#338;&quot;,
+	&quot;&#197;&#8249;&quot; =&gt; &quot;&#197;&#352;&quot;,	&quot;&#197;&#710;&quot; =&gt; &quot;&#197;&#8225;&quot;,	&quot;&#197;&#8224;&quot; =&gt; &quot;&#197;&#8230;&quot;,
+	&quot;&#197;&#8222;&quot; =&gt; &quot;&#197;&#402;&quot;,	&quot;&#197;&#8218;&quot; =&gt; &quot;&#197;*&quot;,	&quot;&#197;&#8364;&quot; =&gt; &quot;&#196;&#191;&quot;,
+	&quot;&#196;&#190;&quot; =&gt; &quot;&#196;&#189;&quot;,	&quot;&#196;&#188;&quot; =&gt; &quot;&#196;&#187;&quot;,	&quot;&#196;&#186;&quot; =&gt; &quot;&#196;&#185;&quot;,
+	&quot;&#196;&#183;&quot; =&gt; &quot;&#196;&#182;&quot;,	&quot;&#196;&#181;&quot; =&gt; &quot;&#196;&#180;&quot;,	&quot;&#196;&#179;&quot; =&gt; &quot;&#196;&#178;&quot;,
+	&quot;&#196;&#177;&quot; =&gt; &quot;I&quot;,	&quot;&#196;&#175;&quot; =&gt; &quot;&#196;&#174;&quot;,	&quot;&#196;&#173;&quot; =&gt; &quot;&#196;&#172;&quot;,
+	&quot;&#196;&#171;&quot; =&gt; &quot;&#196;&#170;&quot;,	&quot;&#196;&#169;&quot; =&gt; &quot;&#196;&#168;&quot;,	&quot;&#196;&#167;&quot; =&gt; &quot;&#196;&#166;&quot;,
+	&quot;&#196;&#165;&quot; =&gt; &quot;&#196;&#164;&quot;,	&quot;&#196;&#163;&quot; =&gt; &quot;&#196;&#162;&quot;,	&quot;&#196;&#161;&quot; =&gt; &quot;&#196; &quot;,
+	&quot;&#196;&#376;&quot; =&gt; &quot;&#196;&#382;&quot;,	&quot;&#196;*&quot; =&gt; &quot;&#196;&#339;&quot;,	&quot;&#196;&#8250;&quot; =&gt; &quot;&#196;&#353;&quot;,
+	&quot;&#196;&#8482;&quot; =&gt; &quot;&#196;&#732;&quot;,	&quot;&#196;&#8212;&quot; =&gt; &quot;&#196;&#8211;&quot;,	&quot;&#196;&#8226;&quot; =&gt; &quot;&#196;&#8221;&quot;,
+	&quot;&#196;&#8220;&quot; =&gt; &quot;&#196;&#8217;&quot;,	&quot;&#196;&#8216;&quot; =&gt; &quot;&#196;*&quot;,	&quot;&#196;*&quot; =&gt; &quot;&#196;&#381;&quot;,
+	&quot;&#196;*&quot; =&gt; &quot;&#196;&#338;&quot;,	&quot;&#196;&#8249;&quot; =&gt; &quot;&#196;&#352;&quot;,	&quot;&#196;&#8240;&quot; =&gt; &quot;&#196;&#710;&quot;,
+	&quot;&#196;&#8225;&quot; =&gt; &quot;&#196;&#8224;&quot;,	&quot;&#196;&#8230;&quot; =&gt; &quot;&#196;&#8222;&quot;,	&quot;&#196;&#402;&quot; =&gt; &quot;&#196;&#8218;&quot;,
+	&quot;&#196;*&quot; =&gt; &quot;&#196;&#8364;&quot;,	&quot;&#195;&#191;&quot; =&gt; &quot;&#197;&#184;&quot;,	&quot;&#195;&#190;&quot; =&gt; &quot;&#195;&#382;&quot;,
+	&quot;&#195;&#189;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195;&#188;&quot; =&gt; &quot;&#195;&#339;&quot;,	&quot;&#195;&#187;&quot; =&gt; &quot;&#195;&#8250;&quot;,
+	&quot;&#195;&#186;&quot; =&gt; &quot;&#195;&#353;&quot;,	&quot;&#195;&#185;&quot; =&gt; &quot;&#195;&#8482;&quot;,	&quot;&#195;&#184;&quot; =&gt; &quot;&#195;&#732;&quot;,
+	&quot;&#195;&#182;&quot; =&gt; &quot;&#195;&#8211;&quot;,	&quot;&#195;&#181;&quot; =&gt; &quot;&#195;&#8226;&quot;,	&quot;&#195;&#180;&quot; =&gt; &quot;&#195;&#8221;&quot;,
+	&quot;&#195;&#179;&quot; =&gt; &quot;&#195;&#8220;&quot;,	&quot;&#195;&#178;&quot; =&gt; &quot;&#195;&#8217;&quot;,	&quot;&#195;&#177;&quot; =&gt; &quot;&#195;&#8216;&quot;,
+	&quot;&#195;&#176;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195;&#175;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195;&#174;&quot; =&gt; &quot;&#195;&#381;&quot;,
+	&quot;&#195;&#173;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195;&#172;&quot; =&gt; &quot;&#195;&#338;&quot;,	&quot;&#195;&#171;&quot; =&gt; &quot;&#195;&#8249;&quot;,
+	&quot;&#195;&#170;&quot; =&gt; &quot;&#195;&#352;&quot;,	&quot;&#195;&#169;&quot; =&gt; &quot;&#195;&#8240;&quot;,	&quot;&#195;&#168;&quot; =&gt; &quot;&#195;&#710;&quot;,
+	&quot;&#195;&#167;&quot; =&gt; &quot;&#195;&#8225;&quot;,	&quot;&#195;&#166;&quot; =&gt; &quot;&#195;&#8224;&quot;,	&quot;&#195;&#165;&quot; =&gt; &quot;&#195;&#8230;&quot;,
+	&quot;&#195;&#164;&quot; =&gt; &quot;&#195;&#8222;&quot;,	&quot;&#195;&#163;&quot; =&gt; &quot;&#195;&#402;&quot;,	&quot;&#195;&#162;&quot; =&gt; &quot;&#195;&#8218;&quot;,
+	&quot;&#195;&#161;&quot; =&gt; &quot;&#195;*&quot;,	&quot;&#195; &quot; =&gt; &quot;&#195;&#8364;&quot;,	&quot;&#194;&#181;&quot; =&gt; &quot;&#206;&#339;&quot;,
+	&quot;z&quot; =&gt; &quot;Z&quot;,		&quot;y&quot; =&gt; &quot;Y&quot;,		&quot;x&quot; =&gt; &quot;X&quot;,
+	&quot;w&quot; =&gt; &quot;W&quot;,		&quot;v&quot; =&gt; &quot;V&quot;,		&quot;u&quot; =&gt; &quot;U&quot;,
+	&quot;t&quot; =&gt; &quot;T&quot;,		&quot;s&quot; =&gt; &quot;S&quot;,		&quot;r&quot; =&gt; &quot;R&quot;,
+	&quot;q&quot; =&gt; &quot;Q&quot;,		&quot;p&quot; =&gt; &quot;P&quot;,		&quot;o&quot; =&gt; &quot;O&quot;,
+	&quot;n&quot; =&gt; &quot;N&quot;,		&quot;m&quot; =&gt; &quot;M&quot;,		&quot;l&quot; =&gt; &quot;L&quot;,
+	&quot;k&quot; =&gt; &quot;K&quot;,		&quot;j&quot; =&gt; &quot;J&quot;,		&quot;i&quot; =&gt; &quot;I&quot;,
+	&quot;h&quot; =&gt; &quot;H&quot;,		&quot;g&quot; =&gt; &quot;G&quot;,		&quot;f&quot; =&gt; &quot;F&quot;,
+	&quot;e&quot; =&gt; &quot;E&quot;,		&quot;d&quot; =&gt; &quot;D&quot;,		&quot;c&quot; =&gt; &quot;C&quot;,
+	&quot;b&quot; =&gt; &quot;B&quot;,		&quot;a&quot; =&gt; &quot;A&quot;,
+);
+
+class All_in_One_SEO_Pack {
+	
+ 	var $version = &quot;1.4.7.4&quot;;
+ 	
+ 	/** Max numbers of chars in auto-generated description */
+ 	var $maximum_description_length = 160;
+ 	
+ 	/** Minimum number of chars an excerpt should be so that it can be used
+ 	 * as description. Touch only if you know what you're doing
+ 	 */
+ 	var $minimum_description_length = 1;
+ 	
+ 	var $ob_start_detected = false;
+ 	
+ 	var $title_start = -1;
+ 	
+ 	var $title_end = -1;
+ 	
+ 	/** The title before rewriting */
+ 	var $orig_title = '';
+ 	
+ 	/** Temp filename for the latest version. */
+ 	var $upgrade_filename = 'temp.zip';
+ 	
+ 	/** Where to extract the downloaded newest version. */
+ 	var $upgrade_folder;
+ 	
+ 	/** Any error in upgrading. */
+ 	var $upgrade_error;
+ 	
+ 	/** Which zip to download in order to upgrade .*/
+ 	var $upgrade_url = 'http://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip';
+ 	
+ 	/** Filename of log file. */
+ 	var $log_file;
+ 	
+ 	/** Flag whether there should be logging. */
+ 	var $do_log;
+ 	
+ 	var $wp_version;
+ 	
+	function All_in_One_SEO_Pack() {
+		global $wp_version;
+		$this-&gt;wp_version = $wp_version;
+		
+		$this-&gt;log_file = dirname(__FILE__) . '/all_in_one_seo_pack.log';
+		if (get_option('aiosp_do_log')) {
+			$this-&gt;do_log = true;
+		} else {
+			$this-&gt;do_log = false;
+		}
+
+		$this-&gt;upgrade_filename = dirname(__FILE__) . '/' . $this-&gt;upgrade_filename;
+		$this-&gt;upgrade_folder = dirname(__FILE__);
+	}
+	
+	/**      
+	 * Convert a string to lower case
+	 * Compatible with mb_strtolower(), an UTF-8 friendly replacement for strtolower()
+	 */
+	function strtolower($str) {
+		global $UTF8_TABLES;
+		return strtr($str, $UTF8_TABLES['strtolower']);
+	}
+	
+	/**      
+	 * Convert a string to upper case
+	 * Compatible with mb_strtoupper(), an UTF-8 friendly replacement for strtoupper()
+	 */
+	function strtoupper($str) {
+		global $UTF8_TABLES;
+		return strtr($str, $UTF8_TABLES['strtoupper']);
+	}	
+	
+	
+	function template_redirect() {
+		global $wp_query;
+		$post = $wp_query-&gt;get_queried_object();
+
+		if (is_feed()) {
+			return;
+		}
+
+		if (is_single() || is_page()) {
+		    $aiosp_disable = htmlspecialchars(stripcslashes(get_post_meta($post-&gt;ID, 'aiosp_disable', true)));
+		    if ($aiosp_disable) {
+		    	return;
+		    }
+		}
+
+		if (get_option('aiosp_rewrite_titles')) {
+			ob_start(array($this, 'output_callback_for_title'));
+		}
+	}
+	
+	function output_callback_for_title($content) {
+		return $this-&gt;rewrite_title($content);
+	}
+
+	function init() {
+		if (function_exists('load_plugin_textdomain')) {
+			load_plugin_textdomain('all_in_one_seo_pack', 'wp-content/plugins/all-in-one-seo-pack');
+		}
+	}
+
+	function is_static_front_page() {
+		global $wp_query;
+		$post = $wp_query-&gt;get_queried_object();
+		return get_option('show_on_front') == 'page' &amp;&amp; is_page() &amp;&amp; $post-&gt;ID == get_option('page_on_front');
+	}
+	
+	function is_static_posts_page() {
+		global $wp_query;
+		$post = $wp_query-&gt;get_queried_object();
+		return get_option('show_on_front') == 'page' &amp;&amp; is_home() &amp;&amp; $post-&gt;ID == get_option('page_for_posts');
+	}
+	
+	function get_base() {
+   		 return '/'.end(explode('/', str_replace(array('\\','/all_in_one_seo_pack.php'),array('/',''),__FILE__)));
+	}
+
+	function admin_head() {
+		$home = get_settings('siteurl');
+		$stylesheet = $home.'/wp-content/plugins' . $this-&gt;get_base() . '/css/all_in_one_seo_pack.css';
+		echo('&lt;link rel=&quot;stylesheet&quot; href=&quot;' . $stylesheet . '&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;');
+	}
+	
+	function wp_head() {
+		if (is_feed()) {
+			return;
+		}
+		
+		global $wp_query;
+		$post = $wp_query-&gt;get_queried_object();
+		$meta_string = null;
+		
+		//echo(&quot;wp_head() &quot; . wp_title('', false) . &quot; is_home() =&gt; &quot; . is_home() . &quot;, is_page() =&gt; &quot; . is_page() . &quot;, is_single() =&gt; &quot; . is_single() . &quot;, is_static_front_page() =&gt; &quot; . $this-&gt;is_static_front_page() . &quot;, is_static_posts_page() =&gt; &quot; . $this-&gt;is_static_posts_page());
+
+		if (is_single() || is_page()) {
+		    $aiosp_disable = htmlspecialchars(stripcslashes(get_post_meta($post-&gt;ID, 'aiosp_disable', true)));
+		    if ($aiosp_disable) {
+		    	return;
+		    }
+		}
+		
+		if (get_option('aiosp_rewrite_titles')) {
+			// make the title rewrite as short as possible
+			if (function_exists('ob_list_handlers')) {
+				$active_handlers = ob_list_handlers();
+			} else {
+				$active_handlers = array();
+			}
+			if (sizeof($active_handlers) &gt; 0 &amp;&amp;
+				strtolower($active_handlers[sizeof($active_handlers) - 1]) ==
+				strtolower('All_in_One_SEO_Pack::output_callback_for_title')) {
+				ob_end_flush();
+			} else {
+				$this-&gt;log(&quot;another plugin interfering?&quot;);
+				// if we get here there *could* be trouble with another plugin :(
+				$this-&gt;ob_start_detected = true;
+				if (function_exists('ob_list_handlers')) {
+					foreach (ob_list_handlers() as $handler) {
+						$this-&gt;log(&quot;detected output handler $handler&quot;);
+					}
+				}
+			}
+		}
+		
+		echo &quot;\n&lt;!-- all in one seo pack $this-&gt;version &quot;;
+		if ($this-&gt;ob_start_detected) {
+			echo &quot;ob_start_detected &quot;;
+		}
+		echo &quot;[$this-&gt;title_start,$this-&gt;title_end] &quot;;
+		echo &quot;--&gt;\n&quot;;
+		
+		if ((is_home() &amp;&amp; get_option('aiosp_home_keywords')) || $this-&gt;is_static_front_page()) {
+			$keywords = trim($this-&gt;internationalize(get_option('aiosp_home_keywords')));
+		} else {
+			$keywords = $this-&gt;get_all_keywords();
+		}
+		if (is_single() || is_page()) {
+            if ($this-&gt;is_static_front_page()) {
+				$description = trim(stripcslashes($this-&gt;internationalize(get_option('aiosp_home_description'))));
+            } else {
+            	$description = $this-&gt;get_post_description($post);
+            }
+		} else if (is_home()) {
+			$description = trim(stripcslashes($this-&gt;internationalize(get_option('aiosp_home_description'))));
+		} else if (is_category()) {
+			$description = $this-&gt;internationalize(category_description());
+		}
+		
+		if (isset($description) &amp;&amp; (strlen($description) &gt; $this-&gt;minimum_description_length) &amp;&amp; !(is_home() &amp;&amp; is_paged())) {
+			$description = trim(strip_tags($description));
+			$description = str_replace('&quot;', '', $description);
+			
+			// replace newlines on mac / windows?
+			$description = str_replace(&quot;\r\n&quot;, ' ', $description);
+			
+			// maybe linux uses this alone
+			$description = str_replace(&quot;\n&quot;, ' ', $description);
+			
+			if (isset($meta_string)) {
+				//$meta_string .= &quot;\n&quot;;
+			} else {
+				$meta_string = '';
+			}
+			
+			// description format
+            $description_format = get_option('aiosp_description_format');
+            if (!isset($description_format) || empty($description_format)) {
+            	$description_format = &quot;%description%&quot;;
+            }
+            $description = str_replace('%description%', $description, $description_format);
+            $description = str_replace('%blog_title%', get_bloginfo('name'), $description);
+            $description = str_replace('%blog_description%', get_bloginfo('description'), $description);
+            $description = str_replace('%wp_title%', $this-&gt;get_original_title(), $description);
+            
+            $meta_string .= sprintf(&quot;&lt;meta name=\&quot;description\&quot; content=\&quot;%s\&quot; /&gt;&quot;, $description);
+		}
+
+		if (isset ($keywords) &amp;&amp; !empty($keywords) &amp;&amp; !(is_home() &amp;&amp; is_paged())) {
+			if (isset($meta_string)) {
+				$meta_string .= &quot;\n&quot;;
+			}
+			$meta_string .= sprintf(&quot;&lt;meta name=\&quot;keywords\&quot; content=\&quot;%s\&quot; /&gt;&quot;, $keywords);
+		}
+
+		if (function_exists('is_tag')) {
+			$is_tag = is_tag();
+		}
+		
+		if ((is_category() &amp;&amp; get_option('aiosp_category_noindex')) ||
+			(!is_category() &amp;&amp; is_archive() &amp;&amp;!$is_tag &amp;&amp; get_option('aiosp_archive_noindex')) ||
+			(get_option('aiosp_tags_noindex') &amp;&amp; $is_tag)) {
+			if (isset($meta_string)) {
+				$meta_string .= &quot;\n&quot;;
+			}
+			$meta_string .= '&lt;meta name=&quot;robots&quot; content=&quot;noindex,follow&quot; /&gt;';
+		}
+		
+		$page_meta = stripcslashes(get_option('aiosp_page_meta_tags'));
+		$post_meta = stripcslashes(get_option('aiosp_post_meta_tags'));
+		$home_meta = stripcslashes(get_option('aiosp_home_meta_tags'));
+		if (is_page() &amp;&amp; isset($page_meta) &amp;&amp; !empty($page_meta)) {
+			if (isset($meta_string)) {
+				$meta_string .= &quot;\n&quot;;
+			}
+			echo &quot;\n$page_meta&quot;;
+		}
+		
+		if (is_single() &amp;&amp; isset($post_meta) &amp;&amp; !empty($post_meta)) {
+			if (isset($meta_string)) {
+				$meta_string .= &quot;\n&quot;;
+			}
+			$meta_string .= &quot;$post_meta&quot;;
+		}
+		
+		if (is_home() &amp;&amp; !empty($home_meta)) {
+			if (isset($meta_string)) {
+				$meta_string .= &quot;\n&quot;;
+			}
+			$meta_string .= &quot;$home_meta&quot;;
+		}
+		
+		if ($meta_string != null) {
+			echo &quot;$meta_string\n&quot;;
+		}
+		
+		echo &quot;&lt;!-- /all in one seo pack --&gt;\n&quot;;
+	}
+	
+	function get_post_description($post) {
+	    $description = trim(stripcslashes($this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;description&quot;, true))));
+		if (!$description) {
+			$description = $this-&gt;trim_excerpt_without_filters_full_length($this-&gt;internationalize($post-&gt;post_excerpt));
+			if (!$description &amp;&amp; get_option(&quot;aiosp_generate_descriptions&quot;)) {
+				$description = $this-&gt;trim_excerpt_without_filters($this-&gt;internationalize($post-&gt;post_content));
+			}				
+		}
+		
+		// &quot;internal whitespace trim&quot;
+		$description = preg_replace(&quot;/\s\s+/&quot;, &quot; &quot;, $description);
+		
+		return $description;
+	}
+	
+	function replace_title($content, $title) {
+		$title = trim(strip_tags($title));
+		
+		$title_tag_start = &quot;&lt;title&gt;&quot;;
+		$title_tag_end = &quot;&lt;/title&gt;&quot;;
+		$len_start = strlen($title_tag_start);
+		$len_end = strlen($title_tag_end);
+		$title = stripcslashes(trim($title));
+		$start = strpos($content, $title_tag_start);
+		$end = strpos($content, $title_tag_end);
+		
+		$this-&gt;title_start = $start;
+		$this-&gt;title_end = $end;
+		$this-&gt;orig_title = $title;
+		
+		if ($start &amp;&amp; $end) {
+			$header = substr($content, 0, $start + $len_start) . $title .  substr($content, $end);
+		} else {
+			// this breaks some sitemap plugins (like wpg2)
+			//$header = $content . &quot;&lt;title&gt;$title&lt;/title&gt;&quot;;
+			
+			$header = $content;
+		}
+		
+		return $header;
+	}
+	
+	function internationalize($in) {
+		if (function_exists('langswitch_filter_langs_with_message')) {
+			$in = langswitch_filter_langs_with_message($in);
+		}
+		if (function_exists('polyglot_filter')) {
+			$in = polyglot_filter($in);
+		}
+		if (function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')) {
+			$in = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($in);
+		}
+		$in = apply_filters('localization', $in);
+		return $in;
+	}
+	
+	/** @return The original title as delivered by WP (well, in most cases) */
+	function get_original_title() {
+		global $wp_query;
+		if (!$wp_query) {
+			return null;	
+		}
+		
+		$post = $wp_query-&gt;get_queried_object();
+		
+		// the_search_query() is not suitable, it cannot just return
+		global $s;
+		
+		$title = null;
+		
+		if (is_home()) {
+			$title = get_option('blogname');
+		} else if (is_single()) {
+			$title = $this-&gt;internationalize(wp_title('', false));
+		} else if (is_search() &amp;&amp; isset($s) &amp;&amp; !empty($s)) {
+			if (function_exists('attribute_escape')) {
+				$search = attribute_escape(stripcslashes($s));
+			} else {
+				$search = wp_specialchars(stripcslashes($s), true);
+			}
+			$search = $this-&gt;capitalize($search);
+			$title = $search;
+		} else if (is_category() &amp;&amp; !is_feed()) {
+			$category_description = $this-&gt;internationalize(category_description());
+			$category_name = ucwords($this-&gt;internationalize(single_cat_title('', false)));
+			$title = $category_name;
+		} else if (is_page()) {
+			$title = $this-&gt;internationalize(wp_title('', false));
+		} else if (function_exists('is_tag') &amp;&amp; is_tag()) {
+			global $utw;
+			if ($utw) {
+				$tags = $utw-&gt;GetCurrentTagSet();
+				$tag = $tags[0]-&gt;tag;
+		        $tag = str_replace('-', ' ', $tag);
+			} else {
+				// wordpress &gt; 2.3
+				$tag = $this-&gt;internationalize(wp_title('', false));
+			}
+			if ($tag) {
+				$title = $tag;
+			}
+		} else if (is_archive()) {
+			$title = $this-&gt;internationalize(wp_title('', false));
+		} else if (is_404()) {
+		    $title_format = get_option('aiosp_404_title_format');
+		    $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
+		    $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
+		    $new_title = str_replace('%request_url%', $_SERVER['REQUEST_URI'], $new_title);
+		    $new_title = str_replace('%request_words%', $this-&gt;request_as_words($_SERVER['REQUEST_URI']), $new_title);
+				$title = $new_title;
+			}
+			
+			return trim($title);
+		}
+	
+	function paged_title($title) {
+		// the page number if paged
+		global $paged;
+		
+		// simple tagging support
+		global $STagging;
+
+		if (is_paged() || (isset($STagging) &amp;&amp; $STagging-&gt;is_tag_view() &amp;&amp; $paged)) {
+			$part = $this-&gt;internationalize(get_option('aiosp_paged_format'));
+			if (isset($part) || !empty($part)) {
+				$part = &quot; &quot; . trim($part);
+				$part = str_replace('%page%', $paged, $part);
+				$this-&gt;log(&quot;paged_title() [$title] [$part]&quot;);
+				$title .= $part;
+			}
+		}
+		return $title;
+	}
+
+	function rewrite_title($header) {
+		global $wp_query;
+		if (!$wp_query) {
+			$header .= &quot;&lt;!-- no wp_query found! --&gt;\n&quot;;
+			return $header;	
+		}
+		
+		$post = $wp_query-&gt;get_queried_object();
+		
+		// the_search_query() is not suitable, it cannot just return
+		global $s;
+		
+		// simple tagging support
+		global $STagging;
+
+		if (is_home()) {
+			$title = $this-&gt;internationalize(get_option('aiosp_home_title'));
+			if (empty($title)) {
+				$title = $this-&gt;internationalize(get_option('blogname'));
+			}
+			$title = $this-&gt;paged_title($title);
+			$header = $this-&gt;replace_title($header, $title);
+		} else if (is_single()) {
+			// we're not in the loop :(
+			$authordata = get_userdata($post-&gt;post_author);
+			$categories = get_the_category();
+			$category = '';
+			if (count($categories) &gt; 0) {
+				$category = $categories[0]-&gt;cat_name;
+			}
+			$title = $this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;title&quot;, true));
+			if (!$title) {
+				$title = $this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;title_tag&quot;, true));
+				if (!$title) {
+					$title = $this-&gt;internationalize(wp_title('', false));
+				}
+			}
+            $title_format = get_option('aiosp_post_title_format');
+            $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
+            $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
+            $new_title = str_replace('%post_title%', $title, $new_title);
+            $new_title = str_replace('%category%', $category, $new_title);
+            $new_title = str_replace('%category_title%', $category, $new_title);
+            $new_title = str_replace('%post_author_login%', $authordata-&gt;user_login, $new_title);
+            $new_title = str_replace('%post_author_nicename%', $authordata-&gt;user_nicename, $new_title);
+            $new_title = str_replace('%post_author_firstname%', ucwords($authordata-&gt;first_name), $new_title);
+            $new_title = str_replace('%post_author_lastname%', ucwords($authordata-&gt;last_name), $new_title);
+			$title = $new_title;
+			$title = trim($title);
+			$header = $this-&gt;replace_title($header, $title);
+		} else if (is_search() &amp;&amp; isset($s) &amp;&amp; !empty($s)) {
+			if (function_exists('attribute_escape')) {
+				$search = attribute_escape(stripcslashes($s));
+			} else {
+				$search = wp_specialchars(stripcslashes($s), true);
+			}
+			$search = $this-&gt;capitalize($search);
+            $title_format = get_option('aiosp_search_title_format');
+            $title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
+            $title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $title);
+            $title = str_replace('%search%', $search, $title);
+			$header = $this-&gt;replace_title($header, $title);
+		} else if (is_category() &amp;&amp; !is_feed()) {
+			$category_description = $this-&gt;internationalize(category_description());
+			$category_name = ucwords($this-&gt;internationalize(single_cat_title('', false)));
+            $title_format = get_option('aiosp_category_title_format');
+            $title = str_replace('%category_title%', $category_name, $title_format);
+            $title = str_replace('%category_description%', $category_description, $title);
+            $title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title);
+            $title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $title);
+            $title = $this-&gt;paged_title($title);
+			$header = $this-&gt;replace_title($header, $title);
+		} else if (is_page()) {
+			// we're not in the loop :(
+			$authordata = get_userdata($post-&gt;post_author);
+			if ($this-&gt;is_static_front_page()) {
+				if ($this-&gt;internationalize(get_option('aiosp_home_title'))) {
+					$header = $this-&gt;replace_title($header, $this-&gt;internationalize(get_option('aiosp_home_title')));
+				}
+			} else {
+				$title = $this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;title&quot;, true));
+				if (!$title) {
+					$title = $this-&gt;internationalize(wp_title('', false));
+				}
+	            $title_format = get_option('aiosp_page_title_format');
+	            $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
+	            $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
+	            $new_title = str_replace('%page_title%', $title, $new_title);
+	            $new_title = str_replace('%page_author_login%', $authordata-&gt;user_login, $new_title);
+	            $new_title = str_replace('%page_author_nicename%', $authordata-&gt;user_nicename, $new_title);
+	            $new_title = str_replace('%page_author_firstname%', ucwords($authordata-&gt;first_name), $new_title);
+	            $new_title = str_replace('%page_author_lastname%', ucwords($authordata-&gt;last_name), $new_title);
+				$title = trim($new_title);
+				$header = $this-&gt;replace_title($header, $title);
+			}
+		} else if (function_exists('is_tag') &amp;&amp; is_tag()) {
+			global $utw;
+			if ($utw) {
+				$tags = $utw-&gt;GetCurrentTagSet();
+				$tag = $tags[0]-&gt;tag;
+	            $tag = str_replace('-', ' ', $tag);
+			} else {
+				// wordpress &gt; 2.3
+				$tag = $this-&gt;internationalize(wp_title('', false));
+			}
+			if ($tag) {
+	            $tag = $this-&gt;capitalize($tag);
+	            $title_format = get_option('aiosp_tag_title_format');
+	            $title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
+	            $title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $title);
+	            $title = str_replace('%tag%', $tag, $title);
+	            $title = $this-&gt;paged_title($title);
+				$header = $this-&gt;replace_title($header, $title);
+			}
+		} else if (isset($STagging) &amp;&amp; $STagging-&gt;is_tag_view()) { // simple tagging support
+			$tag = $STagging-&gt;search_tag;
+			if ($tag) {
+	            $tag = $this-&gt;capitalize($tag);
+	            $title_format = get_option('aiosp_tag_title_format');
+	            $title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
+	            $title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $title);
+	            $title = str_replace('%tag%', $tag, $title);
+	            $title = $this-&gt;paged_title($title);
+				$header = $this-&gt;replace_title($header, $title);
+			}
+		} else if (is_archive()) {
+			$date = $this-&gt;internationalize(wp_title('', false));
+            $title_format = get_option('aiosp_archive_title_format');
+            $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
+            $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
+            $new_title = str_replace('%date%', $date, $new_title);
+			$title = trim($new_title);
+            $title = $this-&gt;paged_title($title);
+			$header = $this-&gt;replace_title($header, $title);
+		} else if (is_404()) {
+            $title_format = get_option('aiosp_404_title_format');
+            $new_title = str_replace('%blog_title%', $this-&gt;internationalize(get_bloginfo('name')), $title_format);
+            $new_title = str_replace('%blog_description%', $this-&gt;internationalize(get_bloginfo('description')), $new_title);
+            $new_title = str_replace('%request_url%', $_SERVER['REQUEST_URI'], $new_title);
+            $new_title = str_replace('%request_words%', $this-&gt;request_as_words($_SERVER['REQUEST_URI']), $new_title);
+			$header = $this-&gt;replace_title($header, $new_title);
+		}
+		
+		return $header;
+
+	}
+	
+	/**
+	 * @return User-readable nice words for a given request.
+	 */
+	function request_as_words($request) {
+		$request = htmlspecialchars($request);
+		$request = str_replace('.html', ' ', $request);
+		$request = str_replace('.htm', ' ', $request);
+		$request = str_replace('.', ' ', $request);
+		$request = str_replace('/', ' ', $request);
+		$request_a = explode(' ', $request);
+		$request_new = array();
+		foreach ($request_a as $token) {
+			$request_new[] = ucwords(trim($token));
+		}
+		$request = implode(' ', $request_new);
+		return $request;
+	}
+	
+	function capitalize($s) {
+		$s = trim($s);
+		$tokens = explode(' ', $s);
+		while (list($key, $val) = each($tokens)) {
+			$tokens[$key] = trim($tokens[$key]);
+			$tokens[$key] = strtoupper(substr($tokens[$key], 0, 1)) . substr($tokens[$key], 1);
+		}
+		$s = implode(' ', $tokens);
+		return $s;
+	}
+	
+	function trim_excerpt_without_filters($text) {
+		$text = str_replace(']]&gt;', ']]&amp;gt;', $text);
+                $text = preg_replace( '|\[(.+?)\](.+?\[/\\1\])?|s', '', $text );
+		$text = strip_tags($text);
+		$max = $this-&gt;maximum_description_length;
+		
+		if ($max &lt; strlen($text)) {
+			while($text[$max] != ' ' &amp;&amp; $max &gt; $this-&gt;minimum_description_length) {
+				$max--;
+			}
+		}
+		$text = substr($text, 0, $max);
+		return trim(stripcslashes($text));
+	}
+	
+	function trim_excerpt_without_filters_full_length($text) {
+		$text = str_replace(']]&gt;', ']]&amp;gt;', $text);
+                $text = preg_replace( '|\[(.+?)\](.+?\[/\\1\])?|s', '', $text );
+		$text = strip_tags($text);
+		return trim(stripcslashes($text));
+	}
+	
+	/**
+	 * @return comma-separated list of unique keywords
+	 */
+	function get_all_keywords() {
+		global $posts;
+
+		if (is_404()) {
+			return null;
+		}
+		
+		// if we are on synthetic pages
+		if (!is_home() &amp;&amp; !is_page() &amp;&amp; !is_single() &amp;&amp;!$this-&gt;is_static_front_page() &amp;&amp; !$this-&gt;is_static_posts_page()) {
+			return null;
+		}
+
+	    $keywords = array();
+	    if (is_array($posts)) {
+	        foreach ($posts as $post) {
+	            if ($post) {
+
+	                // custom field keywords
+	                $keywords_a = $keywords_i = null;
+	                $description_a = $description_i = null;
+	                $id = $post-&gt;ID;
+		            $keywords_i = stripcslashes($this-&gt;internationalize(get_post_meta($post-&gt;ID, &quot;keywords&quot;, true)));
+	                $keywords_i = str_replace('&quot;', '', $keywords_i);
+	                if (isset($keywords_i) &amp;&amp; !empty($keywords_i)) {
+	                	$traverse = explode(',', $keywords_i);
+	                	foreach ($traverse as $keyword) {
+	                		$keywords[] = $keyword;
+	                	}
+	                }
+	                
+	                // WP 2.3 tags
+	                if (function_exists('get_the_tags')) {
+	                	$tags = get_the_tags($post-&gt;ID);
+	                	if ($tags &amp;&amp; is_array($tags)) {
+		                	foreach ($tags as $tag) {
+		                		$keywords[] = $this-&gt;internationalize($tag-&gt;name);
+		                	}
+	                	}
+	                }
+
+	                // Ultimate Tag Warrior integration
+	                global $utw;
+	                if ($utw) {
+	                	$tags = $utw-&gt;GetTagsForPost($post);
+	                	if (is_array($tags)) {
+		                	foreach ($tags as $tag) {
+								$tag = $tag-&gt;tag;
+								$tag = str_replace('_',' ', $tag);
+								$tag = str_replace('-',' ',$tag);
+								$tag = stripcslashes($tag);
+		                		$keywords[] = $tag;
+		                	}
+	                	}
+	                }
+	                
+	                // autometa
+	                $autometa = stripcslashes(get_post_meta($post-&gt;ID, &quot;autometa&quot;, true));
+	                if (isset($autometa) &amp;&amp; !empty($autometa)) {
+	                	$autometa_array = explode(' ', $autometa);
+	                	foreach ($autometa_array as $e) {
+	                		$keywords[] = $e;
+	                	}
+	                }
+
+	            	if (get_option('aiosp_use_categories') &amp;&amp; !is_page()) {
+		                $categories = get_the_category($post-&gt;ID);
+		                foreach ($categories as $category) {
+		                	$keywords[] = $this-&gt;internationalize($category-&gt;cat_name);
+		                }
+	            	}
+
+	            }
+	        }
+	    }
+	    
+	    return $this-&gt;get_unique_keywords($keywords);
+	}
+	
+	function get_meta_keywords() {
+		global $posts;
+
+	    $keywords = array();
+	    if (is_array($posts)) {
+	        foreach ($posts as $post) {
+	            if ($post) {
+	                // custom field keywords
+	                $keywords_a = $keywords_i = null;
+	                $description_a = $description_i = null;
+	                $id = $post-&gt;ID;
+		            $keywords_i = stripcslashes(get_post_meta($post-&gt;ID, &quot;keywords&quot;, true));
+	                $keywords_i = str_replace('&quot;', '', $keywords_i);
+	                if (isset($keywords_i) &amp;&amp; !empty($keywords_i)) {
+	                    $keywords[] = $keywords_i;
+	                }
+	            }
+	        }
+	    }
+	    
+	    return $this-&gt;get_unique_keywords($keywords);
+	}
+	
+	function get_unique_keywords($keywords) {
+		$small_keywords = array();
+		foreach ($keywords as $word) {
+			if (function_exists('mb_strtolower'))			
+				$small_keywords[] = mb_strtolower($word);
+			else 
+				$small_keywords[] = $this-&gt;strtolower($word);
+		}
+		$keywords_ar = array_unique($small_keywords);
+		return implode(',', $keywords_ar);
+	}
+	
+	function get_url($url)	{
+		if (function_exists('file_get_contents')) {
+			$file = file_get_contents($url);
+		} else {
+	        $curl = curl_init($url);
+	        curl_setopt($curl, CURLOPT_HEADER, 0);
+	        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+	        $file = curl_exec($curl);
+	        curl_close($curl);
+	    }
+	    return $file;
+	}
+	
+	function log($message) {
+		if ($this-&gt;do_log) {
+			error_log(date('Y-m-d H:i:s') . &quot; &quot; . $message . &quot;\n&quot;, 3, $this-&gt;log_file);
+		}
+	}
+
+	function download_newest_version() {
+		$success = true;
+	    $file_content = $this-&gt;get_url($this-&gt;upgrade_url);
+	    if ($file_content === false) {
+	    	$this-&gt;upgrade_error = sprintf(__(&quot;Could not download distribution (%s)&quot;), $this-&gt;upgrade_url);
+			$success = false;
+	    } else if (strlen($file_content) &lt; 100) {
+	    	$this-&gt;upgrade_error = sprintf(__(&quot;Could not download distribution (%s): %s&quot;), $this-&gt;upgrade_url, $file_content);
+			$success = false;
+	    } else {
+	    	$this-&gt;log(sprintf(&quot;filesize of download ZIP: %d&quot;, strlen($file_content)));
+		    $fh = @fopen($this-&gt;upgrade_filename, 'w');
+		    $this-&gt;log(&quot;fh is $fh&quot;);
+		    if (!$fh) {
+		    	$this-&gt;upgrade_error = sprintf(__(&quot;Could not open %s for writing&quot;), $this-&gt;upgrade_filename);
+		    	$this-&gt;upgrade_error .= &quot;&lt;br /&gt;&quot;;
+		    	$this-&gt;upgrade_error .= sprintf(__(&quot;Please make sure %s is writable&quot;), $this-&gt;upgrade_folder);
+		    	$success = false;
+		    } else {
+		    	$bytes_written = @fwrite($fh, $file_content);
+			    $this-&gt;log(&quot;wrote $bytes_written bytes&quot;);
+		    	if (!$bytes_written) {
+			    	$this-&gt;upgrade_error = sprintf(__(&quot;Could not write to %s&quot;), $this-&gt;upgrade_filename);
+			    	$success = false;
+		    	}
+		    }
+		    if ($success) {
+		    	fclose($fh);
+		    }
+	    }
+	    return $success;
+	}
+
+	function install_newest_version() {
+		$success = $this-&gt;download_newest_version();
+	    if ($success) {
+		    $success = $this-&gt;extract_plugin();
+		    unlink($this-&gt;upgrade_filename);
+	    }
+	    return $success;
+	}
+
+	function extract_plugin() {
+	    if (!class_exists('PclZip')) {
+	        require_once ('pclzip.lib.php');
+	    }
+	    $archive = new PclZip($this-&gt;upgrade_filename);
+	    $files = $archive-&gt;extract(PCLZIP_OPT_STOP_ON_ERROR, PCLZIP_OPT_REPLACE_NEWER, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_PATH, $this-&gt;upgrade_folder);
+	    $this-&gt;log(&quot;files is $files&quot;);
+	    if (is_array($files)) {
+	    	$num_extracted = sizeof($files);
+		    $this-&gt;log(&quot;extracted $num_extracted files to $this-&gt;upgrade_folder&quot;);
+		    $this-&gt;log(print_r($files, true));
+	    	return true;
+	    } else {
+	    	$this-&gt;upgrade_error = $archive-&gt;errorInfo();
+	    	return false;
+	    }
+	}
+	
+	/** crude approximization of whether current user is an admin */
+	function is_admin() {
+		return current_user_can('level_8');
+	}
+	
+	function is_directory_writable($directory) {
+		$filename = $directory . '/' . 'tmp_file_' . time();
+		$fh = @fopen($filename, 'w');
+		if (!$fh) {
+			return false;
+		}
+		
+		$written = fwrite($fh, &quot;test&quot;);
+		fclose($fh);
+		unlink($filename);
+		if ($written) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	function is_upgrade_directory_writable() {
+		//return $this-&gt;is_directory_writable($this-&gt;upgrade_folder);
+		// let's assume it is
+		return true;
+	}
+
+	function post_meta_tags($id) {
+	    $awmp_edit = $_POST[&quot;aiosp_edit&quot;];
+	    if (isset($awmp_edit) &amp;&amp; !empty($awmp_edit)) {
+		    $keywords = $_POST[&quot;aiosp_keywords&quot;];
+		    $description = $_POST[&quot;aiosp_description&quot;];
+		    $title = $_POST[&quot;aiosp_title&quot;];
+		    $aiosp_meta = $_POST[&quot;aiosp_meta&quot;];
+		    $aiosp_disable = $_POST[&quot;aiosp_disable&quot;];
+
+		    delete_post_meta($id, 'keywords');
+		    delete_post_meta($id, 'description');
+		    delete_post_meta($id, 'title');
+		    if ($this-&gt;is_admin()) {
+		    	delete_post_meta($id, 'aiosp_disable');
+		    }
+		    //delete_post_meta($id, 'aiosp_meta');
+
+		    if (isset($keywords) &amp;&amp; !empty($keywords)) {
+			    add_post_meta($id, 'keywords', $keywords);
+		    }
+		    if (isset($description) &amp;&amp; !empty($description)) {
+			    add_post_meta($id, 'description', $description);
+		    }
+		    if (isset($title) &amp;&amp; !empty($title)) {
+			    add_post_meta($id, 'title', $title);
+		    }
+		    if (isset($aiosp_disable) &amp;&amp; !empty($aiosp_disable) &amp;&amp; $this-&gt;is_admin()) {
+			    add_post_meta($id, 'aiosp_disable', $aiosp_disable);
+		    }
+		    /*
+		    if (isset($aiosp_meta) &amp;&amp; !empty($aiosp_meta)) {
+			    add_post_meta($id, 'aiosp_meta', $aiosp_meta);
+		    }
+		    */
+	    }
+	}
+
+	function edit_category($id) {
+		global $wpdb;
+		$id = $wpdb-&gt;escape($id);
+	    $awmp_edit = $_POST[&quot;aiosp_edit&quot;];
+	    if (isset($awmp_edit) &amp;&amp; !empty($awmp_edit)) {
+		    $keywords = $wpdb-&gt;escape($_POST[&quot;aiosp_keywords&quot;]);
+		    $title = $wpdb-&gt;escape($_POST[&quot;aiosp_title&quot;]);
+		    $old_category = $wpdb-&gt;get_row(&quot;select * from $this-&gt;table_categories where category_id=$id&quot;, OBJECT);
+		    if ($old_category) {
+		    	$wpdb-&gt;query(&quot;update $this-&gt;table_categories
+		    			set meta_title='$title', meta_keywords='$keywords'
+		    			where category_id=$id&quot;);
+		    } else {
+		    	$wpdb-&gt;query(&quot;insert into $this-&gt;table_categories(meta_title, meta_keywords, category_id)
+		    			values ('$title', '$keywords', $id&quot;);
+		    }
+		    //$wpdb-&gt;query(&quot;insert into $this-&gt;table_categories&quot;)
+	    	/*
+		    delete_post_meta($id, 'keywords');
+		    delete_post_meta($id, 'description');
+		    delete_post_meta($id, 'title');
+
+		    if (isset($keywords) &amp;&amp; !empty($keywords)) {
+			    add_post_meta($id, 'keywords', $keywords);
+		    }
+		    if (isset($description) &amp;&amp; !empty($description)) {
+			    add_post_meta($id, 'description', $description);
+		    }
+		    if (isset($title) &amp;&amp; !empty($title)) {
+			    add_post_meta($id, 'title', $title);
+		    }
+		    */
+	    }
+	}
+
+	/**
+	 * @deprecated This was for the feature of dedicated meta tags for categories which never went mainstream.
+	 */
+	function edit_category_form() {
+	    global $post;
+	    $keywords = stripcslashes(get_post_meta($post-&gt;ID, 'keywords', true));
+	    $title = stripcslashes(get_post_meta($post-&gt;ID, 'title', true));
+	    $description = stripcslashes(get_post_meta($post-&gt;ID, 'description', true));
+		?&gt;
+		&lt;input value=&quot;aiosp_edit&quot; type=&quot;hidden&quot; name=&quot;aiosp_edit&quot; /&gt;
+		&lt;table class=&quot;editform&quot; width=&quot;100%&quot; cellspacing=&quot;2&quot; cellpadding=&quot;5&quot;&gt;
+		&lt;tr&gt;
+		&lt;th width=&quot;33%&quot; scope=&quot;row&quot; valign=&quot;top&quot;&gt;
+		&lt;a href=&quot;http://wp.uberdose.com/2007/03/24/all-in-one-seo-pack/&quot;&gt;&lt;?php _e('All in One SEO Pack', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
+		&lt;/th&gt;
+		&lt;/tr&gt;
+		&lt;tr&gt;
+		&lt;th width=&quot;33%&quot; scope=&quot;row&quot; valign=&quot;top&quot;&gt;&lt;label for=&quot;aiosp_title&quot;&gt;&lt;?php _e('Title:', 'all_in_one_seo_pack') ?&gt;&lt;/label&gt;&lt;/th&gt;
+		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $title ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_title&quot; size=&quot;70&quot;/&gt;&lt;/td&gt;
+		&lt;/tr&gt;
+		&lt;tr&gt;
+		&lt;th width=&quot;33%&quot; scope=&quot;row&quot; valign=&quot;top&quot;&gt;&lt;label for=&quot;aiosp_keywords&quot;&gt;&lt;?php _e('Keywords (comma separated):', 'all_in_one_seo_pack') ?&gt;&lt;/label&gt;&lt;/th&gt;
+		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $keywords ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_keywords&quot; size=&quot;70&quot;/&gt;&lt;/td&gt;
+		&lt;/tr&gt;
+		&lt;/table&gt;
+		&lt;?php
+	}
+
+	function add_meta_tags_textinput() {
+	    global $post;
+	    $post_id = $post;
+	    if (is_object($post_id)) {
+	    	$post_id = $post_id-&gt;ID;
+	    }
+	    $keywords = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'keywords', true)));
+	    $title = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'title', true)));
+	    $description = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'description', true)));
+	    $aiosp_meta = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'aiosp_meta', true)));
+	    $aiosp_disable = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'aiosp_disable', true)));
+		?&gt;
+		&lt;SCRIPT LANGUAGE=&quot;JavaScript&quot;&gt;
+		&lt;!-- Begin
+		function countChars(field,cntfield) {
+		cntfield.value = field.value.length;
+		}
+		//  End --&gt;
+		&lt;/script&gt;
+
+	 &lt;?php if (substr($this-&gt;wp_version, 0, 3) &gt;= '2.5') { ?&gt;
+                &lt;div id=&quot;postaiosp&quot; class=&quot;postbox closed&quot;&gt;
+                &lt;h3&gt;&lt;?php _e('All in One SEO Pack', 'all_in_one_seo_pack') ?&gt;&lt;/h3&gt;
+                &lt;div class=&quot;inside&quot;&gt;
+                &lt;div id=&quot;postaiosp&quot;&gt;
+                &lt;?php } else { ?&gt;
+                &lt;div class=&quot;dbx-b-ox-wrapper&quot;&gt;
+                &lt;fieldset id=&quot;seodiv&quot; class=&quot;dbx-box&quot;&gt;
+                &lt;div class=&quot;dbx-h-andle-wrapper&quot;&gt;
+                &lt;h3 class=&quot;dbx-handle&quot;&gt;&lt;?php _e('All in One SEO Pack', 'all_in_one_seo_pack') ?&gt;&lt;/h3&gt;
+                &lt;/div&gt;
+                &lt;div class=&quot;dbx-c-ontent-wrapper&quot;&gt;
+                &lt;div class=&quot;dbx-content&quot;&gt;
+                &lt;?php } ?&gt;
+	
+		&lt;a target=&quot;__blank&quot; href=&quot;http://semperfiwebdesign.com/portfolio/wordpress/wordpress-plugins/all-in-one-seo-pack/&quot;&gt;&lt;?php _e('Click here for Support', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
+		&lt;input value=&quot;aiosp_edit&quot; type=&quot;hidden&quot; name=&quot;aiosp_edit&quot; /&gt;
+		&lt;table style=&quot;margin-bottom:40px&quot;&gt;
+		&lt;tr&gt;
+		&lt;th style=&quot;text-align:left;&quot; colspan=&quot;2&quot;&gt;
+		&lt;/th&gt;
+		&lt;/tr&gt;
+		&lt;tr&gt;
+		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Title:', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
+		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $title ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_title&quot; size=&quot;62&quot;/&gt;&lt;/td&gt;
+		&lt;/tr&gt;
+		&lt;tr&gt;
+		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Description:', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
+		&lt;td&gt;&lt;textarea name=&quot;aiosp_description&quot; rows=&quot;1&quot; cols=&quot;60&quot;
+		onKeyDown=&quot;countChars(document.post.aiosp_description,document.post.length1)&quot;
+		onKeyUp=&quot;countChars(document.post.aiosp_description,document.post.length1)&quot;&gt;&lt;?php echo $description ?&gt;&lt;/textarea&gt;&lt;br /&gt;
+		&lt;input readonly type=&quot;text&quot; name=&quot;length1&quot; size=&quot;3&quot; maxlength=&quot;3&quot; value=&quot;&lt;?php echo strlen($description);?&gt;&quot; /&gt;
+		&lt;?php _e(' characters. Most search engines use a maximum of 160 chars for the description.', 'all_in_one_seo_pack') ?&gt;
+		&lt;/td&gt;
+		&lt;/tr&gt;
+		&lt;tr&gt;
+		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Keywords (comma separated):', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
+		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $keywords ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_keywords&quot; size=&quot;62&quot;/&gt;&lt;/td&gt;
+		&lt;/tr&gt;
+
+		&lt;?php if ($this-&gt;is_admin()) { ?&gt;
+		&lt;tr&gt;
+		&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+		&lt;?php _e('Disable on this page/post:', 'all_in_one_seo_pack')?&gt;
+		&lt;/th&gt;
+		&lt;td&gt;
+		&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_disable&quot; &lt;?php if ($aiosp_disable) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+		&lt;/td&gt;
+		&lt;/tr&gt;
+		&lt;?php } ?&gt;
+
+		&lt;/table&gt;
+		
+		&lt;?php if (substr($this-&gt;wp_version, 0, 3) &gt;= '2.5') { ?&gt;
+		&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
+		&lt;?php } else { ?&gt;
+		&lt;/div&gt;
+		&lt;/fieldset&gt;
+		&lt;/div&gt;
+		&lt;?php } ?&gt;
+
+		&lt;?php
+	}
+
+	function admin_menu() {
+		$file = __FILE__;
+		
+		// hack for 1.5
+		if (substr($this-&gt;wp_version, 0, 3) == '1.5') {
+			$file = 'all-in-one-seo-pack/all_in_one_seo_pack.php';
+		}
+		//add_management_page(__('All in One SEO Title', 'all_in_one_seo_pack'), __('All in One SEO', 'all_in_one_seo_pack'), 10, $file, array($this, 'management_panel'));
+		add_submenu_page('options-general.php', __('All in One SEO', 'all_in_one_seo_pack'), __('All in One SEO', 'all_in_one_seo_pack'), 10, $file, array($this, 'options_panel'));
+	}
+	
+	function management_panel() {
+		$message = null;
+		$base_url = &quot;edit.php?page=&quot; . __FILE__;
+		//echo($base_url);
+		$type = $_REQUEST['type'];
+		if (!isset($type)) {
+			$type = &quot;posts&quot;;
+		}
+?&gt;
+
+  &lt;ul class=&quot;aiosp_menu&quot;&gt;
+    &lt;li&gt;&lt;a href=&quot;&lt;?php echo $base_url ?&gt;&amp;type=posts&quot;&gt;Posts&lt;/a&gt;
+    &lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;&lt;?php echo $base_url ?&gt;&amp;type=pages&quot;&gt;Pages&lt;/a&gt;
+    &lt;/li&gt;
+  &lt;/ul&gt;
+  
+&lt;?php
+
+		if ($type == &quot;posts&quot;) {
+			echo(&quot;posts&quot;);
+		} elseif ($type == &quot;pages&quot;) {
+			echo(&quot;pages&quot;);
+		}
+
+	}
+
+	function options_panel() {
+		$message = null;
+		$message_updated = __(&quot;All in One SEO Options Updated.&quot;, 'all_in_one_seo_pack');
+		
+		// update options
+		if ($_POST['action'] &amp;&amp; $_POST['action'] == 'aiosp_update') {
+			$message = $message_updated;
+			update_option('aiosp_donate', $_POST['aiosp_donate']);
+			update_option('aiosp_home_title', $_POST['aiosp_home_title']);
+			update_option('aiosp_home_description', $_POST['aiosp_home_description']);
+			update_option('aiosp_home_keywords', $_POST['aiosp_home_keywords']);
+			update_option('aiosp_max_words_excerpt', $_POST['aiosp_max_words_excerpt']);
+			update_option('aiosp_rewrite_titles', $_POST['aiosp_rewrite_titles']);
+			update_option('aiosp_post_title_format', $_POST['aiosp_post_title_format']);
+			update_option('aiosp_page_title_format', $_POST['aiosp_page_title_format']);
+			update_option('aiosp_category_title_format', $_POST['aiosp_category_title_format']);
+			update_option('aiosp_archive_title_format', $_POST['aiosp_archive_title_format']);
+			update_option('aiosp_tag_title_format', $_POST['aiosp_tag_title_format']);
+			update_option('aiosp_search_title_format', $_POST['aiosp_search_title_format']);
+			update_option('aiosp_description_format', $_POST['aiosp_description_format']);
+			update_option('aiosp_404_title_format', $_POST['aiosp_404_title_format']);
+			update_option('aiosp_paged_format', $_POST['aiosp_paged_format']);
+			update_option('aiosp_use_categories', $_POST['aiosp_use_categories']);
+			update_option('aiosp_category_noindex', $_POST['aiosp_category_noindex']);
+			update_option('aiosp_archive_noindex', $_POST['aiosp_archive_noindex']);
+			update_option('aiosp_tags_noindex', $_POST['aiosp_tags_noindex']);
+			update_option('aiosp_generate_descriptions', $_POST['aiosp_generate_descriptions']);
+			update_option('aiosp_debug_info', $_POST['aiosp_debug_info']);
+			update_option('aiosp_post_meta_tags', $_POST['aiosp_post_meta_tags']);
+			update_option('aiosp_page_meta_tags', $_POST['aiosp_page_meta_tags']);
+			update_option('aiosp_home_meta_tags', $_POST['aiosp_home_meta_tags']);
+			update_option('aiosp_do_log', $_POST['aiosp_do_log']);
+			if (function_exists('wp_cache_flush')) {
+				wp_cache_flush();
+			}
+		} elseif ($_POST['aiosp_upgrade']) {
+			$message = __(&quot;Upgraded to newest version. Please revisit the options page to make sure you see the newest version.&quot;, 'all_in_one_seo_pack');
+			$success = $this-&gt;install_newest_version();
+			if (!$success) {
+				$message = __(&quot;Upgrade failed&quot;, 'all_in_one_seo_pack');
+				if (isset($this-&gt;upgrade_error) &amp;&amp; !empty($this-&gt;upgrade_error)) {
+					$message .= &quot;: &quot; . $this-&gt;upgrade_error;
+				} else {
+					$message .= &quot;.&quot;;
+				}
+			}
+		}
+
+?&gt;
+&lt;?php if ($message) : ?&gt;
+&lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;?php echo $message; ?&gt;&lt;/p&gt;&lt;/div&gt;
+&lt;?php endif; ?&gt;
+&lt;div id=&quot;dropmessage&quot; class=&quot;updated&quot; style=&quot;display:none;&quot;&gt;&lt;/div&gt;
+&lt;div class=&quot;wrap&quot;&gt;
+&lt;h2&gt;&lt;?php _e('All in One SEO Plugin Options', 'all_in_one_seo_pack'); ?&gt;&lt;/h2&gt;
+&lt;p&gt;
+&lt;?php _e(&quot;This is version &quot;, 'all_in_one_seo_pack') ?&gt;&lt;?php _e(&quot;$this-&gt;version &quot;, 'all_in_one_seo_pack') ?&gt;
+&amp;nbsp;&lt;a target=&quot;_blank&quot; title=&quot;&lt;?php _e('All in One SEO Plugin Release History', 'all_in_one_seo_pack')?&gt;&quot;
+href=&quot;http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-pack-release-history/&quot;&gt;&lt;?php _e(&quot;Should I upgrade?&quot;, 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+| &lt;a target=&quot;_blank&quot; title=&quot;&lt;?php _e('FAQ', 'all_in_one_seo_pack') ?&gt;&quot;
+href=&quot;http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/&quot;&gt;&lt;?php _e('FAQ', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
+| &lt;a target=&quot;_blank&quot; title=&quot;&lt;?php _e('All in One SEO Plugin Feedback', 'all_in_one_seo_pack') ?&gt;&quot;
+href=&quot;http://semperfiwebdesign.com/portfolio/wordpress/wordpress-plugins/all-in-one-seo-pack/&quot;&gt;&lt;?php _e('Feedback', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
+| &lt;a target=&quot;_blank&quot; title=&quot;&lt;?php _e('All in One SEO Plugin Translations', 'all_in_one_seo_pack') ?&gt;&quot;
+href=&quot;http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/translations-for-all-in-one-seo-pack/&quot;&gt;&lt;?php _e('Translations', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
+| &lt;a target=&quot;_blank&quot; title=&quot;&lt;?php echo 'Donate' ?&gt;&quot;
+href=&quot;https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=mrtorbert%40gmail%2ecom&amp;item_name=All%20In%20One%20SEO%20Pack&amp;item_number=Support%20Open%20Source&amp;no_shipping=0&amp;no_note=1&amp;tax=0&amp;currency_code=USD&amp;lc=US&amp;bn=PP%2dDonationsBF&amp;charset=UTF%2d8&quot;&gt;&lt;?php echo 'Donate' ?&gt;&lt;/a&gt;
+&lt;/p&gt;
+&lt;p&gt;
+&lt;?php
+$canwrite = $this-&gt;is_upgrade_directory_writable();
+//$canwrite = false;
+?&gt;
+&lt;form class=&quot;form-table&quot; name=&quot;dofollow&quot; action=&quot;&quot; method=&quot;post&quot;&gt;
+&lt;p class=&quot;submit&quot;&gt;
+&lt;input type=&quot;submit&quot; &lt;?php if (!$canwrite) echo(' disabled=&quot;disabled&quot; ');?&gt; name=&quot;aiosp_upgrade&quot; value=&quot;&lt;?php _e('One Click Upgrade', 'all_in_one_seo_pack')?&gt; &amp;raquo;&quot; /&gt;
+&lt;strong&gt;&lt;?php _e(&quot;(Remember: Backup early, backup often!)&quot;, 'all_in_one_seo_pack') ?&gt;&lt;/strong&gt;
+&lt;/form&gt;
+&lt;/p&gt;
+&lt;p&gt;&lt;/p&gt;
+
+&lt;?php if (!$canwrite) {
+	echo(&quot;&lt;p&gt;&lt;strong&gt;&quot;); echo(sprintf(__(&quot;Please make sure that %s is writable.&quot;, 'all_in_one_seo_pack'), $this-&gt;upgrade_folder)); echo(&quot;&lt;/p&gt;&lt;/strong&gt;&quot;);
+} ?&gt;
+&lt;/p&gt;
+
+&lt;script type=&quot;text/javascript&quot;&gt;
+&lt;!--
+    function toggleVisibility(id) {
+       var e = document.getElementById(id);
+       if(e.style.display == 'block')
+          e.style.display = 'none';
+       else
+          e.style.display = 'block';
+    }
+//--&gt;
+&lt;/script&gt;
+
+&lt;h3&gt;&lt;?php _e('Click on option titles to get help!', 'all_in_one_seo_pack') ?&gt;&lt;/h3&gt;
+
+&lt;form name=&quot;dofollow&quot; action=&quot;&quot; method=&quot;post&quot;&gt;
+&lt;table class=&quot;form-table&quot;&gt;
+
+&lt;?php if (!get_option('aiosp_donate')){?&gt;
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_donate_tip');&quot;&gt;
+&lt;?php _e('I enjoy this plugin and have made a donation:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_donate&quot; &lt;?php if (get_option('aiosp_donate')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_donate_tip&quot;&gt;
+&lt;?php
+_e('All donations support continued development of this free software.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+&lt;?php } ?&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_home_title_tip');&quot;&gt;
+&lt;?php _e('Home Title:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_home_title&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_home_title')); ?&gt;&lt;/textarea&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_home_title_tip&quot;&gt;
+&lt;?php
+_e('As the name implies, this will be the title of your homepage. This is independent of any other option. If not set, the default blog title will get used.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_home_description_tip');&quot;&gt;
+&lt;?php _e('Home Description:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_home_description&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_home_description')); ?&gt;&lt;/textarea&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_home_description_tip&quot;&gt;
+&lt;?php
+_e('The META description for your homepage. Independent of any other options, the default is no META description at all if this is not set.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_home_keywords_tip');&quot;&gt;
+&lt;?php _e('Home Keywords (comma separated):', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_home_keywords&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_home_keywords')); ?&gt;&lt;/textarea&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_home_keywords_tip&quot;&gt;
+&lt;?php
+_e(&quot;A comma separated list of your most important keywords for your site that will be written as META keywords on your homepage. Don't stuff everything in here.&quot;, 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_rewrite_titles_tip');&quot;&gt;
+&lt;?php _e('Rewrite Titles:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_rewrite_titles&quot; &lt;?php if (get_option('aiosp_rewrite_titles')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_rewrite_titles_tip&quot;&gt;
+&lt;?php
+_e(&quot;Note that this is all about the title tag. This is what you see in your browser's window title bar. This is NOT visible on a page, only in the window title bar and of course in the source. If set, all page, post, category, search and archive page titles get rewritten. You can specify the format for most of them. For example: The default templates puts the title tag of posts like this: &#226;&#8364;&#339;Blog Archive &gt;&gt; Blog Name &gt;&gt; Post Title&#226;&#8364;* (maybe I've overdone slightly). This is far from optimal. With the default post title format, Rewrite Title rewrites this to &#226;&#8364;&#339;Post Title | Blog Name&#226;&#8364;*. If you have manually defined a title (in one of the text fields for All in One SEO Plugin input) this will become the title of your post in the format string.&quot;, 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_post_title_format_tip');&quot;&gt;
+&lt;?php _e('Post Title Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_post_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_post_title_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_post_title_format_tip&quot;&gt;
+&lt;?php
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%post_title% - The original title of the post', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%category_title% - The (main) category of the post', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%category% - Alias for %category_title%', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e(&quot;%post_author_login% - This post's author' login&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e(&quot;%post_author_nicename% - This post's author' nicename&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e(&quot;%post_author_firstname% - This post's author' first name (capitalized)&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e(&quot;%post_author_lastname% - This post's author' last name (capitalized)&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_page_title_format_tip');&quot;&gt;
+&lt;?php _e('Page Title Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_page_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_page_title_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_page_title_format_tip&quot;&gt;
+&lt;?php
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%page_title% - The original title of the page', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e(&quot;%page_author_login% - This page's author' login&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e(&quot;%page_author_nicename% - This page's author' nicename&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e(&quot;%page_author_firstname% - This page's author' first name (capitalized)&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e(&quot;%page_author_lastname% - This page's author' last name (capitalized)&quot;, 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_category_title_format_tip');&quot;&gt;
+&lt;?php _e('Category Title Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_category_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_category_title_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_category_title_format_tip&quot;&gt;
+&lt;?php
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%category_title% - The original title of the category', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%category_description% - The description of the category', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_archive_title_format_tip');&quot;&gt;
+&lt;?php _e('Archive Title Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_archive_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_archive_title_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_archive_title_format_tip&quot;&gt;
+&lt;?php
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%date% - The original archive title given by wordpress, e.g. &quot;2007&quot; or &quot;2007 August&quot;', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_tag_title_format_tip');&quot;&gt;
+&lt;?php _e('Tag Title Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_tag_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_tag_title_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_tag_title_format_tip&quot;&gt;
+&lt;?php
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%tag% - The name of the tag', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_search_title_format_tip');&quot;&gt;
+&lt;?php _e('Search Title Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_search_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_search_title_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_search_title_format_tip&quot;&gt;
+&lt;?php
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%search% - What was searched for', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_description_format_tip');&quot;&gt;
+&lt;?php _e('Description Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_description_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_description_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_description_format_tip&quot;&gt;
+&lt;?php
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%description% - The original description as determined by the plugin, e.g. the excerpt if one is set or an auto-generated one if that option is set', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%wp_title% - The original wordpress title, e.g. post_title for posts', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_404_title_format_tip');&quot;&gt;
+&lt;?php _e('404 Title Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_404_title_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_404_title_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_404_title_format_tip&quot;&gt;
+&lt;?php
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%blog_title% - Your blog title', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%blog_description% - Your blog description', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%request_url% - The original URL path, like &quot;/url-that-does-not-exist/&quot;', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;li&gt;'); _e('%request_words% - The URL path in human readable form, like &quot;Url That Does Not Exist&quot;', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_paged_format_tip');&quot;&gt;
+&lt;?php _e('Paged Format:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input size=&quot;59&quot; name=&quot;aiosp_paged_format&quot; value=&quot;&lt;?php echo stripcslashes(get_option('aiosp_paged_format')); ?&gt;&quot;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_paged_format_tip&quot;&gt;
+&lt;?php
+_e('This string gets appended/prepended to titles when they are for paged index pages (like home or archive pages).', 'all_in_one_seo_pack');
+_e('The following macros are supported:', 'all_in_one_seo_pack');
+echo('&lt;ul&gt;');
+echo('&lt;li&gt;'); _e('%page% - The page number', 'all_in_one_seo_pack'); echo('&lt;/li&gt;');
+echo('&lt;/ul&gt;');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_use_categories_tip');&quot;&gt;
+&lt;?php _e('Use Categories for META keywords:', 'all_in_one_seo_pack')?&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_use_categories&quot; &lt;?php if (get_option('aiosp_use_categories')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_use_categories_tip&quot;&gt;
+&lt;?php
+_e('Check this if you want your categories for a given post used as the META keywords for this post (in addition to any keywords and tags you specify on the post edit page).', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_category_noindex_tip');&quot;&gt;
+&lt;?php _e('Use noindex for Categories:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_category_noindex&quot; &lt;?php if (get_option('aiosp_category_noindex')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_category_noindex_tip&quot;&gt;
+&lt;?php
+_e('Check this for excluding category pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_archive_noindex_tip');&quot;&gt;
+&lt;?php _e('Use noindex for Archives:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_archive_noindex&quot; &lt;?php if (get_option('aiosp_archive_noindex')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_archive_noindex_tip&quot;&gt;
+&lt;?php
+_e('Check this for excluding archive pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_tags_noindex_tip');&quot;&gt;
+&lt;?php _e('Use noindex for Tag Archives:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_tags_noindex&quot; &lt;?php if (get_option('aiosp_tags_noindex')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_tags_noindex_tip&quot;&gt;
+&lt;?php
+_e('Check this for excluding tag pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_generate_descriptions_tip');&quot;&gt;
+&lt;?php _e('Autogenerate Descriptions:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_generate_descriptions&quot; &lt;?php if (get_option('aiosp_generate_descriptions')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_generate_descriptions_tip&quot;&gt;
+&lt;?php
+_e(&quot;Check this and your META descriptions will get autogenerated if there's no excerpt.&quot;, 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_post_meta_tags_tip');&quot;&gt;
+&lt;?php _e('Additional Post Headers:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_post_meta_tags&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_post_meta_tags')); ?&gt;&lt;/textarea&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_post_meta_tags_tip&quot;&gt;
+&lt;?php
+_e('What you enter here will be copied verbatim to your header on post pages. You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_page_meta_tags_tip');&quot;&gt;
+&lt;?php _e('Additional Page Headers:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_page_meta_tags&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_page_meta_tags')); ?&gt;&lt;/textarea&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_page_meta_tags_tip&quot;&gt;
+&lt;?php
+_e('What you enter here will be copied verbatim to your header on pages. You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_home_meta_tags_tip');&quot;&gt;
+&lt;?php _e('Additional Home Headers:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;textarea cols=&quot;57&quot; rows=&quot;2&quot; name=&quot;aiosp_home_meta_tags&quot;&gt;&lt;?php echo stripcslashes(get_option('aiosp_home_meta_tags')); ?&gt;&lt;/textarea&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_home_meta_tags_tip&quot;&gt;
+&lt;?php
+_e('What you enter here will be copied verbatim to your header on the home page. You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'auto_social')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_do_log_tip');&quot;&gt;
+&lt;?php _e('Log important events:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_do_log&quot; &lt;?php if (get_option('aiosp_do_log')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_do_log_tip&quot;&gt;
+&lt;?php
+_e('Check this and SEO pack will create a log of important events (all_in_one_seo_pack.log) in its plugin directory which might help debugging it. Make sure this directory is writable.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+
+&lt;?php if (get_option('aiosp_donate')){?&gt;
+&lt;tr&gt;
+&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+&lt;a style=&quot;cursor:pointer;&quot; title=&quot;&lt;?php _e('Click for Help!', 'all_in_one_seo_pack')?&gt;&quot; onclick=&quot;toggleVisibility('aiosp_donate_tip');&quot;&gt;
+&lt;?php _e('Thank you for your donation:', 'all_in_one_seo_pack')?&gt;
+&lt;/a&gt;
+&lt;/td&gt;
+&lt;td&gt;
+&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_donate&quot; &lt;?php if (get_option('aiosp_donate')) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+&lt;div style=&quot;max-width:500px; text-align:left; display:none&quot; id=&quot;aiosp_donate_tip&quot;&gt;
+&lt;?php
+_e('All donations support continued development of this free software.', 'all_in_one_seo_pack');
+ ?&gt;
+&lt;/div&gt;
+&lt;/td&gt;
+&lt;/tr&gt;
+&lt;?php } ?&gt;
+
+&lt;/table&gt;
+&lt;p class=&quot;submit&quot;&gt;
+&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;aiosp_update&quot; /&gt; 
+&lt;input type=&quot;hidden&quot; name=&quot;page_options&quot; value=&quot;aiosp_home_description&quot; /&gt; 
+&lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;&lt;?php _e('Update Options', 'all_in_one_seo_pack')?&gt; &amp;raquo;&quot; /&gt; 
+&lt;/p&gt;
+&lt;p&gt;&lt;br /&gt;
+&lt;strong&gt;Check out these other great plugins!&lt;/strong&gt;&lt;br /&gt;
+&lt;a href=&quot;http://semperfiwebdesign.com/custom-applications/sms-text-message/&quot; title=&quot;SMS Text Message WordPress plugin&quot;&gt;SMS Text Message&lt;/a&gt; - sends SMS updates to your readers&lt;br /&gt;
+&lt;a href=&quot;http://semperfiwebdesign.com/custom-applications/wp-security-scan/&quot; title=&quot;WordPress Security&quot;&gt;WordPress Security Scan&lt;/a&gt; - provides vital security for your WordPress site
+&lt;/p&gt;
+&lt;/form&gt;
+&lt;/div&gt;
+&lt;?php
+	
+	} // options_panel
+
+}
+
+add_option(&quot;aiosp_home_description&quot;, null, 'All in One SEO Plugin Home Description', 'yes');
+add_option(&quot;aiosp_home_title&quot;, null, 'All in One SEO Plugin Home Title', 'yes');
+add_option(&quot;aiosp_donate&quot;, 0, 'All in One SEO Pack Donate', 'no');
+add_option(&quot;aiosp_rewrite_titles&quot;, 1, 'All in One SEO Plugin Rewrite Titles', 'yes');
+add_option(&quot;aiosp_use_categories&quot;, 0, 'All in One SEO Plugin Use Categories', 'yes');
+add_option(&quot;aiosp_category_noindex&quot;, 1, 'All in One SEO Plugin Noindex for Categories', 'yes');
+add_option(&quot;aiosp_archive_noindex&quot;, 1, 'All in One SEO Plugin Noindex for Archives', 'yes');
+add_option(&quot;aiosp_tags_noindex&quot;, 0, 'All in One SEO Plugin Noindex for Tag Archives', 'yes');
+add_option(&quot;aiosp_generate_descriptions&quot;, 1, 'All in One SEO Plugin Autogenerate Descriptions', 'yes');
+add_option(&quot;aiosp_post_title_format&quot;, '%post_title% | %blog_title%', 'All in One SEO Plugin Post Title Format', 'yes');
+add_option(&quot;aiosp_page_title_format&quot;, '%page_title% | %blog_title%', 'All in One SEO Plugin Page Title Format', 'yes');
+add_option(&quot;aiosp_category_title_format&quot;, '%category_title% | %blog_title%', 'All in One SEO Plugin Category Title Format', 'yes');
+add_option(&quot;aiosp_archive_title_format&quot;, '%date% | %blog_title%', 'All in One SEO Plugin Archive Title Format', 'yes');
+add_option(&quot;aiosp_tag_title_format&quot;, '%tag% | %blog_title%', 'All in One SEO Plugin Tag Title Format', 'yes');
+add_option(&quot;aiosp_search_title_format&quot;, '%search% | %blog_title%', 'All in One SEO Plugin Search Title Format', 'yes');
+add_option(&quot;aiosp_description_format&quot;, '%description%', 'All in One SEO Plugin Description Format', 'yes');
+add_option(&quot;aiosp_paged_format&quot;, ' - Part %page%', 'All in One SEO Plugin Paged Format', 'yes');
+add_option(&quot;aiosp_404_title_format&quot;, 'Nothing found for %request_words%', 'All in One SEO Plugin 404 Title Format', 'yes');
+add_option(&quot;aiosp_post_meta_tags&quot;, '', 'All in One SEO Plugin Additional Post Meta Tags', 'yes');
+add_option(&quot;aiosp_page_meta_tags&quot;, '', 'All in One SEO Plugin Additional Post Meta Tags', 'yes');
+add_option(&quot;aiosp_home_meta_tags&quot;, '', 'All in One SEO Plugin Additional Home Meta Tags', 'yes');
+add_option(&quot;aiosp_do_log&quot;, null, 'All in One SEO Plugin write log file', 'yes');
+
+$aiosp = new All_in_One_SEO_Pack();
+add_action('wp_head', array($aiosp, 'wp_head'));
+add_action('template_redirect', array($aiosp, 'template_redirect'));
+
+add_action('init', array($aiosp, 'init'));
+
+if (substr($aiosp-&gt;wp_version, 0, 3) &lt; '2.5') {
+        add_action('dbx_post_advanced', array($aiosp, 'add_meta_tags_textinput'));
+        add_action('dbx_page_advanced', array($aiosp, 'add_meta_tags_textinput'));
+}
+
+
+add_action('edit_post', array($aiosp, 'post_meta_tags'));
+add_action('publish_post', array($aiosp, 'post_meta_tags'));
+add_action('save_post', array($aiosp, 'post_meta_tags'));
+add_action('edit_page_form', array($aiosp, 'post_meta_tags'));
+
+add_action('admin_menu', array($aiosp, 'admin_menu'));
+
+
+add_action('admin_menu', 'aiosp_meta_box_add');
+
+function aiosp_meta_box_add() {
+	// Check whether the 2.5 function add_meta_box exists, and if it doesn't use 2.3 functions.
+	if ( function_exists('add_meta_box') ) {
+		add_meta_box('aiosp','All in One SEO Pack','aiosp_meta','post');
+		add_meta_box('aiosp','All in One SEO Pack','aiosp_meta','page');
+	} else {
+		add_action('dbx_post_advanced', array($aiosp, 'add_meta_tags_textinput'));
+		add_action('dbx_page_advanced', array($aiosp, 'add_meta_tags_textinput'));
+	}
+}
+
+function aiosp_meta() {
+
+	global $post;
+	
+	$post_id = $post;
+	if (is_object($post_id)){
+		$post_id = $post_id-&gt;ID;
+	}
+ 	$keywords = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'keywords', true)));
+    $title = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'title', true)));
+	$description = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'description', true)));
+    $aiosp_meta = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'aiosp_meta', true)));
+    $aiosp_disable = htmlspecialchars(stripcslashes(get_post_meta($post_id, 'aiosp_disable', true)));
+	
+	?&gt;
+		&lt;SCRIPT LANGUAGE=&quot;JavaScript&quot;&gt;
+		&lt;!-- Begin
+		function countChars(field,cntfield) {
+		cntfield.value = field.value.length;
+		}
+		//  End --&gt;
+		&lt;/script&gt;
+		&lt;input value=&quot;aiosp_edit&quot; type=&quot;hidden&quot; name=&quot;aiosp_edit&quot; /&gt;
+		
+		&lt;a target=&quot;__blank&quot; href=&quot;http://semperfiwebdesign.com/portfolio/wordpress/wordpress-plugins/all-in-one-seo-pack/&quot;&gt;&lt;?php _e('Click here for Support', 'all_in_one_seo_pack') ?&gt;&lt;/a&gt;
+		&lt;table style=&quot;margin-bottom:40px&quot;&gt;
+		&lt;tr&gt;
+		&lt;th style=&quot;text-align:left;&quot; colspan=&quot;2&quot;&gt;
+		&lt;/th&gt;
+		&lt;/tr&gt;
+		&lt;tr&gt;
+		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Title:', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
+		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $title ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_title&quot; size=&quot;62&quot;/&gt;&lt;/td&gt;
+		&lt;/tr&gt;
+		&lt;tr&gt;
+		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Description:', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
+		&lt;td&gt;&lt;textarea name=&quot;aiosp_description&quot; rows=&quot;1&quot; cols=&quot;60&quot;
+		onKeyDown=&quot;countChars(document.post.aiosp_description,document.post.length1)&quot;
+		onKeyUp=&quot;countChars(document.post.aiosp_description,document.post.length1)&quot;&gt;&lt;?php echo $description ?&gt;&lt;/textarea&gt;&lt;br /&gt;
+		&lt;input readonly type=&quot;text&quot; name=&quot;length1&quot; size=&quot;3&quot; maxlength=&quot;3&quot; value=&quot;&lt;?php echo strlen($description);?&gt;&quot; /&gt;
+		&lt;?php _e(' characters. Most search engines use a maximum of 160 chars for the description.', 'all_in_one_seo_pack') ?&gt;
+		&lt;/td&gt;
+		&lt;/tr&gt;
+		&lt;tr&gt;
+		&lt;th scope=&quot;row&quot; style=&quot;text-align:right;&quot;&gt;&lt;?php _e('Keywords (comma separated):', 'all_in_one_seo_pack') ?&gt;&lt;/th&gt;
+		&lt;td&gt;&lt;input value=&quot;&lt;?php echo $keywords ?&gt;&quot; type=&quot;text&quot; name=&quot;aiosp_keywords&quot; size=&quot;62&quot;/&gt;&lt;/td&gt;
+		&lt;/tr&gt;
+
+
+		&lt;tr&gt;
+		&lt;th scope=&quot;row&quot; style=&quot;text-align:right; vertical-align:top;&quot;&gt;
+		&lt;?php _e('Disable on this page/post:', 'all_in_one_seo_pack')?&gt;
+		&lt;/th&gt;
+		&lt;td&gt;
+		&lt;input type=&quot;checkbox&quot; name=&quot;aiosp_disable&quot; &lt;?php if ($aiosp_disable) echo &quot;checked=\&quot;1\&quot;&quot;; ?&gt;/&gt;
+		&lt;/td&gt;
+		&lt;/tr&gt;
+
+
+		&lt;/table&gt;
+	&lt;?php
+}
+?&gt;</diff>
      <filename>wordpress/wp-content/plugins/all-in-one-seo-pack/all_in_one_seo_pack.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,5651 +1,5651 @@
-&lt;?php
-// --------------------------------------------------------------------------------
-// PhpConcept Library - Zip Module 2.5
-// --------------------------------------------------------------------------------
-// License GNU/LGPL - Vincent Blavet - March 2006
-// http://www.phpconcept.net
-// --------------------------------------------------------------------------------
-//
-// Presentation :
-//   PclZip is a PHP library that manage ZIP archives.
-//   So far tests show that archives generated by PclZip are readable by
-//   WinZip application and other tools.
-//
-// Description :
-//   See readme.txt and http://www.phpconcept.net
-//
-// Warning :
-//   This library and the associated files are non commercial, non professional
-//   work.
-//   It should not have unexpected results. However if any damage is caused by
-//   this software the author can not be responsible.
-//   The use of this software is at the risk of the user.
-//
-// --------------------------------------------------------------------------------
-// $Id: pclzip.lib.php,v 1.44 2006/03/08 21:23:59 vblavet Exp $
-// --------------------------------------------------------------------------------
-
-  // ----- Constants
-  define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
-
-  define( 'PCLZIP_SEPARATOR', ',' );
-
-  define( 'PCLZIP_ERROR_EXTERNAL', 0 );
-
-  define( 'PCLZIP_TEMPORARY_DIR', '' );
-
-// --------------------------------------------------------------------------------
-// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
-// --------------------------------------------------------------------------------
-
-  // ----- Global variables
-  $g_pclzip_version = &quot;2.5&quot;;
-
-  define( 'PCLZIP_ERR_USER_ABORTED', 2 );
-  define( 'PCLZIP_ERR_NO_ERROR', 0 );
-  define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
-  define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
-  define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
-  define( 'PCLZIP_ERR_MISSING_FILE', -4 );
-  define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
-  define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
-  define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
-  define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
-  define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
-  define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
-  define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
-  define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
-  define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
-  define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
-  define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
-  define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
-  define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
-  define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
-  define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
-  define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
-  define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
-
-  // ----- Options values
-  define( 'PCLZIP_OPT_PATH', 77001 );
-  define( 'PCLZIP_OPT_ADD_PATH', 77002 );
-  define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
-  define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
-  define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
-  define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
-  define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
-  define( 'PCLZIP_OPT_BY_NAME', 77008 );
-  define( 'PCLZIP_OPT_BY_INDEX', 77009 );
-  define( 'PCLZIP_OPT_BY_EREG', 77010 );
-  define( 'PCLZIP_OPT_BY_PREG', 77011 );
-  define( 'PCLZIP_OPT_COMMENT', 77012 );
-  define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
-  define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
-  define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
-  define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
-  define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
-  // Having big trouble with crypt. Need to multiply 2 long int
-  // which is not correctly supported by PHP ...
-  //define( 'PCLZIP_OPT_CRYPT', 77018 );
-  define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
-  
-  // ----- File description attributes
-  define( 'PCLZIP_ATT_FILE_NAME', 79001 );
-  define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
-  define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
-
-  // ----- Call backs values
-  define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
-  define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
-  define( 'PCLZIP_CB_PRE_ADD', 78003 );
-  define( 'PCLZIP_CB_POST_ADD', 78004 );
-
-  class PclZip
-  {
-    // ----- Filename of the zip file
-    var $zipname = '';
-
-    // ----- File descriptor of the zip file
-    var $zip_fd = 0;
-
-    // ----- Internal error handling
-    var $error_code = 1;
-    var $error_string = '';
-    
-    // ----- Current status of the magic_quotes_runtime
-    // This value store the php configuration for magic_quotes
-    // The class can then disable the magic_quotes and reset it after
-    var $magic_quotes_status;
-
-  // --------------------------------------------------------------------------------
-  // Function : PclZip()
-  // Description :
-  //   Creates a PclZip object and set the name of the associated Zip archive
-  //   filename.
-  //   Note that no real action is taken, if the archive does not exist it is not
-  //   created. Use create() for that.
-  // --------------------------------------------------------------------------------
-  function PclZip($p_zipname)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::PclZip', &quot;zipname=$p_zipname&quot;);
-
-    // ----- Tests the zlib
-    if (!function_exists('gzopen'))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 1, &quot;zlib extension seems to be missing&quot;);
-      die('Abort '.basename(__FILE__).' : Missing zlib extensions');
-    }
-
-    // ----- Set the attributes
-    $this-&gt;zipname = $p_zipname;
-    $this-&gt;zip_fd = 0;
-    $this-&gt;magic_quotes_status = -1;
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 1);
-    return;
-  }
-
-  function create($p_filelist)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::create', &quot;filelist='$p_filelist', ...&quot;);
-    $v_result=1;
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Set default values
-    $v_options = array();
-    $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
-
-    // ----- Look for variable options arguments
-    $v_size = func_num_args();
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
-
-    // ----- Look for arguments
-    if ($v_size &gt; 1) {
-      // ----- Get the arguments
-      $v_arg_list = func_get_args();
-
-      // ----- Remove from the options list the first argument
-      array_shift($v_arg_list);
-      $v_size--;
-
-      // ----- Look for first arg
-      if ((is_integer($v_arg_list[0])) &amp;&amp; ($v_arg_list[0] &gt; 77000)) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Variable list of options detected&quot;);
-
-        // ----- Parse the options
-        $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
-                                            array (PCLZIP_OPT_REMOVE_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_REMOVE_ALL_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_ADD_PATH =&gt; 'optional',
-                                                   PCLZIP_CB_PRE_ADD =&gt; 'optional',
-                                                   PCLZIP_CB_POST_ADD =&gt; 'optional',
-                                                   PCLZIP_OPT_NO_COMPRESSION =&gt; 'optional',
-                                                   PCLZIP_OPT_COMMENT =&gt; 'optional'
-                                                   //, PCLZIP_OPT_CRYPT =&gt; 'optional'
-                                             ));
-        if ($v_result != 1) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-          return 0;
-        }
-      }
-
-      // ----- Look for 2 args
-      // Here we need to support the first historic synopsis of the
-      // method.
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Static synopsis&quot;);
-
-        // ----- Get the first argument
-        $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
-
-        // ----- Look for the optional second argument
-        if ($v_size == 2) {
-          $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
-        }
-        else if ($v_size &gt; 2) {
-          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
-		                       &quot;Invalid number / type of arguments&quot;);
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-          return 0;
-        }
-      }
-    }
-
-    // ----- Init
-    $v_string_list = array();
-    $v_att_list = array();
-    $v_filedescr_list = array();
-    $p_result_list = array();
-    
-    // ----- Look if the $p_filelist is really an array
-    if (is_array($p_filelist)) {
-    
-      // ----- Look if the first element is also an array
-      //       This will mean that this is a file description entry
-      if (isset($p_filelist[0]) &amp;&amp; is_array($p_filelist[0])) {
-        $v_att_list = $p_filelist;
-      }
-      
-      // ----- The list is a list of string names
-      else {
-        $v_string_list = $p_filelist;
-      }
-    }
-
-    // ----- Look if the $p_filelist is a string
-    else if (is_string($p_filelist)) {
-      // ----- Create a list from the string
-      $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
-    }
-
-    // ----- Invalid variable type for $p_filelist
-    else {
-      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid variable type p_filelist&quot;);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return 0;
-    }
-    
-    // ----- Reformat the string list
-    if (sizeof($v_string_list) != 0) {
-      foreach ($v_string_list as $v_string) {
-        if ($v_string != '') {
-          $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
-        }
-        else {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Ignore an empty filename&quot;);
-        }
-      }
-    }
-    
-    // ----- For each file in the list check the attributes
-    $v_supported_attributes
-    = array ( PCLZIP_ATT_FILE_NAME =&gt; 'mandatory'
-             ,PCLZIP_ATT_FILE_NEW_SHORT_NAME =&gt; 'optional'
-             ,PCLZIP_ATT_FILE_NEW_FULL_NAME =&gt; 'optional'
-						);
-    foreach ($v_att_list as $v_entry) {
-      $v_result = $this-&gt;privFileDescrParseAtt($v_entry,
-                                               $v_filedescr_list[],
-                                               $v_options,
-                                               $v_supported_attributes);
-      if ($v_result != 1) {
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-        return 0;
-      }
-    }
-
-    // ----- Expand the filelist (expand directories)
-    $v_result = $this-&gt;privFileDescrExpand($v_filedescr_list, $v_options);
-    if ($v_result != 1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return 0;
-    }
-
-    // ----- Call the create fct
-    $v_result = $this-&gt;privCreate($v_filedescr_list, $p_result_list, $v_options);
-    if ($v_result != 1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return 0;
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
-    return $p_result_list;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function :
-  //   add($p_filelist, $p_add_dir=&quot;&quot;, $p_remove_dir=&quot;&quot;)
-  //   add($p_filelist, $p_option, $p_option_value, ...)
-  // Description :
-  //   This method supports two synopsis. The first one is historical.
-  //   This methods add the list of files in an existing archive.
-  //   If a file with the same name already exists, it is added at the end of the
-  //   archive, the first one is still present.
-  //   If the archive does not exist, it is created.
-  // Parameters :
-  //   $p_filelist : An array containing file or directory names, or
-  //                 a string containing one filename or one directory name, or
-  //                 a string containing a list of filenames and/or directory
-  //                 names separated by spaces.
-  //   $p_add_dir : A path to add before the real path of the archived file,
-  //                in order to have it memorized in the archive.
-  //   $p_remove_dir : A path to remove from the real path of the file to archive,
-  //                   in order to have a shorter path memorized in the archive.
-  //                   When $p_add_dir and $p_remove_dir are set, $p_remove_dir
-  //                   is removed first, before $p_add_dir is added.
-  // Options :
-  //   PCLZIP_OPT_ADD_PATH :
-  //   PCLZIP_OPT_REMOVE_PATH :
-  //   PCLZIP_OPT_REMOVE_ALL_PATH :
-  //   PCLZIP_OPT_COMMENT :
-  //   PCLZIP_OPT_ADD_COMMENT :
-  //   PCLZIP_OPT_PREPEND_COMMENT :
-  //   PCLZIP_CB_PRE_ADD :
-  //   PCLZIP_CB_POST_ADD :
-  // Return Values :
-  //   0 on failure,
-  //   The list of the added files, with a status of the add action.
-  //   (see PclZip::listContent() for list entry format)
-  // --------------------------------------------------------------------------------
-  function add($p_filelist)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::add', &quot;filelist='$p_filelist', ...&quot;);
-    $v_result=1;
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Set default values
-    $v_options = array();
-    $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
-
-    // ----- Look for variable options arguments
-    $v_size = func_num_args();
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
-
-    // ----- Look for arguments
-    if ($v_size &gt; 1) {
-      // ----- Get the arguments
-      $v_arg_list = func_get_args();
-
-      // ----- Remove form the options list the first argument
-      array_shift($v_arg_list);
-      $v_size--;
-
-      // ----- Look for first arg
-      if ((is_integer($v_arg_list[0])) &amp;&amp; ($v_arg_list[0] &gt; 77000)) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Variable list of options detected&quot;);
-
-        // ----- Parse the options
-        $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
-                                            array (PCLZIP_OPT_REMOVE_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_REMOVE_ALL_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_ADD_PATH =&gt; 'optional',
-                                                   PCLZIP_CB_PRE_ADD =&gt; 'optional',
-                                                   PCLZIP_CB_POST_ADD =&gt; 'optional',
-                                                   PCLZIP_OPT_NO_COMPRESSION =&gt; 'optional',
-                                                   PCLZIP_OPT_COMMENT =&gt; 'optional',
-                                                   PCLZIP_OPT_ADD_COMMENT =&gt; 'optional',
-                                                   PCLZIP_OPT_PREPEND_COMMENT =&gt; 'optional'
-                                                   //, PCLZIP_OPT_CRYPT =&gt; 'optional'
-												   ));
-        if ($v_result != 1) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-          return 0;
-        }
-      }
-
-      // ----- Look for 2 args
-      // Here we need to support the first historic synopsis of the
-      // method.
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Static synopsis&quot;);
-
-        // ----- Get the first argument
-        $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
-
-        // ----- Look for the optional second argument
-        if ($v_size == 2) {
-          $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
-        }
-        else if ($v_size &gt; 2) {
-          // ----- Error log
-          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid number / type of arguments&quot;);
-
-          // ----- Return
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-          return 0;
-        }
-      }
-    }
-
-    // ----- Init
-    $v_string_list = array();
-    $v_att_list = array();
-    $v_filedescr_list = array();
-    $p_result_list = array();
-    
-    // ----- Look if the $p_filelist is really an array
-    if (is_array($p_filelist)) {
-    
-      // ----- Look if the first element is also an array
-      //       This will mean that this is a file description entry
-      if (isset($p_filelist[0]) &amp;&amp; is_array($p_filelist[0])) {
-        $v_att_list = $p_filelist;
-      }
-      
-      // ----- The list is a list of string names
-      else {
-        $v_string_list = $p_filelist;
-      }
-    }
-
-    // ----- Look if the $p_filelist is a string
-    else if (is_string($p_filelist)) {
-      // ----- Create a list from the string
-      $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
-    }
-
-    // ----- Invalid variable type for $p_filelist
-    else {
-      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid variable type '&quot;.gettype($p_filelist).&quot;' for p_filelist&quot;);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return 0;
-    }
-    
-    // ----- Reformat the string list
-    if (sizeof($v_string_list) != 0) {
-      foreach ($v_string_list as $v_string) {
-        $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
-      }
-    }
-    
-    // ----- For each file in the list check the attributes
-    $v_supported_attributes
-    = array ( PCLZIP_ATT_FILE_NAME =&gt; 'mandatory'
-             ,PCLZIP_ATT_FILE_NEW_SHORT_NAME =&gt; 'optional'
-             ,PCLZIP_ATT_FILE_NEW_FULL_NAME =&gt; 'optional'
-						);
-    foreach ($v_att_list as $v_entry) {
-      $v_result = $this-&gt;privFileDescrParseAtt($v_entry,
-                                               $v_filedescr_list[],
-                                               $v_options,
-                                               $v_supported_attributes);
-      if ($v_result != 1) {
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-        return 0;
-      }
-    }
-
-    // ----- Expand the filelist (expand directories)
-    $v_result = $this-&gt;privFileDescrExpand($v_filedescr_list, $v_options);
-    if ($v_result != 1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return 0;
-    }
-
-    // ----- Call the create fct
-    $v_result = $this-&gt;privAdd($v_filedescr_list, $p_result_list, $v_options);
-    if ($v_result != 1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return 0;
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
-    return $p_result_list;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : listContent()
-  // Description :
-  //   This public method, gives the list of the files and directories, with their
-  //   properties.
-  //   The properties of each entries in the list are (used also in other functions) :
-  //     filename : Name of the file. For a create or add action it is the filename
-  //                given by the user. For an extract function it is the filename
-  //                of the extracted file.
-  //     stored_filename : Name of the file / directory stored in the archive.
-  //     size : Size of the stored file.
-  //     compressed_size : Size of the file's data compressed in the archive
-  //                       (without the headers overhead)
-  //     mtime : Last known modification date of the file (UNIX timestamp)
-  //     comment : Comment associated with the file
-  //     folder : true | false
-  //     index : index of the file in the archive
-  //     status : status of the action (depending of the action) :
-  //              Values are :
-  //                ok : OK !
-  //                filtered : the file / dir is not extracted (filtered by user)
-  //                already_a_directory : the file can not be extracted because a
-  //                                      directory with the same name already exists
-  //                write_protected : the file can not be extracted because a file
-  //                                  with the same name already exists and is
-  //                                  write protected
-  //                newer_exist : the file was not extracted because a newer file exists
-  //                path_creation_fail : the file is not extracted because the folder
-  //                                     does not exists and can not be created
-  //                write_error : the file was not extracted because there was a
-  //                              error while writing the file
-  //                read_error : the file was not extracted because there was a error
-  //                             while reading the file
-  //                invalid_header : the file was not extracted because of an archive
-  //                                 format error (bad file header)
-  //   Note that each time a method can continue operating when there
-  //   is an action error on a file, the error is only logged in the file status.
-  // Return Values :
-  //   0 on an unrecoverable failure,
-  //   The list of the files in the archive.
-  // --------------------------------------------------------------------------------
-  function listContent()
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::listContent', &quot;&quot;);
-    $v_result=1;
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Check archive
-    if (!$this-&gt;privCheckFormat()) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return(0);
-    }
-
-    // ----- Call the extracting fct
-    $p_list = array();
-    if (($v_result = $this-&gt;privList($p_list)) != 1)
-    {
-      unset($p_list);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
-      return(0);
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
-    return $p_list;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function :
-  //   extract($p_path=&quot;./&quot;, $p_remove_path=&quot;&quot;)
-  //   extract([$p_option, $p_option_value, ...])
-  // Description :
-  //   This method supports two synopsis. The first one is historical.
-  //   This method extract all the files / directories from the archive to the
-  //   folder indicated in $p_path.
-  //   If you want to ignore the 'root' part of path of the memorized files
-  //   you can indicate this in the optional $p_remove_path parameter.
-  //   By default, if a newer file with the same name already exists, the
-  //   file is not extracted.
-  //
-  //   If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions
-  //   are used, the path indicated in PCLZIP_OPT_ADD_PATH is append
-  //   at the end of the path value of PCLZIP_OPT_PATH.
-  // Parameters :
-  //   $p_path : Path where the files and directories are to be extracted
-  //   $p_remove_path : First part ('root' part) of the memorized path
-  //                    (if any similar) to remove while extracting.
-  // Options :
-  //   PCLZIP_OPT_PATH :
-  //   PCLZIP_OPT_ADD_PATH :
-  //   PCLZIP_OPT_REMOVE_PATH :
-  //   PCLZIP_OPT_REMOVE_ALL_PATH :
-  //   PCLZIP_CB_PRE_EXTRACT :
-  //   PCLZIP_CB_POST_EXTRACT :
-  // Return Values :
-  //   0 or a negative value on failure,
-  //   The list of the extracted files, with a status of the action.
-  //   (see PclZip::listContent() for list entry format)
-  // --------------------------------------------------------------------------------
-  function extract()
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::extract&quot;, &quot;&quot;);
-    $v_result=1;
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Check archive
-    if (!$this-&gt;privCheckFormat()) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return(0);
-    }
-
-    // ----- Set default values
-    $v_options = array();
-//    $v_path = &quot;./&quot;;
-    $v_path = '';
-    $v_remove_path = &quot;&quot;;
-    $v_remove_all_path = false;
-
-    // ----- Look for variable options arguments
-    $v_size = func_num_args();
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
-
-    // ----- Default values for option
-    $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
-
-    // ----- Look for arguments
-    if ($v_size &gt; 0) {
-      // ----- Get the arguments
-      $v_arg_list = func_get_args();
-
-      // ----- Look for first arg
-      if ((is_integer($v_arg_list[0])) &amp;&amp; ($v_arg_list[0] &gt; 77000)) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Variable list of options&quot;);
-
-        // ----- Parse the options
-        $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
-                                            array (PCLZIP_OPT_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_REMOVE_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_REMOVE_ALL_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_ADD_PATH =&gt; 'optional',
-                                                   PCLZIP_CB_PRE_EXTRACT =&gt; 'optional',
-                                                   PCLZIP_CB_POST_EXTRACT =&gt; 'optional',
-                                                   PCLZIP_OPT_SET_CHMOD =&gt; 'optional',
-                                                   PCLZIP_OPT_BY_NAME =&gt; 'optional',
-                                                   PCLZIP_OPT_BY_EREG =&gt; 'optional',
-                                                   PCLZIP_OPT_BY_PREG =&gt; 'optional',
-                                                   PCLZIP_OPT_BY_INDEX =&gt; 'optional',
-                                                   PCLZIP_OPT_EXTRACT_AS_STRING =&gt; 'optional',
-                                                   PCLZIP_OPT_EXTRACT_IN_OUTPUT =&gt; 'optional',
-                                                   PCLZIP_OPT_REPLACE_NEWER =&gt; 'optional'
-                                                   ,PCLZIP_OPT_STOP_ON_ERROR =&gt; 'optional'
-                                                   ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION =&gt; 'optional'
-												    ));
-        if ($v_result != 1) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-          return 0;
-        }
-
-        // ----- Set the arguments
-        if (isset($v_options[PCLZIP_OPT_PATH])) {
-          $v_path = $v_options[PCLZIP_OPT_PATH];
-        }
-        if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
-          $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
-        }
-        if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
-          $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
-        }
-        if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
-          // ----- Check for '/' in last path char
-          if ((strlen($v_path) &gt; 0) &amp;&amp; (substr($v_path, -1) != '/')) {
-            $v_path .= '/';
-          }
-          $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
-        }
-      }
-
-      // ----- Look for 2 args
-      // Here we need to support the first historic synopsis of the
-      // method.
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Static synopsis&quot;);
-
-        // ----- Get the first argument
-        $v_path = $v_arg_list[0];
-
-        // ----- Look for the optional second argument
-        if ($v_size == 2) {
-          $v_remove_path = $v_arg_list[1];
-        }
-        else if ($v_size &gt; 2) {
-          // ----- Error log
-          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid number / type of arguments&quot;);
-
-          // ----- Return
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
-          return 0;
-        }
-      }
-    }
-
-    // ----- Trace
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;path='$v_path', remove_path='$v_remove_path', remove_all_path='&quot;.($v_remove_path?'true':'false').&quot;'&quot;);
-
-    // ----- Call the extracting fct
-    $p_list = array();
-    $v_result = $this-&gt;privExtractByRule($p_list, $v_path, $v_remove_path,
-	                                     $v_remove_all_path, $v_options);
-    if ($v_result &lt; 1) {
-      unset($p_list);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
-      return(0);
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
-    return $p_list;
-  }
-  // --------------------------------------------------------------------------------
-
-
-  // --------------------------------------------------------------------------------
-  // Function :
-  //   extractByIndex($p_index, $p_path=&quot;./&quot;, $p_remove_path=&quot;&quot;)
-  //   extractByIndex($p_index, [$p_option, $p_option_value, ...])
-  // Description :
-  //   This method supports two synopsis. The first one is historical.
-  //   This method is doing a partial extract of the archive.
-  //   The extracted files or folders are identified by their index in the
-  //   archive (from 0 to n).
-  //   Note that if the index identify a folder, only the folder entry is
-  //   extracted, not all the files included in the archive.
-  // Parameters :
-  //   $p_index : A single index (integer) or a string of indexes of files to
-  //              extract. The form of the string is &quot;0,4-6,8-12&quot; with only numbers
-  //              and '-' for range or ',' to separate ranges. No spaces or ';'
-  //              are allowed.
-  //   $p_path : Path where the files and directories are to be extracted
-  //   $p_remove_path : First part ('root' part) of the memorized path
-  //                    (if any similar) to remove while extracting.
-  // Options :
-  //   PCLZIP_OPT_PATH :
-  //   PCLZIP_OPT_ADD_PATH :
-  //   PCLZIP_OPT_REMOVE_PATH :
-  //   PCLZIP_OPT_REMOVE_ALL_PATH :
-  //   PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and
-  //     not as files.
-  //     The resulting content is in a new field 'content' in the file
-  //     structure.
-  //     This option must be used alone (any other options are ignored).
-  //   PCLZIP_CB_PRE_EXTRACT :
-  //   PCLZIP_CB_POST_EXTRACT :
-  // Return Values :
-  //   0 on failure,
-  //   The list of the extracted files, with a status of the action.
-  //   (see PclZip::listContent() for list entry format)
-  // --------------------------------------------------------------------------------
-  //function extractByIndex($p_index, options...)
-function extractByIndex($p_index)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::extractByIndex&quot;, &quot;index='$p_index', ...&quot;);
-    $v_result=1;
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Check archive
-    if (!$this-&gt;privCheckFormat()) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return(0);
-    }
-
-    // ----- Set default values
-    $v_options = array();
-//    $v_path = &quot;./&quot;;
-    $v_path = '';
-    $v_remove_path = &quot;&quot;;
-    $v_remove_all_path = false;
-
-    // ----- Look for variable options arguments
-    $v_size = func_num_args();
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
-
-    // ----- Default values for option
-    $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
-
-    // ----- Look for arguments
-    if ($v_size &gt; 1) {
-      // ----- Get the arguments
-      $v_arg_list = func_get_args();
-
-      // ----- Remove form the options list the first argument
-      array_shift($v_arg_list);
-      $v_size--;
-
-      // ----- Look for first arg
-      if ((is_integer($v_arg_list[0])) &amp;&amp; ($v_arg_list[0] &gt; 77000)) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Variable list of options&quot;);
-
-        // ----- Parse the options
-        $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
-                                            array (PCLZIP_OPT_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_REMOVE_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_REMOVE_ALL_PATH =&gt; 'optional',
-                                                   PCLZIP_OPT_EXTRACT_AS_STRING =&gt; 'optional',
-                                                   PCLZIP_OPT_ADD_PATH =&gt; 'optional',
-                                                   PCLZIP_CB_PRE_EXTRACT =&gt; 'optional',
-                                                   PCLZIP_CB_POST_EXTRACT =&gt; 'optional',
-                                                   PCLZIP_OPT_SET_CHMOD =&gt; 'optional',
-                                                   PCLZIP_OPT_REPLACE_NEWER =&gt; 'optional'
-                                                   ,PCLZIP_OPT_STOP_ON_ERROR =&gt; 'optional'
-                                                   ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION =&gt; 'optional'
-												   ));
-        if ($v_result != 1) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-          return 0;
-        }
-
-        // ----- Set the arguments
-        if (isset($v_options[PCLZIP_OPT_PATH])) {
-          $v_path = $v_options[PCLZIP_OPT_PATH];
-        }
-        if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
-          $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
-        }
-        if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
-          $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
-        }
-        if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
-          // ----- Check for '/' in last path char
-          if ((strlen($v_path) &gt; 0) &amp;&amp; (substr($v_path, -1) != '/')) {
-            $v_path .= '/';
-          }
-          $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
-        }
-        if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
-          $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Option PCLZIP_OPT_EXTRACT_AS_STRING not set.&quot;);
-        }
-        else {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Option PCLZIP_OPT_EXTRACT_AS_STRING set.&quot;);
-        }
-      }
-
-      // ----- Look for 2 args
-      // Here we need to support the first historic synopsis of the
-      // method.
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Static synopsis&quot;);
-
-        // ----- Get the first argument
-        $v_path = $v_arg_list[0];
-
-        // ----- Look for the optional second argument
-        if ($v_size == 2) {
-          $v_remove_path = $v_arg_list[1];
-        }
-        else if ($v_size &gt; 2) {
-          // ----- Error log
-          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid number / type of arguments&quot;);
-
-          // ----- Return
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-          return 0;
-        }
-      }
-    }
-
-    // ----- Trace
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;index='$p_index', path='$v_path', remove_path='$v_remove_path', remove_all_path='&quot;.($v_remove_path?'true':'false').&quot;'&quot;);
-
-    // ----- Trick
-    // Here I want to reuse extractByRule(), so I need to parse the $p_index
-    // with privParseOptions()
-    $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
-    $v_options_trick = array();
-    $v_result = $this-&gt;privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
-                                        array (PCLZIP_OPT_BY_INDEX =&gt; 'optional' ));
-    if ($v_result != 1) {
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-        return 0;
-    }
-    $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
-
-    // ----- Call the extracting fct
-    if (($v_result = $this-&gt;privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) &lt; 1) {
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
-        return(0);
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
-    return $p_list;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function :
-  //   delete([$p_option, $p_option_value, ...])
-  // Description :
-  //   This method removes files from the archive.
-  //   If no parameters are given, then all the archive is emptied.
-  // Parameters :
-  //   None or optional arguments.
-  // Options :
-  //   PCLZIP_OPT_BY_INDEX :
-  //   PCLZIP_OPT_BY_NAME :
-  //   PCLZIP_OPT_BY_EREG : 
-  //   PCLZIP_OPT_BY_PREG :
-  // Return Values :
-  //   0 on failure,
-  //   The list of the files which are still present in the archive.
-  //   (see PclZip::listContent() for list entry format)
-  // --------------------------------------------------------------------------------
-  function delete()
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::delete&quot;, &quot;&quot;);
-    $v_result=1;
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Check archive
-    if (!$this-&gt;privCheckFormat()) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return(0);
-    }
-
-    // ----- Set default values
-    $v_options = array();
-
-    // ----- Look for variable options arguments
-    $v_size = func_num_args();
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
-
-    // ----- Look for arguments
-    if ($v_size &gt; 0) {
-      // ----- Get the arguments
-      $v_arg_list = func_get_args();
-
-      // ----- Parse the options
-      $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
-                                        array (PCLZIP_OPT_BY_NAME =&gt; 'optional',
-                                               PCLZIP_OPT_BY_EREG =&gt; 'optional',
-                                               PCLZIP_OPT_BY_PREG =&gt; 'optional',
-                                               PCLZIP_OPT_BY_INDEX =&gt; 'optional' ));
-      if ($v_result != 1) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-          return 0;
-      }
-    }
-
-    // ----- Magic quotes trick
-    $this-&gt;privDisableMagicQuotes();
-
-    // ----- Call the delete fct
-    $v_list = array();
-    if (($v_result = $this-&gt;privDeleteByRule($v_list, $v_options)) != 1) {
-      $this-&gt;privSwapBackMagicQuotes();
-      unset($v_list);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
-      return(0);
-    }
-
-    // ----- Magic quotes trick
-    $this-&gt;privSwapBackMagicQuotes();
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_list);
-    return $v_list;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : deleteByIndex()
-  // Description :
-  //   ***** Deprecated *****
-  //   delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered.
-  // --------------------------------------------------------------------------------
-  function deleteByIndex($p_index)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::deleteByIndex&quot;, &quot;index='$p_index'&quot;);
-    
-    $p_list = $this-&gt;delete(PCLZIP_OPT_BY_INDEX, $p_index);
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
-    return $p_list;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : properties()
-  // Description :
-  //   This method gives the properties of the archive.
-  //   The properties are :
-  //     nb : Number of files in the archive
-  //     comment : Comment associated with the archive file
-  //     status : not_exist, ok
-  // Parameters :
-  //   None
-  // Return Values :
-  //   0 on failure,
-  //   An array with the archive properties.
-  // --------------------------------------------------------------------------------
-  function properties()
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::properties&quot;, &quot;&quot;);
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Magic quotes trick
-    $this-&gt;privDisableMagicQuotes();
-
-    // ----- Check archive
-    if (!$this-&gt;privCheckFormat()) {
-      $this-&gt;privSwapBackMagicQuotes();
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return(0);
-    }
-
-    // ----- Default properties
-    $v_prop = array();
-    $v_prop['comment'] = '';
-    $v_prop['nb'] = 0;
-    $v_prop['status'] = 'not_exist';
-
-    // ----- Look if file exists
-    if (@is_file($this-&gt;zipname))
-    {
-      // ----- Open the zip file
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-      if (($this-&gt;zip_fd = @fopen($this-&gt;zipname, 'rb')) == 0)
-      {
-        $this-&gt;privSwapBackMagicQuotes();
-        
-        // ----- Error log
-        PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this-&gt;zipname.'\' in binary read mode');
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), 0);
-        return 0;
-      }
-
-      // ----- Read the central directory informations
-      $v_central_dir = array();
-      if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
-      {
-        $this-&gt;privSwapBackMagicQuotes();
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-        return 0;
-      }
-
-      // ----- Close the zip file
-      $this-&gt;privCloseFd();
-
-      // ----- Set the user attributes
-      $v_prop['comment'] = $v_central_dir['comment'];
-      $v_prop['nb'] = $v_central_dir['entries'];
-      $v_prop['status'] = 'ok';
-    }
-
-    // ----- Magic quotes trick
-    $this-&gt;privSwapBackMagicQuotes();
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_prop);
-    return $v_prop;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : duplicate()
-  // Description :
-  //   This method creates an archive by copying the content of an other one. If
-  //   the archive already exist, it is replaced by the new one without any warning.
-  // Parameters :
-  //   $p_archive : The filename of a valid archive, or
-  //                a valid PclZip object.
-  // Return Values :
-  //   1 on success.
-  //   0 or a negative value on error (error code).
-  // --------------------------------------------------------------------------------
-  function duplicate($p_archive)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::duplicate&quot;, &quot;&quot;);
-    $v_result = 1;
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Look if the $p_archive is a PclZip object
-    if ((is_object($p_archive)) &amp;&amp; (get_class($p_archive) == 'pclzip'))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The parameter is valid PclZip object '&quot;.$p_archive-&gt;zipname.&quot;'&quot;);
-
-      // ----- Duplicate the archive
-      $v_result = $this-&gt;privDuplicate($p_archive-&gt;zipname);
-    }
-
-    // ----- Look if the $p_archive is a string (so a filename)
-    else if (is_string($p_archive))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The parameter is a filename '$p_archive'&quot;);
-
-      // ----- Check that $p_archive is a valid zip file
-      // TBC : Should also check the archive format
-      if (!is_file($p_archive)) {
-        // ----- Error log
-        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, &quot;No file with filename '&quot;.$p_archive.&quot;'&quot;);
-        $v_result = PCLZIP_ERR_MISSING_FILE;
-      }
-      else {
-        // ----- Duplicate the archive
-        $v_result = $this-&gt;privDuplicate($p_archive);
-      }
-    }
-
-    // ----- Invalid variable
-    else
-    {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid variable type p_archive_to_add&quot;);
-      $v_result = PCLZIP_ERR_INVALID_PARAMETER;
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : merge()
-  // Description :
-  //   This method merge the $p_archive_to_add archive at the end of the current
-  //   one ($this).
-  //   If the archive ($this) does not exist, the merge becomes a duplicate.
-  //   If the $p_archive_to_add archive does not exist, the merge is a success.
-  // Parameters :
-  //   $p_archive_to_add : It can be directly the filename of a valid zip archive,
-  //                       or a PclZip object archive.
-  // Return Values :
-  //   1 on success,
-  //   0 or negative values on error (see below).
-  // --------------------------------------------------------------------------------
-  function merge($p_archive_to_add)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::merge&quot;, &quot;&quot;);
-    $v_result = 1;
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Check archive
-    if (!$this-&gt;privCheckFormat()) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
-      return(0);
-    }
-
-    // ----- Look if the $p_archive_to_add is a PclZip object
-    if ((is_object($p_archive_to_add)) &amp;&amp; (get_class($p_archive_to_add) == 'pclzip'))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The parameter is valid PclZip object&quot;);
-
-      // ----- Merge the archive
-      $v_result = $this-&gt;privMerge($p_archive_to_add);
-    }
-
-    // ----- Look if the $p_archive_to_add is a string (so a filename)
-    else if (is_string($p_archive_to_add))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The parameter is a filename&quot;);
-
-      // ----- Create a temporary archive
-      $v_object_archive = new PclZip($p_archive_to_add);
-
-      // ----- Merge the archive
-      $v_result = $this-&gt;privMerge($v_object_archive);
-    }
-
-    // ----- Invalid variable
-    else
-    {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid variable type p_archive_to_add&quot;);
-      $v_result = PCLZIP_ERR_INVALID_PARAMETER;
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-
-
-  // --------------------------------------------------------------------------------
-  // Function : errorCode()
-  // Description :
-  // Parameters :
-  // --------------------------------------------------------------------------------
-  function errorCode()
-  {
-    if (PCLZIP_ERROR_EXTERNAL == 1) {
-      return(PclErrorCode());
-    }
-    else {
-      return($this-&gt;error_code);
-    }
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : errorName()
-  // Description :
-  // Parameters :
-  // --------------------------------------------------------------------------------
-  function errorName($p_with_code=false)
-  {
-    $v_name = array ( PCLZIP_ERR_NO_ERROR =&gt; 'PCLZIP_ERR_NO_ERROR',
-                      PCLZIP_ERR_WRITE_OPEN_FAIL =&gt; 'PCLZIP_ERR_WRITE_OPEN_FAIL',
-                      PCLZIP_ERR_READ_OPEN_FAIL =&gt; 'PCLZIP_ERR_READ_OPEN_FAIL',
-                      PCLZIP_ERR_INVALID_PARAMETER =&gt; 'PCLZIP_ERR_INVALID_PARAMETER',
-                      PCLZIP_ERR_MISSING_FILE =&gt; 'PCLZIP_ERR_MISSING_FILE',
-                      PCLZIP_ERR_FILENAME_TOO_LONG =&gt; 'PCLZIP_ERR_FILENAME_TOO_LONG',
-                      PCLZIP_ERR_INVALID_ZIP =&gt; 'PCLZIP_ERR_INVALID_ZIP',
-                      PCLZIP_ERR_BAD_EXTRACTED_FILE =&gt; 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
-                      PCLZIP_ERR_DIR_CREATE_FAIL =&gt; 'PCLZIP_ERR_DIR_CREATE_FAIL',
-                      PCLZIP_ERR_BAD_EXTENSION =&gt; 'PCLZIP_ERR_BAD_EXTENSION',
-                      PCLZIP_ERR_BAD_FORMAT =&gt; 'PCLZIP_ERR_BAD_FORMAT',
-                      PCLZIP_ERR_DELETE_FILE_FAIL =&gt; 'PCLZIP_ERR_DELETE_FILE_FAIL',
-                      PCLZIP_ERR_RENAME_FILE_FAIL =&gt; 'PCLZIP_ERR_RENAME_FILE_FAIL',
-                      PCLZIP_ERR_BAD_CHECKSUM =&gt; 'PCLZIP_ERR_BAD_CHECKSUM',
-                      PCLZIP_ERR_INVALID_ARCHIVE_ZIP =&gt; 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
-                      PCLZIP_ERR_MISSING_OPTION_VALUE =&gt; 'PCLZIP_ERR_MISSING_OPTION_VALUE',
-                      PCLZIP_ERR_INVALID_OPTION_VALUE =&gt; 'PCLZIP_ERR_INVALID_OPTION_VALUE',
-                      PCLZIP_ERR_UNSUPPORTED_COMPRESSION =&gt; 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
-                      PCLZIP_ERR_UNSUPPORTED_ENCRYPTION =&gt; 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
-                      ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE =&gt; 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
-                      ,PCLZIP_ERR_DIRECTORY_RESTRICTION =&gt; 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
-                    );
-
-    if (isset($v_name[$this-&gt;error_code])) {
-      $v_value = $v_name[$this-&gt;error_code];
-    }
-    else {
-      $v_value = 'NoName';
-    }
-
-    if ($p_with_code) {
-      return($v_value.' ('.$this-&gt;error_code.')');
-    }
-    else {
-      return($v_value);
-    }
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : errorInfo()
-  // Description :
-  // Parameters :
-  // --------------------------------------------------------------------------------
-  function errorInfo($p_full=false)
-  {
-    if (PCLZIP_ERROR_EXTERNAL == 1) {
-      return(PclErrorString());
-    }
-    else {
-      if ($p_full) {
-        return($this-&gt;errorName(true).&quot; : &quot;.$this-&gt;error_string);
-      }
-      else {
-        return($this-&gt;error_string.&quot; [code &quot;.$this-&gt;error_code.&quot;]&quot;);
-      }
-    }
-  }
-  // --------------------------------------------------------------------------------
-
-
-// --------------------------------------------------------------------------------
-// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
-// *****                                                        *****
-// *****       THESES FUNCTIONS MUST NOT BE USED DIRECTLY       *****
-// --------------------------------------------------------------------------------
-
-
-
-  // --------------------------------------------------------------------------------
-  // Function : privCheckFormat()
-  // Description :
-  //   This method check that the archive exists and is a valid zip archive.
-  //   Several level of check exists. (futur)
-  // Parameters :
-  //   $p_level : Level of check. Default 0.
-  //              0 : Check the first bytes (magic codes) (default value))
-  //              1 : 0 + Check the central directory (futur)
-  //              2 : 1 + Check each file header (futur)
-  // Return Values :
-  //   true on success,
-  //   false on error, the error code is set.
-  // --------------------------------------------------------------------------------
-  function privCheckFormat($p_level=0)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCheckFormat&quot;, &quot;&quot;);
-    $v_result = true;
-
-	// ----- Reset the file system cache
-    clearstatcache();
-
-    // ----- Reset the error handler
-    $this-&gt;privErrorReset();
-
-    // ----- Look if the file exits
-    if (!is_file($this-&gt;zipname)) {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, &quot;Missing archive file '&quot;.$this-&gt;zipname.&quot;'&quot;);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
-      return(false);
-    }
-
-    // ----- Check that the file is readeable
-    if (!is_readable($this-&gt;zipname)) {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, &quot;Unable to read archive '&quot;.$this-&gt;zipname.&quot;'&quot;);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
-      return(false);
-    }
-
-    // ----- Check the magic code
-    // TBC
-
-    // ----- Check the central header
-    // TBC
-
-    // ----- Check each file header
-    // TBC
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privParseOptions()
-  // Description :
-  //   This internal methods reads the variable list of arguments ($p_options_list,
-  //   $p_size) and generate an array with the options and values ($v_result_list).
-  //   $v_requested_options contains the options that can be present and those that
-  //   must be present.
-  //   $v_requested_options is an array, with the option value as key, and 'optional',
-  //   or 'mandatory' as value.
-  // Parameters :
-  //   See above.
-  // Return Values :
-  //   1 on success.
-  //   0 on failure.
-  // --------------------------------------------------------------------------------
-  function privParseOptions(&amp;$p_options_list, $p_size, &amp;$v_result_list, $v_requested_options=false)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privParseOptions&quot;, &quot;&quot;);
-    $v_result=1;
-    
-    // ----- Read the options
-    $i=0;
-    while ($i&lt;$p_size) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Looking for table index $i, option = '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;(&quot;.$p_options_list[$i].&quot;)'&quot;);
-
-      // ----- Check if the option is supported
-      if (!isset($v_requested_options[$p_options_list[$i]])) {
-        // ----- Error log
-        PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid optional parameter '&quot;.$p_options_list[$i].&quot;' for this method&quot;);
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-
-      // ----- Look for next option
-      switch ($p_options_list[$i]) {
-        // ----- Look for options that request a path value
-        case PCLZIP_OPT_PATH :
-        case PCLZIP_OPT_REMOVE_PATH :
-        case PCLZIP_OPT_ADD_PATH :
-          // ----- Check the number of parameters
-          if (($i+1) &gt;= $p_size) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Get the value
-          $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
-          $i++;
-        break;
-
-        case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
-          // ----- Check the number of parameters
-          if (($i+1) &gt;= $p_size) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Get the value
-          if (   is_string($p_options_list[$i+1])
-              &amp;&amp; ($p_options_list[$i+1] != '')) {
-            $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
-            $i++;
-          }
-          else {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; set with an empty value is ignored.&quot;);
-          }
-        break;
-
-        // ----- Look for options that request an array of string for value
-        case PCLZIP_OPT_BY_NAME :
-          // ----- Check the number of parameters
-          if (($i+1) &gt;= $p_size) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Get the value
-          if (is_string($p_options_list[$i+1])) {
-              $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
-          }
-          else if (is_array($p_options_list[$i+1])) {
-              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
-          }
-          else {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Wrong parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-          ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
-          $i++;
-        break;
-
-        // ----- Look for options that request an EREG or PREG expression
-        case PCLZIP_OPT_BY_EREG :
-        case PCLZIP_OPT_BY_PREG :
-        //case PCLZIP_OPT_CRYPT :
-          // ----- Check the number of parameters
-          if (($i+1) &gt;= $p_size) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Get the value
-          if (is_string($p_options_list[$i+1])) {
-              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
-          }
-          else {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Wrong parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
-          $i++;
-        break;
-
-        // ----- Look for options that takes a string
-        case PCLZIP_OPT_COMMENT :
-        case PCLZIP_OPT_ADD_COMMENT :
-        case PCLZIP_OPT_PREPEND_COMMENT :
-          // ----- Check the number of parameters
-          if (($i+1) &gt;= $p_size) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
-			                     &quot;Missing parameter value for option '&quot;
-								 .PclZipUtilOptionText($p_options_list[$i])
-								 .&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Get the value
-          if (is_string($p_options_list[$i+1])) {
-              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
-          }
-          else {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
-			                     &quot;Wrong parameter value for option '&quot;
-								 .PclZipUtilOptionText($p_options_list[$i])
-								 .&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
-          $i++;
-        break;
-
-        // ----- Look for options that request an array of index
-        case PCLZIP_OPT_BY_INDEX :
-          // ----- Check the number of parameters
-          if (($i+1) &gt;= $p_size) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Get the value
-          $v_work_list = array();
-          if (is_string($p_options_list[$i+1])) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Index value is a string '&quot;.$p_options_list[$i+1].&quot;'&quot;);
-
-              // ----- Remove spaces
-              $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
-
-              // ----- Parse items
-              $v_work_list = explode(&quot;,&quot;, $p_options_list[$i+1]);
-          }
-          else if (is_integer($p_options_list[$i+1])) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Index value is an integer '&quot;.$p_options_list[$i+1].&quot;'&quot;);
-              $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
-          }
-          else if (is_array($p_options_list[$i+1])) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Index value is an array&quot;);
-              $v_work_list = $p_options_list[$i+1];
-          }
-          else {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Value must be integer, string or array for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-          
-          // ----- Reduce the index list
-          // each index item in the list must be a couple with a start and
-          // an end value : [0,3], [5-5], [8-10], ...
-          // ----- Check the format of each item
-          $v_sort_flag=false;
-          $v_sort_value=0;
-          for ($j=0; $j&lt;sizeof($v_work_list); $j++) {
-              // ----- Explode the item
-              $v_item_list = explode(&quot;-&quot;, $v_work_list[$j]);
-              $v_size_item_list = sizeof($v_item_list);
-              
-              // ----- TBC : Here we might check that each item is a
-              // real integer ...
-              
-              // ----- Look for single value
-              if ($v_size_item_list == 1) {
-                  // ----- Set the option value
-                  $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
-                  $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
-              }
-              elseif ($v_size_item_list == 2) {
-                  // ----- Set the option value
-                  $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
-                  $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
-              }
-              else {
-                  // ----- Error log
-                  PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Too many values in index range for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-                  // ----- Return
-                  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-                  return PclZip::errorCode();
-              }
-
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extracted index item = [&quot;.$v_result_list[$p_options_list[$i]][$j]['start'].&quot;,&quot;.$v_result_list[$p_options_list[$i]][$j]['end'].&quot;]&quot;);
-
-              // ----- Look for list sort
-              if ($v_result_list[$p_options_list[$i]][$j]['start'] &lt; $v_sort_value) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The list should be sorted ...&quot;);
-                  $v_sort_flag=true;
-
-                  // ----- TBC : An automatic sort should be writen ...
-                  // ----- Error log
-                  PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Invalid order of index range for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-                  // ----- Return
-                  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-                  return PclZip::errorCode();
-              }
-              $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
-          }
-          
-          // ----- Sort the items
-          if ($v_sort_flag) {
-              // TBC : To Be Completed
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;List sorting is not yet write ...&quot;);
-          }
-
-          // ----- Next option
-          $i++;
-        break;
-
-        // ----- Look for options that request no value
-        case PCLZIP_OPT_REMOVE_ALL_PATH :
-        case PCLZIP_OPT_EXTRACT_AS_STRING :
-        case PCLZIP_OPT_NO_COMPRESSION :
-        case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
-        case PCLZIP_OPT_REPLACE_NEWER :
-        case PCLZIP_OPT_STOP_ON_ERROR :
-          $v_result_list[$p_options_list[$i]] = true;
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
-        break;
-
-        // ----- Look for options that request an octal value
-        case PCLZIP_OPT_SET_CHMOD :
-          // ----- Check the number of parameters
-          if (($i+1) &gt;= $p_size) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Get the value
-          $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
-          $i++;
-        break;
-
-        // ----- Look for options that request a call-back
-        case PCLZIP_CB_PRE_EXTRACT :
-        case PCLZIP_CB_POST_EXTRACT :
-        case PCLZIP_CB_PRE_ADD :
-        case PCLZIP_CB_POST_ADD :
-        /* for futur use
-        case PCLZIP_CB_PRE_DELETE :
-        case PCLZIP_CB_POST_DELETE :
-        case PCLZIP_CB_PRE_LIST :
-        case PCLZIP_CB_POST_LIST :
-        */
-          // ----- Check the number of parameters
-          if (($i+1) &gt;= $p_size) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Get the value
-          $v_function_name = $p_options_list[$i+1];
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;call-back &quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_function_name.&quot;'&quot;);
-
-          // ----- Check that the value is a valid existing function
-          if (!function_exists($v_function_name)) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Function '&quot;.$v_function_name.&quot;()' is not an existing function for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          // ----- Set the attribute
-          $v_result_list[$p_options_list[$i]] = $v_function_name;
-          $i++;
-        break;
-
-        default :
-          // ----- Error log
-          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
-		                       &quot;Unknown parameter '&quot;
-							   .$p_options_list[$i].&quot;'&quot;);
-
-          // ----- Return
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-          return PclZip::errorCode();
-      }
-
-      // ----- Next options
-      $i++;
-    }
-
-    // ----- Look for mandatory options
-    if ($v_requested_options !== false) {
-      for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
-        // ----- Look for mandatory option
-        if ($v_requested_options[$key] == 'mandatory') {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Detect a mandatory option : &quot;.PclZipUtilOptionText($key).&quot;(&quot;.$key.&quot;)&quot;);
-          // ----- Look if present
-          if (!isset($v_result_list[$key])) {
-            // ----- Error log
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Missing mandatory parameter &quot;.PclZipUtilOptionText($key).&quot;(&quot;.$key.&quot;)&quot;);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-        }
-      }
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privFileDescrParseAtt()
-  // Description :
-  // Parameters :
-  // Return Values :
-  //   1 on success.
-  //   0 on failure.
-  // --------------------------------------------------------------------------------
-  function privFileDescrParseAtt(&amp;$p_file_list, &amp;$p_filedescr, $v_options, $v_requested_options=false)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privFileDescrParseAtt&quot;, &quot;&quot;);
-    $v_result=1;
-    
-    // ----- For each file in the list check the attributes
-    foreach ($p_file_list as $v_key =&gt; $v_value) {
-    
-      // ----- Check if the option is supported
-      if (!isset($v_requested_options[$v_key])) {
-        // ----- Error log
-        PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid file attribute '&quot;.$v_key.&quot;' for this file&quot;);
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-
-      // ----- Look for attribute
-      switch ($v_key) {
-        case PCLZIP_ATT_FILE_NAME :
-          if (!is_string($v_value)) {
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid type &quot;.gettype($v_value).&quot;. String expected for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($v_key).&quot; = '&quot;.$v_value.&quot;'&quot;);
-          
-          if ($p_filedescr['filename'] == '') {
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid empty filename for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-        break;
-
-        case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
-          if (!is_string($v_value)) {
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid type &quot;.gettype($v_value).&quot;. String expected for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($v_key).&quot; = '&quot;.$v_value.&quot;'&quot;);
-
-          if ($p_filedescr['new_short_name'] == '') {
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid empty short filename for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-        break;
-
-        case PCLZIP_ATT_FILE_NEW_FULL_NAME :
-          if (!is_string($v_value)) {
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid type &quot;.gettype($v_value).&quot;. String expected for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-
-          $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($v_key).&quot; = '&quot;.$v_value.&quot;'&quot;);
-
-          if ($p_filedescr['new_full_name'] == '') {
-            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid empty full filename for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-          }
-        break;
-
-        default :
-          // ----- Error log
-          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
-		                           &quot;Unknown parameter '&quot;.$v_key.&quot;'&quot;);
-
-          // ----- Return
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-          return PclZip::errorCode();
-      }
-
-      // ----- Look for mandatory options
-      if ($v_requested_options !== false) {
-        for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
-          // ----- Look for mandatory option
-          if ($v_requested_options[$key] == 'mandatory') {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Detect a mandatory option : &quot;.PclZipUtilOptionText($key).&quot;(&quot;.$key.&quot;)&quot;);
-            // ----- Look if present
-            if (!isset($p_file_list[$key])) {
-              PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Missing mandatory parameter &quot;.PclZipUtilOptionText($key).&quot;(&quot;.$key.&quot;)&quot;);
-              //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-              return PclZip::errorCode();
-            }
-          }
-        }
-      }
-    
-    // end foreach
-    }
-    
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privFileDescrExpand()
-  // Description :
-  // Parameters :
-  // Return Values :
-  //   1 on success.
-  //   0 on failure.
-  // --------------------------------------------------------------------------------
-  function privFileDescrExpand(&amp;$p_filedescr_list, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privFileDescrExpand&quot;, &quot;&quot;);
-    $v_result=1;
-    
-    // ----- Create a result list
-    $v_result_list = array();
-    
-    // ----- Look each entry
-    for ($i=0; $i&lt;sizeof($p_filedescr_list); $i++) {
-      // ----- Get filedescr
-      $v_descr = $p_filedescr_list[$i];
-      
-      // ----- Reduce the filename
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filedescr before reduction :'&quot;.$v_descr['filename'].&quot;'&quot;);
-      $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename']);
-      $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filedescr after reduction :'&quot;.$v_descr['filename'].&quot;'&quot;);
-      
-      // ----- Get type of descr
-      if (!file_exists($v_descr['filename'])) {
-        // ----- Error log
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$v_descr['filename'].&quot;' does not exists&quot;);
-        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, &quot;File '&quot;.$v_descr['filename'].&quot;' does not exists&quot;);
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-      if (@is_file($v_descr['filename'])) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;This is a file&quot;);
-        $v_descr['type'] = 'file';
-      }
-      else if (@is_dir($v_descr['filename'])) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;This is a folder&quot;);
-        $v_descr['type'] = 'folder';
-      }
-      else if (@is_link($v_descr['filename'])) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Unsupported file type : link&quot;);
-        // skip
-        continue;
-      }
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Unsupported file type : unknown type&quot;);
-        // skip
-        continue;
-      }
-      
-      // ----- Calculate the stored filename
-      $this-&gt;privCalculateStoredFilename($v_descr, $p_options);
-      
-      // ----- Add the descriptor in result list
-      $v_result_list[sizeof($v_result_list)] = $v_descr;
-      
-      // ----- Look for folder
-      if ($v_descr['type'] == 'folder') {
-        // ----- List of items in folder
-        $v_dirlist_descr = array();
-        $v_dirlist_nb = 0;
-        if ($v_folder_handler = @opendir($v_descr['filename'])) {
-          while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Looking for '&quot;.$v_item_handler.&quot;' in the directory&quot;);
-
-            // ----- Skip '.' and '..'
-            if (($v_item_handler == '.') || ($v_item_handler == '..')) {
-                continue;
-            }
-            
-            // ----- Compose the full filename
-            $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
-            
-            // ----- Look for different stored filename
-            // Because the name of the folder was changed, the name of the
-            // files/sub-folders also change
-            if ($v_descr['stored_filename'] != $v_descr['filename']) {
-              $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
-            }
-      
-            $v_dirlist_nb++;
-          }
-        }
-        else {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unable to open dir '&quot;.$v_descr['filename'].&quot;' in read mode. Skipped.&quot;);
-          // TBC : unable to open folder in read mode
-        }
-        
-        // ----- Expand each element of the list
-        if ($v_dirlist_nb != 0) {
-          // ----- Expand
-          if (($v_result = $this-&gt;privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-          }
-          
-          // ----- Concat the resulting list
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Merging result list (size '&quot;.sizeof($v_result_list).&quot;') with dirlist (size '&quot;.sizeof($v_dirlist_descr).&quot;')&quot;);
-          $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;merged result list is size '&quot;.sizeof($v_result_list).&quot;'&quot;);
-        }
-        else {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Nothing in this folder to expand.&quot;);
-        }
-          
-        // ----- Free local array
-        unset($v_dirlist_descr);
-      }
-    }
-    
-    // ----- Get the result list
-    $p_filedescr_list = $v_result_list;
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privCreate()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privCreate($p_filedescr_list, &amp;$p_result_list, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCreate&quot;, &quot;list&quot;);
-    $v_result=1;
-    $v_list_detail = array();
-    
-    // ----- Magic quotes trick
-    $this-&gt;privDisableMagicQuotes();
-
-    // ----- Open the file in write mode
-    if (($v_result = $this-&gt;privOpenFd('wb')) != 1)
-    {
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Add the list of files
-    $v_result = $this-&gt;privAddList($p_filedescr_list, $p_result_list, $p_options);
-
-    // ----- Close
-    $this-&gt;privCloseFd();
-
-    // ----- Magic quotes trick
-    $this-&gt;privSwapBackMagicQuotes();
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privAdd()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privAdd($p_filedescr_list, &amp;$p_result_list, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privAdd&quot;, &quot;list&quot;);
-    $v_result=1;
-    $v_list_detail = array();
-
-    // ----- Look if the archive exists or is empty
-    if ((!is_file($this-&gt;zipname)) || (filesize($this-&gt;zipname) == 0))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Archive does not exist, or is empty, create it.&quot;);
-
-      // ----- Do a create
-      $v_result = $this-&gt;privCreate($p_filedescr_list, $p_result_list, $p_options);
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-    // ----- Magic quotes trick
-    $this-&gt;privDisableMagicQuotes();
-
-    // ----- Open the zip file
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($v_result=$this-&gt;privOpenFd('rb')) != 1)
-    {
-      // ----- Magic quotes trick
-      $this-&gt;privSwapBackMagicQuotes();
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Read the central directory informations
-    $v_central_dir = array();
-    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
-    {
-      $this-&gt;privCloseFd();
-      $this-&gt;privSwapBackMagicQuotes();
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Go to beginning of File
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-    @rewind($this-&gt;zip_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-
-    // ----- Creates a temporay file
-    $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
-
-    // ----- Open the temporary file in write mode
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
-    {
-      $this-&gt;privCloseFd();
-      $this-&gt;privSwapBackMagicQuotes();
-
-      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Copy the files from the archive to the temporary file
-    // TBC : Here I should better append the file and go back to erase the central dir
-    $v_size = $v_central_dir['offset'];
-    while ($v_size != 0)
-    {
-      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-      $v_buffer = fread($this-&gt;zip_fd, $v_read_size);
-      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
-      $v_size -= $v_read_size;
-    }
-
-    // ----- Swap the file descriptor
-    // Here is a trick : I swap the temporary fd with the zip fd, in order to use
-    // the following methods on the temporary fil and not the real archive
-    $v_swap = $this-&gt;zip_fd;
-    $this-&gt;zip_fd = $v_zip_temp_fd;
-    $v_zip_temp_fd = $v_swap;
-
-    // ----- Add the files
-    $v_header_list = array();
-    if (($v_result = $this-&gt;privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
-    {
-      fclose($v_zip_temp_fd);
-      $this-&gt;privCloseFd();
-      @unlink($v_zip_temp_name);
-      $this-&gt;privSwapBackMagicQuotes();
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Store the offset of the central dir
-    $v_offset = @ftell($this-&gt;zip_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;New offset of central dir : $v_offset&quot;);
-
-    // ----- Copy the block of file headers from the old archive
-    $v_size = $v_central_dir['size'];
-    while ($v_size != 0)
-    {
-      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-      $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
-      @fwrite($this-&gt;zip_fd, $v_buffer, $v_read_size);
-      $v_size -= $v_read_size;
-    }
-
-    // ----- Create the Central Dir files header
-    for ($i=0, $v_count=0; $i&lt;sizeof($v_header_list); $i++)
-    {
-      // ----- Create the file header
-      if ($v_header_list[$i]['status'] == 'ok') {
-        if (($v_result = $this-&gt;privWriteCentralFileHeader($v_header_list[$i])) != 1) {
-          fclose($v_zip_temp_fd);
-          $this-&gt;privCloseFd();
-          @unlink($v_zip_temp_name);
-          $this-&gt;privSwapBackMagicQuotes();
-
-          // ----- Return
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-          return $v_result;
-        }
-        $v_count++;
-      }
-
-      // ----- Transform the header to a 'usable' info
-      $this-&gt;privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
-    }
-
-    // ----- Zip file comment
-    $v_comment = $v_central_dir['comment'];
-    if (isset($p_options[PCLZIP_OPT_COMMENT])) {
-      $v_comment = $p_options[PCLZIP_OPT_COMMENT];
-    }
-    if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
-      $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
-    }
-    if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
-      $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
-    }
-
-    // ----- Calculate the size of the central header
-    $v_size = @ftell($this-&gt;zip_fd)-$v_offset;
-
-    // ----- Create the central dir footer
-    if (($v_result = $this-&gt;privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
-    {
-      // ----- Reset the file list
-      unset($v_header_list);
-      $this-&gt;privSwapBackMagicQuotes();
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Swap back the file descriptor
-    $v_swap = $this-&gt;zip_fd;
-    $this-&gt;zip_fd = $v_zip_temp_fd;
-    $v_zip_temp_fd = $v_swap;
-
-    // ----- Close
-    $this-&gt;privCloseFd();
-
-    // ----- Close the temporary file
-    @fclose($v_zip_temp_fd);
-
-    // ----- Magic quotes trick
-    $this-&gt;privSwapBackMagicQuotes();
-
-    // ----- Delete the zip file
-    // TBC : I should test the result ...
-    @unlink($this-&gt;zipname);
-
-    // ----- Rename the temporary file
-    // TBC : I should test the result ...
-    //@rename($v_zip_temp_name, $this-&gt;zipname);
-    PclZipUtilRename($v_zip_temp_name, $this-&gt;zipname);
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privOpenFd()
-  // Description :
-  // Parameters :
-  // --------------------------------------------------------------------------------
-  function privOpenFd($p_mode)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privOpenFd&quot;, 'mode='.$p_mode);
-    $v_result=1;
-
-    // ----- Look if already open
-    if ($this-&gt;zip_fd != 0)
-    {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this-&gt;zipname.'\' already open');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Open the zip file
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Open file in '.$p_mode.' mode');
-    if (($this-&gt;zip_fd = @fopen($this-&gt;zipname, $p_mode)) == 0)
-    {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this-&gt;zipname.'\' in '.$p_mode.' mode');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privCloseFd()
-  // Description :
-  // Parameters :
-  // --------------------------------------------------------------------------------
-  function privCloseFd()
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCloseFd&quot;, &quot;&quot;);
-    $v_result=1;
-
-    if ($this-&gt;zip_fd != 0)
-      @fclose($this-&gt;zip_fd);
-    $this-&gt;zip_fd = 0;
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privAddList()
-  // Description :
-  //   $p_add_dir and $p_remove_dir will give the ability to memorize a path which is
-  //   different from the real path of the file. This is usefull if you want to have PclTar
-  //   running in any directory, and memorize relative path from an other directory.
-  // Parameters :
-  //   $p_list : An array containing the file or directory names to add in the tar
-  //   $p_result_list : list of added files with their properties (specially the status field)
-  //   $p_add_dir : Path to add in the filename path archived
-  //   $p_remove_dir : Path to remove in the filename path archived
-  // Return Values :
-  // --------------------------------------------------------------------------------
-//  function privAddList($p_list, &amp;$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &amp;$p_options)
-  function privAddList($p_filedescr_list, &amp;$p_result_list, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privAddList&quot;, &quot;list&quot;);
-    $v_result=1;
-
-    // ----- Add the files
-    $v_header_list = array();
-    if (($v_result = $this-&gt;privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
-    {
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Store the offset of the central dir
-    $v_offset = @ftell($this-&gt;zip_fd);
-
-    // ----- Create the Central Dir files header
-    for ($i=0,$v_count=0; $i&lt;sizeof($v_header_list); $i++)
-    {
-      // ----- Create the file header
-      if ($v_header_list[$i]['status'] == 'ok') {
-        if (($v_result = $this-&gt;privWriteCentralFileHeader($v_header_list[$i])) != 1) {
-          // ----- Return
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-          return $v_result;
-        }
-        $v_count++;
-      }
-
-      // ----- Transform the header to a 'usable' info
-      $this-&gt;privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
-    }
-
-    // ----- Zip file comment
-    $v_comment = '';
-    if (isset($p_options[PCLZIP_OPT_COMMENT])) {
-      $v_comment = $p_options[PCLZIP_OPT_COMMENT];
-    }
-
-    // ----- Calculate the size of the central header
-    $v_size = @ftell($this-&gt;zip_fd)-$v_offset;
-
-    // ----- Create the central dir footer
-    if (($v_result = $this-&gt;privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
-    {
-      // ----- Reset the file list
-      unset($v_header_list);
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privAddFileList()
-  // Description :
-  // Parameters :
-  //   $p_filedescr_list : An array containing the file description 
-  //                      or directory names to add in the zip
-  //   $p_result_list : list of added files with their properties (specially the status field)
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privAddFileList($p_filedescr_list, &amp;$p_result_list, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privAddFileList&quot;, &quot;filedescr_list&quot;);
-    $v_result=1;
-    $v_header = array();
-
-    // ----- Recuperate the current number of elt in list
-    $v_nb = sizeof($p_result_list);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Before add, list have &quot;.$v_nb.&quot; elements&quot;);
-
-    // ----- Loop on the files
-    for ($j=0; ($j&lt;sizeof($p_filedescr_list)) &amp;&amp; ($v_result==1); $j++) {
-      // ----- Format the filename
-      $p_filedescr_list[$j]['filename']
-      = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
-      
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Looking for file '&quot;.$p_filedescr_list[$j]['filename'].&quot;'&quot;);
-
-      // ----- Skip empty file names
-      // TBC : Can this be possible ? not checked in DescrParseAtt ?
-      if ($p_filedescr_list[$j]['filename'] == &quot;&quot;) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Skip empty filename&quot;);
-        continue;
-      }
-
-      // ----- Check the filename
-      if (!file_exists($p_filedescr_list[$j]['filename'])) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$p_filedescr_list[$j]['filename'].&quot;' does not exists&quot;);
-        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, &quot;File '&quot;.$p_filedescr_list[$j]['filename'].&quot;' does not exists&quot;);
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-
-      // ----- Look if it is a file or a dir with no all path remove option
-      if (   (is_file($p_filedescr_list[$j]['filename']))
-          || (   is_dir($p_filedescr_list[$j]['filename'])
-              &amp;&amp; (   !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
-                  || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
-
-        // ----- Add the file
-        $v_result = $this-&gt;privAddFile($p_filedescr_list[$j], $v_header,
-                                       $p_options);
-        if ($v_result != 1) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-          return $v_result;
-        }
-
-        // ----- Store the file infos
-        $p_result_list[$v_nb++] = $v_header;
-      }
-    }
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;After add, list have &quot;.$v_nb.&quot; elements&quot;);
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privAddFile()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privAddFile($p_filedescr, &amp;$p_header, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privAddFile&quot;, &quot;filename='&quot;.$p_filedescr['filename'].&quot;'&quot;);
-    $v_result=1;
-    
-    // ----- Working variable
-    $p_filename = $p_filedescr['filename'];
-
-    // TBC : Already done in the fileAtt check ... ?
-    if ($p_filename == &quot;&quot;) {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid file list parameter (invalid or empty list)&quot;);
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-  
-    // ----- Look for a stored different filename 
-    if (isset($p_filedescr['stored_filename'])) {
-      $v_stored_filename = $p_filedescr['stored_filename'];
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is NOT the same &quot;'.$v_stored_filename.'&quot;');
-    }
-    else {
-      $v_stored_filename = $p_filedescr['stored_filename'];
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is the same');
-    }
-
-    // ----- Set the file properties
-    clearstatcache();
-    $p_header['version'] = 20;
-    $p_header['version_extracted'] = 10;
-    $p_header['flag'] = 0;
-    $p_header['compression'] = 0;
-    $p_header['mtime'] = filemtime($p_filename);
-    $p_header['crc'] = 0;
-    $p_header['compressed_size'] = 0;
-    $p_header['size'] = filesize($p_filename);
-    $p_header['filename_len'] = strlen($p_filename);
-    $p_header['extra_len'] = 0;
-    $p_header['comment_len'] = 0;
-    $p_header['disk'] = 0;
-    $p_header['internal'] = 0;
-//    $p_header['external'] = (is_file($p_filename)?0xFE49FFE0:0x41FF0010);
-    $p_header['external'] = (is_file($p_filename)?0x00000000:0x00000010);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Header external extension '&quot;.sprintf(&quot;0x%X&quot;,$p_header['external']).&quot;'&quot;);
-    $p_header['offset'] = 0;
-    $p_header['filename'] = $p_filename;
-    $p_header['stored_filename'] = $v_stored_filename;
-    $p_header['extra'] = '';
-    $p_header['comment'] = '';
-    $p_header['status'] = 'ok';
-    $p_header['index'] = -1;
-
-    // ----- Look for pre-add callback
-    if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A pre-callback '&quot;.$p_options[PCLZIP_CB_PRE_ADD].&quot;()') is defined for the extraction&quot;);
-
-      // ----- Generate a local information
-      $v_local_header = array();
-      $this-&gt;privConvertHeader2FileInfo($p_header, $v_local_header);
-
-      // ----- Call the callback
-      // Here I do not use call_user_func() because I need to send a reference to the
-      // header.
-      eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);');
-      if ($v_result == 0) {
-        // ----- Change the file status
-        $p_header['status'] = &quot;skipped&quot;;
-        $v_result = 1;
-      }
-
-      // ----- Update the informations
-      // Only some fields can be modified
-      if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
-        $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;New stored filename is '&quot;.$p_header['stored_filename'].&quot;'&quot;);
-      }
-    }
-
-    // ----- Look for empty stored filename
-    if ($p_header['stored_filename'] == &quot;&quot;) {
-      $p_header['status'] = &quot;filtered&quot;;
-    }
-    
-    // ----- Check the path length
-    if (strlen($p_header['stored_filename']) &gt; 0xFF) {
-      $p_header['status'] = 'filename_too_long';
-    }
-
-    // ----- Look if no error, or file not skipped
-    if ($p_header['status'] == 'ok') {
-
-      // ----- Look for a file
-      if (is_file($p_filename))
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;'&quot;.$p_filename.&quot;' is a file&quot;);
-        // ----- Open the source file
-        if (($v_file = @fopen($p_filename, &quot;rb&quot;)) == 0) {
-          PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, &quot;Unable to open file '$p_filename' in binary read mode&quot;);
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-          return PclZip::errorCode();
-        }
-
-        if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File will not be compressed&quot;);
-          // ----- Read the file content
-          $v_content_compressed = @fread($v_file, $p_header['size']);
-
-          // ----- Calculate the CRC
-          $p_header['crc'] = @crc32($v_content_compressed);
-
-          // ----- Set header parameters
-          $p_header['compressed_size'] = $p_header['size'];
-          $p_header['compression'] = 0;
-        }
-        else {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File will be compressed&quot;);
-          // ----- Read the file content
-          $v_content = @fread($v_file, $p_header['size']);
-
-          // ----- Calculate the CRC
-          $p_header['crc'] = @crc32($v_content);
-
-          // ----- Compress the file
-          $v_content_compressed = @gzdeflate($v_content);
-
-          // ----- Set header parameters
-          $p_header['compressed_size'] = strlen($v_content_compressed);
-          $p_header['compression'] = 8;
-        }
-        
-        // ----- Look for encryption
-        /*
-        if ((isset($p_options[PCLZIP_OPT_CRYPT]))
-		    &amp;&amp; ($p_options[PCLZIP_OPT_CRYPT] != &quot;&quot;)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File need to be crypted ....&quot;);
-          
-          // Should be a random header
-          $v_header = 'xxxxxxxxxxxx';
-	      $v_content_compressed = PclZipUtilZipEncrypt($v_content_compressed,
-		                                           $p_header['compressed_size'],
-	                                               $v_header,
-												   $p_header['crc'],
-												   &quot;test&quot;);
-												   
-          $p_header['compressed_size'] += 12;
-          $p_header['flag'] = 1;
-          
-          // ----- Add the header to the data
-          $v_content_compressed = $v_header.$v_content_compressed;
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Size after header : &quot;.strlen($v_content_compressed).&quot;&quot;);
-        }
-        */
-
-        // ----- Call the header generation
-        if (($v_result = $this-&gt;privWriteFileHeader($p_header)) != 1) {
-          @fclose($v_file);
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-          return $v_result;
-        }
-
-        // ----- Write the compressed (or not) content
-        @fwrite($this-&gt;zip_fd, 
-		            $v_content_compressed, $p_header['compressed_size']);
-        
-        // ----- Close the file
-        @fclose($v_file);
-      }
-
-      // ----- Look for a directory
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;'&quot;.$p_filename.&quot;' is a folder&quot;);
-        // ----- Look for directory last '/'
-        if (@substr($p_header['stored_filename'], -1) != '/') {
-          $p_header['stored_filename'] .= '/';
-        }
-
-        // ----- Set the file properties
-        $p_header['size'] = 0;
-        //$p_header['external'] = 0x41FF0010;   // Value for a folder : to be checked
-        $p_header['external'] = 0x00000010;   // Value for a folder : to be checked
-
-        // ----- Call the header generation
-        if (($v_result = $this-&gt;privWriteFileHeader($p_header)) != 1)
-        {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-          return $v_result;
-        }
-      }
-    }
-
-    // ----- Look for post-add callback
-    if (isset($p_options[PCLZIP_CB_POST_ADD])) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A post-callback '&quot;.$p_options[PCLZIP_CB_POST_ADD].&quot;()') is defined for the extraction&quot;);
-
-      // ----- Generate a local information
-      $v_local_header = array();
-      $this-&gt;privConvertHeader2FileInfo($p_header, $v_local_header);
-
-      // ----- Call the callback
-      // Here I do not use call_user_func() because I need to send a reference to the
-      // header.
-      eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
-      if ($v_result == 0) {
-        // ----- Ignored
-        $v_result = 1;
-      }
-
-      // ----- Update the informations
-      // Nothing can be modified
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privCalculateStoredFilename()
-  // Description :
-  //   Based on file descriptor properties and global options, this method
-  //   calculate the filename that will be stored in the archive.
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privCalculateStoredFilename(&amp;$p_filedescr, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCalculateStoredFilename&quot;, &quot;filename='&quot;.$p_filedescr['filename'].&quot;'&quot;);
-    $v_result=1;
-    
-    // ----- Working variables
-    $p_filename = $p_filedescr['filename'];
-    if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
-      $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
-    }
-    else {
-      $p_add_dir = '';
-    }
-    if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
-      $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
-    }
-    else {
-      $p_remove_dir = '';
-    }
-    if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
-      $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
-    }
-    else {
-      $p_remove_all_dir = 0;
-    }
-
-    // ----- Look for full name change
-    if (isset($p_filedescr['new_full_name'])) {
-      $v_stored_filename = $p_filedescr['new_full_name'];
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Changing full name of '&quot;.$p_filename.&quot;' for '&quot;.$v_stored_filename.&quot;'&quot;);
-    }
-    
-    // ----- Look for path and/or short name change
-    else {
-
-      // ----- Look for short name change
-      if (isset($p_filedescr['new_short_name'])) {
-        $v_path_info = pathinfo($p_filename);
-        $v_dir = '';
-        if ($v_path_info['dirname'] != '') {
-          $v_dir = $v_path_info['dirname'].'/';
-        }
-        $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Changing short name of '&quot;.$p_filename.&quot;' for '&quot;.$v_stored_filename.&quot;'&quot;);
-      }
-      else {
-        // ----- Calculate the stored filename
-        $v_stored_filename = $p_filename;
-      }
-
-      // ----- Look for all path to remove
-      if ($p_remove_all_dir) {
-        $v_stored_filename = basename($p_filename);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Remove all path selected change '&quot;.$p_filename.&quot;' for '&quot;.$v_stored_filename.&quot;'&quot;);
-      }
-      // ----- Look for partial path remove
-      else if ($p_remove_dir != &quot;&quot;) {
-        if (substr($p_remove_dir, -1) != '/')
-          $p_remove_dir .= &quot;/&quot;;
-
-        if (   (substr($p_filename, 0, 2) == &quot;./&quot;)
-            || (substr($p_remove_dir, 0, 2) == &quot;./&quot;)) {
-            
-          if (   (substr($p_filename, 0, 2) == &quot;./&quot;)
-              &amp;&amp; (substr($p_remove_dir, 0, 2) != &quot;./&quot;)) {
-            $p_remove_dir = &quot;./&quot;.$p_remove_dir;
-          }
-          if (   (substr($p_filename, 0, 2) != &quot;./&quot;)
-              &amp;&amp; (substr($p_remove_dir, 0, 2) == &quot;./&quot;)) {
-            $p_remove_dir = substr($p_remove_dir, 2);
-          }
-        }
-
-        $v_compare = PclZipUtilPathInclusion($p_remove_dir,
-                                             $v_stored_filename);
-        if ($v_compare &gt; 0) {
-          if ($v_compare == 2) {
-            $v_stored_filename = &quot;&quot;;
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Path to remove is the current folder&quot;);
-          }
-          else {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Remove path '$p_remove_dir' in file '$v_stored_filename'&quot;);
-            $v_stored_filename = substr($v_stored_filename,
-                                        strlen($p_remove_dir));
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Result is '$v_stored_filename'&quot;);
-          }
-        }
-      }
-      // ----- Look for path to add
-      if ($p_add_dir != &quot;&quot;) {
-        if (substr($p_add_dir, -1) == &quot;/&quot;)
-          $v_stored_filename = $p_add_dir.$v_stored_filename;
-        else
-          $v_stored_filename = $p_add_dir.&quot;/&quot;.$v_stored_filename;
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Add path '$p_add_dir' in file '$p_filename' = '$v_stored_filename'&quot;);
-      }
-    }
-
-    // ----- Filename (reduce the path of stored name)
-    $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
-    $p_filedescr['stored_filename'] = $v_stored_filename;
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Stored filename will be '&quot;.$p_filedescr['stored_filename'].&quot;', strlen &quot;.strlen($p_filedescr['stored_filename']));
-    
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privWriteFileHeader()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privWriteFileHeader(&amp;$p_header)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privWriteFileHeader&quot;, 'file=&quot;'.$p_header['filename'].'&quot;, stored as &quot;'.$p_header['stored_filename'].'&quot;');
-    $v_result=1;
-
-    // ----- Store the offset position of the file
-    $p_header['offset'] = ftell($this-&gt;zip_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'File offset of the header :'.$p_header['offset']);
-
-    // ----- Transform UNIX mtime to DOS format mdate/mtime
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
-    $v_date = getdate($p_header['mtime']);
-    $v_mtime = ($v_date['hours']&lt;&lt;11) + ($v_date['minutes']&lt;&lt;5) + $v_date['seconds']/2;
-    $v_mdate = (($v_date['year']-1980)&lt;&lt;9) + ($v_date['mon']&lt;&lt;5) + $v_date['mday'];
-
-    // ----- Packed data
-    $v_binary_data = pack(&quot;VvvvvvVVVvv&quot;, 0x04034b50,
-	                      $p_header['version_extracted'], $p_header['flag'],
-                          $p_header['compression'], $v_mtime, $v_mdate,
-                          $p_header['crc'], $p_header['compressed_size'],
-						  $p_header['size'],
-                          strlen($p_header['stored_filename']),
-						  $p_header['extra_len']);
-
-    // ----- Write the first 148 bytes of the header in the archive
-    fputs($this-&gt;zip_fd, $v_binary_data, 30);
-
-    // ----- Write the variable fields
-    if (strlen($p_header['stored_filename']) != 0)
-    {
-      fputs($this-&gt;zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
-    }
-    if ($p_header['extra_len'] != 0)
-    {
-      fputs($this-&gt;zip_fd, $p_header['extra'], $p_header['extra_len']);
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privWriteCentralFileHeader()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privWriteCentralFileHeader(&amp;$p_header)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privWriteCentralFileHeader&quot;, 'file=&quot;'.$p_header['filename'].'&quot;, stored as &quot;'.$p_header['stored_filename'].'&quot;');
-    $v_result=1;
-
-    // TBC
-    //for(reset($p_header); $key = key($p_header); next($p_header)) {
-    //  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;header[$key] = &quot;.$p_header[$key]);
-    //}
-
-    // ----- Transform UNIX mtime to DOS format mdate/mtime
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
-    $v_date = getdate($p_header['mtime']);
-    $v_mtime = ($v_date['hours']&lt;&lt;11) + ($v_date['minutes']&lt;&lt;5) + $v_date['seconds']/2;
-    $v_mdate = (($v_date['year']-1980)&lt;&lt;9) + ($v_date['mon']&lt;&lt;5) + $v_date['mday'];
-
-    // ----- Packed data
-    $v_binary_data = pack(&quot;VvvvvvvVVVvvvvvVV&quot;, 0x02014b50,
-	                      $p_header['version'], $p_header['version_extracted'],
-                          $p_header['flag'], $p_header['compression'],
-						  $v_mtime, $v_mdate, $p_header['crc'],
-                          $p_header['compressed_size'], $p_header['size'],
-                          strlen($p_header['stored_filename']),
-						  $p_header['extra_len'], $p_header['comment_len'],
-                          $p_header['disk'], $p_header['internal'],
-						  $p_header['external'], $p_header['offset']);
-
-    // ----- Write the 42 bytes of the header in the zip file
-    fputs($this-&gt;zip_fd, $v_binary_data, 46);
-
-    // ----- Write the variable fields
-    if (strlen($p_header['stored_filename']) != 0)
-    {
-      fputs($this-&gt;zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
-    }
-    if ($p_header['extra_len'] != 0)
-    {
-      fputs($this-&gt;zip_fd, $p_header['extra'], $p_header['extra_len']);
-    }
-    if ($p_header['comment_len'] != 0)
-    {
-      fputs($this-&gt;zip_fd, $p_header['comment'], $p_header['comment_len']);
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privWriteCentralHeader()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privWriteCentralHeader&quot;, 'nb_entries='.$p_nb_entries.', size='.$p_size.', offset='.$p_offset.', comment=&quot;'.$p_comment.'&quot;');
-    $v_result=1;
-
-    // ----- Packed data
-    $v_binary_data = pack(&quot;VvvvvVVv&quot;, 0x06054b50, 0, 0, $p_nb_entries,
-	                      $p_nb_entries, $p_size,
-						  $p_offset, strlen($p_comment));
-
-    // ----- Write the 22 bytes of the header in the zip file
-    fputs($this-&gt;zip_fd, $v_binary_data, 22);
-
-    // ----- Write the variable fields
-    if (strlen($p_comment) != 0)
-    {
-      fputs($this-&gt;zip_fd, $p_comment, strlen($p_comment));
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privList()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privList(&amp;$p_list)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privList&quot;, &quot;list&quot;);
-    $v_result=1;
-
-    // ----- Magic quotes trick
-    $this-&gt;privDisableMagicQuotes();
-
-    // ----- Open the zip file
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($this-&gt;zip_fd = @fopen($this-&gt;zipname, 'rb')) == 0)
-    {
-      // ----- Magic quotes trick
-      $this-&gt;privSwapBackMagicQuotes();
-      
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this-&gt;zipname.'\' in binary read mode');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Read the central directory informations
-    $v_central_dir = array();
-    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
-    {
-      $this-&gt;privSwapBackMagicQuotes();
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Go to beginning of Central Dir
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Offset : &quot;.$v_central_dir['offset'].&quot;'&quot;);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-    @rewind($this-&gt;zip_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-    if (@fseek($this-&gt;zip_fd, $v_central_dir['offset']))
-    {
-      $this-&gt;privSwapBackMagicQuotes();
-
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-
-    // ----- Read each entry
-    for ($i=0; $i&lt;$v_central_dir['entries']; $i++)
-    {
-      // ----- Read the file header
-      if (($v_result = $this-&gt;privReadCentralFileHeader($v_header)) != 1)
-      {
-        $this-&gt;privSwapBackMagicQuotes();
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-        return $v_result;
-      }
-      $v_header['index'] = $i;
-
-      // ----- Get the only interesting attributes
-      $this-&gt;privConvertHeader2FileInfo($v_header, $p_list[$i]);
-      unset($v_header);
-    }
-
-    // ----- Close the zip file
-    $this-&gt;privCloseFd();
-
-    // ----- Magic quotes trick
-    $this-&gt;privSwapBackMagicQuotes();
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privConvertHeader2FileInfo()
-  // Description :
-  //   This function takes the file informations from the central directory
-  //   entries and extract the interesting parameters that will be given back.
-  //   The resulting file infos are set in the array $p_info
-  //     $p_info['filename'] : Filename with full path. Given by user (add),
-  //                           extracted in the filesystem (extract).
-  //     $p_info['stored_filename'] : Stored filename in the archive.
-  //     $p_info['size'] = Size of the file.
-  //     $p_info['compressed_size'] = Compressed size of the file.
-  //     $p_info['mtime'] = Last modification date of the file.
-  //     $p_info['comment'] = Comment associated with the file.
-  //     $p_info['folder'] = true/false : indicates if the entry is a folder or not.
-  //     $p_info['status'] = status of the action on the file.
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privConvertHeader2FileInfo($p_header, &amp;$p_info)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privConvertHeader2FileInfo&quot;, &quot;Filename='&quot;.$p_header['filename'].&quot;'&quot;);
-    $v_result=1;
-
-    // ----- Get the interesting attributes
-    $p_info['filename'] = $p_header['filename'];
-    $p_info['stored_filename'] = $p_header['stored_filename'];
-    $p_info['size'] = $p_header['size'];
-    $p_info['compressed_size'] = $p_header['compressed_size'];
-    $p_info['mtime'] = $p_header['mtime'];
-    $p_info['comment'] = $p_header['comment'];
-    $p_info['folder'] = (($p_header['external']&amp;0x00000010)==0x00000010);
-    $p_info['index'] = $p_header['index'];
-    $p_info['status'] = $p_header['status'];
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privExtractByRule()
-  // Description :
-  //   Extract a file or directory depending of rules (by index, by name, ...)
-  // Parameters :
-  //   $p_file_list : An array where will be placed the properties of each
-  //                  extracted file
-  //   $p_path : Path to add while writing the extracted files
-  //   $p_remove_path : Path to remove (from the file memorized path) while writing the
-  //                    extracted files. If the path does not match the file path,
-  //                    the file is extracted with its memorized path.
-  //                    $p_remove_path does not apply to 'list' mode.
-  //                    $p_path and $p_remove_path are commulative.
-  // Return Values :
-  //   1 on success,0 or less on error (see error code list)
-  // --------------------------------------------------------------------------------
-  function privExtractByRule(&amp;$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privExtractByRule&quot;, &quot;path='$p_path', remove_path='$p_remove_path', remove_all_path='&quot;.($p_remove_all_path?'true':'false').&quot;'&quot;);
-    $v_result=1;
-
-    // ----- Magic quotes trick
-    $this-&gt;privDisableMagicQuotes();
-
-    // ----- Check the path
-    if (   ($p_path == &quot;&quot;)
-	    || (   (substr($p_path, 0, 1) != &quot;/&quot;)
-		    &amp;&amp; (substr($p_path, 0, 3) != &quot;../&quot;)
-			&amp;&amp; (substr($p_path,1,2)!=&quot;:/&quot;)))
-      $p_path = &quot;./&quot;.$p_path;
-
-    // ----- Reduce the path last (and duplicated) '/'
-    if (($p_path != &quot;./&quot;) &amp;&amp; ($p_path != &quot;/&quot;))
-    {
-      // ----- Look for the path end '/'
-      while (substr($p_path, -1) == &quot;/&quot;)
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Destination path [$p_path] ends by '/'&quot;);
-        $p_path = substr($p_path, 0, strlen($p_path)-1);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Modified to [$p_path]&quot;);
-      }
-    }
-
-    // ----- Look for path to remove format (should end by /)
-    if (($p_remove_path != &quot;&quot;) &amp;&amp; (substr($p_remove_path, -1) != '/'))
-    {
-      $p_remove_path .= '/';
-    }
-    $p_remove_path_size = strlen($p_remove_path);
-
-    // ----- Open the zip file
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($v_result = $this-&gt;privOpenFd('rb')) != 1)
-    {
-      $this-&gt;privSwapBackMagicQuotes();
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Read the central directory informations
-    $v_central_dir = array();
-    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
-    {
-      // ----- Close the zip file
-      $this-&gt;privCloseFd();
-      $this-&gt;privSwapBackMagicQuotes();
-
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Start at beginning of Central Dir
-    $v_pos_entry = $v_central_dir['offset'];
-
-    // ----- Read each entry
-    $j_start = 0;
-    for ($i=0, $v_nb_extracted=0; $i&lt;$v_central_dir['entries']; $i++)
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Read next file header entry : '$i'&quot;);
-
-      // ----- Read next Central dir entry
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Position before rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-      @rewind($this-&gt;zip_fd);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Position after rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-      if (@fseek($this-&gt;zip_fd, $v_pos_entry))
-      {
-        // ----- Close the zip file
-        $this-&gt;privCloseFd();
-        $this-&gt;privSwapBackMagicQuotes();
-
-        // ----- Error log
-        PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Position after fseek : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-
-      // ----- Read the file header
-      $v_header = array();
-      if (($v_result = $this-&gt;privReadCentralFileHeader($v_header)) != 1)
-      {
-        // ----- Close the zip file
-        $this-&gt;privCloseFd();
-        $this-&gt;privSwapBackMagicQuotes();
-
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-        return $v_result;
-      }
-
-      // ----- Store the index
-      $v_header['index'] = $i;
-
-      // ----- Store the file position
-      $v_pos_entry = ftell($this-&gt;zip_fd);
-
-      // ----- Look for the specific extract rules
-      $v_extract = false;
-
-      // ----- Look for extract by name rule
-      if (   (isset($p_options[PCLZIP_OPT_BY_NAME]))
-          &amp;&amp; ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByName'&quot;);
-
-          // ----- Look if the filename is in the list
-          for ($j=0; ($j&lt;sizeof($p_options[PCLZIP_OPT_BY_NAME])) &amp;&amp; (!$v_extract); $j++) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Compare with file '&quot;.$p_options[PCLZIP_OPT_BY_NAME][$j].&quot;'&quot;);
-
-              // ----- Look for a directory
-              if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == &quot;/&quot;) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The searched item is a directory&quot;);
-
-                  // ----- Look if the directory is in the filename path
-                  if (   (strlen($v_header['stored_filename']) &gt; strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
-                      &amp;&amp; (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
-                      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The directory is in the file path&quot;);
-                      $v_extract = true;
-                  }
-              }
-              // ----- Look for a filename
-              elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The file is the right one.&quot;);
-                  $v_extract = true;
-              }
-          }
-      }
-
-      // ----- Look for extract by ereg rule
-      else if (   (isset($p_options[PCLZIP_OPT_BY_EREG]))
-               &amp;&amp; ($p_options[PCLZIP_OPT_BY_EREG] != &quot;&quot;)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract by ereg '&quot;.$p_options[PCLZIP_OPT_BY_EREG].&quot;'&quot;);
-
-          if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename match the regular expression&quot;);
-              $v_extract = true;
-          }
-      }
-
-      // ----- Look for extract by preg rule
-      else if (   (isset($p_options[PCLZIP_OPT_BY_PREG]))
-               &amp;&amp; ($p_options[PCLZIP_OPT_BY_PREG] != &quot;&quot;)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByEreg'&quot;);
-
-          if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename match the regular expression&quot;);
-              $v_extract = true;
-          }
-      }
-
-      // ----- Look for extract by index rule
-      else if (   (isset($p_options[PCLZIP_OPT_BY_INDEX]))
-               &amp;&amp; ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByIndex'&quot;);
-          
-          // ----- Look if the index is in the list
-          for ($j=$j_start; ($j&lt;sizeof($p_options[PCLZIP_OPT_BY_INDEX])) &amp;&amp; (!$v_extract); $j++) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Look if index '$i' is in [&quot;.$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].&quot;,&quot;.$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'].&quot;]&quot;);
-
-              if (($i&gt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) &amp;&amp; ($i&lt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Found as part of an index range&quot;);
-                  $v_extract = true;
-              }
-              if ($i&gt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Do not look this index range for next loop&quot;);
-                  $j_start = $j+1;
-              }
-
-              if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']&gt;$i) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Index range is greater than index, stop loop&quot;);
-                  break;
-              }
-          }
-      }
-
-      // ----- Look for no rule, which means extract all the archive
-      else {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with no rule (extract all)&quot;);
-          $v_extract = true;
-      }
-
-	  // ----- Check compression method
-	  if (   ($v_extract)
-	      &amp;&amp; (   ($v_header['compression'] != 8)
-		      &amp;&amp; ($v_header['compression'] != 0))) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unsupported compression method (&quot;.$v_header['compression'].&quot;)&quot;);
-          $v_header['status'] = 'unsupported_compression';
-
-          // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
-          if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
-		      &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
-
-              $this-&gt;privSwapBackMagicQuotes();
-              
-              PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
-			                       &quot;Filename '&quot;.$v_header['stored_filename'].&quot;' is &quot;
-				  	    	  	   .&quot;compressed by an unsupported compression &quot;
-				  	    	  	   .&quot;method (&quot;.$v_header['compression'].&quot;) &quot;);
-
-              //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-              return PclZip::errorCode();
-		  }
-	  }
-	  
-	  // ----- Check encrypted files
-	  if (($v_extract) &amp;&amp; (($v_header['flag'] &amp; 1) == 1)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unsupported file encryption&quot;);
-          $v_header['status'] = 'unsupported_encryption';
-
-          // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
-          if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
-		      &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
-
-              $this-&gt;privSwapBackMagicQuotes();
-
-              PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
-			                       &quot;Unsupported encryption for &quot;
-				  	    	  	   .&quot; filename '&quot;.$v_header['stored_filename']
-								   .&quot;'&quot;);
-
-              //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-              return PclZip::errorCode();
-		  }
-    }
-
-      // ----- Look for real extraction
-      if (($v_extract) &amp;&amp; ($v_header['status'] != 'ok')) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;No need for extract&quot;);
-          $v_result = $this-&gt;privConvertHeader2FileInfo($v_header,
-		                                        $p_file_list[$v_nb_extracted++]);
-          if ($v_result != 1) {
-              $this-&gt;privCloseFd();
-              $this-&gt;privSwapBackMagicQuotes();
-              //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-              return $v_result;
-          }
-
-          $v_extract = false;
-      }
-      
-      // ----- Look for real extraction
-      if ($v_extract)
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting file '&quot;.$v_header['filename'].&quot;', index '$i'&quot;);
-
-        // ----- Go to the file position
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position before rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-        @rewind($this-&gt;zip_fd);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-        if (@fseek($this-&gt;zip_fd, $v_header['offset']))
-        {
-          // ----- Close the zip file
-          $this-&gt;privCloseFd();
-
-          $this-&gt;privSwapBackMagicQuotes();
-
-          // ----- Error log
-          PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
-
-          // ----- Return
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-          return PclZip::errorCode();
-        }
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after fseek : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-
-        // ----- Look for extraction as string
-        if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
-
-          // ----- Extracting the file
-          $v_result1 = $this-&gt;privExtractFileAsString($v_header, $v_string);
-          if ($v_result1 &lt; 1) {
-            $this-&gt;privCloseFd();
-            $this-&gt;privSwapBackMagicQuotes();
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
-            return $v_result1;
-          }
-
-          // ----- Get the only interesting attributes
-          if (($v_result = $this-&gt;privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
-          {
-            // ----- Close the zip file
-            $this-&gt;privCloseFd();
-            $this-&gt;privSwapBackMagicQuotes();
-
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-          }
-
-          // ----- Set the file content
-          $p_file_list[$v_nb_extracted]['content'] = $v_string;
-
-          // ----- Next extracted file
-          $v_nb_extracted++;
-          
-          // ----- Look for user callback abort
-          if ($v_result1 == 2) {
-          	break;
-          }
-        }
-        // ----- Look for extraction in standard output
-        elseif (   (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
-		        &amp;&amp; ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
-          // ----- Extracting the file in standard output
-          $v_result1 = $this-&gt;privExtractFileInOutput($v_header, $p_options);
-          if ($v_result1 &lt; 1) {
-            $this-&gt;privCloseFd();
-            $this-&gt;privSwapBackMagicQuotes();
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
-            return $v_result1;
-          }
-
-          // ----- Get the only interesting attributes
-          if (($v_result = $this-&gt;privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
-            $this-&gt;privCloseFd();
-            $this-&gt;privSwapBackMagicQuotes();
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-          }
-
-          // ----- Look for user callback abort
-          if ($v_result1 == 2) {
-          	break;
-          }
-        }
-        // ----- Look for normal extraction
-        else {
-          // ----- Extracting the file
-          $v_result1 = $this-&gt;privExtractFile($v_header,
-		                                      $p_path, $p_remove_path,
-											  $p_remove_all_path,
-											  $p_options);
-          if ($v_result1 &lt; 1) {
-            $this-&gt;privCloseFd();
-            $this-&gt;privSwapBackMagicQuotes();
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
-            return $v_result1;
-          }
-
-          // ----- Get the only interesting attributes
-          if (($v_result = $this-&gt;privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
-          {
-            // ----- Close the zip file
-            $this-&gt;privCloseFd();
-            $this-&gt;privSwapBackMagicQuotes();
-
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-          }
-
-          // ----- Look for user callback abort
-          if ($v_result1 == 2) {
-          	break;
-          }
-        }
-      }
-    }
-
-    // ----- Close the zip file
-    $this-&gt;privCloseFd();
-    $this-&gt;privSwapBackMagicQuotes();
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privExtractFile()
-  // Description :
-  // Parameters :
-  // Return Values :
-  //
-  // 1 : ... ?
-  // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback
-  // --------------------------------------------------------------------------------
-  function privExtractFile(&amp;$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFile', &quot;path='$p_path', remove_path='$p_remove_path', remove_all_path='&quot;.($p_remove_all_path?'true':'false').&quot;'&quot;);
-    $v_result=1;
-
-    // ----- Read the file header
-    if (($v_result = $this-&gt;privReadFileHeader($v_header)) != 1)
-    {
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Found file '&quot;.$v_header['filename'].&quot;', size '&quot;.$v_header['size'].&quot;'&quot;);
-
-    // ----- Check that the file header is coherent with $p_entry info
-    if ($this-&gt;privCheckFileHeaders($v_header, $p_entry) != 1) {
-        // TBC
-    }
-
-    // ----- Look for all path to remove
-    if ($p_remove_all_path == true) {
-        // ----- Look for folder entry that not need to be extracted
-        if (($p_entry['external']&amp;0x00000010)==0x00000010) {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The entry is a folder : need to be filtered&quot;);
-
-            $p_entry['status'] = &quot;filtered&quot;;
-
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-        }
-
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;All path is removed&quot;);
-        // ----- Get the basename of the path
-        $p_entry['filename'] = basename($p_entry['filename']);
-    }
-
-    // ----- Look for path to remove
-    else if ($p_remove_path != &quot;&quot;)
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Look for some path to remove&quot;);
-      if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The folder is the same as the removed path '&quot;.$p_entry['filename'].&quot;'&quot;);
-
-        // ----- Change the file status
-        $p_entry['status'] = &quot;filtered&quot;;
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-        return $v_result;
-      }
-
-      $p_remove_path_size = strlen($p_remove_path);
-      if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Found path '$p_remove_path' to remove in file '&quot;.$p_entry['filename'].&quot;'&quot;);
-
-        // ----- Remove the path
-        $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
-
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Resulting file is '&quot;.$p_entry['filename'].&quot;'&quot;);
-      }
-    }
-
-    // ----- Add the path
-    if ($p_path != '') {
-      $p_entry['filename'] = $p_path.&quot;/&quot;.$p_entry['filename'];
-    }
-    
-    // ----- Check a base_dir_restriction
-    if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Check the extract directory restriction&quot;);
-      $v_inclusion
-      = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
-                                $p_entry['filename']); 
-      if ($v_inclusion == 0) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_EXTRACT_DIR_RESTRICTION is selected, file is outside restriction&quot;);
-
-        PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
-			                     &quot;Filename '&quot;.$p_entry['filename'].&quot;' is &quot;
-								 .&quot;outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION&quot;);
-
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-    }
-
-    // ----- Look for pre-extract callback
-    if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A pre-callback '&quot;.$p_options[PCLZIP_CB_PRE_EXTRACT].&quot;()') is defined for the extraction&quot;);
-
-      // ----- Generate a local information
-      $v_local_header = array();
-      $this-&gt;privConvertHeader2FileInfo($p_entry, $v_local_header);
-
-      // ----- Call the callback
-      // Here I do not use call_user_func() because I need to send a reference to the
-      // header.
-      eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
-      if ($v_result == 0) {
-        // ----- Change the file status
-        $p_entry['status'] = &quot;skipped&quot;;
-        $v_result = 1;
-      }
-      
-      // ----- Look for abort result
-      if ($v_result == 2) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;User callback abort the extraction&quot;);
-        // ----- This status is internal and will be changed in 'skipped'
-        $p_entry['status'] = &quot;aborted&quot;;
-      	$v_result = PCLZIP_ERR_USER_ABORTED;
-      }
-
-      // ----- Update the informations
-      // Only some fields can be modified
-      $p_entry['filename'] = $v_local_header['filename'];
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;New filename is '&quot;.$p_entry['filename'].&quot;'&quot;);
-    }
-
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting file (with path) '&quot;.$p_entry['filename'].&quot;', size '$v_header[size]'&quot;);
-
-    // ----- Look if extraction should be done
-    if ($p_entry['status'] == 'ok') {
-
-    // ----- Look for specific actions while the file exist
-    if (file_exists($p_entry['filename']))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$p_entry['filename'].&quot;' already exists&quot;);
-
-      // ----- Look if file is a directory
-      if (is_dir($p_entry['filename']))
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Existing file '&quot;.$p_entry['filename'].&quot;' is a directory&quot;);
-
-        // ----- Change the file status
-        $p_entry['status'] = &quot;already_a_directory&quot;;
-        
-        // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
-        // For historical reason first PclZip implementation does not stop
-        // when this kind of error occurs.
-        if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
-		    &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
-
-            PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
-			                     &quot;Filename '&quot;.$p_entry['filename'].&quot;' is &quot;
-								 .&quot;already used by an existing directory&quot;);
-
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-		}
-      }
-      // ----- Look if file is write protected
-      else if (!is_writeable($p_entry['filename']))
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Existing file '&quot;.$p_entry['filename'].&quot;' is write protected&quot;);
-
-        // ----- Change the file status
-        $p_entry['status'] = &quot;write_protected&quot;;
-
-        // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
-        // For historical reason first PclZip implementation does not stop
-        // when this kind of error occurs.
-        if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
-		    &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
-
-            PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
-			                     &quot;Filename '&quot;.$p_entry['filename'].&quot;' exists &quot;
-								 .&quot;and is write protected&quot;);
-
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-            return PclZip::errorCode();
-		}
-      }
-
-      // ----- Look if the extracted file is older
-      else if (filemtime($p_entry['filename']) &gt; $p_entry['mtime'])
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Existing file '&quot;.$p_entry['filename'].&quot;' is newer (&quot;.date(&quot;l dS of F Y h:i:s A&quot;, filemtime($p_entry['filename'])).&quot;) than the extracted file (&quot;.date(&quot;l dS of F Y h:i:s A&quot;, $p_entry['mtime']).&quot;)&quot;);
-        // ----- Change the file status
-        if (   (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
-		    &amp;&amp; ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_REPLACE_NEWER is selected, file will be replaced&quot;);
-		}
-		else {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File will not be replaced&quot;);
-            $p_entry['status'] = &quot;newer_exist&quot;;
-
-            // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
-            // For historical reason first PclZip implementation does not stop
-            // when this kind of error occurs.
-            if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
-		        &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
-                //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
-
-                PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
-			             &quot;Newer version of '&quot;.$p_entry['filename'].&quot;' exists &quot;
-					    .&quot;and option PCLZIP_OPT_REPLACE_NEWER is not selected&quot;);
-
-                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-                return PclZip::errorCode();
-		    }
-		}
-      }
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Existing file '&quot;.$p_entry['filename'].&quot;' is older than the extrated one - will be replaced by the extracted one (&quot;.date(&quot;l dS of F Y h:i:s A&quot;, filemtime($p_entry['filename'])).&quot;) than the extracted file (&quot;.date(&quot;l dS of F Y h:i:s A&quot;, $p_entry['mtime']).&quot;)&quot;);
-      }
-    }
-
-    // ----- Check the directory availability and create it if necessary
-    else {
-      if ((($p_entry['external']&amp;0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
-        $v_dir_to_check = $p_entry['filename'];
-      else if (!strstr($p_entry['filename'], &quot;/&quot;))
-        $v_dir_to_check = &quot;&quot;;
-      else
-        $v_dir_to_check = dirname($p_entry['filename']);
-
-      if (($v_result = $this-&gt;privDirCheck($v_dir_to_check, (($p_entry['external']&amp;0x00000010)==0x00000010))) != 1) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unable to create path for '&quot;.$p_entry['filename'].&quot;'&quot;);
-
-        // ----- Change the file status
-        $p_entry['status'] = &quot;path_creation_fail&quot;;
-
-        // ----- Return
-        ////--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-        //return $v_result;
-        $v_result = 1;
-      }
-    }
-    }
-
-    // ----- Look if extraction should be done
-    if ($p_entry['status'] == 'ok') {
-
-      // ----- Do the extraction (if not a folder)
-      if (!(($p_entry['external']&amp;0x00000010)==0x00000010))
-      {
-        // ----- Look for not compressed file
-        if ($p_entry['compression'] == 0) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting an un-compressed file&quot;);
-
-		  // ----- Opening destination file
-          if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
-          {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Error while opening '&quot;.$p_entry['filename'].&quot;' in write binary mode&quot;);
-
-            // ----- Change the file status
-            $p_entry['status'] = &quot;write_error&quot;;
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-          }
-
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Read '&quot;.$p_entry['size'].&quot;' bytes&quot;);
-
-          // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
-          $v_size = $p_entry['compressed_size'];
-          while ($v_size != 0)
-          {
-            $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Read $v_read_size bytes&quot;);
-            $v_buffer = @fread($this-&gt;zip_fd, $v_read_size);
-            /* Try to speed up the code
-            $v_binary_data = pack('a'.$v_read_size, $v_buffer);
-            @fwrite($v_dest_file, $v_binary_data, $v_read_size);
-            */
-            @fwrite($v_dest_file, $v_buffer, $v_read_size);            
-            $v_size -= $v_read_size;
-          }
-
-          // ----- Closing the destination file
-          fclose($v_dest_file);
-
-          // ----- Change the file mtime
-          touch($p_entry['filename'], $p_entry['mtime']);
-          
-
-        }
-        else {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting a compressed file (Compression method &quot;.$p_entry['compression'].&quot;)&quot;);
-          // ----- TBC
-          // Need to be finished
-          if (($p_entry['flag'] &amp; 1) == 1) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File is encrypted&quot;);
-            /*
-              // ----- Read the encryption header
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Read 12 encryption header bytes&quot;);
-              $v_encryption_header = @fread($this-&gt;zip_fd, 12);
-              
-              // ----- Read the encrypted &amp; compressed file in a buffer
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Read '&quot;.($p_entry['compressed_size']-12).&quot;' compressed &amp; encrypted bytes&quot;);
-              $v_buffer = @fread($this-&gt;zip_fd, $p_entry['compressed_size']-12);
-              
-              // ----- Decrypt the buffer
-              $this-&gt;privDecrypt($v_encryption_header, $v_buffer,
-			                     $p_entry['compressed_size']-12, $p_entry['crc']);
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Buffer is '&quot;.$v_buffer.&quot;'&quot;);
-              */
-          }
-          else {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Read '&quot;.$p_entry['compressed_size'].&quot;' compressed bytes&quot;);
-              // ----- Read the compressed file in a buffer (one shot)
-              $v_buffer = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
-          }
-          
-          // ----- Decompress the file
-          $v_file_content = @gzinflate($v_buffer);
-          unset($v_buffer);
-          if ($v_file_content === FALSE) {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unable to inflate compressed file&quot;);
-
-            // ----- Change the file status
-            // TBC
-            $p_entry['status'] = &quot;error&quot;;
-            
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-          }
-          
-          // ----- Opening destination file
-          if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Error while opening '&quot;.$p_entry['filename'].&quot;' in write binary mode&quot;);
-
-            // ----- Change the file status
-            $p_entry['status'] = &quot;write_error&quot;;
-
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-          }
-
-          // ----- Write the uncompressed data
-          @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
-          unset($v_file_content);
-
-          // ----- Closing the destination file
-          @fclose($v_dest_file);
-
-          // ----- Change the file mtime
-          @touch($p_entry['filename'], $p_entry['mtime']);
-        }
-
-        // ----- Look for chmod option
-        if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;chmod option activated '&quot;.$p_options[PCLZIP_OPT_SET_CHMOD].&quot;'&quot;);
-
-          // ----- Change the mode of the file
-          @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
-        }
-
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extraction done&quot;);
-      }
-    }
-
-	// ----- Change abort status
-	if ($p_entry['status'] == &quot;aborted&quot;) {
-      $p_entry['status'] = &quot;skipped&quot;;
-	}
-	
-    // ----- Look for post-extract callback
-    elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A post-callback '&quot;.$p_options[PCLZIP_CB_POST_EXTRACT].&quot;()') is defined for the extraction&quot;);
-
-      // ----- Generate a local information
-      $v_local_header = array();
-      $this-&gt;privConvertHeader2FileInfo($p_entry, $v_local_header);
-
-      // ----- Call the callback
-      // Here I do not use call_user_func() because I need to send a reference to the
-      // header.
-      eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
-
-      // ----- Look for abort result
-      if ($v_result == 2) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;User callback abort the extraction&quot;);
-      	$v_result = PCLZIP_ERR_USER_ABORTED;
-      }
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privExtractFileInOutput()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privExtractFileInOutput(&amp;$p_entry, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileInOutput', &quot;&quot;);
-    $v_result=1;
-
-    // ----- Read the file header
-    if (($v_result = $this-&gt;privReadFileHeader($v_header)) != 1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Found file '&quot;.$v_header['filename'].&quot;', size '&quot;.$v_header['size'].&quot;'&quot;);
-
-    // ----- Check that the file header is coherent with $p_entry info
-    if ($this-&gt;privCheckFileHeaders($v_header, $p_entry) != 1) {
-        // TBC
-    }
-
-    // ----- Look for pre-extract callback
-    if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A pre-callback '&quot;.$p_options[PCLZIP_CB_PRE_EXTRACT].&quot;()') is defined for the extraction&quot;);
-
-      // ----- Generate a local information
-      $v_local_header = array();
-      $this-&gt;privConvertHeader2FileInfo($p_entry, $v_local_header);
-
-      // ----- Call the callback
-      // Here I do not use call_user_func() because I need to send a reference to the
-      // header.
-      eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
-      if ($v_result == 0) {
-        // ----- Change the file status
-        $p_entry['status'] = &quot;skipped&quot;;
-        $v_result = 1;
-      }
-
-      // ----- Look for abort result
-      if ($v_result == 2) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;User callback abort the extraction&quot;);
-        // ----- This status is internal and will be changed in 'skipped'
-        $p_entry['status'] = &quot;aborted&quot;;
-      	$v_result = PCLZIP_ERR_USER_ABORTED;
-      }
-
-      // ----- Update the informations
-      // Only some fields can be modified
-      $p_entry['filename'] = $v_local_header['filename'];
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;New filename is '&quot;.$p_entry['filename'].&quot;'&quot;);
-    }
-
-    // ----- Trace
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting file (with path) '&quot;.$p_entry['filename'].&quot;', size '$v_header[size]'&quot;);
-
-    // ----- Look if extraction should be done
-    if ($p_entry['status'] == 'ok') {
-
-      // ----- Do the extraction (if not a folder)
-      if (!(($p_entry['external']&amp;0x00000010)==0x00000010)) {
-        // ----- Look for not compressed file
-        if ($p_entry['compressed_size'] == $p_entry['size']) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting an un-compressed file&quot;);
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Reading '&quot;.$p_entry['size'].&quot;' bytes&quot;);
-
-          // ----- Read the file in a buffer (one shot)
-          $v_buffer = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
-
-          // ----- Send the file to the output
-          echo $v_buffer;
-          unset($v_buffer);
-        }
-        else {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting a compressed file&quot;);
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Reading '&quot;.$p_entry['size'].&quot;' bytes&quot;);
-
-          // ----- Read the compressed file in a buffer (one shot)
-          $v_buffer = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
-          
-          // ----- Decompress the file
-          $v_file_content = gzinflate($v_buffer);
-          unset($v_buffer);
-
-          // ----- Send the file to the output
-          echo $v_file_content;
-          unset($v_file_content);
-        }
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extraction done&quot;);
-      }
-    }
-
-	// ----- Change abort status
-	if ($p_entry['status'] == &quot;aborted&quot;) {
-      $p_entry['status'] = &quot;skipped&quot;;
-	}
-
-    // ----- Look for post-extract callback
-    elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A post-callback '&quot;.$p_options[PCLZIP_CB_POST_EXTRACT].&quot;()') is defined for the extraction&quot;);
-
-      // ----- Generate a local information
-      $v_local_header = array();
-      $this-&gt;privConvertHeader2FileInfo($p_entry, $v_local_header);
-
-      // ----- Call the callback
-      // Here I do not use call_user_func() because I need to send a reference to the
-      // header.
-      eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
-
-      // ----- Look for abort result
-      if ($v_result == 2) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;User callback abort the extraction&quot;);
-      	$v_result = PCLZIP_ERR_USER_ABORTED;
-      }
-    }
-
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privExtractFileAsString()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privExtractFileAsString(&amp;$p_entry, &amp;$p_string)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileAsString', &quot;p_entry['filename']='&quot;.$p_entry['filename'].&quot;'&quot;);
-    $v_result=1;
-
-    // ----- Read the file header
-    $v_header = array();
-    if (($v_result = $this-&gt;privReadFileHeader($v_header)) != 1)
-    {
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Found file '&quot;.$v_header['filename'].&quot;', size '&quot;.$v_header['size'].&quot;'&quot;);
-
-    // ----- Check that the file header is coherent with $p_entry info
-    if ($this-&gt;privCheckFileHeaders($v_header, $p_entry) != 1) {
-        // TBC
-    }
-
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting file in string (with path) '&quot;.$p_entry['filename'].&quot;', size '$v_header[size]'&quot;);
-
-    // ----- Do the extraction (if not a folder)
-    if (!(($p_entry['external']&amp;0x00000010)==0x00000010))
-    {
-      // ----- Look for not compressed file
-//      if ($p_entry['compressed_size'] == $p_entry['size'])
-      if ($p_entry['compression'] == 0) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting an un-compressed file&quot;);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Reading '&quot;.$p_entry['size'].&quot;' bytes&quot;);
-
-        // ----- Reading the file
-        $p_string = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
-      }
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting a compressed file (compression method '&quot;.$p_entry['compression'].&quot;')&quot;);
-
-        // ----- Reading the file
-        $v_data = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
-        
-        // ----- Decompress the file
-        if (($p_string = @gzinflate($v_data)) === FALSE) {
-            // TBC
-        }
-      }
-
-      // ----- Trace
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extraction done&quot;);
-    }
-    else {
-        // TBC : error : can not extract a folder in a string
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privReadFileHeader()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privReadFileHeader(&amp;$p_header)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privReadFileHeader&quot;, &quot;&quot;);
-    $v_result=1;
-
-    // ----- Read the 4 bytes signature
-    $v_binary_data = @fread($this-&gt;zip_fd, 4);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary data is : '&quot;.sprintf(&quot;%08x&quot;, $v_binary_data).&quot;'&quot;);
-    $v_data = unpack('Vid', $v_binary_data);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary signature is : '&quot;.sprintf(&quot;0x%08x&quot;, $v_data['id']).&quot;'&quot;);
-
-    // ----- Check signature
-    if ($v_data['id'] != 0x04034b50)
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Invalid File header&quot;);
-
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Read the first 42 bytes of the header
-    $v_binary_data = fread($this-&gt;zip_fd, 26);
-
-    // ----- Look for invalid block size
-    if (strlen($v_binary_data) != 26)
-    {
-      $p_header['filename'] = &quot;&quot;;
-      $p_header['status'] = &quot;invalid_header&quot;;
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Invalid block size : &quot;.strlen($v_binary_data));
-
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, &quot;Invalid block size : &quot;.strlen($v_binary_data));
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Extract the values
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Header : '&quot;.$v_binary_data.&quot;'&quot;);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Header (Hex) : '&quot;.bin2hex($v_binary_data).&quot;'&quot;);
-    $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
-
-    // ----- Get filename
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;File name length : &quot;.$v_data['filename_len']);
-    $p_header['filename'] = fread($this-&gt;zip_fd, $v_data['filename_len']);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename : \''.$p_header['filename'].'\'');
-
-    // ----- Get extra_fields
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extra field length : &quot;.$v_data['extra_len']);
-    if ($v_data['extra_len'] != 0) {
-      $p_header['extra'] = fread($this-&gt;zip_fd, $v_data['extra_len']);
-    }
-    else {
-      $p_header['extra'] = '';
-    }
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Extra field : \''.bin2hex($p_header['extra']).'\'');
-
-    // ----- Extract properties
-    $p_header['version_extracted'] = $v_data['version'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : ('.$p_header['version_extracted'].') \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
-    $p_header['compression'] = $v_data['compression'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compression method : \''.$p_header['compression'].'\'');
-    $p_header['size'] = $v_data['size'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_header['size'].'\'');
-    $p_header['compressed_size'] = $v_data['compressed_size'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
-    $p_header['crc'] = $v_data['crc'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf(&quot;0x%X&quot;, $p_header['crc']).'\'');
-    $p_header['flag'] = $v_data['flag'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Flag : \''.$p_header['flag'].'\'');
-    $p_header['filename_len'] = $v_data['filename_len'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename_len : \''.$p_header['filename_len'].'\'');
-
-    // ----- Recuperate date in UNIX format
-    $p_header['mdate'] = $v_data['mdate'];
-    $p_header['mtime'] = $v_data['mtime'];
-    if ($p_header['mdate'] &amp;&amp; $p_header['mtime'])
-    {
-      // ----- Extract time
-      $v_hour = ($p_header['mtime'] &amp; 0xF800) &gt;&gt; 11;
-      $v_minute = ($p_header['mtime'] &amp; 0x07E0) &gt;&gt; 5;
-      $v_seconde = ($p_header['mtime'] &amp; 0x001F)*2;
-
-      // ----- Extract date
-      $v_year = (($p_header['mdate'] &amp; 0xFE00) &gt;&gt; 9) + 1980;
-      $v_month = ($p_header['mdate'] &amp; 0x01E0) &gt;&gt; 5;
-      $v_day = $p_header['mdate'] &amp; 0x001F;
-
-      // ----- Get UNIX date format
-      $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
-
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
-    }
-    else
-    {
-      $p_header['mtime'] = time();
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date is actual : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
-    }
-
-    // TBC
-    //for(reset($v_data); $key = key($v_data); next($v_data)) {
-    //  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Attribut[$key] = &quot;.$v_data[$key]);
-    //}
-
-    // ----- Set the stored filename
-    $p_header['stored_filename'] = $p_header['filename'];
-
-    // ----- Set the status field
-    $p_header['status'] = &quot;ok&quot;;
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privReadCentralFileHeader()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privReadCentralFileHeader(&amp;$p_header)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privReadCentralFileHeader&quot;, &quot;&quot;);
-    $v_result=1;
-
-    // ----- Read the 4 bytes signature
-    $v_binary_data = @fread($this-&gt;zip_fd, 4);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary data is : '&quot;.sprintf(&quot;%08x&quot;, $v_binary_data).&quot;'&quot;);
-    $v_data = unpack('Vid', $v_binary_data);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary signature is : '&quot;.sprintf(&quot;0x%08x&quot;, $v_data['id']).&quot;'&quot;);
-
-    // ----- Check signature
-    if ($v_data['id'] != 0x02014b50)
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Invalid Central Dir File signature&quot;);
-
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Read the first 42 bytes of the header
-    $v_binary_data = fread($this-&gt;zip_fd, 42);
-
-    // ----- Look for invalid block size
-    if (strlen($v_binary_data) != 42)
-    {
-      $p_header['filename'] = &quot;&quot;;
-      $p_header['status'] = &quot;invalid_header&quot;;
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Invalid block size : &quot;.strlen($v_binary_data));
-
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, &quot;Invalid block size : &quot;.strlen($v_binary_data));
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Extract the values
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Header : '&quot;.$v_binary_data.&quot;'&quot;);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Header (Hex) : '&quot;.bin2hex($v_binary_data).&quot;'&quot;);
-    $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
-
-    // ----- Get filename
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;File name length : &quot;.$p_header['filename_len']);
-    if ($p_header['filename_len'] != 0)
-      $p_header['filename'] = fread($this-&gt;zip_fd, $p_header['filename_len']);
-    else
-      $p_header['filename'] = '';
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Filename : \''.$p_header['filename'].'\'');
-
-    // ----- Get extra
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Extra length : &quot;.$p_header['extra_len']);
-    if ($p_header['extra_len'] != 0)
-      $p_header['extra'] = fread($this-&gt;zip_fd, $p_header['extra_len']);
-    else
-      $p_header['extra'] = '';
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Extra : \''.$p_header['extra'].'\'');
-
-    // ----- Get comment
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Comment length : &quot;.$p_header['comment_len']);
-    if ($p_header['comment_len'] != 0)
-      $p_header['comment'] = fread($this-&gt;zip_fd, $p_header['comment_len']);
-    else
-      $p_header['comment'] = '';
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Comment : \''.$p_header['comment'].'\'');
-
-    // ----- Extract properties
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version : \''.($p_header['version']/10).'.'.($p_header['version']%10).'\'');
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Size : \''.$p_header['size'].'\'');
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'CRC : \''.sprintf(&quot;0x%X&quot;, $p_header['crc']).'\'');
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Flag : \''.$p_header['flag'].'\'');
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Offset : \''.$p_header['offset'].'\'');
-
-    // ----- Recuperate date in UNIX format
-    if ($p_header['mdate'] &amp;&amp; $p_header['mtime'])
-    {
-      // ----- Extract time
-      $v_hour = ($p_header['mtime'] &amp; 0xF800) &gt;&gt; 11;
-      $v_minute = ($p_header['mtime'] &amp; 0x07E0) &gt;&gt; 5;
-      $v_seconde = ($p_header['mtime'] &amp; 0x001F)*2;
-
-      // ----- Extract date
-      $v_year = (($p_header['mdate'] &amp; 0xFE00) &gt;&gt; 9) + 1980;
-      $v_month = ($p_header['mdate'] &amp; 0x01E0) &gt;&gt; 5;
-      $v_day = $p_header['mdate'] &amp; 0x001F;
-
-      // ----- Get UNIX date format
-      $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
-
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
-    }
-    else
-    {
-      $p_header['mtime'] = time();
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date is actual : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
-    }
-
-    // ----- Set the stored filename
-    $p_header['stored_filename'] = $p_header['filename'];
-
-    // ----- Set default status to ok
-    $p_header['status'] = 'ok';
-
-    // ----- Look if it is a directory
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Internal (Hex) : '&quot;.sprintf(&quot;Ox%04X&quot;, $p_header['internal']).&quot;'&quot;);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;External (Hex) : '&quot;.sprintf(&quot;Ox%04X&quot;, $p_header['external']).&quot;' (&quot;.(($p_header['external']&amp;0x00000010)==0x00000010?'is a folder':'is a file').')');
-    if (substr($p_header['filename'], -1) == '/') {
-      //$p_header['external'] = 0x41FF0010;
-      $p_header['external'] = 0x00000010;
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Force folder external : \''.sprintf(&quot;Ox%04X&quot;, $p_header['external']).'\'');
-    }
-
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Header of filename : \''.$p_header['filename'].'\'');
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privCheckFileHeaders()
-  // Description :
-  // Parameters :
-  // Return Values :
-  //   1 on success,
-  //   0 on error;
-  // --------------------------------------------------------------------------------
-  function privCheckFileHeaders(&amp;$p_local_header, &amp;$p_central_header)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCheckFileHeaders&quot;, &quot;&quot;);
-    $v_result=1;
-
-	// ----- Check the static values
-	// TBC
-	if ($p_local_header['filename'] != $p_central_header['filename']) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;filename&quot; : TBC To Be Completed');
-	}
-	if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;version_extracted&quot; : TBC To Be Completed');
-	}
-	if ($p_local_header['flag'] != $p_central_header['flag']) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;flag&quot; : TBC To Be Completed');
-	}
-	if ($p_local_header['compression'] != $p_central_header['compression']) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;compression&quot; : TBC To Be Completed');
-	}
-	if ($p_local_header['mtime'] != $p_central_header['mtime']) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;mtime&quot; : TBC To Be Completed');
-	}
-	if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;filename_len&quot; : TBC To Be Completed');
-	}
-
-	// ----- Look for flag bit 3
-	if (($p_local_header['flag'] &amp; 8) == 8) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Purpose bit flag bit 3 set !');
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'File size, compression size and crc found in central header');
-        $p_local_header['size'] = $p_central_header['size'];
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_local_header['size'].'\'');
-        $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_local_header['compressed_size'].'\'');
-        $p_local_header['crc'] = $p_central_header['crc'];
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf(&quot;0x%X&quot;, $p_local_header['crc']).'\'');
-	}
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privReadEndCentralDir()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privReadEndCentralDir(&amp;$p_central_dir)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privReadEndCentralDir&quot;, &quot;&quot;);
-    $v_result=1;
-
-    // ----- Go to the end of the zip file
-    $v_size = filesize($this-&gt;zipname);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Size of the file :$v_size&quot;);
-    @fseek($this-&gt;zip_fd, $v_size);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position at end of zip file : \''.ftell($this-&gt;zip_fd).'\'');
-    if (@ftell($this-&gt;zip_fd) != $v_size)
-    {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this-&gt;zipname.'\'');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- First try : look if this is an archive with no commentaries (most of the time)
-    // in this case the end of central dir is at 22 bytes of the file end
-    $v_found = 0;
-    if ($v_size &gt; 26) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Look for central dir with no comment');
-      @fseek($this-&gt;zip_fd, $v_size-22);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after min central position : \''.ftell($this-&gt;zip_fd).'\'');
-      if (($v_pos = @ftell($this-&gt;zip_fd)) != ($v_size-22))
-      {
-        // ----- Error log
-        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this-&gt;zipname.'\'');
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-
-      // ----- Read for bytes
-      $v_binary_data = @fread($this-&gt;zip_fd, 4);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Binary data is : '&quot;.sprintf(&quot;%08x&quot;, $v_binary_data).&quot;'&quot;);
-      $v_data = @unpack('Vid', $v_binary_data);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary signature is : '&quot;.sprintf(&quot;0x%08x&quot;, $v_data['id']).&quot;'&quot;);
-
-      // ----- Check signature
-      if ($v_data['id'] == 0x06054b50) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Found central dir at the default position.&quot;);
-        $v_found = 1;
-      }
-
-      $v_pos = ftell($this-&gt;zip_fd);
-    }
-
-    // ----- Go back to the maximum possible size of the Central Dir End Record
-    if (!$v_found) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Start extended search of end central dir');
-      $v_maximum_size = 65557; // 0xFFFF + 22;
-      if ($v_maximum_size &gt; $v_size)
-        $v_maximum_size = $v_size;
-      @fseek($this-&gt;zip_fd, $v_size-$v_maximum_size);
-      if (@ftell($this-&gt;zip_fd) != ($v_size-$v_maximum_size))
-      {
-        // ----- Error log
-        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this-&gt;zipname.'\'');
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after max central position : \''.ftell($this-&gt;zip_fd).'\'');
-
-      // ----- Read byte per byte in order to find the signature
-      $v_pos = ftell($this-&gt;zip_fd);
-      $v_bytes = 0x00000000;
-      while ($v_pos &lt; $v_size)
-      {
-        // ----- Read a byte
-        $v_byte = @fread($this-&gt;zip_fd, 1);
-
-        // -----  Add the byte
-        $v_bytes = ($v_bytes &lt;&lt; 8) | Ord($v_byte);
-
-        // ----- Compare the bytes
-        if ($v_bytes == 0x504b0506)
-        {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Found End Central Dir signature at position : \''.ftell($this-&gt;zip_fd).'\'');
-          $v_pos++;
-          break;
-        }
-
-        $v_pos++;
-      }
-
-      // ----- Look if not found end of central dir
-      if ($v_pos == $v_size)
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unable to find End of Central Dir Record signature&quot;);
-
-        // ----- Error log
-        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, &quot;Unable to find End of Central Dir Record signature&quot;);
-
-        // ----- Return
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-        return PclZip::errorCode();
-      }
-    }
-
-    // ----- Read the first 18 bytes of the header
-    $v_binary_data = fread($this-&gt;zip_fd, 18);
-
-    // ----- Look for invalid block size
-    if (strlen($v_binary_data) != 18)
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Invalid End of Central Dir Record size : &quot;.strlen($v_binary_data));
-
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, &quot;Invalid End of Central Dir Record size : &quot;.strlen($v_binary_data));
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Extract the values
-    ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Central Dir Record : '&quot;.$v_binary_data.&quot;'&quot;);
-    ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Central Dir Record (Hex) : '&quot;.bin2hex($v_binary_data).&quot;'&quot;);
-    $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
-
-    // ----- Check the global size
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Comment length : &quot;.$v_data['comment_size']);
-    if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The central dir is not at the end of the archive. Some trailing bytes exists after the archive.&quot;);
-
-	  // ----- Removed in release 2.2 see readme file
-	  // The check of the file size is a little too strict.
-	  // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
-	  // While decrypted, zip has training 0 bytes
-	  if (0) {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
-	                       'The central dir is not at the end of the archive.'
-						   .' Some trailing bytes exists after the archive.');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-	  }
-    }
-
-    // ----- Get comment
-    if ($v_data['comment_size'] != 0)
-      $p_central_dir['comment'] = fread($this-&gt;zip_fd, $v_data['comment_size']);
-    else
-      $p_central_dir['comment'] = '';
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Comment : \''.$p_central_dir['comment'].'\'');
-
-    $p_central_dir['entries'] = $v_data['entries'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries : \''.$p_central_dir['entries'].'\'');
-    $p_central_dir['disk_entries'] = $v_data['disk_entries'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries for this disk : \''.$p_central_dir['disk_entries'].'\'');
-    $p_central_dir['offset'] = $v_data['offset'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Offset of Central Dir : \''.$p_central_dir['offset'].'\'');
-    $p_central_dir['size'] = $v_data['size'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size of Central Dir : \''.$p_central_dir['size'].'\'');
-    $p_central_dir['disk'] = $v_data['disk'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Disk number : \''.$p_central_dir['disk'].'\'');
-    $p_central_dir['disk_start'] = $v_data['disk_start'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Start disk number : \''.$p_central_dir['disk_start'].'\'');
-
-    // TBC
-    //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) {
-    //  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;central_dir[$key] = &quot;.$p_central_dir[$key]);
-    //}
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privDeleteByRule()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privDeleteByRule(&amp;$p_result_list, &amp;$p_options)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privDeleteByRule&quot;, &quot;&quot;);
-    $v_result=1;
-    $v_list_detail = array();
-
-    // ----- Open the zip file
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($v_result=$this-&gt;privOpenFd('rb')) != 1)
-    {
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Read the central directory informations
-    $v_central_dir = array();
-    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
-    {
-      $this-&gt;privCloseFd();
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Go to beginning of File
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-    @rewind($this-&gt;zip_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-
-    // ----- Scan all the files
-    // ----- Start at beginning of Central Dir
-    $v_pos_entry = $v_central_dir['offset'];
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position before rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-    @rewind($this-&gt;zip_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-    if (@fseek($this-&gt;zip_fd, $v_pos_entry))
-    {
-      // ----- Close the zip file
-      $this-&gt;privCloseFd();
-
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after fseek : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-
-    // ----- Read each entry
-    $v_header_list = array();
-    $j_start = 0;
-    for ($i=0, $v_nb_extracted=0; $i&lt;$v_central_dir['entries']; $i++)
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Read next file header entry (index '$i')&quot;);
-
-      // ----- Read the file header
-      $v_header_list[$v_nb_extracted] = array();
-      if (($v_result = $this-&gt;privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
-      {
-        // ----- Close the zip file
-        $this-&gt;privCloseFd();
-
-        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-        return $v_result;
-      }
-
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename (index '$i') : '&quot;.$v_header_list[$v_nb_extracted]['stored_filename'].&quot;'&quot;);
-
-      // ----- Store the index
-      $v_header_list[$v_nb_extracted]['index'] = $i;
-
-      // ----- Look for the specific extract rules
-      $v_found = false;
-
-      // ----- Look for extract by name rule
-      if (   (isset($p_options[PCLZIP_OPT_BY_NAME]))
-          &amp;&amp; ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByName'&quot;);
-
-          // ----- Look if the filename is in the list
-          for ($j=0; ($j&lt;sizeof($p_options[PCLZIP_OPT_BY_NAME])) &amp;&amp; (!$v_found); $j++) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Compare with file '&quot;.$p_options[PCLZIP_OPT_BY_NAME][$j].&quot;'&quot;);
-
-              // ----- Look for a directory
-              if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == &quot;/&quot;) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The searched item is a directory&quot;);
-
-                  // ----- Look if the directory is in the filename path
-                  if (   (strlen($v_header_list[$v_nb_extracted]['stored_filename']) &gt; strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
-                      &amp;&amp; (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
-                      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The directory is in the file path&quot;);
-                      $v_found = true;
-                  }
-                  elseif (   (($v_header_list[$v_nb_extracted]['external']&amp;0x00000010)==0x00000010) /* Indicates a folder */
-                          &amp;&amp; ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
-                      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The entry is the searched directory&quot;);
-                      $v_found = true;
-                  }
-              }
-              // ----- Look for a filename
-              elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The file is the right one.&quot;);
-                  $v_found = true;
-              }
-          }
-      }
-
-      // ----- Look for extract by ereg rule
-      else if (   (isset($p_options[PCLZIP_OPT_BY_EREG]))
-               &amp;&amp; ($p_options[PCLZIP_OPT_BY_EREG] != &quot;&quot;)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract by ereg '&quot;.$p_options[PCLZIP_OPT_BY_EREG].&quot;'&quot;);
-
-          if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename match the regular expression&quot;);
-              $v_found = true;
-          }
-      }
-
-      // ----- Look for extract by preg rule
-      else if (   (isset($p_options[PCLZIP_OPT_BY_PREG]))
-               &amp;&amp; ($p_options[PCLZIP_OPT_BY_PREG] != &quot;&quot;)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByEreg'&quot;);
-
-          if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename match the regular expression&quot;);
-              $v_found = true;
-          }
-      }
-
-      // ----- Look for extract by index rule
-      else if (   (isset($p_options[PCLZIP_OPT_BY_INDEX]))
-               &amp;&amp; ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByIndex'&quot;);
-
-          // ----- Look if the index is in the list
-          for ($j=$j_start; ($j&lt;sizeof($p_options[PCLZIP_OPT_BY_INDEX])) &amp;&amp; (!$v_found); $j++) {
-              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Look if index '$i' is in [&quot;.$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].&quot;,&quot;.$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'].&quot;]&quot;);
-
-              if (($i&gt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) &amp;&amp; ($i&lt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Found as part of an index range&quot;);
-                  $v_found = true;
-              }
-              if ($i&gt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Do not look this index range for next loop&quot;);
-                  $j_start = $j+1;
-              }
-
-              if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']&gt;$i) {
-                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Index range is greater than index, stop loop&quot;);
-                  break;
-              }
-          }
-      }
-      else {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;No argument mean remove all file&quot;);
-      	$v_found = true;
-      }
-
-      // ----- Look for deletion
-      if ($v_found)
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$v_header_list[$v_nb_extracted]['stored_filename'].&quot;', index '$i' need to be deleted&quot;);
-        unset($v_header_list[$v_nb_extracted]);
-      }
-      else
-      {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$v_header_list[$v_nb_extracted]['stored_filename'].&quot;', index '$i' will not be deleted&quot;);
-        $v_nb_extracted++;
-      }
-    }
-
-    // ----- Look if something need to be deleted
-    if ($v_nb_extracted &gt; 0) {
-
-        // ----- Creates a temporay file
-        $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
-
-        // ----- Creates a temporary zip archive
-        $v_temp_zip = new PclZip($v_zip_temp_name);
-
-        // ----- Open the temporary zip file in write mode
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary write mode&quot;);
-        if (($v_result = $v_temp_zip-&gt;privOpenFd('wb')) != 1) {
-            $this-&gt;privCloseFd();
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-        }
-
-        // ----- Look which file need to be kept
-        for ($i=0; $i&lt;sizeof($v_header_list); $i++) {
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Keep entry index '$i' : '&quot;.$v_header_list[$i]['filename'].&quot;'&quot;);
-
-            // ----- Calculate the position of the header
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Offset='&quot;. $v_header_list[$i]['offset'].&quot;'&quot;);
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position before rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-            @rewind($this-&gt;zip_fd);
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-            if (@fseek($this-&gt;zip_fd,  $v_header_list[$i]['offset'])) {
-                // ----- Close the zip file
-                $this-&gt;privCloseFd();
-                $v_temp_zip-&gt;privCloseFd();
-                @unlink($v_zip_temp_name);
-
-                // ----- Error log
-                PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
-
-                // ----- Return
-                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-                return PclZip::errorCode();
-            }
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after fseek : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-
-            // ----- Read the file header
-            $v_local_header = array();
-            if (($v_result = $this-&gt;privReadFileHeader($v_local_header)) != 1) {
-                // ----- Close the zip file
-                $this-&gt;privCloseFd();
-                $v_temp_zip-&gt;privCloseFd();
-                @unlink($v_zip_temp_name);
-
-                // ----- Return
-                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-                return $v_result;
-            }
-            
-            // ----- Check that local file header is same as central file header
-            if ($this-&gt;privCheckFileHeaders($v_local_header,
-			                                $v_header_list[$i]) != 1) {
-                // TBC
-            }
-            unset($v_local_header);
-
-            // ----- Write the file header
-            if (($v_result = $v_temp_zip-&gt;privWriteFileHeader($v_header_list[$i])) != 1) {
-                // ----- Close the zip file
-                $this-&gt;privCloseFd();
-                $v_temp_zip-&gt;privCloseFd();
-                @unlink($v_zip_temp_name);
-
-                // ----- Return
-                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-                return $v_result;
-            }
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Offset for this file is '&quot;.$v_header_list[$i]['offset'].&quot;'&quot;);
-
-            // ----- Read/write the data block
-            if (($v_result = PclZipUtilCopyBlock($this-&gt;zip_fd, $v_temp_zip-&gt;zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
-                // ----- Close the zip file
-                $this-&gt;privCloseFd();
-                $v_temp_zip-&gt;privCloseFd();
-                @unlink($v_zip_temp_name);
-
-                // ----- Return
-                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-                return $v_result;
-            }
-        }
-
-        // ----- Store the offset of the central dir
-        $v_offset = @ftell($v_temp_zip-&gt;zip_fd);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;New offset of central dir : $v_offset&quot;);
-
-        // ----- Re-Create the Central Dir files header
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Creates the new central directory&quot;);
-        for ($i=0; $i&lt;sizeof($v_header_list); $i++) {
-            // ----- Create the file header
-            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Offset of file : &quot;.$v_header_list[$i]['offset']);
-            if (($v_result = $v_temp_zip-&gt;privWriteCentralFileHeader($v_header_list[$i])) != 1) {
-                $v_temp_zip-&gt;privCloseFd();
-                $this-&gt;privCloseFd();
-                @unlink($v_zip_temp_name);
-
-                // ----- Return
-                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-                return $v_result;
-            }
-
-            // ----- Transform the header to a 'usable' info
-            $v_temp_zip-&gt;privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
-        }
-
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Creates the central directory footer&quot;);
-
-        // ----- Zip file comment
-        $v_comment = '';
-        if (isset($p_options[PCLZIP_OPT_COMMENT])) {
-          $v_comment = $p_options[PCLZIP_OPT_COMMENT];
-        }
-
-        // ----- Calculate the size of the central header
-        $v_size = @ftell($v_temp_zip-&gt;zip_fd)-$v_offset;
-
-        // ----- Create the central dir footer
-        if (($v_result = $v_temp_zip-&gt;privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
-            // ----- Reset the file list
-            unset($v_header_list);
-            $v_temp_zip-&gt;privCloseFd();
-            $this-&gt;privCloseFd();
-            @unlink($v_zip_temp_name);
-
-            // ----- Return
-            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-            return $v_result;
-        }
-
-        // ----- Close
-        $v_temp_zip-&gt;privCloseFd();
-        $this-&gt;privCloseFd();
-
-        // ----- Delete the zip file
-        // TBC : I should test the result ...
-        @unlink($this-&gt;zipname);
-
-        // ----- Rename the temporary file
-        // TBC : I should test the result ...
-        //@rename($v_zip_temp_name, $this-&gt;zipname);
-        PclZipUtilRename($v_zip_temp_name, $this-&gt;zipname);
-    
-        // ----- Destroy the temporary archive
-        unset($v_temp_zip);
-    }
-    
-    // ----- Remove every files : reset the file
-    else if ($v_central_dir['entries'] != 0) {
-        $this-&gt;privCloseFd();
-
-        if (($v_result = $this-&gt;privOpenFd('wb')) != 1) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-          return $v_result;
-        }
-
-        if (($v_result = $this-&gt;privWriteCentralHeader(0, 0, 0, '')) != 1) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-          return $v_result;
-        }
-
-        $this-&gt;privCloseFd();
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privDirCheck()
-  // Description :
-  //   Check if a directory exists, if not it creates it and all the parents directory
-  //   which may be useful.
-  // Parameters :
-  //   $p_dir : Directory path to check.
-  // Return Values :
-  //    1 : OK
-  //   -1 : Unable to create directory
-  // --------------------------------------------------------------------------------
-  function privDirCheck($p_dir, $p_is_dir=false)
-  {
-    $v_result = 1;
-
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privDirCheck&quot;, &quot;entry='$p_dir', is_dir='&quot;.($p_is_dir?&quot;true&quot;:&quot;false&quot;).&quot;'&quot;);
-
-    // ----- Remove the final '/'
-    if (($p_is_dir) &amp;&amp; (substr($p_dir, -1)=='/'))
-    {
-      $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
-    }
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Looking for entry '$p_dir'&quot;);
-
-    // ----- Check the directory availability
-    if ((is_dir($p_dir)) || ($p_dir == &quot;&quot;))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, &quot;'$p_dir' is a directory&quot;);
-      return 1;
-    }
-
-    // ----- Extract parent directory
-    $p_parent_dir = dirname($p_dir);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Parent directory is '$p_parent_dir'&quot;);
-
-    // ----- Just a check
-    if ($p_parent_dir != $p_dir)
-    {
-      // ----- Look for parent directory
-      if ($p_parent_dir != &quot;&quot;)
-      {
-        if (($v_result = $this-&gt;privDirCheck($p_parent_dir)) != 1)
-        {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-          return $v_result;
-        }
-      }
-    }
-
-    // ----- Create the directory
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Create directory '$p_dir'&quot;);
-    if (!@mkdir($p_dir, 0777))
-    {
-      // ----- Error log
-      PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, &quot;Unable to create directory '$p_dir'&quot;);
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result, &quot;Directory '$p_dir' created&quot;);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privMerge()
-  // Description :
-  //   If $p_archive_to_add does not exist, the function exit with a success result.
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privMerge(&amp;$p_archive_to_add)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privMerge&quot;, &quot;archive='&quot;.$p_archive_to_add-&gt;zipname.&quot;'&quot;);
-    $v_result=1;
-
-    // ----- Look if the archive_to_add exists
-    if (!is_file($p_archive_to_add-&gt;zipname))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Archive to add does not exist. End of merge.&quot;);
-
-      // ----- Nothing to merge, so merge is a success
-      $v_result = 1;
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Look if the archive exists
-    if (!is_file($this-&gt;zipname))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Archive does not exist, duplicate the archive_to_add.&quot;);
-
-      // ----- Do a duplicate
-      $v_result = $this-&gt;privDuplicate($p_archive_to_add-&gt;zipname);
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Open the zip file
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($v_result=$this-&gt;privOpenFd('rb')) != 1)
-    {
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Read the central directory informations
-    $v_central_dir = array();
-    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
-    {
-      $this-&gt;privCloseFd();
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Go to beginning of File
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in zip : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-    @rewind($this-&gt;zip_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in zip : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
-
-    // ----- Open the archive_to_add file
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open archive_to_add in binary read mode&quot;);
-    if (($v_result=$p_archive_to_add-&gt;privOpenFd('rb')) != 1)
-    {
-      $this-&gt;privCloseFd();
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Read the central directory informations
-    $v_central_dir_to_add = array();
-    if (($v_result = $p_archive_to_add-&gt;privReadEndCentralDir($v_central_dir_to_add)) != 1)
-    {
-      $this-&gt;privCloseFd();
-      $p_archive_to_add-&gt;privCloseFd();
-
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Go to beginning of File
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in archive_to_add : &quot;.ftell($p_archive_to_add-&gt;zip_fd).&quot;'&quot;);
-    @rewind($p_archive_to_add-&gt;zip_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in archive_to_add : &quot;.ftell($p_archive_to_add-&gt;zip_fd).&quot;'&quot;);
-
-    // ----- Creates a temporay file
-    $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
-
-    // ----- Open the temporary file in write mode
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
-    {
-      $this-&gt;privCloseFd();
-      $p_archive_to_add-&gt;privCloseFd();
-
-      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Copy the files from the archive to the temporary file
-    // TBC : Here I should better append the file and go back to erase the central dir
-    $v_size = $v_central_dir['offset'];
-    while ($v_size != 0)
-    {
-      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-      $v_buffer = fread($this-&gt;zip_fd, $v_read_size);
-      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
-      $v_size -= $v_read_size;
-    }
-
-    // ----- Copy the files from the archive_to_add into the temporary file
-    $v_size = $v_central_dir_to_add['offset'];
-    while ($v_size != 0)
-    {
-      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-      $v_buffer = fread($p_archive_to_add-&gt;zip_fd, $v_read_size);
-      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
-      $v_size -= $v_read_size;
-    }
-
-    // ----- Store the offset of the central dir
-    $v_offset = @ftell($v_zip_temp_fd);
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;New offset of central dir : $v_offset&quot;);
-
-    // ----- Copy the block of file headers from the old archive
-    $v_size = $v_central_dir['size'];
-    while ($v_size != 0)
-    {
-      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-      $v_buffer = @fread($this-&gt;zip_fd, $v_read_size);
-      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
-      $v_size -= $v_read_size;
-    }
-
-    // ----- Copy the block of file headers from the archive_to_add
-    $v_size = $v_central_dir_to_add['size'];
-    while ($v_size != 0)
-    {
-      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-      $v_buffer = @fread($p_archive_to_add-&gt;zip_fd, $v_read_size);
-      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
-      $v_size -= $v_read_size;
-    }
-
-    // ----- Merge the file comments
-    $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
-
-    // ----- Calculate the size of the (new) central header
-    $v_size = @ftell($v_zip_temp_fd)-$v_offset;
-
-    // ----- Swap the file descriptor
-    // Here is a trick : I swap the temporary fd with the zip fd, in order to use
-    // the following methods on the temporary fil and not the real archive fd
-    $v_swap = $this-&gt;zip_fd;
-    $this-&gt;zip_fd = $v_zip_temp_fd;
-    $v_zip_temp_fd = $v_swap;
-
-    // ----- Create the central dir footer
-    if (($v_result = $this-&gt;privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
-    {
-      $this-&gt;privCloseFd();
-      $p_archive_to_add-&gt;privCloseFd();
-      @fclose($v_zip_temp_fd);
-      $this-&gt;zip_fd = null;
-
-      // ----- Reset the file list
-      unset($v_header_list);
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Swap back the file descriptor
-    $v_swap = $this-&gt;zip_fd;
-    $this-&gt;zip_fd = $v_zip_temp_fd;
-    $v_zip_temp_fd = $v_swap;
-
-    // ----- Close
-    $this-&gt;privCloseFd();
-    $p_archive_to_add-&gt;privCloseFd();
-
-    // ----- Close the temporary file
-    @fclose($v_zip_temp_fd);
-
-    // ----- Delete the zip file
-    // TBC : I should test the result ...
-    @unlink($this-&gt;zipname);
-
-    // ----- Rename the temporary file
-    // TBC : I should test the result ...
-    //@rename($v_zip_temp_name, $this-&gt;zipname);
-    PclZipUtilRename($v_zip_temp_name, $this-&gt;zipname);
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privDuplicate()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privDuplicate($p_archive_filename)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privDuplicate&quot;, &quot;archive_filename='$p_archive_filename'&quot;);
-    $v_result=1;
-
-    // ----- Look if the $p_archive_filename exists
-    if (!is_file($p_archive_filename))
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Archive to duplicate does not exist. End of duplicate.&quot;);
-
-      // ----- Nothing to duplicate, so duplicate is a success.
-      $v_result = 1;
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Open the zip file
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($v_result=$this-&gt;privOpenFd('wb')) != 1)
-    {
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-    }
-
-    // ----- Open the temporary file in write mode
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
-    if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
-    {
-      $this-&gt;privCloseFd();
-
-      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
-
-      // ----- Return
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
-      return PclZip::errorCode();
-    }
-
-    // ----- Copy the files from the archive to the temporary file
-    // TBC : Here I should better append the file and go back to erase the central dir
-    $v_size = filesize($p_archive_filename);
-    while ($v_size != 0)
-    {
-      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Read $v_read_size bytes&quot;);
-      $v_buffer = fread($v_zip_temp_fd, $v_read_size);
-      @fwrite($this-&gt;zip_fd, $v_buffer, $v_read_size);
-      $v_size -= $v_read_size;
-    }
-
-    // ----- Close
-    $this-&gt;privCloseFd();
-
-    // ----- Close the temporary file
-    @fclose($v_zip_temp_fd);
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privErrorLog()
-  // Description :
-  // Parameters :
-  // --------------------------------------------------------------------------------
-  function privErrorLog($p_error_code=0, $p_error_string='')
-  {
-    if (PCLZIP_ERROR_EXTERNAL == 1) {
-      PclError($p_error_code, $p_error_string);
-    }
-    else {
-      $this-&gt;error_code = $p_error_code;
-      $this-&gt;error_string = $p_error_string;
-    }
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privErrorReset()
-  // Description :
-  // Parameters :
-  // --------------------------------------------------------------------------------
-  function privErrorReset()
-  {
-    if (PCLZIP_ERROR_EXTERNAL == 1) {
-      PclErrorReset();
-    }
-    else {
-      $this-&gt;error_code = 0;
-      $this-&gt;error_string = '';
-    }
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privDecrypt()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privDecrypt($p_encryption_header, &amp;$p_buffer, $p_size, $p_crc)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDecrypt', &quot;size=&quot;.$p_size.&quot;&quot;);
-    $v_result=1;
-    
-    // ----- To Be Modified ;-)
-    $v_pwd = &quot;test&quot;;
-    
-    $p_buffer = PclZipUtilZipDecrypt($p_buffer, $p_size, $p_encryption_header,
-	                                 $p_crc, $v_pwd);
-    
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privDisableMagicQuotes()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privDisableMagicQuotes()
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDisableMagicQuotes', &quot;&quot;);
-    $v_result=1;
-
-    // ----- Look if function exists
-    if (   (!function_exists(&quot;get_magic_quotes_runtime&quot;))
-	    || (!function_exists(&quot;set_magic_quotes_runtime&quot;))) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Functions *et_magic_quotes_runtime are not supported&quot;);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-	}
-
-    // ----- Look if already done
-    if ($this-&gt;magic_quotes_status != -1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;magic_quote already disabled&quot;);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-	}
-
-	// ----- Get and memorize the magic_quote value
-	$this-&gt;magic_quotes_status = @get_magic_quotes_runtime();
-    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Current magic_quotes_runtime status is '&quot;.($this-&gt;magic_quotes_status==0?'disable':'enable').&quot;'&quot;);
-
-	// ----- Disable magic_quotes
-	if ($this-&gt;magic_quotes_status == 1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Disable magic_quotes&quot;);
-	  @set_magic_quotes_runtime(0);
-	}
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : privSwapBackMagicQuotes()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function privSwapBackMagicQuotes()
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privSwapBackMagicQuotes', &quot;&quot;);
-    $v_result=1;
-
-    // ----- Look if function exists
-    if (   (!function_exists(&quot;get_magic_quotes_runtime&quot;))
-	    || (!function_exists(&quot;set_magic_quotes_runtime&quot;))) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Functions *et_magic_quotes_runtime are not supported&quot;);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-	}
-
-    // ----- Look if something to do
-    if ($this-&gt;magic_quotes_status != -1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;magic_quote not modified&quot;);
-      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-      return $v_result;
-	}
-
-	// ----- Swap back magic_quotes
-	if ($this-&gt;magic_quotes_status == 1) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Enable back magic_quotes&quot;);
-  	  @set_magic_quotes_runtime($this-&gt;magic_quotes_status);
-	}
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  }
-  // End of class
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : PclZipUtilPathReduction()
-  // Description :
-  // Parameters :
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function PclZipUtilPathReduction($p_dir)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilPathReduction&quot;, &quot;dir='$p_dir'&quot;);
-    $v_result = &quot;&quot;;
-
-    // ----- Look for not empty path
-    if ($p_dir != &quot;&quot;) {
-      // ----- Explode path by directory names
-      $v_list = explode(&quot;/&quot;, $p_dir);
-
-      // ----- Study directories from last to first
-      $v_skip = 0;
-      for ($i=sizeof($v_list)-1; $i&gt;=0; $i--) {
-        // ----- Look for current path
-        if ($v_list[$i] == &quot;.&quot;) {
-          // ----- Ignore this directory
-          // Should be the first $i=0, but no check is done
-        }
-        else if ($v_list[$i] == &quot;..&quot;) {
-		  $v_skip++;
-        }
-        else if ($v_list[$i] == &quot;&quot;) {
-		  // ----- First '/' i.e. root slash
-		  if ($i == 0) {
-            $v_result = &quot;/&quot;.$v_result;
-		    if ($v_skip &gt; 0) {
-		        // ----- It is an invalid path, so the path is not modified
-		        // TBC
-		        $v_result = $p_dir;
-                //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Invalid path is unchanged&quot;);
-                $v_skip = 0;
-		    }
-		  }
-		  // ----- Last '/' i.e. indicates a directory
-		  else if ($i == (sizeof($v_list)-1)) {
-            $v_result = $v_list[$i];
-		  }
-		  // ----- Double '/' inside the path
-		  else {
-            // ----- Ignore only the double '//' in path,
-            // but not the first and last '/'
-		  }
-        }
-        else {
-		  // ----- Look for item to skip
-		  if ($v_skip &gt; 0) {
-		    $v_skip--;
-		  }
-		  else {
-            $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?&quot;/&quot;.$v_result:&quot;&quot;);
-		  }
-        }
-      }
-      
-      // ----- Look for skip
-      if ($v_skip &gt; 0) {
-        while ($v_skip &gt; 0) {
-            $v_result = '../'.$v_result;
-            $v_skip--;
-        }
-      }
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : PclZipUtilPathInclusion()
-  // Description :
-  //   This function indicates if the path $p_path is under the $p_dir tree. Or,
-  //   said in an other way, if the file or sub-dir $p_path is inside the dir
-  //   $p_dir.
-  //   The function indicates also if the path is exactly the same as the dir.
-  //   This function supports path with duplicated '/' like '//', but does not
-  //   support '.' or '..' statements.
-  // Parameters :
-  // Return Values :
-  //   0 if $p_path is not inside directory $p_dir
-  //   1 if $p_path is inside directory $p_dir
-  //   2 if $p_path is exactly the same as $p_dir
-  // --------------------------------------------------------------------------------
-  function PclZipUtilPathInclusion($p_dir, $p_path)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilPathInclusion&quot;, &quot;dir='$p_dir', path='$p_path'&quot;);
-    $v_result = 1;
-    
-    // ----- Look for path beginning by ./
-    if (   ($p_dir == '.')
-        || ((strlen($p_dir) &gt;=2) &amp;&amp; (substr($p_dir, 0, 2) == './'))) {
-      $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Replacing ./ by full path in p_dir '&quot;.$p_dir.&quot;'&quot;);
-    }
-    if (   ($p_path == '.')
-        || ((strlen($p_path) &gt;=2) &amp;&amp; (substr($p_path, 0, 2) == './'))) {
-      $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Replacing ./ by full path in p_path '&quot;.$p_path.&quot;'&quot;);
-    }
-
-    // ----- Explode dir and path by directory separator
-    $v_list_dir = explode(&quot;/&quot;, $p_dir);
-    $v_list_dir_size = sizeof($v_list_dir);
-    $v_list_path = explode(&quot;/&quot;, $p_path);
-    $v_list_path_size = sizeof($v_list_path);
-
-    // ----- Study directories paths
-    $i = 0;
-    $j = 0;
-    while (($i &lt; $v_list_dir_size) &amp;&amp; ($j &lt; $v_list_path_size) &amp;&amp; ($v_result)) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Working on dir($i)='&quot;.$v_list_dir[$i].&quot;' and path($j)='&quot;.$v_list_path[$j].&quot;'&quot;);
-
-      // ----- Look for empty dir (path reduction)
-      if ($v_list_dir[$i] == '') {
-        $i++;
-        continue;
-      }
-      if ($v_list_path[$j] == '') {
-        $j++;
-        continue;
-      }
-
-      // ----- Compare the items
-      if (($v_list_dir[$i] != $v_list_path[$j]) &amp;&amp; ($v_list_dir[$i] != '') &amp;&amp; ( $v_list_path[$j] != ''))  {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Items ($i,$j) are different&quot;);
-        $v_result = 0;
-      }
-
-      // ----- Next items
-      $i++;
-      $j++;
-    }
-
-    // ----- Look if everything seems to be the same
-    if ($v_result) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Look for tie break&quot;);
-      // ----- Skip all the empty items
-      while (($j &lt; $v_list_path_size) &amp;&amp; ($v_list_path[$j] == '')) $j++;
-      while (($i &lt; $v_list_dir_size) &amp;&amp; ($v_list_dir[$i] == '')) $i++;
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Looking on dir($i)='&quot;.($i &lt; $v_list_dir_size?$v_list_dir[$i]:'').&quot;' and path($j)='&quot;.($j &lt; $v_list_path_size?$v_list_path[$j]:'').&quot;'&quot;);
-
-      if (($i &gt;= $v_list_dir_size) &amp;&amp; ($j &gt;= $v_list_path_size)) {
-        // ----- There are exactly the same
-        $v_result = 2;
-      }
-      else if ($i &lt; $v_list_dir_size) {
-        // ----- The path is shorter than the dir
-        $v_result = 0;
-      }
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : PclZipUtilCopyBlock()
-  // Description :
-  // Parameters :
-  //   $p_mode : read/write compression mode
-  //             0 : src &amp; dest normal
-  //             1 : src gzip, dest normal
-  //             2 : src normal, dest gzip
-  //             3 : src &amp; dest gzip
-  // Return Values :
-  // --------------------------------------------------------------------------------
-  function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilCopyBlock&quot;, &quot;size=$p_size, mode=$p_mode&quot;);
-    $v_result = 1;
-
-    if ($p_mode==0)
-    {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Src offset before read :&quot;.(@ftell($p_src)));
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Dest offset before write :&quot;.(@ftell($p_dest)));
-      while ($p_size != 0)
-      {
-        $v_read_size = ($p_size &lt; PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-        $v_buffer = @fread($p_src, $v_read_size);
-        @fwrite($p_dest, $v_buffer, $v_read_size);
-        $p_size -= $v_read_size;
-      }
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Src offset after read :&quot;.(@ftell($p_src)));
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Dest offset after write :&quot;.(@ftell($p_dest)));
-    }
-    else if ($p_mode==1)
-    {
-      while ($p_size != 0)
-      {
-        $v_read_size = ($p_size &lt; PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-        $v_buffer = @gzread($p_src, $v_read_size);
-        @fwrite($p_dest, $v_buffer, $v_read_size);
-        $p_size -= $v_read_size;
-      }
-    }
-    else if ($p_mode==2)
-    {
-      while ($p_size != 0)
-      {
-        $v_read_size = ($p_size &lt; PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-        $v_buffer = @fread($p_src, $v_read_size);
-        @gzwrite($p_dest, $v_buffer, $v_read_size);
-        $p_size -= $v_read_size;
-      }
-    }
-    else if ($p_mode==3)
-    {
-      while ($p_size != 0)
-      {
-        $v_read_size = ($p_size &lt; PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
-        $v_buffer = @gzread($p_src, $v_read_size);
-        @gzwrite($p_dest, $v_buffer, $v_read_size);
-        $p_size -= $v_read_size;
-      }
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : PclZipUtilRename()
-  // Description :
-  //   This function tries to do a simple rename() function. If it fails, it
-  //   tries to copy the $p_src file in a new $p_dest file and then unlink the
-  //   first one.
-  // Parameters :
-  //   $p_src : Old filename
-  //   $p_dest : New filename
-  // Return Values :
-  //   1 on success, 0 on failure.
-  // --------------------------------------------------------------------------------
-  function PclZipUtilRename($p_src, $p_dest)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilRename&quot;, &quot;source=$p_src, destination=$p_dest&quot;);
-    $v_result = 1;
-
-    // ----- Try to rename the files
-    if (!@rename($p_src, $p_dest)) {
-      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Fail to rename file, try copy+unlink&quot;);
-
-      // ----- Try to copy &amp; unlink the src
-      if (!@copy($p_src, $p_dest)) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Fail to copy file&quot;);
-        $v_result = 0;
-      }
-      else if (!@unlink($p_src)) {
-        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Fail to unlink old filename&quot;);
-        $v_result = 0;
-      }
-    }
-
-    // ----- Return
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : PclZipUtilOptionText()
-  // Description :
-  //   Translate option value in text. Mainly for debug purpose.
-  // Parameters :
-  //   $p_option : the option value.
-  // Return Values :
-  //   The option text value.
-  // --------------------------------------------------------------------------------
-  function PclZipUtilOptionText($p_option)
-  {
-    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilOptionText&quot;, &quot;option='&quot;.$p_option.&quot;'&quot;);
-    
-    $v_list = get_defined_constants();
-    for (reset($v_list); $v_key = key($v_list); next($v_list)) {
-	  $v_prefix = substr($v_key, 0, 10);
-	  if ((   ($v_prefix == 'PCLZIP_OPT')
-         || ($v_prefix == 'PCLZIP_CB_')
-         || ($v_prefix == 'PCLZIP_ATT'))
-	      &amp;&amp; ($v_list[$v_key] == $p_option)) {
-          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_key);
-          return $v_key;
-	    }
-    }
-    
-    $v_result = 'Unknown';
-
-    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
-    return $v_result;
-  }
-  // --------------------------------------------------------------------------------
-
-  // --------------------------------------------------------------------------------
-  // Function : PclZipUtilTranslateWinPath()
-  // Description :
-  //   Translate windows path by replacing '\' by '/' and optionally removing
-  //   drive letter.
-  // Parameters :
-  //   $p_path : path to translate.
-  //   $p_remove_disk_letter : true | false
-  // Return Values :
-  //   The path translated.
-  // --------------------------------------------------------------------------------
-  function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
-  {
-    if (stristr(php_uname(), 'windows')) {
-      // ----- Look for potential disk letter
-      if (($p_remove_disk_letter) &amp;&amp; (($v_position = strpos($p_path, ':')) != false)) {
-          $p_path = substr($p_path, $v_position+1);
-      }
-      // ----- Change potential windows directory separator
-      if ((strpos($p_path, '\\') &gt; 0) || (substr($p_path, 0,1) == '\\')) {
-          $p_path = strtr($p_path, '\\', '/');
-      }
-    }
-    return $p_path;
-  }
-  // --------------------------------------------------------------------------------
-
-
-?&gt;
+&lt;?php
+// --------------------------------------------------------------------------------
+// PhpConcept Library - Zip Module 2.5
+// --------------------------------------------------------------------------------
+// License GNU/LGPL - Vincent Blavet - March 2006
+// http://www.phpconcept.net
+// --------------------------------------------------------------------------------
+//
+// Presentation :
+//   PclZip is a PHP library that manage ZIP archives.
+//   So far tests show that archives generated by PclZip are readable by
+//   WinZip application and other tools.
+//
+// Description :
+//   See readme.txt and http://www.phpconcept.net
+//
+// Warning :
+//   This library and the associated files are non commercial, non professional
+//   work.
+//   It should not have unexpected results. However if any damage is caused by
+//   this software the author can not be responsible.
+//   The use of this software is at the risk of the user.
+//
+// --------------------------------------------------------------------------------
+// $Id: pclzip.lib.php,v 1.44 2006/03/08 21:23:59 vblavet Exp $
+// --------------------------------------------------------------------------------
+
+  // ----- Constants
+  define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
+
+  define( 'PCLZIP_SEPARATOR', ',' );
+
+  define( 'PCLZIP_ERROR_EXTERNAL', 0 );
+
+  define( 'PCLZIP_TEMPORARY_DIR', '' );
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
+// --------------------------------------------------------------------------------
+
+  // ----- Global variables
+  $g_pclzip_version = &quot;2.5&quot;;
+
+  define( 'PCLZIP_ERR_USER_ABORTED', 2 );
+  define( 'PCLZIP_ERR_NO_ERROR', 0 );
+  define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
+  define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
+  define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
+  define( 'PCLZIP_ERR_MISSING_FILE', -4 );
+  define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
+  define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
+  define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
+  define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
+  define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
+  define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
+  define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
+  define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
+  define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
+  define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
+  define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
+  define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
+  define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
+  define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
+  define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
+  define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
+  define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
+
+  // ----- Options values
+  define( 'PCLZIP_OPT_PATH', 77001 );
+  define( 'PCLZIP_OPT_ADD_PATH', 77002 );
+  define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
+  define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
+  define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
+  define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
+  define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
+  define( 'PCLZIP_OPT_BY_NAME', 77008 );
+  define( 'PCLZIP_OPT_BY_INDEX', 77009 );
+  define( 'PCLZIP_OPT_BY_EREG', 77010 );
+  define( 'PCLZIP_OPT_BY_PREG', 77011 );
+  define( 'PCLZIP_OPT_COMMENT', 77012 );
+  define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
+  define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
+  define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
+  define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
+  define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
+  // Having big trouble with crypt. Need to multiply 2 long int
+  // which is not correctly supported by PHP ...
+  //define( 'PCLZIP_OPT_CRYPT', 77018 );
+  define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
+  
+  // ----- File description attributes
+  define( 'PCLZIP_ATT_FILE_NAME', 79001 );
+  define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
+  define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
+
+  // ----- Call backs values
+  define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
+  define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
+  define( 'PCLZIP_CB_PRE_ADD', 78003 );
+  define( 'PCLZIP_CB_POST_ADD', 78004 );
+
+  class PclZip
+  {
+    // ----- Filename of the zip file
+    var $zipname = '';
+
+    // ----- File descriptor of the zip file
+    var $zip_fd = 0;
+
+    // ----- Internal error handling
+    var $error_code = 1;
+    var $error_string = '';
+    
+    // ----- Current status of the magic_quotes_runtime
+    // This value store the php configuration for magic_quotes
+    // The class can then disable the magic_quotes and reset it after
+    var $magic_quotes_status;
+
+  // --------------------------------------------------------------------------------
+  // Function : PclZip()
+  // Description :
+  //   Creates a PclZip object and set the name of the associated Zip archive
+  //   filename.
+  //   Note that no real action is taken, if the archive does not exist it is not
+  //   created. Use create() for that.
+  // --------------------------------------------------------------------------------
+  function PclZip($p_zipname)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::PclZip', &quot;zipname=$p_zipname&quot;);
+
+    // ----- Tests the zlib
+    if (!function_exists('gzopen'))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 1, &quot;zlib extension seems to be missing&quot;);
+      die('Abort '.basename(__FILE__).' : Missing zlib extensions');
+    }
+
+    // ----- Set the attributes
+    $this-&gt;zipname = $p_zipname;
+    $this-&gt;zip_fd = 0;
+    $this-&gt;magic_quotes_status = -1;
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 1);
+    return;
+  }
+
+  function create($p_filelist)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::create', &quot;filelist='$p_filelist', ...&quot;);
+    $v_result=1;
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Set default values
+    $v_options = array();
+    $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+    // ----- Look for variable options arguments
+    $v_size = func_num_args();
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
+
+    // ----- Look for arguments
+    if ($v_size &gt; 1) {
+      // ----- Get the arguments
+      $v_arg_list = func_get_args();
+
+      // ----- Remove from the options list the first argument
+      array_shift($v_arg_list);
+      $v_size--;
+
+      // ----- Look for first arg
+      if ((is_integer($v_arg_list[0])) &amp;&amp; ($v_arg_list[0] &gt; 77000)) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Variable list of options detected&quot;);
+
+        // ----- Parse the options
+        $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
+                                            array (PCLZIP_OPT_REMOVE_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_REMOVE_ALL_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_ADD_PATH =&gt; 'optional',
+                                                   PCLZIP_CB_PRE_ADD =&gt; 'optional',
+                                                   PCLZIP_CB_POST_ADD =&gt; 'optional',
+                                                   PCLZIP_OPT_NO_COMPRESSION =&gt; 'optional',
+                                                   PCLZIP_OPT_COMMENT =&gt; 'optional'
+                                                   //, PCLZIP_OPT_CRYPT =&gt; 'optional'
+                                             ));
+        if ($v_result != 1) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+          return 0;
+        }
+      }
+
+      // ----- Look for 2 args
+      // Here we need to support the first historic synopsis of the
+      // method.
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Static synopsis&quot;);
+
+        // ----- Get the first argument
+        $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
+
+        // ----- Look for the optional second argument
+        if ($v_size == 2) {
+          $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+        }
+        else if ($v_size &gt; 2) {
+          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+		                       &quot;Invalid number / type of arguments&quot;);
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+          return 0;
+        }
+      }
+    }
+
+    // ----- Init
+    $v_string_list = array();
+    $v_att_list = array();
+    $v_filedescr_list = array();
+    $p_result_list = array();
+    
+    // ----- Look if the $p_filelist is really an array
+    if (is_array($p_filelist)) {
+    
+      // ----- Look if the first element is also an array
+      //       This will mean that this is a file description entry
+      if (isset($p_filelist[0]) &amp;&amp; is_array($p_filelist[0])) {
+        $v_att_list = $p_filelist;
+      }
+      
+      // ----- The list is a list of string names
+      else {
+        $v_string_list = $p_filelist;
+      }
+    }
+
+    // ----- Look if the $p_filelist is a string
+    else if (is_string($p_filelist)) {
+      // ----- Create a list from the string
+      $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+    }
+
+    // ----- Invalid variable type for $p_filelist
+    else {
+      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid variable type p_filelist&quot;);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return 0;
+    }
+    
+    // ----- Reformat the string list
+    if (sizeof($v_string_list) != 0) {
+      foreach ($v_string_list as $v_string) {
+        if ($v_string != '') {
+          $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+        }
+        else {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Ignore an empty filename&quot;);
+        }
+      }
+    }
+    
+    // ----- For each file in the list check the attributes
+    $v_supported_attributes
+    = array ( PCLZIP_ATT_FILE_NAME =&gt; 'mandatory'
+             ,PCLZIP_ATT_FILE_NEW_SHORT_NAME =&gt; 'optional'
+             ,PCLZIP_ATT_FILE_NEW_FULL_NAME =&gt; 'optional'
+						);
+    foreach ($v_att_list as $v_entry) {
+      $v_result = $this-&gt;privFileDescrParseAtt($v_entry,
+                                               $v_filedescr_list[],
+                                               $v_options,
+                                               $v_supported_attributes);
+      if ($v_result != 1) {
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+        return 0;
+      }
+    }
+
+    // ----- Expand the filelist (expand directories)
+    $v_result = $this-&gt;privFileDescrExpand($v_filedescr_list, $v_options);
+    if ($v_result != 1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return 0;
+    }
+
+    // ----- Call the create fct
+    $v_result = $this-&gt;privCreate($v_filedescr_list, $p_result_list, $v_options);
+    if ($v_result != 1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return 0;
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
+    return $p_result_list;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   add($p_filelist, $p_add_dir=&quot;&quot;, $p_remove_dir=&quot;&quot;)
+  //   add($p_filelist, $p_option, $p_option_value, ...)
+  // Description :
+  //   This method supports two synopsis. The first one is historical.
+  //   This methods add the list of files in an existing archive.
+  //   If a file with the same name already exists, it is added at the end of the
+  //   archive, the first one is still present.
+  //   If the archive does not exist, it is created.
+  // Parameters :
+  //   $p_filelist : An array containing file or directory names, or
+  //                 a string containing one filename or one directory name, or
+  //                 a string containing a list of filenames and/or directory
+  //                 names separated by spaces.
+  //   $p_add_dir : A path to add before the real path of the archived file,
+  //                in order to have it memorized in the archive.
+  //   $p_remove_dir : A path to remove from the real path of the file to archive,
+  //                   in order to have a shorter path memorized in the archive.
+  //                   When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+  //                   is removed first, before $p_add_dir is added.
+  // Options :
+  //   PCLZIP_OPT_ADD_PATH :
+  //   PCLZIP_OPT_REMOVE_PATH :
+  //   PCLZIP_OPT_REMOVE_ALL_PATH :
+  //   PCLZIP_OPT_COMMENT :
+  //   PCLZIP_OPT_ADD_COMMENT :
+  //   PCLZIP_OPT_PREPEND_COMMENT :
+  //   PCLZIP_CB_PRE_ADD :
+  //   PCLZIP_CB_POST_ADD :
+  // Return Values :
+  //   0 on failure,
+  //   The list of the added files, with a status of the add action.
+  //   (see PclZip::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+  function add($p_filelist)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::add', &quot;filelist='$p_filelist', ...&quot;);
+    $v_result=1;
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Set default values
+    $v_options = array();
+    $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+    // ----- Look for variable options arguments
+    $v_size = func_num_args();
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
+
+    // ----- Look for arguments
+    if ($v_size &gt; 1) {
+      // ----- Get the arguments
+      $v_arg_list = func_get_args();
+
+      // ----- Remove form the options list the first argument
+      array_shift($v_arg_list);
+      $v_size--;
+
+      // ----- Look for first arg
+      if ((is_integer($v_arg_list[0])) &amp;&amp; ($v_arg_list[0] &gt; 77000)) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Variable list of options detected&quot;);
+
+        // ----- Parse the options
+        $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
+                                            array (PCLZIP_OPT_REMOVE_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_REMOVE_ALL_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_ADD_PATH =&gt; 'optional',
+                                                   PCLZIP_CB_PRE_ADD =&gt; 'optional',
+                                                   PCLZIP_CB_POST_ADD =&gt; 'optional',
+                                                   PCLZIP_OPT_NO_COMPRESSION =&gt; 'optional',
+                                                   PCLZIP_OPT_COMMENT =&gt; 'optional',
+                                                   PCLZIP_OPT_ADD_COMMENT =&gt; 'optional',
+                                                   PCLZIP_OPT_PREPEND_COMMENT =&gt; 'optional'
+                                                   //, PCLZIP_OPT_CRYPT =&gt; 'optional'
+												   ));
+        if ($v_result != 1) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+          return 0;
+        }
+      }
+
+      // ----- Look for 2 args
+      // Here we need to support the first historic synopsis of the
+      // method.
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Static synopsis&quot;);
+
+        // ----- Get the first argument
+        $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
+
+        // ----- Look for the optional second argument
+        if ($v_size == 2) {
+          $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+        }
+        else if ($v_size &gt; 2) {
+          // ----- Error log
+          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid number / type of arguments&quot;);
+
+          // ----- Return
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+          return 0;
+        }
+      }
+    }
+
+    // ----- Init
+    $v_string_list = array();
+    $v_att_list = array();
+    $v_filedescr_list = array();
+    $p_result_list = array();
+    
+    // ----- Look if the $p_filelist is really an array
+    if (is_array($p_filelist)) {
+    
+      // ----- Look if the first element is also an array
+      //       This will mean that this is a file description entry
+      if (isset($p_filelist[0]) &amp;&amp; is_array($p_filelist[0])) {
+        $v_att_list = $p_filelist;
+      }
+      
+      // ----- The list is a list of string names
+      else {
+        $v_string_list = $p_filelist;
+      }
+    }
+
+    // ----- Look if the $p_filelist is a string
+    else if (is_string($p_filelist)) {
+      // ----- Create a list from the string
+      $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+    }
+
+    // ----- Invalid variable type for $p_filelist
+    else {
+      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid variable type '&quot;.gettype($p_filelist).&quot;' for p_filelist&quot;);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return 0;
+    }
+    
+    // ----- Reformat the string list
+    if (sizeof($v_string_list) != 0) {
+      foreach ($v_string_list as $v_string) {
+        $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+      }
+    }
+    
+    // ----- For each file in the list check the attributes
+    $v_supported_attributes
+    = array ( PCLZIP_ATT_FILE_NAME =&gt; 'mandatory'
+             ,PCLZIP_ATT_FILE_NEW_SHORT_NAME =&gt; 'optional'
+             ,PCLZIP_ATT_FILE_NEW_FULL_NAME =&gt; 'optional'
+						);
+    foreach ($v_att_list as $v_entry) {
+      $v_result = $this-&gt;privFileDescrParseAtt($v_entry,
+                                               $v_filedescr_list[],
+                                               $v_options,
+                                               $v_supported_attributes);
+      if ($v_result != 1) {
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+        return 0;
+      }
+    }
+
+    // ----- Expand the filelist (expand directories)
+    $v_result = $this-&gt;privFileDescrExpand($v_filedescr_list, $v_options);
+    if ($v_result != 1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return 0;
+    }
+
+    // ----- Call the create fct
+    $v_result = $this-&gt;privAdd($v_filedescr_list, $p_result_list, $v_options);
+    if ($v_result != 1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return 0;
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
+    return $p_result_list;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : listContent()
+  // Description :
+  //   This public method, gives the list of the files and directories, with their
+  //   properties.
+  //   The properties of each entries in the list are (used also in other functions) :
+  //     filename : Name of the file. For a create or add action it is the filename
+  //                given by the user. For an extract function it is the filename
+  //                of the extracted file.
+  //     stored_filename : Name of the file / directory stored in the archive.
+  //     size : Size of the stored file.
+  //     compressed_size : Size of the file's data compressed in the archive
+  //                       (without the headers overhead)
+  //     mtime : Last known modification date of the file (UNIX timestamp)
+  //     comment : Comment associated with the file
+  //     folder : true | false
+  //     index : index of the file in the archive
+  //     status : status of the action (depending of the action) :
+  //              Values are :
+  //                ok : OK !
+  //                filtered : the file / dir is not extracted (filtered by user)
+  //                already_a_directory : the file can not be extracted because a
+  //                                      directory with the same name already exists
+  //                write_protected : the file can not be extracted because a file
+  //                                  with the same name already exists and is
+  //                                  write protected
+  //                newer_exist : the file was not extracted because a newer file exists
+  //                path_creation_fail : the file is not extracted because the folder
+  //                                     does not exists and can not be created
+  //                write_error : the file was not extracted because there was a
+  //                              error while writing the file
+  //                read_error : the file was not extracted because there was a error
+  //                             while reading the file
+  //                invalid_header : the file was not extracted because of an archive
+  //                                 format error (bad file header)
+  //   Note that each time a method can continue operating when there
+  //   is an action error on a file, the error is only logged in the file status.
+  // Return Values :
+  //   0 on an unrecoverable failure,
+  //   The list of the files in the archive.
+  // --------------------------------------------------------------------------------
+  function listContent()
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::listContent', &quot;&quot;);
+    $v_result=1;
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Check archive
+    if (!$this-&gt;privCheckFormat()) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return(0);
+    }
+
+    // ----- Call the extracting fct
+    $p_list = array();
+    if (($v_result = $this-&gt;privList($p_list)) != 1)
+    {
+      unset($p_list);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+      return(0);
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+    return $p_list;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   extract($p_path=&quot;./&quot;, $p_remove_path=&quot;&quot;)
+  //   extract([$p_option, $p_option_value, ...])
+  // Description :
+  //   This method supports two synopsis. The first one is historical.
+  //   This method extract all the files / directories from the archive to the
+  //   folder indicated in $p_path.
+  //   If you want to ignore the 'root' part of path of the memorized files
+  //   you can indicate this in the optional $p_remove_path parameter.
+  //   By default, if a newer file with the same name already exists, the
+  //   file is not extracted.
+  //
+  //   If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions
+  //   are used, the path indicated in PCLZIP_OPT_ADD_PATH is append
+  //   at the end of the path value of PCLZIP_OPT_PATH.
+  // Parameters :
+  //   $p_path : Path where the files and directories are to be extracted
+  //   $p_remove_path : First part ('root' part) of the memorized path
+  //                    (if any similar) to remove while extracting.
+  // Options :
+  //   PCLZIP_OPT_PATH :
+  //   PCLZIP_OPT_ADD_PATH :
+  //   PCLZIP_OPT_REMOVE_PATH :
+  //   PCLZIP_OPT_REMOVE_ALL_PATH :
+  //   PCLZIP_CB_PRE_EXTRACT :
+  //   PCLZIP_CB_POST_EXTRACT :
+  // Return Values :
+  //   0 or a negative value on failure,
+  //   The list of the extracted files, with a status of the action.
+  //   (see PclZip::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+  function extract()
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::extract&quot;, &quot;&quot;);
+    $v_result=1;
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Check archive
+    if (!$this-&gt;privCheckFormat()) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return(0);
+    }
+
+    // ----- Set default values
+    $v_options = array();
+//    $v_path = &quot;./&quot;;
+    $v_path = '';
+    $v_remove_path = &quot;&quot;;
+    $v_remove_all_path = false;
+
+    // ----- Look for variable options arguments
+    $v_size = func_num_args();
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
+
+    // ----- Default values for option
+    $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+    // ----- Look for arguments
+    if ($v_size &gt; 0) {
+      // ----- Get the arguments
+      $v_arg_list = func_get_args();
+
+      // ----- Look for first arg
+      if ((is_integer($v_arg_list[0])) &amp;&amp; ($v_arg_list[0] &gt; 77000)) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Variable list of options&quot;);
+
+        // ----- Parse the options
+        $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
+                                            array (PCLZIP_OPT_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_REMOVE_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_REMOVE_ALL_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_ADD_PATH =&gt; 'optional',
+                                                   PCLZIP_CB_PRE_EXTRACT =&gt; 'optional',
+                                                   PCLZIP_CB_POST_EXTRACT =&gt; 'optional',
+                                                   PCLZIP_OPT_SET_CHMOD =&gt; 'optional',
+                                                   PCLZIP_OPT_BY_NAME =&gt; 'optional',
+                                                   PCLZIP_OPT_BY_EREG =&gt; 'optional',
+                                                   PCLZIP_OPT_BY_PREG =&gt; 'optional',
+                                                   PCLZIP_OPT_BY_INDEX =&gt; 'optional',
+                                                   PCLZIP_OPT_EXTRACT_AS_STRING =&gt; 'optional',
+                                                   PCLZIP_OPT_EXTRACT_IN_OUTPUT =&gt; 'optional',
+                                                   PCLZIP_OPT_REPLACE_NEWER =&gt; 'optional'
+                                                   ,PCLZIP_OPT_STOP_ON_ERROR =&gt; 'optional'
+                                                   ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION =&gt; 'optional'
+												    ));
+        if ($v_result != 1) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+          return 0;
+        }
+
+        // ----- Set the arguments
+        if (isset($v_options[PCLZIP_OPT_PATH])) {
+          $v_path = $v_options[PCLZIP_OPT_PATH];
+        }
+        if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+          $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+        }
+        if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+          $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+        }
+        if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+          // ----- Check for '/' in last path char
+          if ((strlen($v_path) &gt; 0) &amp;&amp; (substr($v_path, -1) != '/')) {
+            $v_path .= '/';
+          }
+          $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+        }
+      }
+
+      // ----- Look for 2 args
+      // Here we need to support the first historic synopsis of the
+      // method.
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Static synopsis&quot;);
+
+        // ----- Get the first argument
+        $v_path = $v_arg_list[0];
+
+        // ----- Look for the optional second argument
+        if ($v_size == 2) {
+          $v_remove_path = $v_arg_list[1];
+        }
+        else if ($v_size &gt; 2) {
+          // ----- Error log
+          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid number / type of arguments&quot;);
+
+          // ----- Return
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+          return 0;
+        }
+      }
+    }
+
+    // ----- Trace
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;path='$v_path', remove_path='$v_remove_path', remove_all_path='&quot;.($v_remove_path?'true':'false').&quot;'&quot;);
+
+    // ----- Call the extracting fct
+    $p_list = array();
+    $v_result = $this-&gt;privExtractByRule($p_list, $v_path, $v_remove_path,
+	                                     $v_remove_all_path, $v_options);
+    if ($v_result &lt; 1) {
+      unset($p_list);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+      return(0);
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+    return $p_list;
+  }
+  // --------------------------------------------------------------------------------
+
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   extractByIndex($p_index, $p_path=&quot;./&quot;, $p_remove_path=&quot;&quot;)
+  //   extractByIndex($p_index, [$p_option, $p_option_value, ...])
+  // Description :
+  //   This method supports two synopsis. The first one is historical.
+  //   This method is doing a partial extract of the archive.
+  //   The extracted files or folders are identified by their index in the
+  //   archive (from 0 to n).
+  //   Note that if the index identify a folder, only the folder entry is
+  //   extracted, not all the files included in the archive.
+  // Parameters :
+  //   $p_index : A single index (integer) or a string of indexes of files to
+  //              extract. The form of the string is &quot;0,4-6,8-12&quot; with only numbers
+  //              and '-' for range or ',' to separate ranges. No spaces or ';'
+  //              are allowed.
+  //   $p_path : Path where the files and directories are to be extracted
+  //   $p_remove_path : First part ('root' part) of the memorized path
+  //                    (if any similar) to remove while extracting.
+  // Options :
+  //   PCLZIP_OPT_PATH :
+  //   PCLZIP_OPT_ADD_PATH :
+  //   PCLZIP_OPT_REMOVE_PATH :
+  //   PCLZIP_OPT_REMOVE_ALL_PATH :
+  //   PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and
+  //     not as files.
+  //     The resulting content is in a new field 'content' in the file
+  //     structure.
+  //     This option must be used alone (any other options are ignored).
+  //   PCLZIP_CB_PRE_EXTRACT :
+  //   PCLZIP_CB_POST_EXTRACT :
+  // Return Values :
+  //   0 on failure,
+  //   The list of the extracted files, with a status of the action.
+  //   (see PclZip::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+  //function extractByIndex($p_index, options...)
+function extractByIndex($p_index)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::extractByIndex&quot;, &quot;index='$p_index', ...&quot;);
+    $v_result=1;
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Check archive
+    if (!$this-&gt;privCheckFormat()) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return(0);
+    }
+
+    // ----- Set default values
+    $v_options = array();
+//    $v_path = &quot;./&quot;;
+    $v_path = '';
+    $v_remove_path = &quot;&quot;;
+    $v_remove_all_path = false;
+
+    // ----- Look for variable options arguments
+    $v_size = func_num_args();
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
+
+    // ----- Default values for option
+    $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+    // ----- Look for arguments
+    if ($v_size &gt; 1) {
+      // ----- Get the arguments
+      $v_arg_list = func_get_args();
+
+      // ----- Remove form the options list the first argument
+      array_shift($v_arg_list);
+      $v_size--;
+
+      // ----- Look for first arg
+      if ((is_integer($v_arg_list[0])) &amp;&amp; ($v_arg_list[0] &gt; 77000)) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Variable list of options&quot;);
+
+        // ----- Parse the options
+        $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
+                                            array (PCLZIP_OPT_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_REMOVE_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_REMOVE_ALL_PATH =&gt; 'optional',
+                                                   PCLZIP_OPT_EXTRACT_AS_STRING =&gt; 'optional',
+                                                   PCLZIP_OPT_ADD_PATH =&gt; 'optional',
+                                                   PCLZIP_CB_PRE_EXTRACT =&gt; 'optional',
+                                                   PCLZIP_CB_POST_EXTRACT =&gt; 'optional',
+                                                   PCLZIP_OPT_SET_CHMOD =&gt; 'optional',
+                                                   PCLZIP_OPT_REPLACE_NEWER =&gt; 'optional'
+                                                   ,PCLZIP_OPT_STOP_ON_ERROR =&gt; 'optional'
+                                                   ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION =&gt; 'optional'
+												   ));
+        if ($v_result != 1) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+          return 0;
+        }
+
+        // ----- Set the arguments
+        if (isset($v_options[PCLZIP_OPT_PATH])) {
+          $v_path = $v_options[PCLZIP_OPT_PATH];
+        }
+        if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+          $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+        }
+        if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+          $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+        }
+        if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+          // ----- Check for '/' in last path char
+          if ((strlen($v_path) &gt; 0) &amp;&amp; (substr($v_path, -1) != '/')) {
+            $v_path .= '/';
+          }
+          $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+        }
+        if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
+          $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Option PCLZIP_OPT_EXTRACT_AS_STRING not set.&quot;);
+        }
+        else {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Option PCLZIP_OPT_EXTRACT_AS_STRING set.&quot;);
+        }
+      }
+
+      // ----- Look for 2 args
+      // Here we need to support the first historic synopsis of the
+      // method.
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Static synopsis&quot;);
+
+        // ----- Get the first argument
+        $v_path = $v_arg_list[0];
+
+        // ----- Look for the optional second argument
+        if ($v_size == 2) {
+          $v_remove_path = $v_arg_list[1];
+        }
+        else if ($v_size &gt; 2) {
+          // ----- Error log
+          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid number / type of arguments&quot;);
+
+          // ----- Return
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+          return 0;
+        }
+      }
+    }
+
+    // ----- Trace
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;index='$p_index', path='$v_path', remove_path='$v_remove_path', remove_all_path='&quot;.($v_remove_path?'true':'false').&quot;'&quot;);
+
+    // ----- Trick
+    // Here I want to reuse extractByRule(), so I need to parse the $p_index
+    // with privParseOptions()
+    $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
+    $v_options_trick = array();
+    $v_result = $this-&gt;privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
+                                        array (PCLZIP_OPT_BY_INDEX =&gt; 'optional' ));
+    if ($v_result != 1) {
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+        return 0;
+    }
+    $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
+
+    // ----- Call the extracting fct
+    if (($v_result = $this-&gt;privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) &lt; 1) {
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+        return(0);
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+    return $p_list;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function :
+  //   delete([$p_option, $p_option_value, ...])
+  // Description :
+  //   This method removes files from the archive.
+  //   If no parameters are given, then all the archive is emptied.
+  // Parameters :
+  //   None or optional arguments.
+  // Options :
+  //   PCLZIP_OPT_BY_INDEX :
+  //   PCLZIP_OPT_BY_NAME :
+  //   PCLZIP_OPT_BY_EREG : 
+  //   PCLZIP_OPT_BY_PREG :
+  // Return Values :
+  //   0 on failure,
+  //   The list of the files which are still present in the archive.
+  //   (see PclZip::listContent() for list entry format)
+  // --------------------------------------------------------------------------------
+  function delete()
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::delete&quot;, &quot;&quot;);
+    $v_result=1;
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Check archive
+    if (!$this-&gt;privCheckFormat()) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return(0);
+    }
+
+    // ----- Set default values
+    $v_options = array();
+
+    // ----- Look for variable options arguments
+    $v_size = func_num_args();
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;$v_size arguments passed to the method&quot;);
+
+    // ----- Look for arguments
+    if ($v_size &gt; 0) {
+      // ----- Get the arguments
+      $v_arg_list = func_get_args();
+
+      // ----- Parse the options
+      $v_result = $this-&gt;privParseOptions($v_arg_list, $v_size, $v_options,
+                                        array (PCLZIP_OPT_BY_NAME =&gt; 'optional',
+                                               PCLZIP_OPT_BY_EREG =&gt; 'optional',
+                                               PCLZIP_OPT_BY_PREG =&gt; 'optional',
+                                               PCLZIP_OPT_BY_INDEX =&gt; 'optional' ));
+      if ($v_result != 1) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+          return 0;
+      }
+    }
+
+    // ----- Magic quotes trick
+    $this-&gt;privDisableMagicQuotes();
+
+    // ----- Call the delete fct
+    $v_list = array();
+    if (($v_result = $this-&gt;privDeleteByRule($v_list, $v_options)) != 1) {
+      $this-&gt;privSwapBackMagicQuotes();
+      unset($v_list);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+      return(0);
+    }
+
+    // ----- Magic quotes trick
+    $this-&gt;privSwapBackMagicQuotes();
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_list);
+    return $v_list;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : deleteByIndex()
+  // Description :
+  //   ***** Deprecated *****
+  //   delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered.
+  // --------------------------------------------------------------------------------
+  function deleteByIndex($p_index)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::deleteByIndex&quot;, &quot;index='$p_index'&quot;);
+    
+    $p_list = $this-&gt;delete(PCLZIP_OPT_BY_INDEX, $p_index);
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+    return $p_list;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : properties()
+  // Description :
+  //   This method gives the properties of the archive.
+  //   The properties are :
+  //     nb : Number of files in the archive
+  //     comment : Comment associated with the archive file
+  //     status : not_exist, ok
+  // Parameters :
+  //   None
+  // Return Values :
+  //   0 on failure,
+  //   An array with the archive properties.
+  // --------------------------------------------------------------------------------
+  function properties()
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::properties&quot;, &quot;&quot;);
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Magic quotes trick
+    $this-&gt;privDisableMagicQuotes();
+
+    // ----- Check archive
+    if (!$this-&gt;privCheckFormat()) {
+      $this-&gt;privSwapBackMagicQuotes();
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return(0);
+    }
+
+    // ----- Default properties
+    $v_prop = array();
+    $v_prop['comment'] = '';
+    $v_prop['nb'] = 0;
+    $v_prop['status'] = 'not_exist';
+
+    // ----- Look if file exists
+    if (@is_file($this-&gt;zipname))
+    {
+      // ----- Open the zip file
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+      if (($this-&gt;zip_fd = @fopen($this-&gt;zipname, 'rb')) == 0)
+      {
+        $this-&gt;privSwapBackMagicQuotes();
+        
+        // ----- Error log
+        PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this-&gt;zipname.'\' in binary read mode');
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), 0);
+        return 0;
+      }
+
+      // ----- Read the central directory informations
+      $v_central_dir = array();
+      if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
+      {
+        $this-&gt;privSwapBackMagicQuotes();
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+        return 0;
+      }
+
+      // ----- Close the zip file
+      $this-&gt;privCloseFd();
+
+      // ----- Set the user attributes
+      $v_prop['comment'] = $v_central_dir['comment'];
+      $v_prop['nb'] = $v_central_dir['entries'];
+      $v_prop['status'] = 'ok';
+    }
+
+    // ----- Magic quotes trick
+    $this-&gt;privSwapBackMagicQuotes();
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_prop);
+    return $v_prop;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : duplicate()
+  // Description :
+  //   This method creates an archive by copying the content of an other one. If
+  //   the archive already exist, it is replaced by the new one without any warning.
+  // Parameters :
+  //   $p_archive : The filename of a valid archive, or
+  //                a valid PclZip object.
+  // Return Values :
+  //   1 on success.
+  //   0 or a negative value on error (error code).
+  // --------------------------------------------------------------------------------
+  function duplicate($p_archive)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::duplicate&quot;, &quot;&quot;);
+    $v_result = 1;
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Look if the $p_archive is a PclZip object
+    if ((is_object($p_archive)) &amp;&amp; (get_class($p_archive) == 'pclzip'))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The parameter is valid PclZip object '&quot;.$p_archive-&gt;zipname.&quot;'&quot;);
+
+      // ----- Duplicate the archive
+      $v_result = $this-&gt;privDuplicate($p_archive-&gt;zipname);
+    }
+
+    // ----- Look if the $p_archive is a string (so a filename)
+    else if (is_string($p_archive))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The parameter is a filename '$p_archive'&quot;);
+
+      // ----- Check that $p_archive is a valid zip file
+      // TBC : Should also check the archive format
+      if (!is_file($p_archive)) {
+        // ----- Error log
+        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, &quot;No file with filename '&quot;.$p_archive.&quot;'&quot;);
+        $v_result = PCLZIP_ERR_MISSING_FILE;
+      }
+      else {
+        // ----- Duplicate the archive
+        $v_result = $this-&gt;privDuplicate($p_archive);
+      }
+    }
+
+    // ----- Invalid variable
+    else
+    {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid variable type p_archive_to_add&quot;);
+      $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : merge()
+  // Description :
+  //   This method merge the $p_archive_to_add archive at the end of the current
+  //   one ($this).
+  //   If the archive ($this) does not exist, the merge becomes a duplicate.
+  //   If the $p_archive_to_add archive does not exist, the merge is a success.
+  // Parameters :
+  //   $p_archive_to_add : It can be directly the filename of a valid zip archive,
+  //                       or a PclZip object archive.
+  // Return Values :
+  //   1 on success,
+  //   0 or negative values on error (see below).
+  // --------------------------------------------------------------------------------
+  function merge($p_archive_to_add)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::merge&quot;, &quot;&quot;);
+    $v_result = 1;
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Check archive
+    if (!$this-&gt;privCheckFormat()) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+      return(0);
+    }
+
+    // ----- Look if the $p_archive_to_add is a PclZip object
+    if ((is_object($p_archive_to_add)) &amp;&amp; (get_class($p_archive_to_add) == 'pclzip'))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The parameter is valid PclZip object&quot;);
+
+      // ----- Merge the archive
+      $v_result = $this-&gt;privMerge($p_archive_to_add);
+    }
+
+    // ----- Look if the $p_archive_to_add is a string (so a filename)
+    else if (is_string($p_archive_to_add))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The parameter is a filename&quot;);
+
+      // ----- Create a temporary archive
+      $v_object_archive = new PclZip($p_archive_to_add);
+
+      // ----- Merge the archive
+      $v_result = $this-&gt;privMerge($v_object_archive);
+    }
+
+    // ----- Invalid variable
+    else
+    {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid variable type p_archive_to_add&quot;);
+      $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+
+
+  // --------------------------------------------------------------------------------
+  // Function : errorCode()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+  function errorCode()
+  {
+    if (PCLZIP_ERROR_EXTERNAL == 1) {
+      return(PclErrorCode());
+    }
+    else {
+      return($this-&gt;error_code);
+    }
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : errorName()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+  function errorName($p_with_code=false)
+  {
+    $v_name = array ( PCLZIP_ERR_NO_ERROR =&gt; 'PCLZIP_ERR_NO_ERROR',
+                      PCLZIP_ERR_WRITE_OPEN_FAIL =&gt; 'PCLZIP_ERR_WRITE_OPEN_FAIL',
+                      PCLZIP_ERR_READ_OPEN_FAIL =&gt; 'PCLZIP_ERR_READ_OPEN_FAIL',
+                      PCLZIP_ERR_INVALID_PARAMETER =&gt; 'PCLZIP_ERR_INVALID_PARAMETER',
+                      PCLZIP_ERR_MISSING_FILE =&gt; 'PCLZIP_ERR_MISSING_FILE',
+                      PCLZIP_ERR_FILENAME_TOO_LONG =&gt; 'PCLZIP_ERR_FILENAME_TOO_LONG',
+                      PCLZIP_ERR_INVALID_ZIP =&gt; 'PCLZIP_ERR_INVALID_ZIP',
+                      PCLZIP_ERR_BAD_EXTRACTED_FILE =&gt; 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
+                      PCLZIP_ERR_DIR_CREATE_FAIL =&gt; 'PCLZIP_ERR_DIR_CREATE_FAIL',
+                      PCLZIP_ERR_BAD_EXTENSION =&gt; 'PCLZIP_ERR_BAD_EXTENSION',
+                      PCLZIP_ERR_BAD_FORMAT =&gt; 'PCLZIP_ERR_BAD_FORMAT',
+                      PCLZIP_ERR_DELETE_FILE_FAIL =&gt; 'PCLZIP_ERR_DELETE_FILE_FAIL',
+                      PCLZIP_ERR_RENAME_FILE_FAIL =&gt; 'PCLZIP_ERR_RENAME_FILE_FAIL',
+                      PCLZIP_ERR_BAD_CHECKSUM =&gt; 'PCLZIP_ERR_BAD_CHECKSUM',
+                      PCLZIP_ERR_INVALID_ARCHIVE_ZIP =&gt; 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
+                      PCLZIP_ERR_MISSING_OPTION_VALUE =&gt; 'PCLZIP_ERR_MISSING_OPTION_VALUE',
+                      PCLZIP_ERR_INVALID_OPTION_VALUE =&gt; 'PCLZIP_ERR_INVALID_OPTION_VALUE',
+                      PCLZIP_ERR_UNSUPPORTED_COMPRESSION =&gt; 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
+                      PCLZIP_ERR_UNSUPPORTED_ENCRYPTION =&gt; 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
+                      ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE =&gt; 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
+                      ,PCLZIP_ERR_DIRECTORY_RESTRICTION =&gt; 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
+                    );
+
+    if (isset($v_name[$this-&gt;error_code])) {
+      $v_value = $v_name[$this-&gt;error_code];
+    }
+    else {
+      $v_value = 'NoName';
+    }
+
+    if ($p_with_code) {
+      return($v_value.' ('.$this-&gt;error_code.')');
+    }
+    else {
+      return($v_value);
+    }
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : errorInfo()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+  function errorInfo($p_full=false)
+  {
+    if (PCLZIP_ERROR_EXTERNAL == 1) {
+      return(PclErrorString());
+    }
+    else {
+      if ($p_full) {
+        return($this-&gt;errorName(true).&quot; : &quot;.$this-&gt;error_string);
+      }
+      else {
+        return($this-&gt;error_string.&quot; [code &quot;.$this-&gt;error_code.&quot;]&quot;);
+      }
+    }
+  }
+  // --------------------------------------------------------------------------------
+
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
+// *****                                                        *****
+// *****       THESES FUNCTIONS MUST NOT BE USED DIRECTLY       *****
+// --------------------------------------------------------------------------------
+
+
+
+  // --------------------------------------------------------------------------------
+  // Function : privCheckFormat()
+  // Description :
+  //   This method check that the archive exists and is a valid zip archive.
+  //   Several level of check exists. (futur)
+  // Parameters :
+  //   $p_level : Level of check. Default 0.
+  //              0 : Check the first bytes (magic codes) (default value))
+  //              1 : 0 + Check the central directory (futur)
+  //              2 : 1 + Check each file header (futur)
+  // Return Values :
+  //   true on success,
+  //   false on error, the error code is set.
+  // --------------------------------------------------------------------------------
+  function privCheckFormat($p_level=0)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCheckFormat&quot;, &quot;&quot;);
+    $v_result = true;
+
+	// ----- Reset the file system cache
+    clearstatcache();
+
+    // ----- Reset the error handler
+    $this-&gt;privErrorReset();
+
+    // ----- Look if the file exits
+    if (!is_file($this-&gt;zipname)) {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, &quot;Missing archive file '&quot;.$this-&gt;zipname.&quot;'&quot;);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
+      return(false);
+    }
+
+    // ----- Check that the file is readeable
+    if (!is_readable($this-&gt;zipname)) {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, &quot;Unable to read archive '&quot;.$this-&gt;zipname.&quot;'&quot;);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
+      return(false);
+    }
+
+    // ----- Check the magic code
+    // TBC
+
+    // ----- Check the central header
+    // TBC
+
+    // ----- Check each file header
+    // TBC
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privParseOptions()
+  // Description :
+  //   This internal methods reads the variable list of arguments ($p_options_list,
+  //   $p_size) and generate an array with the options and values ($v_result_list).
+  //   $v_requested_options contains the options that can be present and those that
+  //   must be present.
+  //   $v_requested_options is an array, with the option value as key, and 'optional',
+  //   or 'mandatory' as value.
+  // Parameters :
+  //   See above.
+  // Return Values :
+  //   1 on success.
+  //   0 on failure.
+  // --------------------------------------------------------------------------------
+  function privParseOptions(&amp;$p_options_list, $p_size, &amp;$v_result_list, $v_requested_options=false)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privParseOptions&quot;, &quot;&quot;);
+    $v_result=1;
+    
+    // ----- Read the options
+    $i=0;
+    while ($i&lt;$p_size) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Looking for table index $i, option = '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;(&quot;.$p_options_list[$i].&quot;)'&quot;);
+
+      // ----- Check if the option is supported
+      if (!isset($v_requested_options[$p_options_list[$i]])) {
+        // ----- Error log
+        PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid optional parameter '&quot;.$p_options_list[$i].&quot;' for this method&quot;);
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+
+      // ----- Look for next option
+      switch ($p_options_list[$i]) {
+        // ----- Look for options that request a path value
+        case PCLZIP_OPT_PATH :
+        case PCLZIP_OPT_REMOVE_PATH :
+        case PCLZIP_OPT_ADD_PATH :
+          // ----- Check the number of parameters
+          if (($i+1) &gt;= $p_size) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Get the value
+          $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
+          $i++;
+        break;
+
+        case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
+          // ----- Check the number of parameters
+          if (($i+1) &gt;= $p_size) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Get the value
+          if (   is_string($p_options_list[$i+1])
+              &amp;&amp; ($p_options_list[$i+1] != '')) {
+            $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
+            $i++;
+          }
+          else {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; set with an empty value is ignored.&quot;);
+          }
+        break;
+
+        // ----- Look for options that request an array of string for value
+        case PCLZIP_OPT_BY_NAME :
+          // ----- Check the number of parameters
+          if (($i+1) &gt;= $p_size) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Get the value
+          if (is_string($p_options_list[$i+1])) {
+              $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
+          }
+          else if (is_array($p_options_list[$i+1])) {
+              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+          }
+          else {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Wrong parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+          ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
+          $i++;
+        break;
+
+        // ----- Look for options that request an EREG or PREG expression
+        case PCLZIP_OPT_BY_EREG :
+        case PCLZIP_OPT_BY_PREG :
+        //case PCLZIP_OPT_CRYPT :
+          // ----- Check the number of parameters
+          if (($i+1) &gt;= $p_size) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Get the value
+          if (is_string($p_options_list[$i+1])) {
+              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+          }
+          else {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Wrong parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
+          $i++;
+        break;
+
+        // ----- Look for options that takes a string
+        case PCLZIP_OPT_COMMENT :
+        case PCLZIP_OPT_ADD_COMMENT :
+        case PCLZIP_OPT_PREPEND_COMMENT :
+          // ----- Check the number of parameters
+          if (($i+1) &gt;= $p_size) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
+			                     &quot;Missing parameter value for option '&quot;
+								 .PclZipUtilOptionText($p_options_list[$i])
+								 .&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Get the value
+          if (is_string($p_options_list[$i+1])) {
+              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+          }
+          else {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
+			                     &quot;Wrong parameter value for option '&quot;
+								 .PclZipUtilOptionText($p_options_list[$i])
+								 .&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
+          $i++;
+        break;
+
+        // ----- Look for options that request an array of index
+        case PCLZIP_OPT_BY_INDEX :
+          // ----- Check the number of parameters
+          if (($i+1) &gt;= $p_size) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Get the value
+          $v_work_list = array();
+          if (is_string($p_options_list[$i+1])) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Index value is a string '&quot;.$p_options_list[$i+1].&quot;'&quot;);
+
+              // ----- Remove spaces
+              $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
+
+              // ----- Parse items
+              $v_work_list = explode(&quot;,&quot;, $p_options_list[$i+1]);
+          }
+          else if (is_integer($p_options_list[$i+1])) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Index value is an integer '&quot;.$p_options_list[$i+1].&quot;'&quot;);
+              $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
+          }
+          else if (is_array($p_options_list[$i+1])) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Index value is an array&quot;);
+              $v_work_list = $p_options_list[$i+1];
+          }
+          else {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Value must be integer, string or array for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+          
+          // ----- Reduce the index list
+          // each index item in the list must be a couple with a start and
+          // an end value : [0,3], [5-5], [8-10], ...
+          // ----- Check the format of each item
+          $v_sort_flag=false;
+          $v_sort_value=0;
+          for ($j=0; $j&lt;sizeof($v_work_list); $j++) {
+              // ----- Explode the item
+              $v_item_list = explode(&quot;-&quot;, $v_work_list[$j]);
+              $v_size_item_list = sizeof($v_item_list);
+              
+              // ----- TBC : Here we might check that each item is a
+              // real integer ...
+              
+              // ----- Look for single value
+              if ($v_size_item_list == 1) {
+                  // ----- Set the option value
+                  $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+                  $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
+              }
+              elseif ($v_size_item_list == 2) {
+                  // ----- Set the option value
+                  $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+                  $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
+              }
+              else {
+                  // ----- Error log
+                  PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Too many values in index range for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+                  // ----- Return
+                  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+                  return PclZip::errorCode();
+              }
+
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extracted index item = [&quot;.$v_result_list[$p_options_list[$i]][$j]['start'].&quot;,&quot;.$v_result_list[$p_options_list[$i]][$j]['end'].&quot;]&quot;);
+
+              // ----- Look for list sort
+              if ($v_result_list[$p_options_list[$i]][$j]['start'] &lt; $v_sort_value) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The list should be sorted ...&quot;);
+                  $v_sort_flag=true;
+
+                  // ----- TBC : An automatic sort should be writen ...
+                  // ----- Error log
+                  PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Invalid order of index range for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+                  // ----- Return
+                  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+                  return PclZip::errorCode();
+              }
+              $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
+          }
+          
+          // ----- Sort the items
+          if ($v_sort_flag) {
+              // TBC : To Be Completed
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;List sorting is not yet write ...&quot;);
+          }
+
+          // ----- Next option
+          $i++;
+        break;
+
+        // ----- Look for options that request no value
+        case PCLZIP_OPT_REMOVE_ALL_PATH :
+        case PCLZIP_OPT_EXTRACT_AS_STRING :
+        case PCLZIP_OPT_NO_COMPRESSION :
+        case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
+        case PCLZIP_OPT_REPLACE_NEWER :
+        case PCLZIP_OPT_STOP_ON_ERROR :
+          $v_result_list[$p_options_list[$i]] = true;
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
+        break;
+
+        // ----- Look for options that request an octal value
+        case PCLZIP_OPT_SET_CHMOD :
+          // ----- Check the number of parameters
+          if (($i+1) &gt;= $p_size) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Get the value
+          $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_result_list[$p_options_list[$i]].&quot;'&quot;);
+          $i++;
+        break;
+
+        // ----- Look for options that request a call-back
+        case PCLZIP_CB_PRE_EXTRACT :
+        case PCLZIP_CB_POST_EXTRACT :
+        case PCLZIP_CB_PRE_ADD :
+        case PCLZIP_CB_POST_ADD :
+        /* for futur use
+        case PCLZIP_CB_PRE_DELETE :
+        case PCLZIP_CB_POST_DELETE :
+        case PCLZIP_CB_PRE_LIST :
+        case PCLZIP_CB_POST_LIST :
+        */
+          // ----- Check the number of parameters
+          if (($i+1) &gt;= $p_size) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, &quot;Missing parameter value for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Get the value
+          $v_function_name = $p_options_list[$i+1];
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;call-back &quot;.PclZipUtilOptionText($p_options_list[$i]).&quot; = '&quot;.$v_function_name.&quot;'&quot;);
+
+          // ----- Check that the value is a valid existing function
+          if (!function_exists($v_function_name)) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, &quot;Function '&quot;.$v_function_name.&quot;()' is not an existing function for option '&quot;.PclZipUtilOptionText($p_options_list[$i]).&quot;'&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          // ----- Set the attribute
+          $v_result_list[$p_options_list[$i]] = $v_function_name;
+          $i++;
+        break;
+
+        default :
+          // ----- Error log
+          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+		                       &quot;Unknown parameter '&quot;
+							   .$p_options_list[$i].&quot;'&quot;);
+
+          // ----- Return
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+          return PclZip::errorCode();
+      }
+
+      // ----- Next options
+      $i++;
+    }
+
+    // ----- Look for mandatory options
+    if ($v_requested_options !== false) {
+      for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+        // ----- Look for mandatory option
+        if ($v_requested_options[$key] == 'mandatory') {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Detect a mandatory option : &quot;.PclZipUtilOptionText($key).&quot;(&quot;.$key.&quot;)&quot;);
+          // ----- Look if present
+          if (!isset($v_result_list[$key])) {
+            // ----- Error log
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Missing mandatory parameter &quot;.PclZipUtilOptionText($key).&quot;(&quot;.$key.&quot;)&quot;);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+        }
+      }
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privFileDescrParseAtt()
+  // Description :
+  // Parameters :
+  // Return Values :
+  //   1 on success.
+  //   0 on failure.
+  // --------------------------------------------------------------------------------
+  function privFileDescrParseAtt(&amp;$p_file_list, &amp;$p_filedescr, $v_options, $v_requested_options=false)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privFileDescrParseAtt&quot;, &quot;&quot;);
+    $v_result=1;
+    
+    // ----- For each file in the list check the attributes
+    foreach ($p_file_list as $v_key =&gt; $v_value) {
+    
+      // ----- Check if the option is supported
+      if (!isset($v_requested_options[$v_key])) {
+        // ----- Error log
+        PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid file attribute '&quot;.$v_key.&quot;' for this file&quot;);
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+
+      // ----- Look for attribute
+      switch ($v_key) {
+        case PCLZIP_ATT_FILE_NAME :
+          if (!is_string($v_value)) {
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid type &quot;.gettype($v_value).&quot;. String expected for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($v_key).&quot; = '&quot;.$v_value.&quot;'&quot;);
+          
+          if ($p_filedescr['filename'] == '') {
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid empty filename for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+        break;
+
+        case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
+          if (!is_string($v_value)) {
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid type &quot;.gettype($v_value).&quot;. String expected for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($v_key).&quot; = '&quot;.$v_value.&quot;'&quot;);
+
+          if ($p_filedescr['new_short_name'] == '') {
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid empty short filename for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+        break;
+
+        case PCLZIP_ATT_FILE_NEW_FULL_NAME :
+          if (!is_string($v_value)) {
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid type &quot;.gettype($v_value).&quot;. String expected for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+
+          $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;&quot;.PclZipUtilOptionText($v_key).&quot; = '&quot;.$v_value.&quot;'&quot;);
+
+          if ($p_filedescr['new_full_name'] == '') {
+            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, &quot;Invalid empty full filename for attribute '&quot;.PclZipUtilOptionText($v_key).&quot;'&quot;);
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+          }
+        break;
+
+        default :
+          // ----- Error log
+          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+		                           &quot;Unknown parameter '&quot;.$v_key.&quot;'&quot;);
+
+          // ----- Return
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+          return PclZip::errorCode();
+      }
+
+      // ----- Look for mandatory options
+      if ($v_requested_options !== false) {
+        for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+          // ----- Look for mandatory option
+          if ($v_requested_options[$key] == 'mandatory') {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Detect a mandatory option : &quot;.PclZipUtilOptionText($key).&quot;(&quot;.$key.&quot;)&quot;);
+            // ----- Look if present
+            if (!isset($p_file_list[$key])) {
+              PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Missing mandatory parameter &quot;.PclZipUtilOptionText($key).&quot;(&quot;.$key.&quot;)&quot;);
+              //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+              return PclZip::errorCode();
+            }
+          }
+        }
+      }
+    
+    // end foreach
+    }
+    
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privFileDescrExpand()
+  // Description :
+  // Parameters :
+  // Return Values :
+  //   1 on success.
+  //   0 on failure.
+  // --------------------------------------------------------------------------------
+  function privFileDescrExpand(&amp;$p_filedescr_list, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privFileDescrExpand&quot;, &quot;&quot;);
+    $v_result=1;
+    
+    // ----- Create a result list
+    $v_result_list = array();
+    
+    // ----- Look each entry
+    for ($i=0; $i&lt;sizeof($p_filedescr_list); $i++) {
+      // ----- Get filedescr
+      $v_descr = $p_filedescr_list[$i];
+      
+      // ----- Reduce the filename
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filedescr before reduction :'&quot;.$v_descr['filename'].&quot;'&quot;);
+      $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename']);
+      $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filedescr after reduction :'&quot;.$v_descr['filename'].&quot;'&quot;);
+      
+      // ----- Get type of descr
+      if (!file_exists($v_descr['filename'])) {
+        // ----- Error log
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$v_descr['filename'].&quot;' does not exists&quot;);
+        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, &quot;File '&quot;.$v_descr['filename'].&quot;' does not exists&quot;);
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+      if (@is_file($v_descr['filename'])) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;This is a file&quot;);
+        $v_descr['type'] = 'file';
+      }
+      else if (@is_dir($v_descr['filename'])) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;This is a folder&quot;);
+        $v_descr['type'] = 'folder';
+      }
+      else if (@is_link($v_descr['filename'])) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Unsupported file type : link&quot;);
+        // skip
+        continue;
+      }
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Unsupported file type : unknown type&quot;);
+        // skip
+        continue;
+      }
+      
+      // ----- Calculate the stored filename
+      $this-&gt;privCalculateStoredFilename($v_descr, $p_options);
+      
+      // ----- Add the descriptor in result list
+      $v_result_list[sizeof($v_result_list)] = $v_descr;
+      
+      // ----- Look for folder
+      if ($v_descr['type'] == 'folder') {
+        // ----- List of items in folder
+        $v_dirlist_descr = array();
+        $v_dirlist_nb = 0;
+        if ($v_folder_handler = @opendir($v_descr['filename'])) {
+          while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Looking for '&quot;.$v_item_handler.&quot;' in the directory&quot;);
+
+            // ----- Skip '.' and '..'
+            if (($v_item_handler == '.') || ($v_item_handler == '..')) {
+                continue;
+            }
+            
+            // ----- Compose the full filename
+            $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
+            
+            // ----- Look for different stored filename
+            // Because the name of the folder was changed, the name of the
+            // files/sub-folders also change
+            if ($v_descr['stored_filename'] != $v_descr['filename']) {
+              $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
+            }
+      
+            $v_dirlist_nb++;
+          }
+        }
+        else {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unable to open dir '&quot;.$v_descr['filename'].&quot;' in read mode. Skipped.&quot;);
+          // TBC : unable to open folder in read mode
+        }
+        
+        // ----- Expand each element of the list
+        if ($v_dirlist_nb != 0) {
+          // ----- Expand
+          if (($v_result = $this-&gt;privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+          }
+          
+          // ----- Concat the resulting list
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Merging result list (size '&quot;.sizeof($v_result_list).&quot;') with dirlist (size '&quot;.sizeof($v_dirlist_descr).&quot;')&quot;);
+          $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;merged result list is size '&quot;.sizeof($v_result_list).&quot;'&quot;);
+        }
+        else {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Nothing in this folder to expand.&quot;);
+        }
+          
+        // ----- Free local array
+        unset($v_dirlist_descr);
+      }
+    }
+    
+    // ----- Get the result list
+    $p_filedescr_list = $v_result_list;
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privCreate()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privCreate($p_filedescr_list, &amp;$p_result_list, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCreate&quot;, &quot;list&quot;);
+    $v_result=1;
+    $v_list_detail = array();
+    
+    // ----- Magic quotes trick
+    $this-&gt;privDisableMagicQuotes();
+
+    // ----- Open the file in write mode
+    if (($v_result = $this-&gt;privOpenFd('wb')) != 1)
+    {
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Add the list of files
+    $v_result = $this-&gt;privAddList($p_filedescr_list, $p_result_list, $p_options);
+
+    // ----- Close
+    $this-&gt;privCloseFd();
+
+    // ----- Magic quotes trick
+    $this-&gt;privSwapBackMagicQuotes();
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAdd()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privAdd($p_filedescr_list, &amp;$p_result_list, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privAdd&quot;, &quot;list&quot;);
+    $v_result=1;
+    $v_list_detail = array();
+
+    // ----- Look if the archive exists or is empty
+    if ((!is_file($this-&gt;zipname)) || (filesize($this-&gt;zipname) == 0))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Archive does not exist, or is empty, create it.&quot;);
+
+      // ----- Do a create
+      $v_result = $this-&gt;privCreate($p_filedescr_list, $p_result_list, $p_options);
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+    // ----- Magic quotes trick
+    $this-&gt;privDisableMagicQuotes();
+
+    // ----- Open the zip file
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($v_result=$this-&gt;privOpenFd('rb')) != 1)
+    {
+      // ----- Magic quotes trick
+      $this-&gt;privSwapBackMagicQuotes();
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Read the central directory informations
+    $v_central_dir = array();
+    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
+    {
+      $this-&gt;privCloseFd();
+      $this-&gt;privSwapBackMagicQuotes();
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Go to beginning of File
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+    @rewind($this-&gt;zip_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+
+    // ----- Creates a temporay file
+    $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+    // ----- Open the temporary file in write mode
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+    {
+      $this-&gt;privCloseFd();
+      $this-&gt;privSwapBackMagicQuotes();
+
+      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Copy the files from the archive to the temporary file
+    // TBC : Here I should better append the file and go back to erase the central dir
+    $v_size = $v_central_dir['offset'];
+    while ($v_size != 0)
+    {
+      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+      $v_buffer = fread($this-&gt;zip_fd, $v_read_size);
+      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+      $v_size -= $v_read_size;
+    }
+
+    // ----- Swap the file descriptor
+    // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+    // the following methods on the temporary fil and not the real archive
+    $v_swap = $this-&gt;zip_fd;
+    $this-&gt;zip_fd = $v_zip_temp_fd;
+    $v_zip_temp_fd = $v_swap;
+
+    // ----- Add the files
+    $v_header_list = array();
+    if (($v_result = $this-&gt;privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+    {
+      fclose($v_zip_temp_fd);
+      $this-&gt;privCloseFd();
+      @unlink($v_zip_temp_name);
+      $this-&gt;privSwapBackMagicQuotes();
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Store the offset of the central dir
+    $v_offset = @ftell($this-&gt;zip_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;New offset of central dir : $v_offset&quot;);
+
+    // ----- Copy the block of file headers from the old archive
+    $v_size = $v_central_dir['size'];
+    while ($v_size != 0)
+    {
+      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+      $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
+      @fwrite($this-&gt;zip_fd, $v_buffer, $v_read_size);
+      $v_size -= $v_read_size;
+    }
+
+    // ----- Create the Central Dir files header
+    for ($i=0, $v_count=0; $i&lt;sizeof($v_header_list); $i++)
+    {
+      // ----- Create the file header
+      if ($v_header_list[$i]['status'] == 'ok') {
+        if (($v_result = $this-&gt;privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+          fclose($v_zip_temp_fd);
+          $this-&gt;privCloseFd();
+          @unlink($v_zip_temp_name);
+          $this-&gt;privSwapBackMagicQuotes();
+
+          // ----- Return
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+          return $v_result;
+        }
+        $v_count++;
+      }
+
+      // ----- Transform the header to a 'usable' info
+      $this-&gt;privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+    }
+
+    // ----- Zip file comment
+    $v_comment = $v_central_dir['comment'];
+    if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+      $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+    }
+    if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
+      $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
+    }
+    if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
+      $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
+    }
+
+    // ----- Calculate the size of the central header
+    $v_size = @ftell($this-&gt;zip_fd)-$v_offset;
+
+    // ----- Create the central dir footer
+    if (($v_result = $this-&gt;privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
+    {
+      // ----- Reset the file list
+      unset($v_header_list);
+      $this-&gt;privSwapBackMagicQuotes();
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Swap back the file descriptor
+    $v_swap = $this-&gt;zip_fd;
+    $this-&gt;zip_fd = $v_zip_temp_fd;
+    $v_zip_temp_fd = $v_swap;
+
+    // ----- Close
+    $this-&gt;privCloseFd();
+
+    // ----- Close the temporary file
+    @fclose($v_zip_temp_fd);
+
+    // ----- Magic quotes trick
+    $this-&gt;privSwapBackMagicQuotes();
+
+    // ----- Delete the zip file
+    // TBC : I should test the result ...
+    @unlink($this-&gt;zipname);
+
+    // ----- Rename the temporary file
+    // TBC : I should test the result ...
+    //@rename($v_zip_temp_name, $this-&gt;zipname);
+    PclZipUtilRename($v_zip_temp_name, $this-&gt;zipname);
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privOpenFd()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+  function privOpenFd($p_mode)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privOpenFd&quot;, 'mode='.$p_mode);
+    $v_result=1;
+
+    // ----- Look if already open
+    if ($this-&gt;zip_fd != 0)
+    {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this-&gt;zipname.'\' already open');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Open the zip file
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Open file in '.$p_mode.' mode');
+    if (($this-&gt;zip_fd = @fopen($this-&gt;zipname, $p_mode)) == 0)
+    {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this-&gt;zipname.'\' in '.$p_mode.' mode');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privCloseFd()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+  function privCloseFd()
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCloseFd&quot;, &quot;&quot;);
+    $v_result=1;
+
+    if ($this-&gt;zip_fd != 0)
+      @fclose($this-&gt;zip_fd);
+    $this-&gt;zip_fd = 0;
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAddList()
+  // Description :
+  //   $p_add_dir and $p_remove_dir will give the ability to memorize a path which is
+  //   different from the real path of the file. This is usefull if you want to have PclTar
+  //   running in any directory, and memorize relative path from an other directory.
+  // Parameters :
+  //   $p_list : An array containing the file or directory names to add in the tar
+  //   $p_result_list : list of added files with their properties (specially the status field)
+  //   $p_add_dir : Path to add in the filename path archived
+  //   $p_remove_dir : Path to remove in the filename path archived
+  // Return Values :
+  // --------------------------------------------------------------------------------
+//  function privAddList($p_list, &amp;$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &amp;$p_options)
+  function privAddList($p_filedescr_list, &amp;$p_result_list, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privAddList&quot;, &quot;list&quot;);
+    $v_result=1;
+
+    // ----- Add the files
+    $v_header_list = array();
+    if (($v_result = $this-&gt;privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+    {
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Store the offset of the central dir
+    $v_offset = @ftell($this-&gt;zip_fd);
+
+    // ----- Create the Central Dir files header
+    for ($i=0,$v_count=0; $i&lt;sizeof($v_header_list); $i++)
+    {
+      // ----- Create the file header
+      if ($v_header_list[$i]['status'] == 'ok') {
+        if (($v_result = $this-&gt;privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+          // ----- Return
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+          return $v_result;
+        }
+        $v_count++;
+      }
+
+      // ----- Transform the header to a 'usable' info
+      $this-&gt;privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+    }
+
+    // ----- Zip file comment
+    $v_comment = '';
+    if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+      $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+    }
+
+    // ----- Calculate the size of the central header
+    $v_size = @ftell($this-&gt;zip_fd)-$v_offset;
+
+    // ----- Create the central dir footer
+    if (($v_result = $this-&gt;privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
+    {
+      // ----- Reset the file list
+      unset($v_header_list);
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAddFileList()
+  // Description :
+  // Parameters :
+  //   $p_filedescr_list : An array containing the file description 
+  //                      or directory names to add in the zip
+  //   $p_result_list : list of added files with their properties (specially the status field)
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privAddFileList($p_filedescr_list, &amp;$p_result_list, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privAddFileList&quot;, &quot;filedescr_list&quot;);
+    $v_result=1;
+    $v_header = array();
+
+    // ----- Recuperate the current number of elt in list
+    $v_nb = sizeof($p_result_list);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Before add, list have &quot;.$v_nb.&quot; elements&quot;);
+
+    // ----- Loop on the files
+    for ($j=0; ($j&lt;sizeof($p_filedescr_list)) &amp;&amp; ($v_result==1); $j++) {
+      // ----- Format the filename
+      $p_filedescr_list[$j]['filename']
+      = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
+      
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Looking for file '&quot;.$p_filedescr_list[$j]['filename'].&quot;'&quot;);
+
+      // ----- Skip empty file names
+      // TBC : Can this be possible ? not checked in DescrParseAtt ?
+      if ($p_filedescr_list[$j]['filename'] == &quot;&quot;) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Skip empty filename&quot;);
+        continue;
+      }
+
+      // ----- Check the filename
+      if (!file_exists($p_filedescr_list[$j]['filename'])) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$p_filedescr_list[$j]['filename'].&quot;' does not exists&quot;);
+        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, &quot;File '&quot;.$p_filedescr_list[$j]['filename'].&quot;' does not exists&quot;);
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+
+      // ----- Look if it is a file or a dir with no all path remove option
+      if (   (is_file($p_filedescr_list[$j]['filename']))
+          || (   is_dir($p_filedescr_list[$j]['filename'])
+              &amp;&amp; (   !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
+                  || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
+
+        // ----- Add the file
+        $v_result = $this-&gt;privAddFile($p_filedescr_list[$j], $v_header,
+                                       $p_options);
+        if ($v_result != 1) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+          return $v_result;
+        }
+
+        // ----- Store the file infos
+        $p_result_list[$v_nb++] = $v_header;
+      }
+    }
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;After add, list have &quot;.$v_nb.&quot; elements&quot;);
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privAddFile()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privAddFile($p_filedescr, &amp;$p_header, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privAddFile&quot;, &quot;filename='&quot;.$p_filedescr['filename'].&quot;'&quot;);
+    $v_result=1;
+    
+    // ----- Working variable
+    $p_filename = $p_filedescr['filename'];
+
+    // TBC : Already done in the fileAtt check ... ?
+    if ($p_filename == &quot;&quot;) {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, &quot;Invalid file list parameter (invalid or empty list)&quot;);
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+  
+    // ----- Look for a stored different filename 
+    if (isset($p_filedescr['stored_filename'])) {
+      $v_stored_filename = $p_filedescr['stored_filename'];
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is NOT the same &quot;'.$v_stored_filename.'&quot;');
+    }
+    else {
+      $v_stored_filename = $p_filedescr['stored_filename'];
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is the same');
+    }
+
+    // ----- Set the file properties
+    clearstatcache();
+    $p_header['version'] = 20;
+    $p_header['version_extracted'] = 10;
+    $p_header['flag'] = 0;
+    $p_header['compression'] = 0;
+    $p_header['mtime'] = filemtime($p_filename);
+    $p_header['crc'] = 0;
+    $p_header['compressed_size'] = 0;
+    $p_header['size'] = filesize($p_filename);
+    $p_header['filename_len'] = strlen($p_filename);
+    $p_header['extra_len'] = 0;
+    $p_header['comment_len'] = 0;
+    $p_header['disk'] = 0;
+    $p_header['internal'] = 0;
+//    $p_header['external'] = (is_file($p_filename)?0xFE49FFE0:0x41FF0010);
+    $p_header['external'] = (is_file($p_filename)?0x00000000:0x00000010);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Header external extension '&quot;.sprintf(&quot;0x%X&quot;,$p_header['external']).&quot;'&quot;);
+    $p_header['offset'] = 0;
+    $p_header['filename'] = $p_filename;
+    $p_header['stored_filename'] = $v_stored_filename;
+    $p_header['extra'] = '';
+    $p_header['comment'] = '';
+    $p_header['status'] = 'ok';
+    $p_header['index'] = -1;
+
+    // ----- Look for pre-add callback
+    if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A pre-callback '&quot;.$p_options[PCLZIP_CB_PRE_ADD].&quot;()') is defined for the extraction&quot;);
+
+      // ----- Generate a local information
+      $v_local_header = array();
+      $this-&gt;privConvertHeader2FileInfo($p_header, $v_local_header);
+
+      // ----- Call the callback
+      // Here I do not use call_user_func() because I need to send a reference to the
+      // header.
+      eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);');
+      if ($v_result == 0) {
+        // ----- Change the file status
+        $p_header['status'] = &quot;skipped&quot;;
+        $v_result = 1;
+      }
+
+      // ----- Update the informations
+      // Only some fields can be modified
+      if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
+        $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;New stored filename is '&quot;.$p_header['stored_filename'].&quot;'&quot;);
+      }
+    }
+
+    // ----- Look for empty stored filename
+    if ($p_header['stored_filename'] == &quot;&quot;) {
+      $p_header['status'] = &quot;filtered&quot;;
+    }
+    
+    // ----- Check the path length
+    if (strlen($p_header['stored_filename']) &gt; 0xFF) {
+      $p_header['status'] = 'filename_too_long';
+    }
+
+    // ----- Look if no error, or file not skipped
+    if ($p_header['status'] == 'ok') {
+
+      // ----- Look for a file
+      if (is_file($p_filename))
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;'&quot;.$p_filename.&quot;' is a file&quot;);
+        // ----- Open the source file
+        if (($v_file = @fopen($p_filename, &quot;rb&quot;)) == 0) {
+          PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, &quot;Unable to open file '$p_filename' in binary read mode&quot;);
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+          return PclZip::errorCode();
+        }
+
+        if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File will not be compressed&quot;);
+          // ----- Read the file content
+          $v_content_compressed = @fread($v_file, $p_header['size']);
+
+          // ----- Calculate the CRC
+          $p_header['crc'] = @crc32($v_content_compressed);
+
+          // ----- Set header parameters
+          $p_header['compressed_size'] = $p_header['size'];
+          $p_header['compression'] = 0;
+        }
+        else {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File will be compressed&quot;);
+          // ----- Read the file content
+          $v_content = @fread($v_file, $p_header['size']);
+
+          // ----- Calculate the CRC
+          $p_header['crc'] = @crc32($v_content);
+
+          // ----- Compress the file
+          $v_content_compressed = @gzdeflate($v_content);
+
+          // ----- Set header parameters
+          $p_header['compressed_size'] = strlen($v_content_compressed);
+          $p_header['compression'] = 8;
+        }
+        
+        // ----- Look for encryption
+        /*
+        if ((isset($p_options[PCLZIP_OPT_CRYPT]))
+		    &amp;&amp; ($p_options[PCLZIP_OPT_CRYPT] != &quot;&quot;)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File need to be crypted ....&quot;);
+          
+          // Should be a random header
+          $v_header = 'xxxxxxxxxxxx';
+	      $v_content_compressed = PclZipUtilZipEncrypt($v_content_compressed,
+		                                           $p_header['compressed_size'],
+	                                               $v_header,
+												   $p_header['crc'],
+												   &quot;test&quot;);
+												   
+          $p_header['compressed_size'] += 12;
+          $p_header['flag'] = 1;
+          
+          // ----- Add the header to the data
+          $v_content_compressed = $v_header.$v_content_compressed;
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Size after header : &quot;.strlen($v_content_compressed).&quot;&quot;);
+        }
+        */
+
+        // ----- Call the header generation
+        if (($v_result = $this-&gt;privWriteFileHeader($p_header)) != 1) {
+          @fclose($v_file);
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+          return $v_result;
+        }
+
+        // ----- Write the compressed (or not) content
+        @fwrite($this-&gt;zip_fd, 
+		            $v_content_compressed, $p_header['compressed_size']);
+        
+        // ----- Close the file
+        @fclose($v_file);
+      }
+
+      // ----- Look for a directory
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;'&quot;.$p_filename.&quot;' is a folder&quot;);
+        // ----- Look for directory last '/'
+        if (@substr($p_header['stored_filename'], -1) != '/') {
+          $p_header['stored_filename'] .= '/';
+        }
+
+        // ----- Set the file properties
+        $p_header['size'] = 0;
+        //$p_header['external'] = 0x41FF0010;   // Value for a folder : to be checked
+        $p_header['external'] = 0x00000010;   // Value for a folder : to be checked
+
+        // ----- Call the header generation
+        if (($v_result = $this-&gt;privWriteFileHeader($p_header)) != 1)
+        {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+          return $v_result;
+        }
+      }
+    }
+
+    // ----- Look for post-add callback
+    if (isset($p_options[PCLZIP_CB_POST_ADD])) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A post-callback '&quot;.$p_options[PCLZIP_CB_POST_ADD].&quot;()') is defined for the extraction&quot;);
+
+      // ----- Generate a local information
+      $v_local_header = array();
+      $this-&gt;privConvertHeader2FileInfo($p_header, $v_local_header);
+
+      // ----- Call the callback
+      // Here I do not use call_user_func() because I need to send a reference to the
+      // header.
+      eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
+      if ($v_result == 0) {
+        // ----- Ignored
+        $v_result = 1;
+      }
+
+      // ----- Update the informations
+      // Nothing can be modified
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privCalculateStoredFilename()
+  // Description :
+  //   Based on file descriptor properties and global options, this method
+  //   calculate the filename that will be stored in the archive.
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privCalculateStoredFilename(&amp;$p_filedescr, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCalculateStoredFilename&quot;, &quot;filename='&quot;.$p_filedescr['filename'].&quot;'&quot;);
+    $v_result=1;
+    
+    // ----- Working variables
+    $p_filename = $p_filedescr['filename'];
+    if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
+      $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
+    }
+    else {
+      $p_add_dir = '';
+    }
+    if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
+      $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
+    }
+    else {
+      $p_remove_dir = '';
+    }
+    if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+      $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+    }
+    else {
+      $p_remove_all_dir = 0;
+    }
+
+    // ----- Look for full name change
+    if (isset($p_filedescr['new_full_name'])) {
+      $v_stored_filename = $p_filedescr['new_full_name'];
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Changing full name of '&quot;.$p_filename.&quot;' for '&quot;.$v_stored_filename.&quot;'&quot;);
+    }
+    
+    // ----- Look for path and/or short name change
+    else {
+
+      // ----- Look for short name change
+      if (isset($p_filedescr['new_short_name'])) {
+        $v_path_info = pathinfo($p_filename);
+        $v_dir = '';
+        if ($v_path_info['dirname'] != '') {
+          $v_dir = $v_path_info['dirname'].'/';
+        }
+        $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Changing short name of '&quot;.$p_filename.&quot;' for '&quot;.$v_stored_filename.&quot;'&quot;);
+      }
+      else {
+        // ----- Calculate the stored filename
+        $v_stored_filename = $p_filename;
+      }
+
+      // ----- Look for all path to remove
+      if ($p_remove_all_dir) {
+        $v_stored_filename = basename($p_filename);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Remove all path selected change '&quot;.$p_filename.&quot;' for '&quot;.$v_stored_filename.&quot;'&quot;);
+      }
+      // ----- Look for partial path remove
+      else if ($p_remove_dir != &quot;&quot;) {
+        if (substr($p_remove_dir, -1) != '/')
+          $p_remove_dir .= &quot;/&quot;;
+
+        if (   (substr($p_filename, 0, 2) == &quot;./&quot;)
+            || (substr($p_remove_dir, 0, 2) == &quot;./&quot;)) {
+            
+          if (   (substr($p_filename, 0, 2) == &quot;./&quot;)
+              &amp;&amp; (substr($p_remove_dir, 0, 2) != &quot;./&quot;)) {
+            $p_remove_dir = &quot;./&quot;.$p_remove_dir;
+          }
+          if (   (substr($p_filename, 0, 2) != &quot;./&quot;)
+              &amp;&amp; (substr($p_remove_dir, 0, 2) == &quot;./&quot;)) {
+            $p_remove_dir = substr($p_remove_dir, 2);
+          }
+        }
+
+        $v_compare = PclZipUtilPathInclusion($p_remove_dir,
+                                             $v_stored_filename);
+        if ($v_compare &gt; 0) {
+          if ($v_compare == 2) {
+            $v_stored_filename = &quot;&quot;;
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Path to remove is the current folder&quot;);
+          }
+          else {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Remove path '$p_remove_dir' in file '$v_stored_filename'&quot;);
+            $v_stored_filename = substr($v_stored_filename,
+                                        strlen($p_remove_dir));
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Result is '$v_stored_filename'&quot;);
+          }
+        }
+      }
+      // ----- Look for path to add
+      if ($p_add_dir != &quot;&quot;) {
+        if (substr($p_add_dir, -1) == &quot;/&quot;)
+          $v_stored_filename = $p_add_dir.$v_stored_filename;
+        else
+          $v_stored_filename = $p_add_dir.&quot;/&quot;.$v_stored_filename;
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Add path '$p_add_dir' in file '$p_filename' = '$v_stored_filename'&quot;);
+      }
+    }
+
+    // ----- Filename (reduce the path of stored name)
+    $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
+    $p_filedescr['stored_filename'] = $v_stored_filename;
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Stored filename will be '&quot;.$p_filedescr['stored_filename'].&quot;', strlen &quot;.strlen($p_filedescr['stored_filename']));
+    
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privWriteFileHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privWriteFileHeader(&amp;$p_header)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privWriteFileHeader&quot;, 'file=&quot;'.$p_header['filename'].'&quot;, stored as &quot;'.$p_header['stored_filename'].'&quot;');
+    $v_result=1;
+
+    // ----- Store the offset position of the file
+    $p_header['offset'] = ftell($this-&gt;zip_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'File offset of the header :'.$p_header['offset']);
+
+    // ----- Transform UNIX mtime to DOS format mdate/mtime
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
+    $v_date = getdate($p_header['mtime']);
+    $v_mtime = ($v_date['hours']&lt;&lt;11) + ($v_date['minutes']&lt;&lt;5) + $v_date['seconds']/2;
+    $v_mdate = (($v_date['year']-1980)&lt;&lt;9) + ($v_date['mon']&lt;&lt;5) + $v_date['mday'];
+
+    // ----- Packed data
+    $v_binary_data = pack(&quot;VvvvvvVVVvv&quot;, 0x04034b50,
+	                      $p_header['version_extracted'], $p_header['flag'],
+                          $p_header['compression'], $v_mtime, $v_mdate,
+                          $p_header['crc'], $p_header['compressed_size'],
+						  $p_header['size'],
+                          strlen($p_header['stored_filename']),
+						  $p_header['extra_len']);
+
+    // ----- Write the first 148 bytes of the header in the archive
+    fputs($this-&gt;zip_fd, $v_binary_data, 30);
+
+    // ----- Write the variable fields
+    if (strlen($p_header['stored_filename']) != 0)
+    {
+      fputs($this-&gt;zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+    }
+    if ($p_header['extra_len'] != 0)
+    {
+      fputs($this-&gt;zip_fd, $p_header['extra'], $p_header['extra_len']);
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privWriteCentralFileHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privWriteCentralFileHeader(&amp;$p_header)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privWriteCentralFileHeader&quot;, 'file=&quot;'.$p_header['filename'].'&quot;, stored as &quot;'.$p_header['stored_filename'].'&quot;');
+    $v_result=1;
+
+    // TBC
+    //for(reset($p_header); $key = key($p_header); next($p_header)) {
+    //  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;header[$key] = &quot;.$p_header[$key]);
+    //}
+
+    // ----- Transform UNIX mtime to DOS format mdate/mtime
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
+    $v_date = getdate($p_header['mtime']);
+    $v_mtime = ($v_date['hours']&lt;&lt;11) + ($v_date['minutes']&lt;&lt;5) + $v_date['seconds']/2;
+    $v_mdate = (($v_date['year']-1980)&lt;&lt;9) + ($v_date['mon']&lt;&lt;5) + $v_date['mday'];
+
+    // ----- Packed data
+    $v_binary_data = pack(&quot;VvvvvvvVVVvvvvvVV&quot;, 0x02014b50,
+	                      $p_header['version'], $p_header['version_extracted'],
+                          $p_header['flag'], $p_header['compression'],
+						  $v_mtime, $v_mdate, $p_header['crc'],
+                          $p_header['compressed_size'], $p_header['size'],
+                          strlen($p_header['stored_filename']),
+						  $p_header['extra_len'], $p_header['comment_len'],
+                          $p_header['disk'], $p_header['internal'],
+						  $p_header['external'], $p_header['offset']);
+
+    // ----- Write the 42 bytes of the header in the zip file
+    fputs($this-&gt;zip_fd, $v_binary_data, 46);
+
+    // ----- Write the variable fields
+    if (strlen($p_header['stored_filename']) != 0)
+    {
+      fputs($this-&gt;zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+    }
+    if ($p_header['extra_len'] != 0)
+    {
+      fputs($this-&gt;zip_fd, $p_header['extra'], $p_header['extra_len']);
+    }
+    if ($p_header['comment_len'] != 0)
+    {
+      fputs($this-&gt;zip_fd, $p_header['comment'], $p_header['comment_len']);
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privWriteCentralHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privWriteCentralHeader&quot;, 'nb_entries='.$p_nb_entries.', size='.$p_size.', offset='.$p_offset.', comment=&quot;'.$p_comment.'&quot;');
+    $v_result=1;
+
+    // ----- Packed data
+    $v_binary_data = pack(&quot;VvvvvVVv&quot;, 0x06054b50, 0, 0, $p_nb_entries,
+	                      $p_nb_entries, $p_size,
+						  $p_offset, strlen($p_comment));
+
+    // ----- Write the 22 bytes of the header in the zip file
+    fputs($this-&gt;zip_fd, $v_binary_data, 22);
+
+    // ----- Write the variable fields
+    if (strlen($p_comment) != 0)
+    {
+      fputs($this-&gt;zip_fd, $p_comment, strlen($p_comment));
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privList()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privList(&amp;$p_list)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privList&quot;, &quot;list&quot;);
+    $v_result=1;
+
+    // ----- Magic quotes trick
+    $this-&gt;privDisableMagicQuotes();
+
+    // ----- Open the zip file
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($this-&gt;zip_fd = @fopen($this-&gt;zipname, 'rb')) == 0)
+    {
+      // ----- Magic quotes trick
+      $this-&gt;privSwapBackMagicQuotes();
+      
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this-&gt;zipname.'\' in binary read mode');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Read the central directory informations
+    $v_central_dir = array();
+    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
+    {
+      $this-&gt;privSwapBackMagicQuotes();
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Go to beginning of Central Dir
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Offset : &quot;.$v_central_dir['offset'].&quot;'&quot;);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+    @rewind($this-&gt;zip_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+    if (@fseek($this-&gt;zip_fd, $v_central_dir['offset']))
+    {
+      $this-&gt;privSwapBackMagicQuotes();
+
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+
+    // ----- Read each entry
+    for ($i=0; $i&lt;$v_central_dir['entries']; $i++)
+    {
+      // ----- Read the file header
+      if (($v_result = $this-&gt;privReadCentralFileHeader($v_header)) != 1)
+      {
+        $this-&gt;privSwapBackMagicQuotes();
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+        return $v_result;
+      }
+      $v_header['index'] = $i;
+
+      // ----- Get the only interesting attributes
+      $this-&gt;privConvertHeader2FileInfo($v_header, $p_list[$i]);
+      unset($v_header);
+    }
+
+    // ----- Close the zip file
+    $this-&gt;privCloseFd();
+
+    // ----- Magic quotes trick
+    $this-&gt;privSwapBackMagicQuotes();
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privConvertHeader2FileInfo()
+  // Description :
+  //   This function takes the file informations from the central directory
+  //   entries and extract the interesting parameters that will be given back.
+  //   The resulting file infos are set in the array $p_info
+  //     $p_info['filename'] : Filename with full path. Given by user (add),
+  //                           extracted in the filesystem (extract).
+  //     $p_info['stored_filename'] : Stored filename in the archive.
+  //     $p_info['size'] = Size of the file.
+  //     $p_info['compressed_size'] = Compressed size of the file.
+  //     $p_info['mtime'] = Last modification date of the file.
+  //     $p_info['comment'] = Comment associated with the file.
+  //     $p_info['folder'] = true/false : indicates if the entry is a folder or not.
+  //     $p_info['status'] = status of the action on the file.
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privConvertHeader2FileInfo($p_header, &amp;$p_info)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privConvertHeader2FileInfo&quot;, &quot;Filename='&quot;.$p_header['filename'].&quot;'&quot;);
+    $v_result=1;
+
+    // ----- Get the interesting attributes
+    $p_info['filename'] = $p_header['filename'];
+    $p_info['stored_filename'] = $p_header['stored_filename'];
+    $p_info['size'] = $p_header['size'];
+    $p_info['compressed_size'] = $p_header['compressed_size'];
+    $p_info['mtime'] = $p_header['mtime'];
+    $p_info['comment'] = $p_header['comment'];
+    $p_info['folder'] = (($p_header['external']&amp;0x00000010)==0x00000010);
+    $p_info['index'] = $p_header['index'];
+    $p_info['status'] = $p_header['status'];
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractByRule()
+  // Description :
+  //   Extract a file or directory depending of rules (by index, by name, ...)
+  // Parameters :
+  //   $p_file_list : An array where will be placed the properties of each
+  //                  extracted file
+  //   $p_path : Path to add while writing the extracted files
+  //   $p_remove_path : Path to remove (from the file memorized path) while writing the
+  //                    extracted files. If the path does not match the file path,
+  //                    the file is extracted with its memorized path.
+  //                    $p_remove_path does not apply to 'list' mode.
+  //                    $p_path and $p_remove_path are commulative.
+  // Return Values :
+  //   1 on success,0 or less on error (see error code list)
+  // --------------------------------------------------------------------------------
+  function privExtractByRule(&amp;$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privExtractByRule&quot;, &quot;path='$p_path', remove_path='$p_remove_path', remove_all_path='&quot;.($p_remove_all_path?'true':'false').&quot;'&quot;);
+    $v_result=1;
+
+    // ----- Magic quotes trick
+    $this-&gt;privDisableMagicQuotes();
+
+    // ----- Check the path
+    if (   ($p_path == &quot;&quot;)
+	    || (   (substr($p_path, 0, 1) != &quot;/&quot;)
+		    &amp;&amp; (substr($p_path, 0, 3) != &quot;../&quot;)
+			&amp;&amp; (substr($p_path,1,2)!=&quot;:/&quot;)))
+      $p_path = &quot;./&quot;.$p_path;
+
+    // ----- Reduce the path last (and duplicated) '/'
+    if (($p_path != &quot;./&quot;) &amp;&amp; ($p_path != &quot;/&quot;))
+    {
+      // ----- Look for the path end '/'
+      while (substr($p_path, -1) == &quot;/&quot;)
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Destination path [$p_path] ends by '/'&quot;);
+        $p_path = substr($p_path, 0, strlen($p_path)-1);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Modified to [$p_path]&quot;);
+      }
+    }
+
+    // ----- Look for path to remove format (should end by /)
+    if (($p_remove_path != &quot;&quot;) &amp;&amp; (substr($p_remove_path, -1) != '/'))
+    {
+      $p_remove_path .= '/';
+    }
+    $p_remove_path_size = strlen($p_remove_path);
+
+    // ----- Open the zip file
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($v_result = $this-&gt;privOpenFd('rb')) != 1)
+    {
+      $this-&gt;privSwapBackMagicQuotes();
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Read the central directory informations
+    $v_central_dir = array();
+    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
+    {
+      // ----- Close the zip file
+      $this-&gt;privCloseFd();
+      $this-&gt;privSwapBackMagicQuotes();
+
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Start at beginning of Central Dir
+    $v_pos_entry = $v_central_dir['offset'];
+
+    // ----- Read each entry
+    $j_start = 0;
+    for ($i=0, $v_nb_extracted=0; $i&lt;$v_central_dir['entries']; $i++)
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Read next file header entry : '$i'&quot;);
+
+      // ----- Read next Central dir entry
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Position before rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+      @rewind($this-&gt;zip_fd);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Position after rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+      if (@fseek($this-&gt;zip_fd, $v_pos_entry))
+      {
+        // ----- Close the zip file
+        $this-&gt;privCloseFd();
+        $this-&gt;privSwapBackMagicQuotes();
+
+        // ----- Error log
+        PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Position after fseek : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+
+      // ----- Read the file header
+      $v_header = array();
+      if (($v_result = $this-&gt;privReadCentralFileHeader($v_header)) != 1)
+      {
+        // ----- Close the zip file
+        $this-&gt;privCloseFd();
+        $this-&gt;privSwapBackMagicQuotes();
+
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+        return $v_result;
+      }
+
+      // ----- Store the index
+      $v_header['index'] = $i;
+
+      // ----- Store the file position
+      $v_pos_entry = ftell($this-&gt;zip_fd);
+
+      // ----- Look for the specific extract rules
+      $v_extract = false;
+
+      // ----- Look for extract by name rule
+      if (   (isset($p_options[PCLZIP_OPT_BY_NAME]))
+          &amp;&amp; ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByName'&quot;);
+
+          // ----- Look if the filename is in the list
+          for ($j=0; ($j&lt;sizeof($p_options[PCLZIP_OPT_BY_NAME])) &amp;&amp; (!$v_extract); $j++) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Compare with file '&quot;.$p_options[PCLZIP_OPT_BY_NAME][$j].&quot;'&quot;);
+
+              // ----- Look for a directory
+              if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == &quot;/&quot;) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The searched item is a directory&quot;);
+
+                  // ----- Look if the directory is in the filename path
+                  if (   (strlen($v_header['stored_filename']) &gt; strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+                      &amp;&amp; (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+                      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The directory is in the file path&quot;);
+                      $v_extract = true;
+                  }
+              }
+              // ----- Look for a filename
+              elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The file is the right one.&quot;);
+                  $v_extract = true;
+              }
+          }
+      }
+
+      // ----- Look for extract by ereg rule
+      else if (   (isset($p_options[PCLZIP_OPT_BY_EREG]))
+               &amp;&amp; ($p_options[PCLZIP_OPT_BY_EREG] != &quot;&quot;)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract by ereg '&quot;.$p_options[PCLZIP_OPT_BY_EREG].&quot;'&quot;);
+
+          if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename match the regular expression&quot;);
+              $v_extract = true;
+          }
+      }
+
+      // ----- Look for extract by preg rule
+      else if (   (isset($p_options[PCLZIP_OPT_BY_PREG]))
+               &amp;&amp; ($p_options[PCLZIP_OPT_BY_PREG] != &quot;&quot;)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByEreg'&quot;);
+
+          if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename match the regular expression&quot;);
+              $v_extract = true;
+          }
+      }
+
+      // ----- Look for extract by index rule
+      else if (   (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+               &amp;&amp; ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByIndex'&quot;);
+          
+          // ----- Look if the index is in the list
+          for ($j=$j_start; ($j&lt;sizeof($p_options[PCLZIP_OPT_BY_INDEX])) &amp;&amp; (!$v_extract); $j++) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Look if index '$i' is in [&quot;.$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].&quot;,&quot;.$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'].&quot;]&quot;);
+
+              if (($i&gt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) &amp;&amp; ($i&lt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Found as part of an index range&quot;);
+                  $v_extract = true;
+              }
+              if ($i&gt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Do not look this index range for next loop&quot;);
+                  $j_start = $j+1;
+              }
+
+              if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']&gt;$i) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Index range is greater than index, stop loop&quot;);
+                  break;
+              }
+          }
+      }
+
+      // ----- Look for no rule, which means extract all the archive
+      else {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with no rule (extract all)&quot;);
+          $v_extract = true;
+      }
+
+	  // ----- Check compression method
+	  if (   ($v_extract)
+	      &amp;&amp; (   ($v_header['compression'] != 8)
+		      &amp;&amp; ($v_header['compression'] != 0))) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unsupported compression method (&quot;.$v_header['compression'].&quot;)&quot;);
+          $v_header['status'] = 'unsupported_compression';
+
+          // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+          if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+		      &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
+
+              $this-&gt;privSwapBackMagicQuotes();
+              
+              PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
+			                       &quot;Filename '&quot;.$v_header['stored_filename'].&quot;' is &quot;
+				  	    	  	   .&quot;compressed by an unsupported compression &quot;
+				  	    	  	   .&quot;method (&quot;.$v_header['compression'].&quot;) &quot;);
+
+              //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+              return PclZip::errorCode();
+		  }
+	  }
+	  
+	  // ----- Check encrypted files
+	  if (($v_extract) &amp;&amp; (($v_header['flag'] &amp; 1) == 1)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unsupported file encryption&quot;);
+          $v_header['status'] = 'unsupported_encryption';
+
+          // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+          if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+		      &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
+
+              $this-&gt;privSwapBackMagicQuotes();
+
+              PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
+			                       &quot;Unsupported encryption for &quot;
+				  	    	  	   .&quot; filename '&quot;.$v_header['stored_filename']
+								   .&quot;'&quot;);
+
+              //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+              return PclZip::errorCode();
+		  }
+    }
+
+      // ----- Look for real extraction
+      if (($v_extract) &amp;&amp; ($v_header['status'] != 'ok')) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;No need for extract&quot;);
+          $v_result = $this-&gt;privConvertHeader2FileInfo($v_header,
+		                                        $p_file_list[$v_nb_extracted++]);
+          if ($v_result != 1) {
+              $this-&gt;privCloseFd();
+              $this-&gt;privSwapBackMagicQuotes();
+              //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+              return $v_result;
+          }
+
+          $v_extract = false;
+      }
+      
+      // ----- Look for real extraction
+      if ($v_extract)
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting file '&quot;.$v_header['filename'].&quot;', index '$i'&quot;);
+
+        // ----- Go to the file position
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position before rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+        @rewind($this-&gt;zip_fd);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+        if (@fseek($this-&gt;zip_fd, $v_header['offset']))
+        {
+          // ----- Close the zip file
+          $this-&gt;privCloseFd();
+
+          $this-&gt;privSwapBackMagicQuotes();
+
+          // ----- Error log
+          PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+          // ----- Return
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+          return PclZip::errorCode();
+        }
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after fseek : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+
+        // ----- Look for extraction as string
+        if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
+
+          // ----- Extracting the file
+          $v_result1 = $this-&gt;privExtractFileAsString($v_header, $v_string);
+          if ($v_result1 &lt; 1) {
+            $this-&gt;privCloseFd();
+            $this-&gt;privSwapBackMagicQuotes();
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+            return $v_result1;
+          }
+
+          // ----- Get the only interesting attributes
+          if (($v_result = $this-&gt;privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
+          {
+            // ----- Close the zip file
+            $this-&gt;privCloseFd();
+            $this-&gt;privSwapBackMagicQuotes();
+
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+          }
+
+          // ----- Set the file content
+          $p_file_list[$v_nb_extracted]['content'] = $v_string;
+
+          // ----- Next extracted file
+          $v_nb_extracted++;
+          
+          // ----- Look for user callback abort
+          if ($v_result1 == 2) {
+          	break;
+          }
+        }
+        // ----- Look for extraction in standard output
+        elseif (   (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
+		        &amp;&amp; ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
+          // ----- Extracting the file in standard output
+          $v_result1 = $this-&gt;privExtractFileInOutput($v_header, $p_options);
+          if ($v_result1 &lt; 1) {
+            $this-&gt;privCloseFd();
+            $this-&gt;privSwapBackMagicQuotes();
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+            return $v_result1;
+          }
+
+          // ----- Get the only interesting attributes
+          if (($v_result = $this-&gt;privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
+            $this-&gt;privCloseFd();
+            $this-&gt;privSwapBackMagicQuotes();
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+          }
+
+          // ----- Look for user callback abort
+          if ($v_result1 == 2) {
+          	break;
+          }
+        }
+        // ----- Look for normal extraction
+        else {
+          // ----- Extracting the file
+          $v_result1 = $this-&gt;privExtractFile($v_header,
+		                                      $p_path, $p_remove_path,
+											  $p_remove_all_path,
+											  $p_options);
+          if ($v_result1 &lt; 1) {
+            $this-&gt;privCloseFd();
+            $this-&gt;privSwapBackMagicQuotes();
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+            return $v_result1;
+          }
+
+          // ----- Get the only interesting attributes
+          if (($v_result = $this-&gt;privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
+          {
+            // ----- Close the zip file
+            $this-&gt;privCloseFd();
+            $this-&gt;privSwapBackMagicQuotes();
+
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+          }
+
+          // ----- Look for user callback abort
+          if ($v_result1 == 2) {
+          	break;
+          }
+        }
+      }
+    }
+
+    // ----- Close the zip file
+    $this-&gt;privCloseFd();
+    $this-&gt;privSwapBackMagicQuotes();
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractFile()
+  // Description :
+  // Parameters :
+  // Return Values :
+  //
+  // 1 : ... ?
+  // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback
+  // --------------------------------------------------------------------------------
+  function privExtractFile(&amp;$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFile', &quot;path='$p_path', remove_path='$p_remove_path', remove_all_path='&quot;.($p_remove_all_path?'true':'false').&quot;'&quot;);
+    $v_result=1;
+
+    // ----- Read the file header
+    if (($v_result = $this-&gt;privReadFileHeader($v_header)) != 1)
+    {
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Found file '&quot;.$v_header['filename'].&quot;', size '&quot;.$v_header['size'].&quot;'&quot;);
+
+    // ----- Check that the file header is coherent with $p_entry info
+    if ($this-&gt;privCheckFileHeaders($v_header, $p_entry) != 1) {
+        // TBC
+    }
+
+    // ----- Look for all path to remove
+    if ($p_remove_all_path == true) {
+        // ----- Look for folder entry that not need to be extracted
+        if (($p_entry['external']&amp;0x00000010)==0x00000010) {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The entry is a folder : need to be filtered&quot;);
+
+            $p_entry['status'] = &quot;filtered&quot;;
+
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+        }
+
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;All path is removed&quot;);
+        // ----- Get the basename of the path
+        $p_entry['filename'] = basename($p_entry['filename']);
+    }
+
+    // ----- Look for path to remove
+    else if ($p_remove_path != &quot;&quot;)
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Look for some path to remove&quot;);
+      if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The folder is the same as the removed path '&quot;.$p_entry['filename'].&quot;'&quot;);
+
+        // ----- Change the file status
+        $p_entry['status'] = &quot;filtered&quot;;
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+        return $v_result;
+      }
+
+      $p_remove_path_size = strlen($p_remove_path);
+      if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Found path '$p_remove_path' to remove in file '&quot;.$p_entry['filename'].&quot;'&quot;);
+
+        // ----- Remove the path
+        $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
+
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Resulting file is '&quot;.$p_entry['filename'].&quot;'&quot;);
+      }
+    }
+
+    // ----- Add the path
+    if ($p_path != '') {
+      $p_entry['filename'] = $p_path.&quot;/&quot;.$p_entry['filename'];
+    }
+    
+    // ----- Check a base_dir_restriction
+    if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Check the extract directory restriction&quot;);
+      $v_inclusion
+      = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
+                                $p_entry['filename']); 
+      if ($v_inclusion == 0) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_EXTRACT_DIR_RESTRICTION is selected, file is outside restriction&quot;);
+
+        PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
+			                     &quot;Filename '&quot;.$p_entry['filename'].&quot;' is &quot;
+								 .&quot;outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION&quot;);
+
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+    }
+
+    // ----- Look for pre-extract callback
+    if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A pre-callback '&quot;.$p_options[PCLZIP_CB_PRE_EXTRACT].&quot;()') is defined for the extraction&quot;);
+
+      // ----- Generate a local information
+      $v_local_header = array();
+      $this-&gt;privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+      // ----- Call the callback
+      // Here I do not use call_user_func() because I need to send a reference to the
+      // header.
+      eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+      if ($v_result == 0) {
+        // ----- Change the file status
+        $p_entry['status'] = &quot;skipped&quot;;
+        $v_result = 1;
+      }
+      
+      // ----- Look for abort result
+      if ($v_result == 2) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;User callback abort the extraction&quot;);
+        // ----- This status is internal and will be changed in 'skipped'
+        $p_entry['status'] = &quot;aborted&quot;;
+      	$v_result = PCLZIP_ERR_USER_ABORTED;
+      }
+
+      // ----- Update the informations
+      // Only some fields can be modified
+      $p_entry['filename'] = $v_local_header['filename'];
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;New filename is '&quot;.$p_entry['filename'].&quot;'&quot;);
+    }
+
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting file (with path) '&quot;.$p_entry['filename'].&quot;', size '$v_header[size]'&quot;);
+
+    // ----- Look if extraction should be done
+    if ($p_entry['status'] == 'ok') {
+
+    // ----- Look for specific actions while the file exist
+    if (file_exists($p_entry['filename']))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$p_entry['filename'].&quot;' already exists&quot;);
+
+      // ----- Look if file is a directory
+      if (is_dir($p_entry['filename']))
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Existing file '&quot;.$p_entry['filename'].&quot;' is a directory&quot;);
+
+        // ----- Change the file status
+        $p_entry['status'] = &quot;already_a_directory&quot;;
+        
+        // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+        // For historical reason first PclZip implementation does not stop
+        // when this kind of error occurs.
+        if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+		    &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
+
+            PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
+			                     &quot;Filename '&quot;.$p_entry['filename'].&quot;' is &quot;
+								 .&quot;already used by an existing directory&quot;);
+
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+		}
+      }
+      // ----- Look if file is write protected
+      else if (!is_writeable($p_entry['filename']))
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Existing file '&quot;.$p_entry['filename'].&quot;' is write protected&quot;);
+
+        // ----- Change the file status
+        $p_entry['status'] = &quot;write_protected&quot;;
+
+        // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+        // For historical reason first PclZip implementation does not stop
+        // when this kind of error occurs.
+        if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+		    &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
+
+            PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+			                     &quot;Filename '&quot;.$p_entry['filename'].&quot;' exists &quot;
+								 .&quot;and is write protected&quot;);
+
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+            return PclZip::errorCode();
+		}
+      }
+
+      // ----- Look if the extracted file is older
+      else if (filemtime($p_entry['filename']) &gt; $p_entry['mtime'])
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Existing file '&quot;.$p_entry['filename'].&quot;' is newer (&quot;.date(&quot;l dS of F Y h:i:s A&quot;, filemtime($p_entry['filename'])).&quot;) than the extracted file (&quot;.date(&quot;l dS of F Y h:i:s A&quot;, $p_entry['mtime']).&quot;)&quot;);
+        // ----- Change the file status
+        if (   (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
+		    &amp;&amp; ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_REPLACE_NEWER is selected, file will be replaced&quot;);
+		}
+		else {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File will not be replaced&quot;);
+            $p_entry['status'] = &quot;newer_exist&quot;;
+
+            // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+            // For historical reason first PclZip implementation does not stop
+            // when this kind of error occurs.
+            if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+		        &amp;&amp; ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+                //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped&quot;);
+
+                PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+			             &quot;Newer version of '&quot;.$p_entry['filename'].&quot;' exists &quot;
+					    .&quot;and option PCLZIP_OPT_REPLACE_NEWER is not selected&quot;);
+
+                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+                return PclZip::errorCode();
+		    }
+		}
+      }
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Existing file '&quot;.$p_entry['filename'].&quot;' is older than the extrated one - will be replaced by the extracted one (&quot;.date(&quot;l dS of F Y h:i:s A&quot;, filemtime($p_entry['filename'])).&quot;) than the extracted file (&quot;.date(&quot;l dS of F Y h:i:s A&quot;, $p_entry['mtime']).&quot;)&quot;);
+      }
+    }
+
+    // ----- Check the directory availability and create it if necessary
+    else {
+      if ((($p_entry['external']&amp;0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
+        $v_dir_to_check = $p_entry['filename'];
+      else if (!strstr($p_entry['filename'], &quot;/&quot;))
+        $v_dir_to_check = &quot;&quot;;
+      else
+        $v_dir_to_check = dirname($p_entry['filename']);
+
+      if (($v_result = $this-&gt;privDirCheck($v_dir_to_check, (($p_entry['external']&amp;0x00000010)==0x00000010))) != 1) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unable to create path for '&quot;.$p_entry['filename'].&quot;'&quot;);
+
+        // ----- Change the file status
+        $p_entry['status'] = &quot;path_creation_fail&quot;;
+
+        // ----- Return
+        ////--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+        //return $v_result;
+        $v_result = 1;
+      }
+    }
+    }
+
+    // ----- Look if extraction should be done
+    if ($p_entry['status'] == 'ok') {
+
+      // ----- Do the extraction (if not a folder)
+      if (!(($p_entry['external']&amp;0x00000010)==0x00000010))
+      {
+        // ----- Look for not compressed file
+        if ($p_entry['compression'] == 0) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting an un-compressed file&quot;);
+
+		  // ----- Opening destination file
+          if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
+          {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Error while opening '&quot;.$p_entry['filename'].&quot;' in write binary mode&quot;);
+
+            // ----- Change the file status
+            $p_entry['status'] = &quot;write_error&quot;;
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+          }
+
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Read '&quot;.$p_entry['size'].&quot;' bytes&quot;);
+
+          // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+          $v_size = $p_entry['compressed_size'];
+          while ($v_size != 0)
+          {
+            $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Read $v_read_size bytes&quot;);
+            $v_buffer = @fread($this-&gt;zip_fd, $v_read_size);
+            /* Try to speed up the code
+            $v_binary_data = pack('a'.$v_read_size, $v_buffer);
+            @fwrite($v_dest_file, $v_binary_data, $v_read_size);
+            */
+            @fwrite($v_dest_file, $v_buffer, $v_read_size);            
+            $v_size -= $v_read_size;
+          }
+
+          // ----- Closing the destination file
+          fclose($v_dest_file);
+
+          // ----- Change the file mtime
+          touch($p_entry['filename'], $p_entry['mtime']);
+          
+
+        }
+        else {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting a compressed file (Compression method &quot;.$p_entry['compression'].&quot;)&quot;);
+          // ----- TBC
+          // Need to be finished
+          if (($p_entry['flag'] &amp; 1) == 1) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File is encrypted&quot;);
+            /*
+              // ----- Read the encryption header
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Read 12 encryption header bytes&quot;);
+              $v_encryption_header = @fread($this-&gt;zip_fd, 12);
+              
+              // ----- Read the encrypted &amp; compressed file in a buffer
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Read '&quot;.($p_entry['compressed_size']-12).&quot;' compressed &amp; encrypted bytes&quot;);
+              $v_buffer = @fread($this-&gt;zip_fd, $p_entry['compressed_size']-12);
+              
+              // ----- Decrypt the buffer
+              $this-&gt;privDecrypt($v_encryption_header, $v_buffer,
+			                     $p_entry['compressed_size']-12, $p_entry['crc']);
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Buffer is '&quot;.$v_buffer.&quot;'&quot;);
+              */
+          }
+          else {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Read '&quot;.$p_entry['compressed_size'].&quot;' compressed bytes&quot;);
+              // ----- Read the compressed file in a buffer (one shot)
+              $v_buffer = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
+          }
+          
+          // ----- Decompress the file
+          $v_file_content = @gzinflate($v_buffer);
+          unset($v_buffer);
+          if ($v_file_content === FALSE) {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unable to inflate compressed file&quot;);
+
+            // ----- Change the file status
+            // TBC
+            $p_entry['status'] = &quot;error&quot;;
+            
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+          }
+          
+          // ----- Opening destination file
+          if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Error while opening '&quot;.$p_entry['filename'].&quot;' in write binary mode&quot;);
+
+            // ----- Change the file status
+            $p_entry['status'] = &quot;write_error&quot;;
+
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+          }
+
+          // ----- Write the uncompressed data
+          @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
+          unset($v_file_content);
+
+          // ----- Closing the destination file
+          @fclose($v_dest_file);
+
+          // ----- Change the file mtime
+          @touch($p_entry['filename'], $p_entry['mtime']);
+        }
+
+        // ----- Look for chmod option
+        if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;chmod option activated '&quot;.$p_options[PCLZIP_OPT_SET_CHMOD].&quot;'&quot;);
+
+          // ----- Change the mode of the file
+          @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
+        }
+
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extraction done&quot;);
+      }
+    }
+
+	// ----- Change abort status
+	if ($p_entry['status'] == &quot;aborted&quot;) {
+      $p_entry['status'] = &quot;skipped&quot;;
+	}
+	
+    // ----- Look for post-extract callback
+    elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A post-callback '&quot;.$p_options[PCLZIP_CB_POST_EXTRACT].&quot;()') is defined for the extraction&quot;);
+
+      // ----- Generate a local information
+      $v_local_header = array();
+      $this-&gt;privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+      // ----- Call the callback
+      // Here I do not use call_user_func() because I need to send a reference to the
+      // header.
+      eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+
+      // ----- Look for abort result
+      if ($v_result == 2) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;User callback abort the extraction&quot;);
+      	$v_result = PCLZIP_ERR_USER_ABORTED;
+      }
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractFileInOutput()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privExtractFileInOutput(&amp;$p_entry, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileInOutput', &quot;&quot;);
+    $v_result=1;
+
+    // ----- Read the file header
+    if (($v_result = $this-&gt;privReadFileHeader($v_header)) != 1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Found file '&quot;.$v_header['filename'].&quot;', size '&quot;.$v_header['size'].&quot;'&quot;);
+
+    // ----- Check that the file header is coherent with $p_entry info
+    if ($this-&gt;privCheckFileHeaders($v_header, $p_entry) != 1) {
+        // TBC
+    }
+
+    // ----- Look for pre-extract callback
+    if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A pre-callback '&quot;.$p_options[PCLZIP_CB_PRE_EXTRACT].&quot;()') is defined for the extraction&quot;);
+
+      // ----- Generate a local information
+      $v_local_header = array();
+      $this-&gt;privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+      // ----- Call the callback
+      // Here I do not use call_user_func() because I need to send a reference to the
+      // header.
+      eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+      if ($v_result == 0) {
+        // ----- Change the file status
+        $p_entry['status'] = &quot;skipped&quot;;
+        $v_result = 1;
+      }
+
+      // ----- Look for abort result
+      if ($v_result == 2) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;User callback abort the extraction&quot;);
+        // ----- This status is internal and will be changed in 'skipped'
+        $p_entry['status'] = &quot;aborted&quot;;
+      	$v_result = PCLZIP_ERR_USER_ABORTED;
+      }
+
+      // ----- Update the informations
+      // Only some fields can be modified
+      $p_entry['filename'] = $v_local_header['filename'];
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;New filename is '&quot;.$p_entry['filename'].&quot;'&quot;);
+    }
+
+    // ----- Trace
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting file (with path) '&quot;.$p_entry['filename'].&quot;', size '$v_header[size]'&quot;);
+
+    // ----- Look if extraction should be done
+    if ($p_entry['status'] == 'ok') {
+
+      // ----- Do the extraction (if not a folder)
+      if (!(($p_entry['external']&amp;0x00000010)==0x00000010)) {
+        // ----- Look for not compressed file
+        if ($p_entry['compressed_size'] == $p_entry['size']) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting an un-compressed file&quot;);
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Reading '&quot;.$p_entry['size'].&quot;' bytes&quot;);
+
+          // ----- Read the file in a buffer (one shot)
+          $v_buffer = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
+
+          // ----- Send the file to the output
+          echo $v_buffer;
+          unset($v_buffer);
+        }
+        else {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting a compressed file&quot;);
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Reading '&quot;.$p_entry['size'].&quot;' bytes&quot;);
+
+          // ----- Read the compressed file in a buffer (one shot)
+          $v_buffer = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
+          
+          // ----- Decompress the file
+          $v_file_content = gzinflate($v_buffer);
+          unset($v_buffer);
+
+          // ----- Send the file to the output
+          echo $v_file_content;
+          unset($v_file_content);
+        }
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extraction done&quot;);
+      }
+    }
+
+	// ----- Change abort status
+	if ($p_entry['status'] == &quot;aborted&quot;) {
+      $p_entry['status'] = &quot;skipped&quot;;
+	}
+
+    // ----- Look for post-extract callback
+    elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;A post-callback '&quot;.$p_options[PCLZIP_CB_POST_EXTRACT].&quot;()') is defined for the extraction&quot;);
+
+      // ----- Generate a local information
+      $v_local_header = array();
+      $this-&gt;privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+      // ----- Call the callback
+      // Here I do not use call_user_func() because I need to send a reference to the
+      // header.
+      eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+
+      // ----- Look for abort result
+      if ($v_result == 2) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;User callback abort the extraction&quot;);
+      	$v_result = PCLZIP_ERR_USER_ABORTED;
+      }
+    }
+
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privExtractFileAsString()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privExtractFileAsString(&amp;$p_entry, &amp;$p_string)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileAsString', &quot;p_entry['filename']='&quot;.$p_entry['filename'].&quot;'&quot;);
+    $v_result=1;
+
+    // ----- Read the file header
+    $v_header = array();
+    if (($v_result = $this-&gt;privReadFileHeader($v_header)) != 1)
+    {
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Found file '&quot;.$v_header['filename'].&quot;', size '&quot;.$v_header['size'].&quot;'&quot;);
+
+    // ----- Check that the file header is coherent with $p_entry info
+    if ($this-&gt;privCheckFileHeaders($v_header, $p_entry) != 1) {
+        // TBC
+    }
+
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting file in string (with path) '&quot;.$p_entry['filename'].&quot;', size '$v_header[size]'&quot;);
+
+    // ----- Do the extraction (if not a folder)
+    if (!(($p_entry['external']&amp;0x00000010)==0x00000010))
+    {
+      // ----- Look for not compressed file
+//      if ($p_entry['compressed_size'] == $p_entry['size'])
+      if ($p_entry['compression'] == 0) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting an un-compressed file&quot;);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Reading '&quot;.$p_entry['size'].&quot;' bytes&quot;);
+
+        // ----- Reading the file
+        $p_string = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
+      }
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extracting a compressed file (compression method '&quot;.$p_entry['compression'].&quot;')&quot;);
+
+        // ----- Reading the file
+        $v_data = @fread($this-&gt;zip_fd, $p_entry['compressed_size']);
+        
+        // ----- Decompress the file
+        if (($p_string = @gzinflate($v_data)) === FALSE) {
+            // TBC
+        }
+      }
+
+      // ----- Trace
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Extraction done&quot;);
+    }
+    else {
+        // TBC : error : can not extract a folder in a string
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privReadFileHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privReadFileHeader(&amp;$p_header)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privReadFileHeader&quot;, &quot;&quot;);
+    $v_result=1;
+
+    // ----- Read the 4 bytes signature
+    $v_binary_data = @fread($this-&gt;zip_fd, 4);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary data is : '&quot;.sprintf(&quot;%08x&quot;, $v_binary_data).&quot;'&quot;);
+    $v_data = unpack('Vid', $v_binary_data);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary signature is : '&quot;.sprintf(&quot;0x%08x&quot;, $v_data['id']).&quot;'&quot;);
+
+    // ----- Check signature
+    if ($v_data['id'] != 0x04034b50)
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Invalid File header&quot;);
+
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Read the first 42 bytes of the header
+    $v_binary_data = fread($this-&gt;zip_fd, 26);
+
+    // ----- Look for invalid block size
+    if (strlen($v_binary_data) != 26)
+    {
+      $p_header['filename'] = &quot;&quot;;
+      $p_header['status'] = &quot;invalid_header&quot;;
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Invalid block size : &quot;.strlen($v_binary_data));
+
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, &quot;Invalid block size : &quot;.strlen($v_binary_data));
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Extract the values
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Header : '&quot;.$v_binary_data.&quot;'&quot;);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Header (Hex) : '&quot;.bin2hex($v_binary_data).&quot;'&quot;);
+    $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
+
+    // ----- Get filename
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;File name length : &quot;.$v_data['filename_len']);
+    $p_header['filename'] = fread($this-&gt;zip_fd, $v_data['filename_len']);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename : \''.$p_header['filename'].'\'');
+
+    // ----- Get extra_fields
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extra field length : &quot;.$v_data['extra_len']);
+    if ($v_data['extra_len'] != 0) {
+      $p_header['extra'] = fread($this-&gt;zip_fd, $v_data['extra_len']);
+    }
+    else {
+      $p_header['extra'] = '';
+    }
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Extra field : \''.bin2hex($p_header['extra']).'\'');
+
+    // ----- Extract properties
+    $p_header['version_extracted'] = $v_data['version'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : ('.$p_header['version_extracted'].') \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
+    $p_header['compression'] = $v_data['compression'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compression method : \''.$p_header['compression'].'\'');
+    $p_header['size'] = $v_data['size'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_header['size'].'\'');
+    $p_header['compressed_size'] = $v_data['compressed_size'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
+    $p_header['crc'] = $v_data['crc'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf(&quot;0x%X&quot;, $p_header['crc']).'\'');
+    $p_header['flag'] = $v_data['flag'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Flag : \''.$p_header['flag'].'\'');
+    $p_header['filename_len'] = $v_data['filename_len'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename_len : \''.$p_header['filename_len'].'\'');
+
+    // ----- Recuperate date in UNIX format
+    $p_header['mdate'] = $v_data['mdate'];
+    $p_header['mtime'] = $v_data['mtime'];
+    if ($p_header['mdate'] &amp;&amp; $p_header['mtime'])
+    {
+      // ----- Extract time
+      $v_hour = ($p_header['mtime'] &amp; 0xF800) &gt;&gt; 11;
+      $v_minute = ($p_header['mtime'] &amp; 0x07E0) &gt;&gt; 5;
+      $v_seconde = ($p_header['mtime'] &amp; 0x001F)*2;
+
+      // ----- Extract date
+      $v_year = (($p_header['mdate'] &amp; 0xFE00) &gt;&gt; 9) + 1980;
+      $v_month = ($p_header['mdate'] &amp; 0x01E0) &gt;&gt; 5;
+      $v_day = $p_header['mdate'] &amp; 0x001F;
+
+      // ----- Get UNIX date format
+      $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
+    }
+    else
+    {
+      $p_header['mtime'] = time();
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date is actual : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
+    }
+
+    // TBC
+    //for(reset($v_data); $key = key($v_data); next($v_data)) {
+    //  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Attribut[$key] = &quot;.$v_data[$key]);
+    //}
+
+    // ----- Set the stored filename
+    $p_header['stored_filename'] = $p_header['filename'];
+
+    // ----- Set the status field
+    $p_header['status'] = &quot;ok&quot;;
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privReadCentralFileHeader()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privReadCentralFileHeader(&amp;$p_header)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privReadCentralFileHeader&quot;, &quot;&quot;);
+    $v_result=1;
+
+    // ----- Read the 4 bytes signature
+    $v_binary_data = @fread($this-&gt;zip_fd, 4);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary data is : '&quot;.sprintf(&quot;%08x&quot;, $v_binary_data).&quot;'&quot;);
+    $v_data = unpack('Vid', $v_binary_data);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary signature is : '&quot;.sprintf(&quot;0x%08x&quot;, $v_data['id']).&quot;'&quot;);
+
+    // ----- Check signature
+    if ($v_data['id'] != 0x02014b50)
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Invalid Central Dir File signature&quot;);
+
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Read the first 42 bytes of the header
+    $v_binary_data = fread($this-&gt;zip_fd, 42);
+
+    // ----- Look for invalid block size
+    if (strlen($v_binary_data) != 42)
+    {
+      $p_header['filename'] = &quot;&quot;;
+      $p_header['status'] = &quot;invalid_header&quot;;
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Invalid block size : &quot;.strlen($v_binary_data));
+
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, &quot;Invalid block size : &quot;.strlen($v_binary_data));
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Extract the values
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Header : '&quot;.$v_binary_data.&quot;'&quot;);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Header (Hex) : '&quot;.bin2hex($v_binary_data).&quot;'&quot;);
+    $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
+
+    // ----- Get filename
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;File name length : &quot;.$p_header['filename_len']);
+    if ($p_header['filename_len'] != 0)
+      $p_header['filename'] = fread($this-&gt;zip_fd, $p_header['filename_len']);
+    else
+      $p_header['filename'] = '';
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Filename : \''.$p_header['filename'].'\'');
+
+    // ----- Get extra
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Extra length : &quot;.$p_header['extra_len']);
+    if ($p_header['extra_len'] != 0)
+      $p_header['extra'] = fread($this-&gt;zip_fd, $p_header['extra_len']);
+    else
+      $p_header['extra'] = '';
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Extra : \''.$p_header['extra'].'\'');
+
+    // ----- Get comment
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Comment length : &quot;.$p_header['comment_len']);
+    if ($p_header['comment_len'] != 0)
+      $p_header['comment'] = fread($this-&gt;zip_fd, $p_header['comment_len']);
+    else
+      $p_header['comment'] = '';
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Comment : \''.$p_header['comment'].'\'');
+
+    // ----- Extract properties
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version : \''.($p_header['version']/10).'.'.($p_header['version']%10).'\'');
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Size : \''.$p_header['size'].'\'');
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'CRC : \''.sprintf(&quot;0x%X&quot;, $p_header['crc']).'\'');
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Flag : \''.$p_header['flag'].'\'');
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Offset : \''.$p_header['offset'].'\'');
+
+    // ----- Recuperate date in UNIX format
+    if ($p_header['mdate'] &amp;&amp; $p_header['mtime'])
+    {
+      // ----- Extract time
+      $v_hour = ($p_header['mtime'] &amp; 0xF800) &gt;&gt; 11;
+      $v_minute = ($p_header['mtime'] &amp; 0x07E0) &gt;&gt; 5;
+      $v_seconde = ($p_header['mtime'] &amp; 0x001F)*2;
+
+      // ----- Extract date
+      $v_year = (($p_header['mdate'] &amp; 0xFE00) &gt;&gt; 9) + 1980;
+      $v_month = ($p_header['mdate'] &amp; 0x01E0) &gt;&gt; 5;
+      $v_day = $p_header['mdate'] &amp; 0x001F;
+
+      // ----- Get UNIX date format
+      $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
+    }
+    else
+    {
+      $p_header['mtime'] = time();
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date is actual : \''.date(&quot;d/m/y H:i:s&quot;, $p_header['mtime']).'\'');
+    }
+
+    // ----- Set the stored filename
+    $p_header['stored_filename'] = $p_header['filename'];
+
+    // ----- Set default status to ok
+    $p_header['status'] = 'ok';
+
+    // ----- Look if it is a directory
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Internal (Hex) : '&quot;.sprintf(&quot;Ox%04X&quot;, $p_header['internal']).&quot;'&quot;);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;External (Hex) : '&quot;.sprintf(&quot;Ox%04X&quot;, $p_header['external']).&quot;' (&quot;.(($p_header['external']&amp;0x00000010)==0x00000010?'is a folder':'is a file').')');
+    if (substr($p_header['filename'], -1) == '/') {
+      //$p_header['external'] = 0x41FF0010;
+      $p_header['external'] = 0x00000010;
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Force folder external : \''.sprintf(&quot;Ox%04X&quot;, $p_header['external']).'\'');
+    }
+
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Header of filename : \''.$p_header['filename'].'\'');
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privCheckFileHeaders()
+  // Description :
+  // Parameters :
+  // Return Values :
+  //   1 on success,
+  //   0 on error;
+  // --------------------------------------------------------------------------------
+  function privCheckFileHeaders(&amp;$p_local_header, &amp;$p_central_header)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privCheckFileHeaders&quot;, &quot;&quot;);
+    $v_result=1;
+
+	// ----- Check the static values
+	// TBC
+	if ($p_local_header['filename'] != $p_central_header['filename']) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;filename&quot; : TBC To Be Completed');
+	}
+	if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;version_extracted&quot; : TBC To Be Completed');
+	}
+	if ($p_local_header['flag'] != $p_central_header['flag']) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;flag&quot; : TBC To Be Completed');
+	}
+	if ($p_local_header['compression'] != $p_central_header['compression']) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;compression&quot; : TBC To Be Completed');
+	}
+	if ($p_local_header['mtime'] != $p_central_header['mtime']) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;mtime&quot; : TBC To Be Completed');
+	}
+	if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check &quot;filename_len&quot; : TBC To Be Completed');
+	}
+
+	// ----- Look for flag bit 3
+	if (($p_local_header['flag'] &amp; 8) == 8) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Purpose bit flag bit 3 set !');
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'File size, compression size and crc found in central header');
+        $p_local_header['size'] = $p_central_header['size'];
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_local_header['size'].'\'');
+        $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_local_header['compressed_size'].'\'');
+        $p_local_header['crc'] = $p_central_header['crc'];
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf(&quot;0x%X&quot;, $p_local_header['crc']).'\'');
+	}
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privReadEndCentralDir()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privReadEndCentralDir(&amp;$p_central_dir)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privReadEndCentralDir&quot;, &quot;&quot;);
+    $v_result=1;
+
+    // ----- Go to the end of the zip file
+    $v_size = filesize($this-&gt;zipname);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Size of the file :$v_size&quot;);
+    @fseek($this-&gt;zip_fd, $v_size);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position at end of zip file : \''.ftell($this-&gt;zip_fd).'\'');
+    if (@ftell($this-&gt;zip_fd) != $v_size)
+    {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this-&gt;zipname.'\'');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- First try : look if this is an archive with no commentaries (most of the time)
+    // in this case the end of central dir is at 22 bytes of the file end
+    $v_found = 0;
+    if ($v_size &gt; 26) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Look for central dir with no comment');
+      @fseek($this-&gt;zip_fd, $v_size-22);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after min central position : \''.ftell($this-&gt;zip_fd).'\'');
+      if (($v_pos = @ftell($this-&gt;zip_fd)) != ($v_size-22))
+      {
+        // ----- Error log
+        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this-&gt;zipname.'\'');
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+
+      // ----- Read for bytes
+      $v_binary_data = @fread($this-&gt;zip_fd, 4);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Binary data is : '&quot;.sprintf(&quot;%08x&quot;, $v_binary_data).&quot;'&quot;);
+      $v_data = @unpack('Vid', $v_binary_data);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Binary signature is : '&quot;.sprintf(&quot;0x%08x&quot;, $v_data['id']).&quot;'&quot;);
+
+      // ----- Check signature
+      if ($v_data['id'] == 0x06054b50) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Found central dir at the default position.&quot;);
+        $v_found = 1;
+      }
+
+      $v_pos = ftell($this-&gt;zip_fd);
+    }
+
+    // ----- Go back to the maximum possible size of the Central Dir End Record
+    if (!$v_found) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Start extended search of end central dir');
+      $v_maximum_size = 65557; // 0xFFFF + 22;
+      if ($v_maximum_size &gt; $v_size)
+        $v_maximum_size = $v_size;
+      @fseek($this-&gt;zip_fd, $v_size-$v_maximum_size);
+      if (@ftell($this-&gt;zip_fd) != ($v_size-$v_maximum_size))
+      {
+        // ----- Error log
+        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this-&gt;zipname.'\'');
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after max central position : \''.ftell($this-&gt;zip_fd).'\'');
+
+      // ----- Read byte per byte in order to find the signature
+      $v_pos = ftell($this-&gt;zip_fd);
+      $v_bytes = 0x00000000;
+      while ($v_pos &lt; $v_size)
+      {
+        // ----- Read a byte
+        $v_byte = @fread($this-&gt;zip_fd, 1);
+
+        // -----  Add the byte
+        $v_bytes = ($v_bytes &lt;&lt; 8) | Ord($v_byte);
+
+        // ----- Compare the bytes
+        if ($v_bytes == 0x504b0506)
+        {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Found End Central Dir signature at position : \''.ftell($this-&gt;zip_fd).'\'');
+          $v_pos++;
+          break;
+        }
+
+        $v_pos++;
+      }
+
+      // ----- Look if not found end of central dir
+      if ($v_pos == $v_size)
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Unable to find End of Central Dir Record signature&quot;);
+
+        // ----- Error log
+        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, &quot;Unable to find End of Central Dir Record signature&quot;);
+
+        // ----- Return
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+        return PclZip::errorCode();
+      }
+    }
+
+    // ----- Read the first 18 bytes of the header
+    $v_binary_data = fread($this-&gt;zip_fd, 18);
+
+    // ----- Look for invalid block size
+    if (strlen($v_binary_data) != 18)
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;Invalid End of Central Dir Record size : &quot;.strlen($v_binary_data));
+
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, &quot;Invalid End of Central Dir Record size : &quot;.strlen($v_binary_data));
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Extract the values
+    ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Central Dir Record : '&quot;.$v_binary_data.&quot;'&quot;);
+    ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Central Dir Record (Hex) : '&quot;.bin2hex($v_binary_data).&quot;'&quot;);
+    $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
+
+    // ----- Check the global size
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Comment length : &quot;.$v_data['comment_size']);
+    if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;The central dir is not at the end of the archive. Some trailing bytes exists after the archive.&quot;);
+
+	  // ----- Removed in release 2.2 see readme file
+	  // The check of the file size is a little too strict.
+	  // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
+	  // While decrypted, zip has training 0 bytes
+	  if (0) {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
+	                       'The central dir is not at the end of the archive.'
+						   .' Some trailing bytes exists after the archive.');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+	  }
+    }
+
+    // ----- Get comment
+    if ($v_data['comment_size'] != 0)
+      $p_central_dir['comment'] = fread($this-&gt;zip_fd, $v_data['comment_size']);
+    else
+      $p_central_dir['comment'] = '';
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Comment : \''.$p_central_dir['comment'].'\'');
+
+    $p_central_dir['entries'] = $v_data['entries'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries : \''.$p_central_dir['entries'].'\'');
+    $p_central_dir['disk_entries'] = $v_data['disk_entries'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries for this disk : \''.$p_central_dir['disk_entries'].'\'');
+    $p_central_dir['offset'] = $v_data['offset'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Offset of Central Dir : \''.$p_central_dir['offset'].'\'');
+    $p_central_dir['size'] = $v_data['size'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size of Central Dir : \''.$p_central_dir['size'].'\'');
+    $p_central_dir['disk'] = $v_data['disk'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Disk number : \''.$p_central_dir['disk'].'\'');
+    $p_central_dir['disk_start'] = $v_data['disk_start'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Start disk number : \''.$p_central_dir['disk_start'].'\'');
+
+    // TBC
+    //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) {
+    //  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;central_dir[$key] = &quot;.$p_central_dir[$key]);
+    //}
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDeleteByRule()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privDeleteByRule(&amp;$p_result_list, &amp;$p_options)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privDeleteByRule&quot;, &quot;&quot;);
+    $v_result=1;
+    $v_list_detail = array();
+
+    // ----- Open the zip file
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($v_result=$this-&gt;privOpenFd('rb')) != 1)
+    {
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Read the central directory informations
+    $v_central_dir = array();
+    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
+    {
+      $this-&gt;privCloseFd();
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Go to beginning of File
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+    @rewind($this-&gt;zip_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in file : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+
+    // ----- Scan all the files
+    // ----- Start at beginning of Central Dir
+    $v_pos_entry = $v_central_dir['offset'];
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position before rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+    @rewind($this-&gt;zip_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+    if (@fseek($this-&gt;zip_fd, $v_pos_entry))
+    {
+      // ----- Close the zip file
+      $this-&gt;privCloseFd();
+
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after fseek : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+
+    // ----- Read each entry
+    $v_header_list = array();
+    $j_start = 0;
+    for ($i=0, $v_nb_extracted=0; $i&lt;$v_central_dir['entries']; $i++)
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Read next file header entry (index '$i')&quot;);
+
+      // ----- Read the file header
+      $v_header_list[$v_nb_extracted] = array();
+      if (($v_result = $this-&gt;privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
+      {
+        // ----- Close the zip file
+        $this-&gt;privCloseFd();
+
+        //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+        return $v_result;
+      }
+
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename (index '$i') : '&quot;.$v_header_list[$v_nb_extracted]['stored_filename'].&quot;'&quot;);
+
+      // ----- Store the index
+      $v_header_list[$v_nb_extracted]['index'] = $i;
+
+      // ----- Look for the specific extract rules
+      $v_found = false;
+
+      // ----- Look for extract by name rule
+      if (   (isset($p_options[PCLZIP_OPT_BY_NAME]))
+          &amp;&amp; ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByName'&quot;);
+
+          // ----- Look if the filename is in the list
+          for ($j=0; ($j&lt;sizeof($p_options[PCLZIP_OPT_BY_NAME])) &amp;&amp; (!$v_found); $j++) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Compare with file '&quot;.$p_options[PCLZIP_OPT_BY_NAME][$j].&quot;'&quot;);
+
+              // ----- Look for a directory
+              if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == &quot;/&quot;) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The searched item is a directory&quot;);
+
+                  // ----- Look if the directory is in the filename path
+                  if (   (strlen($v_header_list[$v_nb_extracted]['stored_filename']) &gt; strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+                      &amp;&amp; (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+                      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The directory is in the file path&quot;);
+                      $v_found = true;
+                  }
+                  elseif (   (($v_header_list[$v_nb_extracted]['external']&amp;0x00000010)==0x00000010) /* Indicates a folder */
+                          &amp;&amp; ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+                      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The entry is the searched directory&quot;);
+                      $v_found = true;
+                  }
+              }
+              // ----- Look for a filename
+              elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;The file is the right one.&quot;);
+                  $v_found = true;
+              }
+          }
+      }
+
+      // ----- Look for extract by ereg rule
+      else if (   (isset($p_options[PCLZIP_OPT_BY_EREG]))
+               &amp;&amp; ($p_options[PCLZIP_OPT_BY_EREG] != &quot;&quot;)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract by ereg '&quot;.$p_options[PCLZIP_OPT_BY_EREG].&quot;'&quot;);
+
+          if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename match the regular expression&quot;);
+              $v_found = true;
+          }
+      }
+
+      // ----- Look for extract by preg rule
+      else if (   (isset($p_options[PCLZIP_OPT_BY_PREG]))
+               &amp;&amp; ($p_options[PCLZIP_OPT_BY_PREG] != &quot;&quot;)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByEreg'&quot;);
+
+          if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Filename match the regular expression&quot;);
+              $v_found = true;
+          }
+      }
+
+      // ----- Look for extract by index rule
+      else if (   (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+               &amp;&amp; ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Extract with rule 'ByIndex'&quot;);
+
+          // ----- Look if the index is in the list
+          for ($j=$j_start; ($j&lt;sizeof($p_options[PCLZIP_OPT_BY_INDEX])) &amp;&amp; (!$v_found); $j++) {
+              //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Look if index '$i' is in [&quot;.$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].&quot;,&quot;.$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'].&quot;]&quot;);
+
+              if (($i&gt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) &amp;&amp; ($i&lt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Found as part of an index range&quot;);
+                  $v_found = true;
+              }
+              if ($i&gt;=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Do not look this index range for next loop&quot;);
+                  $j_start = $j+1;
+              }
+
+              if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']&gt;$i) {
+                  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Index range is greater than index, stop loop&quot;);
+                  break;
+              }
+          }
+      }
+      else {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;No argument mean remove all file&quot;);
+      	$v_found = true;
+      }
+
+      // ----- Look for deletion
+      if ($v_found)
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$v_header_list[$v_nb_extracted]['stored_filename'].&quot;', index '$i' need to be deleted&quot;);
+        unset($v_header_list[$v_nb_extracted]);
+      }
+      else
+      {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, &quot;File '&quot;.$v_header_list[$v_nb_extracted]['stored_filename'].&quot;', index '$i' will not be deleted&quot;);
+        $v_nb_extracted++;
+      }
+    }
+
+    // ----- Look if something need to be deleted
+    if ($v_nb_extracted &gt; 0) {
+
+        // ----- Creates a temporay file
+        $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+        // ----- Creates a temporary zip archive
+        $v_temp_zip = new PclZip($v_zip_temp_name);
+
+        // ----- Open the temporary zip file in write mode
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary write mode&quot;);
+        if (($v_result = $v_temp_zip-&gt;privOpenFd('wb')) != 1) {
+            $this-&gt;privCloseFd();
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+        }
+
+        // ----- Look which file need to be kept
+        for ($i=0; $i&lt;sizeof($v_header_list); $i++) {
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Keep entry index '$i' : '&quot;.$v_header_list[$i]['filename'].&quot;'&quot;);
+
+            // ----- Calculate the position of the header
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Offset='&quot;. $v_header_list[$i]['offset'].&quot;'&quot;);
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position before rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+            @rewind($this-&gt;zip_fd);
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after rewind : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+            if (@fseek($this-&gt;zip_fd,  $v_header_list[$i]['offset'])) {
+                // ----- Close the zip file
+                $this-&gt;privCloseFd();
+                $v_temp_zip-&gt;privCloseFd();
+                @unlink($v_zip_temp_name);
+
+                // ----- Error log
+                PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+                // ----- Return
+                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+                return PclZip::errorCode();
+            }
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position after fseek : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+
+            // ----- Read the file header
+            $v_local_header = array();
+            if (($v_result = $this-&gt;privReadFileHeader($v_local_header)) != 1) {
+                // ----- Close the zip file
+                $this-&gt;privCloseFd();
+                $v_temp_zip-&gt;privCloseFd();
+                @unlink($v_zip_temp_name);
+
+                // ----- Return
+                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+                return $v_result;
+            }
+            
+            // ----- Check that local file header is same as central file header
+            if ($this-&gt;privCheckFileHeaders($v_local_header,
+			                                $v_header_list[$i]) != 1) {
+                // TBC
+            }
+            unset($v_local_header);
+
+            // ----- Write the file header
+            if (($v_result = $v_temp_zip-&gt;privWriteFileHeader($v_header_list[$i])) != 1) {
+                // ----- Close the zip file
+                $this-&gt;privCloseFd();
+                $v_temp_zip-&gt;privCloseFd();
+                @unlink($v_zip_temp_name);
+
+                // ----- Return
+                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+                return $v_result;
+            }
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Offset for this file is '&quot;.$v_header_list[$i]['offset'].&quot;'&quot;);
+
+            // ----- Read/write the data block
+            if (($v_result = PclZipUtilCopyBlock($this-&gt;zip_fd, $v_temp_zip-&gt;zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
+                // ----- Close the zip file
+                $this-&gt;privCloseFd();
+                $v_temp_zip-&gt;privCloseFd();
+                @unlink($v_zip_temp_name);
+
+                // ----- Return
+                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+                return $v_result;
+            }
+        }
+
+        // ----- Store the offset of the central dir
+        $v_offset = @ftell($v_temp_zip-&gt;zip_fd);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;New offset of central dir : $v_offset&quot;);
+
+        // ----- Re-Create the Central Dir files header
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Creates the new central directory&quot;);
+        for ($i=0; $i&lt;sizeof($v_header_list); $i++) {
+            // ----- Create the file header
+            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Offset of file : &quot;.$v_header_list[$i]['offset']);
+            if (($v_result = $v_temp_zip-&gt;privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+                $v_temp_zip-&gt;privCloseFd();
+                $this-&gt;privCloseFd();
+                @unlink($v_zip_temp_name);
+
+                // ----- Return
+                //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+                return $v_result;
+            }
+
+            // ----- Transform the header to a 'usable' info
+            $v_temp_zip-&gt;privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+        }
+
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Creates the central directory footer&quot;);
+
+        // ----- Zip file comment
+        $v_comment = '';
+        if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+          $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+        }
+
+        // ----- Calculate the size of the central header
+        $v_size = @ftell($v_temp_zip-&gt;zip_fd)-$v_offset;
+
+        // ----- Create the central dir footer
+        if (($v_result = $v_temp_zip-&gt;privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
+            // ----- Reset the file list
+            unset($v_header_list);
+            $v_temp_zip-&gt;privCloseFd();
+            $this-&gt;privCloseFd();
+            @unlink($v_zip_temp_name);
+
+            // ----- Return
+            //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+            return $v_result;
+        }
+
+        // ----- Close
+        $v_temp_zip-&gt;privCloseFd();
+        $this-&gt;privCloseFd();
+
+        // ----- Delete the zip file
+        // TBC : I should test the result ...
+        @unlink($this-&gt;zipname);
+
+        // ----- Rename the temporary file
+        // TBC : I should test the result ...
+        //@rename($v_zip_temp_name, $this-&gt;zipname);
+        PclZipUtilRename($v_zip_temp_name, $this-&gt;zipname);
+    
+        // ----- Destroy the temporary archive
+        unset($v_temp_zip);
+    }
+    
+    // ----- Remove every files : reset the file
+    else if ($v_central_dir['entries'] != 0) {
+        $this-&gt;privCloseFd();
+
+        if (($v_result = $this-&gt;privOpenFd('wb')) != 1) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+          return $v_result;
+        }
+
+        if (($v_result = $this-&gt;privWriteCentralHeader(0, 0, 0, '')) != 1) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+          return $v_result;
+        }
+
+        $this-&gt;privCloseFd();
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDirCheck()
+  // Description :
+  //   Check if a directory exists, if not it creates it and all the parents directory
+  //   which may be useful.
+  // Parameters :
+  //   $p_dir : Directory path to check.
+  // Return Values :
+  //    1 : OK
+  //   -1 : Unable to create directory
+  // --------------------------------------------------------------------------------
+  function privDirCheck($p_dir, $p_is_dir=false)
+  {
+    $v_result = 1;
+
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privDirCheck&quot;, &quot;entry='$p_dir', is_dir='&quot;.($p_is_dir?&quot;true&quot;:&quot;false&quot;).&quot;'&quot;);
+
+    // ----- Remove the final '/'
+    if (($p_is_dir) &amp;&amp; (substr($p_dir, -1)=='/'))
+    {
+      $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
+    }
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Looking for entry '$p_dir'&quot;);
+
+    // ----- Check the directory availability
+    if ((is_dir($p_dir)) || ($p_dir == &quot;&quot;))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, &quot;'$p_dir' is a directory&quot;);
+      return 1;
+    }
+
+    // ----- Extract parent directory
+    $p_parent_dir = dirname($p_dir);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Parent directory is '$p_parent_dir'&quot;);
+
+    // ----- Just a check
+    if ($p_parent_dir != $p_dir)
+    {
+      // ----- Look for parent directory
+      if ($p_parent_dir != &quot;&quot;)
+      {
+        if (($v_result = $this-&gt;privDirCheck($p_parent_dir)) != 1)
+        {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+          return $v_result;
+        }
+      }
+    }
+
+    // ----- Create the directory
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Create directory '$p_dir'&quot;);
+    if (!@mkdir($p_dir, 0777))
+    {
+      // ----- Error log
+      PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, &quot;Unable to create directory '$p_dir'&quot;);
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result, &quot;Directory '$p_dir' created&quot;);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privMerge()
+  // Description :
+  //   If $p_archive_to_add does not exist, the function exit with a success result.
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privMerge(&amp;$p_archive_to_add)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privMerge&quot;, &quot;archive='&quot;.$p_archive_to_add-&gt;zipname.&quot;'&quot;);
+    $v_result=1;
+
+    // ----- Look if the archive_to_add exists
+    if (!is_file($p_archive_to_add-&gt;zipname))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Archive to add does not exist. End of merge.&quot;);
+
+      // ----- Nothing to merge, so merge is a success
+      $v_result = 1;
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Look if the archive exists
+    if (!is_file($this-&gt;zipname))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Archive does not exist, duplicate the archive_to_add.&quot;);
+
+      // ----- Do a duplicate
+      $v_result = $this-&gt;privDuplicate($p_archive_to_add-&gt;zipname);
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Open the zip file
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($v_result=$this-&gt;privOpenFd('rb')) != 1)
+    {
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Read the central directory informations
+    $v_central_dir = array();
+    if (($v_result = $this-&gt;privReadEndCentralDir($v_central_dir)) != 1)
+    {
+      $this-&gt;privCloseFd();
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Go to beginning of File
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in zip : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+    @rewind($this-&gt;zip_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in zip : &quot;.ftell($this-&gt;zip_fd).&quot;'&quot;);
+
+    // ----- Open the archive_to_add file
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open archive_to_add in binary read mode&quot;);
+    if (($v_result=$p_archive_to_add-&gt;privOpenFd('rb')) != 1)
+    {
+      $this-&gt;privCloseFd();
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Read the central directory informations
+    $v_central_dir_to_add = array();
+    if (($v_result = $p_archive_to_add-&gt;privReadEndCentralDir($v_central_dir_to_add)) != 1)
+    {
+      $this-&gt;privCloseFd();
+      $p_archive_to_add-&gt;privCloseFd();
+
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Go to beginning of File
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in archive_to_add : &quot;.ftell($p_archive_to_add-&gt;zip_fd).&quot;'&quot;);
+    @rewind($p_archive_to_add-&gt;zip_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Position in archive_to_add : &quot;.ftell($p_archive_to_add-&gt;zip_fd).&quot;'&quot;);
+
+    // ----- Creates a temporay file
+    $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+    // ----- Open the temporary file in write mode
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+    {
+      $this-&gt;privCloseFd();
+      $p_archive_to_add-&gt;privCloseFd();
+
+      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Copy the files from the archive to the temporary file
+    // TBC : Here I should better append the file and go back to erase the central dir
+    $v_size = $v_central_dir['offset'];
+    while ($v_size != 0)
+    {
+      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+      $v_buffer = fread($this-&gt;zip_fd, $v_read_size);
+      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+      $v_size -= $v_read_size;
+    }
+
+    // ----- Copy the files from the archive_to_add into the temporary file
+    $v_size = $v_central_dir_to_add['offset'];
+    while ($v_size != 0)
+    {
+      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+      $v_buffer = fread($p_archive_to_add-&gt;zip_fd, $v_read_size);
+      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+      $v_size -= $v_read_size;
+    }
+
+    // ----- Store the offset of the central dir
+    $v_offset = @ftell($v_zip_temp_fd);
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;New offset of central dir : $v_offset&quot;);
+
+    // ----- Copy the block of file headers from the old archive
+    $v_size = $v_central_dir['size'];
+    while ($v_size != 0)
+    {
+      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+      $v_buffer = @fread($this-&gt;zip_fd, $v_read_size);
+      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+      $v_size -= $v_read_size;
+    }
+
+    // ----- Copy the block of file headers from the archive_to_add
+    $v_size = $v_central_dir_to_add['size'];
+    while ($v_size != 0)
+    {
+      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+      $v_buffer = @fread($p_archive_to_add-&gt;zip_fd, $v_read_size);
+      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+      $v_size -= $v_read_size;
+    }
+
+    // ----- Merge the file comments
+    $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
+
+    // ----- Calculate the size of the (new) central header
+    $v_size = @ftell($v_zip_temp_fd)-$v_offset;
+
+    // ----- Swap the file descriptor
+    // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+    // the following methods on the temporary fil and not the real archive fd
+    $v_swap = $this-&gt;zip_fd;
+    $this-&gt;zip_fd = $v_zip_temp_fd;
+    $v_zip_temp_fd = $v_swap;
+
+    // ----- Create the central dir footer
+    if (($v_result = $this-&gt;privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
+    {
+      $this-&gt;privCloseFd();
+      $p_archive_to_add-&gt;privCloseFd();
+      @fclose($v_zip_temp_fd);
+      $this-&gt;zip_fd = null;
+
+      // ----- Reset the file list
+      unset($v_header_list);
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Swap back the file descriptor
+    $v_swap = $this-&gt;zip_fd;
+    $this-&gt;zip_fd = $v_zip_temp_fd;
+    $v_zip_temp_fd = $v_swap;
+
+    // ----- Close
+    $this-&gt;privCloseFd();
+    $p_archive_to_add-&gt;privCloseFd();
+
+    // ----- Close the temporary file
+    @fclose($v_zip_temp_fd);
+
+    // ----- Delete the zip file
+    // TBC : I should test the result ...
+    @unlink($this-&gt;zipname);
+
+    // ----- Rename the temporary file
+    // TBC : I should test the result ...
+    //@rename($v_zip_temp_name, $this-&gt;zipname);
+    PclZipUtilRename($v_zip_temp_name, $this-&gt;zipname);
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDuplicate()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privDuplicate($p_archive_filename)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZip::privDuplicate&quot;, &quot;archive_filename='$p_archive_filename'&quot;);
+    $v_result=1;
+
+    // ----- Look if the $p_archive_filename exists
+    if (!is_file($p_archive_filename))
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Archive to duplicate does not exist. End of duplicate.&quot;);
+
+      // ----- Nothing to duplicate, so duplicate is a success.
+      $v_result = 1;
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Open the zip file
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($v_result=$this-&gt;privOpenFd('wb')) != 1)
+    {
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+    }
+
+    // ----- Open the temporary file in write mode
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Open file in binary read mode&quot;);
+    if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
+    {
+      $this-&gt;privCloseFd();
+
+      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
+
+      // ----- Return
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+      return PclZip::errorCode();
+    }
+
+    // ----- Copy the files from the archive to the temporary file
+    // TBC : Here I should better append the file and go back to erase the central dir
+    $v_size = filesize($p_archive_filename);
+    while ($v_size != 0)
+    {
+      $v_read_size = ($v_size &lt; PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Read $v_read_size bytes&quot;);
+      $v_buffer = fread($v_zip_temp_fd, $v_read_size);
+      @fwrite($this-&gt;zip_fd, $v_buffer, $v_read_size);
+      $v_size -= $v_read_size;
+    }
+
+    // ----- Close
+    $this-&gt;privCloseFd();
+
+    // ----- Close the temporary file
+    @fclose($v_zip_temp_fd);
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privErrorLog()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+  function privErrorLog($p_error_code=0, $p_error_string='')
+  {
+    if (PCLZIP_ERROR_EXTERNAL == 1) {
+      PclError($p_error_code, $p_error_string);
+    }
+    else {
+      $this-&gt;error_code = $p_error_code;
+      $this-&gt;error_string = $p_error_string;
+    }
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privErrorReset()
+  // Description :
+  // Parameters :
+  // --------------------------------------------------------------------------------
+  function privErrorReset()
+  {
+    if (PCLZIP_ERROR_EXTERNAL == 1) {
+      PclErrorReset();
+    }
+    else {
+      $this-&gt;error_code = 0;
+      $this-&gt;error_string = '';
+    }
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDecrypt()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privDecrypt($p_encryption_header, &amp;$p_buffer, $p_size, $p_crc)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDecrypt', &quot;size=&quot;.$p_size.&quot;&quot;);
+    $v_result=1;
+    
+    // ----- To Be Modified ;-)
+    $v_pwd = &quot;test&quot;;
+    
+    $p_buffer = PclZipUtilZipDecrypt($p_buffer, $p_size, $p_encryption_header,
+	                                 $p_crc, $v_pwd);
+    
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privDisableMagicQuotes()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privDisableMagicQuotes()
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDisableMagicQuotes', &quot;&quot;);
+    $v_result=1;
+
+    // ----- Look if function exists
+    if (   (!function_exists(&quot;get_magic_quotes_runtime&quot;))
+	    || (!function_exists(&quot;set_magic_quotes_runtime&quot;))) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Functions *et_magic_quotes_runtime are not supported&quot;);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+	}
+
+    // ----- Look if already done
+    if ($this-&gt;magic_quotes_status != -1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;magic_quote already disabled&quot;);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+	}
+
+	// ----- Get and memorize the magic_quote value
+	$this-&gt;magic_quotes_status = @get_magic_quotes_runtime();
+    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Current magic_quotes_runtime status is '&quot;.($this-&gt;magic_quotes_status==0?'disable':'enable').&quot;'&quot;);
+
+	// ----- Disable magic_quotes
+	if ($this-&gt;magic_quotes_status == 1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Disable magic_quotes&quot;);
+	  @set_magic_quotes_runtime(0);
+	}
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : privSwapBackMagicQuotes()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function privSwapBackMagicQuotes()
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privSwapBackMagicQuotes', &quot;&quot;);
+    $v_result=1;
+
+    // ----- Look if function exists
+    if (   (!function_exists(&quot;get_magic_quotes_runtime&quot;))
+	    || (!function_exists(&quot;set_magic_quotes_runtime&quot;))) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Functions *et_magic_quotes_runtime are not supported&quot;);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+	}
+
+    // ----- Look if something to do
+    if ($this-&gt;magic_quotes_status != -1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;magic_quote not modified&quot;);
+      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+      return $v_result;
+	}
+
+	// ----- Swap back magic_quotes
+	if ($this-&gt;magic_quotes_status == 1) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Enable back magic_quotes&quot;);
+  	  @set_magic_quotes_runtime($this-&gt;magic_quotes_status);
+	}
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  }
+  // End of class
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : PclZipUtilPathReduction()
+  // Description :
+  // Parameters :
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function PclZipUtilPathReduction($p_dir)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilPathReduction&quot;, &quot;dir='$p_dir'&quot;);
+    $v_result = &quot;&quot;;
+
+    // ----- Look for not empty path
+    if ($p_dir != &quot;&quot;) {
+      // ----- Explode path by directory names
+      $v_list = explode(&quot;/&quot;, $p_dir);
+
+      // ----- Study directories from last to first
+      $v_skip = 0;
+      for ($i=sizeof($v_list)-1; $i&gt;=0; $i--) {
+        // ----- Look for current path
+        if ($v_list[$i] == &quot;.&quot;) {
+          // ----- Ignore this directory
+          // Should be the first $i=0, but no check is done
+        }
+        else if ($v_list[$i] == &quot;..&quot;) {
+		  $v_skip++;
+        }
+        else if ($v_list[$i] == &quot;&quot;) {
+		  // ----- First '/' i.e. root slash
+		  if ($i == 0) {
+            $v_result = &quot;/&quot;.$v_result;
+		    if ($v_skip &gt; 0) {
+		        // ----- It is an invalid path, so the path is not modified
+		        // TBC
+		        $v_result = $p_dir;
+                //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, &quot;Invalid path is unchanged&quot;);
+                $v_skip = 0;
+		    }
+		  }
+		  // ----- Last '/' i.e. indicates a directory
+		  else if ($i == (sizeof($v_list)-1)) {
+            $v_result = $v_list[$i];
+		  }
+		  // ----- Double '/' inside the path
+		  else {
+            // ----- Ignore only the double '//' in path,
+            // but not the first and last '/'
+		  }
+        }
+        else {
+		  // ----- Look for item to skip
+		  if ($v_skip &gt; 0) {
+		    $v_skip--;
+		  }
+		  else {
+            $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?&quot;/&quot;.$v_result:&quot;&quot;);
+		  }
+        }
+      }
+      
+      // ----- Look for skip
+      if ($v_skip &gt; 0) {
+        while ($v_skip &gt; 0) {
+            $v_result = '../'.$v_result;
+            $v_skip--;
+        }
+      }
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : PclZipUtilPathInclusion()
+  // Description :
+  //   This function indicates if the path $p_path is under the $p_dir tree. Or,
+  //   said in an other way, if the file or sub-dir $p_path is inside the dir
+  //   $p_dir.
+  //   The function indicates also if the path is exactly the same as the dir.
+  //   This function supports path with duplicated '/' like '//', but does not
+  //   support '.' or '..' statements.
+  // Parameters :
+  // Return Values :
+  //   0 if $p_path is not inside directory $p_dir
+  //   1 if $p_path is inside directory $p_dir
+  //   2 if $p_path is exactly the same as $p_dir
+  // --------------------------------------------------------------------------------
+  function PclZipUtilPathInclusion($p_dir, $p_path)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilPathInclusion&quot;, &quot;dir='$p_dir', path='$p_path'&quot;);
+    $v_result = 1;
+    
+    // ----- Look for path beginning by ./
+    if (   ($p_dir == '.')
+        || ((strlen($p_dir) &gt;=2) &amp;&amp; (substr($p_dir, 0, 2) == './'))) {
+      $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Replacing ./ by full path in p_dir '&quot;.$p_dir.&quot;'&quot;);
+    }
+    if (   ($p_path == '.')
+        || ((strlen($p_path) &gt;=2) &amp;&amp; (substr($p_path, 0, 2) == './'))) {
+      $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Replacing ./ by full path in p_path '&quot;.$p_path.&quot;'&quot;);
+    }
+
+    // ----- Explode dir and path by directory separator
+    $v_list_dir = explode(&quot;/&quot;, $p_dir);
+    $v_list_dir_size = sizeof($v_list_dir);
+    $v_list_path = explode(&quot;/&quot;, $p_path);
+    $v_list_path_size = sizeof($v_list_path);
+
+    // ----- Study directories paths
+    $i = 0;
+    $j = 0;
+    while (($i &lt; $v_list_dir_size) &amp;&amp; ($j &lt; $v_list_path_size) &amp;&amp; ($v_result)) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Working on dir($i)='&quot;.$v_list_dir[$i].&quot;' and path($j)='&quot;.$v_list_path[$j].&quot;'&quot;);
+
+      // ----- Look for empty dir (path reduction)
+      if ($v_list_dir[$i] == '') {
+        $i++;
+        continue;
+      }
+      if ($v_list_path[$j] == '') {
+        $j++;
+        continue;
+      }
+
+      // ----- Compare the items
+      if (($v_list_dir[$i] != $v_list_path[$j]) &amp;&amp; ($v_list_dir[$i] != '') &amp;&amp; ( $v_list_path[$j] != ''))  {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Items ($i,$j) are different&quot;);
+        $v_result = 0;
+      }
+
+      // ----- Next items
+      $i++;
+      $j++;
+    }
+
+    // ----- Look if everything seems to be the same
+    if ($v_result) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Look for tie break&quot;);
+      // ----- Skip all the empty items
+      while (($j &lt; $v_list_path_size) &amp;&amp; ($v_list_path[$j] == '')) $j++;
+      while (($i &lt; $v_list_dir_size) &amp;&amp; ($v_list_dir[$i] == '')) $i++;
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Looking on dir($i)='&quot;.($i &lt; $v_list_dir_size?$v_list_dir[$i]:'').&quot;' and path($j)='&quot;.($j &lt; $v_list_path_size?$v_list_path[$j]:'').&quot;'&quot;);
+
+      if (($i &gt;= $v_list_dir_size) &amp;&amp; ($j &gt;= $v_list_path_size)) {
+        // ----- There are exactly the same
+        $v_result = 2;
+      }
+      else if ($i &lt; $v_list_dir_size) {
+        // ----- The path is shorter than the dir
+        $v_result = 0;
+      }
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : PclZipUtilCopyBlock()
+  // Description :
+  // Parameters :
+  //   $p_mode : read/write compression mode
+  //             0 : src &amp; dest normal
+  //             1 : src gzip, dest normal
+  //             2 : src normal, dest gzip
+  //             3 : src &amp; dest gzip
+  // Return Values :
+  // --------------------------------------------------------------------------------
+  function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilCopyBlock&quot;, &quot;size=$p_size, mode=$p_mode&quot;);
+    $v_result = 1;
+
+    if ($p_mode==0)
+    {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Src offset before read :&quot;.(@ftell($p_src)));
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Dest offset before write :&quot;.(@ftell($p_dest)));
+      while ($p_size != 0)
+      {
+        $v_read_size = ($p_size &lt; PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+        $v_buffer = @fread($p_src, $v_read_size);
+        @fwrite($p_dest, $v_buffer, $v_read_size);
+        $p_size -= $v_read_size;
+      }
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Src offset after read :&quot;.(@ftell($p_src)));
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Dest offset after write :&quot;.(@ftell($p_dest)));
+    }
+    else if ($p_mode==1)
+    {
+      while ($p_size != 0)
+      {
+        $v_read_size = ($p_size &lt; PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+        $v_buffer = @gzread($p_src, $v_read_size);
+        @fwrite($p_dest, $v_buffer, $v_read_size);
+        $p_size -= $v_read_size;
+      }
+    }
+    else if ($p_mode==2)
+    {
+      while ($p_size != 0)
+      {
+        $v_read_size = ($p_size &lt; PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+        $v_buffer = @fread($p_src, $v_read_size);
+        @gzwrite($p_dest, $v_buffer, $v_read_size);
+        $p_size -= $v_read_size;
+      }
+    }
+    else if ($p_mode==3)
+    {
+      while ($p_size != 0)
+      {
+        $v_read_size = ($p_size &lt; PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, &quot;Read $v_read_size bytes&quot;);
+        $v_buffer = @gzread($p_src, $v_read_size);
+        @gzwrite($p_dest, $v_buffer, $v_read_size);
+        $p_size -= $v_read_size;
+      }
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : PclZipUtilRename()
+  // Description :
+  //   This function tries to do a simple rename() function. If it fails, it
+  //   tries to copy the $p_src file in a new $p_dest file and then unlink the
+  //   first one.
+  // Parameters :
+  //   $p_src : Old filename
+  //   $p_dest : New filename
+  // Return Values :
+  //   1 on success, 0 on failure.
+  // --------------------------------------------------------------------------------
+  function PclZipUtilRename($p_src, $p_dest)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilRename&quot;, &quot;source=$p_src, destination=$p_dest&quot;);
+    $v_result = 1;
+
+    // ----- Try to rename the files
+    if (!@rename($p_src, $p_dest)) {
+      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Fail to rename file, try copy+unlink&quot;);
+
+      // ----- Try to copy &amp; unlink the src
+      if (!@copy($p_src, $p_dest)) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Fail to copy file&quot;);
+        $v_result = 0;
+      }
+      else if (!@unlink($p_src)) {
+        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, &quot;Fail to unlink old filename&quot;);
+        $v_result = 0;
+      }
+    }
+
+    // ----- Return
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : PclZipUtilOptionText()
+  // Description :
+  //   Translate option value in text. Mainly for debug purpose.
+  // Parameters :
+  //   $p_option : the option value.
+  // Return Values :
+  //   The option text value.
+  // --------------------------------------------------------------------------------
+  function PclZipUtilOptionText($p_option)
+  {
+    //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, &quot;PclZipUtilOptionText&quot;, &quot;option='&quot;.$p_option.&quot;'&quot;);
+    
+    $v_list = get_defined_constants();
+    for (reset($v_list); $v_key = key($v_list); next($v_list)) {
+	  $v_prefix = substr($v_key, 0, 10);
+	  if ((   ($v_prefix == 'PCLZIP_OPT')
+         || ($v_prefix == 'PCLZIP_CB_')
+         || ($v_prefix == 'PCLZIP_ATT'))
+	      &amp;&amp; ($v_list[$v_key] == $p_option)) {
+          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_key);
+          return $v_key;
+	    }
+    }
+    
+    $v_result = 'Unknown';
+
+    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+    return $v_result;
+  }
+  // --------------------------------------------------------------------------------
+
+  // --------------------------------------------------------------------------------
+  // Function : PclZipUtilTranslateWinPath()
+  // Description :
+  //   Translate windows path by replacing '\' by '/' and optionally removing
+  //   drive letter.
+  // Parameters :
+  //   $p_path : path to translate.
+  //   $p_remove_disk_letter : true | false
+  // Return Values :
+  //   The path translated.
+  // --------------------------------------------------------------------------------
+  function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
+  {
+    if (stristr(php_uname(), 'windows')) {
+      // ----- Look for potential disk letter
+      if (($p_remove_disk_letter) &amp;&amp; (($v_position = strpos($p_path, ':')) != false)) {
+          $p_path = substr($p_path, $v_position+1);
+      }
+      // ----- Change potential windows directory separator
+      if ((strpos($p_path, '\\') &gt; 0) || (substr($p_path, 0,1) == '\\')) {
+          $p_path = strtr($p_path, '\\', '/');
+      }
+    }
+    return $p_path;
+  }
+  // --------------------------------------------------------------------------------
+
+
+?&gt;</diff>
      <filename>wordpress/wp-content/plugins/all-in-one-seo-pack/pclzip.lib.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,51 +1,51 @@
-=== All in One SEO Pack ===
-Contributors: hallsofmontezuma, uberdose
-Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=mrtorbert%40gmail%2ecom&amp;item_name=All%20In%20One%20SEO%20Pack&amp;item_number=Support%20Open%20Source&amp;no_shipping=0&amp;no_note=1&amp;tax=0&amp;currency_code=USD&amp;lc=US&amp;bn=PP%2dDonationsBF&amp;charset=UTF%2d8
-Tags: post,google,seo,meta,meta keywords,meta description,title,posts,plugin, search engine optimization
-Requires at least: 1.5
-Tested up to: 2.6
-Stable tag: trunk
-
-Automatically optimizes your Wordpress blog for Search Engines (Search Engine Optimization).
-
-== Description ==
-
-**Optimizes** your Wordpress blog for Search Engines (**Search Engine Optimization**).
-
-**[Download now!](http://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip)**
-
-[Support](http://semperfiwebdesign.com/contact/) |
-[Version History](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-pack-release-history/) |
-[FAQ](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/)|
-[Translations](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/translations-for-all-in-one-seo-pack/)
-
-Some features:
-
-* Automatically optimizes your **titles** for search engines
-* Generates **META tags automatically**
-* Avoids the typical duplicate content found on Wordpress blogs
-* For Wordpress 2.3 you don't even have to look at the options, it works out-of-the-box. Just install.
-* You can override any title and set any META description and any META keywords you want.
-* You can fine-tune everything
-* Backward-Compatibility with many other plugins, like Auto Meta, Ultimate Tag Warrior and others.
-
-Be sure to check out:
-[WP Security Scan](http://wordpress.org/extend/plugins/wp-security-scan/)
-and
-[SMS Text Message](http://wordpress.org/extend/plugins/sms-text-message/)
-
-== Installation ==
-
-1. Unzip into your `/wp-content/plugins/` directory. If you're uploading it make sure to upload
-the top-level folder. Don't just upload all the php files and put them in `/wp-content/plugins/`.
-1. Activate the plugin through the 'Plugins' menu in WordPress
-1. Visit your SEO options (*Options - All in One SEO*) for Wordpress 2.3.x, (*Settings - All in One SEO*) for Wordpress 2.5.x 
-1. That's it!
-
-For upgrading please use the built-in one-click updater (*Options - All in One SEO*).
-If you have to upgrade manually simply repeat the installation steps.
-
-== Frequently Asked Questions ==
-
-Please read these **[FAQs](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/)** before requesting
-**[Support](http://semperfiwebdesign.com/contact/)**
+=== All in One SEO Pack ===
+Contributors: hallsofmontezuma
+Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=mrtorbert%40gmail%2ecom&amp;item_name=All%20In%20One%20SEO%20Pack&amp;item_number=Support%20Open%20Source&amp;no_shipping=0&amp;no_note=1&amp;tax=0&amp;currency_code=USD&amp;lc=US&amp;bn=PP%2dDonationsBF&amp;charset=UTF%2d8
+Tags: post,google,seo,meta,meta keywords,meta description,title,posts,plugin, search engine optimization
+Requires at least: 1.5
+Tested up to: 2.7.1
+Stable tag: trunk
+
+Automatically optimizes your Wordpress blog for Search Engines (Search Engine Optimization).
+
+== Description ==
+
+**Optimizes** your Wordpress blog for Search Engines (**Search Engine Optimization**).
+
+**[Download now!](http://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip)**
+
+[Support](http://semperfiwebdesign.com/contact/) |
+[Version History](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-pack-release-history/) |
+[FAQ](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/)|
+[Translations](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/translations-for-all-in-one-seo-pack/)
+
+Some features:
+
+* Automatically optimizes your **titles** for search engines
+* Generates **META tags automatically**
+* Avoids the typical duplicate content found on Wordpress blogs
+* For Wordpress 2.7.1 you don't even have to look at the options, it works out-of-the-box. Just install.
+* You can override any title and set any META description and any META keywords you want.
+* You can fine-tune everything
+* Backward-Compatibility with many other plugins, like Auto Meta, Ultimate Tag Warrior and others.
+
+Be sure to check out:
+[WP Security Scan](http://wordpress.org/extend/plugins/wp-security-scan/)
+and
+[SMS Text Message](http://wordpress.org/extend/plugins/sms-text-message/)
+
+== Installation ==
+
+1. Unzip into your `/wp-content/plugins/` directory. If you're uploading it make sure to upload
+the top-level folder. Don't just upload all the php files and put them in `/wp-content/plugins/`.
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. Visit your SEO options (*Options - All in One SEO*) for Wordpress 2.3.x, (*Settings - All in One SEO*) for Wordpress 2.5.x-2.7 
+1. That's it!
+
+For upgrading please use the built-in one-click updater (*Options - All in One SEO*).
+If you have to upgrade manually simply repeat the installation steps.
+
+== Frequently Asked Questions ==
+
+Please read these **[FAQs](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/)** before requesting
+**[Support](http://semperfiwebdesign.com/contact/)**</diff>
      <filename>wordpress/wp-content/plugins/all-in-one-seo-pack/readme.txt</filename>
    </modified>
    <modified>
      <diff>@@ -80,12 +80,12 @@ Yes, videos will be displayed as a thumbnail image. You'll need to click through
 
 &lt;h3&gt;Example 2&lt;/h3&gt;
 
-&lt;p&gt;&lt;code&gt;&amp;lt;?php get_flickrRSS(20, &quot;set&quot;, &quot;&quot;, &quot;thumbnail&quot;, &quot;&amp;lt;li&gt;&quot;, &quot;&amp;lt;/li&amp;gt;&quot;, &quot;44124462494@N01&quot;, &quot;72157601681097311&quot;); ? ?&amp;gt;&lt;/code&gt;&lt;/p&gt;
+&lt;p&gt;&lt;code&gt;&amp;lt;?php get_flickrRSS(20, &quot;set&quot;, &quot;&quot;, &quot;thumbnail&quot;, &quot;&amp;lt;li&gt;&quot;, &quot;&amp;lt;/li&amp;gt;&quot;, &quot;44124462494@N01&quot;, &quot;72157601681097311&quot;); ?&amp;gt;&lt;/code&gt;&lt;/p&gt;
 &lt;p&gt;This would show the 20 most recent thumbnail sized photos from the specified user's set.&lt;/p&gt;
 
-&lt;h3&gt;Example 2&lt;/h3&gt;
+&lt;h3&gt;Example 3&lt;/h3&gt;
 
-&lt;p&gt;&lt;code&gt;&amp;lt;?php get_flickrRSS(5, &quot;group&quot;, &quot;&quot;, &quot;thumbnail&quot;, &quot;&amp;lt;li&gt;&quot;, &quot;&amp;lt;/li&amp;gt;&quot;, &quot;34427469792@N01&quot;); ? ?&amp;gt;&lt;/code&gt;&lt;/p&gt;
+&lt;p&gt;&lt;code&gt;&amp;lt;?php get_flickrRSS(5, &quot;group&quot;, &quot;&quot;, &quot;thumbnail&quot;, &quot;&amp;lt;li&gt;&quot;, &quot;&amp;lt;/li&amp;gt;&quot;, &quot;34427469792@N01&quot;); ?&amp;gt;&lt;/code&gt;&lt;/p&gt;
 &lt;p&gt;This would show the 5 most recent thumbnail sized photos from the Flickr central group, and each photo would be wrapped in list tags.&lt;/p&gt;
 
 </diff>
      <filename>wordpress/wp-content/plugins/flickr-rss/README.html</filename>
    </modified>
    <modified>
      <diff>@@ -3,288 +3,263 @@
 Plugin Name: flickrRSS
 Plugin URI: http://eightface.com/wordpress/flickrrss/
 Description: Allows you to integrate the photos from a flickr rss feed into your site.
-Version: 4.0
+Version: 5.0
 License: GPL
-Author: Dave Kellam
+Author: Dave Kellam and Stefano Verna
 Author URI: http://eightface.com
 */
 
-function get_flickrRSS() {
-
-	// the function can accept up to seven parameters, otherwise it uses option panel defaults 	
-  	for($i = 0 ; $i &lt; func_num_args(); $i++) {
-    	$args[] = func_get_arg($i);
-    	}
-  	if (!isset($args[0])) $num_items = get_option('flickrRSS_display_numitems'); else $num_items = $args[0];
-  	if (!isset($args[1])) $type = get_option('flickrRSS_display_type'); else $type = $args[1];
-  	if (!isset($args[2])) $tags = trim(get_option('flickrRSS_tags')); else $tags = trim($args[2]);
-  	if (!isset($args[3])) $imagesize = get_option('flickrRSS_display_imagesize'); else $imagesize = $args[3];
-  	if (!isset($args[4])) $before_image = stripslashes(get_option('flickrRSS_before')); else $before_image = $args[4];
-  	if (!isset($args[5])) $after_image = stripslashes(get_option('flickrRSS_after')); else $after_image = $args[5];
-  	if (!isset($args[6])) $id_number = stripslashes(get_option('flickrRSS_flickrid')); else $id_number = $args[6];
-  	if (!isset($args[7])) $set_id = stripslashes(get_option('flickrRSS_set')); else $set_id = $args[7];
-        
-	# use image cache &amp; set location
-	$useImageCache = get_option('flickrRSS_use_image_cache');
-	$cachePath = get_option('flickrRSS_image_cache_uri');
-	$fullPath = get_option('flickrRSS_image_cache_dest'); 
-
-	if (!function_exists('MagpieRSS')) { // Check if another plugin is using RSS, may not work
-		include_once (ABSPATH . WPINC . '/rss.php');
-		error_reporting(E_ERROR);
-	}
-
-
-	// get the feeds
-	if ($type == &quot;user&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/photos_public.gne?id=' . $id_number . '&amp;tags=' . $tags . '&amp;format=rss_200'; }
-	elseif ($type == &quot;favorite&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/photos_faves.gne?id=' . $id_number . '&amp;format=rss_200'; }
-	elseif ($type == &quot;set&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/photoset.gne?set=' . $set_id . '&amp;nsid=' . $id_number . '&amp;format=rss_200'; }
-	elseif ($type == &quot;group&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/groups_pool.gne?id=' . $id_number . '&amp;format=rss_200'; }
-	elseif ($type == &quot;community&quot; || $type == &quot;public&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/photos_public.gne?tags=' . $tags . '&amp;format=rss_200'; }
-	else { print &quot;flickrRSS probably needs to be setup&quot;; }
-
-	# get rss file
-	$rss = @ fetch_rss($rss_url);
-
-	if ($rss) {
-    	$imgurl = &quot;&quot;;
-    	# specifies number of pictures
-		$items = array_slice($rss-&gt;items, 0, $num_items);
-
-	    # builds html from array
-    	foreach ( $items as $item ) {
-       	 if(preg_match('&lt;img src=&quot;([^&quot;]*)&quot; [^/]*/&gt;', $item['description'],$imgUrlMatches)) {
-            	$imgurl = $imgUrlMatches[1];
- 
-            #change image size         
-           	if ($imagesize == &quot;square&quot;) {
-             	$imgurl = str_replace(&quot;m.jpg&quot;, &quot;s.jpg&quot;, $imgurl);
-           	} elseif ($imagesize == &quot;thumbnail&quot;) {
-             $imgurl = str_replace(&quot;m.jpg&quot;, &quot;t.jpg&quot;, $imgurl);
-           	} elseif ($imagesize == &quot;medium&quot;) {
-             $imgurl = str_replace(&quot;_m.jpg&quot;, &quot;.jpg&quot;, $imgurl);
-           	}
-           
-           #check if there is an image title (for html validation purposes)
-           if($item['title'] !== &quot;&quot;) $title = htmlspecialchars(stripslashes($item['title']));
-           else $title = &quot;Flickr photo&quot;;          
-           
-           $url = $item['link'];
+if (!class_exists('flickrRSS')) {
+	class flickrRSS {
 	
-	       preg_match('&lt;http://farm[0-9]{0,3}\.static.flickr\.com/\d+?\/([^.]*)\.jpg&gt;', $imgurl, $flickrSlugMatches);
-	       $flickrSlug = $flickrSlugMatches[1];
-	       
-	       # cache images 
-	       if ($useImageCache) {
-                      
-               # check if file already exists in cache
-               # if not, grab a copy of it
-               if (!file_exists(&quot;$fullPath$flickrSlug.jpg&quot;)) {   
-                 if ( function_exists('curl_init') ) { // check for CURL, if not use fopen
-                    $curl = curl_init();
-                    $localimage = fopen(&quot;$fullPath$flickrSlug.jpg&quot;, &quot;wb&quot;);
-                    curl_setopt($curl, CURLOPT_URL, $imgurl);
-                    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 1);
-                    curl_setopt($curl, CURLOPT_FILE, $localimage);
-                    curl_exec($curl);
-                    curl_close($curl);
-                   } else {
-                 	$filedata = &quot;&quot;;
-                    $remoteimage = fopen($imgurl, 'rb');
-                  	if ($remoteimage) {
-                    	 while(!feof($remoteimage)) {
-                         	$filedata.= fread($remoteimage,1024*8);
-                       	 }
-                  	}
-                	fclose($remoteimage);
-                	$localimage = fopen(&quot;$fullPath$flickrSlug.jpg&quot;, 'wb');
-                	fwrite($localimage,$filedata);
-                	fclose($localimage);
-                 } // end CURL check
-                } // end file check
-                # use cached image
-                print $before_image . &quot;&lt;a href=\&quot;$url\&quot; title=\&quot;$title\&quot;&gt;&lt;img src=\&quot;$cachePath$flickrSlug.jpg\&quot; alt=\&quot;$title\&quot; /&gt;&lt;/a&gt;&quot; . $after_image;
-            } else {
-                # grab image direct from flickr
-                print $before_image . &quot;&lt;a href=\&quot;$url\&quot; title=\&quot;$title\&quot;&gt;&lt;img src=\&quot;$imgurl\&quot; alt=\&quot;$title\&quot; /&gt;&lt;/a&gt;&quot; . $after_image;      
-            } // end use imageCache
-       } // end pregmatch
-     } // end foreach
-  } // end if($rss)
-} # end get_flickrRSS() function
-
-function widget_flickrRSS_init() {
-	if (!function_exists('register_sidebar_widget')) return;
-
-	function widget_flickrRSS($args) {
+		function flickrRSS() {
+			$this-&gt;version = &quot;5.0&quot;;
+		}
+	
+		function setupActivation() {
 		
-		extract($args);
-
-		$options = get_option('widget_flickrRSS');
-		$title = $options['title'];
-		$before_images = $options['before_images'];
-		$after_images = $options['after_images'];
+			function get_and_delete_option($setting) { $v = get_option($setting); delete_option($setting); return $v; }
 		
-		echo $before_widget . $before_title . $title . $after_title . $before_images;
-		get_flickrRSS();
-		echo $after_images . $after_widget;
-	}
-
-	function widget_flickrRSS_control() {
-		$options = get_option('widget_flickrRSS');
-
-		if ( $_POST['flickrRSS-submit'] ) {
-			$options['title'] = strip_tags(stripslashes($_POST['flickrRSS-title']));
-			$options['before_images'] = $_POST['flickrRSS-beforeimages'];
-			$options['after_images'] = $_POST['flickrRSS-afterimages'];
-			update_option('widget_flickrRSS', $options);
+			// check for previously installed version 4.0 or older
+			if (get_option('flickrRSS_flickrid')) {
+				// let's port previous settings and delete them
+				$settings = $this-&gt;fixArguments(array(
+					get_and_delete_option('flickrRSS_display_numitems'),
+					get_and_delete_option('flickrRSS_display_type'),
+					get_and_delete_option('flickrRSS_tags'),
+					get_and_delete_option('flickrRSS_display_imagesize'),
+					get_and_delete_option('flickrRSS_before'),
+					get_and_delete_option('flickrRSS_after'),
+					get_and_delete_option('flickrRSS_flickrid'),
+					get_and_delete_option('flickrRSS_set'),
+					get_and_delete_option('flickrRSS_use_image_cache'),
+					get_and_delete_option('flickrRSS_image_cache_uri'),
+					get_and_delete_option('flickrRSS_image_cache_dest')
+				));
+				update_option('flickrRSS_settings', $settings);
+			}
+		
+			// update version number
+			if (get_option('flickrRSS_version') != $this-&gt;version)
+				update_option('flickrRSS_version', $this-&gt;version);
 		}
-
-		$title = htmlspecialchars($options['title'], ENT_QUOTES);
-		$before_images = htmlspecialchars($options['before_images'], ENT_QUOTES);
-		$after_images = htmlspecialchars($options['after_images'], ENT_QUOTES);
+	
+		function fixArguments($args) {
+			$settings = array();
 		
-		echo '&lt;p style=&quot;text-align:right;&quot;&gt;&lt;label for=&quot;flickrRSS-title&quot;&gt;Title: &lt;input style=&quot;width: 180px;&quot; id=&quot;gsearch-title&quot; name=&quot;flickrRSS-title&quot; type=&quot;text&quot; value=&quot;'.$title.'&quot; /&gt;&lt;/label&gt;&lt;/p&gt;';
-		echo '&lt;p style=&quot;text-align:right;&quot;&gt;&lt;label for=&quot;flickrRSS-beforeimages&quot;&gt;Before all images: &lt;input style=&quot;width: 180px;&quot; id=&quot;flickrRSS-beforeimages&quot; name=&quot;flickrRSS-beforeimages&quot; type=&quot;text&quot; value=&quot;'.$before_images.'&quot; /&gt;&lt;/label&gt;&lt;/p&gt;';
-		echo '&lt;p style=&quot;text-align:right;&quot;&gt;&lt;label for=&quot;flickrRSS-afterimages&quot;&gt;After all images: &lt;input style=&quot;width: 180px;&quot; id=&quot;flickrRSS-afterimages&quot; name=&quot;flickrRSS-afterimages&quot; type=&quot;text&quot; value=&quot;'.$after_images.'&quot; /&gt;&lt;/label&gt;&lt;/p&gt;';
-		echo '&lt;input type=&quot;hidden&quot; id=&quot;flickrRSS-submit&quot; name=&quot;flickrRSS-submit&quot; value=&quot;1&quot; /&gt;';
-	}		
-
-	register_sidebar_widget('flickrRSS', 'widget_flickrRSS');
-	register_widget_control('flickrRSS', 'widget_flickrRSS_control', 300, 100);
-}
-
-function flickrRSS_subpanel() {
-     if (isset($_POST['save_flickrRSS_settings'])) {
-       $option_flickrid = $_POST['flickr_id'];
-       $option_tags = $_POST['tags'];
-       $option_set = $_POST['set'];
-       $option_display_type = $_POST['display_type'];
-       $option_display_numitems = $_POST['display_numitems'];
-       $option_display_imagesize = $_POST['display_imagesize'];
-       $option_before = $_POST['before_image'];
-       $option_after = $_POST['after_image'];
-       $option_useimagecache = $_POST['use_image_cache'];
-       $option_imagecacheuri = $_POST['image_cache_uri'];
-       $option_imagecachedest = $_POST['image_cache_dest'];
-       update_option('flickrRSS_flickrid', $option_flickrid);
-       update_option('flickrRSS_tags', $option_tags);
-       update_option('flickrRSS_set', $option_set);
-       update_option('flickrRSS_display_type', $option_display_type);
-       update_option('flickrRSS_display_numitems', $option_display_numitems);
-       update_option('flickrRSS_display_imagesize', $option_display_imagesize);
-       update_option('flickrRSS_before', $option_before);
-       update_option('flickrRSS_after', $option_after);
-       update_option('flickrRSS_use_image_cache', $option_useimagecache);
-       update_option('flickrRSS_image_cache_uri', $option_imagecacheuri);
-       update_option('flickrRSS_image_cache_dest', $option_imagecachedest);
-       ?&gt; &lt;div class=&quot;updated&quot;&gt;&lt;p&gt;flickrRSS settings saved&lt;/p&gt;&lt;/div&gt; &lt;?php
-     }
-
-	?&gt;
+			if (isset($args[0])) $settings['num_items'] = $args[0];
+		  	if (isset($args[1])) $settings['type'] = $args[1];
+		  	if (isset($args[2])) $settings['tags'] = $args[2];
+		  	if (isset($args[6])) $settings['id'] = $args[6];
+		  	if (isset($args[7])) $settings['set'] = $args[7];
+			if (isset($args[8])) $settings['do_cache'] = $args[8];
+			if (isset($args[9])) $settings['cache_uri'] = $args[9];
+			if (isset($args[10])) $settings['cache_path'] = $args[10];
+	
+			$imagesize = $args[3]?$args[3]:&quot;square&quot;;
+			$before_image = $args[4]?$args[4]:&quot;&quot;;
+			$after_image = $args[5]?$args[5]:&quot;&quot;;
 
-	&lt;div class=&quot;wrap&quot;&gt;
-		&lt;h2&gt;flickrRSS Settings&lt;/h2&gt;
+			$settings['html'] = $before_image . '&lt;a href=&quot;%flickr_page%&quot; title=&quot;%title%&quot;&gt;&lt;img src=&quot;%image_'.$imagesize.'%&quot; alt=&quot;%title%&quot; /&gt;&lt;/a&gt;' . $after_image;
 		
-		&lt;form method=&quot;post&quot;&gt;
-		&lt;table class=&quot;form-table&quot;&gt;
-		 &lt;tr valign=&quot;top&quot;&gt;
-		  &lt;th scope=&quot;row&quot;&gt;ID Number&lt;/th&gt;
-	      &lt;td&gt;&lt;input name=&quot;flickr_id&quot; type=&quot;text&quot; id=&quot;flickr_id&quot; value=&quot;&lt;?php echo get_option('flickrRSS_flickrid'); ?&gt;&quot; size=&quot;20&quot; /&gt;
-        		Use the &lt;a href=&quot;http://idgettr.com&quot;&gt;idGettr&lt;/a&gt; to find your user or group id.&lt;/p&gt;&lt;/td&gt;
-         &lt;/tr&gt;
-         &lt;tr valign=&quot;top&quot;&gt;
-          &lt;th scope=&quot;row&quot;&gt;Display&lt;/th&gt;
-          &lt;td&gt;
-        	&lt;select name=&quot;display_type&quot; id=&quot;display_type&quot;&gt;
-        	  &lt;option &lt;?php if(get_option('flickrRSS_display_type') == 'user') { echo 'selected'; } ?&gt; value=&quot;user&quot;&gt;user&lt;/option&gt;
-        	  &lt;option &lt;?php if(get_option('flickrRSS_display_type') == 'set') { echo 'selected'; } ?&gt; value=&quot;set&quot;&gt;set&lt;/option&gt;
-        	  &lt;option &lt;?php if(get_option('flickrRSS_display_type') == 'favorite') { echo 'selected'; } ?&gt; value=&quot;favorite&quot;&gt;favorite&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_type') == 'group') { echo 'selected'; } ?&gt; value=&quot;group&quot;&gt;group&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_type') == 'community') { echo 'selected'; } ?&gt; value=&quot;community&quot;&gt;community&lt;/option&gt;
-		    &lt;/select&gt;
-		 	items using 
-        	&lt;select name=&quot;display_numitems&quot; id=&quot;display_numitems&quot;&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '1') { echo 'selected'; } ?&gt; value=&quot;1&quot;&gt;1&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '2') { echo 'selected'; } ?&gt; value=&quot;2&quot;&gt;2&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '3') { echo 'selected'; } ?&gt; value=&quot;3&quot;&gt;3&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '4') { echo 'selected'; } ?&gt; value=&quot;4&quot;&gt;4&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '5') { echo 'selected'; } ?&gt; value=&quot;5&quot;&gt;5&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '6') { echo 'selected'; } ?&gt; value=&quot;6&quot;&gt;6&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '7') { echo 'selected'; } ?&gt; value=&quot;7&quot;&gt;7&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '8') { echo 'selected'; } ?&gt; value=&quot;8&quot;&gt;8&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '9') { echo 'selected'; } ?&gt; value=&quot;9&quot;&gt;9&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '10') { echo 'selected'; } ?&gt; value=&quot;10&quot;&gt;10&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '11') { echo 'selected'; } ?&gt; value=&quot;11&quot;&gt;11&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '12') { echo 'selected'; } ?&gt; value=&quot;12&quot;&gt;12&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '13') { echo 'selected'; } ?&gt; value=&quot;13&quot;&gt;13&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '14') { echo 'selected'; } ?&gt; value=&quot;14&quot;&gt;14&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '15') { echo 'selected'; } ?&gt; value=&quot;15&quot;&gt;15&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '16') { echo 'selected'; } ?&gt; value=&quot;16&quot;&gt;16&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '17') { echo 'selected'; } ?&gt; value=&quot;17&quot;&gt;17&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '18') { echo 'selected'; } ?&gt; value=&quot;18&quot;&gt;18&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '19') { echo 'selected'; } ?&gt; value=&quot;19&quot;&gt;19&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_numitems') == '20') { echo 'selected'; } ?&gt; value=&quot;20&quot;&gt;20&lt;/option&gt;
-		      &lt;/select&gt;
-            &lt;select name=&quot;display_imagesize&quot; id=&quot;display_imagesize&quot;&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_imagesize') == 'square') { echo 'selected'; } ?&gt; value=&quot;square&quot;&gt;square&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_imagesize') == 'thumbnail') { echo 'selected'; } ?&gt; value=&quot;thumbnail&quot;&gt;thumbnail&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_imagesize') == 'small') { echo 'selected'; } ?&gt; value=&quot;small&quot;&gt;small&lt;/option&gt;
-		      &lt;option &lt;?php if(get_option('flickrRSS_display_imagesize') == 'medium') { echo 'selected'; } ?&gt; value=&quot;medium&quot;&gt;medium&lt;/option&gt;
-		    &lt;/select&gt;
-            images&lt;/p&gt;
-           &lt;/td&gt; 
-         &lt;/tr&gt;
-         &lt;tr valign=&quot;top&quot;&gt;
-		  &lt;th scope=&quot;row&quot;&gt;Set&lt;/th&gt;
-          &lt;td&gt;&lt;input name=&quot;set&quot; type=&quot;text&quot; id=&quot;set&quot; value=&quot;&lt;?php echo get_option('flickrRSS_set'); ?&gt;&quot; size=&quot;40&quot; /&gt; Use number from the set url&lt;/p&gt;
-         &lt;/tr&gt;
-         &lt;tr valign=&quot;top&quot;&gt;
-		  &lt;th scope=&quot;row&quot;&gt;Tags&lt;/th&gt;
-          &lt;td&gt;&lt;input name=&quot;tags&quot; type=&quot;text&quot; id=&quot;tags&quot; value=&quot;&lt;?php echo get_option('flickrRSS_tags'); ?&gt;&quot; size=&quot;40&quot; /&gt; Comma separated, no spaces&lt;/p&gt;
-         &lt;/tr&gt;
-         &lt;tr valign=&quot;top&quot;&gt;
-          &lt;th scope=&quot;row&quot;&gt;HTML Wrapper&lt;/th&gt;
-          &lt;td&gt;&lt;label for=&quot;before_image&quot;&gt;Before Image:&lt;/label&gt; &lt;input name=&quot;before_image&quot; type=&quot;text&quot; id=&quot;before_image&quot; value=&quot;&lt;?php echo htmlspecialchars(stripslashes(get_option('flickrRSS_before'))); ?&gt;&quot; size=&quot;10&quot; /&gt;
-        	  &lt;label for=&quot;after_image&quot;&gt;After Image:&lt;/label&gt; &lt;input name=&quot;after_image&quot; type=&quot;text&quot; id=&quot;after_image&quot; value=&quot;&lt;?php echo htmlspecialchars(stripslashes(get_option('flickrRSS_after'))); ?&gt;&quot; size=&quot;10&quot; /&gt;
-          &lt;/td&gt;
-         &lt;/tr&gt;
-         &lt;/table&gt;      
-
-        &lt;h3&gt;Cache Settings&lt;/h3&gt;
-		&lt;p&gt;This allows you to store the images on your server and reduce the load on Flickr. Make sure the plugin works without the cache enabled first. If you're still having
-		trouble, try visiting the &lt;a href=&quot;http://eightface.com/forum/viewforum.php?id=3&quot;&gt;forum&lt;/a&gt;.&lt;/p&gt;
-		&lt;table class=&quot;form-table&quot;&gt;
-         &lt;tr valign=&quot;top&quot;&gt;
-          &lt;th scope=&quot;row&quot;&gt;URL&lt;/th&gt;
-          &lt;td&gt;&lt;input name=&quot;image_cache_uri&quot; type=&quot;text&quot; id=&quot;image_cache_uri&quot; value=&quot;&lt;?php echo get_option('flickrRSS_image_cache_uri'); ?&gt;&quot; size=&quot;50&quot; /&gt;
-          &lt;em&gt;http://yoursite.com/cache/&lt;/em&gt;&lt;/td&gt;
-         &lt;/tr&gt;
-         &lt;tr valign=&quot;top&quot;&gt;
-          &lt;th scope=&quot;row&quot;&gt;Full Path&lt;/th&gt;
-          &lt;td&gt;&lt;input name=&quot;image_cache_dest&quot; type=&quot;text&quot; id=&quot;image_cache_dest&quot; value=&quot;&lt;?php echo get_option('flickrRSS_image_cache_dest'); ?&gt;&quot; size=&quot;50&quot; /&gt; 
-          &lt;em&gt;/home/path/to/wp-content/flickrrss/cache/&lt;/em&gt;&lt;/td&gt;
-         &lt;/tr&gt;
-		 &lt;tr valign=&quot;top&quot;&gt;
-		  &lt;th scope=&quot;row&quot; colspan=&quot;2&quot; class=&quot;th-full&quot;&gt;
-		  &lt;input name=&quot;use_image_cache&quot; type=&quot;checkbox&quot; id=&quot;use_image_cache&quot; value=&quot;true&quot; &lt;?php if(get_option('flickrRSS_use_image_cache') == 'true') { echo 'checked=&quot;checked&quot;'; } ?&gt; /&gt;  
-		  &lt;label for=&quot;use_image_cache&quot;&gt;Enable the image cache&lt;/label&gt;&lt;/th&gt;
-		 &lt;/tr&gt;
-        &lt;/table&gt;
-        &lt;div class=&quot;submit&quot;&gt;
-           &lt;input type=&quot;submit&quot; name=&quot;save_flickrRSS_settings&quot; value=&quot;&lt;?php _e('Save Settings', 'save_flickrRSS_settings') ?&gt;&quot; /&gt;
-        &lt;/div&gt;
-        &lt;/form&gt;
-    &lt;/div&gt;
-
-&lt;?php } // end flickrRSS_subpanel()
+			return $settings;
+		}
+	
+		function getSettings() {
+			
+			if (!get_option('flickrRSS_settings')) $this-&gt;setupActivation();
+			
+			$settings = array(
+				/*== Content params ==*/
+				// The type of Flickr images that you want to show. Possible values: 'user', 'favorite', 'set', 'group', 'public'
+				'type' =&gt; 'public',
+				// Optional: To be used when type = 'user' or 'public', comma separated
+				'tags' =&gt; '',
+				// Optional: To be used when type = 'set' 
+				'set' =&gt; '',
+				// Optional: Your Group or User ID. To be used when type = 'user' or 'group'
+				'id' =&gt; '',
+				// Do you want caching?
+				'do_cache' =&gt; false,
+				// The image sizes to cache locally. Possible values: 'square', 'thumbnail', 'small', 'medium' or 'large', provided within an array
+				'cache_sizes' =&gt; array('square'),
+				// Where images are saved (Server path)
+				'cache_path' =&gt; '',
+				// The URI associated to the cache path (web address)
+				'cache_uri' =&gt; '',
+			
+				/*== Presentational params ==*/
+				 // The number of thumbnails you want
+				'num_items' =&gt; 4,
+				 // the HTML to print before the list of images
+				'before_list' =&gt; '',
+				// the code to print out for each image. Meta tags available:
+				// - %flickr_page%
+				// - %title%
+				// - %image_small%, %image_square%, %image_thumbnail%, %image_medium%, %image_large%
+				'html' =&gt; '&lt;a href=&quot;%flickr_page%&quot; title=&quot;%title%&quot;&gt;&lt;img src=&quot;%image_square%&quot; alt=&quot;%title%&quot;/&gt;&lt;/a&gt;',
+				// the default title
+				'default_title' =&gt; &quot;Untitled Flickr photo&quot;, 
+				// the HTML to print after the list of images
+				'after_list' =&gt; ''
+			);
+			if (get_option('flickrRSS_settings'))
+				$settings = array_merge($settings, get_option('flickrRSS_settings'));
+			return $settings;
+		}
+	
+		function getRSS($settings) {
+			if (!function_exists('MagpieRSS')) { 
+				// Check if another plugin is using RSS, may not work
+				include_once (ABSPATH . WPINC . '/rss.php');
+				error_reporting(E_ERROR);
+			}
+			// get the feeds
+			if ($settings['type'] == &quot;user&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/photos_public.gne?id=' . $settings['id'] . '&amp;tags=' . $settings['tags'] . '&amp;format=rss_200'; }
+			elseif ($settings['type'] == &quot;favorite&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/photos_faves.gne?id=' . $settings['id'] . '&amp;format=rss_200'; }
+			elseif ($settings['type'] == &quot;set&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/photoset.gne?set=' . $settings['set'] . '&amp;nsid=' . $settings['id'] . '&amp;format=rss_200'; }
+			elseif ($settings['type'] == &quot;group&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/groups_pool.gne?id=' . $settings['id'] . '&amp;format=rss_200'; }
+			elseif ($settings['type'] == &quot;public&quot;) { $rss_url = 'http://api.flickr.com/services/feeds/photos_public.gne?tags=' . $settings['tags'] . '&amp;format=rss_200'; }
+			else { 
+				print '&lt;strong&gt;No &quot;type&quot; parameter has been setup. Check your flickrRSS Settings page, or provide the parameter as an argument.&lt;/strong&gt;';
+				die();
+			}
+			# get rss file
+			return @fetch_rss($rss_url);
+		}
+	
+		function printGallery($settings = array()) {
+		
+			if (!is_array($settings)) {
+				$settings = $this-&gt;fixArguments(func_get_args());
+			}
+		
+			$settings = array_merge($this-&gt;getSettings(), $settings);
+			if (!($rss = $this-&gt;getRSS($settings))) return;
+			# specifies number of pictures
+			$items = array_slice($rss-&gt;items, 0, $settings['num_items']);
+			echo stripslashes($settings['before_list']);
+			# builds html from array
+			foreach ( $items as $item ) {
+				if(!preg_match('&lt;img src=&quot;([^&quot;]*)&quot; [^/]*/&gt;', $item['description'], $imgUrlMatches)) {
+					continue;
+				}
+				$baseurl = str_replace(&quot;_m.jpg&quot;, &quot;&quot;, $imgUrlMatches[1]);
+				$thumbnails = array(
+					'small' =&gt; $baseurl . &quot;_m.jpg&quot;,
+					'square' =&gt; $baseurl . &quot;_s.jpg&quot;,
+					'thumbnail' =&gt; $baseurl . &quot;_t.jpg&quot;,
+					'medium' =&gt; $baseurl . &quot;.jpg&quot;,
+					'large' =&gt; $baseurl . &quot;_b.jpg&quot;
+				);
+				#check if there is an image title (for html validation purposes)
+				if($item['title'] !== &quot;&quot;) 
+					$title = htmlspecialchars(stripslashes($item['title']));
+				else 
+					$title = $settings['default_title'];
+				$url = $item['link'];
+				$toprint = stripslashes($settings['html']);
+				$toprint = str_replace(&quot;%flickr_page%&quot;, $url, $toprint);
+				$toprint = str_replace(&quot;%title%&quot;, $title, $toprint);
+			
+				$cachePath = trailingslashit($settings['cache_uri']);
+				$fullPath = trailingslashit($settings['cache_path']);
+			
+				foreach ($thumbnails as $size =&gt; $thumbnail) {
+					if (
+							is_array($settings['cache_sizes']) &amp;&amp; 
+							in_array($size, $settings['cache_sizes']) &amp;&amp; 
+							$settings['do_cache'] == &quot;true&quot; &amp;&amp; 
+							$cachePath &amp;&amp; 
+							$fullPath &amp;&amp; 
+							strpos($settings['html'], &quot;%image_&quot;.$size.&quot;%&quot;)
+					) {
+						$img_to_cache = $thumbnail;
+						preg_match('&lt;http://farm[0-9]{0,3}\.static.flickr\.com/\d+?\/([^.]*)\.jpg&gt;', $img_to_cache, $flickrSlugMatches);
+						$flickrSlug = $flickrSlugMatches[1];
+						if (!file_exists(&quot;$fullPath$flickrSlug.jpg&quot;) ) {   
+							$localimage = fopen(&quot;$fullPath$flickrSlug.jpg&quot;, 'wb');
+							$remoteimage = wp_remote_fopen($img_to_cache);
+							$iscached = fwrite($localimage,$remoteimage);
+							fclose($localimage);
+						} else {
+							$iscached = true;
+						}
+						if($iscached) $thumbnail = &quot;$cachePath$flickrSlug.jpg&quot;;
+					}
+					$toprint = str_replace(&quot;%image_&quot;.$size.&quot;%&quot;, $thumbnail, $toprint);
+				}
+				echo $toprint;
+			}
+			echo stripslashes($settings['after_list']);
+		}
+	
+		function setupWidget() {
+			if (!function_exists('register_sidebar_widget')) return;
+			function widget_flickrRSS($args) {
+				extract($args);
+				$options = get_option('widget_flickrRSS');
+				$title = $options['title'];
+				echo $before_widget . $before_title . $title . $after_title;
+				get_flickrRSS();
+				echo $after_widget;
+			}
+			function widget_flickrRSS_control() {
+				$options = get_option('widget_flickrRSS');
+				if ( $_POST['flickrRSS-submit'] ) {
+					$options['title'] = strip_tags(stripslashes($_POST['flickrRSS-title']));
+					update_option('widget_flickrRSS', $options);
+				}
+				$title = htmlspecialchars($options['title'], ENT_QUOTES);
+				$settingspage = trailingslashit(get_option('siteurl')).'wp-admin/options-general.php?page='.basename(__FILE__);
+				echo 
+				'&lt;p&gt;&lt;label for=&quot;flickrRSS-title&quot;&gt;Title:&lt;input class=&quot;widefat&quot; name=&quot;flickrRSS-title&quot; type=&quot;text&quot; value=&quot;'.$title.'&quot; /&gt;&lt;/label&gt;&lt;/p&gt;'.
+				'&lt;p&gt;To control the other settings, please visit the &lt;a href=&quot;'.$settingspage.'&quot;&gt;flickrRSS Settings page&lt;/a&gt;.&lt;/p&gt;'.
+				'&lt;input type=&quot;hidden&quot; id=&quot;flickrRSS-submit&quot; name=&quot;flickrRSS-submit&quot; value=&quot;1&quot; /&gt;';
+			}
+			register_sidebar_widget('flickrRSS', 'widget_flickrRSS');
+			register_widget_control('flickrRSS', 'widget_flickrRSS_control');
+		}
+	
+		function setupSettingsPage() {
+			if (function_exists('add_options_page')) {
+				add_options_page('flickrRSS Settings', 'flickrRSS', 8, basename(__FILE__), array(&amp;$this, 'printSettingsPage'));
+			}
+		}
+	
+		function printSettingsPage() {
+			$settings = $this-&gt;getSettings();
+			if (isset($_POST['save_flickrRSS_settings'])) {
+				foreach ($settings as $name =&gt; $value) {
+					$settings[$name] = $_POST['flickrRSS_'.$name];
+				}
+				$settings['cache_sizes'] = array();
+				foreach (array(&quot;small&quot;, &quot;square&quot;, &quot;thumbnail&quot;, &quot;medium&quot;, &quot;large&quot;) as $size) {
+					if ($_POST['flickrRSS_cache_'.$size]) $settings['cache_sizes'][] = $size;
+				}
+				update_option('flickrRSS_settings', $settings);
+				echo '&lt;div class=&quot;updated&quot;&gt;&lt;p&gt;flickrRSS settings saved!&lt;/p&gt;&lt;/div&gt;';
+			}
+			if (isset($_POST['reset_flickrRSS_settings'])) {
+				delete_option('flickrRSS_settings');
+				echo '&lt;div class=&quot;updated&quot;&gt;&lt;p&gt;flickrRSS settings restored to default!&lt;/p&gt;&lt;/div&gt;';
+			}
+			include (&quot;flickrrss-settingspage.php&quot;);
+		}
+	}
+}
+$flickrRSS = new flickrRSS();
+add_action( 'admin_menu', array(&amp;$flickrRSS, 'setupSettingsPage') );
+add_action( 'plugins_loaded', array(&amp;$flickrRSS, 'setupWidget') );
+register_activation_hook( __FILE__, array( &amp;$flickrRSS, 'setupActivation' ));
 
-function flickrRSS_admin_menu() {
-   if (function_exists('add_options_page')) {
-        add_options_page('flickrRSS Settings', 'flickrRSS', 8, basename(__FILE__), 'flickrRSS_subpanel');
-        }
+function get_flickrRSS($settings = array()) {
+	global $flickrRSS;
+	if (func_num_args() &gt; 1 ) {
+		$old_array = func_get_args();
+		$flickrRSS-&gt;printGallery($flickrRSS-&gt;fixArguments($old_array));
+	}
+	else $flickrRSS-&gt;printGallery($settings);
 }
 
-add_action('admin_menu', 'flickrRSS_admin_menu'); 
-add_action('plugins_loaded', 'widget_flickrRSS_init');
 ?&gt;
\ No newline at end of file</diff>
      <filename>wordpress/wp-content/plugins/flickr-rss/flickrrss.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,9 @@
 === flickrRSS ===
 Contributors: eightface
 Tags: flickr, photos, images, sidebar, widget, rss
-Requires at least: 2.5
-Tested up to: 2.5
-Stable tag: 4.0
+Requires at least: 2.6
+Tested up to: 2.7.1
+Stable tag: 5.0
 
 Allows you to integrate Flickr photos into your site. It supports user, set, favorite, group and community photostreams.
 
@@ -15,7 +15,7 @@ This plugin allows you to easily display Flickr photos on your site. It supports
 
 == Installation ==
 
-1. Put flickrrss.php in your plugins directory
+1. Put the flickrRSS files into your plugins directory
 2. If you want to cache images, create a directory and make it writable
 3. Activate the plugin
 4. Configure your settings via the panel in Options
@@ -45,49 +45,48 @@ Sometimes it can take a little while to kick in, have patience. Flickr may possi
 = Will it work with video? =
 Yes, videos will be displayed as a thumbnail image. You'll need to click through to flickr to play it though.
 
-== Advanced ==
 
-The plugin also supports a number of parameters, allowing you to have multiple instances across your site.
+== Feedback and Support ==
+
+Visit the [flickrRSS forum](http://groups.google.com/group/flickrrss/) for help getting the plugin working and styling the photos. I'll do my best to respond, but sometimes I'm slow.
 
 
-1.	`$num_items` - how many photos you want to appear
-2.	`$type` - specify *user, set, favorite, group or community* photosream
-3.	`$tags` - a comma separated list of tags (with no spaces)
-4.	`$imagesize` - *square, thumbnail, medium or large*
-5.	`$before_image` - html appearing before each photo
-6.	`$after_image` - html appearing after each photo
-7.	`$id_number` - specify a user or group id
-8.	`$set_id` - specify the set id (found in set url)
+== Advanced ==
+
+The plugin also supports a number of parameters, allowing you to have multiple instances across your site.
 
+1. `'type' =&gt; 'user'` - The type of Flickr images that you want to show. Possible values: 'user', 'favorite', 'set', 'group', 'public'&lt;/li&gt;
+2. `'tags' =&gt; ''` - Optional: Can be used with type = 'user' or 'public', comma separated&lt;/li&gt;
+3. `'set' =&gt; ''` - Optional: To be used with type = 'set'&lt;/li&gt;
+4. `'id' =&gt; ''` - Optional: Your Group or User ID. To be used with type = 'user' or 'group'&lt;/li&gt;
+5. `'do_cache' =&gt; false` - Enable the image cache&lt;/li&gt;
+6. `'cache_sizes' =&gt; array('square')` - What are the image sizes we want to cache locally? Possible values: 'square', 'thumbnail', 'small', 'medium' or 'large'&lt;/li&gt;
+7. `'cache_path' =&gt; ''` - Where the images are saved (server path)&lt;/li&gt;
+8. `'cache_uri' =&gt; ''` - The URI associated to the cache path (web address)&lt;/li&gt;
+9. `'num_items' =&gt; 4` - The number of images that you want to display&lt;/li&gt;
+10. `'before_list' =&gt; ''` - The HTML to print before the list of images&lt;/li&gt;
+11. `'html' =&gt; '&lt;a href=&quot;%flickr_page%&quot; title=&quot;%title%&quot;&gt;&lt;img src=&quot;%image_square%&quot; alt=&quot;%title%&quot;&gt;&lt;/a&amp;&gt;'` - the code to print out for each image.
+	Meta tags available: %flickr_page%, %title%, %image_small%, %image_square%, %image_thumbnail%, %image_medium%, %image_large%
+12. `'default_title' =&gt; &quot;Untitled Flickr photo&quot;` - the default title&lt;/li&gt;
+13. `'after_list' =&gt; ''` - the HTML to print after the list of images&lt;/li&gt;
 
 **Example 1**
 
-`&lt;?php get_flickrRSS(10, &quot;community&quot;, &quot;london,people&quot;); ?&gt;`
+`&lt;?php get_flickrRSS(array('num_items' =&gt; 10, 'type' =&gt; 'public', 'tags' =&gt; 'london,people')); ?&gt;`
 This would show the 10 most recent community photos tagged with london and people. It won't
 show photos with only one of the tags.
 
 **Example 2**
 
-`&lt;?php get_flickrRSS(20, &quot;set&quot;, &quot;&quot;, &quot;thumbnail&quot;, &quot;&lt;li&gt;&quot;, &quot;&lt;/li&gt;&quot;, &quot;44124462494@N01&quot;, &quot;72157601681097311&quot;); ?&gt;`
+`&lt;?php get_flickrRSS(array('set' =&gt; '72157601681097311', 'num_items' =&gt; 20, 'type' =&gt; 'set', 'id' =&gt; '44124462494@N01')); ?&gt;`
 
 This would show the 20 most recent thumbnail sized photos from the specified user's set.
 
-**Example 3**
-
-`&lt;?php get_flickrRSS(5, &quot;group&quot;, &quot;&quot;, &quot;thumbnail&quot;, &quot;&lt;li&gt;&quot;, &quot;&lt;/li&gt;&quot;, &quot;34427469792@N01&quot;); ?&gt;`
-
-This would show the 5 most recent thumbnail sized photos from the Flickr central group, and each photo would be wrapped in list tags.
-
-
-== Feedback and Support ==
-
-Visit the [Eightface forum](http://eightface.com/forum/) for help getting the plugin working and styling the photos. I'll do my best to respond, but sometimes I'm slow.
-
-
 == Plugin History ==
 
-**Latest Release:** April 9, 2008
+**Latest Release:** January 25, 2009
 
+* 5.0 - Added more customization of presentation logic, separated core code from display, improved paramter system, many other changes
 * 4.0 - New interface for WP 2.5, support for sets and favorites, a few widget tweaks, some cleanup in the source
 * 3.5 - Co-released with 4.0, bringing support for sets and favorites to WP 2.3
 * 3.2.1 - Minor interface tweaks to avoid confusion</diff>
      <filename>wordpress/wp-content/plugins/flickr-rss/readme.txt</filename>
    </modified>
    <modified>
      <diff>@@ -1,261 +1,268 @@
-&#65279; Google XML Sitemaps Generator for WordPress
- ==============================================================================
- 
- This generator will create a sitemaps.org compliant sitemap of your WordPress blog.
- Currently homepage, posts, static pages, categories, archives and author pages are supported.
- 
- The priority of a post depends on its comments. You can choose the way the priority
- is calculated in the options screen.
- 
- Feel free to visit my website under www.arnebrachhold.de or contact me at
- himself [at] arnebrachhold [dot] de
- 
- Have fun! 
-   Arne
- 
- Installation:
- ==============================================================================
- 1. Upload the full directory into your wp-content/plugins directory
- 2. Make your blog directory writeable OR create two files called sitemap.xml 
-    and sitemap.xml.gz and make them writeable via CHMOD In most cases, your blog directory is already writeable.
- 2. Activate it in the Plugin options
- 3. Edit or publish a post or click on Rebuild Sitemap on the Sitemap Administration Interface
-  
- 
- Contributors:
- ==============================================================================
- Basic Idea             Michael Nguyen      http://www.socialpatterns.com/
- SQL Improvements       Rodney Shupe        http://www.shupe.ca/
- Japanse Lang. File     Hirosama            http://hiromasa.zone.ne.jp/
- Spanish lang. File     C&#65533;sar G&#65533;mez Mart&#65533;n  http://www.cesargomez.org/
- Italian lang. File     Stefano Aglietti    http://wordpress-it.it/
- Trad.Chinese  File     Kirin Lin           http://kirin-lin.idv.tw/
- Simpl.Chinese File     june6               http://www.june6.cn/
- Swedish Lang. File     Tobias Bergius      http://tobiasbergius.se/
- Czech Lang. File       Peter Kahoun        http://kahi.cz
- Ping Code Template 1   James               http://www.adlards.com/
- Ping Code Template 2   John                http://www.jonasblog.com/
- Bug Report             Brad                http://h3h.net/
- Bug Report             Christian Aust      http://publicvoidblog.de/
- Bug Report             Joseph Abboud
- Bug Report             Mike                http://baptiste.us/
- Bug Report             Peter               http://fastagent.de/
- Bug Report             Glenn               http://publicityship.com.au/
- Bug Report             froosh
- File Handling          VJTD3               http://www.vjtd3.com/
- 
- Code, Documentation, Hosting and all other Stuff:
-                        Arne Brachhold      http://www.arnebrachhold.de/
- 
- Thanks to all contributors and bug reporters! :)
- 
- 
- Release History:
- ==============================================================================
- 2005-06-05     1.0     First release
- 2005-06-05     1.1     Added archive support
- 2005-06-05     1.2     Added category support
- 2005-06-05     2.0a    Beta: Real Plugin! Static file generation, Admin UI
- 2005-06-05     2.0     Various fixes, more help, more comments, configurable filename
- 2005-06-07     2.01    Fixed 2 Bugs: 147 is now _e(strval($i)); instead of _e($i); 344 uses a full &lt; ?php instead of &lt; ?
-                        Thanks to Christian Aust for reporting this :)
- 2005-06-07     2.1     Correct usage of last modification date for cats and archives  (thx to Rodney Shupe (http://www.shupe.ca/))
-                        Added support for .gz generation
-                        Fixed bug which ignored different post/page priorities
-                        Should support now different wordpress/admin directories
- 2005-06-07     2.11    Fixed bug with hardcoded table table names instead of the $wpd vars
- 2005-06-07     2.12    Changed SQL Statement of the categories to get it work on MySQL 3 
- 2005-06-08     2.2     Added language file support:
-                        - Japanese Language Files and code modifications by hiromasa (http://hiromasa.zone.ne.jp/)
-                        - German Language File by Arne Brachhold (http://www.arnebrachhold.de)
- 2005-06-14     2.5     Added support for external pages
-                        Added support for Google Ping
-                        Added the minimum Post Priority option
-                        Added Spanish Language File by C&#65533;sar G&#65533;mez Mart&#65533;n (http://www.cesargomez.org/)
-                        Added Italian Language File by Stefano Aglietti (http://wordpress-it.it/)
-                        Added Traditional Chine Language File by Kirin Lin (http://kirin-lin.idv.tw/)
- 2005-07-03     2.6     Added support to store the files at a custom location
-                        Changed the home URL to have a slash at the end
-                        Required admin-functions.php so the script will work with external calls, wp-mail for example
-                        Added support for other plugins to add content to the sitemap via add_filter()
- 2005-07-20     2.7     Fixed wrong date format in additional pages
-                        Added Simplified Chinese Language Files by june6 (http://www.june6.cn/)
-                        Added Swedish Language File by Tobias Bergius (http://tobiasbergius.se/)
- 2006-01-07     3.0b    Added different priority calculation modes and introduced an API to create custom ones
-                        Added support to use the Popularity Contest plugin by Alex King to calculate post priority
-                        Added Button to restore default configuration
-                        Added several links to homepage and support
-                        Added option to exclude password protected posts
-                        Added function to start sitemap creation via GET and a secret key
-                        Posts and pages marked for publish with a date in the future won't be included
-                        Improved compatiblity with other plugins
-                        Improved speed and optimized settings handling
-                        Improved user-interface
-                        Recoded plugin architecture which is now fully OOP
- 2006-01-07     3.0b1   Changed the way for hook support to be PHP5 and PHP4 compatible
-                        Readded support for tools like w.Bloggar
-                        Fixed &quot;doubled-content&quot; bug with WP2
-                        Added xmlns to enable validation
- 2006-03-01     3.0b3   More performance
-                        More caching
-                        Better support for Popularity Contest and WP 2.x
- 2006-11-16     3.0b4   Fixed bug with option SELECTS
-                        Decreased memory usage which should solve timeout and memory problems
-                        Updated namespace to support YAHOO and MSN
- 2007-01-19     3.0b5   Javascripted page editor
-                        WP 2 Design
-                        YAHOO notification
-                        New status report, removed ugly logfiles
-                        Better Popularity Contest Support
-                        Fixed double backslashes on windows systems
-                        Added option to specify time limit and memory limit
-                        Added option to define a XSLT stylesheet and added a default one
-                        Fixed bug with sub-pages. Thanks to:
-                        - Mike Baptiste (http://baptiste.us),
-                        - Peter Claus Lamprecht (http://fastagent.de)
-                        - Glenn Nicholas (http://publicityship.com.au)
-                        Improved file handling, thanks to VJTD3 (http://www.VJTD3.com)
-                        WP 2.1 improvements
- 2007-01-23     3.0b6   Use memory_get_peak_usage instead of memory_get_usage if available
-                        Removed the usage of REQUEST_URI since it not correct in all environments
-                        Fixed that sitemap.xml.gz was not compressed
-                        Added compat function &quot;stripos&quot; for PHP4 (Thanks to Joseph Abboud!)
-                        Streamlined some code
- 2007-05-17     3.0b7   Added option to include the author pages like /author/john
-                        Small enhancements, removed stripos dependency and the added compat function
-                        Added check to not build the sitemap if importing posts
-                        Fixed missing domain parameter for translator name
-                        Fixed WP 2.1 / Pre 2.1 post / pages database changes
-                        Fixed wrong XSLT location (Thanks froosh)
-                        Added Ask.com notification
-                        Removed unused javascript
- 2007-07-22     3.0b8   Changed category SQL to prevent unused cats from beeing included
-                        Plugin will be loaded on &quot;init&quot; instead of direclty after the file has been loaded.
-                        Added support for robots.txt modification
-                        Switched YAHOO ping API from YAHOO Web Services to the &quot;normal&quot; ping service which doesn't require an app id
-                        Search engines will only be pinged if the sitemap file has changed
- 2007-09-02     3.0b9   Added tag support for WordPress 2.3
-                        Now using post_date_gmt instead of post_date everywhere
-                        Fixed archive bug with static pages (Thanks to Peter Claus Lamprecht)
-                        Fixed some missing translation domains, thanks to Kirin Lin!
-                        Added Czech translation files for 2.7.1, thanks to Peter Kahoun (http://kahi.cz)
- 2007-09-04     3.0b10  Added category support for WordPress 2.3
-                        Fixed bug with empty URLs in sitemap
-                        Repaired GET building
-                        Added more info on debug mode
- 2007-09-23     3.0b11  Changed mysql queries to unbuffered queries
-                        Uses MUCH less memory
-                        Fixed really stupid bug with search engine pings
-                        Option to set how many posts will be included
- 2007-09-24     3.0     Yeah, 3.0 Final after one and a half year ;)
-                        Removed useless functions
- 2007-11-03     3.0.1   Using the Snoopy HTTP client for ping requests instead of wp_remote_fopen
-                        Fixed undefined translation strings
-                        Added &quot;safemode&quot; for SQL which doesn't use unbuffered results (old style)
-                        Added option to run the building process in background using wp-cron
-                        Removed unnecessary function_exists, Thanks to user00265
-                        Added links to test the ping if it failed.
- 2007-11-25     3.0.2   Fixed bug which caused that some settings were not saved correctly
-                        Added option to exclude pages or post by ID
-                        Restored YAHOO ping service with API key since the other one is to unreliable. (see 3.0b8)
- 2007-11-28     3.0.2.1 Fixed wrong XML Schema Location (Thanks to Emanuele Tessore)
-                        Added Russian Language files by Sergey http://ryvkin.ru
- 2007-12-30     3.0.3   Added Live Search Ping
-                        Removed some hooks which rebuilt the sitemap with every comment
- 2008-03-30     3.0.3.1 Added compatibility CSS for WP 2.5
- 2008-04-28     3.0.3.2 Improved WP 2.5 handling
- 2008-04-29     3.0.3.3 Fixed author pages
-                        Enhanced background building and increased delay to 15 seconds
-                        Background building is enabled by default
- 2008-04-28     3.1b1   Reorganized files in builder, loader and UI
-                        Added 2 step loader so only code that's needed will be loaded
-                        Improved WP 2.5 handling
-                        Secured all admin actions with nonces
- 2008-05-18     3.1b2   Fixed critical bug with the build in background option
-                        Added notification if a build is scheduled
- 2008-05-19     3.1b3   Cleaned up plugin directory and moved asset files to subfolders
-                        Fixed background building bug in WP 2.1
-                        Removed auto-update plugin link for WP &lt; 2.5
- 2008-05-22     3.1     Marked as 3.1 stable, updated documentation
- 2008-05-27     3.1.0.1 Extracted UI JS to external file
-                        Enabled the option to include following pages of multi-page posts
-                        Script tries to raise memory and time limit if active
-
-                        
-                        
-
-
- Maybe Todo:
- ==============================================================================
- - Your wishes :)
- 
- 
- License:
- ==============================================================================
- Copyright 2005, 2006, 2007 ARNE BRACHHOLD  (email : himself - arnebrachhold - de)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- 
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- 
- 
- Developer Documentation
- ==============================================================================
- 
- Adding other pages to the sitemap via other plugins
- 
-  This plugin uses the action system of WordPress to allow other plugins
-  to add urls to the sitemap. Simply add your function with add_action to
-  the list and the plugin will execute yours every time the sitemap is build.
-  Use the static method &quot;GetInstance&quot; to get the generator and AddUrl method 
-  to add your content.
-  
-  Sample:
-  function your_