diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/RELEASE-NOTES ref158/RELEASE-NOTES
--- ref153/RELEASE-NOTES	2005-12-04 06:14:30.000000000 -0500
+++ ref158/RELEASE-NOTES	2006-03-26 14:38:24.000000000 -0500
@@ -3,6 +3,101 @@
 Security reminder: MediaWiki does not require PHP's register_globals
 setting since version 1.2.0. If you have it on, turn it *off* if you can.
 
+== MediaWiki 1.5.8 ==
+
+March 26, 2006
+
+MediaWiki 1.5.8 is a security and bugfix maintenance release.
+
+A bug in decoding of certain encoded links could allow injection of raw
+HTML into page output; this could potentially lead to XSS attacks.
+
+Some minor UI fixes were also made, see the change log at the bottom of
+this file.
+
+
+== MediaWiki 1.5.7 ==
+
+March 2, 2006
+
+MediaWiki 1.5.7 is a bugfix maintenance release.
+
+Most importantly, a security issue in the installer has been fixed. The bug 
+affects new installations of 1.5.6 only. If the user specified the MySQL root 
+password, to allow the installer to create an unprivileged account, the 
+installer would not only create the new account but also change the root 
+password to be equal to the password of the new account. 
+
+Anyone affected by this bug will need to change the root password back 
+manually. For information about how to change passwords in MySQL please see:
+http://dev.mysql.com/doc/refman/5.1/en/passwords.html
+
+This version includes fixes for compatibility with Internet Explorer 7
+beta 2, and various other bugs; see the full changelog at the end of
+the release notes.
+
+
+== MediaWiki 1.5.6 ==
+
+January 19, 2006
+
+MediaWiki 1.5.6 is a security and bugfix maintenance release.
+
+A bug in edit comment formatting could send PHP into an infinite loop
+if certain malformed links were included. In most installations, this
+would cause the script to fail after PHP's 30-second failsafe timeout.
+
+Some improvements have been made to the installer which should make
+installation possible on a system with a broken MySQL "root" account.
+
+For several other minor fixes, see the complete changelog at the end
+of this file.
+
+
+== MediaWiki 1.5.5 ==
+
+January 5, 2006
+
+MediaWiki 1.5.5 is a security and bugfix maintenance release.
+
+Detection for uploads of Windows Metafile (.wmf) images has been added
+to help protect against a client-side vulnerability in unpatched Microsoft
+Windows operating systems.
+
+Sites which have enabled uploads and added non-standard file types
+(such as .ogg, .doc, or .pdf) should upgrade to this release to ensure
+that malicious .wmf files can't be uploaded with a fake extension;
+such files could put visitors to the site at risk.
+
+For more details on this, see:
+http://en.wikipedia.org/wiki/Windows_Metafile_vulnerability
+
+Additionally, a maintenance script removeUnusedAccounts.php has been added;
+this replaces an older Perl script which had not been updated for the new
+schema in 1.5.
+
+
+== MediaWiki 1.5.4 ==
+
+December 21, 2005
+
+MediaWiki 1.5.4 is a security and bugfix maintenance release.
+
+A hardcoded internal placeholder string has been replaced with a random
+one. This closes a hole where security checks in inline style attributes
+could be bypassed, injecting JavaScript code that could execute in
+Microsoft Internet Explorer.
+
+Other browsers would not be vulnerable.
+
+Several minor fixes are included in this release, most notably a fix
+to clear the "you have new messages" flag properly for usernames
+containing spaces when e-mail notification is enabled.
+
+See the changelog at the end of the release notes for a full list of
+fixes.
+
+
 == MediaWiki 1.5.3 ==
 
 December 4, 2005
@@ -937,6 +1032,83 @@
 * (bug 4071) Generate passwords long enough for $wgMinimalPasswordLength
 * (bug 4035) Fix prev/next revision links on edit page
 * (bug 4165) Correct validation for user language selection (data taint)
+* Clearer message in DefaultSettings.php: edit LocalSettings.php instead
+
+
+=== Changes since 1.5.3 ===
+
+* (bug 3805) Clear 'new messages' flag properly in enotif mode
+  for usernames containing spaces
+* (bug 2714) Backlink from special:whatlinkshere was hard set as 'existing'
+* (bug 4249) Typo in entities2literals.pl
+* (bug 4233) Update for japanese language
+* (bug 4279) Small correction to LanguageDa.php
+* (bug 4267) Switch dv sd ug ks arc languages to RTL
+* (bug 3991) Allow the operation of wikicode on Protect move only text
+* Added AutoAuthenticate hook for external User object suppliers
+* Parser internal placeholder string now fully randomized for safety
+
+=== Changes since 1.5.4 ===
+
+* Maintenance script to delete unused user accounts
+* Added detection for WMF files (application/x-msmetafile), added this 
+  MIME type to the default blacklist. Prevented inline display of images
+  which are not of known image types. This is in response to
+  http://en.wikipedia.org/wiki/Windows_Metafile_vulnerability
+
+=== Changes since 1.5.5 ===
+
+* (bug 4258) When installing under IIS, $wgArticlePath = "$wgScript?title=$1" 
+  should be set
+* (bug 4510) Correct Barnes & Noble bookstore URLs
+* (bug 4504) Use site language for namespace name resolution
+* Installer fixes from HEAD backported; now uses a more sensible method of 
+  establishing which mySQL user to use, which clears up bug 921 et al. Minor 
+  changes to installer.
+* Fix problem reported on mailing list where re-initialising stats didn't work 
+  (can't insert duplicate rows with the same id field)
+* (bug 1122) gray out 'older revision' when viewing first article revision.
+* Respect database prefix in dumpHTML.inc
+* Minor improvements to removeUnusedAccounts.php maintenance script
+* Fix for single-digit week numbers from {{CURRENTWEEK}}, broken by PHP 4.4.1
+* Removed read-only check from Database::query()
+* Added --conf option to command line scripts, allowing the user to specify a 
+  different LocalSettings.php.
+
+=== Changes since 1.5.6 ===
+
+* Default main page content improved per bug 4690
+* Fix dependence on hardcoded UNIQ_PREFIX in LanguageConverter.php 
+* Fixed Special:Unlockdb
+* Maintenance script to delete unused text records
+* Maintenance script to delete non-current revisions
+* Maintenance script to wipe a page and all revisions from the database
+* (bug 4768) Wrong Russian translation (typo)
+* Performance bugfix: propagate equality manually for Revision fetches
+* (bug 4773) PHP fatal error when invalid title passed to Special:Export
+* Added missing table defs. for transcache to installer schemas
+* (bug 4824) IE7 beta 2 broke compatibility with PNG logo workarounds,
+  and seems to work ok with other bits. No longer including the IE
+  workarounds JavaScript for IE 7 and above.
+* (bug 2532) Image directory structure migration bug
+* (bug 4881) Correction to the fix for 1487; Ipblocklist showed 'no blocks'
+  message at the end of the list even if there were blocks.
+* (bug 4805) Removed more wikipedia-references from LanguageUk.php
+* Introduce $wgWantedPagesThreshold per bug 5011; Special:Wantedpages will not
+  list pages with less than this number of links. Defaults to 1.
+* Allow customisation of paging limits for items in categories using the
+  $wgCategoryPagingLimit global, per bug 4970.
+* Improve "nogomatch" text to make it more obvious that a page can be created.
+* (bug 5113) Spelling error in French language file
+* Don't change the password of the MySQL root user.
+
+=== Changes since 1.5.7 ===
+
+* (bug 5180) User login page shows inappropriate email blurb
+* Add the "AbortNewAccount" hook on account creation; see hooks.txt for more info.
+* Update default "exporttext" to reflect that Special:Import exists
+* Add links to useful material to the default main page content
+* Fix fragment HTML injection
 
 
 === Caveats ===
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/config/index.php ref158/config/index.php
--- ref153/config/index.php	2005-10-28 05:02:36.000000000 -0400
+++ ref158/config/index.php	2006-03-01 21:55:15.000000000 -0500
@@ -1,6 +1,7 @@
 <?php
+
 # MediaWiki web-based config/installation
-# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>, 2006 Rob Church <robchur@gmail.com>
 # http://www.mediawiki.org/
 #
 # This program is free software; you can redistribute it and/or modify
@@ -28,7 +29,7 @@
 <head>
 	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
 	<meta name="robots" content="noindex,nofollow">
-	<title>MediaWiki installation</title>
+	<title>MediaWiki 1.5 Installation</title>
 	<style type="text/css">
 	#credit {
 		float: right;
@@ -80,7 +81,7 @@
  </center>
 
  <p><strong><a href="http://www.mediawiki.org/">MediaWiki</a></strong> is
- Copyright (C) 2001-2005 by Magnus Manske, Brion Vibber, Lee Daniel Crocker,
+ Copyright (C) 2001-2006 by Magnus Manske, Brion Vibber, Lee Daniel Crocker,
  Tim Starling, Erik M&ouml;ller, Gabriel Wicke and others.</p>
 
  <ul>
@@ -244,7 +245,6 @@
 	$conf->safeMode = false;
 }
 
-
 $sapi = php_sapi_name();
 $conf->prettyURLs = true;
 print "<li>PHP server API is $sapi; ";
@@ -253,14 +253,15 @@
 case "apache2handler":
 	print "ok, using pretty URLs (<tt>index.php/Page_Title</tt>)";
 	break;
+default:
+	print "unknown; ";
 case "cgi":
 case "cgi-fcgi":
 case "apache2filter":
+case "isapi":
 	print "using ugly URLs (<tt>index.php?title=Page_Title</tt>)";
 	$conf->prettyURLs = false;
 	break;
-default:
-	print "unknown; using pretty URLs (<tt>index.php/Page_Title</tt>), if you have trouble change this in <tt>LocalSettings.php</tt>";
 }
 print "</li>\n";
 
@@ -382,7 +383,8 @@
 	$conf->DBpassword2 = importPost( "DBpassword2" );
 	$conf->DBprefix = importPost( "DBprefix" );
 	$conf->DBmysql5 = (importPost( "DBmysql5" ) == "true") ? "true" : "false";
-	$conf->RootPW = importPost( "RootPW" );
+	$conf->RootUser = importPost( "RootUser", "root" );
+	$conf->RootPW = importPost( "RootPW", "-" );
 	$conf->LanguageCode = importPost( "LanguageCode", "en" );
 	$conf->SysopName = importPost( "SysopName", "WikiSysop" );
 	$conf->SysopPass = importPost( "SysopPass" );
@@ -480,87 +482,82 @@
 				see <a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
 			 	>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b></li>\n";
 		}
-		print "<li>Trying to connect to MySQL on $wgDBserver as root...\n";
-		$wgDatabase = Database::newFromParams( $wgDBserver, "root", $conf->RootPW, "", 1 );
-
+		
+		# Determine how we're going to connect to the database
+		if( $conf->RootPW == '-' ) {
+			# Regular user
+			$conf->Root = false;
+			$db_user = $wgDBuser;
+			$db_pass = $wgDBpassword;
+		} else {
+			# Superuser
+			$conf->Root = true;
+			$db_user = $conf->RootUser;
+			$db_pass = $conf->RootPW;
+		}
+		
+		# Now attempt the connection
+		echo( "<li>Connecting to $wgDBname on $wgDBserver as $db_user..." );
+		$wgDatabase = Database::newFromParams( $wgDBserver, $db_user, $db_pass, "", 1 );
 		if( $wgDatabase->isOpen() ) {
+			# We're in; set up a few variables
+			$ok = true;
+			echo( "success.</li>\n" );
+			$wgDatabase->ignoreErrors( true );
 			$myver = mysql_get_server_info( $wgDatabase->mConn );
-			$wgDatabase->ignoreErrors(true);
-			$conf->Root = true;
-			print "<ul><li>Connected as root (automatic)</li></ul></li>\n";
+			$wgDBadminuser = $db_user;
+			$wgDBadminpassword = $db_pass;
 		} else {
-			print "<ul><li>MySQL error " . ($err = mysql_errno() ) .
-				": " . htmlspecialchars( mysql_error() ) . "</li></ul></li>";
+			# There was an error; if we recognise it, give some useful feedback
 			$ok = false;
-			switch( $err ) {
-			case 1045:
-			case 2000:
-				if( $conf->Root ) {
-					$errs["RootPW"] = "Check password";
-				} else {
-					print "<li>Trying regular user...\n";
-					/* Try the regular user... */
-					$wgDBadminuser = $wgDBuser;
-					$wgDBadminpassword = $wgDBpassword;
-					/* Wait one second for connection rate limiting, present on some systems */
-					sleep(1);
-					$wgDatabase = Database::newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, "", 1 );
-					if( !$wgDatabase->isOpen() ) {
-						print "<ul><li>MySQL error " . ($err = mysql_errno() ) .
-							": " . htmlspecialchars( mysql_error() ) . "</li></ul></li>";
-						$errs["DBuser"] = "Check name/pass";
-						$errs["DBpassword"] = "or enter root";
-						$errs["DBpassword2"] = "password below";
-						$errs["RootPW"] = "Got root?";
+			$errno = mysql_errno();
+			$errtx = htmlspecialchars( mysql_error() );
+			echo( "failed with error $errno: $errtx.</li>\n" );
+			switch( $errno ) {
+				case 1045:
+				case 2000:
+					# Authentication
+					if( $conf->Root ) {
+						# The superuser details are wrong
+						$errs["RootUser"] = "Check username";
+						$errs["RootPW"] = "and password";
 					} else {
-						$myver = mysql_get_server_info( $wgDatabase->mConn );
-						$wgDatabase->ignoreErrors(true);
-						$conf->Root = false;
-						$conf->RootPW = "";
-						print " ok.</li>\n";
-						# And keep going...
-						$ok = true;
+						# The regular user details are wrong
+						$errs["DBuser"] = "Check username";
+						$errs["DBpassword"] = "and password";
 					}
 					break;
-				}
-			case 2002:
-			case 2003:
-				$errs["DBserver"] = "Connection failed";
-				break;
-			default:
-				$errs["DBserver"] = "Couldn't connect to database ($err)";
-				break;
-			}
-			if( !$ok ) continue;
-		}
+				default:
+					# Something else
+					$errs["DBserver"] = "Couldn't connect to database";
+					break;
+			} # switch
+		} # conn att
 
-		if ( !$wgDatabase->isOpen() ) {
-			$errs["DBserver"] = "Couldn't connect to database";
-			continue;
-		}
+		if( !$ok ) continue;
 
-		print "<li>Connected to $myver";
+		# Print out the mySQL version and enable mySQL 4 enhancements as needed
+		echo( "<li>Connected to $myver" );
 		if( version_compare( $myver, "4.0.0" ) >= 0 ) {
-			print "; enabling MySQL 4 enhancements";
+			echo( "; using enhancements for mySQL 4.</li>" );
 			$conf->DBmysql4 = true;
 			$local = writeLocalSettings( $conf );
 		}
-		$mysqlNewAuth   = version_compare( $myver, "4.1.0", "ge" );
+		
+		# Check for possible authentication problems re. password encryption in newer mySQL versions
+		$mysqlNewAuth = version_compare( $myver, "4.1.0", "ge" );
 		if( $mysqlNewAuth && $mysqlOldClient ) {
-			print "; <b class='error'>You are using MySQL 4.1 server, but PHP is linked
-			 	to old client libraries; if you have trouble with authentication, see
-			 	<a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
-			 	>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b>";
+			echo( "<li><span class=\"error\"><strong>You are using mySQL 4.1, however, PHP is linked to older client libraries. If you encounter authentication problems, see <a href=\"http://dev.mysql.com/doc/mysql/en/old-client.html\">http://dev.mysql.com/doc/mysql/en/old-client.html</a> for pertinent solutions.</strong></span></li>\n" );
 		}
+		
+		# Check versions with regards to character sets, cough up an error if there are inconsistencies
 		if( $wgDBmysql5 ) {
 			if( $mysqlNewAuth ) {
-				print "; enabling MySQL 4.1/5.0 charset mode";
+				echo( "<li>Enabling mySQL 4.1/5.0 character set mode.</li>\n" );
 			} else {
-				print "; <b class='error'>MySQL 4.1/5.0 charset mode enabled,
-					but older version detected; will likely fail.</b>";
+				echo( "<li><span class=\"error\"><strong>mySQL 4.1/5.0 character set mode has been enabled, however, an older version of mySQL has been detected. This will likely cause the installation to fail.</li>\n" );
 			}
 		}
-		print "</li>\n";
 
 		@$sel = mysql_select_db( $wgDBname, $wgDatabase->mConn );
 		if( $sel ) {
@@ -630,10 +627,18 @@
 				       'ss_total_views'   => 0,
 				       'ss_total_edits'   => 0,
 				       'ss_good_articles' => 0 ) );
-			# setting up the db user
+
+
+			# Set up the DB user if we (i) can and (ii) need to
 			if( $conf->Root ) {
-				print "<li>Granting user permissions...</li>\n";
-				dbsource( "../maintenance/users.sql", $wgDatabase );
+				$db = Database::newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 );
+				if( $db->isOpen() ) {
+					$db->close();
+				} else {
+					print "<li>Granting user permissions...</li>\n";
+					dbsource( "../maintenance/users.sql", $wgDatabase );
+					$db->close();
+				}
 			}
 
 			if( $conf->SysopName ) {
@@ -976,15 +981,19 @@
 
 	<dd>
 		<?php
-		aField( $conf, "RootPW", "DB root password", "password" );
+		aField( $conf, "RootUser", "Super user:", "text" );
+		?>
+	</dd>
+
+	<dd>
+		<?php
+		aField( $conf, "RootPW", "Password:", "password" );
 		?>
 	</dd>
 	<dt>
-		You will only need this if the database and/or user account
-		above don't already exist.
-		Do <em>not</em> type in your machine's root password! MySQL
-		has its own "root" user with a separate password. (It might
-		even be blank, depending on your configuration.)
+		If the database user specified above does not exist, or does not have permissions to create
+		the database or tables required, please provide details of a superuser account, such as <strong>root</strong>,
+		which does. If this is not needed, leave the password set to <strong>-</strong>.
 	</dt>
 
 	<dd>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/docs/hooks.txt ref158/docs/hooks.txt
--- ref153/docs/hooks.txt	2005-08-17 15:48:56.000000000 -0400
+++ ref158/docs/hooks.txt	2006-03-08 14:49:34.000000000 -0500
@@ -237,6 +237,11 @@
 This is a list of known events and parameters; please add to it if
 you're going to add events to the MediaWiki code.
 
+'AbortNewAccount': Prior to user account creation
+$user: User object representing the account to be created
+$abortError: Error message that will be passed back to the form if
+account creation is cancelled
+
 'AddNewAccount': after a user account is created
 null: This hook passes null as an argument
 
@@ -282,6 +287,9 @@
 $iswatch: watch flag
 $section: section #
 
+'AutoAuthenticate': called to authenticate users on external/environmental means
+$user: writes user object to this parameter
+
 'BlockIp': before an IP address or user is blocked
 $block: the Block object about to be saved
 $user: the user _doing_ the block (not the one being blocked)
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/Article.php ref158/includes/Article.php
--- ref153/includes/Article.php	2005-11-16 04:34:30.000000000 -0500
+++ ref158/includes/Article.php	2006-02-14 16:49:25.000000000 -0500
@@ -1605,7 +1605,7 @@
 			$wgOut->setPageTitle( wfMsg( 'confirmprotect' ) );
 			$wgOut->setSubtitle( wfMsg( 'protectsub', $sub ) );
 			$wgOut->addWikiText( wfMsg( 'confirmprotecttext' ) );
-			$moveonly = htmlspecialchars( wfMsg( 'protectmoveonly' ) );
+			$moveonly = wfMsg( 'protectmoveonly' ) ; // add it using addWikiText to prevent xss. bug:3991
 			$protcom = htmlspecialchars( wfMsg( 'protectcomment' ) );
 			$formaction = $this->mTitle->escapeLocalURL( 'action=protect' . $par );
 		}
@@ -1631,7 +1631,10 @@
 				<input type='checkbox' name='wpMoveOnly' value='1' id='wpMoveOnly' />
 			</td>
 			<td align='left'>
-				<label for='wpMoveOnly'>{$moveonly}</label>
+				<label for='wpMoveOnly'> ");
+			$wgOut->addWikiText( $moveonly ); // bug 3991
+			$wgOut->addHTML( "
+				</label>
 			</td>
 		</tr> " );
 		}
@@ -2067,21 +2070,27 @@
 		# Update newtalk status if user is reading their own
 		# talk page
 
+		if (!wfRunHooks('UserClearNewTalkNotification', array(&$this)))
+			return;
+
 		global $wgUser;
-		if ($this->mTitle->getNamespace() == NS_USER_TALK &&
-			$this->mTitle->getText() == $wgUser->getName())
-		{
-			if ( $wgUseEnotif ) {
-				require_once( 'UserTalkUpdate.php' );
-				$u = new UserTalkUpdate( 0, $this->mTitle->getNamespace(), $this->mTitle->getDBkey(), false, false, false );
-			} else {
-				$wgUser->setNewtalk(0);
-				$wgUser->saveNewtalk();
+		if (wfRunHooks('ArticleEditUpdateNewTalk', array(&$this)) ) {
+			if ($this->mTitle->getNamespace() == NS_USER_TALK &&
+				$this->mTitle->getText() == $wgUser->getName())
+			{
+
+				if ( $wgUseEnotif ) {
+					require_once( 'UserTalkUpdate.php' );
+					$u = new UserTalkUpdate( 0, $this->mTitle->getNamespace(),
+						$this->mTitle->getDBkey(), false, false, false );
+				} else {
+					$wgUser->setNewtalk(0);
+					$wgUser->saveNewtalk();
+				}
+			} elseif ( $wgUseEnotif ) {
+				$wgUser->clearNotification( $this->mTitle );
 			}
-		} elseif ( $wgUseEnotif ) {
-			$wgUser->clearNotification( $this->mTitle );
 		}
-
 	}
 
 	/**
@@ -2147,8 +2156,12 @@
 	}
 
 	/**
-	 * @todo document this function
-	 * @private
+	 * Generate the navigation links when browsing through an article revisions
+	 * It shows the information as:
+	 *   Revision as of <date>; view current revision
+	 *   <- Previous version | Next Version ->
+	 *
+	 * @access private
 	 * @param string $oldid		Revision ID of this article revision
 	 */
 	function setOldSubtitle( $oldid=0 ) {
@@ -2160,7 +2173,10 @@
 		$lnk = $current
 			? wfMsg( 'currentrevisionlink' )
 			: $lnk = $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'currentrevisionlink' ) );
-		$prevlink = $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'previousrevision' ), 'direction=prev&oldid='.$oldid );
+		$prev = $this->mTitle->getPreviousRevisionID( $oldid ) ;
+		$prevlink = $prev
+			? $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'previousrevision' ), 'direction=prev&oldid='.$oldid )
+			: wfMsg( 'previousrevision' );
 		$nextlink = $current
 			? wfMsg( 'nextrevision' )
 			: $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'nextrevision' ), 'direction=next&oldid='.$oldid );
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/Block.php ref158/includes/Block.php
--- ref153/includes/Block.php	2005-07-25 02:57:12.000000000 -0400
+++ ref158/includes/Block.php	2006-02-05 18:13:34.000000000 -0500
@@ -170,6 +170,7 @@
 	
 	/**
 	 * Callback with a Block object for every block
+	 * @return integer number of blocks;
 	 */
 	/*static*/ function enumBlocks( $callback, $tag, $flags = 0 ) 
 	{
@@ -192,6 +193,7 @@
 		
 		$sql = "SELECT * FROM $ipblocks ORDER BY ipb_timestamp DESC $options";
 		$res = $db->query( $sql, 'Block::enumBans' );
+		$num_rows = $db->numRows( $res );
 
 		while ( $row = $db->fetchObject( $res ) ) {
 			$block->initFromRow( $row );
@@ -204,6 +206,7 @@
 			}
 		}
 		wfFreeResult( $res );
+		return $num_rows;
 	}
 
 	function delete() 
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/CategoryPage.php ref158/includes/CategoryPage.php
--- ref153/includes/CategoryPage.php	2005-07-14 01:45:51.000000000 -0400
+++ ref158/includes/CategoryPage.php	2006-02-22 20:15:30.000000000 -0500
@@ -64,7 +64,7 @@
 	 * @access private
 	 */
 	function doCategoryMagic( $from = '', $until = '' ) {
-		global $wgContLang,$wgUser, $wgCategoryMagicGallery;
+		global $wgContLang,$wgUser, $wgCategoryMagicGallery, $wgCategoryPagingLimit;
 		$fname = 'CategoryPage::doCategoryMagic';
 		wfProfileIn( $fname );
 
@@ -88,7 +88,7 @@
 			$pageCondition = '1';
 			$flip = false;
 		}
-		$limit = 200;
+		$limit = $wgCategoryPagingLimit;
 		$res = $dbr->select(
 			array( 'page', 'categorylinks' ),
 			array( 'page_title', 'page_namespace', 'page_len', 'cl_sortkey' ),
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/Database.php ref158/includes/Database.php
--- ref153/includes/Database.php	2005-10-25 21:10:44.000000000 -0400
+++ ref158/includes/Database.php	2006-02-11 21:13:37.000000000 -0500
@@ -298,17 +298,6 @@
 	 */
 	function query( $sql, $fname = '', $tempIgnore = false ) {
 		global $wgProfiling, $wgCommandLineMode;
-		
-		if ( wfReadOnly() ) {
-			# This is a quick check for the most common kinds of write query used 
-			# in MediaWiki, to provide extra safety in addition to UI-level checks. 
-			# It is not intended to prevent every conceivable write query, or even 
-			# to handle such queries gracefully.
-			if ( preg_match( '/^(update|insert|replace|delete)/i', $sql ) ) {
-				wfDebug( "Write query from $fname blocked\n" );
-				return false;
-			}
-		}
 
 		if ( $wgProfiling ) {
 			# generalizeSQL will probably cut down the query to reasonable
@@ -639,7 +628,7 @@
 		$table = $this->tableName( $table );
 		$sql = "UPDATE $table SET $var = '" .
 		  $this->strencode( $value ) . "' WHERE ($cond)";
-		return (bool)$this->query( $sql, DB_MASTER, $fname );
+		return (bool)$this->query( $sql, $fname );
 	}
 	
 	/**
@@ -794,7 +783,7 @@
 	 */
 	function fieldExists( $table, $field, $fname = 'Database::fieldExists' ) {
 		$table = $this->tableName( $table );
-		$res = $this->query( 'DESCRIBE '.$table, DB_SLAVE, $fname );
+		$res = $this->query( 'DESCRIBE '.$table, $fname );
 		if ( !$res ) {
 			return NULL;
 		}
@@ -1258,14 +1247,19 @@
 	 * $conds may be "*" to copy the whole table
 	 * srcTable may be an array of tables.
 	 */
-	function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = 'Database::insertSelect' ) {
+	function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = 'Database::insertSelect', 
+		$options = array() ) 
+	{
 		$destTable = $this->tableName( $destTable );
-                if( is_array( $srcTable ) ) {
-                        $srcTable =  implode( ',', array_map( array( &$this, 'tableName' ), $srcTable ) );
+		if ( is_array( $options ) ) {
+			$options = implode( ' ', $options );
+		}
+		if( is_array( $srcTable ) ) {
+			$srcTable =  implode( ',', array_map( array( &$this, 'tableName' ), $srcTable ) );
 		} else { 
 			$srcTable = $this->tableName( $srcTable );
 		}
-		$sql = "INSERT INTO $destTable (" . implode( ',', array_keys( $varMap ) ) . ')' .
+		$sql = "INSERT $options INTO $destTable (" . implode( ',', array_keys( $varMap ) ) . ')' .
 			' SELECT ' . implode( ',', $varMap ) . 
 			" FROM $srcTable";
 		if ( $conds != '*' ) {
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/DefaultSettings.php ref158/includes/DefaultSettings.php
--- ref153/includes/DefaultSettings.php	2005-12-04 06:17:01.000000000 -0500
+++ ref158/includes/DefaultSettings.php	2006-03-26 14:38:24.000000000 -0500
@@ -1,8 +1,11 @@
 <?php
 /**
- * DO NOT EDIT THIS FILE!
  *
- * To customize your installation, edit "LocalSettings.php".
+ *                 DO NOT EVER EDIT THIS FILE!
+ *
+ *
+ * To customize your installation, edit "LocalSettings.php". If you make
+ * changes here, they will be lost on next upgrade of MediaWiki!
  *
  * Note that since all these string interpolations are expanded
  * before LocalSettings is included, if you localize something
@@ -10,7 +13,7 @@
  * depends on it.
  *
  * Documentation is in the source and on:
- * http://meta.wikimedia.org/wiki/Help:Configuration_settings_index
+ * http://www.mediawiki.org/wiki/Help:Configuration_settings
  *
  * @package MediaWiki
  */
@@ -28,7 +31,7 @@
 $wgConf = new SiteConfiguration;
 
 /** MediaWiki version number */
-$wgVersion			= '1.5.3';
+$wgVersion			= '1.5.8';
 
 /** Name of the site. It must be changed in LocalSettings.php */
 $wgSitename         = 'MediaWiki';
@@ -629,7 +632,7 @@
 $wgDebugRawPage         = false; # Avoid overlapping debug entries by leaving out CSS
 
 $wgDebugComments        = false;
-$wgReadOnly             = false;
+$wgReadOnly             = null;
 $wgLogQueries           = false;
 $wgDebugDumpSql         = false;
 
@@ -917,6 +920,8 @@
 $wgUseWatchlistCache = false;
 /** The hour or so mentioned above */
 $wgWLCacheTimeout = 3600;
+/** Minimum number of links to a page required before it appears on Special:Wantedpages */
+$wgWantedPagesThreshold = 1;
 
 /**
  * To use inline TeX, you need to compile 'texvc' (in the 'math' subdirectory of
@@ -1035,7 +1040,9 @@
 	# PHP scripts may execute arbitrary code on the server
 	'application/x-php', 'text/x-php',
 	# Other types that may be interpreted by some servers
-	'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh'
+	'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh',
+	# Windows metafile, client-side vulnerability on some systems
+	'application/x-msmetafile'
 );
 
 /** This is a flag to determine whether or not to check file extensions on upload. */
@@ -1383,6 +1390,11 @@
 $wgCategoryMagicGallery = true;
 
 /**
+ * Paging limit for items in categories
+ */
+$wgCategoryPagingLimit = 200;
+
+/**
  * Browser Blacklist for unicode non compliant browsers
  * Contains a list of regexps : "/regexp/"  matching problematic browsers
  */
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/EditPage.php ref158/includes/EditPage.php
--- ref153/includes/EditPage.php	2005-12-01 06:08:59.000000000 -0500
+++ ref158/includes/EditPage.php	2006-01-07 08:38:54.000000000 -0500
@@ -1009,7 +1009,7 @@
 	 * The necessary JavaScript code can be found in style/wikibits.js.
 	 */
 	function getEditToolbar() {
-		global $wgStylePath, $wgLang, $wgMimeType, $wgJsMimeType;
+		global $wgStylePath, $wgContLang, $wgMimeType, $wgJsMimeType;
 
 		/**
 		 * toolarray an array of arrays which each include the filename of
@@ -1059,14 +1059,14 @@
 					'key'	=>	'H'
 				),
 			array(	'image'=>'button_image.png',
-					'open'	=>	'[['.$wgLang->getNsText(NS_IMAGE).":",
+					'open'	=>	'[['.$wgContLang->getNsText(NS_IMAGE).":",
 					'close'	=>	']]',
 					'sample'=>	wfMsg('image_sample'),
 					'tip'	=>	wfMsg('image_tip'),
 					'key'	=>	'D'
 				),
 			array(	'image'	=>'button_media.png',
-					'open'	=>	'[['.$wgLang->getNsText(NS_MEDIA).':',
+					'open'	=>	'[['.$wgContLang->getNsText(NS_MEDIA).':',
 					'close'	=>	']]',
 					'sample'=>	wfMsg('media_sample'),
 					'tip'	=>	wfMsg('media_tip'),
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/GlobalFunctions.php ref158/includes/GlobalFunctions.php
--- ref153/includes/GlobalFunctions.php	2005-10-28 05:40:10.000000000 -0400
+++ ref158/includes/GlobalFunctions.php	2006-01-26 01:54:09.000000000 -0500
@@ -245,20 +245,19 @@
 function wfReadOnly() {
 	global $wgReadOnlyFile, $wgReadOnly;
 
-	if ( $wgReadOnly ) {
-		return true;
+	if ( !is_null( $wgReadOnly ) ) {
+		return (bool)$wgReadOnly;
 	}
 	if ( '' == $wgReadOnlyFile ) {
 		return false;
 	}
 	
-	// Set $wgReadOnly and unset $wgReadOnlyFile, for faster access next time
+	// Set $wgReadOnly for faster access next time
 	if ( is_file( $wgReadOnlyFile ) ) {
 		$wgReadOnly = file_get_contents( $wgReadOnlyFile );
 	} else {
 		$wgReadOnly = false;
 	}
-	$wgReadOnlyFile = '';
 	return $wgReadOnly;
 }
 
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/Image.php ref158/includes/Image.php
--- ref153/includes/Image.php	2005-09-19 02:18:33.000000000 -0400
+++ ref158/includes/Image.php	2006-02-02 02:26:28.000000000 -0500
@@ -960,12 +960,40 @@
 		$thumbName = $this->thumbName( $width, $this->fromSharedDirectory );
 		$thumbPath = wfImageThumbDir( $this->name, $this->fromSharedDirectory ).'/'.$thumbName;
 
+		if ( is_dir( $thumbPath ) ) {
+			// Directory where file should be
+			// This happened occasionally due to broken migration code in 1.5
+			// Rename to broken-*
+			global $wgUploadDirectory;
+			for ( $i = 0; $i < 100 ; $i++ ) {
+				$broken = "$wgUploadDirectory/broken-$i-$thumbName";
+				if ( !file_exists( $broken ) ) {
+					rename( $thumbPath, $broken );
+					break;
+				}
+			}
+			// Code below will ask if it exists, and the answer is now no
+			clearstatcache();
+		}
+
 		if ( !file_exists( $thumbPath ) ) {
 			$oldThumbPath = wfDeprecatedThumbDir( $thumbName, 'thumb', $this->fromSharedDirectory ).
 				'/'.$thumbName;
 			$done = false;
-			if ( file_exists( $oldThumbPath ) ) {
+
+			// Migration from old directory structure
+			if ( is_file( $oldThumbPath ) ) {
 				if ( filemtime($oldThumbPath) >= filemtime($this->imagePath) ) {
+					if ( file_exists( $thumbPath ) ) {
+						if ( !is_dir( $thumbPath ) ) {
+							// Old image in the way of rename
+							unlink( $thumbPath );
+						} else {
+							// This should have been dealt with already
+							wfDebugDieBacktrace( "Directory where image should be: $thumbPath" );
+						}
+					}
+					// Rename the old image into the new location
 					rename( $oldThumbPath, $thumbPath );
 					$done = true;
 				} else {
@@ -1542,7 +1570,11 @@
 			umask( $oldumask );
 		}
 
-		if ( ! is_dir( $dir ) ) { 
+		if ( ! is_dir( $dir ) ) {
+			if ( is_file( $dir ) ) {
+				// Old thumbnail in the way of directory creation, kill it
+				unlink( $dir );
+			}
 			$oldumask = umask(0);
 			@mkdir( $dir, 0777 ); 
 			umask( $oldumask );
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/Linker.php ref158/includes/Linker.php
--- ref153/includes/Linker.php	2005-09-12 18:48:17.000000000 -0400
+++ ref158/includes/Linker.php	2006-01-19 01:24:56.000000000 -0500
@@ -373,6 +373,10 @@
 		global $wgContLang, $wgUser, $wgThumbLimits;
 		
 		$img   = new Image( $nt );
+		if ( !$img->allowInlineDisplay() ) {
+			return $this->makeKnownLinkObj( $nt );
+		}
+
 		$url   = $img->getViewURL();
 		$prefix = $postfix = '';
 		
@@ -591,7 +595,7 @@
 	 * @access public
 	 * @todo Handle invalid or missing images better.
 	 */
-	function makeMediaLinkObj( $title, $text = '', $nourl=false ) {
+	function makeMediaLinkObj( $title, $text = '' ) {
 		if( is_null( $title ) ) {
 			### HOTFIX. Instead of breaking, return empty string.
 			return $text;
@@ -600,9 +604,6 @@
 			$img  = new Image( $title );
 			if( $img->exists() ) {
 				$url  = $img->getURL();
-				if( $nourl ) {
-					$url = str_replace( "http://", UNIQ_PREFIX . "NOPARSEhttp://", $url );
-				}
 				$class = 'internal';
 			} else {
 				$upload = Title::makeTitle( NS_SPECIAL, 'Upload' );
@@ -716,6 +717,8 @@
 					$match[1] = substr($match[1], 1);
 				$thelink = $this->makeLink( $match[1], $text, "", $trail );
 			}
+			# Quote backreferences, then run preg_replace
+			$thelink = strtr( $thelink, array( "\\" => "\\\\", '$' => "\\$" ) );
 			$comment = preg_replace( $linkRegexp, $thelink, $comment, 1 );
 		}
 		wfProfileOut( $fname );
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/MessageCache.php ref158/includes/MessageCache.php
--- ref153/includes/MessageCache.php	2005-07-30 20:25:55.000000000 -0400
+++ ref158/includes/MessageCache.php	2006-02-11 06:38:26.000000000 -0500
@@ -306,6 +306,9 @@
 			}
 		}
 
+		# Call message Hooks, in case they are defined
+		wfRunHooks('MessagesPreLoad',array($title,&$message));
+
 		# If it wasn't in the cache, load each message from the DB individually
 		if ( !$message ) {
 			$revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) );
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/MimeMagic.php ref158/includes/MimeMagic.php
--- ref153/includes/MimeMagic.php	2005-10-08 01:58:36.000000000 -0400
+++ ref158/includes/MimeMagic.php	2006-01-02 21:50:43.000000000 -0500
@@ -339,14 +339,21 @@
 		$fname = 'MimeMagic::guessMimeType';
 		$mime= $this->detectMimeType($file,$useExt);
 		
-		if (strpos($mime,"text/")===0 ||
-		    $mime==="application/xml") {
+		// Read a chunk of the file
+		$f = fopen( $file, "rt" );
+		if( !$f ) return "unknown/unknown";
+		$head = fread( $f, 1024 );
+		fclose( $f );
+		
+		$sub4 =  substr( $head, 0, 4 );
+		if ( $sub4 == "\x01\x00\x09\x00" || $sub4 == "\xd7\xcd\xc6\x9a" ) {
+			// WMF kill kill kill
+			// Note that WMF may have a bare header, no magic number.
+			// The former of the above two checks is theoretically prone to false positives
+			$mime = "application/x-msmetafile";
+		}
 		
-			// Read a chunk of the file
-			$f = fopen( $file, "rt" );
-			if( !$f ) return "unknown/unknown";
-			$head = fread( $f, 1024 );
-			fclose( $f );
+		if (strpos($mime,"text/")===0 || $mime==="application/xml") {
 			
 			$xml_type= NULL;
 			$script_type= NULL;
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/Parser.php ref158/includes/Parser.php
--- ref153/includes/Parser.php	2005-11-02 19:37:45.000000000 -0500
+++ ref158/includes/Parser.php	2006-03-26 14:38:24.000000000 -0500
@@ -43,9 +43,6 @@
 # may want to use in wikisyntax
 define( 'STRIP_COMMENTS', 'HTMLCommentStrip' );
 
-# prefix for escaping, used in two functions at least
-define( 'UNIQ_PREFIX', 'NaodW29');
-
 # Constants needed for external link processing
 define( 'HTTP_PROTOCOLS', 'http:\/\/|https:\/\/' );
 # Everything except bracket, space, or control characters
@@ -101,7 +98,7 @@
 	# Cleared with clearState():
 	var $mOutput, $mAutonumber, $mDTopen, $mStripState = array();
 	var $mVariables, $mIncludeCount, $mArgStack, $mLastSection, $mInPre;
-	var $mInterwikiLinkHolders, $mLinkHolders;
+	var $mInterwikiLinkHolders, $mLinkHolders, $mUniqPrefix;
 
 	# Temporary:
 	var $mOptions, $mTitle, $mOutputType,
@@ -153,6 +150,16 @@
 			'texts' => array(),
 			'titles' => array()
 		);
+		$this->mUniqPrefix = 'UNIQ' . Parser::getRandomString();
+	}
+
+	/**
+	 * Accessor for mUniqPrefix.
+	 *
+	 * @access public
+	 */
+	function UniqPrefix() {
+		return $this->mUniqPrefix;
 	}
 
 	/**
@@ -349,7 +356,7 @@
 		$gallery_content = array();
 
 		# Replace any instances of the placeholders
-		$uniq_prefix = UNIQ_PREFIX;
+		$uniq_prefix = $this->mUniqPrefix;
 		#$text = str_replace( $uniq_prefix, wfHtmlEscapeFirst( $uniq_prefix ), $text );
 
 		# html
@@ -426,7 +433,7 @@
 				$full_tag = $ext_tags[$tag][$marker];
 				$params = $ext_params[$tag][$marker];
 				if ( $render ) {
-					$ext_content[$tag][$marker] = $callback( $content, $params );
+					$ext_content[$tag][$marker] = call_user_func_array( $callback, array( $content, $params, &$this ) );;
 				} else {
 					$ext_content[$tag][$marker] = "$full_tag$content</$tag>";
 				}
@@ -508,7 +515,7 @@
 	 * @access private
 	 */
 	function insertStripItem( $text, &$state ) {
-		$rnd = UNIQ_PREFIX . '-item' . Parser::getRandomString();
+		$rnd = $this->mUniqPrefix . '-item' . Parser::getRandomString();
 		if ( !$state ) {
 			$state = array(
 			  'html' => array(),
@@ -777,7 +784,7 @@
 
 		# replaceInternalLinks may sometimes leave behind
 		# absolute URLs, which have to be masked to hide them from replaceExternalLinks
-		$text = str_replace(UNIQ_PREFIX."NOPARSE", "", $text);
+		$text = str_replace($this->mUniqPrefix."NOPARSE", "", $text);
 
 		$text = $this->doMagicLinks( $text );
 		$text = $this->doTableStuff( $text );
@@ -1282,12 +1289,17 @@
 					$m[3] = $n[1];
 				}
 				# fix up urlencoded title texts
-				if(preg_match('/%/', $m[1] )) $m[1] = urldecode($m[1]);
+				//if(preg_match('/%/', $m[1] )) $m[1] = urldecode($m[1]);
+				if(preg_match('/%/', $m[1] )) 
+					# Should anchors '#' also be rejected?
+					$m[1] = str_replace( array('<', '>'), array('&lt;', '&gt;'), urldecode($m[1]) );
 				$trail = $m[3];
 			} elseif( preg_match($e1_img, $line, $m) ) { # Invalid, but might be an image with a link in its caption
 				$might_be_img = true;
 				$text = $m[2];
-				if(preg_match('/%/', $m[1] )) $m[1] = urldecode($m[1]);
+				if(preg_match('/%/', $m[1] )) 
+					# Should anchors '#' also be rejected?
+					$m[1] = str_replace( array('<', '>'), array('&lt;', '&gt;'), urldecode($m[1]) );
 				$trail = "";
 			} else { # Invalid form; output directly
 				$s .= $prefix . '[[' . $line ;
@@ -1393,7 +1405,7 @@
 						$text = $this->replaceInternalLinks($text);
 
 						# cloak any absolute URLs inside the image markup, so replaceExternalLinks() won't touch them
-						$s .= $prefix . preg_replace("/\b($wgUrlProtocols)/", UNIQ_PREFIX."NOPARSE$1", $this->makeImage( $nt, $text) ) . $trail;
+						$s .= $prefix . preg_replace( "/\b($wgUrlProtocols)/", "{$this->mUniqPrefix}NOPARSE$1", $this->makeImage( $nt, $text) ) . $trail;
 						$wgLinkCache->addImageLinkObj( $nt );
 
 						wfProfileOut( "$fname-image" );
@@ -1445,7 +1457,9 @@
 
 			# Special and Media are pseudo-namespaces; no pages actually exist in them
 			if( $ns == NS_MEDIA ) {
-				$s .= $prefix . $sk->makeMediaLinkObj( $nt, $text, true ) . $trail;
+				$link = $sk->makeMediaLinkObj( $nt, $text );
+				# Cloak with NOPARSE to avoid replacement in replaceExternalLinks
+				$s .= $prefix . str_replace( 'http://', "http{$this->mUniqPrefix}NOPARSE://", $link ) . $trail;
 				$wgLinkCache->addImageLinkObj( $nt );
 				continue;
 			} elseif( $ns == NS_SPECIAL ) {
@@ -1751,12 +1765,11 @@
 			if( 0 == $prefixLength ) {
 				wfProfileIn( "$fname-paragraph" );
 				# No prefix (not in list)--go to paragraph mode
-				$uniq_prefix = UNIQ_PREFIX;
 				// XXX: use a stack for nestable elements like span, table and div
 				$openmatch = preg_match('/(<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
 				$closematch = preg_match(
 					'/(<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|'.
-					'<td|<th|<div|<\\/div|<hr|<\\/pre|<\\/p|'.$uniq_prefix.'-pre|<\\/li|<\\/ul)/iS', $t );
+					'<td|<th|<div|<\\/div|<hr|<\\/pre|<\\/p|'.$this->mUniqPrefix.'-pre|<\\/li|<\\/ul)/iS', $t );
 				if ( $openmatch or $closematch ) {
 					$paragraphStack = false;
 					$output .= $this->closeParagraph();
@@ -1910,7 +1923,7 @@
 			case MAG_CURRENTTIME:
 				return $varCache[$index] = $wgContLang->time( wfTimestampNow(), false );
 			case MAG_CURRENTWEEK:
-				return $varCache[$index] = $wgContLang->formatNum( date('W') );
+				return $varCache[$index] = $wgContLang->formatNum( intval( date('W') ) );
 			case MAG_CURRENTDOW:
 				return $varCache[$index] = $wgContLang->formatNum( date('w') );
 			case MAG_NUMBEROFARTICLES:
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/Revision.php ref158/includes/Revision.php
--- ref153/includes/Revision.php	2005-09-30 18:06:40.000000000 -0400
+++ ref158/includes/Revision.php	2006-01-27 05:07:06.000000000 -0500
@@ -63,16 +63,13 @@
 	 * @access public
 	 */
 	function loadFromPageId( &$db, $pageid, $id = 0 ) {
+		$conds=array('page_id=rev_page','rev_page'=>intval( $pageid ), 'page_id'=>intval( $pageid ));
 		if( $id ) {
-			$matchId = IntVal( $id );
+			$conds['rev_id']=intval($id);
 		} else {
-			$matchId = 'page_latest';
+			$conds[]='rev_id=page_latest';
 		}
-		return Revision::loadFromConds(
-			$db,
-			array( "rev_id=$matchId",
-			       'rev_page' => IntVal( $pageid ),
-			       'page_id=rev_page' ) );
+		return Revision::loadFromConds( $db, $conds );
 	}
 	
 	/**
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/Setup.php ref158/includes/Setup.php
--- ref153/includes/Setup.php	2006-04-12 17:49:25.000000000 -0400
+++ ref158/includes/Setup.php	2006-04-15 00:38:19.000000000 -0400
@@ -117,7 +117,17 @@
 wfProfileOut( $fname.'-memcached' );
 wfProfileIn( $fname.'-SetupSession' );
 
-if( !$wgCommandLineMode && ( isset( $_COOKIE[session_name()] ) || isset( $_COOKIE[$wgDBname.'Token'] ) ) ) {
+if ( $wgDBprefix ) {
+	$wgCookiePrefix = str_replace("+", "", $wgDBname . '_' . $wgDBprefix);
+} elseif ( $wgSharedDB ) {
+	$wgCookiePrefix = $wgSharedDB;
+} else {
+	$wgCookiePrefix = str_replace("+", "", $wgDBname);
+}
+
+session_name( $wgCookiePrefix . '_session' );
+
+if( !$wgCommandLineMode && ( isset( $_COOKIE[session_name()] ) || isset( $_COOKIE[$wgCookiePrefix.'Token'] ) ) ) {
 	User::SetupSession();
 	$wgSessionStarted = true;
 } else {
@@ -200,7 +210,11 @@
 	# Prevent loading User settings from the DB.
 	$wgUser->setLoaded( true );
 } else {
-	$wgUser = User::loadFromSession();
+        $wgUser = null;
+	wfRunHooks('AutoAuthenticate',array(&$wgUser));
+	if ($wgUser === null) {
+		$wgUser = User::loadFromSession();
+	}
 }
 
 wfProfileOut( $fname.'-User' );
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/SkinTemplate.php ref158/includes/SkinTemplate.php
--- ref153/includes/SkinTemplate.php	2005-09-02 01:19:37.000000000 -0400
+++ ref158/includes/SkinTemplate.php	2006-02-14 17:39:39.000000000 -0500
@@ -150,6 +150,7 @@
 		global $wgMaxCredits, $wgShowCreditsIfMax;
 		global $wgPageShowWatchingUsers;
 		global $wgUseTrackbacks;
+		global $wgDBname;
 
 		$fname = 'SkinTemplate::outputPage';
 		wfProfileIn( $fname );
@@ -264,7 +265,9 @@
 		} else {
 			$tpl->set('jsvarurl', false);
 		}
-		if( $wgUser->getNewtalk() ) {
+		$newtalks = $wgUser->getNewMessageLinks();
+
+		if (count($newtalks) == 1 && $newtalks[0]["wiki"] === $wgDBname) {
 			$usertitle = $this->mUser->getUserPage();
 			$usertalktitle = $usertitle->getTalkPage();
 			if( !$usertalktitle->equals( $this->mTitle ) ) {
@@ -277,6 +280,16 @@
 				# Disable Cache
 				$wgOut->setSquidMaxage(0);
 			}
+		} else if (count($newtalks)) {
+			$sep = str_replace("_", " ", wfMsgHtml("newtalkseperator"));
+			$msgs = array();
+			foreach ($newtalks as $newtalk) {
+				$msgs[] = wfElement("a", 
+					array('href' => $newtalk["link"]), $newtalk["wiki"]);
+			}
+			$parts = implode($sep, $msgs);
+			$ntl = wfMsgHtml('youhavenewmessagesmulti', $parts);
+			$wgOut->setSquidMaxage(0);
 		} else {
 			$ntl = '';
 		}
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/SpecialExport.php ref158/includes/SpecialExport.php
--- ref153/includes/SpecialExport.php	2005-07-12 21:59:12.000000000 -0400
+++ ref158/includes/SpecialExport.php	2006-01-27 17:11:45.000000000 -0500
@@ -236,7 +236,7 @@
 	function pageByName( $name ) {
 		$title = Title::newFromText( $name );
 		if( is_null( $title ) ) {
-			return WikiError( "Can't export invalid title" );
+			return new WikiError( "Can't export invalid title" );
 		} else {
 			return $this->pageByTitle( $title );
 		}
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/SpecialRecentchanges.php ref158/includes/SpecialRecentchanges.php
--- ref153/includes/SpecialRecentchanges.php	2005-11-18 15:05:37.000000000 -0500
+++ ref158/includes/SpecialRecentchanges.php	2006-02-11 06:57:56.000000000 -0500
@@ -33,6 +33,7 @@
 	/* bool */ 'hidebots' => true,
 	/* bool */ 'hideliu' => false,
 	/* bool */ 'hidepatrolled' => false,
+	/* bool */ 'hidemyself' => false,
 	/* text */ 'from' => '',
 	/* text */ 'namespace' => null,
 	/* bool */ 'invert' => false,
@@ -52,8 +53,7 @@
 	$limit = $wgRequest->getInt( 'limit', $limit );
 
 	/* order of selection: url > preferences > default */
-	$hideminor = $wgRequest->getBool( 'hideminor', $wgUser->getOption( 'hideminor') ? true : $defaults['hideminor'] );	
-
+	$hideminor = $wgRequest->getBool( 'hideminor', $wgUser->getOption( 'hideminor') ? true : $defaults['hideminor'] );		
 	
 	# As a feed, use limited settings only
 	if( $feedFormat ) {
@@ -69,6 +69,7 @@
 		$hidebots = $wgRequest->getBool( 'hidebots', $defaults['hidebots'] );
 		$hideliu = $wgRequest->getBool( 'hideliu', $defaults['hideliu'] );
 		$hidepatrolled = $wgRequest->getBool( 'hidepatrolled', $defaults['hidepatrolled'] );
+		$hidemyself = $wgRequest->getBool ( 'hidemyself', $defaults['hidemyself'] );
 		$from = $wgRequest->getVal( 'from', $defaults['from'] );	
 
 		# Get query parameters from path
@@ -81,6 +82,7 @@
 				if ( 'minor' == $bit ) $hideminor = 0;
 				if ( 'hideliu' == $bit ) $hideliu = 1;
 				if ( 'hidepatrolled' == $bit ) $hidepatrolled = 1;
+				if ( 'hidemyself' == $bit ) $hidemyself = 1;
 
 				if ( is_numeric( $bit ) ) {
 					$limit = $bit;
@@ -129,8 +131,9 @@
 
 	$hidem  = $hideminor ? 'AND rc_minor=0' : '';
 	$hidem .= $hidebots ? ' AND rc_bot=0' : '';
-	$hidem .= $hideliu ? ' AND rc_user=0' : '';
+	$hidem .= ( $hideliu && !$hidemyself ) ? ' AND rc_user=0' : '';
 	$hidem .= $hidepatrolled ? ' AND rc_patrolled=0' : '';
+	$hidem .= $hidemyself  ? ' AND rc_user <> '.$wgUser->getID() : '';
 	$hidem .= is_null( $namespace ) ?  '' : ' AND rc_namespace' . ($invert ? '!=' : '=') . $namespace;
 
 	// This is the big thing!
@@ -183,6 +186,7 @@
 			wfAppendToArrayIfNotDefault( 'hidebots', $hidebots, $defaults, $nondefaults);
 			wfAppendToArrayIfNotDefault( 'hideliu', $hideliu, $defaults, $nondefaults);
 			wfAppendToArrayIfNotDefault( 'hidepatrolled', $hidepatrolled, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'hidemyself', $hidemyself, $defaults, $nondefaults);
 			wfAppendToArrayIfNotDefault( 'from', $from, $defaults, $nondefaults);
 			wfAppendToArrayIfNotDefault( 'namespace', $namespace, $defaults, $nondefaults);
 			wfAppendToArrayIfNotDefault( 'invert', $invert, $defaults, $nondefaults);
@@ -358,7 +362,7 @@
  * Used by Recentchangeslinked
  */
 function rcDayLimitLinks( $days, $limit, $page='Recentchanges', $more='', $doall = false, $minorLink = '',
-	$botLink = '', $liuLink = '', $patrLink = '' ) {
+	$botLink = '', $liuLink = '', $patrLink = '', $myselfLink = '' ) {
 	if ($more != '') $more .= '&';
 	$cl = rcCountLink( 50, $days, $page, $more ) . ' | ' .
 	  rcCountLink( 100, $days, $page, $more  ) . ' | ' .
@@ -371,7 +375,7 @@
 	  rcDaysLink( $limit, 14, $page, $more  ) . ' | ' .
 	  rcDaysLink( $limit, 30, $page, $more  ) .
 	  ( $doall ? ( ' | ' . rcDaysLink( $limit, 0, $page, $more ) ) : '' );
-	$shm = wfMsg( 'showhideminor', $minorLink, $botLink, $liuLink, $patrLink );
+	$shm = wfMsg( 'showhideminor', $minorLink, $botLink, $liuLink, $patrLink, $myselfLink );
 	$note = wfMsg( 'rclinks', $cl, $dl, $shm );
 	return $note;
 }
@@ -430,8 +434,9 @@
 		array( 'hideliu' => 1-$options['hideliu'] ), $nondefaults);
 	$patrLink  = makeOptionsLink( $showhide[1-$options['hidepatrolled']],
 		array( 'hidepatrolled' => 1-$options['hidepatrolled'] ), $nondefaults);
-
-	$hl = wfMsg( 'showhideminor', $minorLink, $botLink, $liuLink, $patrLink );
+	$myselfLink = makeOptionsLink( $showhide[1-$options['hidemyself']], 
+		array( 'hidemyself' => 1-$options['hidemyself'] ), $nondefaults);
+	$hl = wfMsg( 'showhideminor', $minorLink, $botLink, $liuLink, $patrLink, $myselfLink );
 	
 	// show from this onward link
 	$now = $wgLang->timeanddate( wfTimestampNow(), true );
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/SpecialUserlogin.php ref158/includes/SpecialUserlogin.php
--- ref153/includes/SpecialUserlogin.php	2005-08-26 09:54:11.000000000 -0400
+++ ref158/includes/SpecialUserlogin.php	2006-03-08 14:49:34.000000000 -0500
@@ -146,7 +146,7 @@
 		if( $wgEmailAuthentication && $wgUser->isValidEmailAddr( $wgUser->getEmail() ) ) {
 			$wgUser->sendConfirmationMail();
 		}
-
+		
 		wfRunHooks( 'AddNewAccount' );
 
 		if( $this->hasSessionCookie() ) {
@@ -236,6 +236,13 @@
 			}
 		}
 
+		$abortError = '';
+		if( !wfRunHooks( 'AbortNewAccount', array( $u, &$abortError ) ) ) {
+			wfDebug( "LoginForm::addNewAccountInternal: a hook blocked creation\n" );
+			$this->mainLoginForm( $abortError );
+			return false;
+		}
+
 		if( !$wgAuth->addUser( $u, $this->mPassword ) ) {
 			$this->mainLoginForm( wfMsg( 'externaldberror' ) );
 			return false;
@@ -376,8 +383,8 @@
 	 * @access private
 	 */
 	function mailPasswordInternal( $u ) {
-		global $wgPasswordSender, $wgDBname, $wgIP;
-		global $wgCookiePath, $wgCookieDomain;
+		global $wgPasswordSender, $wgIP;
+		global $wgCookiePath, $wgCookieDomain, $wgCookiePrefix;
 
 		if ( '' == $u->getEmail() ) {
 			return wfMsg( 'noemail', $u->getName() );
@@ -386,7 +393,7 @@
 		$np = $u->randomPassword();
 		$u->setNewpassword( $np );
 
-		setcookie( "{$wgDBname}Token", '', time() - 3600, $wgCookiePath, $wgCookieDomain );
+		setcookie( "{$wgCookiePrefix}Token", '', time() - 3600, $wgCookiePath, $wgCookieDomain );
 
 		$u->saveSettings();
 
@@ -437,14 +444,15 @@
 	 */
 	function mainLoginForm( $err ) {
 		global $wgUser, $wgOut, $wgLang;
-		global $wgDBname, $wgAllowRealName, $wgEnableEmail;
+		global $wgAllowRealName, $wgEnableEmail;
+		global $wgCookiePrefix;
 		global $wgAuth;
 
 		if ( '' == $this->mName ) {
 			if ( $wgUser->isLoggedIn() ) {
 				$this->mName = $wgUser->getName();
 			} else {
-				$this->mName = @$_COOKIE[$wgDBname.'UserName'];
+				$this->mName = @$_COOKIE[$wgCookiePrefix.'UserName'];
 			}
 		}
 
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/SpecialVersion.php ref158/includes/SpecialVersion.php
--- ref153/includes/SpecialVersion.php	2005-10-11 01:35:01.000000000 -0400
+++ ref158/includes/SpecialVersion.php	2006-01-13 08:56:02.000000000 -0500
@@ -48,7 +48,7 @@
 		"__NOTOC__
 		<div dir='ltr'>
 		This wiki is powered by '''[http://www.mediawiki.org/ MediaWiki]''',  
-		copyright (C) 2001-2005 Magnus Manske, Brion Vibber, Lee Daniel Crocker,
+		copyright (C) 2001-2006 Magnus Manske, Brion Vibber, Lee Daniel Crocker,
 		Tim Starling, Erik Möller, and others.
 		 
 		MediaWiki is free software; you can redistribute it and/or modify
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/SpecialWantedpages.php ref158/includes/SpecialWantedpages.php
--- ref153/includes/SpecialWantedpages.php	2005-05-26 06:23:35.000000000 -0400
+++ ref158/includes/SpecialWantedpages.php	2006-02-18 00:18:45.000000000 -0500
@@ -27,6 +27,8 @@
 	function isSyndicated() { return false; }
 
 	function getSQL() {
+		global $wgWantedPagesThreshold;
+		$count = $wgWantedPagesThreshold - 1;
 		$dbr =& wfGetDB( DB_SLAVE );
 		$pagelinks = $dbr->tableName( 'pagelinks' );
 		$page      = $dbr->tableName( 'page' );
@@ -40,7 +42,7 @@
 			 ON pl_namespace=page_namespace AND pl_title=page_title
 			 WHERE page_namespace IS NULL
 			 GROUP BY pl_namespace,pl_title
-			 HAVING COUNT(*) > 1";
+			 HAVING COUNT(*) > $count";
 	}
 
 	function formatResult( $skin, $result ) {
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/SpecialWhatlinkshere.php ref158/includes/SpecialWhatlinkshere.php
--- ref153/includes/SpecialWhatlinkshere.php	2005-06-28 20:59:38.000000000 -0400
+++ ref158/includes/SpecialWhatlinkshere.php	2005-12-11 13:50:16.000000000 -0500
@@ -32,7 +32,7 @@
 	$sk = $wgUser->getSkin();
 	$isredir = ' (' . wfMsg( 'isredirect' ) . ")\n";
 
-	$wgOut->addHTML('&lt; '.$sk->makeKnownLinkObj($nt, '', 'redirect=no' )."<br />\n");
+	$wgOut->addHTML('&lt; '.$sk->makeLinkObj($nt, '', 'redirect=no' )."<br />\n");
 
 	wfShowIndirectLinks( 0, $nt, $limit, $offset );
 }
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/User.php ref158/includes/User.php
--- ref153/includes/User.php	2005-12-01 03:39:21.000000000 -0500
+++ ref158/includes/User.php	2006-02-22 17:26:15.000000000 -0500
@@ -275,7 +275,7 @@
 		$fname = 'User::loadDefaults' . $n;
 		wfProfileIn( $fname );
 
-		global $wgContLang, $wgIP, $wgDBname;
+		global $wgContLang, $wgIP, $wgCookiePrefix;
 		global $wgNamespacesToBeSearchedDefault;
 
 		$this->mId = 0;
@@ -297,8 +297,8 @@
 		$this->setToken(); # Random
 		$this->mHash = false;
 
-		if ( isset( $_COOKIE[$wgDBname.'LoggedOut'] ) ) {
-			$this->mTouched = wfTimestamp( TS_MW, $_COOKIE[$wgDBname.'LoggedOut'] );
+		if ( isset( $_COOKIE[$wgCookiePrefix.'LoggedOut'] ) ) {
+			$this->mTouched = wfTimestamp( TS_MW, $_COOKIE[$wgCookiePrefix.'LoggedOut'] );
 		}
 		else {
 			$this->mTouched = '0'; # Allow any pages to be cached
@@ -589,7 +589,7 @@
 	 * @static
 	 */
 	function loadFromSession() {
-		global $wgMemc, $wgDBname;
+		global $wgMemc, $wgDBname, $wgCookiePrefix;
 
 		if ( isset( $_SESSION['wsUserID'] ) ) {
 			if ( 0 != $_SESSION['wsUserID'] ) {
@@ -597,16 +597,16 @@
 			} else {
 				return new User();
 			}
-		} else if ( isset( $_COOKIE["{$wgDBname}UserID"] ) ) {
-			$sId = IntVal( $_COOKIE["{$wgDBname}UserID"] );
+		} else if ( isset( $_COOKIE["{$wgCookiePrefix}UserID"] ) ) {
+			$sId = IntVal( $_COOKIE["{$wgCookiePrefix}UserID"] );
 			$_SESSION['wsUserID'] = $sId;
 		} else {
 			return new User();
 		}
 		if ( isset( $_SESSION['wsUserName'] ) ) {
 			$sName = $_SESSION['wsUserName'];
-		} else if ( isset( $_COOKIE["{$wgDBname}UserName"] ) ) {
-			$sName = $_COOKIE["{$wgDBname}UserName"];
+		} else if ( isset( $_COOKIE["{$wgCookiePrefix}UserName"] ) ) {
+			$sName = $_COOKIE["{$wgCookiePrefix}UserName"];
 			$_SESSION['wsUserName'] = $sName;
 		} else {
 			return new User();
@@ -629,8 +629,8 @@
 
 		if ( isset( $_SESSION['wsToken'] ) ) {
 			$passwordCorrect = $_SESSION['wsToken'] == $user->mToken;
-		} else if ( isset( $_COOKIE["{$wgDBname}Token"] ) ) {
-			$passwordCorrect = $user->mToken == $_COOKIE["{$wgDBname}Token"];
+		} else if ( isset( $_COOKIE["{$wgCookiePrefix}Token"] ) ) {
+			$passwordCorrect = $user->mToken == $_COOKIE["{$wgCookiePrefix}Token"];
 		} else {
 			return new User(); # Can't log in from session
 		}
@@ -785,6 +785,22 @@
 		return ( 0 != $this->mNewtalk );
 	}
 
+	/**
+	 * Return the talk page(s) this user has new messages on.
+	 */
+	function getNewMessageLinks() {
+	global	$wgDBname;
+		$talks = array();
+		if (!wfRunHooks('UserRetrieveNewTalks', array(&$this, &$talks)))
+			return $talks;
+
+		if (!$this->getNewtalk())
+			return array();
+		$up = $this->getUserPage();
+		$utp = $up->getTalkPage();
+		return array(array("wiki" => $wgDBname, "link" => $utp->getLocalURL()));
+	}
+
 	function setNewtalk( $val ) {
 		$this->loadFromDatabase();
 		$this->mNewtalk = $val;
@@ -1030,7 +1046,7 @@
 	 * @todo FIXME : need to check the old failback system [AV]
 	 */
 	function &getSkin() {
-		global $IP, $wgRequest;
+		global $IP, $wgRequest, $wgStyleDirectory;
 		if ( ! isset( $this->mSkin ) ) {
 			$fname = 'User::getSkin';
 			wfProfileIn( $fname );
@@ -1041,7 +1057,7 @@
 			# get the user skin
 			$userSkin = $this->getOption( 'skin' );
 			$userSkin = $wgRequest->getText('useskin', $userSkin);
-			if ( $userSkin == '' ) { $userSkin = 'standard'; }
+			if ( $userSkin == '' ) { $userSkin = 'monobook'; }
 
 			if ( !isset( $skinNames[$userSkin] ) ) {
 				# in case the user skin could not be found find a replacement
@@ -1058,7 +1074,7 @@
 				if(is_numeric($userSkin) && isset( $fallback[$userSkin]) ){
 					$sn = $fallback[$userSkin];
 				} else {
-					$sn = 'Standard';
+					$sn = $fallback[0];
 				}
 			} else {
 				# The user skin is available
@@ -1067,7 +1083,7 @@
 
 			# Grab the skin class and initialise it. Each skin checks for PHPTal
 			# and will not load if it's not enabled.
-			require_once( $IP.'/skins/'.$sn.'.php' );
+			require_once( $wgStyleDirectory.'/'.$sn.'.php' );
 
 			# Check if we got if not failback to default skin
 			$className = 'Skin'.$sn;
@@ -1077,7 +1093,7 @@
 				# except by SQL manipulation if a previously valid skin name
 				# is no longer valid.
 				$className = 'SkinStandard';
-				require_once( $IP.'/skins/Standard.php' );
+ 				require_once( $wgStyleDirectory.'/Standard.php' );
 			}
 			$this->mSkin =& new $className;
 			wfProfileOut( $fname );
@@ -1220,22 +1236,23 @@
 	}
 
 	function setCookies() {
-		global $wgCookieExpiration, $wgCookiePath, $wgCookieDomain, $wgDBname;
+		global $wgCookieExpiration, $wgCookiePath, $wgCookieDomain, $wgCookiePrefix;
 		if ( 0 == $this->mId ) return;
 		$this->loadFromDatabase();
 		$exp = time() + $wgCookieExpiration;
 
 		$_SESSION['wsUserID'] = $this->mId;
-		setcookie( $wgDBname.'UserID', $this->mId, $exp, $wgCookiePath, $wgCookieDomain );
+		setcookie( $wgCookiePrefix.'UserID', $this->mId, $exp, $wgCookiePath, $wgCookieDomain );
 
 		$_SESSION['wsUserName'] = $this->mName;
-		setcookie( $wgDBname.'UserName', $this->mName, $exp, $wgCookiePath, $wgCookieDomain );
-
+		setcookie( $wgCookiePrefix.'UserName', $this->mName, $exp, $wgCookiePath, $wgCookieDomain );
+	
 		$_SESSION['wsToken'] = $this->mToken;
+		  global $wgOut;
 		if ( 1 == $this->getOption( 'rememberpassword' ) ) {
-			setcookie( $wgDBname.'Token', $this->mToken, $exp, $wgCookiePath, $wgCookieDomain );
+			setcookie( $wgCookiePrefix.'Token', $this->mToken, $exp, $wgCookiePath, $wgCookieDomain );
 		} else {
-			setcookie( $wgDBname.'Token', '', time() - 3600 );
+			setcookie( $wgCookiePrefix.'Token', '', time() - 3600 );
 		}
 	}
 
@@ -1244,17 +1261,17 @@
 	 * It will clean the session cookie
 	 */
 	function logout() {
-		global $wgCookiePath, $wgCookieDomain, $wgDBname, $wgIP;
+		global $wgCookiePath, $wgCookieDomain, $wgIP, $wgCookiePrefix;
 		$this->loadDefaults();
 		$this->setLoaded( true );
 
 		$_SESSION['wsUserID'] = 0;
 
-		setcookie( $wgDBname.'UserID', '', time() - 3600, $wgCookiePath, $wgCookieDomain );
-		setcookie( $wgDBname.'Token', '', time() - 3600, $wgCookiePath, $wgCookieDomain );
+		setcookie( $wgCookiePrefix.'UserID', '', time() - 3600, $wgCookiePath, $wgCookieDomain );
+		setcookie( $wgCookiePrefix.'Token', '', time() - 3600, $wgCookiePath, $wgCookieDomain );
 
-		# Remember when user logged out, to prevent seeing cached pages
-		setcookie( $wgDBname.'LoggedOut', wfTimestampNow(), time() + 86400, $wgCookiePath, $wgCookieDomain );
+ 		# Remember when user logged out, to prevent seeing cached pages
+ 		setcookie( $wgCookiePrefix.'LoggedOut', wfTimestampNow(), time() + 86400, $wgCookiePath, $wgCookieDomain );
 	}
 
 	/**
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/UserTalkUpdate.php ref158/includes/UserTalkUpdate.php
--- ref153/includes/UserTalkUpdate.php	2005-04-11 22:07:00.000000000 -0400
+++ ref158/includes/UserTalkUpdate.php	2005-12-09 18:25:42.000000000 -0500
@@ -50,7 +50,7 @@
 
 		$this->mAction = $action;
 		$this->mNamespace = $ns;
-		$this->mTitle = $title; # str_replace( '_', ' ', $title ); # I do not know, why this was needed . T. Gries 23.11.2004
+		$this->mTitle = $title;
 		$this->mSummary = $summary;
 		$this->mMinorEdit = $minoredit;
 		$this->mTimestamp = $timestamp;
@@ -62,7 +62,7 @@
 
 		# If the user talk page is our own, clear the flag
 		# when we are reading it or writing it.
-		if ( 0 == strcmp( $this->mTitle, $wgUser->getName() ) ) {
+		if ( 0 == strcmp( str_replace( '_', ' ', $this->mTitle ), $wgUser->getName() ) ) {
 			$wgUser->setNewtalk( 0 );
 			$wgUser->saveSettings();
 		} else {
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/includes/templates/Userlogin.php ref158/includes/templates/Userlogin.php
--- ref153/includes/templates/Userlogin.php	2005-06-03 07:56:01.000000000 -0400
+++ ref158/includes/templates/Userlogin.php	2006-03-06 13:47:44.000000000 -0500
@@ -103,7 +103,6 @@
 				<?php } ?>
 			</td>
 		</tr>
-	<?php } ?>
 	<?php if( $this->data['useemail'] ) { ?>
 		<tr>
 			<td colspan='3'>&nbsp;</td>
@@ -117,7 +116,7 @@
 				</p>
 			</td>
 		</tr>
-	<?php } ?>
+	<?php } } ?>
 	</table>
 </form>
 <?php
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/Language.php ref158/languages/Language.php
--- ref153/languages/Language.php	2005-10-28 05:34:04.000000000 -0400
+++ ref158/languages/Language.php	2006-03-25 14:57:16.000000000 -0500
@@ -148,7 +148,7 @@
 /* private */ $wgBookstoreListEn = array(
 	'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
 	'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
-	'Barnes & Noble' => 'http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
+	'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
 	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
 );
 
@@ -349,9 +349,14 @@
 'linktrail'		=> '/^([a-z]+)(.*)$/sD',
 'linkprefix'		=> '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
 'mainpage'		=> 'Main Page',
-'mainpagetext'	=> 'Wiki software successfully installed.',
-"mainpagedocfooter" => "Please see [http://meta.wikipedia.org/wiki/MediaWiki_i18n documentation on customizing the interface]
-and the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] for usage and configuration help.",
+'mainpagetext'	=> "<big>'''MediaWiki has been successfully installed.'''</big>",
+'mainpagedocfooter' => "Consult the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] for information on using the wiki software.
+
+== Getting started ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikipedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
 
 'portal'		=> 'Community portal',
 'portal-url'	=> 'Project:Community Portal',
@@ -803,7 +808,7 @@
 Please try another query.',
 'matchtotals'	=> "The query \"$1\" matched $2 page titles
 and the text of $3 pages.",
-'nogomatch' => 'No page with [[$1|this exact title]] exists, trying full text search.',
+'nogomatch' => "'''There is no page titled \"$1\".''' You can [[$1|create this page]].",
 'titlematches'	=> 'Article title matches',
 'notitlematches' => 'No page title matches',
 'textmatches'	=> 'Page text matches',
@@ -1030,7 +1035,7 @@
 'savefile'		=> 'Save file',
 'uploadedimage' => "uploaded \"[[$1]]\"",
 'uploaddisabled' => 'Sorry, uploading is disabled.',
-'uploadscripted' => 'This file contains HTML or script code that my be erroneously be interpreted by a web browser.',
+'uploadscripted' => 'This file contains HTML or script code that may be erroneously be interpreted by a web browser.',
 'uploadcorrupt' => 'The file is corrupt or has an incorrect extension. Please check the file and upload again.',
 'uploadvirus' => 'The file contains a virus! Details: $1',
 'sourcefilename' => 'Source filename',
@@ -1582,9 +1587,8 @@
 
 'export'		=> 'Export pages',
 'exporttext'	=> 'You can export the text and editing history of a particular page or
-set of pages wrapped in some XML. In the future, this may then be imported into another
-wiki running MediaWiki software, although there is no support for this feature in the
-current version.
+set of pages wrapped in some XML. This can be imported into another wiki using MediaWiki
+via the Special:Import page.
 
 To export article pages, enter the titles in the text box below, one title per line, and
 select whether you want the current version as well as all old versions, with the page
@@ -2128,6 +2132,8 @@
 
 'unit-pixel' => 'px',
 
+'youhavenewmessagesmulti' => "You have new messages on $1",
+'newtalkseperator' => ',_',
 );
 
 /* a fake language converter */
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageArc.php ref158/languages/LanguageArc.php
--- ref153/languages/LanguageArc.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/languages/LanguageArc.php	2005-12-15 15:32:15.000000000 -0500
@@ -0,0 +1,18 @@
+<?php
+/** Aramaic language file ( ܕܥܒܪܸܝܛ )
+  *
+  * @package MediaWiki
+  * @subpackage Language
+  */
+
+require_once( 'LanguageUtf8.php' );
+
+class LanguageArc extends LanguageUtf8 {
+	#FIXME: inherit almost everything for now
+
+	function isRTL() {
+		return true;
+	}
+}
+
+?>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageConverter.php ref158/languages/LanguageConverter.php
--- ref153/languages/LanguageConverter.php	2005-08-18 12:01:12.000000000 -0400
+++ ref158/languages/LanguageConverter.php	2006-01-24 13:50:34.000000000 -0500
@@ -135,8 +135,17 @@
 		if(!in_array($toVariant, $this->mVariants))
 			return $text;
 
-
-		$reg = '/<[^>]+>|&[a-z#][a-z0-9]+;|'.UNIQ_PREFIX.'-[a-zA-Z0-9]+/';
+		/* we convert everything except:
+		   1. html markups (anything between < and >)
+		   2. html entities
+		   3. place holders created by the parser
+		*/
+		global $wgParser;
+		if (isset($wgParser))
+			$marker = '|' . $wgParser->UniqPrefix() . '[\-a-zA-Z0-9]+';
+		else
+			$marker = "";
+		$reg = '/<[^>]+>|&[a-z#][a-z0-9]+;' . $marker . '/';
 		$matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);
 
 
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageCy.php ref158/languages/LanguageCy.php
--- ref153/languages/LanguageCy.php	2005-08-18 12:01:12.000000000 -0400
+++ ref158/languages/LanguageCy.php	2006-01-07 08:24:36.000000000 -0500
@@ -40,7 +40,7 @@
 /* private */ $wgBookstoreListCy = array(
 	"AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
 	"PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
-	"Barnes & Noble" => "http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+	"Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
 	"Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1",
 	"Amazon.co.uk" => "http://www.amazon.co.uk/exec/obidos/ISBN=$1"
 );
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageDa.php ref158/languages/LanguageDa.php
--- ref153/languages/LanguageDa.php	2005-08-18 12:01:12.000000000 -0400
+++ ref158/languages/LanguageDa.php	2005-12-14 17:38:48.000000000 -0500
@@ -570,7 +570,7 @@
 Prøv en anden forespørgsel.",
 "matchtotals"	=> "Forespørgslen \"$1\" opfyldte $2 artikeltitler
 og teksten i $3 artikler.",
-"nogomatch" => "<span style=\"font-size: 135%; font-weight: bold; margin-left: .6em\">{{SITENAME}} har ingen artikel med dette navn</span> <span style=\"display: block; margin: 1.5em 2em\"> Du kan <strong><a href=\"$1\" class=\"new\">oprette en artikel med dette navn</a></strong> eller <a href=\"/wiki/{{ns:4}}:Efterspurgte_artikler\">efterspørge den</a>. <span style=\"display:block; font-size: 89%; margin-left:.2em\">For at undgå flere artikler om samme emne, bedes du inden oprettelsen søge efter artiklen under alternative navne og stavemåder.</span> </span>",
+"nogomatch" => "{{SITENAME}} har ingen artikel med dette navn. Du kan [[$1|oprette en artikel med dette navn]] eller [[{{ns:4}}:Efterspurgte_artikler|efterspørge den]]. For at undgå flere artikler om samme emne, bedes du inden oprettelsen søge efter artiklen under alternative navne og stavemåder.",
 "titlematches"	=> "Artikeltitler der opfyldte forespørgslen",
 "notitlematches" => "Ingen artikeltitler opfyldte forespørgslen",
 "textmatches"	=> "Artikeltekster der opfyldte forespørgslen",
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageDv.php ref158/languages/LanguageDv.php
--- ref153/languages/LanguageDv.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/languages/LanguageDv.php	2005-12-15 15:32:15.000000000 -0500
@@ -0,0 +1,18 @@
+<?php
+/** Dhivehi language file ( ދިވެހިބަސް',      )
+  *
+  * @package MediaWiki
+  * @subpackage Language
+  */
+
+require_once( 'LanguageUtf8.php' );
+
+class LanguageDv extends LanguageUtf8 {
+	#FIXME: inherit almost everything for now
+
+	function isRTL() {
+		return true;
+	}
+}
+
+?>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageEt.php ref158/languages/LanguageEt.php
--- ref153/languages/LanguageEt.php	2005-08-18 12:01:13.000000000 -0400
+++ ref158/languages/LanguageEt.php	2006-01-07 08:24:36.000000000 -0500
@@ -60,7 +60,7 @@
 	"Raamatukoi" => "http://www.raamatukoi.ee/cgi-bin/index?valik=otsing&paring=$1",
 	"AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
 	"PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
-	"Barnes & Noble" => "http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+	"Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
 	"Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1"
 );
 
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageFr.php ref158/languages/LanguageFr.php
--- ref153/languages/LanguageFr.php	2005-11-17 23:37:52.000000000 -0500
+++ ref158/languages/LanguageFr.php	2006-02-27 04:14:30.000000000 -0500
@@ -843,7 +843,7 @@
 'unprotectedarticle' => 'a déprotégé [[$1]]',
 
 'protectsub' => '(Protéger « $1 »)',
-'confirmprotect' => 'Confimer la protection',
+'confirmprotect' => 'Confirmer la protection',
 'confirmprotecttext' => 'Voulez-vous réellement protéger cette page ?',
 'protectcomment' => 'Raison du bloquage',
 
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageHe.php ref158/languages/LanguageHe.php
--- ref153/languages/LanguageHe.php	2005-08-18 12:01:16.000000000 -0400
+++ ref158/languages/LanguageHe.php	2006-01-07 08:24:36.000000000 -0500
@@ -49,7 +49,7 @@
 /* private */ $wgBookstoreListHe = array(
 	"מיתוס" => "http://www.mitos.co.il/ ",
 	"ibooks" => "http://www.ibooks.co.il/",
-	"Barnes & Noble" => "http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+	"Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
 	"Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1"
 );
 
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageId.php ref158/languages/LanguageId.php
--- ref153/languages/LanguageId.php	2005-08-18 12:01:16.000000000 -0400
+++ ref158/languages/LanguageId.php	2006-01-07 08:24:36.000000000 -0500
@@ -66,7 +66,7 @@
 	//# Default (EN) Bookstores
 	//"AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
 	//"PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
-	//"Barnes & Noble" => "http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+	//"Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
 	//"Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1"
 ) + $wgBookstoreListEn;
 
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageJa.php ref158/languages/LanguageJa.php
--- ref153/languages/LanguageJa.php	2005-09-13 14:19:53.000000000 -0400
+++ ref158/languages/LanguageJa.php	2005-12-11 15:27:07.000000000 -0500
@@ -67,7 +67,7 @@
 
 # User preference toggles
 'tog-underline' => 'リンクの下線:',
-'tog-highlightbroken' => '未作成のページへのリンクを<a href="javascript:void(0);" class="new" onclick="return false;">ハイライト</a>する (チェックしないとこのように<a href="javascript:void(0);" class="internal" onclick="return false;">?</a>なる)',
+'tog-highlightbroken' => '未作成のページへのリンクをハイライトする',
 'tog-justify' => '段落を均等割り付けする',
 'tog-hideminor' => '最近更新したページから細部の編集を隠す',
 'tog-usenewrc' => '最近更新したページを拡張する（対応していないブラウザもあります）',
@@ -177,7 +177,7 @@
 'navigation' => 'ナビゲーション',
 
 # Metadata in edit box
-'metadata' => 'Metadata',
+'metadata' => 'メタデータ',
 'metadata_page' => '{{ns:Project}}:Metadata',
 
 'currentevents' => '最近の出来事',
@@ -347,7 +347,7 @@
 # Login and logout pages
 #
 'logouttitle' => 'ユーザー ログアウト',
-'logouttext' => '<p>ログアウトしました。このまま{{SITENAME}}を匿名で使い続けることができます。もう一度ログインして元の、あるいは別のユーザーとして使うこともできます。</p>
+'logouttext' => '<p><strong>ログアウトしました。</strong>このまま{{SITENAME}}を匿名で使い続けることができます。もう一度ログインして元の、あるいは別のユーザーとして使うこともできます。</p>
 <p>※いくつかのページはブラウザのキャッシュをクリアするまでログインしているかのように表示されることがあります。</p>',
 
 'welcomecreation' => '== $1 さん、ようこそ! ==
@@ -363,7 +363,7 @@
 'yourdomainname' => 'あなたのドメイン',
 'externaldberror' => '外部の認証データベースでエラーが発生たか、または外部アカウント情報の更新が許可されていません。',
 'loginproblem' => '<b>ログインでエラーが発生しました。</b><br />再度実行してください。',
-'alreadyloggedin' => '<b style="color:red">ユーザー $1 は、すでにログイン済みです。</b><br />',
+'alreadyloggedin' => '<strong>ユーザー $1 は、すでにログイン済みです。</strong><br />',
 
 'login' => 'ログイン',
 'loginprompt' => '{{SITENAME}}にログインするにはクッキーを有効にする必要があります。',
@@ -482,7 +482,7 @@
 'editingsection' => '$1 を編集中 (セクション)',
 'editingcomment' => '$1 を編集中 (新規コメント)',
 'editconflict' => '編集競合: $1',
-'explainconflict' => 'あなたがこのページを編集し始めた後に、他の誰かがこのページを変更しました。上側のテキストエリアは現在の最新の状態です。あなたの編集していた文章は下側のテキストエリアに示されています。編集していた文章を、上側のテキストエリアの文章に組み込んでください。<strong>上側のテキストエリアの内容だけ</strong>が、“投稿する”をクリックした時に実際に保存されます。',
+'explainconflict' => 'あなたがこのページを編集し始めた後に、他の誰かがこのページを変更しました。上側のテキストエリアは現在の最新の状態です。あなたの編集していた文章は下側のテキストエリアに示されています。編集していた文章を、上側のテキストエリアの文章に組み込んでください。<strong>上側のテキストエリアの内容だけ</strong>が、「{{int:Savearticle}}」をクリックした時に実際に保存されます。',
 'yourtext' => 'あなたの文章',
 'storedversion' => '保存された版',
 'nonunicodebrowser' => '<strong>警告: あなたの使用しているブラウザはUnicode互換ではありません。項目を編集する前にブラウザを変更してください。</strong>',
@@ -512,7 +512,7 @@
 'loadhist' => '変更履歴の読み込み中',
 'currentrev' => '最新版',
 'revisionasof' => '$1の版',
-'revisionasofwithlink' => '$1 の版を表示しています ; $2<br />$3 | $4',
+'revisionasofwithlink' => '$1 の版; $2<br />$3 | $4',
 'previousrevision' => '←前の版',
 'nextrevision' => '次の版→',
 'currentrevisionlink' => '最新版を表示',
@@ -1057,7 +1057,7 @@
 'undeletebtn' => '復帰!',
 'undeletedarticle' => '"$1" を復帰しました。',
 'undeletedrevisions' => '$1 版を復帰',
-'undeletedtext' => '[[:$1]]を無事復帰しました。最近の削除と復帰の記録は[[Special:Log/delete]]を参照してください。',
+'undeletedtext' => '[[:$1|$1]]を無事復帰しました。最近の削除と復帰の記録は[[Special:Log/delete]]を参照してください。',
 
 # Namespace form on various pages
 'namespace' => '名前空間:',
@@ -1249,8 +1249,8 @@
 'movetalk' => 'ノートページが付随する場合には、それも一緒に移動する',
 'talkpagemoved' => '付随のノートのページも移動しました。',
 'talkpagenotmoved' => '付随のノートのページは<strong>移動されませんでした。</strong>',
-'1movedto2' => '$1 を $2 へ移動',
-'1movedto2_redir' => '$1 をこのページあてのリダイレクト $2 へ移動',
+'1movedto2' => '[[$1]] を [[$2]] へ移動',
+'1movedto2_redir' => '[[$1]] をこのページあてのリダイレクト [[$2]] へ移動',
 'movelogpage' => '移動記録',
 'movelogpagetext' => '以下は最近のページ移動の記録です。',
 'movereason' => '理由',
@@ -1278,9 +1278,9 @@
 # Namespace 8 related
 
 'allmessages' => '表示メッセージ一覧',
-'allmessagesname' => '名称',
-'allmessagesdefault' => 'デフォルトのテキスト',
-'allmessagescurrent' => '現在のテキスト',
+'allmessagesname' => 'メッセージ名',
+'allmessagesdefault' => '既定の文章',
+'allmessagescurrent' => '現在の文章',
 'allmessagestext' => 'これはMediaWiki名前空間にある全てのシステムメッセージの一覧です。',
 'allmessagesnotsupportedUI' => 'このサイトでは、あなたの現在のインターフェイス言語 <b>$1</b> における {{ns:Special}}:Allmessages はサポートされていません。',
 'allmessagesnotsupportedDB' => 'wgUseDatabaseMessages が無効のため、{{ns:Special}}:Allmessages はサポートされません。',
@@ -1301,6 +1301,8 @@
 'importsuccess' => '取り込みに成功しました。',
 'importhistoryconflict' => '取り込み時にいくつかの版が競合しました（以前に同じページを取り込んでいませんか）。',
 'importnosources' => 'Transwikiの読み込み元が定義されていないため、履歴の直接アップロードは無効になっています。',
+'importnofile' => 'ファイルがアップロードされませんでした',
+'importuploaderror' => 'ファイルの取り込みに失敗しました。恐らく、許可されている最大ファイルサイズより大きなファイルをアップロードしようとしています。',
 
 # Keyboard access keys for power users
 'accesskey-search' => 'f',
@@ -1465,10 +1467,10 @@
 'mediawarning' => "'''警告:''' このファイルは悪意のあるコードを含んでいる可能性があり、実行するとコンピューターが危害を被る場合があります。
 ----",
 
-'fileinfo' => '$1KB, MIME type: <code>$2</code>',
+'fileinfo' => '$1KB, MIMEタイプ: <code>$2</code>',
 
 # Metadata
-'metadata' => 'Metadata',
+'metadata' => 'メタデータ',
 
 # Exif tags
 'exif-imagewidth' => '画像の幅',
@@ -1481,8 +1483,8 @@
 'exif-planarconfiguration' => 'データ格納形式',
 'exif-ycbcrsubsampling' => 'YCCの画素構成（Cの間引き率）',
 'exif-ycbcrpositioning' => 'YCCの画素構成（YとCの位置）',
-'exif-xresolution' => '水平方向の解像度',
-'exif-yresolution' => '垂直方向の解像度',
+'exif-xresolution' => '水平解像度',
+'exif-yresolution' => '垂直解像度',
 'exif-resolutionunit' => '解像度の単位',
 'exif-stripoffsets' => '画像データの場所',
 'exif-rowsperstrip' => 'ストリップのライン数',
@@ -1495,25 +1497,25 @@
 'exif-ycbcrcoefficients' => '色変換マトリックス係数',
 'exif-referenceblackwhite' => '参照黒色点値・参照白色点値',
 'exif-datetime' => 'ファイル変更日時',
-'exif-imagedescription' => '画像のタイトル',
-'exif-make' => '画像入力機器のメーカー名',
-'exif-model' => '画像入力機器のモデル名',
-'exif-software' => '使用ソフトウェア',
-'exif-artist' => '作者名',
+'exif-imagedescription' => '画像の説明',
+'exif-make' => '画像入力機器のメーカー',
+'exif-model' => '画像入力機器の機種',
+'exif-software' => 'ファームウェアのバージョン',
+'exif-artist' => '作成者',
 'exif-copyright' => '著作権者',
 'exif-exifversion' => 'EXIFバージョン',
 'exif-flashpixversion' => '対応フラッシュピックスバージョン',
-'exif-colorspace' => '色空間情報',
-'exif-componentsconfiguration' => '各コンポーネントの意味',
+'exif-colorspace' => '色空間',
+'exif-componentsconfiguration' => '各コンポーネントの構成',
 'exif-compressedbitsperpixel' => '画像圧縮モード',
-'exif-pixelydimension' => '実効画像高さ',
-'exif-pixelxdimension' => '実効画像幅',
+'exif-pixelydimension' => '実効画像幅',
+'exif-pixelxdimension' => '実効画像高さ',
 'exif-makernote' => 'メーカーノート',
 'exif-usercomment' => 'ユーザーコメント',
 'exif-relatedsoundfile' => '関連音声ファイル',
 'exif-datetimeoriginal' => '画像データ生成日時',
 'exif-datetimedigitized' => 'デジタルデータ作成日時',
-'exif-subsectime' => 'ファイル変更日時の秒未満',
+'exif-subsectime' => 'ファイル変更日時 (秒未満)',
 'exif-subsectimeoriginal' => '画像データ生成日時 (秒未満)',
 'exif-subsectimedigitized' => 'デジタルデータ作成日時 (秒未満)',
 'exif-exposuretime' => '露出時間',
@@ -1524,8 +1526,8 @@
 'exif-oecf' => '光電変換関数',
 'exif-shutterspeedvalue' => 'シャッタースピード',
 'exif-aperturevalue' => '絞り値',
-'exif-brightnessvalue' => '輝度値',
-'exif-exposurebiasvalue' => '露光補正値',
+'exif-brightnessvalue' => '明るさ',
+'exif-exposurebiasvalue' => '露出補正値',
 'exif-maxaperturevalue' => 'レンズ最小F値',
 'exif-subjectdistance' => '被写体距離',
 'exif-meteringmode' => '測光方式',
@@ -1547,14 +1549,14 @@
 'exif-customrendered' => '画像処理',
 'exif-exposuremode' => '露出モード',
 'exif-whitebalance' => 'ホワイトバランス',
-'exif-digitalzoomratio' => 'デジタルズームの倍率',
+'exif-digitalzoomratio' => 'デジタルズーム倍率',
 'exif-focallengthin35mmfilm' => 'レンズの焦点距離（35mmフィルム換算）',
 'exif-scenecapturetype' => '被写体の種別',
 'exif-gaincontrol' => 'ゲインコントロール',
 'exif-contrast' => 'コントラスト',
 'exif-saturation' => '彩度',
 'exif-sharpness' => 'シャープネス',
-'exif-devicesettingdescription' => '装置セッティングの説明',
+'exif-devicesettingdescription' => '機器設定',
 'exif-subjectdistancerange' => '被写体距離の範囲',
 'exif-imageuniqueid' => 'ユニーク画像ID',
 'exif-gpsversionid' => 'GPSタグのバージョン',
@@ -1562,25 +1564,25 @@
 'exif-gpslatitude' => '緯度',
 'exif-gpslongituderef' => '東経/西経',
 'exif-gpslongitude' => '経度',
-'exif-gpsaltituderef' => '高度の単位',
+'exif-gpsaltituderef' => '高度の基準',
 'exif-gpsaltitude' => '高度',
 'exif-gpstimestamp' => 'GPS時刻（原子時計）',
 'exif-gpssatellites' => '測位に用いた衛星信号',
 'exif-gpsstatus' => 'GPS受信機の状態',
-'exif-gpsmeasuremode' => 'GPSの測位方法',
-'exif-gpsdop' => '測位の精度',
+'exif-gpsmeasuremode' => 'GPS測位方法',
+'exif-gpsdop' => '測位精度',
 'exif-gpsspeedref' => '速度の単位',
 'exif-gpsspeed' => '速度',
-'exif-gpstrackref' => '進行方向の単位',
+'exif-gpstrackref' => '進行方向の基準',
 'exif-gpstrack' => '進行方向',
-'exif-gpsimgdirectionref' => '撮影の方向の単位',
-'exif-gpsimgdirection' => '撮影の方向',
+'exif-gpsimgdirectionref' => '撮影方向の基準',
+'exif-gpsimgdirection' => '撮影方向',
 'exif-gpsmapdatum' => '測地系',
 'exif-gpsdestlatituderef' => '目的地の北緯/南緯',
 'exif-gpsdestlatitude' => '目的地の緯度',
 'exif-gpsdestlongituderef' => '目的地の東経/西経',
 'exif-gpsdestlongitude' => '目的地の経度',
-'exif-gpsdestbearingref' => '目的地の方角の単位',
+'exif-gpsdestbearingref' => '目的地の方角の基準',
 'exif-gpsdestbearing' => '目的地の方角',
 'exif-gpsdestdistanceref' => '目的地までの距離の単位',
 'exif-gpsdestdistance' => '目的地までの距離',
@@ -1633,7 +1635,7 @@
 'exif-exposureprogram-1' => 'マニュアル',
 'exif-exposureprogram-2' => 'ノーマルプログラム',
 'exif-exposureprogram-3' => '露出優先',
-'exif-exposureprogram-4' => 'シャッター優先',
+'exif-exposureprogram-4' => 'シャッター速度優先',
 'exif-exposureprogram-5' => 'クリエイティブプログラム',
 'exif-exposureprogram-6' => 'アクションプログラム',
 'exif-exposureprogram-7' => 'ポートレイトモード（近景）',
@@ -1798,13 +1800,12 @@
 'scarytranscludetoolong' => '[URL is too long; sorry]',
 
 # Trackbacks
-'trackbackbox' => "<div id='mw_trackbacks'>
+'trackbackbox' => '<div id="mw_trackbacks">
 この項目へのトラックバック:
 $1
-</div>",
-'trackback' => '; $4$5 : [$2 $1]',
-'trackbackexcerpt' => ';$4$5
-:[$2 $1]: <nowiki>$3</nowiki>',
+</div>',
+# 'trackback' => '',
+# 'trackbackexcerpt' => '',
 'trackbackremove' => ' ([$1 削除])',
 'trackbacklink' => 'トラックバック',
 'trackbackdeleteok' => 'トラックバックを削除しました。',
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageKs.php ref158/languages/LanguageKs.php
--- ref153/languages/LanguageKs.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/languages/LanguageKs.php	2005-12-15 15:32:15.000000000 -0500
@@ -0,0 +1,18 @@
+<?php
+/** Kashmiri language file ( कश्मीरी - (ﻚﺸﻤﻳﺮﻳ) )
+  *
+  * @package MediaWiki
+  * @subpackage Language
+  */
+
+require_once( 'LanguageUtf8.php' );
+
+class LanguageKs extends LanguageUtf8 {
+	#FIXME: inherit almost everything for now
+
+	function isRTL() {
+		return true;
+	}
+}
+
+?>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageKu.php ref158/languages/LanguageKu.php
--- ref153/languages/LanguageKu.php	2005-08-18 12:01:16.000000000 -0400
+++ ref158/languages/LanguageKu.php	2006-01-08 12:39:51.000000000 -0500
@@ -1,5 +1,6 @@
 <?php
-/**
+/** Kurdish language file ( كوردي )
+  *
   * @package MediaWiki
   * @subpackage Language
   */
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageRu.php ref158/languages/LanguageRu.php
--- ref153/languages/LanguageRu.php	2005-08-30 16:20:14.000000000 -0400
+++ ref158/languages/LanguageRu.php	2006-01-27 03:03:39.000000000 -0500
@@ -1854,7 +1854,7 @@
 'confirmemail_send' => 'Отправить письмо с запросом на подтверждение',
 'confirmemail_sent' => 'Письмо с запросом на подтверждение отправлено.',
 'confirmemail_sendfailed' => 'Невозможно отправить письмо с запросом на подтверждение. Проверье правильность адреса электронной почты.',
-'confirmemail_invalid' => 'Направильный код подтверждения или срок действия кода истёк.',
+'confirmemail_invalid' => 'Нeправильный код подтверждения или срок действия кода истёк.',
 'confirmemail_success' => 'Ваш адрес электронной почты подтверждён.',
 'confirmemail_loggedin' => 'Ваш адрес электронной почты подтверждён.',
 'confirmemail_error' => 'Во время процедуры подтверждения адреса электронной почты произошла ошибка.',
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageSd.php ref158/languages/LanguageSd.php
--- ref153/languages/LanguageSd.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/languages/LanguageSd.php	2005-12-15 15:32:15.000000000 -0500
@@ -0,0 +1,18 @@
+<?php
+/** Sindhi language file ( सिनधि )
+  *
+  * @package MediaWiki
+  * @subpackage Language
+  */
+
+require_once( 'LanguageUtf8.php' );
+
+class LanguageSd extends LanguageUtf8 {
+	#FIXME: inherit almost everything for now
+
+	function isRTL() {
+		return true;
+	}
+}
+
+?>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageSv.php ref158/languages/LanguageSv.php
--- ref153/languages/LanguageSv.php	2005-08-18 12:01:17.000000000 -0400
+++ ref158/languages/LanguageSv.php	2006-02-09 08:28:31.000000000 -0500
@@ -117,14 +117,14 @@
 "aboutpage"		=> "{{ns:4}}:Om",
 'article'               => 'Artikel',
 "help"                  => "Hjälp",
-"helppage"              => "Wikipedia:Hjälp",
+"helppage"              => "{{ns:4}}:Hjälp",
 "bugreports"            => "Felrapporter",
-"bugreportspage"        => "Wikipedia:Felrapporter",
+"bugreportspage"        => "{{ns:4}}:Felrapporter",
 "sitesupport"           => "Donationer",
 "faq"                   => "FAQ",
-"faqpage"               => "Wikipedia:FAQ",
+"faqpage"               => "{{ns:4}}:FAQ",
 "edithelp"              => "Redigeringshjälp",
-"edithelppage"          => "Wikipedia:Hur_redigerar_jag_en_sida",
+"edithelppage"          => "{{ns:4}}:Hur_redigerar_jag_en_sida",
 "cancel"                => "Avbryt",
 "qbfind"                => "SnabbSök",
 "qbbrowse"              => "Genomsök",
@@ -137,7 +137,7 @@
 "currentevents"         => "-",
 "errorpagetitle"        => "Fel",
 "returnto"              => "Tillbaka till $1.",
-"tagline"               => "Från Wikipedia, den fria encyklopedin.",
+"tagline"               => "Från {{SITENAME}}",
 "whatlinkshere"         => "Vilka sidor länkar hit?",
 "help"                  => "Hjälp",
 "search"                => "Sök",
@@ -173,7 +173,7 @@
 "poweredby"	        => "{{SITENAME}} körs med hjälp av [http://www.mediawiki.org/ MediaWiki], en öppen källkods-wikimotor.",
 "printsubtitle"         => "(Från {{SERVER}})",
 "protectedpage"         => "Skyddad sida",
-"administrators"        => "Wikipedia:Administratörer",
+"administrators"        => "{{ns:4}}:Administratörer",
 "sysoptitle"            => "Sysop-behörighet krävs",
 "sysoptext"             => "Den här funktionen kan bara utföras av användare med \"sysop\" status.
 Se $1.",
@@ -214,10 +214,10 @@
 //
 "nosuchaction"          => "Funktionen finns inte",
 "nosuchactiontext"      => "Den funktion som specificerats i URL:en kan inte
-hittas av Wikipediaprogramvaran",
+hittas av {{SITENAME}}programvaran",
 "nosuchspecialpage"     => "Sådan specialsida finns inte",
 "nospecialpagetext"     => "Du har önskat en specialsida som inte
-hittas av Wikipediaprogramvaran.",
+hittas av {{SITENAME}}programvaran.",
 
 // General errors
 //
@@ -233,7 +233,7 @@
 "readonly"              => "Databasen är skrivskyddad",
 "enterlockreason"       => "Skriv en grund för skrivskyddet, inklusive
 en uppskattning på när skrivskyddet skall upphävas",
-"readonlytext"          => "Wikipediadatabasen är för ögonblicket skrivskyddad för
+"readonlytext"          => "{{SITENAME}}databasen är för ögonblicket skrivskyddad för
 nya sidor och andra modifikationer, beroende på rutinmässigt
 underhåll av databasen, varefter den återgår till normalstatus.
 Den administratör som skrivskyddade den har gett följande förklaring:
@@ -254,17 +254,17 @@
 "cannotdelete"          => "Kunde inte radera sidan, eller filen som specificerades.",
 "badtitle"              => "Felaktig titel",
 "badtitletext"          => "Den önskade sidans titel var inte tillåten, tom eller sidan
-är felaktigt länkad från en Wikipedia på ett annat språk.",
+är felaktigt länkad från en {{SITENAME}} på ett annat språk.",
 
 
 // Login and logout pages
 //
 "logouttitle"           => "Logga ut Användare",
 "logouttext"            => "Du är nu utloggad.
-Du kan fortsätta som anonym Wikipediaanvändare, eller så kan du logga in
+Du kan fortsätta som anonym {{SITENAME}}användare, eller så kan du logga in
 igen som samma eller annan användare.\n",
 
-"welcomecreation"       => "<h2>Välkommen, $1!</h2><p>Ditt konto har skapats. Glöm inte att anpassa dina Wikipediainställningar.",
+"welcomecreation"       => "<h2>Välkommen, $1!</h2><p>Ditt konto har skapats. Glöm inte att anpassa dina {{SITENAME}}inställningar.",
 
 "loginpagetitle"        => "Logga in Användare",
 "yourname"              => "Ditt användarnamn",
@@ -294,9 +294,9 @@
 Kontrollera stavningen, eller använd formuläret nedan för att skapa ett nytt konto.",
 "wrongpassword"         => "Lösenordet du skrev är felaktigt. Pröva igen",
 "mailmypassword"        => "Sänd mig ett nytt lösenord",
-"passwordremindertitle" => "Nytt lösenord från Wikipedia",
+"passwordremindertitle" => "Nytt lösenord från {{SITENAME}}",
 "passwordremindertext"  => "Någon (förmodligen du, med IP-numret $1)
-har bett oss sända dig ett nytt lösenord för din Wikipedia-inloggning
+har bett oss sända dig ett nytt lösenord för din {{SITENAME}}-inloggning
 Lösenordet för användare \"$2\" är nu \"$3\".
 Du ska logga in på din användare och byta lösenord.",
 "noemail"               => "Det finns ingen e-postadress registrerad för användare \"$1\".",
@@ -315,7 +315,7 @@
 "blockedtitle"          => "Användaren är spärrad",
 "blockedtext"           => "Ditt användarnamn har blivit spärrat av $1.
 Anledning är att:<br />''$2''<p>Ta kontakt med $1 eller en av de andra
-[[Wikipedia:Administratörer|administratörerna]] för att diskutera varför du blivit spärrad", // "
+[[{{ns:4}}:Administratörer|administratörerna]] för att diskutera varför du blivit spärrad", // "
 "newarticle"            => "(Ny)",
 "newarticletext"        => "Du har klickat på en röd länk, en sida som inte finns ännu. Du kan hjälpa till genom att själv skriva vad du vet om ämnet i fältet nedan. Om du inte vill skriva något kan du bara trycka på \"tillbaka\" i din webbläsare.",
 "anontalkpagetext"      => "---- ''Detta är en diskussionssida för en anonym användare, en användare som inte har skapat sig ett konto, eller som inte har loggat in på det. Vi måste därför använda personens numeriska [[IP-adress]] för identifiera honom eller henne. En sådan IP-adress kan ibland användas av flera olika personer. Om du är en anonym användare och ser meddelanden på den här sidan som inte tycks vara riktade till dig, var vänlig [[Special:Userlogin|logga in]] så du undviker förväxling med andra anonyma användare i framtiden.'' ",
@@ -338,7 +338,7 @@
 "editingold"            => "<strong>VARNING: Du redigerar en gammal version
 av den här sidan. Om du sparar den, kommer alla ändringar på denns sida föregående revison att bli överskrivna.</strong>",
 "yourdiff"              => "Skillnader",
-"copyrightwarning"      => "Observera att alla bidrag till Wikipedia är
+"copyrightwarning"      => "Observera att alla bidrag till {{SITENAME}} är
 att betrakta som utgivna under GNU Free Documentation License
 (se $1 för detaljer).
 Om du inte vill ha din text redigerad och kopierad efter andras gottfinnade så skall du inte skriva någon text här.<br />
@@ -445,7 +445,7 @@
 // Recent changes
 //
 "recentchanges"         => "Senaste ändringarna",
-"recentchangestext"     => "Se de senaste redigerade sidorna i Wikipedia på den här sidan.",
+"recentchangestext"     => "Se de senaste redigerade sidorna i {{SITENAME}} på den här sidan.",
 "rcloaderr"             => "Läser senaste redigerade sidor",
 "rcnote"                => "Nedanför är de senaste <strong>$1</strong> ändringarna under de sista <strong>$2</strong> dagarna.",
 "rcnotefrom"            => "Nedanför är ändringarna från <b>$2</b> till <b>$1</b> visade.",
@@ -476,7 +476,7 @@
 för att kunna ladda upp filer.",
 "uploaderror"           => "Uppladdnings fel",
 "uploadtext"            => "'''STOPP!''' Innan du laddar upp här,
-så måste du ha läst och följa Wikipedias
+så måste du ha läst och följa {{SITENAME}}s
 [[Project:Policy om bruk av bilder|policy om hur bilder får användas]].
 
 För att visa eller söka tidigare uppladdade bilder gå till
@@ -507,8 +507,8 @@
 ",
 "filename"              => "Filnamn",
 "filedesc"              => "Beskrivning",
-"copyrightpage"         => "Wikipedia:copyright",
-"copyrightpagename"     => "Wikipedia copyright",
+"copyrightpage"         => "{{ns:4}}:copyright",
+"copyrightpagename"     => "{{SITENAME}} copyright",
 "uploadedfiles"         => "Uppladdade filer",
 "ignorewarning"         => "Ignorera varning och spara fil.",
 "minlength"             => "Namnet på bildfilen ska vara minst tre bokstäver",
@@ -554,7 +554,7 @@
 "sitestats"             => "Statistiksida",
 "userstats"             => "Användarstatistik",
 "sitestatstext"         => "Det är <b>$1</b> sidor i databasen.
-Detta inkluderer diskussionssidorna, sidor om Wikipedia, mycket korta\"stub\"
+Detta inkluderer diskussionssidorna, sidor om {{SITENAME}}, mycket korta\"stub\"
 sidor, omdirigeringssidor, och andra sidor som kvalificerar sig som artiklar.
 Om man tar bort ovanstående så är det <b>$2</b> sidor som anses som riktiga artiklar.<p>
 Det har varit totalt <b>$3</b> sidvisningar och det har varit <b>$4</b> sidor som har ändrats
@@ -570,7 +570,7 @@
 "maintnancepagetext"    => "Den här sidan innehåller flera verktyg för att sköta sidan. Vissa av dessa funktioner tenderar att stressa databasen (allt tar lång tid), så var snäll och  tryck inte på reloadknappen varje gång du gjort en liten ändring.",
 "maintenancebacklink"   => "Tillbaka till underhållssidorna",
 "disambiguations"       => "Sidor med tvetydiga länkar",
-"disambiguationspage"   => "Wikipedia:Länkar till sidor med tvetydiga titlar",
+"disambiguationspage"   => "{{ns:4}}:Länkar till sidor med tvetydiga titlar",
 "disambiguationstext"   => "Följande artiklar länkar till en <i>sidor med tvetydliga titlar</i>. De ska länka till en sidor med en korrekt titel.<br />En sida behandlar som tvetydig om den länkar från $1. <br />Länkar från andra namngrupper är <i>inte</i> listade här.",
 "doubleredirects"       => "Dubbla omdirigeringar",
 "doubleredirectstext"   => "<b>OBS:</b> Den här listan kan innehålla falska resultat. Detta betyder normalt att det finns ytterligare text under den första #REDIRECT.<br />\n Varje rad innehåller en länk till den första och andra omdirigering och den första raden av den andra omdirigeringen ger oftast den \"riktiga\" artikeln, vilket egentligen den första omdirigeringen ska peka på.",
@@ -614,7 +614,7 @@
 "booksources"           => "Bokkällor",
 "booksourcetext"        => "Nedan följer en lista över länkar till hemsidor som säljer
 nya och begagnade böcker, och mycket annan information om de böcker du söker.
-Wikipedia har <b>inget</b> affärssamarbete med ovanstående företag och ska inte heller tolkas som en uppmuntran.",
+{{SITENAME}} har <b>inget</b> affärssamarbete med ovanstående företag och ska inte heller tolkas som en uppmuntran.",
 
 // Email this user
 //
@@ -679,7 +679,7 @@
 eller bild med all dess historia från databasen.
 Bekräfta att du förstår vad du håller på med och vilka konsekvenser
 detta leder till, och att det följer
-[[Wikipedia:Policy]].",
+[[{{ns:4}}:Policy]].",
 "actioncomplete"        => "Genomfört",
 "deletedtext"           => "\"$1\" har blivit borttagen.
 Se $2 för lista över senaste borttagningar",
@@ -710,7 +710,7 @@
 "undeletebtn"           => "Återställd!",
 "undeletedarticle"      => "återställd \"$1\"",
 "undeletedtext"         => "Artikeln [[$1]] har blivit återställd
-Se [[Wikipedia:Borttagningslogg]] för en lista över nyligen gjorda borttagningar och återställningar",
+Se [[{{ns:4}}:Borttagningslogg]] för en lista över nyligen gjorda borttagningar och återställningar",
 
 // Contributions
 //
@@ -739,7 +739,7 @@
 "blockiptext"           => "Använd formuläret nedan för att blockera skrivåtkomst
 från en viss IP-adress
 Detta ska bara genomföras för att stoppa klotter och
-överstämma med [[Wikipedia:Politik|Wikipedia politik]].
+överstämma med [[{{ns:4}}:Politik|{{SITENAME}} politik]].
 Fyll i anledningen till blockering nedan (till exempel vilka artiklar som klottrats ner).",
 "ipaddress"             => "IP-adress",
 "ipbreason"             => "Anledning",
@@ -774,9 +774,9 @@
 "locknoconfirm"         => "Du har inte bekräftat låsningen.",
 "lockdbsuccesssub"      => "Databasen har låsts",
 "unlockdbsuccesssub"    => "Databasen har låsts upp",
-"lockdbsuccesstext"     => "Wikipediadatabasen är låst.
+"lockdbsuccesstext"     => "{{SITENAME}}databasen är låst.
 <br />Kom ihåg att ta bort låsningen när du är färdig med ditt underhåll.",
-"unlockdbsuccesstext"   => "Wikipediadatabasen är upplåst.",
+"unlockdbsuccesstext"   => "{{SITENAME}}databasen är upplåst.",
 
 // Move page
 //
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageUg.php ref158/languages/LanguageUg.php
--- ref153/languages/LanguageUg.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/languages/LanguageUg.php	2005-12-15 15:32:15.000000000 -0500
@@ -0,0 +1,18 @@
+<?php
+/** Uyghur language file ( Oyghurque )
+  *
+  * @package MediaWiki
+  * @subpackage Language
+  */
+
+require_once( 'LanguageUtf8.php' );
+
+class LanguageUg extends LanguageUtf8 {
+	#FIXME: inherit almost everything for now
+
+	function isRTL() {
+		return true;
+	}
+}
+
+?>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/languages/LanguageUk.php ref158/languages/LanguageUk.php
--- ref153/languages/LanguageUk.php	2005-08-18 12:01:17.000000000 -0400
+++ ref158/languages/LanguageUk.php	2006-02-15 15:18:03.000000000 -0500
@@ -113,7 +113,7 @@
 "mainpage"		=> "Головна стаття",
 "mainpagetext"	=> "Програмне забезпечення вікі встановлено.",
 "about"			=> "Про",
-"aboutsite"      => "Про Вікіпедію",
+"aboutsite"      => "Про {{SITENAME}}",
 "aboutpage"		=> "{{ns:project}}:Про",
 "help"			=> "Довідка",
 "helppage"		=> "{{ns:project}}:Довідка",
@@ -136,7 +136,7 @@
 "currentevents" => "Поточні події",
 "errorpagetitle" => "Помилка",
 "returnto"		=> "Повернутися до $1.",
-"tagline"      	=> "Матеріал з Вікіпедії - вільної енциклопедії.",
+"tagline"      	=> "Матеріал з {{SITENAME}}",
 "whatlinkshere"	=> "Статті, що вказують на дану",
 "help"			=> "Довідка",
 "search"		=> "Пошук",
@@ -185,9 +185,9 @@
 # Main script and global functions
 #
 "nosuchaction"	=> "Такої дії не існує",
-"nosuchactiontext" => "Дія, вказана в URL, не розпізнається програмним забезпеченням Вікіпедії",
+"nosuchactiontext" => "Дія, вказана в URL, не розпізнається програмним забезпеченням {{SITENAME}}",
 "nosuchspecialpage" => "Такої спеціальної сторінки не існує",
-"nospecialpagetext" => "Спеціальна сторінка не розпізнається програмним забезпеченням Вікіпедії.",
+"nospecialpagetext" => "Спеціальна сторінка не розпізнається програмним забезпеченням {{SITENAME}}.",
 
 # General errors
 #
@@ -208,14 +208,14 @@
 "cachederror"	=> "Нижче відображена кеш-копія запитаної статті, можливо вона застаріла.",
 "readonly"		=> "Запис в базу даних заблоковано",
 "enterlockreason" => "Введіть обґрунтування блокування та інформацію про те, коли блокування буде знято",
-"readonlytext"	=> "Внесення нових статей та інші зміни бази даних Вікіпедії в даний момент заблоковано, ймовірно, через планове сервісне обслуговування бази даних,
+"readonlytext"	=> "Внесення нових статей та інші зміни бази даних {{SITENAME}} в даний момент заблоковано, ймовірно, через планове сервісне обслуговування бази даних,
 по закінченню якого нормальний стан буде відновлено.
 Заблокувавший адміністратор дав наступні пояснення:
 <p>$1",
 "missingarticle" => "База даних не знайшла текст статті,
 хоча повинна була знайти під іменем \"$1\".
 <p>Це може бути викликано використанням застарілого посилання на журнал змін або відмінностей для статті, що була вилучена.
-<p>Якщо справа не в цьому, то, швидше за все, ви знайшли помилку в програмному забезпеченні Вікіпедії.
+<p>Якщо справа не в цьому, то, швидше за все, ви знайшли помилку в програмному забезпеченні {{SITENAME}}.
 Будь-ласка, повідомте про це адміністратору, вказавши URL.",
 "internalerror" => "Внутрішня помилка",
 "filecopyerror" => "Неможливо скопіювати файл \"$1\" в \"$2\".",
@@ -241,10 +241,10 @@
 #
 "logouttitle"	=> "Вийти з системи",
 "logouttext"	=> "Ви працюєте в тому ж режимі, який був до вашої реєстрації в системі. Ви ідентифікуєтесь не з іменем, а з IP-адресом.
-Ви можете продовжувати використовувати Вікіпедію анонімно, або почати новий сеанс як той же самий чи інший користувач.\n",
+Ви можете продовжувати використовувати {{SITENAME}} анонімно, або почати новий сеанс як той же самий чи інший користувач.\n",
 
 "welcomecreation" => "<h2>Вітаємо Вас, $1!</h2><p>Ви зареєстровані.
-Не забудьте налаштувати Вікіпедію так, як Вам зручно.",
+Не забудьте налаштувати {{SITENAME}} так, як Вам зручно.",
 
 "loginpagetitle" => "Вхід в систему",
 "yourname"		=> "Ваше ім'я",
@@ -270,14 +270,14 @@
 "loginerror"	=> "Помилка при вході в систему",
 "noname"		=> "Користувача з таким іменем не існує.",
 "loginsuccesstitle" => "Успішний вхід в систему",
-"loginsuccess"	=> "Тепер ви працюєте в Вікіпедії під іменем \"$1\".",
+"loginsuccess"	=> "Тепер ви працюєте в {{SITENAME}} під іменем \"$1\".",
 "nosuchuser"	=> "Користувача з таким іменем \"$1\" не існує.
 Перевірте вірність написання, або скористайтеся формою, що нижче, щоб зареєструвати нового користувача.",
 "wrongpassword"	=> "Введений вами пароль невірний. Попробуйте ще раз.",
 "mailmypassword" => "Відправити вам новий пароль",
-"passwordremindertitle" => "Пам'ятка пароля Вікіпедії",
+"passwordremindertitle" => "Пам'ятка пароля {{SITENAME}}",
 "passwordremindertext" => "Хтось (можливо, ви - з IP-адреси $1)
-зробив запит на відправлення вам нового пароля користувача проекту Вікіпедія.
+зробив запит на відправлення вам нового пароля користувача проекту {{SITENAME}}.
 Пароль користувача \"$2\" тепер такий: \"$3\".
 Тепер вам необхідно ввійти в систему й змінити пароль.",
 "noemail"		=> "Для користувача \"$1\" не вказано адресу електронної пошти.",
@@ -300,7 +300,7 @@
 Зверніть увагу, що ви не можете використовувати функцію \"Надіслати електронного листа користувачу\", якщо ви не вказали адресу вашої електронної пошти в Ваших [[Спеціальні:Настройки|настройках]]
 Ваша IP-адреса - $3. Будь-ласка, вказуйте, якщо будете запитувати про блокування.
 ==Зауваження для користувачів America On-Line==
-Через багаторазові акти вандалізму одного з користувачів AOL, Вікіпедія часто блокує проксі-сервери AOL. Один й той же сервер може використовуватися різними користувачами, тому, нажаль, невинні користувачі AOL часто бувають _неспеціальне_ заблоковані. Ми вибачаємося за незручності.
+Через багаторазові акти вандалізму одного з користувачів AOL, {{SITENAME}} часто блокує проксі-сервери AOL. Один й той же сервер може використовуватися різними користувачами, тому, нажаль, невинні користувачі AOL часто бувають _неспеціальне_ заблоковані. Ми вибачаємося за незручності.
 Якщо це відбулося з Вами, відправте, будь-ласка, електронною поштою листа адміністратору. Не забудьте вказати вашу IP-адресу, вказану вище.",
 "newarticle"	=> "(Нова)",
 "newarticletext" => "Ви перейшли на статтю, яка поки що не існує.
@@ -327,7 +327,7 @@
 Якщо ви збережете її, будь-які редагування, зроблені між версіями, будуть втрачені.</strong>",
 "yourdiff"		=> "Відмінності",
 "copyrightwarning" => "Будь ласка, зверніть увагу, що будь-які добавлення
-й зміни в Вікіпедїї розглядаються як випущені на умовах
+й зміни в {{SITENAME}} розглядаються як випущені на умовах
 GNU Free Documentation License без незмінюваних секцій
 (див. $1, щоб взнати подробиці).
 Якщо ви не бажаєте, щоб написане вами безжалісно редагувалось
@@ -341,7 +341,7 @@
 Розгляньте, будь-ласка, варіанти розбиття статті на менші частини.</strong>",
 "readonlywarning" => "<strong>ПОПЕРЕДЖЕННЯ: База даних заблокована в зв’язку з процедурами обслуговування,
 тому ви не можете записати ваші зміни в даний момент.
-Можливо, вам варто зберегти текст в локальний файл (на свому диску) й записати його в Вікіпедію пізніше.</strong>",
+Можливо, вам варто зберегти текст в локальний файл (на свому диску) й записати його в {{SITENAME}} пізніше.</strong>",
 "protectedpagewarning" => "<strong>ПОПЕРЕДЖЕННЯ: Ця стаття заблокована, так що тільки користувачі с правом
 Сисоп можуть змінювати її. Будь-ласка, перегляньте
 [[Project:Правила захисту статей'>правила захисту статей]].</strong>",
@@ -373,7 +373,7 @@
 # Search results
 #
 "searchresults" => "Результати пошуку",
-"searchresulttext" => "Для отримання детальнішої інформації про пошук в Вікіпедії, див. [[Project:Пошук|Пошук в Вікіпедії]].",
+"searchresulttext" => "Для отримання детальнішої інформації про пошук в {{SITENAME}}, див. [[Project:Пошук|Пошук в {{SITENAME}}]].",
 "searchquery"	=> "На запит \"$1\"",
 "badquery"		=> "Невірно зфомульований запит",
 "badquerytext"	=> "Неможливо обробити ваш запит.
@@ -450,7 +450,7 @@
 "changes" => "редагування",
 "recentchanges" => "Нові редагування",
 # This is the default text, and can be overriden by editing [[{{ns:project}}::Recentchanges]]
-"recentchangestext" => "На цій сторінці представлені останні редагування в Вікіпедії.",
+"recentchangestext" => "На цій сторінці представлені останні редагування в {{SITENAME}}.",
 "rcloaderr"		=> "Завантаження нових редагувань",
 "rcnote"		=> "Нижче відображені останні <strong>$1</strong> редагувань за останні(й) <strong>$2</strong> день(і,ів).",
 "rcnotefrom"	=> "Нижче відображені редагування з <b>$2</b> (до <b>$1</b>).",
@@ -482,10 +482,10 @@
 щоб завантажувати файли.",
 "uploaderror"	=> "Помилка завантаження файлу",
 "uploadtext"	=> "'''СТІЙ!''' До того як почати завантажувати файли, переконайтесь, що ви прочитали й дієте відповідно
-[[Project:Правила_використання_зображеннь|правилам використання зображень Вікіпедії]].
+[[Project:Правила_використання_зображеннь|правилам використання зображень {{SITENAME}}]].
 
 Якщо файл з вказаним вами іменем вже існує
-в Вікіпедії, то він буде замінений без попередження.
+в {{SITENAME}}, то він буде замінений без попередження.
 Тому, якщо ви не збираєтесь обновляти файл,
 було б непогано перевірити, чи існує вже
 такий файл.
@@ -510,7 +510,7 @@
 '''<nowiki>[[зображення:file.jpg]]</nowiki>''' або '''<nowiki>[[зображення:file.png|альтернативний текст]]</nowiki>'''
 або '''<nowiki>[[звук:file.ogg]]</nowiki>''' для звуків.
 
-Будь-ласка, зверніть увагу, що аналогічно текстам статей Вікіпедії, інші можуть редагувати чи вилучати завантажені вами файли, якщо вони вважають, що це покращить енциклопедію, а ви можете бути заблоковані, якщо ваші дії шкодять системі.",
+Будь-ласка, зверніть увагу, що аналогічно текстам статей {{SITENAME}}, інші можуть редагувати чи вилучати завантажені вами файли, якщо вони вважають, що це покращить енциклопедію, а ви можете бути заблоковані, якщо ваші дії шкодять системі.",
 "uploadlog"		=> "журнал завантажень",
 "uploadlogpage" => "Журнал_завантажень",
 "uploadlogpagetext" => "Нижче представлено список найновіших завантажень файлів.
@@ -521,11 +521,12 @@
 "filename"		=> "Назва файлу",
 "filedesc"		=> "Опис файлу",
 "copyrightpage" => "{{ns:project}}:Авторське право",
-"copyrightpagename" => "Авторські права в Вікіпедії",
+"copyright"	=> "Зміст надається згідно з $1.",
+"copyrightpagename" => "Авторські права в {{SITENAME}}",
 "uploadedfiles"	=> "Завантажені файли",
 "ignorewarning"	=> "Ігнорувати попередження й все одно записати файл.",
 "minlength"		=> "Назва зображення повинна містити хоча б три символи.",
-"badfilename"	=> "Назва зображення було змінено на \"$1\".",
+"badfilename"	=> "Назву зображення було змінено на \"$1\".",
 "badfiletype"	=> "\".$1\" не є рекомендованим форматом для файлів зображень.",
 "largefile"		=> "Рекомендується використовувати файли зображень, розмір яких меньший 100 кілобайт.",
 "successfulupload" => "Завантаження успішно завершено",
@@ -565,7 +566,7 @@
 "sitestats"		=> "Статистика сайту",
 "userstats"		=> "Статистика користувачів",
 "sitestatstext" => "Загалом в базі даних <b>$1</b> статей.
-Сюди входять сторінки \"обговорень\", статті про Вікіпедію, мінімальні статті-\"заглушки\", перенаправлення, та інші сторінки, які, можливо, не повинні розглядатися як статті.
+Сюди входять сторінки \"обговорень\", статті про {{SITENAME}}, мінімальні статті-\"заглушки\", перенаправлення, та інші сторінки, які, можливо, не повинні розглядатися як статті.
 За виключенням них, є <b>$2</b> сторінок, які, швидше за все, повноцінні статті.<p>
 Всього зроблено <b>$3</b> переглядів та <b>$4</b> редагувань статей
 з моменту обновлення програмного забезпечення (20 липня 2002).
@@ -579,7 +580,7 @@
 "maintnancepagetext"	=> "На цій сторінці є декілька зручних інструментів для щоденного обслуговування. Деякі з цих функцій сильно перевантажують базу даних, тому, не перезагружайте сторінку після кожного редагування ;-)",
 "maintenancebacklink"	=> "Повернутися на сторінку обслуговування",
 "disambiguations"	=> "Багатозначні статті",
-"disambiguationspage"	=> "Вікіпедія:Посилання_на_багатозначні_статті",
+"disambiguationspage"	=> "{{ns:project}}:Посилання_на_багатозначні_статті",
 "disambiguationstext"	=> "Наступна статті посилаються на <i>багатозначні статті</i>. Замість цього вони повинні вказувати на відповідну конкретну статтю.<br />Стаття вважається багатозначною, якщо на неї вказує $1.<br />Посилання з інших просторів імен тут <i>не</i> вказані.",
 "doubleredirects"	=> "Подвійні перенаправлення",
 "doubleredirectstext"	=> "<b>Увага:</b> Цей список може містити невірні елементи. Це значить, що після першої директиви #REDIRECT йде додатковий текст з посиланнями.<br />\nКожен рядок містить посилання на перше та друге перенаправлення, а також перший рядок тексту другого перенаправлення, що, звичайно, містить \"реальне\" перенаправленне на необхідну статтю, куди повинно вказувати й перше перенаправленне.",
@@ -618,9 +619,9 @@
 "newpages"		=> "Нові статті",
 "ancientpages"		=> "Самі старі статті",
 "movethispage"	=> "Перемістити її",
-"unusedimagestext" => "<p>Будь-ласка, врахуйте, що інші веб-сайти (подібно інших мовних розділів Вікіпедії) можуть використовувати пряме посилання (URL) на це зображення, і тому зображення може активно використовуватися не дивлячись на його присутність в цьому списку.",
+"unusedimagestext" => "<p>Будь-ласка, врахуйте, що інші веб-сайти (подібно інших мовних розділів {{SITENAME}}) можуть використовувати пряме посилання (URL) на це зображення, і тому зображення може активно використовуватися не дивлячись на його присутність в цьому списку.",
 "booksources"	=> "Джерела книг",
-"booksourcetext" => "Нижче наведено список посилань на інші веб-сайти, де продаються нові та такі, що були в користуванні книги, а також там  може бути інформація про книги, які ви шукаєте.
+"booksourcetext" => "Нижче наведено список посилань на інші веб-сайти, де продаються нові та такі, що були використуванні книги, а також там  може бути інформація про книги, які ви шукаєте.
 {{SITENAME}} ніяк не зв’язані з будь-якими з них, і цей список не може розглядатися як їх підтримка.",
 "alphaindexline" => "від $1 до $2",
 
@@ -698,7 +699,7 @@
 "historywarning" => "Попередження: Стаття, яку ви збираєтеся вилучити, має журнал редагувань: ",
 "confirmdeletetext" => "Ви ось-ось назавжди вилучите статтю чи файл і всі її журнали редагувань з бази даних.
 Будь-ласка, підтвердіть, що ви бажаєте зробити це, що ви повністю розумієте наслідки й що ви робите це в відповідності з
-[[{{ns:project}}:Правила|правилами Вікіпедії]].",
+[[{{ns:project}}:Правила|правилами {{SITENAME}}]].",
 "actioncomplete" => "Дію виконано",
 "deletedtext"	=> "\"$1\" було вилучено.
 Див. $2 для перегляду списку останніх вилучень.",
@@ -768,7 +769,7 @@
 "blockip"		=> "Заблокувати IP-адресу",
 "blockiptext"	=> "Використовуйте форму що нижче, щоб заблокувати можливість збереження з вказаної IP-адреси.
 Це може бути зроблене виключно для попередження вандалізму і тільки в відповідності до
-[[{{ns:project}}:Правила|правил Вікіпедії]].
+[[{{ns:project}}:Правила|правил {{SITENAME}}]].
 Нище вкажіть конкретную причину (наприклад, процитуйте деякі статті з ознаками вандалізму).",
 "ipaddress"		=> "IP-адреса/Імя користувача",
 "ipbreason"		=> "Причина",
@@ -806,9 +807,9 @@
 "locknoconfirm" => "Ви не поставили галочку в поле підтвердження.",
 "lockdbsuccesssub" => "Базу даних заблоковано",
 "unlockdbsuccesssub" => "Базу даних розблоковано",
-"lockdbsuccesstext" => "Базу даних Вікіпедії заблоковано.
+"lockdbsuccesstext" => "Базу даних {{SITENAME}} заблоковано.
 <br />Не забудьте її розблокувати після завершення обслуговування.",
-"unlockdbsuccesstext" => "Базу даних Вікіпедії розблоковано.",
+"unlockdbsuccesstext" => "Базу даних {{SITENAME}} розблоковано.",
 
 # Move page
 #
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/commandLine.inc ref158/maintenance/commandLine.inc
--- ref153/maintenance/commandLine.inc	2005-07-02 05:05:00.000000000 -0400
+++ ref158/maintenance/commandLine.inc	2006-01-17 03:52:48.000000000 -0500
@@ -23,6 +23,7 @@
 if ( !isset( $optionsWithArgs ) ) {
 	$optionsWithArgs = array();
 }
+$optionsWithArgs[] = 'conf'; # For specifying the location of LocalSettings.php
 
 $self = array_shift( $argv );
 $self = __FILE__;
@@ -132,7 +133,11 @@
 	}
 } else {
 	$wgWikiFarm = false;
-	$settingsFile = "$IP/LocalSettings.php";
+	if ( isset( $options['conf'] ) ) {
+		$settingsFile = $options['conf'];
+	} else {
+		$settingsFile = "$IP/LocalSettings.php";
+	}
 
 	if ( ! is_readable( $settingsFile ) ) {
 		print "A copy of your installation's LocalSettings.php\n" .
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/deleteOldRevisions.inc ref158/maintenance/deleteOldRevisions.inc
--- ref153/maintenance/deleteOldRevisions.inc	1969-12-31 19:00:00.000000000 -0500
+++ ref158/maintenance/deleteOldRevisions.inc	2006-01-26 04:50:54.000000000 -0500
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Support functions for the deleteOldRevisions script
+ *
+ * @package MediaWiki
+ * @subpackage Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+ 
+require_once( 'purgeOldText.inc' );
+
+function DeleteOldRevisions( $delete = false ) {
+
+	# Data should come off the master, wrapped in a transaction
+	$dbw =& wfGetDB( DB_MASTER );
+	$dbw->begin();
+	
+	$tbl_pag = $dbw->tableName( 'page' );
+	$tbl_rev = $dbw->tableName( 'revision' );
+	
+	# Get "active" revisions from the page table
+	echo( "Searching for active revisions..." );
+	$res = $dbw->query( "SELECT page_latest FROM $tbl_pag" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$cur[] = $row->page_latest;
+	}
+	echo( "done.\n" );
+	
+	# Get all revisions that aren't in this set
+	echo( "Searching for inactive revisions..." );
+	$set = implode( ', ', $cur );
+	$res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_id NOT IN ( $set )" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$old[] = $row->rev_id;
+	}
+	echo( "done.\n" );
+	
+	# Inform the user of what we're going to do
+	$count = count( $old );
+	echo( "$count old revisions found.\n" );
+	
+	# Delete as appropriate
+	if( $delete && $count ) {
+		echo( "Deleting..." );
+		$set = implode( ', ', $old );
+		$dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" );
+		echo( "done.\n" );
+	}
+	
+	# This bit's done
+	# Purge redundant text records
+	$dbw->commit();
+	if( $delete ) {
+		PurgeRedundantText( true );
+	}
+
+}
+
+?>
\ No newline at end of file
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/deleteOldRevisions.php ref158/maintenance/deleteOldRevisions.php
--- ref153/maintenance/deleteOldRevisions.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/maintenance/deleteOldRevisions.php	2006-01-26 04:50:54.000000000 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * Delete old (non-current) revisions from the database
+ *
+ * @package MediaWiki
+ * @subpackage Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+$options = array( 'delete', 'help' );
+require_once( 'commandLine.inc' );
+require_once( 'deleteOldRevisions.inc' );
+
+echo( "Delete Old Revisions\n\n" );
+
+if( @$options['help'] ) {
+	ShowUsage();
+} else {
+	DeleteOldRevisions( @$options['delete'] );
+}
+
+function ShowUsage() {
+	echo( "Deletes non-current revisions from the database.\n\n" );
+	echo( "Usage: php deleteOldRevisions.php [--delete|--help]\n\n" );
+	echo( "delete : Performs the deletion\n" );
+	echo( "  help : Show this usage information\n" );
+}
+
+?>
\ No newline at end of file
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/dumpHTML.inc ref158/maintenance/dumpHTML.inc
--- ref153/maintenance/dumpHTML.inc	2005-07-24 02:51:14.000000000 -0400
+++ ref158/maintenance/dumpHTML.inc	2006-01-17 17:06:26.000000000 -0500
@@ -160,9 +160,8 @@
 		$this->setupGlobals();
 
 		$dbr =& wfGetDB( DB_SLAVE );
-		$categorylinks = $dbr->tableName( 'categorylinks' );
 		print "Selecting categories...";
-		$sql = 'SELECT DISTINCT cl_to FROM categorylinks';
+		$sql = 'SELECT DISTINCT cl_to FROM ' . $dbr->tableName( 'categorylinks' );
 		$res = $dbr->query( $sql, $fname );
 
 		print "\nWriting " . $dbr->numRows( $res ).  " category pages\n";
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/entities2literals.pl ref158/maintenance/entities2literals.pl
--- ref153/maintenance/entities2literals.pl	2005-05-04 13:49:33.000000000 -0400
+++ ref158/maintenance/entities2literals.pl	2005-12-11 14:58:26.000000000 -0500
@@ -1,4 +1,4 @@
-#!/usr/bin/evn perl
+#!/usr/bin/env perl
 # Takes STDIN and converts Converts hexadecimal, decimal and named HTML
 # entities to their respective literals.
 #
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/initStats.php ref158/maintenance/initStats.php
--- ref153/maintenance/initStats.php	2005-10-22 17:18:26.000000000 -0400
+++ ref158/maintenance/initStats.php	2006-01-16 08:05:49.000000000 -0500
@@ -16,6 +16,7 @@
 echo "$wgDBname: setting edits $edits, pages $pages\n";
 
 $dbw =& wfGetDB( DB_MASTER );
+$dbw->delete( 'site_stats', array( 'ss_row_id' => 1 ) );
 $dbw->insert( 'site_stats',
 	array( 'ss_row_id'=> 1,
 	       'ss_total_views'   => 0,
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/mysql5/tables.sql ref158/maintenance/mysql5/tables.sql
--- ref153/maintenance/mysql5/tables.sql	2005-10-25 21:10:44.000000000 -0400
+++ ref158/maintenance/mysql5/tables.sql	2006-01-27 18:51:45.000000000 -0500
@@ -853,3 +853,10 @@
 
 	INDEX (tb_page)
 ) TYPE=InnoDB, DEFAULT CHARSET=utf8;
+
+CREATE TABLE /*$wgDBprefix*/transcache (
+	tc_url		VARCHAR(255) NOT NULL,
+	tc_contents	TEXT,
+	tc_time		INT NOT NULL,
+	UNIQUE INDEX tc_url_idx(tc_url)
+);
\ No newline at end of file
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/namespace2sql.php ref158/maintenance/namespace2sql.php
--- ref153/maintenance/namespace2sql.php	2005-03-19 22:29:12.000000000 -0500
+++ ref158/maintenance/namespace2sql.php	2006-01-03 07:01:11.000000000 -0500
@@ -1,5 +1,4 @@
 <?php
-# $Header: /cvsroot/wikipedia/phase3/maintenance/namespace2sql.php,v 1.1 2005/03/20 03:29:12 kateturner Exp $
 #
 # Print SQL to insert namespace names into database.
 # This source code is in the public domain.
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/nukePage.inc ref158/maintenance/nukePage.inc
--- ref153/maintenance/nukePage.inc	1969-12-31 19:00:00.000000000 -0500
+++ ref158/maintenance/nukePage.inc	2006-02-25 21:09:27.000000000 -0500
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * Support functions for the nukeArticle script
+ *
+ * @package MediaWiki
+ * @subpackage Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+require_once( 'purgeOldText.inc' );
+
+function NukePage( $name, $delete = false ) {
+
+	$dbw =& wfGetDB( DB_MASTER );
+	$dbw->begin();
+	
+	$tbl_pag = $dbw->tableName( 'page' );
+	$tbl_rec = $dbw->tableName( 'recentchanges' );
+	$tbl_rev = $dbw->tableName( 'revision' );
+	
+	# Get page ID
+	echo( "Searching for \"$name\"..." );
+	$title = Title::newFromText( $name );
+	if( $title ) {
+		$id   = $title->getArticleID();
+		$real = $title->getPrefixedText();
+		echo( "found \"$real\" with ID $id.\n" );
+		
+		# Get corresponding revisions
+		echo( "Searching for revisions..." );
+		$res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_page = $id" );
+		while( $row = $dbw->fetchObject( $res ) ) {
+			$revs[] = $row->rev_id;
+		}
+		$count = count( $revs );
+		echo( "found $count.\n" );
+		
+		# Delete the page record and associated recent changes entries
+		if( $delete ) {
+			echo( "Deleting page record..." );
+			$dbw->query( "DELETE FROM $tbl_pag WHERE page_id = $id" );
+			echo( "done.\n" );
+			echo( "Cleaning up recent changes..." );
+			$dbw->query( "DELETE FROM $tbl_rec WHERE rc_cur_id = $id" );
+			echo( "done.\n" );
+		}
+
+		$dbw->commit();
+		
+		# Delete revisions as appropriate
+		if( $delete && $count ) {
+			echo( "Deleting revisions..." );
+			DeleteRevisions( $revs );
+			echo( "done.\n" );
+			PurgeRedundantText( true );
+		}
+		
+	} else {
+		echo( "not found in database.\n" );
+		$dbw->commit();
+	}
+	
+}
+
+function DeleteRevisions( $ids ) {
+
+	$dbw =& wfGetDB( DB_MASTER );
+	$dbw->begin();
+	
+	$tbl_rev = $dbw->tableName( 'revision' );
+	
+	$set = implode( ', ', $ids );
+	$dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" );
+	
+	$dbw->commit();	
+	
+}
+
+?>
\ No newline at end of file
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/nukePage.php ref158/maintenance/nukePage.php
--- ref153/maintenance/nukePage.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/maintenance/nukePage.php	2006-01-26 04:50:54.000000000 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * Erase a page record from the database
+ * Irreversible (can't use standard undelete) and does not update link tables
+ *
+ * @package MediaWiki
+ * @subpackage Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+require_once( 'commandLine.inc' );
+require_once( 'nukePage.inc' );
+
+echo( "Erase Page Record\n\n" );
+
+if( isset( $args[0] ) ) {
+	NukePage( $args[0], true );
+} else {
+	ShowUsage();
+}
+
+/** Show script usage information */
+function ShowUsage() {
+	echo( "Remove a page record from the database.\n\n" );
+	echo( "Usage: php nukePage.php <title>\n\n" );
+	echo( "	<title> : Page title; spaces escaped with underscores\n\n" );
+}
+
+?>
\ No newline at end of file
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/postgresql/pg_tables.sql ref158/maintenance/postgresql/pg_tables.sql
--- ref153/maintenance/postgresql/pg_tables.sql	2005-02-21 10:33:58.000000000 -0500
+++ ref158/maintenance/postgresql/pg_tables.sql	1969-12-31 19:00:00.000000000 -0500
@@ -1,285 +0,0 @@
---
--- Database schema for MediaWiki PostgreSQL support
---
---
-
-CREATE SCHEMA mediawiki;
-SET search_path=mediawiki;
-
-CREATE TABLE cur (
-    cur_id serial PRIMARY KEY,
-    cur_namespace smallint NOT NULL,
-    cur_title varchar(255) NOT NULL,
-    cur_text text NOT NULL,
-    cur_comment text,
-    cur_user integer DEFAULT 0 NOT NULL,
-    cur_user_text varchar(255) DEFAULT ''::varchar NOT NULL,
-    cur_timestamp timestamp without time zone NOT NULL,
-    cur_restrictions text DEFAULT ''::text NOT NULL,
-    cur_counter bigint DEFAULT 0 NOT NULL,
-    cur_is_redirect smallint DEFAULT 0 NOT NULL,
-    cur_minor_edit smallint DEFAULT 0 NOT NULL,
-    cur_is_new smallint DEFAULT 0 NOT NULL,
-    cur_random double precision DEFAULT random(),
-    cur_touched timestamp without time zone
-);
-CREATE INDEX cur_title_namespace_idx ON cur (cur_title, cur_namespace);
-CREATE INDEX cur_random_idx ON cur (cur_random);
-CREATE INDEX cur_name_title_timestamp_idx ON cur (cur_namespace, cur_title, cur_timestamp);
-CREATE INDEX cur_timestamp_idx ON cur (cur_timestamp);
-
-CREATE TABLE "old" (
-    old_id serial PRIMARY KEY,
-    old_namespace smallint NOT NULL,
-    old_title varchar(255) NOT NULL,
-    old_text text NOT NULL,
-    old_comment text NOT NULL,
-    old_user integer NOT NULL,
-    old_user_text varchar(255) NOT NULL,
-    old_timestamp timestamp without time zone NOT NULL,
-    old_minor_edit smallint NOT NULL,
-    old_flags text NOT NULL
-);
-CREATE INDEX old_name_title_ts_idx ON "old" (old_namespace, old_title, old_timestamp);
-CREATE INDEX old_timestamp ON "old" (old_timestamp);
-
-CREATE TABLE brokenlinks (
-    bl_from integer DEFAULT 0 NOT NULL,
-    bl_to varchar(255) NOT NULL,
-    PRIMARY KEY (bl_from,bl_to)
-
-);
-CREATE INDEX bl_to_idx ON brokenlinks (bl_to);
-
-CREATE TABLE hitcounter (
-    hc_id bigint DEFAULT 0 NOT NULL
-);
-CREATE INDEX hc_id_idx on hitcounter (hc_id);
-
-CREATE TABLE image (
-    img_name varchar(255) PRIMARY KEY,
-    img_size integer NOT NULL,
-    img_description text NOT NULL,
-    img_user integer NOT NULL,
-    img_user_text varchar(255) NOT NULL,
-    img_timestamp timestamp without time zone
-);
-CREATE INDEX img_size_idx ON image (img_size);
-CREATE INDEX img_timestamp ON image (img_timestamp);
-
-CREATE TABLE imagelinks (
-    il_from integer,
-    il_to varchar(255),
-    PRIMARY KEY (il_from, il_to)
-);
-CREATE INDEX il_to_idx ON imagelinks (il_to);
-
-
-CREATE TABLE categorylinks (
-    cl_from integer DEFAULT 0 NOT NULL,
-    cl_to varchar(255) NOT NULL,
-    cl_sortkey varchar(255) NOT NULL,
-    cl_timestamp timestamp without time zone,
-    PRIMARY KEY (cl_from,cl_to)
-);
-CREATE INDEX cl_to_sortkey_idx ON categorylinks (cl_to, cl_sortkey);
-CREATE INDEX cl_to_timestamp ON categorylinks (cl_to, cl_timestamp);
-
-CREATE TABLE links (
-    l_from integer NOT NULL,
-    l_to integer NOT NULL,
-    PRIMARY KEY (l_from,l_to)
-);
-CREATE INDEX l_to_idx ON links (l_to);
-
-
-CREATE TABLE linkscc (
-    lcc_pageid integer PRIMARY KEY,
-    lcc_title varchar(255) DEFAULT ''::character varying NOT NULL,
-    lcc_cacheobj text NOT NULL
-);
-CREATE RULE links_del AS ON DELETE TO links DO DELETE FROM linkscc WHERE (linkscc.lcc_pageid = old.l_from);
-
-CREATE TABLE searchindex (
-    si_page integer PRIMARY KEY,
-    si_title varchar(255) NOT NULL,
-    si_text text NOT NULL
-);
-
-CREATE TABLE "user" (
-    user_id serial PRIMARY KEY,
-    user_name varchar(255) UNIQUE NOT NULL,
-    user_real_name varchar(255) NOT NULL,
-    user_rights text DEFAULT ''::text NOT NULL,
-    user_password text DEFAULT ''::text NOT NULL,
-    user_newpassword text DEFAULT ''::text NOT NULL,
-    user_email text DEFAULT ''::text NOT NULL,
-    user_options text DEFAULT ''::text NOT NULL,
-    user_touched timestamp without time zone DEFAULT '1900-01-01 00:00:00'::timestamp without time zone NOT NULL,
-    user_token char(32) DEFAULT '' NOT NULL
-);
-
-
-CREATE TABLE user_newtalk (
-    user_id integer NOT NULL,
-    user_ip inet NOT NULL
-);
-CREATE INDEX user_newtalk_id_idx ON user_newtalk (user_id);
-CREATE INDEX user_newtalk_ip_idx ON user_newtalk (user_ip);
-
-CREATE TABLE ipblocks (
-    ipb_id serial PRIMARY KEY,
-    ipb_address inet NOT NULL,
-    ipb_user integer NOT NULL,
-    ipb_by integer NOT NULL,
-    ipb_reason text NOT NULL,
-    ipb_timestamp timestamp without time zone NOT NULL,
-    ipb_auto smallint NOT NULL,
-    ipb_expiry timestamp without time zone NOT NULL
-);
-CREATE INDEX ipb_address_idx ON ipblocks (ipb_address);
-CREATE INDEX ipb_user_idx ON ipblocks (ipb_user);
-
-CREATE TABLE math (
-    math_inputhash varchar(16) PRIMARY KEY,
-    math_outputhash varchar(16) NOT NULL,
-    math_html_conservativeness smallint NOT NULL,
-    math_html text,
-    math_mathml text
-);
-
-CREATE TABLE objectcache (
-    keyname varchar(255) PRIMARY KEY,
-    value text,
-    exptime timestamp without time zone
-);
-CREATE INDEX oc_exptime ON objectcache (exptime);
-
-CREATE TABLE archive (
-    ar_namespace smallint NOT NULL,
-    ar_title varchar(255) NOT NULL,
-    ar_text text NOT NULL,
-    ar_comment text NOT NULL,
-    ar_user integer NOT NULL,
-    ar_user_text varchar(255) NOT NULL,
-    ar_timestamp timestamp without time zone NOT NULL,
-    ar_minor_edit smallint NOT NULL,
-    ar_flags text NOT NULL
-);
-
-CREATE TABLE recentchanges (
-    rc_id serial PRIMARY KEY,
-    rc_timestamp timestamp without time zone NOT NULL,
-    rc_cur_time timestamp without time zone NOT NULL,
-    rc_user integer NOT NULL,
-    rc_user_text varchar(255) NOT NULL,
-    rc_namespace smallint NOT NULL,
-    rc_title varchar(255) NOT NULL,
-    rc_comment text NOT NULL,
-    rc_minor smallint NOT NULL,
-    rc_bot smallint NOT NULL,
-    rc_new smallint NOT NULL,
-    rc_cur_id integer NOT NULL,
-    rc_this_oldid integer NOT NULL,
-    rc_last_oldid integer NOT NULL,
-    rc_type smallint NOT NULL,
-    rc_moved_to_ns smallint,
-    rc_moved_to_title varchar,
-    rc_ip inet,
-    rc_patrolled smallint
-);
-CREATE INDEX rc_ip ON recentchanges (rc_ip);
-CREATE INDEX rc_new_name_ts_idx ON recentchanges (rc_new, rc_namespace, rc_timestamp);
-CREATE INDEX rc_cur_id_idx ON recentchanges (rc_cur_id);
-
-CREATE TABLE site_stats (
-    ss_row_id serial PRIMARY KEY,
-    ss_total_views bigint NOT NULL,
-    ss_total_edits bigint NOT NULL,
-    ss_good_articles bigint NOT NULL
-);
-
-CREATE TABLE oldimage (
-    oi_name varchar(255) NOT NULL,
-    oi_archive_name varchar(255) NOT NULL,
-    oi_size integer NOT NULL,
-    oi_description text NOT NULL,
-    oi_user integer NOT NULL,
-    oi_user_text varchar(255) NOT NULL,
-    oi_timestamp timestamp without time zone NOT NULL
-);
-CREATE INDEX oi_name_idx ON oldimage (oi_name);
-
-CREATE TABLE querycache (
-    qc_type char(32),
-    qc_value integer,
-    qc_namespace smallint,
-    qc_title char(255)
-);
-CREATE INDEX qc_type_value_idx ON querycache (qc_type, qc_value);
-
-CREATE TABLE watchlist (
-    wl_user integer NOT NULL,
-    wl_namespace smallint NOT NULL,
-    wl_title varchar(255) NOT NULL,
-    PRIMARY KEY (wl_user, wl_namespace, wl_title)
-);
-CREATE INDEX idx_wl_user ON watchlist (wl_user);
-CREATE INDEX idx_wl_title ON watchlist (wl_title);
-
-CREATE TABLE interwiki (
-    iw_prefix char(32) PRIMARY KEY,
-    iw_url varchar(127) NOT NULL,
-    iw_local smallint NOT NULL
-);
-
-CREATE TABLE profiling (
-    pf_count integer,
-    pf_time double precision,
-    pf_name varchar(255) PRIMARY KEY
-);
-
-CREATE TABLE validate (
-    val_user integer DEFAULT 0 NOT NULL,
-    val_title varchar(255) NOT NULL,
-    val_timestamp timestamp without time zone NOT NULL,
-    val_type integer DEFAULT 0 NOT NULL,
-    val_value integer DEFAULT 0 NOT NULL,
-    val_comment varchar(255) NOT NULL
-);
-CREATE INDEX val_user ON validate (val_user, val_title, val_timestamp);
-
-CREATE TABLE user_rights (
-    user_id integer PRIMARY KEY,
-    user_rights text NOT NULL
-);
-
-CREATE TABLE logging (
-    log_type character(10) NOT NULL,
-    log_action character(10) NOT NULL,
-    log_timestamp timestamp without time zone NOT NULL,
-    log_user integer NOT NULL,
-    log_namespace smallint NOT NULL,
-    log_title character varying(255) NOT NULL,
-    log_comment character varying(255) NOT NULL
-);
-
-CREATE INDEX log_type_time ON logging USING btree (log_type, log_timestamp);
-CREATE INDEX log_user_time ON logging USING btree (log_user, log_timestamp);
-CREATE INDEX log_page_time ON logging USING btree (log_namespace, log_title, log_timestamp);
-
-
--- HACK HACK HACK
-CREATE TABLE "group" (
-  group_id integer PRIMARY KEY,
-  group_name varchar(50) NOT NULL,
-  group_description varchar(255) NOT NULL,
-  group_rights text NOT NULL
-);
-
--- Relation table between user and groups
-CREATE TABLE user_groups (
-	ug_user integer NOT NULL,
-	ug_group integer NOT NULL,
-	PRIMARY KEY  (ug_user,ug_group)
-);
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/postgresql/pg_users.sql ref158/maintenance/postgresql/pg_users.sql
--- ref153/maintenance/postgresql/pg_users.sql	2004-11-29 13:25:27.000000000 -0500
+++ ref158/maintenance/postgresql/pg_users.sql	1969-12-31 19:00:00.000000000 -0500
@@ -1,14 +0,0 @@
--- access rights for wiki database users
-CREATE USER {$wgDBuser}
-	PASSWORD '{$wgDBpassword}';
-
-GRANT SELECT,INSERT,UPDATE,DELETE ON
-	archive,brokenlinks,categorylinks,cur,
-	cur_cur_id_seq,hitcounter,image,imagelinks,
-	interwiki,ipblocks,ipblocks_ipb_id_seq,links,
-	linkscc,math,objectcache,"old",old_old_id_seq,
-	oldimage,profiling,querycache,recentchanges,
-	recentchanges_rc_id_seq,searchindex,site_stats,
-	site_stats_ss_row_id_seq,"user",user_newtalk,
-	user_rights,user_user_id_seq,validate,watchlist 
-TO {$wgDBuser};
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/purgeOldText.inc ref158/maintenance/purgeOldText.inc
--- ref153/maintenance/purgeOldText.inc	1969-12-31 19:00:00.000000000 -0500
+++ ref158/maintenance/purgeOldText.inc	2006-02-04 12:39:01.000000000 -0500
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Support functions for cleaning up redundant text records
+ *
+ * @package MediaWiki
+ * @subpackage Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+function PurgeRedundantText( $delete = false ) {
+	
+	# Data should come off the master, wrapped in a transaction
+	$dbw =& wfGetDB( DB_MASTER );
+	$dbw->begin();
+	
+	$tbl_arc = $dbw->tableName( 'archive' );
+	$tbl_rev = $dbw->tableName( 'revision' );
+	$tbl_txt = $dbw->tableName( 'text' );
+	
+	# Get "active" text records from the revisions table
+	echo( "Searching for active text records in revisions table..." );
+	$res = $dbw->query( "SELECT DISTINCTROW rev_text_id FROM $tbl_rev" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$cur[] = $row->rev_text_id;
+	}
+	echo( "done.\n" );
+	
+	# Get "active" text records from the archive table
+	echo( "Searching for active text records in archive table..." );
+	$res = $dbw->query( "SELECT DISTINCTROW ar_text_id FROM $tbl_arc" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$cur[] = $row->ar_text_id;
+	}
+	echo( "done.\n" );
+	
+	# Get the IDs of all text records not in these sets
+	echo( "Searching for inactive text records..." );
+	$set = implode( ', ', $cur );
+	$res = $dbw->query( "SELECT old_id FROM $tbl_txt WHERE old_id NOT IN ( $set )" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$old[] = $row->old_id;
+	}
+	echo( "done.\n" );
+	
+	# Inform the user of what we're going to do
+	$count = count( $old );
+	echo( "$count inactive items found.\n" );
+	
+	# Delete as appropriate
+	if( $delete && $count ) {
+		echo( "Deleting..." );
+		$set = implode( ', ', $old );
+		$dbw->query( "DELETE FROM $tbl_txt WHERE old_id IN ( $set )" );
+		echo( "done.\n" );
+	}
+	
+	# Done
+	$dbw->commit();
+	
+}
+
+?>
\ No newline at end of file
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/purgeOldText.php ref158/maintenance/purgeOldText.php
--- ref153/maintenance/purgeOldText.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/maintenance/purgeOldText.php	2006-01-26 04:50:54.000000000 -0500
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * Purge old text records from the database
+ *
+ * @package MediaWiki
+ * @subpackage Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+$options = array( 'purge', 'help' );
+require_once( 'commandLine.inc' );
+require_once( 'purgeOldText.inc' );
+
+echo( "Purge Old Text\n\n" );
+
+if( @$options['help'] ) {
+	ShowUsage();
+} else {
+	PurgeRedundantText( @$options['purge'] );
+}
+
+function ShowUsage() {
+	echo( "Prunes unused text records from the database.\n\n" );
+	echo( "Usage: php purgeOldText.php [--purge]\n\n" );
+	echo( "purge : Performs the deletion\n" );
+	echo( " help : Show this usage information\n" );
+}
+
+?>
\ No newline at end of file
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/removeUnusedAccounts.php ref158/maintenance/removeUnusedAccounts.php
--- ref153/maintenance/removeUnusedAccounts.php	1969-12-31 19:00:00.000000000 -0500
+++ ref158/maintenance/removeUnusedAccounts.php	2006-01-17 20:32:53.000000000 -0500
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Remove unused user accounts from the database
+ * An unused account is one which has made no edits
+ *
+ * @package MediaWiki
+ * @subpackage Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+define( 'ACTION_REPORT', 0 );
+define( 'ACTION_DELETE', 1 );
+$options = array( 'delete','help' );
+require_once( 'commandLine.inc' );
+require_once( 'userFunctions.inc' );
+
+echo( "Remove Unused Accounts\nThis script will delete all users who have made no edits.\n\n" );
+
+# Check parameters
+if( @$options['help'] ) {
+	echo( "USAGE: removeUnusedAccounts.php [--help|--delete]\n\nThe first (default) account is ignored.\n\n" );
+	wfDie();
+} else {
+	$delete = @$options['delete'] ? true : false ;
+}
+
+$count = 0;
+$del = array();
+
+# Right, who needs deleting?
+$users = GetUsers();
+echo( "Found " . count( $users ) . " accounts.\n\n" );
+echo( "Locating inactive users..." );
+foreach( $users as $user ) {
+	if( $user != 1 ) {	# Don't *touch* the first user account, ever
+		if( CountEdits( $user, false ) == 0 ) {
+			# User has no edits, mark them for deletion
+			$del[] = $user;
+			$count++;
+		}
+	}
+}
+echo( "done.\n" );
+
+# Purge the inactive accounts we found
+echo( $count . " inactive accounts found.\n" );
+if( $count > 0 ) {
+	if( $delete ) {
+		echo( "Deleting..." );
+		DeleteUsers( $del );
+		echo( "done.\n" );
+	} else {
+		echo "Run the script with the --delete option to remove them from the database.\n";
+	}
+}
+		
+echo( "\n" );
+
+?>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/splitLanguageFiles.inc ref158/maintenance/splitLanguageFiles.inc
--- ref153/maintenance/splitLanguageFiles.inc	2005-07-25 08:49:14.000000000 -0400
+++ ref158/maintenance/splitLanguageFiles.inc	1969-12-31 19:00:00.000000000 -0500
@@ -1,1174 +0,0 @@
-<?php
-/**
- * This is an experimental list. It will later be used with a script to split
- * the languages files in several parts then the message system will only load
- * in memory the parts which are actually needed.
- * 
- * Generated using: grep -r foobar *
- * 
- * $commonMsg is the default array. Other arrays will only be loaded if needed.
- */
-$installerMsg = array (
-'mainpagetext',
-'mainpagedocfooter',
-);
-
-$ActionMsg = array (
-'delete' => array(
-	'delete',
-	'deletethispage',
-	'undelete_short1',
-	'undelete_short',
-	'undelete',
-	'undeletepage',
-	'undeletepagetext',
-	'undeletearticle',
-	'undeleterevisions',
-	'undeletehistory',
-	'undeleterevision',
-	'undeletebtn',
-	'undeletedarticle',
-	'undeletedrevisions',
-	'undeletedtext',
-	),
-'move' => array(
-	'move',
-	'movethispage',
-),
-'revert' => array(
-
-),
-'protect' => array(
-	'confirmprotect',
-	'confirmprotecttext',
-	'confirmunprotect',
-	'confirmunprotecttext',
-	'protect',
-	'protectcomment',
-	'protectmoveonly',
-	'protectpage',
-	'protectsub',
-	'protectthispage',
-	'unprotect',
-	'unprotectthispage',
-	'unprotectsub',
-	'unprotectcomment',
-),
-);
-
-$CreditsMsg = array(
-'anonymous',
-'siteuser',
-'lastmodifiedby',
-'and',
-'othercontribs',
-'others',
-'siteusers',
-'creditspage',
-'nocredits',
-);
-
-// When showing differences
-$DifferenceMsg = array(
-'previousdiff',
-'nextdiff',
-);
-
-// used on page edition
-$EditMsg = array(
-'bold_sample',
-'bold_tip',
-'italic_sample',
-'italic_tip',
-'link_sample',
-'link_tip',
-'extlink_sample',
-'extlink_tip',
-'headline_sample',
-'headline_tip',
-'math_sample',
-'math_tip',
-'nowiki_sample',
-'nowiki_tip',
-'image_sample',
-'image_tip',
-'media_sample',
-'media_tip',
-'sig_tip',
-'hr_tip',
-
-'accesskey-search',
-'accesskey-minoredit',
-'accesskey-save',
-'accesskey-preview',
-'accesskey-diff',
-'accesskey-compareselectedversions',
-'tooltip-search',
-'tooltip-minoredit',
-'tooltip-save',
-'tooltip-preview',
-'tooltip-diff',
-'tooltip-compareselectedversions',
-'tooltip-watch',
-
-'copyrightwarning',
-'copyrightwarning2',
-'editconflict',
-'editing',
-'editingcomment',
-'editingold',
-'editingsection',
-'explainconflict',
-'infobox',
-'infobox_alert',
-'longpagewarning',
-'nonunicodebrowser',
-'previewconflict',
-'previewnote',
-'protectedpagewarning',
-'readonlywarning',
-'spamprotectiontitle',
-'spamprotectiontext',
-'spamprotectionmatch',
-'templatesused',
-'yourdiff',
-'yourtext',
-);
-
-// Per namespace
-$NamespaceCategory = array (
-'category_header',
-'categoryarticlecount',
-'categoryarticlecount1',
-'listingcontinuesabbrev',
-'subcategories',
-'subcategorycount',
-'subcategorycount1',
-'usenewcategorypage',
-);
-
-$NamespaceImage = array (
-'deletedrevision',
-'edit-externally',
-'edit-externally-help',
-'showbigimage',
-);
-
-$NamespaceSpecialMsg = array(
-'nosuchspecialpage',
-'nospecialpagetext',
-);
-
-
-
-// per special pages
-$SpecialAllMessages = array(
-'allmessages',
-'allmessagesname',
-'allmessagesdefault',
-'allmessagescurrent',
-'allmessagestext',
-'allmessagesnotsupportedUI',
-'allmessagesnotsupportedDB',
-);
-
-
-$SpecialAllPages = array(
-'articlenamespace',
-'allpagesformtext1',
-'allpagesformtext2',
-'allarticles',
-'allpagesprev',
-'allpagesnext',
-'allpagesnamespace',
-'allpagessubmit',
-);
-
-
-$SpecialAskSQLMsg = array(
-'asksql',
-'asksqltext',
-'sqlislogged',
-'sqlquery',
-'querybtn',
-'selectonly',
-'querysuccessful',
-);
-
-$SpecialBlockip = array(
-'blockip',
-'blockiptext',
-'range_block_disabled',
-'ipb_expiry_invalid',
-'ip_range_invalid',
-'ipbexpiry',
-'ipbsubmit',
-);
-
-$SpecialContributions = array(
-'contribsub',
-'contributionsall',
-'newbies',
-'nocontribs',
-'ucnote',
-'uclinks',
-'uctop',
-);
-
-$SpecialExportMsg = array (
-'export',
-'exporttext',
-'exportcuronly',
-);
-
-$SpecialImagelist = array(
-'imagelistall',
-);
-
-$SpecialImportMsg = array (
-'import',
-'importtext',
-'importfailed',
-'importnotext',
-'importsuccess',
-'importhistoryconflict',
-);
-
-$SpecialLockdbMsg = array(
-'lockdb',
-'unlockdb',
-'lockdbtext',
-'unlockdbtext',
-'lockconfirm',
-'unlockconfirm',
-'lockbtn',
-'unlockbtn',
-'locknoconfirm',
-'lockdbsuccesssub',
-'unlockdbsuccesssub',
-'lockdbsuccesstext',
-'unlockdbsuccesstext',
-);
-
-$SpecialLogMsg = array(
-'specialloguserlabel',
-'speciallogtitlelabel',
-);
-
-$SpecialMaintenance = array(
-'maintenance',
-'maintnancepagetext',
-'maintenancebacklink',
-'disambiguations',
-'disambiguationspage',
-'disambiguationstext',
-'doubleredirects',
-'doubleredirectstext',
-'brokenredirects',
-'brokenredirectstext',
-'selflinks',
-'selflinkstext',
-'mispeelings',
-'mispeelingstext',
-'mispeelingspage',
-'missinglanguagelinks',
-'missinglanguagelinksbutton',
-'missinglanguagelinkstext',
-);
-
-$SpecialMakeSysopMsg = array (
-'already_bureaucrat',
-'already_sysop',
-'makesysop',
-'makesysoptitle',
-'makesysoptext',
-'makesysopname',
-'makesysopsubmit',
-'makesysopok',
-'makesysopfail',
-'rights',
-'set_rights_fail',
-'set_user_rights',
-'user_rights_set',
-);
-
-$SpecialMovepageMsg = array(
-'newtitle',
-'movearticle',
-'movenologin',
-'movenologintext',
-'movepage',
-'movepagebtn',
-'movepagetalktext',
-'movepagetext',
-'movetalk',
-'pagemovedsub',
-'pagemovedtext',
-'talkexists',
-'talkpagemoved',
-'talkpagenotmoved',
-
-);
-
-$SpecialPreferencesMsg = array(
-'tog-underline',
-'tog-highlightbroken',
-'tog-justify',
-'tog-hideminor',
-'tog-usenewrc',
-'tog-numberheadings',
-'tog-showtoolbar',
-'tog-editondblclick',
-'tog-editsection',
-'tog-editsectiononrightclick',
-'tog-showtoc',
-'tog-rememberpassword',
-'tog-editwidth',
-'tog-watchdefault',
-'tog-minordefault',
-'tog-previewontop',
-'tog-previewonfirst',
-'tog-nocache',
-'tog-enotifwatchlistpages',
-'tog-enotifusertalkpages',
-'tog-enotifminoredits',
-'tog-enotifrevealaddr',
-'tog-shownumberswatching',
-'tog-rcusemodstyle',
-'tog-showupdated',
-'tog-fancysig',
-'tog-externaleditor',
-
-'imagemaxsize',
-'prefs-help-email',
-'prefs-help-email-enotif',
-'prefs-help-realname',
-'prefs-help-userdata',
-'prefs-misc',
-'prefs-personal',
-'prefs-rc',
-'resetprefs',
-'saveprefs',
-'oldpassword',
-'newpassword',
-'retypenew',
-'textboxsize',
-'rows',
-'columns',
-'searchresultshead',
-'resultsperpage',
-'contextlines',
-'contextchars',
-'stubthreshold',
-'recentchangescount',
-'savedprefs',
-'timezonelegend',
-'timezonetext',
-'localtime',
-'timezoneoffset',
-'servertime',
-'guesstimezone',
-'emailflag',
-'defaultns',
-'default',
-);
-
-$SpecialRecentchangesMsg = array(
-'changes',
-'recentchanges',
-'recentchanges-url',
-'recentchangestext',
-'rcloaderr',
-'rcnote',
-'rcnotefrom',
-'rclistfrom',
-'showhideminor',
-'rclinks',
-'rchide',
-'rcliu',
-'diff',
-'hist',
-'hide',
-'show',
-'tableform',
-'listform',
-'nchanges',
-'minoreditletter',
-'newpageletter',
-'sectionlink',
-'number_of_watching_users_RCview',
-'number_of_watching_users_pageview',
-'recentchangesall',
-);
-
-$SpecialRecentchangeslinkedMsg = array(
-'rclsub',
-);
-
-$SpecialSearchMsg = array(
-'searchresults',
-'searchresulttext',
-'searchquery',
-'badquery',
-'badquerytext',
-'matchtotals',
-'nogomatch',
-'titlematches',
-'notitlematches',
-'textmatches',
-'notextmatches',
-);
-
-$SpecialSitesettingsMsg = array(
-'sitesettings',
-'sitesettings-features',
-'sitesettings-permissions',
-'sitesettings-memcached',
-'sitesettings-debugging',
-'sitesettings-caching',
-'sitesettings-wgShowIPinHeader',
-'sitesettings-wgUseDatabaseMessages',
-'sitesettings-wgUseCategoryMagic',
-'sitesettings-wgUseCategoryBrowser',
-'sitesettings-wgHitcounterUpdateFreq',
-'sitesettings-wgAllowExternalImages',
-'sitesettings-permissions-readonly',
-'sitesettings-permissions-whitelist',
-'sitesettings-permissions-banning',
-'sitesettings-permissions-miser',
-'sitesettings-wgReadOnly',
-'sitesettings-wgReadOnlyFile',
-'sitesettings-wgWhitelistEdit',
-'sitesettings-wgWhitelistRead',
-'sitesettings-wgWhitelistAccount-user',
-'sitesettings-wgWhitelistAccount-sysop',
-'sitesettings-wgWhitelistAccount-developer',
-'sitesettings-wgSysopUserBans',
-'sitesettings-wgSysopRangeBans',
-'sitesettings-wgDefaultBlockExpiry',
-'sitesettings-wgMiserMode',
-'sitesettings-wgDisableQueryPages',
-'sitesettings-wgUseWatchlistCache',
-'sitesettings-wgWLCacheTimeout',
-'sitesettings-cookies',
-'sitesettings-performance',
-'sitesettings-images',
-);
-
-$SpecialStatisticsMsg = array(
-'statistics',
-'sitestats',
-'userstats',
-'sitestatstext',
-'userstatstext',
-);
-
-$SpecialUndelte = array(
-'deletepage',
-);
-
-$SpecialUploadMsg = array(
-'affirmation',
-'badfilename',
-'badfiletype',
-'emptyfile',
-'fileexists',
-'filedesc',
-'filename',
-'filesource',
-'filestatus',
-'fileuploaded',
-'ignorewarning',
-'illegalfilename',
-'largefile',
-'minlength',
-'noaffirmation',
-'reupload',
-'reuploaddesc',
-'savefile',
-'successfulupload',
-'upload',
-'uploadbtn',
-'uploadcorrupt',
-'uploaddisabled',
-'uploadfile',
-'uploadedimage',
-'uploaderror',
-'uploadlink',
-'uploadlog',
-'uploadlogpage',
-'uploadlogpagetext',
-'uploadnologin',
-'uploadnologintext',
-'uploadtext',
-'uploadwarning',
-);
-
-$SpecialUserlevelsMsg = array(
-'saveusergroups',
-'userlevels-editusergroup',
-'userlevels-groupsavailable',
-'userlevels-groupshelp',
-'userlevels-groupsmember',
-);
-
-$SpecialUserloginMsg = array(
-'acct_creation_throttle_hit',
-'loginend',
-'loginsuccesstitle',
-'loginsuccess',
-'nocookiesnew',
-'nocookieslogin',
-'noemail',
-'noname',
-'nosuchuser',
-'mailmypassword',
-'mailmypasswordauthent',
-'passwordremindermailsubject',
-'passwordremindermailbody',
-'passwordsent',
-'passwordsentforemailauthentication',
-'userexists',
-'wrongpassword',
-);
-
-$SpecialValidateMsg = array(
-'val_yes',
-'val_no',
-'val_revision',
-'val_time',
-'val_list_header',
-'val_add',
-'val_del',
-'val_warning',
-'val_rev_for',
-'val_rev_stats_link',
-'val_iamsure',
-'val_clear_old',
-'val_merge_old',
-'val_form_note',
-'val_noop',
-'val_percent',
-'val_percent_single',
-'val_total',
-'val_version',
-'val_tab',
-'val_this_is_current_version',
-'val_version_of',
-'val_table_header',
-'val_stat_link_text',
-'val_view_version',
-'val_validate_version',
-'val_user_validations',
-'val_no_anon_validation',
-'val_validate_article_namespace_only',
-'val_validated',
-'val_article_lists',
-'val_page_validation_statistics',
-);
-
-$SpecialVersionMsg = array(
-'special_version_prefix',
-'special_version_postfix'
-);
-
-$SpecialWatchlistMsg = array(
-'watchlistall1',
-'watchlistall2',
-'wlnote',
-'wlshowlast',
-'wlsaved',
-'wlhideshowown',
-'wlshow',
-'wlhide',
-);
-
-$SpecialWhatlinkshereMsg = array(
-'linklistsub',
-'nolinkshere',
-'isredirect',
-);
-
-
-$commonMsg = array (
-'sunday',
-'monday',
-'tuesday',
-'wednesday',
-'thursday',
-'friday',
-'saturday',
-'january',
-'february',
-'march',
-'april',
-'may_long',
-'june',
-'july',
-'august',
-'september',
-'october',
-'november',
-'december',
-'jan',
-'feb',
-'mar',
-'apr',
-'may',
-'jun',
-'jul',
-'aug',
-'sep',
-'oct',
-'nov',
-'dec',
-'categories',
-'category',
-'linktrail',
-'mainpage',
-'portal',
-'portal-url',
-'about',
-'aboutsite',
-'aboutpage',
-'article',
-'help',
-'helppage',
-'wikititlesuffix',
-'bugreports',
-'bugreportspage',
-'sitesupport',
-'sitesupport-url',
-'faq',
-'faqpage',
-'edithelp',
-'newwindow',
-'edithelppage',
-'cancel',
-'qbfind',
-'qbbrowse',
-'qbedit',
-'qbpageoptions',
-'qbpageinfo',
-'qbmyoptions',
-'qbspecialpages',
-'moredotdotdot',
-'mypage',
-'mytalk',
-'anontalk',
-'navigation',
-'metadata',
-'metadata_page',
-'currentevents',
-'currentevents-url',
-'disclaimers',
-'disclaimerpage',
-'errorpagetitle',
-'returnto',
-'tagline',
-'whatlinkshere',
-'search',
-'go',
-'history',
-'history_short',
-'info_short',
-'printableversion',
-'edit',
-'editthispage',
-'newpage',
-'talkpage',
-'specialpage',
-'personaltools',
-'postcomment',
-'addsection',
-'articlepage',
-'subjectpage',
-'talk',
-'toolbox',
-'userpage',
-'wikipediapage',
-'imagepage',
-'viewtalkpage',
-'otherlanguages',
-'redirectedfrom',
-'lastmodified',
-'viewcount',
-'copyright',
-'poweredby',
-'printsubtitle',
-'protectedpage',
-'administrators',
-'sysoptitle',
-'sysoptext',
-'developertitle',
-'developertext',
-'bureaucrattitle',
-'bureaucrattext',
-'nbytes',
-'ok',
-'sitetitle',
-'pagetitle',
-'sitesubtitle',
-'retrievedfrom',
-'newmessages',
-'newmessageslink',
-'editsection',
-'toc',
-'showtoc',
-'hidetoc',
-'thisisdeleted',
-'restorelink',
-'feedlinks',
-'sitenotice',
-'nstab-main',
-'nstab-user',
-'nstab-media',
-'nstab-special',
-'nstab-wp',
-'nstab-image',
-'nstab-mediawiki',
-'nstab-template',
-'nstab-help',
-'nstab-category',
-'nosuchaction',
-'nosuchactiontext',
-
-
-'error',
-'databaseerror',
-'dberrortext',
-'dberrortextcl',
-'noconnect',
-'nodb',
-'cachederror',
-'laggedslavemode',
-'readonly',
-'enterlockreason',
-'readonlytext',
-'missingarticle',
-'internalerror',
-'filecopyerror',
-'filerenameerror',
-'filedeleteerror',
-'filenotfound',
-'unexpected',
-'formerror',
-'badarticleerror',
-'cannotdelete',
-'badtitle',
-'badtitletext',
-'perfdisabled',
-'perfdisabledsub',
-'perfcached',
-'wrong_wfQuery_params',
-'viewsource',
-'protectedtext',
-'seriousxhtmlerrors',
-'logouttitle',
-'logouttext',
-'welcomecreation',
-
-'loginpagetitle',
-'yourname',
-'yourpassword',
-'yourpasswordagain',
-'newusersonly',
-'remembermypassword',
-'loginproblem',
-'alreadyloggedin',
-'login',
-'loginprompt',
-'userlogin',
-'logout',
-'userlogout',
-'notloggedin',
-'createaccount',
-'createaccountmail',
-'badretype',
-
-'youremail',
-'yourrealname',
-'yourlanguage',
-'yourvariant',
-'yournick',
-'emailforlost',
-'loginerror',
-'nosuchusershort',
-
-'mailerror',
-'emailauthenticated',
-'emailnotauthenticated',
-'invalidemailaddress',
-'disableduntilauthent',
-'disablednoemail',
-
-'summary',
-'subject',
-'minoredit',
-'watchthis',
-'savearticle',
-'preview',
-'showpreview',
-'showdiff',
-'blockedtitle',
-'blockedtext',
-'whitelistedittitle',
-'whitelistedittext',
-'whitelistreadtitle',
-'whitelistreadtext',
-'whitelistacctitle',
-'whitelistacctext',
-'loginreqtitle',
-'loginreqtext',
-'accmailtitle',
-'accmailtext',
-'newarticle',
-'newarticletext',
-'talkpagetext',
-'anontalkpagetext',
-'noarticletext',
-'clearyourcache',
-'usercssjsyoucanpreview',
-'usercsspreview',
-'userjspreview',
-'updated',
-'note',
-'storedversion', // not used ? Editpage ?
-'revhistory',
-'nohistory',
-'revnotfound',
-'revnotfoundtext',
-'loadhist',
-'currentrev',
-'revisionasof',
-'revisionasofwithlink',
-'previousrevision',
-'nextrevision',
-'currentrevisionlink',
-'cur',
-'next',
-'last',
-'orig',
-'histlegend',
-'history_copyright',
-'difference',
-'loadingrev',
-'lineno',
-'editcurrent',
-'selectnewerversionfordiff',
-'selectolderversionfordiff',
-'compareselectedversions',
-
-'prevn',
-'nextn',
-'viewprevnext',
-'showingresults',
-'showingresultsnum',
-'nonefound',
-'powersearch',
-'powersearchtext',
-'searchdisabled',
-'googlesearch',
-'blanknamespace',
-'preferences',
-'prefsnologin',
-'prefsnologintext',
-'prefslogintext',
-'prefsreset',
-'qbsettings',
-'qbsettingsnote',
-'changepassword',
-'skin',
-'math',
-'dateformat',
-
-'math_failure',
-'math_unknown_error',
-'math_unknown_function',
-'math_lexing_error',
-'math_syntax_error',
-'math_image_error',
-'math_bad_tmpdir',
-'math_bad_output',
-'math_notexvc',
-
-
-
-
-
-
-'grouplevels-lookup-group',
-'grouplevels-group-edit',
-'editgroup',
-'addgroup',
-'userlevels-lookup-user',
-'userlevels-user-editname',
-'editusergroup',
-'grouplevels-editgroup',
-'grouplevels-addgroup',
-'grouplevels-editgroup-name',
-'grouplevels-editgroup-description',
-'savegroup',
-
-// common to several pages
-'copyrightpage',
-'copyrightpagename',
-'imagelist',
-'imagelisttext',
-'ilshowmatch',
-'ilsubmit',
-'showlast',
-'byname',
-'bydate',
-'bysize',
-
-
-
-'imgdelete',
-'imgdesc',
-'imglegend',
-'imghistory',
-'revertimg',
-'deleteimg',
-'deleteimgcompletely',
-'imghistlegend',
-'imagelinks',
-'linkstoimage',
-'nolinkstoimage',
-
-// unused ??
-'uploadedfiles',
-'getimagelist',
-
-
-'sharedupload',
-'shareduploadwiki',
-
-// Special pages names
-'orphans',
-'geo',
-'validate',
-'lonelypages',
-'uncategorizedpages',
-'uncategorizedcategories',
-'unusedimages',
-'popularpages',
-'nviews',
-'wantedpages',
-'nlinks',
-'allpages',
-'randompage',
-'randompage-url',
-'shortpages',
-'longpages',
-'deadendpages',
-'listusers',
-'specialpages',
-'spheading',
-'restrictedpheading',
-'asksqlpheading',
-'blockpheading',
-'createaccountpheading',
-'deletepheading',
-'userrightspheading',
-'grouprightspheading',
-'siteadminpheading',
-'recentchangeslinked',
-
-
-'debug',
-'newpages',
-'ancientpages',
-'intl',
-'unusedimagestext',
-'booksources',
-'categoriespagetext',
-'data',
-'userlevels',
-'grouplevels',
-'booksourcetext',
-'isbn',
-'rfcurl',
-'pubmedurl',
-'alphaindexline',
-'version',
-'log',
-'alllogstext',
-'nextpage',
-'mailnologin',
-'mailnologintext',
-'emailuser',
-'emailpage',
-'emailpagetext',
-'usermailererror',
-'defemailsubject',
-'noemailtitle',
-'noemailtext',
-'emailfrom',
-'emailto',
-'emailsubject',
-'emailmessage',
-'emailsend',
-'emailsent',
-'emailsenttext',
-'watchlist',
-'watchlistsub',
-'nowatchlist',
-'watchnologin',
-'watchnologintext',
-'addedwatch',
-'addedwatchtext',
-'removedwatch',
-'removedwatchtext',
-'watch',
-'watchthispage',
-'unwatch',
-'unwatchthispage',
-'notanarticle',
-'watchnochange',
-'watchdetails',
-'watchmethod-recent',
-'watchmethod-list',
-'removechecked',
-'watchlistcontains',
-'watcheditlist',
-'removingchecked',
-'couldntremove',
-'iteminvalidname',
-
-'updatedmarker',
-'email_notification_mailer',
-'email_notification_infotext',
-'email_notification_reset',
-'email_notification_newpagetext',
-'email_notification_to',
-'email_notification_subject',
-'email_notification_lastvisitedrevisiontext',
-'email_notification_body',
-
-'confirm',
-'excontent',
-'exbeforeblank',
-'exblank',
-'confirmdelete',
-'deletesub',
-'historywarning',
-'confirmdeletetext',
-'actioncomplete',
-'deletedtext',
-'deletedarticle',
-'dellogpage',
-'dellogpagetext',
-'deletionlog',
-'reverted',
-'deletecomment',
-'imagereverted',
-'rollback',
-'rollback_short',
-'rollbacklink',
-'rollbackfailed',
-'cantrollback',
-'alreadyrolled',
-'revertpage',
-'editcomment',
-'sessionfailure',
-
-'protectlogpage',
-'protectlogtext',
-
-'protectedarticle',
-'unprotectedarticle',
-
-'contributions',
-'mycontris',
-'notargettitle', // not used ?
-'notargettext', // not used ?
-
-'linkshere',
-
-'ipaddress',
-'ipadressorusername', // not used ?
-'ipbreason',
-
-'badipaddress',
-'noblockreason',
-'blockipsuccesssub',
-'blockipsuccesstext',
-'unblockip',
-'unblockiptext',
-'ipusubmit',
-'ipusuccess',
-'ipblocklist',
-'blocklistline',
-'blocklink',
-'unblocklink',
-'contribslink',
-'autoblocker',
-'blocklogpage',
-'blocklogentry',
-'blocklogtext',
-'unblocklogentry', // not used ?
-
-'proxyblocker',
-'proxyblockreason',
-'proxyblocksuccess',
-'sorbs',
-'sorbsreason',
-
-'setbureaucratflag',
-'bureaucratlog',
-'rightslogtext',
-'bureaucratlogentry',
-
-'articleexists', // not used ?
-
-'movedto',
-'1movedto2',
-'1movedto2_redir',
-'movelogpage',
-'movelogpagetext',
-
-'thumbnail-more',
-'missingimage',
-'filemissing',
-'Monobook.css',
-'nodublincore',
-'nocreativecommons',
-'notacceptable',
-
-// used in Article::
-'infosubtitle',
-'numedits',
-'numtalkedits',
-'numwatchers',
-'numauthors',
-'numtalkauthors',
-
-// not used ?
-'mw_math_png',
-'mw_math_simple',
-'mw_math_html',
-'mw_math_source',
-'mw_math_modern',
-'mw_math_mathml',
-
-// Patrolling
-'markaspatrolleddiff',
-'markaspatrolledlink',
-'markaspatrolledtext',
-'markedaspatrolled',
-'markedaspatrolledtext',
-'rcpatroldisabled', // not used ?
-'rcpatroldisabledtext', // not used ?
-
-'Monobook.js',
-'newimages',
-'noimages',
-'variantname-zh-cn',
-'variantname-zh-tw',
-'variantname-zh-hk',
-'variantname-zh-sg',
-'variantname-zh',
-'zhconversiontable',
-'passwordtooshort', // sp preferences / userlogin
-?>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/splitLanguageFiles.php ref158/maintenance/splitLanguageFiles.php
--- ref153/maintenance/splitLanguageFiles.php	2005-07-05 17:22:25.000000000 -0400
+++ ref158/maintenance/splitLanguageFiles.php	1969-12-31 19:00:00.000000000 -0500
@@ -1,13 +0,0 @@
-<?php
-/**
- * splitLanguageFiles
- * Should read each of the languages files then split them in several subpart
- * under ./languages/XX/ according to the arrays in splitLanguageFiles.inc .
- * 
- * Also need to rewrite the wfMsg system / message-cache.
- */
-
-include('commandLine.inc');
-
-
-?>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/tables.sql ref158/maintenance/tables.sql
--- ref153/maintenance/tables.sql	2005-07-23 02:30:25.000000000 -0400
+++ ref158/maintenance/tables.sql	2006-02-11 01:22:10.000000000 -0500
@@ -839,4 +839,12 @@
 	tb_name		VARCHAR(255),
 
 	INDEX (tb_page)
-);
+) TYPE=InnoDB;
+
+CREATE TABLE /*$wgDBprefix*/transcache (
+	tc_url		VARCHAR(255) NOT NULL,
+	tc_contents	TEXT,
+	tc_time		INT NOT NULL,
+	UNIQUE INDEX tc_url_idx(tc_url)
+) TYPE=InnoDB;
+
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/updaters.inc ref158/maintenance/updaters.inc
--- ref153/maintenance/updaters.inc	2005-08-24 03:23:22.000000000 -0400
+++ ref158/maintenance/updaters.inc	2006-02-11 21:24:43.000000000 -0500
@@ -170,6 +170,7 @@
 
 function do_watchlist_update() {
 	global $wgDatabase;
+	$fname = 'do_watchlist_update';
 	if( $wgDatabase->fieldExists( 'watchlist', 'wl_notificationtimestamp' ) ) {
 		echo "The watchlist table is already set up for email notification.\n";
 	} else {
@@ -178,6 +179,24 @@
 		dbsource( "maintenance/archives/patch-email-notification.sql", $wgDatabase );
 		echo "ok\n";
 	}
+	# Check if we need to add talk page rows to the watchlist
+	$talk = $wgDatabase->selectField( 'watchlist', 'count(*)', 'wl_namespace & 1', $fname );
+	$nontalk = $wgDatabase->selectField( 'watchlist', 'count(*)', 'NOT (wl_namespace & 1)', $fname );
+	if ( $talk != $nontalk ) {
+		echo "Adding missing watchlist talk page rows... ";
+		flush();
+
+		$wgDatabase->insertSelect( 'watchlist', 'watchlist', 
+			array(
+				'wl_user' => 'wl_user',
+				'wl_namespace' => 'wl_namespace | 1',
+				'wl_title' => 'wl_title',
+				'wl_notificationtimestamp' => 'wl_notificationtimestamp'
+			), array( 'NOT (wl_namespace & 1)' ), $fname, 'IGNORE' );
+		echo "ok\n";
+	} else {
+		echo "...watchlist talk page rows already present\n";
+	}
 }
 
 function do_copy_newtalk_to_watchlist() {
@@ -626,8 +645,10 @@
 }
 
 function do_all_updates() {
-	global $wgNewTables, $wgNewFields, $wgRenamedTables;
+	global $wgNewTables, $wgNewFields, $wgRenamedTables, $wgSharedDB, $wgDBname;
 	
+	$doUser = !$wgSharedDB || $wgSharedDB == $wgDBname;
+
 	# Rename tables
 	foreach ( $wgRenamedTables as $tableRecord ) {
 		rename_table( $tableRecord[0], $tableRecord[1], $tableRecord[2] );
@@ -641,7 +662,10 @@
 
 	# Add missing fields
 	foreach ( $wgNewFields as $fieldRecord ) {
-		add_field( $fieldRecord[0], $fieldRecord[1], $fieldRecord[2] );
+		# Don't update shared DB
+		if ( $doUser || $fieldRecord[0] != 'user') {
+			add_field( $fieldRecord[0], $fieldRecord[1], $fieldRecord[2] );
+		}
 		flush();
 	}
 	
@@ -651,7 +675,9 @@
 	do_old_links_update(); flush();
 	do_image_name_unique_update(); flush();
 	do_watchlist_update(); flush();
-	do_user_update(); flush();
+	if ( $doUser ) {
+		do_user_update(); flush();
+	}
 ######	do_copy_newtalk_to_watchlist(); flush();
 	do_logging_encoding(); flush();
 	
@@ -664,7 +690,9 @@
 	
 	do_drop_img_type(); flush();
 	
-	do_user_unique_update(); flush();
+	if ( $doUser ) {
+		do_user_unique_update(); flush();
+	}
 	do_user_groups_update(); flush();
 	
 	initialiseMessages(); flush();
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/userFunctions.inc ref158/maintenance/userFunctions.inc
--- ref153/maintenance/userFunctions.inc	1969-12-31 19:00:00.000000000 -0500
+++ ref158/maintenance/userFunctions.inc	2006-01-17 20:32:53.000000000 -0500
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * Support functions for dealing with user accounts at a database level
+ *
+ * @package MediaWiki
+ * @subpackage Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+/**
+ * Count the number of edits the specified user has made
+ *
+ * @param integer $user User ID
+ * @param bool $slave Whether or not a slave can be used
+ * @return integer
+ */
+function CountEdits( $user, $slave = true ) {
+	$dbw =& wfGetDB( $slave ? DB_SLAVE: DB_MASTER );
+	$res = $dbw->select( 'revision', 'COUNT(rev_id) AS count', array( 'rev_user' => $user ) );
+	$row = $dbw->fetchObject( $res );
+	return( $row->count );
+}
+
+/**
+ * Retrieve all valid user IDs
+ *
+ * @return array
+ */
+function GetUsers() {
+	$dbr =& wfGetDB( DB_SLAVE );
+	$res = $dbr->select( 'user', 'user_id' );
+	$users = array();
+	while( $row = $dbr->fetchObject( $res ) ) {
+		$users[] = $row->user_id;
+	}
+	return( $users );
+}
+
+/**
+ * Resolve a username to a user ID
+ *
+ * @param string $username Username
+ * @return mixed
+ */
+function GetUserID( $username ) {
+	$dbr =& wfGetDB( DB_SLAVE );
+	$res = $dbr->select( 'user', 'user_id', array( 'user_name' => '"' . $username . '"' ) );
+	if( $res !== false ) {
+		$row = $dbr->fetchObject( $res );
+		return( $row->user_id );
+	} else {
+		return( false );
+	}
+}
+
+/**
+ * Delete one or more users
+ *
+ * @param mixed $users Single integer or array of integers corresponding to user IDs
+ * @return bool
+ */
+function DeleteUsers( $users ) {
+	$dbw =& wfGetDB( DB_MASTER );
+	$dbw->begin();
+	foreach( $users as $user ) {
+		$dbw->delete( 'user', array( 'user_id' => $user ) );
+	}
+	$dbw->commit();
+	return( true );
+}
+
+/**
+ * Add a user to the named group(s)
+ *
+ * @param integer $user User ID
+ * @param mixed $groups Single string or array of strings corresponding to group names
+ * @return bool
+ */
+function SetUserGroups( $user, $groups ) {
+	$dbw =& wfGetDB( DB_MASTER );
+	foreach( $groups as $group ) {
+		$row = array( 'ug_user' => $user, 'ug_group' => $group );
+		if( !$dbw->insert( 'user_groups', $row, 'SetUserGroups' ) ) {
+			return( false );
+		}
+	}
+	return( true );
+}
+
+?>
\ No newline at end of file
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/maintenance/users.sql ref158/maintenance/users.sql
--- ref153/maintenance/users.sql	2005-08-17 15:51:03.000000000 -0400
+++ ref158/maintenance/users.sql	2006-03-01 21:22:06.000000000 -0500
@@ -4,13 +4,6 @@
 -- from local settings.
 --
 
-GRANT ALL ON `{$wgDBname}`.*
- TO '{$wgDBadminuser}'@'%' IDENTIFIED BY '{$wgDBadminpassword}';
-GRANT ALL ON `{$wgDBname}`.*
- TO '{$wgDBadminuser}'@localhost IDENTIFIED BY '{$wgDBadminpassword}';
-GRANT ALL ON `{$wgDBname}`.*
- TO '{$wgDBadminuser}'@localhost.localdomain IDENTIFIED BY '{$wgDBadminpassword}';
-
 GRANT DELETE,INSERT,SELECT,UPDATE ON `{$wgDBname}`.*
  TO '{$wgDBuser}'@'%' IDENTIFIED BY '{$wgDBpassword}';
 GRANT DELETE,INSERT,SELECT,UPDATE ON `{$wgDBname}`.*
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/profileinfo.php ref158/profileinfo.php
--- ref153/profileinfo.php	2005-07-06 01:18:09.000000000 -0400
+++ ref158/profileinfo.php	2006-01-03 07:01:10.000000000 -0500
@@ -21,7 +21,6 @@
      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      SOFTWARE.
 
-     $Id: profileinfo.php,v 1.4 2005/07/06 05:18:09 vibber Exp $
 -->
 <html>
 <head>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/skins/MonoBook.php ref158/skins/MonoBook.php
--- ref153/skins/MonoBook.php	2005-10-20 16:56:12.000000000 -0400
+++ ref158/skins/MonoBook.php	2006-02-01 20:39:28.000000000 -0500
@@ -61,7 +61,7 @@
     <!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css";</style><![endif]-->
     <!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css";</style><![endif]-->
     <!--[if gte IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css";</style><![endif]-->
-    <!--[if IE]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js"></script>
+    <!--[if lt IE 7]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js"></script>
     <meta http-equiv="imagetoolbar" content="no" /><![endif]-->
     <?php if($this->data['jsvarurl'  ]) { ?><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"></script><?php } ?>
     <script type="<?php $this->text('jsmimetype') ?>" src="<?php                                   $this->text('stylepath' ) ?>/common/wikibits.js"></script>
diff -uNr -x LocalSettings.php -x php.ini -x .scripts-version ref153/thumb.php ref158/thumb.php
--- ref153/thumb.php	2005-08-17 16:08:57.000000000 -0400
+++ ref158/thumb.php	2006-02-02 02:26:28.000000000 -0500
@@ -44,7 +44,7 @@
 }
 $thumbPath = wfImageThumbDir( $fileName ) . '/' . $thumbName;
 
-if ( file_exists( $thumbPath ) && filemtime( $thumbPath ) >= filemtime( $imagePath ) ) {
+if ( is_file( $thumbPath ) && filemtime( $thumbPath ) >= filemtime( $imagePath ) ) {
 	wfStreamFile( $thumbPath );
 	exit;
 }
