OSDN Git Service

merged 3.3 beta1
authorkimitake <kimitake@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Wed, 12 Jul 2006 07:13:31 +0000 (07:13 +0000)
committerkimitake <kimitake@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Wed, 12 Jul 2006 07:13:31 +0000 (07:13 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/nucleus-jp/trunk/utf8@145 1ca29b6e-896d-4ea0-84a5-967f57386b96

150 files changed:
action.php
atom.php
config.php
createaccount.html
extra/fancyurls/.htaccess
extra/fancyurls/archive
extra/fancyurls/archives
extra/fancyurls/blog
extra/fancyurls/category
extra/fancyurls/fancyurls.config.php
extra/fancyurls/item
extra/fancyurls/member
index.php
license.txt
media/readme.txt
nucleus/documentation/devdocs/custominstall.html
nucleus/documentation/devdocs/index.html
nucleus/documentation/devdocs/plugins.html
nucleus/documentation/devdocs/sqltables.html
nucleus/documentation/devdocs/styles/manual.css
nucleus/documentation/devdocs/xmlrpc.html
nucleus/documentation/help.html
nucleus/documentation/history.html
nucleus/documentation/index.html
nucleus/documentation/pics/chmod_menu.png
nucleus/documentation/pics/chmod_window.png
nucleus/documentation/pics/screen4.png
nucleus/documentation/pics/screen5.png
nucleus/documentation/pics/skinsandtemplates.png
nucleus/documentation/skins.html
nucleus/documentation/styles/manual.css
nucleus/documentation/tips.html
nucleus/forgotpassword.html
nucleus/forms/additemform.template
nucleus/forms/commentform-closed.template
nucleus/forms/commentform-loggedin.template
nucleus/forms/commentform-notloggedin.template
nucleus/forms/loginform-loggedin.template
nucleus/forms/loginform-notloggedin.template
nucleus/forms/membermailform-loggedin.template
nucleus/forms/membermailform-notloggedin.template
nucleus/forms/nucleusbutton.template
nucleus/forms/searchform.template
nucleus/images/button-alignright.gif
nucleus/images/button-left.gif
nucleus/images/button-link.gif
nucleus/images/globe.gif
nucleus/javascript/admin.js
nucleus/javascript/bookmarklet.js
nucleus/javascript/compatibility.js
nucleus/javascript/edit.js
nucleus/javascript/index.html
nucleus/javascript/numbercheck.js
nucleus/javascript/opennew.js
nucleus/javascript/templateEdit.js
nucleus/language/english.php
nucleus/language/index.html
nucleus/libs/ACTION.php
nucleus/libs/ACTIONS.php [new file with mode: 0644]
nucleus/libs/ADMIN.php
nucleus/libs/BODYACTIONS.php [new file with mode: 0644]
nucleus/libs/BaseActions.php [new file with mode: 0644]
nucleus/libs/ENCAPSULATE.php [new file with mode: 0644]
nucleus/libs/ITEMACTIONS.php [new file with mode: 0644]
nucleus/libs/NOTIFICATION.php
nucleus/libs/PAGEFACTORY.php
nucleus/libs/PARSER.php
nucleus/libs/PLUGIN.php
nucleus/libs/PLUGINADMIN.php
nucleus/libs/SEARCH.php
nucleus/libs/SKIN.php
nucleus/libs/TEMPLATE.php
nucleus/libs/entity.php [new file with mode: 0644]
nucleus/libs/include/admin-add.template
nucleus/libs/include/admin-edit.template
nucleus/libs/include/bookmarklet-add.template
nucleus/libs/include/bookmarklet-edit.template
nucleus/libs/include/index.html
nucleus/libs/include/readme.txt
nucleus/libs/index.html
nucleus/libs/mb_emulator/convert.table
nucleus/libs/mb_emulator/history.html
nucleus/libs/mb_emulator/history.txt
nucleus/libs/mb_emulator/mb-emulator.ini
nucleus/libs/mb_emulator/mb-emulator.php
nucleus/libs/mb_emulator/sjistouni.table
nucleus/libs/mb_emulator/unitosjis.table
nucleus/libs/mysql.php [new file with mode: 0644]
nucleus/libs/showlist.php [new file with mode: 0644]
nucleus/libs/skinie.php
nucleus/libs/vars4.0.6.php
nucleus/libs/vars4.1.0.php
nucleus/libs/xmlrpc.inc.php
nucleus/libs/xmlrpcs.inc.php
nucleus/nucleus.gif
nucleus/nucleus2.gif
nucleus/plugins/NP_SkinFiles.php
nucleus/plugins/index.html
nucleus/plugins/skinfiles/css.gif
nucleus/plugins/skinfiles/generic.png
nucleus/plugins/skinfiles/image.gif
nucleus/plugins/skinfiles/index.php
nucleus/plugins/skinfiles/php.gif
nucleus/styles/addedit.css
nucleus/styles/bookmarklet.css
nucleus/styles/logo.gif
nucleus/styles/manual.css
nucleus/styles/popups.css
nucleus/styles/quickb-hover.jpg
nucleus/styles/quickb.jpg
nucleus/upgrades/index.html
nucleus/upgrades/index.php
nucleus/upgrades/upgrade.functions.php
nucleus/upgrades/upgrade.php
nucleus/upgrades/upgrade0.95.php
nucleus/upgrades/upgrade0.96.php
nucleus/upgrades/upgrade1.0.php
nucleus/upgrades/upgrade1.1.php
nucleus/upgrades/upgrade1.5.php
nucleus/upgrades/upgrade2.0.php
nucleus/upgrades/upgrade2.5.php
nucleus/upgrades/upgrade3.0.php
nucleus/upgrades/upgrade3.1.php
nucleus/upgrades/upgrade3.2.php
nucleus/xmlrpc/index.html
readme.html
robots.txt
rsd.php
skins/default/default_left.css
skins/default/default_right.css
skins/default/favicon.ico
skins/default/footer.inc
skins/default/head.inc
skins/default/header.inc
skins/default/images/bg.gif
skins/default/images/commentquote01.gif
skins/default/images/commentquote02.gif
skins/default/images/header.jpg
skins/default/images/header_sm.jpg
skins/default/images/nucleus.gif
skins/default/images/shadow.gif
skins/default/navigation.inc
skins/default/nicetitle.css
skins/default/nicetitle.js
skins/default/preview-large.png
skins/default/preview.png
skins/default/readme.html
skins/default/sidebar.inc
skins/readme.txt
xml-rss2.php

index 5e34126..380109c 100755 (executable)
@@ -1,36 +1,36 @@
-<?php\r
-/* \r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)  \r
- */\r
-\r
-/**\r
- * File containing actions that can be performed by visitors of the site,\r
- * like adding comments, etc...\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: action.php,v 1.5 2005-04-20 06:49:45 kimitake Exp $\r
- * $NucleusJP$\r
- */\r
-\r
-$CONF = array();\r
-include('./config.php');                       // common functions\r
-include_once($DIR_LIBS . 'ACTION.php');\r
-\r
-$action = requestVar('action');\r
-\r
-$a =& new ACTION();\r
-$errorInfo = $a->doAction($action);\r
-\r
-if ($errorInfo)\r
-{\r
-       doError($errorInfo['message'], new SKIN($errorInfo['skinid'])); \r
-}\r
-\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * File containing actions that can be performed by visitors of the site,
+ * like adding comments, etc...
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: action.php,v 1.6 2006-07-12 07:11:45 kimitake Exp $
+ * $NucleusJP: action.php,v 1.5 2005/04/20 06:49:45 kimitake Exp $
+ */
+
+$CONF = array();
+include('./config.php');
+
+// common functions
+include_once($DIR_LIBS . 'ACTION.php');
+
+$action = requestVar('action');
+$a =& new ACTION();
+$errorInfo = $a->doAction($action);
+
+if ($errorInfo) {
+       doError($errorInfo['message'], new SKIN($errorInfo['skinid']) );
+}
+
+?>
\ No newline at end of file
index c0131cd..59de2f1 100755 (executable)
--- a/atom.php
+++ b/atom.php
@@ -1,54 +1,53 @@
-<?php\r
-\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-\r
-/**\r
- * Nucleus Atom Syndication\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: atom.php,v 1.5 2005-04-20 06:49:45 kimitake Exp $\r
- * $NucleusJP$\r
- */\r
-\r
-header("Pragma: no-cache");\r
-\r
-$CONF = array();\r
-$CONF['Self'] = 'atom.php';\r
-\r
-include('./config.php');\r
-\r
-if (!$CONF['DisableSite']) {\r
-       // get feed into $feed\r
-       ob_start();\r
-               selectSkin('feeds/atom');\r
-               selector();\r
-       $feed = ob_get_contents();\r
-       ob_end_clean();\r
-       \r
-       // create ETAG (hash of feed)\r
-       // (HTTP_IF_NONE_MATCH has quotes around it)\r
-       $eTag = '"'.md5($feed).'"';\r
-       header('Etag: '.$eTag);\r
-       \r
-       // compare Etag to what we got\r
-       if ($eTag == serverVar('HTTP_IF_NONE_MATCH')) { \r
-               header("HTTP/1.0 304 Not Modified");\r
-               header('Content-Length: 0');\r
-       } else {\r
-               header("Content-Type: application/xml");\r
-               // dump feed\r
-               echo $feed;\r
-       }\r
-               \r
-}\r
-\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * Nucleus Atom Syndication
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: atom.php,v 1.6 2006-07-12 07:11:45 kimitake Exp $
+ * $NucleusJP: atom.php,v 1.5 2005/04/20 06:49:45 kimitake Exp $
+ */
+
+header('Pragma: no-cache');
+
+$CONF = array();
+$CONF['Self'] = 'atom.php';
+
+include('./config.php');
+
+if (!$CONF['DisableSite']) {
+       // get feed into $feed
+       ob_start();
+               selectSkin('feeds/atom');
+               selector();
+               $feed = ob_get_contents();
+       ob_end_clean();
+
+       // create ETAG (hash of feed)
+       // (HTTP_IF_NONE_MATCH has quotes around it)
+       $eTag = '"' . md5($feed) . '"';
+       header('Etag: ' . $eTag);
+
+       // compare Etag to what we got
+       if ($eTag == serverVar('HTTP_IF_NONE_MATCH') ) {
+               header('HTTP/1.0 304 Not Modified');
+               header('Content-Length: 0');
+       } else {
+               header("Content-Type: application/xml");
+               // dump feed
+               echo $feed;
+       }
+
+}
+
+?>
\ No newline at end of file
index f21b3ec..9acc3df 100755 (executable)
@@ -1,38 +1,38 @@
-<?php\r
-\r
-// This file contains variables with the locations of the data dirs\r
-// and basic functions that every page can use\r
-\r
-// mySQL connection information\r
-$MYSQL_HOST = 'hostname';\r
-$MYSQL_USER = 'username';\r
-$MYSQL_PASSWORD = 'password';\r
-$MYSQL_DATABASE = 'databasename';\r
-$MYSQL_PREFIX = '';\r
-\r
-// main nucleus directory\r
-$DIR_NUCLEUS = '/your/path/to/nucleus/';\r
-\r
-// media dir\r
-$DIR_MEDIA = '/your/path/to/media/';\r
-\r
-// extra skin files for imported skins\r
-$DIR_SKINS = '/your/path/to/skins/';\r
-\r
-// these dirs are normally subdirs of the nucleus dir, but\r
-// you can redefine them if you wish\r
-$DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
-$DIR_LANG = $DIR_NUCLEUS . 'language/';\r
-$DIR_LIBS = $DIR_NUCLEUS . 'libs/';\r
-\r
-if (!@file_exists($DIR_LIBS . 'globalfunctions.php')) {\r
-       echo "Configuration error, please run the install script or modify config.php";\r
-       exit;\r
-}\r
-\r
-// include libs\r
-include($DIR_LIBS.'globalfunctions.php');\r
-if (!extension_loaded('mbstring')) {\r
-include($DIR_LIBS.'mb_emulator/mb-emulator.php');\r
-}\r
+<?php
+
+// This file contains variables with the locations of the data dirs
+// and basic functions that every page can use
+
+// mySQL connection information
+$MYSQL_HOST = 'hostname';
+$MYSQL_USER = 'username';
+$MYSQL_PASSWORD = 'password';
+$MYSQL_DATABASE = 'databasename';
+$MYSQL_PREFIX = '';
+
+// main nucleus directory
+$DIR_NUCLEUS = '/your/path/to/nucleus/';
+
+// media dir
+$DIR_MEDIA = '/your/path/to/media/';
+
+// extra skin files for imported skins
+$DIR_SKINS = '/your/path/to/skins/';
+
+// these dirs are normally subdirs of the nucleus dir, but
+// you can redefine them if you wish
+$DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';
+$DIR_LANG = $DIR_NUCLEUS . 'language/';
+$DIR_LIBS = $DIR_NUCLEUS . 'libs/';
+
+if (!@file_exists($DIR_LIBS . 'globalfunctions.php')) {
+       echo "Configuration error, please run the install script or modify config.php";
+       exit;
+}
+
+// include libs
+include($DIR_LIBS.'globalfunctions.php');
+if (!extension_loaded('mbstring')) {
+include($DIR_LIBS.'mb_emulator/mb-emulator.php');
+}
 ?>
\ No newline at end of file
index b447be7..bd5f621 100755 (executable)
@@ -1,40 +1,40 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html>\r
-<head>\r
-       <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />\r
-       <title>メンバーアカウントの作成</title>\r
-       <style type="text/css">@import url(nucleus/styles/manual.css);</style>\r
-</head>\r
-<body>\r
-       <h1>アカウントの作成</h1>\r
-\r
-       <form method="post" action="action.php">\r
-\r
-       <div>\r
-       <input type="hidden" name="action" value="createaccount" />\r
-               ユーザー名: \r
-               <br />\r
-               <input name="name" size="20" /> <small>(only a-z, 0-9)</small>\r
-               <br />\r
-               <br />          \r
-               本名: \r
-               <br />\r
-               <input name="realname" size="40" />\r
-               <br />\r
-               <br />          \r
-               Email:\r
-               <br />\r
-               <input name="email" size="40" /> <small>(利用可能なものを。パスワードはここに送信されます。)</small>\r
-               <br />\r
-               <br />          \r
-               URL: \r
-               <br />\r
-               <input name="url" size="60" />\r
-               <br />\r
-               <br />\r
-               <input type="submit" value="アカウントの作成" />\r
-       </div>\r
-\r
-       </form>\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+       <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+       <title>メンバーアカウントの作成</title>
+       <style type="text/css">@import url(nucleus/styles/manual.css);</style>
+</head>
+<body>
+       <h1>アカウントの作成</h1>
+
+       <form method="post" action="action.php">
+
+       <div>
+       <input type="hidden" name="action" value="createaccount" />
+               ユーザー名: 
+               <br />
+               <input name="name" size="20" /> <small>(only a-z, 0-9)</small>
+               <br />
+               <br />          
+               本名: 
+               <br />
+               <input name="realname" size="40" />
+               <br />
+               <br />          
+               Email:
+               <br />
+               <input name="email" size="40" /> <small>(利用可能なものを。パスワードはここに送信されます。)</small>
+               <br />
+               <br />          
+               URL: 
+               <br />
+               <input name="url" size="60" />
+               <br />
+               <br />
+               <input type="submit" value="アカウントの作成" />
+       </div>
+
+       </form>
+</body>
+</html>
index 7d6a8b1..85cc6c1 100755 (executable)
@@ -1,18 +1,18 @@
-<FilesMatch "^item$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^archive$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^member$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^archives$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^category$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^blog$">\r
-    ForceType application/x-httpd-php\r
+<FilesMatch "^item$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^archive$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^member$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^archives$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^category$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^blog$">
+    ForceType application/x-httpd-php
 </FilesMatch>
\ No newline at end of file
index a37827f..dd348b7 100755 (executable)
@@ -1,12 +1,20 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$blogid = intval($data[1]);\r
-$archive = $data[2];\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/archive/1/2005-12)
+// if blogid was not filled out by plugins
+if (($blogid == 0) && ($archive == ''))
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 2)
+       {
+               $blogid = intval($data[1]);
+               $archive = $data[2];
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 5c36175..b1031e3 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$archivelist = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/archives/1)
+// if archivelist was not filled out by plugins
+if ($archivelist == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $archivelist = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 99f6351..0b4cf08 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$blogid = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/blog/1234)
+// if blogid was not filled out by plugins
+if ($blogid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $blogid = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index eacbe4d..bdd8e31 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$catid = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/category/1234)
+// if catid was not filled out by plugins
+if ($catid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $catid = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 6a8ea9f..881051e 100755 (executable)
@@ -1,40 +1,59 @@
-<?\r
-       /*\r
-               About\r
-               -----\r
-               This directory contains extra files to make the 'fancy urls' feature even more\r
-               fancier, by eliminating the 'index.php'-part of the URL\r
-       \r
-               Installation\r
-               ------------\r
-               \r
-               1. Copy all files in this directory (except for index.html) to your main nucleus dir\r
-                  (where your index.php and action.php file are)\r
-                  \r
-                  If you have an already existing .htaccess file (most ftp-programs don't show hidden files\r
-                  by default, so don't start uploading it without checking your server). If you do, download\r
-                  that old one first, and copy the contents of the new .htaccess file (from the fancyurls\r
-                  folder) in your old one, and upload that... \r
-\r
-               2. Edit this file so that $CONF['Self'] points to your main directory. \r
-                       NOTE: this time, and only this time, the URL should NOT end in a slash\r
-\r
-               3. Also edit the $CONF['Self'] variable in your index.php, if you don't want to\r
-                  end up with index.php/item/1234 urls when people come via that way\r
-\r
-               4. Enable 'Fancy URLs' in the Nucleus admin area (nucleus management / edit settings)\r
-\r
-               5. Off you go!\r
-               \r
-               If it doesn't work:\r
-               -------------------\r
-               \r
-               Remove the files again (don't forget the hidden file .htaccess). Voila.\r
-               \r
-       */\r
-\r
-       \r
-       // remember: this URL should _NOT_ end with a slash. \r
-       $CONF['Self'] = 'http://www.yourhost.com/yourpath';\r
-       \r
+<?php
+       /*
+               About
+               -----
+               
+               This directory contains extra files to make the 'fancy urls' feature even more
+               fancier, by eliminating the 'index.php'-part of the URL
+       
+               Installation
+               ------------
+               
+               1. Copy all files in this directory (except for index.html) to your main nucleus dir
+                  (where your index.php and action.php file are)
+                  
+                  If you have an already existing .htaccess file (most ftp-programs don't show hidden files
+                  by default, so don't start uploading it without checking your server). If you do, download
+                  that old one first, and copy the contents of the new .htaccess file (from the fancyurls
+                  folder) in your old one, and upload that... 
+
+               2. Edit fancyurls.config.php so that $CONF['Self'] points to your main directory. 
+                       NOTE: this time, and only this time, the URL should NOT end in a slash
+
+               3. Edit index.php to look like this: 
+                  
+                       $CONF = array();
+
+                       include('./fancyurls.config.php'); 
+                       include('./config.php');
+
+                       selector();
+                       
+               4. Enable 'Fancy URLs' in the Nucleus admin area (nucleus management / edit settings)
+
+               5. Off you go!
+               
+               If it doesn't work:
+               -------------------
+               
+               Remove the files again (don't forget the hidden file .htaccess). Voila.
+               
+       */
+
+       
+       // remember: this URL should _NOT_ end with a slash. 
+       $CONF['Self'] = 'http://www.yourhost.com/yourpath';
+
+    /*
+       Advanced: keywords to use in fancy URLs. 
+       
+       If you want to change these, you'll also need to rename the stub files 
+       and update the contents of the .htaccess file accordingly
+    */
+    $CONF['ItemKey'] = 'item';
+    $CONF['ArchiveKey'] = 'archive';
+    $CONF['ArchivesKey'] = 'archives';
+    $CONF['MemberKey'] = 'member';
+    $CONF['BlogKey'] = 'blog';
+    $CONF['CategoryKey'] = 'category'; 
 ?>
\ No newline at end of file
index 27b1f15..23eb1bd 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$itemid = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/item/1234)
+// if itemid was not filled out by plugins
+if ($itemid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $itemid = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 96c3add..d2e14c2 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$memberid = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/member/1234)
+// if memberid was not filled out by plugins
+if ($memberid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $memberid = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 08f3be6..6db732a 100755 (executable)
--- a/index.php
+++ b/index.php
@@ -1,10 +1,11 @@
-<?php\r
-// This file will generate and return the main page of the site\r
-$CONF = array();\r
-$CONF['Self'] = 'index.php';\r
-\r
-include('./config.php');\r
-\r
-selector();\r
-\r
-?>\r
+<?php
+
+// This file will generate and return the main page of the site
+$CONF = array();
+$CONF['Self'] = 'index.php';
+
+include('./config.php');
+
+selector();
+
+?>
index 13a56b1..dcfa4c2 100755 (executable)
-                   GNU GENERAL PUBLIC LICENSE\r
-                      Version 2, June 1991\r
-\r
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.\r
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
- Everyone is permitted to copy and distribute verbatim copies\r
- of this license document, but changing it is not allowed.\r
-\r
-                           Preamble\r
-\r
-  The licenses for most software are designed to take away your\r
-freedom to share and change it.  By contrast, the GNU General Public\r
-License is intended to guarantee your freedom to share and change free\r
-software--to make sure the software is free for all its users.  This\r
-General Public License applies to most of the Free Software\r
-Foundation's software and to any other program whose authors commit to\r
-using it.  (Some other Free Software Foundation software is covered by\r
-the GNU Library General Public License instead.)  You can apply it to\r
-your programs, too.\r
-\r
-  When we speak of free software, we are referring to freedom, not\r
-price.  Our General Public Licenses are designed to make sure that you\r
-have the freedom to distribute copies of free software (and charge for\r
-this service if you wish), that you receive source code or can get it\r
-if you want it, that you can change the software or use pieces of it\r
-in new free programs; and that you know you can do these things.\r
-\r
-  To protect your rights, we need to make restrictions that forbid\r
-anyone to deny you these rights or to ask you to surrender the rights.\r
-These restrictions translate to certain responsibilities for you if you\r
-distribute copies of the software, or if you modify it.\r
-\r
-  For example, if you distribute copies of such a program, whether\r
-gratis or for a fee, you must give the recipients all the rights that\r
-you have.  You must make sure that they, too, receive or can get the\r
-source code.  And you must show them these terms so they know their\r
-rights.\r
-\r
-  We protect your rights with two steps: (1) copyright the software, and\r
-(2) offer you this license which gives you legal permission to copy,\r
-distribute and/or modify the software.\r
-\r
-  Also, for each author's protection and ours, we want to make certain\r
-that everyone understands that there is no warranty for this free\r
-software.  If the software is modified by someone else and passed on, we\r
-want its recipients to know that what they have is not the original, so\r
-that any problems introduced by others will not reflect on the original\r
-authors' reputations.\r
-\r
-  Finally, any free program is threatened constantly by software\r
-patents.  We wish to avoid the danger that redistributors of a free\r
-program will individually obtain patent licenses, in effect making the\r
-program proprietary.  To prevent this, we have made it clear that any\r
-patent must be licensed for everyone's free use or not licensed at all.\r
-\r
-  The precise terms and conditions for copying, distribution and\r
-modification follow.\r
-\r
-                   GNU GENERAL PUBLIC LICENSE\r
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
-\r
-  0. This License applies to any program or other work which contains\r
-a notice placed by the copyright holder saying it may be distributed\r
-under the terms of this General Public License.  The "Program", below,\r
-refers to any such program or work, and a "work based on the Program"\r
-means either the Program or any derivative work under copyright law:\r
-that is to say, a work containing the Program or a portion of it,\r
-either verbatim or with modifications and/or translated into another\r
-language.  (Hereinafter, translation is included without limitation in\r
-the term "modification".)  Each licensee is addressed as "you".\r
-\r
-Activities other than copying, distribution and modification are not\r
-covered by this License; they are outside its scope.  The act of\r
-running the Program is not restricted, and the output from the Program\r
-is covered only if its contents constitute a work based on the\r
-Program (independent of having been made by running the Program).\r
-Whether that is true depends on what the Program does.\r
-\r
-  1. You may copy and distribute verbatim copies of the Program's\r
-source code as you receive it, in any medium, provided that you\r
-conspicuously and appropriately publish on each copy an appropriate\r
-copyright notice and disclaimer of warranty; keep intact all the\r
-notices that refer to this License and to the absence of any warranty;\r
-and give any other recipients of the Program a copy of this License\r
-along with the Program.\r
-\r
-You may charge a fee for the physical act of transferring a copy, and\r
-you may at your option offer warranty protection in exchange for a fee.\r
-\r
-  2. You may modify your copy or copies of the Program or any portion\r
-of it, thus forming a work based on the Program, and copy and\r
-distribute such modifications or work under the terms of Section 1\r
-above, provided that you also meet all of these conditions:\r
-\r
-    a) You must cause the modified files to carry prominent notices\r
-    stating that you changed the files and the date of any change.\r
-\r
-    b) You must cause any work that you distribute or publish, that in\r
-    whole or in part contains or is derived from the Program or any\r
-    part thereof, to be licensed as a whole at no charge to all third\r
-    parties under the terms of this License.\r
-\r
-    c) If the modified program normally reads commands interactively\r
-    when run, you must cause it, when started running for such\r
-    interactive use in the most ordinary way, to print or display an\r
-    announcement including an appropriate copyright notice and a\r
-    notice that there is no warranty (or else, saying that you provide\r
-    a warranty) and that users may redistribute the program under\r
-    these conditions, and telling the user how to view a copy of this\r
-    License.  (Exception: if the Program itself is interactive but\r
-    does not normally print such an announcement, your work based on\r
-    the Program is not required to print an announcement.)\r
-\r
-These requirements apply to the modified work as a whole.  If\r
-identifiable sections of that work are not derived from the Program,\r
-and can be reasonably considered independent and separate works in\r
-themselves, then this License, and its terms, do not apply to those\r
-sections when you distribute them as separate works.  But when you\r
-distribute the same sections as part of a whole which is a work based\r
-on the Program, the distribution of the whole must be on the terms of\r
-this License, whose permissions for other licensees extend to the\r
-entire whole, and thus to each and every part regardless of who wrote it.\r
-\r
-Thus, it is not the intent of this section to claim rights or contest\r
-your rights to work written entirely by you; rather, the intent is to\r
-exercise the right to control the distribution of derivative or\r
-collective works based on the Program.\r
-\r
-In addition, mere aggregation of another work not based on the Program\r
-with the Program (or with a work based on the Program) on a volume of\r
-a storage or distribution medium does not bring the other work under\r
-the scope of this License.\r
-\r
-  3. You may copy and distribute the Program (or a work based on it,\r
-under Section 2) in object code or executable form under the terms of\r
-Sections 1 and 2 above provided that you also do one of the following:\r
-\r
-    a) Accompany it with the complete corresponding machine-readable\r
-    source code, which must be distributed under the terms of Sections\r
-    1 and 2 above on a medium customarily used for software interchange; or,\r
-\r
-    b) Accompany it with a written offer, valid for at least three\r
-    years, to give any third party, for a charge no more than your\r
-    cost of physically performing source distribution, a complete\r
-    machine-readable copy of the corresponding source code, to be\r
-    distributed under the terms of Sections 1 and 2 above on a medium\r
-    customarily used for software interchange; or,\r
-\r
-    c) Accompany it with the information you received as to the offer\r
-    to distribute corresponding source code.  (This alternative is\r
-    allowed only for noncommercial distribution and only if you\r
-    received the program in object code or executable form with such\r
-    an offer, in accord with Subsection b above.)\r
-\r
-The source code for a work means the preferred form of the work for\r
-making modifications to it.  For an executable work, complete source\r
-code means all the source code for all modules it contains, plus any\r
-associated interface definition files, plus the scripts used to\r
-control compilation and installation of the executable.  However, as a\r
-special exception, the source code distributed need not include\r
-anything that is normally distributed (in either source or binary\r
-form) with the major components (compiler, kernel, and so on) of the\r
-operating system on which the executable runs, unless that component\r
-itself accompanies the executable.\r
-\r
-If distribution of executable or object code is made by offering\r
-access to copy from a designated place, then offering equivalent\r
-access to copy the source code from the same place counts as\r
-distribution of the source code, even though third parties are not\r
-compelled to copy the source along with the object code.\r
-\r
-  4. You may not copy, modify, sublicense, or distribute the Program\r
-except as expressly provided under this License.  Any attempt\r
-otherwise to copy, modify, sublicense or distribute the Program is\r
-void, and will automatically terminate your rights under this License.\r
-However, parties who have received copies, or rights, from you under\r
-this License will not have their licenses terminated so long as such\r
-parties remain in full compliance.\r
-\r
-  5. You are not required to accept this License, since you have not\r
-signed it.  However, nothing else grants you permission to modify or\r
-distribute the Program or its derivative works.  These actions are\r
-prohibited by law if you do not accept this License.  Therefore, by\r
-modifying or distributing the Program (or any work based on the\r
-Program), you indicate your acceptance of this License to do so, and\r
-all its terms and conditions for copying, distributing or modifying\r
-the Program or works based on it.\r
-\r
-  6. Each time you redistribute the Program (or any work based on the\r
-Program), the recipient automatically receives a license from the\r
-original licensor to copy, distribute or modify the Program subject to\r
-these terms and conditions.  You may not impose any further\r
-restrictions on the recipients' exercise of the rights granted herein.\r
-You are not responsible for enforcing compliance by third parties to\r
-this License.\r
-\r
-  7. If, as a consequence of a court judgment or allegation of patent\r
-infringement or for any other reason (not limited to patent issues),\r
-conditions are imposed on you (whether by court order, agreement or\r
-otherwise) that contradict the conditions of this License, they do not\r
-excuse you from the conditions of this License.  If you cannot\r
-distribute so as to satisfy simultaneously your obligations under this\r
-License and any other pertinent obligations, then as a consequence you\r
-may not distribute the Program at all.  For example, if a patent\r
-license would not permit royalty-free redistribution of the Program by\r
-all those who receive copies directly or indirectly through you, then\r
-the only way you could satisfy both it and this License would be to\r
-refrain entirely from distribution of the Program.\r
-\r
-If any portion of this section is held invalid or unenforceable under\r
-any particular circumstance, the balance of the section is intended to\r
-apply and the section as a whole is intended to apply in other\r
-circumstances.\r
-\r
-It is not the purpose of this section to induce you to infringe any\r
-patents or other property right claims or to contest validity of any\r
-such claims; this section has the sole purpose of protecting the\r
-integrity of the free software distribution system, which is\r
-implemented by public license practices.  Many people have made\r
-generous contributions to the wide range of software distributed\r
-through that system in reliance on consistent application of that\r
-system; it is up to the author/donor to decide if he or she is willing\r
-to distribute software through any other system and a licensee cannot\r
-impose that choice.\r
-\r
-This section is intended to make thoroughly clear what is believed to\r
-be a consequence of the rest of this License.\r
-\r
-  8. If the distribution and/or use of the Program is restricted in\r
-certain countries either by patents or by copyrighted interfaces, the\r
-original copyright holder who places the Program under this License\r
-may add an explicit geographical distribution limitation excluding\r
-those countries, so that distribution is permitted only in or among\r
-countries not thus excluded.  In such case, this License incorporates\r
-the limitation as if written in the body of this License.\r
-\r
-  9. The Free Software Foundation may publish revised and/or new versions\r
-of the General Public License from time to time.  Such new versions will\r
-be similar in spirit to the present version, but may differ in detail to\r
-address new problems or concerns.\r
-\r
-Each version is given a distinguishing version number.  If the Program\r
-specifies a version number of this License which applies to it and "any\r
-later version", you have the option of following the terms and conditions\r
-either of that version or of any later version published by the Free\r
-Software Foundation.  If the Program does not specify a version number of\r
-this License, you may choose any version ever published by the Free Software\r
-Foundation.\r
-\r
-  10. If you wish to incorporate parts of the Program into other free\r
-programs whose distribution conditions are different, write to the author\r
-to ask for permission.  For software which is copyrighted by the Free\r
-Software Foundation, write to the Free Software Foundation; we sometimes\r
-make exceptions for this.  Our decision will be guided by the two goals\r
-of preserving the free status of all derivatives of our free software and\r
-of promoting the sharing and reuse of software generally.\r
-\r
-                           NO WARRANTY\r
-\r
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\r
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\r
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\r
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\r
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\r
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\r
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\r
-REPAIR OR CORRECTION.\r
-\r
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\r
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\r
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\r
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\r
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\r
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\r
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\r
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\r
-POSSIBILITY OF SUCH DAMAGES.\r
-\r
-                    END OF TERMS AND CONDITIONS\r
-\r
-           How to Apply These Terms to Your New Programs\r
-\r
-  If you develop a new program, and you want it to be of the greatest\r
-possible use to the public, the best way to achieve this is to make it\r
-free software which everyone can redistribute and change under these terms.\r
-\r
-  To do so, attach the following notices to the program.  It is safest\r
-to attach them to the start of each source file to most effectively\r
-convey the exclusion of warranty; and each file should have at least\r
-the "copyright" line and a pointer to where the full notice is found.\r
-\r
-    <one line to give the program's name and a brief idea of what it does.>\r
-    Copyright (C) <year>  <name of author>\r
-\r
-    This program is free software; you can redistribute it and/or modify\r
-    it under the terms of the GNU General Public License as published by\r
-    the Free Software Foundation; either version 2 of the License, or\r
-    (at your option) any later version.\r
-\r
-    This program is distributed in the hope that it will be useful,\r
-    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-    GNU General Public License for more details.\r
-\r
-    You should have received a copy of the GNU General Public License\r
-    along with this program; if not, write to the Free Software\r
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
-\r
-\r
-Also add information on how to contact you by electronic and paper mail.\r
-\r
-If the program is interactive, make it output a short notice like this\r
-when it starts in an interactive mode:\r
-\r
-    Gnomovision version 69, Copyright (C) year name of author\r
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\r
-    This is free software, and you are welcome to redistribute it\r
-    under certain conditions; type `show c' for details.\r
-\r
-The hypothetical commands `show w' and `show c' should show the appropriate\r
-parts of the General Public License.  Of course, the commands you use may\r
-be called something other than `show w' and `show c'; they could even be\r
-mouse-clicks or menu items--whatever suits your program.\r
-\r
-You should also get your employer (if you work as a programmer) or your\r
-school, if any, to sign a "copyright disclaimer" for the program, if\r
-necessary.  Here is a sample; alter the names:\r
-\r
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\r
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.\r
-\r
-  <signature of Ty Coon>, 1 April 1989\r
-  Ty Coon, President of Vice\r
-\r
-This General Public License does not permit incorporating your program into\r
-proprietary programs.  If your program is a subroutine library, you may\r
-consider it more useful to permit linking proprietary applications with the\r
-library.  If this is what you want to do, use the GNU Library General\r
-Public License instead of this License.\r
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
index 3cd7c76..308d3a1 100755 (executable)
@@ -1,15 +1,15 @@
-Nucleus Media Directory\r
------------------------\r
-\r
-Uploaded images will end up in the media directory.\r
-\r
-Subdirectories work as follows:\r
-\r
-* numeric (e.g. /media/1/)\r
-\r
-Media files for a certain member (directory name is the memberid)\r
-\r
-* other directories (e.g. /media/common/)\r
-\r
-Global media collections that can be used by any member that is on a team. In order to create a new collection, simply create a new directory and assure write access is enabled for it.\r
-\r
+Nucleus Media Directory
+-----------------------
+
+Uploaded images will end up in the media directory.
+
+Subdirectories work as follows:
+
+* numeric (e.g. /media/1/)
+
+Media files for a certain member (directory name is the memberid)
+
+* other directories (e.g. /media/common/)
+
+Global media collections that can be used by any member that is on a team. In order to create a new collection, simply create a new directory and assure write access is enabled for it.
+
index d963fb3..04841d7 100755 (executable)
@@ -1,67 +1,67 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: custominstall.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - インストールスクリプトのカスタマイズ</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="heading">\r
-インストールスクリプトのカスタマイズ\r
-</div>\r
-\r
-<p class="note">注:この機能はバージョン2.2以降のものです。</p>\r
-\r
-<h1>イントロダクション</h1>\r
-\r
-<p>\r
-<a href="index.html">開発者向けドキュメントの目次へ戻る</a>\r
-</p>\r
-\r
-<p>このドキュメントにはNucleusのインストール・スクリプトをどのようにカスタムするかという情報が書かれています。二つの方法でカスタマイズが可能です:</p>\r
-\r
-<ol>\r
-       <li>スキンの自動インストール</li>\r
-       <li>プラグインの自動インストール</li>\r
-</ol>\r
-\r
-<h1>設定</h1>\r
-\r
-<p><code>install.php</code>をエディタで開き、次のコードを探してください:</p>\r
-\r
-<pre><code>    // array with names of plugins to install. Plugin files must be present in the nucleus/plugin/\r
-    // directory.\r
-    //\r
-    // example:\r
-    //     array('NP_TrackBack', 'NP_MemberGoodies')\r
-    $aConfPlugsToInstall = array();\r
-\r
-\r
-    // array with skins to install. skins must be present under the skins/ directory with\r
-    // a subdirectory having the same name that contains a skinbackup.xml file\r
-    //\r
-    // example:\r
-    //     array('base','rsd')\r
-    $aConfSkinsToImport = array();</code></pre>\r
-\r
-<p>やるべき事はこのコードを変更するだけです:自動インストールしたいプラグインとスキンの名前を、例のような配列リストにしてください。</p>\r
-\r
-<h1>ファイルの取り込み</h1>\r
-\r
-<p>設定を変更した次は、ディストリビューションにファイルを追加する必要があります。</p>\r
-\r
-<h2>プラグインとスキン</h2>\r
-\r
-<p>プラグインは、<code>nucleus/plugins/</code>ディレクトリにファイルをおいてください。プラグインを手動でインストールする場合にするのと全く同じです。</p>\r
-\r
-<p>スキンは、手動でインポートする時と同様に、<code>skins/</code>直下にディレクトリをおいてください。<code>skinbackup.xml</code>をそこに入れておくことをお忘れ無く。</p>\r
-\r
-<h1>忘れてはいけないこと</h1>\r
-\r
-<p>再配布する前に、カスタマイズされたインストールスクリプトをテストすることを忘れないでください。</p>\r
-\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: custominstall.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: custominstall.html,v 1.4 2005/03/19 08:34:53 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - インストールスクリプトのカスタマイズ</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<div class="heading">
+インストールスクリプトのカスタマイズ
+</div>
+
+<p class="note">注:この機能はバージョン2.2以降のものです。</p>
+
+<h1>イントロダクション</h1>
+
+<p>
+<a href="index.html">開発者向けドキュメントの目次へ戻る</a>
+</p>
+
+<p>このドキュメントにはNucleusのインストール・スクリプトをどのようにカスタムするかという情報が書かれています。二つの方法でカスタマイズが可能です:</p>
+
+<ol>
+       <li>スキンの自動インストール</li>
+       <li>プラグインの自動インストール</li>
+</ol>
+
+<h1>設定</h1>
+
+<p><code>install.php</code>をエディタで開き、次のコードを探してください:</p>
+
+<pre><code>    // array with names of plugins to install. Plugin files must be present in the nucleus/plugin/
+    // directory.
+    //
+    // example:
+    //     array('NP_TrackBack', 'NP_MemberGoodies')
+    $aConfPlugsToInstall = array();
+
+
+    // array with skins to install. skins must be present under the skins/ directory with
+    // a subdirectory having the same name that contains a skinbackup.xml file
+    //
+    // example:
+    //     array('base','rsd')
+    $aConfSkinsToImport = array();</code></pre>
+
+<p>やるべき事はこのコードを変更するだけです:自動インストールしたいプラグインとスキンの名前を、例のような配列リストにしてください。</p>
+
+<h1>ファイルの取り込み</h1>
+
+<p>設定を変更した次は、ディストリビューションにファイルを追加する必要があります。</p>
+
+<h2>プラグインとスキン</h2>
+
+<p>プラグインは、<code>nucleus/plugins/</code>ディレクトリにファイルをおいてください。プラグインを手動でインストールする場合にするのと全く同じです。</p>
+
+<p>スキンは、手動でインポートする時と同様に、<code>skins/</code>直下にディレクトリをおいてください。<code>skinbackup.xml</code>をそこに入れておくことをお忘れ無く。</p>
+
+<h1>忘れてはいけないこと</h1>
+
+<p>再配布する前に、カスタマイズされたインストールスクリプトをテストすることを忘れないでください。</p>
+
+</body>
+</html>
index 91a4a0e..0b401d4 100755 (executable)
@@ -1,34 +1,34 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: index.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - 開発者用ドキュメント</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="heading">\r
-開発者マニュアル\r
-<i>2003年8月12日</i>\r
-</div>\r
-\r
-<h1>はじめに</h1>\r
-\r
-<p>\r
-このマニュアルにはNucleusの開発者だけに向けた情報が記載されています。\r
-</p>\r
-\r
-<h1>目次</h1>\r
-\r
-<ul>\r
-       <li><a href="xmlrpc.html">XML-RPC インターフェース</a></li>\r
-       <li><a href="plugins.html">Nucleus プラグイン API</a></li>\r
-       <li><a href="custominstall.html">インストールスクリプトのカスタマイズ</a></li>        \r
-       <li><a href="sqltables.html">データベースの構造</a></li>\r
-</ul>\r
-\r
-</body>\r
-</html>\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: index.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: index.html,v 1.4 2005/03/19 08:34:53 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - 開発者用ドキュメント</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<div class="heading">
+開発者マニュアル
+<i>2003年8月12日</i>
+</div>
+
+<h1>はじめに</h1>
+
+<p>
+このマニュアルにはNucleusの開発者だけに向けた情報が記載されています。
+</p>
+
+<h1>目次</h1>
+
+<ul>
+       <li><a href="xmlrpc.html">XML-RPC インターフェース</a></li>
+       <li><a href="plugins.html">Nucleus プラグイン API</a></li>
+       <li><a href="custominstall.html">インストールスクリプトのカスタマイズ</a></li>        
+       <li><a href="sqltables.html">データベースの構造</a></li>
+</ul>
+
+</body>
+</html>
+
index 33611d2..8262620 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: plugins.html,v 1.6 2005-03-19 08:39:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP: plugins.html,v 1.5 2005/03/19 08:34:53 kimitake Exp $ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - プラグイン API</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-       <style type="text/css">\r
-               /* refence parameters (greenish) */\r
-               .ref {\r
-                       background-color: #afa; \r
-                       color: #000;\r
-               }\r
-               \r
-               /* object parameters */\r
-               .obj {\r
-                       color: #00f;\r
-               }\r
-               .obj:after {\r
-                       content: " (object)";\r
-               }\r
-               \r
-               /* read-only parameters (non-ref; reddish) */\r
-               .ro {\r
-                       background-color: #faa;\r
-                       color: #000;\r
-               }\r
-       </style>\r
-</head>\r
-<body>\r
-\r
-<p class="heading">&nbsp;</p>\r
-<div class="heading">\r
-プラグイン API\r
-<i>2005年3月5日</i>\r
-</div>\r
-\r
-<div class="note-trans"><strong>訳者注:</strong> \r
-       <ul>\r
-               <li>このドキュメントの原文は以下のURLにあります。<br />\r
-                <a href="http://nucleuscms.org/documentation/devdocs/plugins.html">http://nucleuscms.org/documentation/devdocs/plugins.html</a></li>\r
-           <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>\r
-       </ul>\r
-</div>\r
-\r
-<div class="note"><strong>注:</strong> \r
-       <ul>\r
-               <li>このドキュメントは基本的なプラグインの書き方についての情報を提供しています。さらに質問がある方は <a href="http://forum.nucleuscms.org/viewforum.php?f=10">Plugin\r
-         Development Forum</a> (<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=5">日本語フォーラム</a>)をご覧ください。</li>\r
-               <li>Nucleusバージョン1.5以降に導入されたメソッドとイベントには、導入時のバージョン情報を付記しています。それらの機能を利用するときは、<code>getMinNucleusVersion</code> を適切に設定するのを忘れないでください。</li>\r
-       </ul>\r
-</div>\r
-\r
-<h1>はじめに</h1>\r
-\r
-<p>\r
-<a href="./index.html">開発者向けドキュメントの目次へ戻る</a>\r
-</p>\r
-\r
-<p>\r
-このドキュメントはNucleusプラグインの作り方についての解説です。 \r
-</p>\r
-\r
-<h1><a name="toc"></a><a name="top"></a>目次</h1>\r
-\r
-<ul>\r
-       <li><a href="#introduction">イントロダクション</a></li>\r
-       <li><a href="#firstplug">はじめてプラグインを書いてみる</a></li>\r
-       <li><a href="#nucleusplugin"><code>NucleusPlugin</code> クラスの概要</a></li>\r
-       <li><a href="#skinvars"><code>&lt;%plugin(...)%&gt;</code> スキン変数</a></li>\r
-       <li><a href="#templatevars"><code>&lt;%plugin(...)%&gt;</code> テンプレート変数</a></li>        \r
-       <li><a href="#actions"><code>action.php</code> を使ったアクション</a></li>\r
-       <li><a href="#events">イベントとイベント登録の仕方</a></li>\r
-       <li><a href="#options">オプションを保存する</a></li>\r
-       <li><a href="#tables">データベース・テーブル</a></li>\r
-       <li><a href="#admin">プラグイン管理エリアの提供</a></li>\r
-       <li><a href="#help">ヘルプページの提供</a></li>\r
-       <li><a href="#dependency">プラグイン依存チェック</a></li>\r
-<!--   <li><a href="#parser">Using the <code>PARSER</code> class</a></li>\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>-->\r
-</ul>\r
-\r
-<h1>イントロダクション <a name="introduction" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。\r
-</p>\r
-\r
-<p>\r
-プラグインの利点は以下のとおりです。</p>\r
-\r
-<ul>\r
-       <li>実装について詳しくしらなくてもNucleusフレームワークに簡単に機能を追加できる</li>\r
-       <li>必要なプラグインだけをインストールでき、ページ生成にかかる時間を節約できる</li>\r
-</ul>\r
-\r
-<p>\r
-すべてのプラグインファイルは <code>config.php</code> に記述されたディレクトリに置く必要があります。一般的に、それは <code>/your/path/nucleus/plugins/</code>  になるでしょう。プラグインファイル名は <code>NP<i>_name</i>.php</code> という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。</p>\r
-\r
-<div class="note">\r
-<b>注:</b> プラグイン名は大文字・小文字を識別しますので、<code>Np_</code> や <code>np_</code> ではなく、<code>NP_</code> で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称は<em>すべて小文字にします</em>。</div>\r
-\r
-\r
-\r
-\r
-<h1>はじめてプラグインを書いてみる<a name="firstplug" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された <code>NucleusPlugin</code> クラスを継承したPHPクラスです。以下は<code>HelloWorld</code>プラグインの例です。</p>\r
-\r
-<pre class="example"><code>&lt;?\r
-\r
-class NP_HelloWorld extends NucleusPlugin {\r
-\r
-       // プラグインの名前\r
-       function getName() {\r
-               return 'Hello World'; \r
-       }\r
-       \r
-       // プラグインの作者\r
-       function getAuthor()  { \r
-               return 'Wouter Demuynck'; \r
-       }\r
-       \r
-       // プラグインのサイトURL\r
-       // mailto:foo@bar.com の形式も可\r
-       function getURL() \r
-       {\r
-               return '../../index.html'; \r
-       }\r
-       \r
-       // プラグインのバージョン\r
-       function getVersion() {\r
-               return '1.0'; \r
-       }\r
-       \r
-       // インストール済みのプラグインリストに表示される説明文\r
-       function getDescription() { \r
-               return 'Just a sample plugin.';\r
-       }\r
-\r
-       function doSkinVar($skinType) {\r
-               echo 'Hello World!';\r
-       }\r
-       \r
-}\r
-?&gt;</pre>\r
-\r
-<ol>\r
-       <li>\r
-               このコードをコピーし、 <code>NP_HelloWorld.php</code> と名づけて保存し、プラグインディレクトリに置きます。<em>最後の <code>?&gt;</code> の後や、最初の <code>&lt;?</code> の前にスペースがないことを確認しましょう</em>。ところでNP は &quot;Nucleus Plugin&quot; って意味ですよ :-)\r
-       </li>\r
-       <li>Nucleusの管理画面を開き、<em>Nucleusの管理>プラグインの管理</em>にいきます。</li>\r
-       <li><em>HelloWorld</em> プラグインがインストール可能な状態になっているはずですので、インストールします。すべてがうまくいけば、インストール済みプラグインリストに追加されます。</li>\r
-       <li>スキンを編集し、実際のページに表示する箇所に次の文を挿入します。\r
-         <pre class="example"><code>&lt;%plugin(HelloWorld)%&gt;</code></pre>\r
-       注意:カッコ内の名称 (HelloWorld) は大文字小文字を識別します!</li>\r
-       <li>さて、編集したスキンから生成されるページを見てみましょう。プラグイン変数を追加した場所に &quot;Hello\r
-  World&quot; と見えますね?</li>\r
-</ol>\r
-\r
-<p>ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。</p>\r
-\r
-\r
-<h1>NucleusPlugin クラスの概要 <a name="nucleusplugin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>すべてのプラグインは、<code>NucleusPlugin</code> というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。</p>\r
-\r
-<p>下記は <code>NucleusPlugin</code> が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、<code>nucleus/libs/PLUGIN.php</code>にあります。</p>\r
-\r
-<table summary="An overview of the redefinable methods in the class NucleusPlugin">\r
-       <caption>\r
-       <code>NucleusPlugin</code> クラスの概要(再定義可能なメソッド)\r
-       </caption>\r
-       <tr>\r
-               <th>メソッド名</th><th>説明</th>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getName()</code></td>\r
-               <td>プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>           \r
-       </tr>\r
-       <tr>\r
-               <td><code>getAuthor()</code></td>\r
-               <td>プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>          \r
-       </tr>\r
-       <tr>\r
-               <td><code>getURL()</code></td>\r
-               <td>プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>             \r
-       </tr>\r
-       <tr>\r
-               <td><code>getDescription()</code></td>\r
-               <td>プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返します。</td>             \r
-       </tr>\r
-       <tr>\r
-               <td><code>getVersion()</code></td>\r
-               <td>プラグインの現在のバージョンを返します。デフォルトは <code>0.0</code> を返します。</td>             \r
-       </tr>\r
-       <tr>\r
-               <td><code>getMinNucleusVersion()</code></td>\r
-               <td>(v2.0b) 最低限必要なNucleusのバージョンを返します。デフォルトは <code>155</code> (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 => 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getMinNucleusPatchLevel()</code></td>\r
-               <td>(v3.1) 最低限必要なNucleusのバージョン(<code>getMinNucleusVersion</code>)での、最低限必要なパッチレベルを返します。デフォルトは <code>0</code> を返します。このファンクションは主に新しいプラグインの機能がNucleusの最新版のパッチによって可能になる場合に用いられます。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>init()</code></td>\r
-               <td>プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、<code>plugid</code>属性がセットされます。デフォルトではこのメソッドは何もしません。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>doSkinVar($skinType)</code></td>\r
-               <td><code>&lt;%plugin(...)%&gt;</code> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。<code>$skinType</code> パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(<code>item</code>,\r
-      <code>archive</code>, ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも<strong>可能</strong>です。<a href="#skinvars"><code>doSkinVar</code> メソッドの実装に関する詳細情報はこちら</a>。デフォルトではこのメソッドはなにも出力しません。</td>             \r
-       </tr>\r
-       <tr>\r
-               <td><code>doTemplateVar(&amp;$item)</code></td>\r
-               <td>基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(<code>item\r
-                   header/body/footer</code> と <code>dateheader/footer</code>)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして\r
-      <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateVar</code> メソッドの実装に関する詳細情報はこちら</a></td>              \r
-       </tr>\r
-       <tr>\r
-               <td><code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code></td>\r
-               <td>(v2.0b) 基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(コメント部分)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして\r
-      <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateCommentsVar</code> \r
-      メソッドの実装に関する詳細情報はこちら</a></td>               \r
-       </tr>   \r
-       <tr>\r
-               <td><code>doAction($type)</code></td>\r
-               <td>プラグインがユーザーインタラクションを求めたとき、 <code>action.php</code>を介してこのメソッドがそれを与えます。.\r
-                 これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの\r
-                 <code>doAction</code> メソッドを呼び出せます。<code>$type</code> はオプションのメッセージタイプに該当します。<code>doAction</code> メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると<code>'No\r
-         Such Action'</code>という文字列を返します。<a href="#actions"><code>doAction</code> に関する詳細情報はこちら</a></td>         \r
-       </tr>\r
-       <tr>\r
-               <td><code>install()</code></td>\r
-               <td>このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>unInstall()</code></td>\r
-               <td>プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getEventList()</code></td>\r
-               <td>プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、<code>AddItem</code> イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは <code>event_AddItem($params)</code>になります。 <code>$params</code> パラメータは、例えば <code>AddItem</code>        の <code>itemid</code> のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。<a href="#events">イベントに関する詳細情報\r
-         はこちら</a></td>         \r
-       </tr>\r
-       <tr>\r
-               <td><code>getTableList()</code></td>\r
-               <td>このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>hasAdminArea()</code></td>\r
-               <td>プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは <code>0</code> を返します。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getPluginDep()</code></td>\r
-               <td>(v3.2) プラグイン名の配列を返します。Nucleusはこれらのプラグインが前もってインストールされてない場合、プラグインのインストールを拒否します。デフォルトでは空の配列が返されます。<a href="#dependency">プラグイン依存に関する詳細情報はこちら</a></td>\r
-       </tr>\r
-</table>\r
-\r
-<p>実装可能なメソッドの次は、<code>NucleusPlugin</code> クラスが提供する、再実装<strong>すべきでない</strong>幾つかの特殊メソッドです。これらはプラグイン内で、<code>$this-&gt;functionName()</code>シンタックスを利用して呼び出します。</p>\r
-\r
-<table summary="An overview of the auxiliary methods in the class NucleusPlugin. You should NOT redefine these">\r
-       <caption>\r
-       <code>NucleusPlugin</code> クラスの概要(再定義不可能なメソッド)\r
-       </caption>\r
-       <tr>\r
-               <th>メソッド名</th>\r
-               <th>説明</th>\r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>createOption(...)</code>\r
-                       <br /><code>createBlogOption(...)</code>(v2.2)\r
-                       <br /><code>createCategoryOption(...)</code>(v2.2)\r
-                       <br /><code>createMemberOption(...)</code>(v2.2)\r
-                       <br /><code>createItemOption(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">新しいオプションを生成します。</a></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>deleteOption(...)</code>\r
-                       <br /><code>deleteBlogOption(...)</code>(v2.2)\r
-                       <br /><code>deleteCategoryOption(...)</code>(v2.2)\r
-                       <br /><code>deleteMemberOption(...)</code>(v2.2)\r
-                       <br /><code>deleteItemOption(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">オプションを削除します。</a></td>               \r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>setOption(...)</code>\r
-                       <br /><code>setBlogOption(...)</code>(v2.2)\r
-                       <br /><code>setCategoryOption(...)</code>(v2.2)\r
-                       <br /><code>setMemberOption(...)</code>(v2.2)                         \r
-                       <br /><code>setItemOption(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">オプションに値をセットします。</a></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>getOption(...)</code>\r
-                       <br /><code>getBlogOption(...)</code>(v2.2)\r
-                       <br /><code>getCategoryOption(...)</code>(v2.2)\r
-                       <br /><code>getMemberOption(...)</code>(v2.2)                          \r
-                       <br /><code>getItemOption(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">オプションの値を取得します。</a></td>         \r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>getAllBlogOptions(...)</code>(v2.2)\r
-                       <br /><code>getAllCategoryOptions(...)</code>(v2.2)\r
-                       <br /><code>getAllMemberOptions(...)</code>(v2.2)                              \r
-                       <br /><code>getAllItemOptions(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。</a></td>            \r
-       </tr>   \r
-       <tr>\r
-               <td>\r
-                       <code>getBlogOptionTop(...)</code>(v3.2)\r
-                       <br /><code>getMemberOptionTop(...)</code>(v3.2)\r
-                       <br /><code>getCategoryOptionTop(...)</code>(v3.2)\r
-         <br /><code>getItemOptionTop(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値のうちの最初の値を返します。</a></td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getID()</code></td>\r
-               <td>このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。</td>               \r
-       </tr>\r
-       <tr>\r
-               <td><code>getAdminURL()</code></td>\r
-               <td>プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。</td>              \r
-       </tr>\r
-       <tr>\r
-               <td><code>getDirectory()</code></td>\r
-               <td>プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は&quot;<code>.../nucleus/plugins/<em>plugname</em>/</code>&quot;のようになります。</td>           \r
-       </tr>\r
-       <tr>\r
-               <td><code>getShortName()</code></td>\r
-               <td>"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は <code>getAdminURL</code> と <code>getDirectory</code> で使用されます。</td>              \r
-       </tr>\r
-\r
-</table>\r
-\r
-<h1>スキン変数<a name="skinvars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<h2>解説</h2>\r
-\r
-<p>\r
-独自のスキン変数を生成し、<code>&lt;%plugin(<em>PlugName,parameters</em>)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。</p>\r
-\r
-<p>\r
-スキン変数を扱うには、<code>doSkinVar</code> メソッドを実装する必要があります。いくつかの例を以下に示します。</p>\r
-\r
-<pre class="example"><code>function doSkinVar($skinType)\r
-function doSkinVar($skinType, $param1, $param2)\r
-function doSkinVar($skinType, $skinVar, $param1, $param2)\r
-function doSkinVar($skinType, $skinVar, $param1 = 'default value')</code></pre>\r
-\r
-<ul>\r
-       <li><code>$skinType</code> パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error',\r
-  'search', 'imagepopup',  <a href="#templatevars" title="Information on templatevars">'template'</a>のうちの一つを取ります</li>\r
-       <li><code>$skinVar</code> は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<code>&lt;%plugin(PlugName,VarType)%&gt;</code>)。</li>\r
-       <li><code>doSkinVar()</code>(パラメータ無し)を使い、PHPファンクションの<code>func_get_args()</code>を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。</li>\r
-</ul>\r
-\r
-<h2>ノート</h2>\r
-\r
-<ul>\r
-       <li>(v2.0b) グローバル変数としてパースされている <code>$currentSkinName</code> を使ってスキンの名前を取得できます。</li>\r
-</ul>\r
-\r
-\r
-\r
-\r
-<h1>テンプレート変数<a name="templatevars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<h2>解説</h2>\r
-\r
-<p>\r
-テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。</p>\r
-\r
-<ol>\r
-       <li>スキン内ではなくテンプレート内から呼ばれます。</li>\r
-       <li>$skinTypeパラメータを取りません。代わりに現在パースされているアイテムやコメントの情報付きの追加パラメータを取ります。\r
-    <ul>\r
-                       <li><code>doTemplateVar</code> メソッドは <code>&amp;$item</code> パラメータを取ります。</li>\r
-                       <li><code>doTemplateCommentsVar</code> メソッドは <code>&amp;$item</code> と <code>&amp;$comment</code> パラメータを取ります。</li>\r
-         </ul>\r
-               <strong>&amp;マークに注意!</strong>\r
-       </li>\r
-</ol>\r
-       \r
-<p>テンプレート変数はスキン変数と同じ要領で呼ばれます(<code>&lt;%plugin(PlugName,parameters)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>)。</p>\r
-\r
-<p>\r
-デフォルトでは、全てのテンプレート変数は'<code>template</code>'を<code>skintype</code>パラメータとして、<code>doSkinVar</code> メソッドに渡ります。</p>\r
-\r
-<p>\r
-独自の実装を提供したい場合は、<code>doTemplateVar</code> メソッドや <code>doTemplateCommentsVar</code> メソッドを再定義する必要があります。<code>skintype</code>パラメータが無くなる以外はdoSkinVarと同様に働きます。</p>\r
-\r
-<pre class="example"><code>function doTemplateVar(&amp;$item)\r
-function doTemplateVar(&amp;$item, $param1, $param2)\r
-function doTemplateVar(&amp;$item, $type, $param1, $param2)\r
-function doTemplateVar(&amp;$item, $type, $param1 = 'default value')\r
-function doTemplateCommentsVar(&amp;$item, &amp;$comment)\r
-function doTemplateCommentsVar(&amp;$item, &amp;$comment, $param1, $param2)\r
-function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1, $param2)\r
-function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1 = 'default value')</code></pre>\r
-\r
-<h2>ノート</h2>\r
-\r
-<ul>\r
-       <li>(v2.0b) グローバル変数として内部で利用される <code>$currentSkinName</code> を使ってテンプレートの名前を取得できます。</li>\r
-</ul>\r
-\r
-\r
-\r
-\r
-<h1>アクション<a name="actions" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>プラグインは <code>action.php</code> を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータは\r
-<code>action</code>('plugin'と指定)、<code>name</code>(プラグイン名)、<code>type</code>(リクエストされたアクションの種類)です。</p>\r
-\r
-<p>これらのアクションを有効にするために、<code>doAction($actionType)</code> メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータは\r
-<code>requestVar('<em>name</em>')</code> で取得できます(<code>requestVar</code> はPHPが付加する magic_quotes_gpc に配慮しています)。</p>\r
-\r
-<p>\r
-<code>doAction</code> メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。</p>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>イベント<a name="events" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。</p>\r
-\r
-<h2>例</h2>\r
-\r
-<p>\r
-下記は <code>PreAddComment</code> イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。</p>\r
-\r
-<pre class="example"><code>class NP_Acronyms extends NucleusPlugin {\r
-  ...\r
-  function getEventList() { return array('PreAddComment'); }\r
-  ...\r
-  function event_PreAddComment(&amp;$data) {\r
-    // 頭字語 HTML を置き換え\r
-    $data['comment']['body'] = \r
-        strreplace('HTML',\r
-                   '&lt;acronym title="HyperText Markup Language"&gt;HTML&lt;/acronym&gt;',\r
-                   $data['comment']['body']);\r
-  }\r
-}\r
-</code></pre>\r
-\r
-<p>このプラグインはコメント中の'HTML'というテキストを'<code>&lt;acronym title=&quot;HyperText\r
-Markup Language&quot;&gt;HTML&lt;/acronym&gt;</code>'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。</p>\r
-\r
-<h2>イベント登録の仕方</h2>\r
-\r
-<p>イベント登録に必要なステップは以下になります。</p>\r
-\r
-<ol>\r
-       <li><code>getEventList</code> メソッドから返る配列にイベント名を追加します。</li>\r
-       <li><code>event_EventName($data)</code> という形でメソッドを生成し、この中でイベントを処理します。</li>\r
-</ol>\r
-\r
-<p>複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。</p>\r
-\r
-<h2>パラメータ</h2>\r
-\r
-<p><code>event_EventName</code> メソッドはひとつだけ <code>$data</code> パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は<strong>参照形式</strong>で渡されるため、これらに加えた変更は記憶されます。</p>\r
-\r
-<p>以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。</p>\r
-\r
-<ul>\r
-       <li><var class="ref">参照渡し(緑)</var>: この種のパラメータに変更を加えるとNucleusに知られます。</li>\r
-       <li><var class="ro">値渡し(赤)</var>: プラグインイベントハンドラに渡される前に値がコピーされます。これらの変数への変更は自動的に破棄されます。.</li>\r
-</ul>\r
-\r
-<p>パラメータとして渡されるオブジェクトは<var class="obj">object</var>.として示されます。ほとんどのオブジェクトは参照渡しで、<var class="obj ref">object\r
-by ref</var>のように示されます。</p>\r
-\r
-<h2>イベントリスト</h2>\r
-\r
-<table summary="An overview of events to which a Nucleus Plugin can subscribe, and what parameters are passed along to the method that handles the event">\r
-       <caption>\r
-       プラグインが登録できるイベント</caption>\r
-       <tr>\r
-               <th>名前</th>\r
-               <th>いつ</th>\r
-               <th>パラメータ</th>\r
-       </tr>\r
-       <tr>\r
-               <td>PreSkinParse</td>\r
-               <td>スキンのパースの直前</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">skin</dt>\r
-                       <dd>パースする<code>SKIN</code>オブジェクト</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',\r
-                 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostSkinParse</td>\r
-               <td>スキンのパースの直後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">skin</dt>\r
-                       <dd>パースする<code>SKIN</code>オブジェクト</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search',\r
-                 'imagepopup', 'fileparser'のいずれか)</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreItem</td>\r
-               <td>アイテムのパース前、ただしアイテムヘッダーのパース後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">item</dt>\r
-                       <dd>アイテムデータを持つオブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostItem</td>\r
-               <td>アイテムのパース後、ただしアイテムフッターのパース前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">item</dt>\r
-                       <dd>アイテムデータを持つオブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreComment</td>\r
-               <td>コメントの表示前</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータを持つ連想配列</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostComment</td>\r
-               <td>コメントの表示後</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータを持つ連想配列</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDateHead</td>\r
-               <td>日付ヘッダーのパース前</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">timestamp</dt>\r
-                       <dd>日付ヘッダーのタイムスタンプ</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDateHead</td>\r
-               <td>日付ヘッダーのパース後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">timestamp</dt>\r
-                       <dd>日付ヘッダーのタイムスタンプ</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDateFoot</td>\r
-               <td>日付フッターのパース前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">timestamp</dt>\r
-                       <dd>日付フッターのタイムスタンプ</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDateFoot</td>\r
-               <td>日付フッターのパース後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">timestamp</dt>\r
-                       <dd>日付フッターのタイムスタンプ</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>LoginSuccess</td>\r
-               <td>ログイン成功後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>LoginFailed</td>\r
-               <td>ログイン失敗後</td>\r
-               <td><dl>\r
-                       <dt class="ro">username</dt>\r
-                       <dd>ログイン時に使われたユーザー名</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>Logout</td>\r
-               <td>ログアウト後</td>\r
-               <td><dl>\r
-                       <dt class="ro">username</dt>\r
-                       <dd>ログアウト時のユーザー名</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreBlogContent</td>\r
-               <td>blogの内容がスキン変数を通して挿入される前</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',\r
-                         'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostBlogContent</td>\r
-               <td>blogの内容がスキン変数を通して挿入された後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',\r
-                 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddComment</td>\r
-               <td>コメントがデータベースに追加される前</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータ(連想配列)</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddComment</td>\r
-               <td>コメントがデータベースに追加された後</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータ(連想配列)</dd>\r
-                       <dt class="ref">commentid</dt>\r
-                       <dd>コメントのID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostRegister</td>\r
-               <td>新規ユーザーの登録後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">member</dt>\r
-                       <dd>新しい<code>MEMBER</code> オブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddItem</td>\r
-               <td>アイテムがデータベースに追加された後</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>データベースに出来た新しい itemid</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddItem</td>\r
-               <td>アイテムがデータベースに追加される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">title</dt>\r
-                       <dd>タイトル</dd>\r
-                       <dt class="ref">body</dt>\r
-                       <dd>本文</dd>\r
-                       <dt class="ref">more</dt>\r
-                       <dd>拡張テキスト</dd>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref">authorid</dt>\r
-                       <dd>執筆者ID</dd>\r
-                       <dt class="ref">timestamp</dt>\r
-                       <dd>UNIX タイムスタンプ</dd>\r
-                       <dt class="ref">closed</dt>\r
-                       <dd>1 (コメント不可) or 0 (コメント可)</dd>\r
-                       <dt class="ref">draft</dt>\r
-                       <dd>1 (ドラフト) or 0 (非ドラフト)</dd>\r
-                       <dt class="ref">catid</dt>\r
-                       <dd>カテゴリーID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreUpdateItem</td>\r
-               <td>データベースにあるアイテムが更新される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>アイテム ID</dd>\r
-                       <dt class="ref">title</dt>\r
-                       <dd>タイトル</dd>\r
-                       <dt class="ref">body</dt>\r
-                       <dd>本文</dd>\r
-                       <dt class="ref">more</dt>\r
-                       <dd>拡張テキスト</dd>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG オブジェクト</code> object</dd>\r
-                       <dt class="ref">closed</dt>\r
-                       <dd>1 (コメント不可) or 0 (コメント可)</dd>\r
-                       <dt class="ref">catid</dt>\r
-                       <dd>カテゴリーID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PrepareItemForEdit</td>\r
-               <td>アイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>\r
-               <td><dl>\r
-                       <dt class="ref">item</dt>\r
-                       <dd>アイテムデータを持つ連想配列</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreUpdateComment</td>\r
-               <td>コメントが更新され、データベースに保存される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">body</dt>\r
-                       <dd>コメント本文</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PrepareCommentForEdit</td>\r
-               <td>コメントをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータ(連想配列)</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PrePluginOptionsEdit</td>\r
-               <td>\r
-                       (v2.0b) 'プラグインオプションの編集'フォームが生成される前\r
-                       <br />(v2.2) パラメータ追加\r
-                       <br />(v3.2) 各オプションにパラメータ追加\r
-               </td>\r
-               <td><dl>\r
-                       <dt class="ro">context</dt>\r
-                       <dd>(v2.2) <code>global</code>, <code>blog</code>, <code>member</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
-                       <dt class="ref">options</dt>\r
-                       <dd>次のインデックスをもつ連想配列: <code>name</code>, <code>value</code>, <code>oid</code>, <code>description</code>, <code>type</code>, <code>typeinfo</code>, <code>contextid</code>, <code>extra</code> 。追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要)<br />\r
-                       <code>extra</code>フィールドを用いて、オプションに追加HTML(たとえばフォームのコントロール)を追加できます。もしそうする場合、 <code>extra</code> に追加する前に <code>pid</code> と <code>getID()</code> を比較し、さらに <code>name</code> をチェックすべきです。</dd>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(コンテクストがglobalのときのみ存在)</dd>\r
-                       <dt class="ro">contextid</dt>\r
-                       <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PrePluginOptionsUpdate</td>\r
-               <td>\r
-                       (v3.2) プラグインオプションが更新される前。(このイベントを使ってオプションの新しい値を評価したり変更したりできます)\r
-               </td>\r
-               <td><dl>\r
-                       <dt class="ro">context</dt>\r
-                       <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)</dd>\r
-                       <dt class="ro">optionname</dt>\r
-                       <dd>オプション名</dd>\r
-                       <dt class="ro">contextid</dt>\r
-                       <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>\r
-                       <dt class="ref">value</dt>\r
-                       <dd>そのオプションの新しい値</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>PostPluginOptionsUpdate</td>\r
-               <td>\r
-                       (v2.0b) プラグインオプションの更新後<br />\r
-               (v2.2) コンテクストによって異なるパラメータ</td>\r
-               <td><dl>\r
-                       <dt class="ro">context</dt>\r
-                       <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(globalコンテクスト)</dd>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>(v2.2) blog ID (blog コンテクスト)</dd>                       \r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd>(v2.2) BLOG オブジェクト (blog コンテクスト)</dd>                       \r
-                       <dt class="ro">memberid</dt>\r
-                       <dd>(v2.2) member ID (member コンテクスト)</dd>                   \r
-                       <dt class="ref obj">member</dt>\r
-                       <dd>(v2.2) MEMBER オブジェクト (member コンテクスト)</dd>                   \r
-                       <dt class="ro">catid</dt>\r
-                       <dd>(v2.2) category ID (category コンテクスト)</dd>                       \r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>(v2.2) item ID (item コンテクスト)</dd>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd>(v2.2) ITEM オブジェクト (item コンテクスト)</dd>\r
-               </dl></td>              \r
-               \r
-       </tr>   \r
-       <tr>\r
-               <td>PostAuthentication</td>\r
-               <td>(v2.0b) ログイン処理の完了後。ページリクエストごとに発生</td>\r
-               <td><dl>\r
-                       <dt class="ro">loggedIn</dt>\r
-                       <dd><code>$member->isLoggedIn()</code>の戻り値</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>PreAddItemForm</td>\r
-               <td>(v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">contents</dt>\r
-                       <dd>連想配列への参照。そのうちの'title',\r
-                         'body', 'more'にはフォームフィールドへの初期値を与えることができます。複数のプラグイン間でこれらの値の変更を避けるには、処理後に'hasBeenSet'の値を1にセットします(かつ処理前にこの値をチェックするようにします)</dd>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>AddItemFormExtras</td>\r
-               <td>(v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>                   \r
-       <tr>\r
-               <td>EditItemFormExtras</td>\r
-               <td>\r
-                       (v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。<br />\r
-                       <br />                  \r
-                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h3&gt;プラグイン名&lt;/h3&gt;\r
-&lt;p&gt;追加フォームの内容&lt;/p&gt;</code></pre>\r
-               このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-                       <dt class="ro">variables</dt>\r
-                       <dd>\r
-                               (read-only) 編集されるアイテムに関する全ての情報を持つ連想配列: 'itemid',\r
-                                 'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid',\r
-                                 'timestamp', 'karmapos', 'karmaneg', 'catid'\r
-                       </dd>                   \r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>アイテム IDへのショートカット</dd>\r
-               </dl></td>              \r
-       </tr>                           \r
-       <tr>\r
-               <td>BlogSettingsFormExtras</td>\r
-               <td>(v2.0) blog設定ページにフォームを追加可能<br /><br />                        \r
-                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
-&lt;form method="post" action="..."&gt;&lt;p&gt;\r
-追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>\r
-                       このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDeleteItem</td>\r
-               <td>(v2.0) アイテムがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>削除されるアイテムID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteItem</td>\r
-               <td>(v2.0) アイテムがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>削除されたアイテムID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDeleteCategory</td>\r
-               <td>(v2.0) カテゴリーがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">catid</dt>\r
-                       <dd>削除されるカテゴリー ID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteCategory</td>\r
-               <td>(v2.0) カテゴリーがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">catid</dt>\r
-                       <dd>削除されたカテゴリー ID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreDeleteBlog</td>\r
-               <td>(v2.0) blogがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>削除されるblogID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteBlog</td>\r
-               <td>(v2.0) blogがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>削除されたblogID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreDeleteMember</td>\r
-               <td>(v2.0) メンバーがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteMember</td>\r
-               <td>(v2.0) メンバーがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreDeleteTeamMember</td>\r
-               <td>(v2.0) メンバーがweblogチームから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>blogID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteTeamMember</td>\r
-               <td>(v2.0) メンバーがweblogチームから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>blogID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDeleteComment</td>\r
-               <td>(v2.0) コメントがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">commentid</dt>\r
-                       <dd>削除されるコメントID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteComment</td>\r
-               <td>(v2.0) コメントがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">commentid</dt>\r
-                       <dd>削除されたコメントID</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>ActionLogCleared</td>\r
-               <td>(v2.0) アクションログが消去された後</td>\r
-               <td>なし</td>         \r
-       </tr>\r
-       <tr>\r
-               <td>PreDeleteTemplate</td>\r
-               <td>(v2.0) テンプレートがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">templateid</dt>\r
-                       <dd>削除されるテンプレートID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteTemplate</td>\r
-               <td>(v2.0) テンプレートがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">templateid</dt>\r
-                       <dd>削除されたテンプレートID</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>PreDeleteSkin</td>\r
-               <td>(v2.0) スキンがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">skinid</dt>\r
-                       <dd>削除されるスキンID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteSkin</td>\r
-               <td>(v2.0) スキンがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">skinid</dt>\r
-                       <dd>削除されたスキンID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreDeletePlugin</td>\r
-               <td>(v2.0) プラグインがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>削除されるプラグインID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeletePlugin</td>\r
-               <td>(v2.0) プラグインがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>削除されたプラグインID</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>PreDeleteBan</td>\r
-               <td>(v2.0) 禁止IPがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>禁止IPが削除されるblogのID</dd>\r
-                       <dt class="ro">iprange</dt>\r
-                       <dd>禁止されたIPレンジ</dd>                     \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteBan</td>\r
-               <td>(v2.0) 禁止IPがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>禁止IPが削除されたblogのID</dd>\r
-                       <dt class="ro">iprange</dt>\r
-                       <dd>禁止されたIPレンジ</dd>                     \r
-               </dl></td>              \r
-       </tr>                   \r
-       <tr>\r
-               <td>PreAddCategory</td>\r
-               <td>(v2.0) 新しいカテゴリーがデータベースに生成される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトの参照</dd>\r
-                       <dt class="ref">name</dt>\r
-                       <dd>新しいカテゴリー名</dd>                    \r
-                       <dt class="ref">description</dt>\r
-                       <dd>新しいカテゴリーの説明</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddCategory</td>\r
-               <td>(v2.0) 新しいカテゴリーがデータベースに生成された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-                       <dt class="ro">name</dt>\r
-                       <dd>新しいカテゴリー名</dd>                    \r
-                       <dt class="ro">description</dt>\r
-                       <dd>新しいカテゴリーの説明</dd>\r
-                       <dt class="ro">catid</dt>\r
-                       <dd>新しいカテゴリー ID</dd>                    \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddBlog</td>\r
-               <td>(v2.0) 新しいblogが生成される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">name</dt>\r
-                       <dd>新しい blog名</dd>\r
-                       <dt class="ref">shortname</dt>\r
-                       <dd>新しい blogの短縮名</dd>\r
-                       <dt class="ref">timeoffset</dt>\r
-                       <dd>新しい blogのタイムオフセット</dd>\r
-                       <dt class="ref">description</dt>\r
-                       <dd>新しい blogの説明</dd>\r
-                       <dt class="ref">defaultskin</dt>\r
-                       <dd>新しいblogのデフォルトスキンのID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddBlog</td>\r
-               <td>(v2.0) 新しいblogが生成された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd>新しい<code>BLOG</code> オブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddPlugin</td>\r
-               <td>(v2.0) プラグインが追加される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">file</dt>\r
-                       <dd>新しいプラグインのファイル名</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddPlugin</td>\r
-               <td>(v2.0) プラグインが追加された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">plugin</dt>\r
-                       <dd>新しく追加されたプラグインのオブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddTeamMember</td>\r
-               <td>(v2.0) メンバーがblogチームに追加される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクト</dd>\r
-                       <dt class="ref">admin</dt>\r
-                       <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddTeamMember</td>\r
-               <td>(v2.0) メンバーがblogチームに追加された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクト</dd>\r
-                       <dt class="ro">admin</dt>\r
-                       <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddTemplate</td>\r
-               <td>(v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる)</td>\r
-               <td><dl>\r
-                       <dt class="ref">name</dt>\r
-                       <dd>新しいテンプレート名</dd>\r
-                       <dt class="ref">description</dt>\r
-                       <dd>新しいテンプレートの説明</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddTemplate</td>\r
-               <td>(v2.0) 新しいテンプレートが生成された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">name</dt>\r
-                       <dd>新しいテンプレート名</dd>\r
-                       <dt class="ro">description</dt>\r
-                       <dd>新しいテンプレートの説明</dd>\r
-                       <dt class="ro">templateid</dt>\r
-                       <dd>新しいテンプレートID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreAddSkin</td>\r
-               <td>(v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる)</td>\r
-               <td><dl>\r
-                       <dt class="ref">name</dt>\r
-                       <dd>新しいスキン名</dd>\r
-                       <dt class="ref">description</dt>\r
-                       <dd>新しいスキン名の説明</dd>\r
-                       <dt class="ref">type</dt>\r
-                       <dd>スキンのコンテントタイプ</dd>\r
-                       <dt class="ref">includeMode</dt>\r
-                       <dd>新しいスキンのインクルードモード</dd>\r
-                       <dt class="ref">includePrefix</dt>\r
-                       <dd>新しいスキンのインクルードプレフィックス</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddSkin</td>\r
-               <td>(v2.0) 新しいスキンが生成された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">name</dt>\r
-                       <dd>新しいスキン名</dd>\r
-                       <dt class="ro">description</dt>\r
-                       <dd>新しいスキンの説明</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>スキンのコンテントタイプ</dd>\r
-                       <dt class="ro">includeMode</dt>\r
-                       <dd>新しいスキンのインクルードモード</dd>\r
-                       <dt class="ro">includePrefix</dt>\r
-                       <dd>新しいスキンのインクルードプレフィックス</dd>\r
-                       <dt class="ro">skinid</dt>\r
-                       <dd>新しいスキンID</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>PreAddBan</td>\r
-               <td>(v2.0) 新しい禁止IPが追加される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">blogid</dt>\r
-                       <dd>blogID</dd>\r
-                       <dt class="ref">iprange</dt>\r
-                       <dd>禁止されたIPレンジ</dd>\r
-                       <dt class="ref">reason</dt>\r
-                       <dd>禁止された理由を記述したテキストメッセージ</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddBan</td>\r
-               <td>(v2.0) 新しい禁止IPが追加された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>blogID</dd>\r
-                       <dt class="ro">iprange</dt>\r
-                       <dd>禁止されたIPレンジ</dd>\r
-                       <dt class="ro">reason</dt>\r
-                       <dd>禁止された理由を記述したテキストメッセージ</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-\r
-       <tr>\r
-               <td>PreMoveItem</td>\r
-               <td>(v2.0) アイテムが他のblog/カテゴリーに移される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">itemid</dt>\r
-                       <dd>アイテムID</dd>\r
-                       <dt class="ref">destblogid</dt>\r
-                       <dd>移動先のblogID</dd>\r
-                       <dt class="ref">destcatid</dt>\r
-                       <dd>移動先のカテゴリーID</dd>                  \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostMoveItem</td>\r
-               <td>(v2.0) アイテムが他のblog/カテゴリーに移された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>アイテムID</dd>\r
-                       <dt class="ro">destblogid</dt>\r
-                       <dd>新しいblogID</dd>\r
-                       <dt class="ro">destcatid</dt>\r
-                       <dd>新しいカテゴリーID</dd>     \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreMoveCategory</td>\r
-               <td>(v2.0) カテゴリーが他のblogに移される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">catid</dt>\r
-                       <dd>カテゴリーID</dd>\r
-                       <dt class="ref obj">sourceblog</dt>\r
-                       <dd>移動元の<code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">destblog</dt>\r
-                       <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostMoveCategory</td>\r
-               <td>(v2.0) カテゴリーが他のblogに移された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">catid</dt>\r
-                       <dd>カテゴリーID</dd>\r
-                       <dt class="ref obj">sourceblog</dt>\r
-                       <dd>移動元の<code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">destblog</dt>\r
-                       <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       \r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>MemberSettingsFormExtras</td>\r
-               <td>(v2.0) メンバー設定ページにフォームを追加可能<br /><br />                        \r
-                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。\r
-            <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
-&lt;form method="post" action="..."&gt;&lt;p&gt;\r
-追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>\r
-このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>GeneralSettingsFormExtras</td>\r
-               <td>(v2.0) 一般設定ページにフォームを追加可能<br />\r
-                 <br />\r
-あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。\r
-<pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
-&lt;form method="post" action="..."&gt;&lt;p&gt;\r
-追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>\r
-このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>\r
-               <td>なし</td>         \r
-       </tr>\r
-       <tr>\r
-               <td>AdminPrePageHead</td>\r
-               <td>(v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。</td>\r
-               <td><dl>\r
-                       <dt class="ref">extrahead</dt>\r
-                       <dd>HTMLページのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>\r
-                       <dt class="ro">action</dt>\r
-                       <dd>現在実行されているアクション、またはページタイプ</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>AdminPrePageFoot</td>\r
-               <td>(v2.5) 管理画面で、ページフッターを出力する直前。</td>\r
-         <td><dl>\r
-                       <dt class="ro">action</dt>\r
-                       <dd></dd>\r
-               </dl>\r
-           現在実行されているアクション、またはページタイプ</td>\r
-       </tr>\r
-       <tr>\r
-               <td>PreSendContentType</td>\r
-               <td>(v2.5) HTTPヘッダーにコンテントタイプがセットされる直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">contentType</dt>\r
-                       <dd>コンテントタイプ(<code>application/xhtml+xml</code>など)</dd>\r
-                       <dt class="ref">charset</dt>\r
-                       <dd>キャラクターセット</dd>\r
-                       <dt class="ro">pageType</dt>\r
-                       <dd>表示するページの種類を示す文字列:<code>skin</code> (スキンタイプ), <code>media</code> (メディアライブラリ), <code>admin-<em>action</em></code> (管理エリア), <code>bookmarklet-<em>action</em></code> (ブックマークレット)</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>QuickMenu</td>\r
-               <td>(v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例が<a href="#admin">プラグイン管理エリアを作る</a>のセクションにあります。</td>\r
-               <td><dl>\r
-                       <dt class="ref">options</dt>\r
-                       <dd>配列</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>BookmarkletExtraHead</td>\r
-               <td>(v2.5) ブックマークレット\r
-         XHTMLコードのヘッド領域内。</td>\r
-               <td><dl>\r
-                       <dt class="ref">extrahead</dt>\r
-                       <dd>XHTMLコードのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>FormExtra</td>\r
-               <td>(v3.2) このイベントは、プラグインがコメント、メンバー間メール、認証フォームのいずれかのフォーム内に追加フィールドを挿入するときに使います。フォーム処理の際に発生する <code>ValidateForm</code> イベントに対応します。</td>\r
-               <td><dl>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>イベントを発生させるフォームタイプ\r
-                               <ul>\r
-                                       <li><code>activation</code></li>\r
-                                       <li><code>additemform</code> (注:これは管理画面のアイテム追加フォームではない)</li>\r
-                                       <li><code>commentform-loggedin</code></li>\r
-                                       <li><code>commentform-notloggedin</code></li>\r
-                                       <li><code>membermailform-loggedin</code></li>\r
-                                       <li><code>membermailform-notloggedin</code></li>\r
-                               </ul>\r
-                       </dd>\r
-                       <dt class="ro obj">member</dt>\r
-                       <dd><code>type</code> が <code>activation</code>のとき、このフィールドは認証メンバーの詳細情報を含みます</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>ValidateForm</td>\r
-               <td>(v3.2) コメント、メンバー間メール、アカウント認証のいずれかが処理されるときに呼ばれます。プラグインはこれで各データの評価を実行でき、もし不具合があれば処理を中断できます。<code>FormExtra</code> と共に使うとフォームにフィールドを追加できます。</td>\r
-               <td><dl>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>処理されるフォームタイプ\r
-                               <ul>\r
-                                       <li><code>membermail</code></li>\r
-                                       <li><code>comment</code></li>\r
-                                       <li><code>activation</code></li>\r
-                               </ul>\r
-                       </dd>\r
-                       <dt class="ref">error</dt>\r
-                       <dd>フォーム処理をストップするときに、<code>error</code> フィールドに空でないエラーメッセージを記入します。このエラーメッセージはユーザー側に表示されます。</dd>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントフォームのとき、コメントデータに関する連想配列を含みます。</dd>\r
-                       <dt class="ro obj">member</dt>\r
-                       <dd>認証フォームのとき、認証中のメンバー情報を含みます。</dd>\r
-               </dl></td>\r
-       </tr>\r
-<!--\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr> -->\r
-</table>\r
-\r
-\r
-\r
-<h1>オプションを保存する<a name="options" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。</p>\r
-\r
-<p>オプションは異なったコンテクストで利用可能です。</p>\r
-\r
-<ol>\r
-       <li><strong>グローバルオプション</strong>:管理エリアのプラグインセクションで編集可能</li>\r
-       <li><strong>blogオプション</strong>:blog設定ページで編集可能</li>\r
-       <li><strong>カテゴリーオプション</strong>:blog設定ページ(のカテゴリー編集ページ)で編集可能</li>    \r
-       <li><strong>メンバーオプション</strong>:メンバー編集ページで編集可能</li>\r
-       <li><strong>アイテムオプション</strong>:アイテムの追加、およびアイテムの編集ページで編集可能</li>\r
-</ol>\r
-\r
-<h2>オプションの種類</h2>\r
-\r
-<p>オプションにはいくつかのタイプが提供されています。</p>\r
-\r
-<dl>\r
-       <dt>text</dt>\r
-       <dd>シンプルなテキスト</dd>\r
-       <dt>yesno</dt>\r
-       <dd>'yes'か'no'どちらか(編集画面ではラジオボタンとして表示されます)</dd>\r
-       <dt>password</dt>\r
-       <dd>テキストフィールド (編集画面では伏字で表示されます)</dd>\r
-       <dt>textarea (v2.2)</dt>\r
-       <dd>複数行のテキストフィールド</dd>\r
-       <dt>select (v2.2)</dt>\r
-       <dd>ドロップダウンメニュー。次のような形式の追加情報が必要です: Option 1|value1|Option 2|value2|Option 3|value3 </dd>\r
-</dl>\r
-\r
-<h2>オプション・メタ</h2>\r
-\r
-<p>Nucleus v3.2よりオプション・メタデータを用いて、オプションタイプを正しい値を受け取れるように制限できるようになりました。このメタデータは <code>$typeExtras</code>フィールドにセミコロン区切りのリストで保存されます。注:selectオプションでは、selectリストは<code>$typeExtras</code>のなかで一番最初でなければいけません。</p>\r
-\r
-<table><tr>\r
-       <th>キー</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td><code>datatype</code></td>\r
-       <td>Nucleus本体に、どのデータ型を使いたいかという追加情報を与えます。現在は '<code>numerical</code>' のみ利用できます。 '<code>numerical</code>' を指定することでNucleusは数値情報のみを受け付けます(クライアントサイド・サーバサイド両方でチェック) ('<code>select</code>' と '<code>text</code>'のオプションタイプで利用できます)</td>\r
-</tr><tr>\r
-       <td><code>access</code></td>\r
-       <td>'<code>readonly</code>'にセットすることで、オプションを編集不可能にします('<code>text</code>' と '<code>textarea</code>'のオプションタイプで利用できます)<br />\r
-       '<code>hidden</code>'を使うと、利用者側にそのオプションの存在を完全に隠蔽します('<code>text</code>'のオプションタイプで利用できます)</td>\r
-</tr></table>\r
-\r
-<p>設定例</p>\r
-<pre class="example"><code>// 数値のみを受け付けるテキストオプションを作成\r
-$this->createBlogOption('FooBar', 'foobar', 'text', '0', 'datatype=numerical');\r
-// 数値のみを受け付けるセレクトオプションを作成\r
-$this->createItemOption('FooBar', 'foobar', 'select', '0', '0|0|1|1|2|2;datatype=numerical');\r
-// 編集不可能なテキストエリアオプションを作成\r
-$this->createOption('FooBar', 'foobar', 'textarea', 'This textarea is readonly', 'access=readonly');\r
-</code></pre>\r
-\r
-<h2>制限</h2>\r
-\r
-<ol>\r
-       <li>オプション名は最大20文字です。</li>\r
-       <li>オプションの説明文は最大255文字です。</li>\r
-       <li>オプションの値は制限ありません(v2.2より前のバージョンでは128文字の制限がありました)</li>\r
-       <li>'=', '|', ';' のキャラクターはセレクトオプション用のセレクトリストやオプション・メタデータ中で使用することはできません。</li>\r
-</ol>\r
-\r
-<h2>メソッド</h2>\r
-\r
-<h3>createOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>グローバル</strong>なコンテクストで新しいオプションを生成します。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>\r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr><tr>\r
-       <td>$desc</td>\r
-       <td>オプション編集画面で表示される説明文</td>\r
-</tr><tr>\r
-       <td>$type</td>\r
-       <td>オプションタイプ(前出)</td>\r
-</tr><tr>\r
-       <td>$defValue</td>\r
-       <td>初期値</td>\r
-</tr><tr>\r
-       <td>$typeExtras</td>\r
-       <td>オプションタイプの追加情報(前出)</td>\r
-</tr></table>\r
-\r
-<h3>[v2.2] createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>blog</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>カテゴリー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>メンバー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
-\r
-<h3>[v3.2] createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>アイテム</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
-\r
-<h3>setOption($name, $value)</h3>\r
-\r
-<p>すでにデータベースに存在するオプションの値を変更します。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>              \r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr><tr>\r
-       <td>$value</td>\r
-       <td>新しい値</td>\r
-</tr></table>\r
-\r
-<h3>[v2.2] setBlogOption($blogid, $name, $value)</h3>\r
-\r
-<p>blogオプションの値を変更します。<code>blogid</code>属性はどのblogでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] setCategoryOption($catid, $name, $value)</h3>\r
-\r
-<p>カテゴリーオプションの値を変更します。<code>catid</code>属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] setMemberOption($memberid, $name, $value)</h3>\r
-\r
-<p>メンバーオプションの値を変更します。<code>memberid</code>属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
-\r
-<h3>[v3.2] setItemOption($itemid, $name, $value)</h3>\r
-\r
-<p>アイテムオプションの値を変更します。<code>itemid</code>属性はどのアイテムでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
-\r
-<h3>getOption($name)</h3>\r
-\r
-<p>データベース内のオプションの値を返します。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>              \r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr></table>\r
-\r
-<h3>[v2.2] getBlogOption($blogid, $name)</h3>\r
-\r
-<p>blogオプションの値を返します。<code>blogid</code>属性は値がリスエストされたblogを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] getCategoryOption($catid, $name)</h3>\r
-\r
-<p>カテゴリーオプションの値を返します。<code>catid</code>属性は値がリスエストされたカテゴリーを示します(その他のオプション:<code>getOption</code>を参照)。<br />\r
-</p>\r
-\r
-<h3>[v2.2] getMemberOption($memberid, $name)</h3>\r
-\r
-<p>メンバーオプションの値を返します。<code>memberid</code>属性は値がリスエストされたメンバーを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
-\r
-<h3>[v3.2] getItemOption($itemid, $name)</h3>\r
-\r
-<p>アイテムオプションの値を返します。<code>itemid</code>属性は値がリスエストされたアイテムを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
-\r
-<h3>deleteOption($name)</h3>\r
-\r
-<p>データベースからオプションを削除します。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>              \r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr></table>\r
-\r
-<h3>[v2.2] deleteBlogOption($name)</h3>\r
-\r
-<p>blogオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] deleteCategoryOption($name)</h3>\r
-\r
-<p>カテゴリーオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] deleteMemberOption($name)</h3>\r
-\r
-<p>メンバーオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
-\r
-<h3>[v3.2] deleteItemOption($name)</h3>\r
-\r
-<p>アイテムオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] getAllBlogOptions($name)</h3>\r
-\r
-<p>与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。</p>\r
-\r
-<h3>[v2.2] getAllCategoryOptions($name)</h3>\r
-\r
-<p>与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。</p>\r
-\r
-<h3>[v2.2] getAllMemberOptions($name)</h3>\r
-\r
-<p>与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。</p>\r
-\r
-<h3>[v3.2] getAllItemOptions($name)</h3>\r
-\r
-<p>与えられたアイテムオプションの全ての値を返します。結果は存在するitemidごとの連想配列です。</p>\r
-\r
-<h3>[v3.2] getBlogOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
-\r
-<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのblogid ('id') の値 ('value') を持つ配列になっています。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>\r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr><tr>\r
-       <td>$amount</td>\r
-       <td>必要なオプション数</td>\r
-</tr><tr>\r
-       <td>$sort</td>\r
-       <td>昇順 ('asc') か降順 ('desc') で並べ替え</td>\r
-</tr></table>\r
-\r
-<h3>[v3.2] getMemberOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
-\r
-<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのメンバーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
-\r
-<h3>[v3.2] getCategoryOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
-\r
-<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのカテゴリーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
-\r
-\r
-<h3>[v3.2] getItemOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
-\r
-<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのアイテムID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
-\r
-\r
-<div class="note">\r
-<b>注:</b> プラグインクラス内のコンストラクタから、これらのファンクションを呼ぶことはできません。プラグインがロードされた後にこれらを実行したいときは、かわりに<code>init()</code>メソッド内に置きます。</div>\r
-\r
-<h1>データベース・テーブル<a name="tables" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<h2>Nucleusテーブルへのアクセス</h2>\r
-\r
-<p>v2.0まで、Nucleusテーブルへのアクセスは単に<code>nucleus_</code>と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。</p>\r
-\r
-<ol>\r
-       <li><code>nucleus_item</code> などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために <code>sql_table('item') </code>というグローバルファンクションを利用します。</li>\r
-       <li><code>supportsFeature('SqlTablePrefix')</code> が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。</li>\r
-</ol>\r
-\r
-<p class="note">v2.0までのNucleusではグローバルファンクション <code>sql_table</code> は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。</p>\r
-\r
-<pre class="example"><code>&lt;?\r
-\r
-// プラグインがNucleusバージョン2.0以下と互換性を持つために必要\r
-if (!function_exists('sql_table'))\r
-{\r
-       function sql_table($name) {\r
-               return 'nucleus_' . $name;\r
-       }\r
-}\r
-\r
-class NP_HelloWorld extends NucleusPlugin {\r
-...\r
-}\r
-\r
-?&gt;</code></pre>\r
-\r
-<h2>独自テーブル</h2>\r
-\r
-<p>もしプラグイン独自のテーブルが必要なら、<code>install</code>メソッドの中で独自テーブルを生成し、<code>unInstall</code>メソッドの中でそれを削除するようにします。</p>\r
-\r
-<p>いくつかの注意点</p>\r
-<ul>\r
-       <li><code>nucleus_plug_<em>plugname</em></code> のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名を\r
-       <code>sql_table('plug_plugname')</code> で生成してください。\r
-       </li>\r
-       <li>自分自身でデータベース接続をする必要はありません。PHPコマンド <code>mysql_query()</code> を使ってSQL命令を実行できます。</li>\r
-       <li>自分でデータベース接続をする場合、後でNucleusデータベースへの接続を復元するようにしてください。自前処理の後で <code>sql_connect()</code>  を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。<code>$this- &gt;db</code>のリンクIDを保持でき、各クエリにそれを渡すことができます。</li>\r
-       <li>バックアップ機能を使う時は、独自テーブルもバックアップに含めるよう、<code>getTableList()</code> を再定義してください。</li>\r
-</ul>\r
-\r
-<h1>プラグイン管理エリア<a name="admin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。</p>\r
-\r
-<h2>基本</h2>\r
-\r
-<p>管理エリアを提供するには、次のステップが必要です。</p>\r
-\r
-<ol>\r
-  <li>プラグインディレクトリに<strong>プラグイン名</strong>のサブディレクトリを作ります。たとえばプラグイン名が<code>NP_PluginName</code>なら、'pluginname'です。ディレクトリ名はすべて小文字で!</li>\r
-  <li>\r
-       そのディレクトリで、次のような<strong>index.php</strong>を用意します。\r
-       <pre><code>&lt;?php\r
-\r
-       // if your 'plugin' directory is not in the default location,\r
-       // edit this variable to point to your site directory\r
-       // (where config.php is)\r
-       $strRel = '../../../';\r
-\r
-       include($strRel . 'config.php');\r
-       if (!$member->isLoggedIn())\r
-               doError('You¥'re not logged in.');\r
-\r
-       include($DIR_LIBS . 'PLUGINADMIN.php');\r
-\r
-       // create the admin area page\r
-       $oPluginAdmin = new PluginAdmin('<strong>PluginName</strong>');\r
-       $oPluginAdmin->start();\r
-\r
-       echo '&lt;h2&gt;プラグイン名&lt;/h2&gt;';\r
-\r
-       echo '&lt;p&gt;<strong>ページ内容</strong>&lt;p&gt;';\r
-\r
-       $oPluginAdmin->end();\r
-\r
-?&gt;</code></pre>\r
-  </li>\r
-  <li>\r
-       プラグイン側に次のコードを挿入し、クイックメニューイベントに登録します。\r
-    <pre><code>function event_QuickMenu(&amp;$data) {\r
-               array_push(\r
-                       $data['options'],\r
-                       array(\r
-                               'title' => '<strong>プラグイン名</strong>',\r
-                               'url' => $this->getAdminURL(),\r
-                               'tooltip' => '<strong>ツールチップテキスト</strong>'\r
-                       )\r
-               );\r
-       }</code></pre>\r
-  </li>\r
-  <li>\r
-       プラグイン側に次の関数を記述します。\r
-    <pre><code>function hasAdminArea()\r
-{\r
-       return 1;\r
-}</code></pre>\r
-  </li>\r
-</ol>\r
-\r
-<h2>考慮すること</h2>\r
-\r
-<ul>\r
- <li>登録できるからといって安易にクイックメニューへ登録しないこと。クイックメニューにプラグインが100個並んだりしたらかなりウンザリするでしょう。ですので、クイックメニューに登録する場合でも、クイックメニュー登録を有効・無効化するプラグインオプションを(グローバルまたはメンバーオプションで)用意することを考えてください。</li>\r
- <li><code>プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel</code> 変数は手動で書き換える必要があります。</li>\r
- <li>管理エリアのアウトプットが<strong>正しいXHTML</strong>になっているか確認してください。正しくないと、MozillaなどのGeckoベースのブラウザでページ表示が崩れます。</li>\r
-</ul>\r
-\r
-<h2>PluginAdmin クラス</h2>\r
-\r
-<p><code>PluginAdmin</code> クラスは助けになります。これを一度生成すれば、<code>$oPluginAdmin->plugin</code> でプラグインのインスタンスにアクセスできます。</p>\r
-\r
-<h1>プラグイン用ヘルプページ <a name="help" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>Nucleus v3.2から、プラグインの機能の概要、利用できるスキン・テンプレート変数、さらに詳細な情報のありかなどを示すヘルプページを提供可能になりました。</p>\r
-\r
-<p>ヘルプページは管理画面のプラグイン一覧からアクセス可能になります。</p>\r
-\r
-<h2>基本</h2>\r
-<p>ヘルプページを提供するために、次のステップが必要です。</p>\r
-<ol>\r
-<li>プラグインディレクトリに、プラグイン名をつけたサブディレクトリを作成します。ディレクトリ名は小文字であることに注意します。<a href="#admin">管理エリア</a>を作るときと同様です。</li>\r
-<li>そのディレクトリの中に help.html を作り、プラグインについての文章を記述します。次の雛型からはじめると良いでしょう。\r
-<pre><code>&lt;h3&gt;プラグインの概要&lt;/h3&gt;\r
-\r
-&lt;p&gt;このプラグインはヘルプページがいかに機能するかを示すためだけのものです&lt;/p&gt;\r
-\r
-&lt;h3&gt;インストール&lt;/h3&gt;\r
-\r
-&lt;p&gt;これを読めてるならインストールは正しく出来てます :-)&lt;/p&gt;\r
-\r
-&lt;h3&gt;スキン変数&lt;/h3&gt;\r
-\r
-&lt;p&gt;このプラグインはただのテストケースなのでスキン・テンプレート変数はありませんが、書くとすれば。\r
-\r
-&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1%&gt;&lt;/b&gt;: なにかをする&lt;/li&gt;\r
-&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1(foobar)%&gt;&lt;/b&gt;: 別のなにかをする&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;\r
-\r
-&lt;h3&gt;サポートとバグ報告&lt;/h3&gt;\r
-\r
-&lt;p&gt;さらなるサポートやバグ報告のために、次のフォーラムのスレッドを利用してください。\r
-&lt;a href="http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;"&gt;\r
-http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-&lt;h3&gt;バージョン履歴&lt;/h3&gt;\r
-\r
-&lt;ul&gt;&lt;li&gt;Version 0.1: 最初のテストケースバージョン&lt;/li&gt;\r
-&lt;li&gt;Version 0.0: その前のバージョン ;-)&lt;/li&gt;&lt;/ul&gt;</code></pre>\r
-</li>\r
-<li>supportsFeature('HelpPage') で0より大きい数字を返すように設定します。\r
-<pre><code>function supportsFeature($what) {\r
-       switch($what) {\r
-       case 'HelpPage':\r
-               return 1;\r
-         default:\r
-               return 0;\r
-       }\r
-  }</code></pre>\r
-</li>\r
-</ol>\r
-\r
-<h1>プラグイン依存チェック <a name="dependency" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>v3.2から、他のプラグインとの依存関係を宣言する新しいプラグインインターフェイスが追加されました。他のプラグインの機能を必要とするプラグインに利用できます。特に依存関係が成立しなくて正しく機能しない状態を検知するときに便利です。</p>\r
-\r
-<h2>この機能を利用するプラグインの書き方</h2>\r
-\r
-<p>現実世界での例からはじめましょう。</p>\r
-\r
-<p>NP_PageLinkList は NP_BlogWithOffset の機能を利用するため、利用者には NP_BlogWithOffset のインストール後に NP_PageLinkList をインストールさせたいとします。NucleusはこのAPIによって、インストール前に依存関係を検知させる方法をプラグインに提供します。</p>\r
-\r
-<p>このケースでは、NP_PageLinkList 側に NP_BlogWithOffset が必要だということを認識させるコードを埋め込みます。プラグインがインストールされる際に、Nucleusコアは <code>getPluginDep()</code> というファンクションを呼び出します。このファンクションは必要なプラグインのリストを返し、コアはインストール済みのプラグインをチェックして、もし依存関係に欠如があればインストールを拒否します。</p>\r
-\r
-<p>必要なことは NP_PageLinkList にこのファンクションを追加する、ただそれだけです。</p>\r
-\r
-<pre><code>function getPluginDep() {\r
-        return array('NP_BlogWithOffset');\r
-}</code></pre>\r
-\r
-<p>このプラグイン依存チェックは、他のプラグインが依存しているプラグインがアンインストールされることも防ぎます。</p>\r
-\r
-</body>\r
-</html>\r
-\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: plugins.html,v 1.7 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: plugins.html,v 1.6.2.1 2005/09/09 07:34:26 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - プラグイン API</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+       <style type="text/css">
+               /* refence parameters (greenish) */
+               .ref {
+                       background-color: #afa; 
+                       color: #000;
+               }
+               
+               /* object parameters */
+               .obj {
+                       color: #00f;
+               }
+               .obj:after {
+                       content: " (object)";
+               }
+               
+               /* read-only parameters (non-ref; reddish) */
+               .ro {
+                       background-color: #faa;
+                       color: #000;
+               }
+       </style>
+</head>
+<body>
+
+<p class="heading">&nbsp;</p>
+<div class="heading">
+プラグイン API
+<i>2005年7月27日</i>
+</div>
+
+<div class="note-trans"><strong>訳者注:</strong> 
+       <ul>
+               <li>このドキュメントの原文は以下のURLにあります。<br />
+                <a href="http://nucleuscms.org/documentation/devdocs/plugins.html">http://nucleuscms.org/documentation/devdocs/plugins.html</a></li>
+           <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>
+       </ul>
+</div>
+
+<div class="note"><strong>注:</strong> 
+       <ul>
+               <li>このドキュメントは基本的なプラグインの書き方についての情報を提供しています。さらに質問がある方は <a href="http://forum.nucleuscms.org/viewforum.php?f=10">Plugin
+         Development Forum</a> (<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=5">日本語フォーラム</a>)をご覧ください。</li>
+               <li>Nucleusバージョン1.5以降に導入されたメソッドとイベントには、導入時のバージョン情報を付記しています。それらの機能を利用するときは、<code>getMinNucleusVersion</code> を適切に設定するのを忘れないでください。</li>
+       </ul>
+</div>
+
+<h1>はじめに</h1>
+
+<p>
+<a href="./index.html">開発者向けドキュメントの目次へ戻る</a>
+</p>
+
+<p>
+このドキュメントはNucleusプラグインの作り方についての解説です。 
+</p>
+
+<h1><a name="toc"></a><a name="top"></a>目次</h1>
+
+<ul>
+       <li><a href="#introduction">イントロダクション</a></li>
+       <li><a href="#firstplug">はじめてプラグインを書いてみる</a></li>
+       <li><a href="#nucleusplugin"><code>NucleusPlugin</code> クラスの概要</a></li>
+       <li><a href="#skinvars"><code>&lt;%plugin(...)%&gt;</code> スキン変数</a></li>
+       <li><a href="#templatevars"><code>&lt;%plugin(...)%&gt;</code> テンプレート変数</a></li>        
+       <li><a href="#actions"><code>action.php</code> を使ったアクション</a></li>
+       <li><a href="#events">イベントとイベント登録の仕方</a></li>
+       <li><a href="#options">オプションを保存する</a></li>
+       <li><a href="#tables">データベース・テーブル</a></li>
+       <li><a href="#admin">プラグイン管理エリアの提供</a></li>
+       <li><a href="#help">ヘルプページの提供</a></li>
+       <li><a href="#dependency">プラグイン依存チェック</a></li>
+<!--   <li><a href="#parser">Using the <code>PARSER</code> class</a></li>
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>-->
+</ul>
+
+<h1>イントロダクション <a name="introduction" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。
+</p>
+
+<p>
+プラグインの利点は以下のとおりです。</p>
+
+<ul>
+       <li>実装について詳しくしらなくてもNucleusフレームワークに簡単に機能を追加できる</li>
+       <li>必要なプラグインだけをインストールでき、ページ生成にかかる時間を節約できる</li>
+</ul>
+
+<p>
+すべてのプラグインファイルは <code>config.php</code> に記述されたディレクトリに置く必要があります。一般的に、それは <code>/your/path/nucleus/plugins/</code>  になるでしょう。プラグインファイル名は <code>NP<i>_name</i>.php</code> という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。</p>
+
+<div class="note">
+<b>注:</b> プラグイン名は大文字・小文字を識別しますので、<code>Np_</code> や <code>np_</code> ではなく、<code>NP_</code> で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称は<em>すべて小文字にします</em>。</div>
+
+
+
+
+<h1>はじめてプラグインを書いてみる<a name="firstplug" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された <code>NucleusPlugin</code> クラスを継承したPHPクラスです。以下は<code>HelloWorld</code>プラグインの例です。</p>
+
+<pre class="example"><code>&lt;?
+
+class NP_HelloWorld extends NucleusPlugin
+{
+
+       // プラグインの名前
+       function getName()
+       {
+               return 'Hello World'; 
+       }
+       
+       // プラグインの作者
+       function getAuthor()
+       { 
+               return 'Wouter Demuynck'; 
+       }
+       
+       // プラグインのサイトURL
+       // mailto:foo@bar.com の形式も可
+       function getURL() 
+       {
+               return '../../index.html'; 
+       }
+       
+       // プラグインのバージョン
+       function getVersion()
+       {
+               return '1.0'; 
+       }
+       
+       // インストール済みのプラグインリストに表示される説明文
+       function getDescription()
+       { 
+               return 'Just a sample plugin.';
+       }
+
+       function doSkinVar($skinType)
+       {
+               echo 'Hello World!';
+       }
+
+       function supportsFeature ($what)
+       {
+               switch ($what)
+               {
+                       case 'SqlTablePrefix':
+                               return 1;
+                       default:
+                               return 0;
+               }
+       }
+         
+}
+?&gt;</pre>
+
+<ol>
+       <li>
+               このコードをコピーし、 <code>NP_HelloWorld.php</code> と名づけて保存し、プラグインディレクトリに置きます。<em>最後の <code>?&gt;</code> の後や、最初の <code>&lt;?</code> の前にスペースがないことを確認しましょう</em>。ところでNP は &quot;Nucleus Plugin&quot; って意味ですよ :-) 念のため。
+       </li>
+       <li>Nucleusの管理画面を開き、<em>Nucleusの管理>プラグインの管理</em>にいきます。</li>
+       <li><em>HelloWorld</em> プラグインがインストール可能な状態になっているはずですので、インストールします。すべてがうまくいけば、インストール済みプラグインリストに追加されます。</li>
+       <li>あなたのスキンの1つを編集し、実際のページに表示する箇所に次の文を挿入します。
+         <pre class="example"><code>&lt;%HelloWorld%&gt;</code></pre>
+       注意:カッコ内の名称 (<code>HelloWorld</code>) は大文字小文字を識別します!</li>
+       <li>さて、編集したスキンから生成されるページを見てみましょう。プラグイン変数を追加した場所に &quot;Hello
+  World&quot; と見えますね?</li>
+</ol>
+
+<p>ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。</p>
+
+
+<h1>NucleusPlugin クラスの概要 <a name="nucleusplugin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>すべてのプラグインは、<code>NucleusPlugin</code> というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。</p>
+
+<p>下記は <code>NucleusPlugin</code> が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、<code>nucleus/libs/PLUGIN.php</code>にあります。</p>
+
+<table summary="An overview of the redefinable methods in the class NucleusPlugin">
+       <caption>
+       <code>NucleusPlugin</code> クラスの概要(再定義可能なメソッド)
+       </caption>
+       <tr>
+               <th>メソッド名</th><th>説明</th>
+       </tr>
+       <tr>
+               <td><code>getName()</code></td>
+               <td>プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>           
+       </tr>
+       <tr>
+               <td><code>getAuthor()</code></td>
+               <td>プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>          
+       </tr>
+       <tr>
+               <td><code>getURL()</code></td>
+               <td>プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>             
+       </tr>
+       <tr>
+               <td><code>getDescription()</code></td>
+               <td>プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返します。</td>             
+       </tr>
+       <tr>
+               <td><code>getVersion()</code></td>
+               <td>プラグインの現在のバージョンを返します。デフォルトは <code>0.0</code> を返します。</td>             
+       </tr>
+       <tr>
+               <td><code>getMinNucleusVersion()</code></td>
+               <td>(v2.0b) 最低限必要なNucleusのバージョンを返します。デフォルトは <code>155</code> (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 => 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。</td>
+       </tr>
+       <tr>
+               <td><code>getMinNucleusPatchLevel()</code></td>
+               <td>(v3.1) 最低限必要なNucleusのバージョン(<code>getMinNucleusVersion</code>)での、最低限必要なパッチレベルを返します。デフォルトは <code>0</code> を返します。このファンクションは主に新しいプラグインの機能がNucleusの最新版のパッチによって可能になる場合に用いられます。</td>
+       </tr>
+       <tr>
+               <td><code>init()</code></td>
+               <td>プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、<code>plugid</code>属性がセットされます。デフォルトではこのメソッドは何もしません。</td>
+       </tr>
+       <tr>
+               <td><code>doSkinVar($skinType)</code></td>
+               <td><code>&lt;%plugin(...)%&gt;</code> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。<code>$skinType</code> パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(<code>item</code>,
+      <code>archive</code>, ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも<strong>可能</strong>です。<a href="#skinvars"><code>doSkinVar</code> メソッドの実装に関する詳細情報はこちら</a>。デフォルトではこのメソッドはなにも出力しません。</td>             
+       </tr>
+       <tr>
+               <td><code>doTemplateVar(&amp;$item)</code></td>
+               <td>基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(<code>item
+                   header/body/footer</code> と <code>dateheader/footer</code>)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
+      <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateVar</code> メソッドの実装に関する詳細情報はこちら</a></td>              
+       </tr>
+       <tr>
+               <td><code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code></td>
+               <td>(v2.0b) 基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(コメント部分)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
+      <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateCommentsVar</code> 
+      メソッドの実装に関する詳細情報はこちら</a></td>               
+       </tr>   
+       <tr>
+               <td><code>doAction($type)</code></td>
+               <td>プラグインがユーザーインタラクションを求めたとき、 <code>action.php</code>を介してこのメソッドがそれを与えます。.
+                 これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの
+                 <code>doAction</code> メソッドを呼び出せます。<code>$type</code> はオプションのメッセージタイプに該当します。<code>doAction</code> メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると<code>'No
+         Such Action'</code>という文字列を返します。<a href="#actions"><code>doAction</code> に関する詳細情報はこちら</a></td>         
+       </tr>
+       <tr>
+               <td><code>install()</code></td>
+               <td>このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。</td>
+       </tr>
+       <tr>
+               <td><code>unInstall()</code></td>
+               <td>プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。</td>
+       </tr>
+       <tr>
+               <td><code>getEventList()</code></td>
+               <td>プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、<code>AddItem</code> イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは <code>event_AddItem($params)</code>になります。 <code>$params</code> パラメータは、例えば <code>AddItem</code>        の <code>itemid</code> のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。<a href="#events">イベントに関する詳細情報
+         はこちら</a></td>         
+       </tr>
+       <tr>
+               <td><code>getTableList()</code></td>
+               <td>このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。</td>
+       </tr>
+       <tr>
+               <td><code>hasAdminArea()</code></td>
+               <td>プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは <code>0</code> を返します。</td>
+       </tr>
+       <tr>
+               <td><code>getPluginDep()</code></td>
+               <td>(v3.2) プラグイン名の配列を返します。Nucleusはこれらのプラグインが前もってインストールされてない場合、プラグインのインストールを拒否します。デフォルトでは空の配列が返されます。<a href="#dependency">プラグイン依存に関する詳細情報はこちら</a></td>
+       </tr>
+</table>
+
+<p>実装可能なメソッドの次は、<code>NucleusPlugin</code> クラスが提供する、再実装<strong>すべきでない</strong>幾つかの特殊メソッドです。これらはプラグイン内で、<code>$this-&gt;functionName()</code>シンタックスを利用して呼び出します。</p>
+
+<table summary="An overview of the auxiliary methods in the class NucleusPlugin. You should NOT redefine these">
+       <caption>
+       <code>NucleusPlugin</code> クラスの概要(再定義不可能なメソッド)
+       </caption>
+       <tr>
+               <th>メソッド名</th>
+               <th>説明</th>
+       </tr>
+       <tr>
+               <td>
+                       <code>createOption(...)</code>
+                       <br /><code>createBlogOption(...)</code>(v2.2)
+                       <br /><code>createCategoryOption(...)</code>(v2.2)
+                       <br /><code>createMemberOption(...)</code>(v2.2)
+                       <br /><code>createItemOption(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">新しいオプションを生成します。</a></td>              
+       </tr>
+       <tr>
+               <td>
+                       <code>deleteOption(...)</code>
+                       <br /><code>deleteBlogOption(...)</code>(v2.2)
+                       <br /><code>deleteCategoryOption(...)</code>(v2.2)
+                       <br /><code>deleteMemberOption(...)</code>(v2.2)
+                       <br /><code>deleteItemOption(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">オプションを削除します。</a></td>               
+       </tr>
+       <tr>
+               <td>
+                       <code>setOption(...)</code>
+                       <br /><code>setBlogOption(...)</code>(v2.2)
+                       <br /><code>setCategoryOption(...)</code>(v2.2)
+                       <br /><code>setMemberOption(...)</code>(v2.2)                         
+                       <br /><code>setItemOption(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">オプションに値をセットします。</a></td>              
+       </tr>
+       <tr>
+               <td>
+                       <code>getOption(...)</code>
+                       <br /><code>getBlogOption(...)</code>(v2.2)
+                       <br /><code>getCategoryOption(...)</code>(v2.2)
+                       <br /><code>getMemberOption(...)</code>(v2.2)                          
+                       <br /><code>getItemOption(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">オプションの値を取得します。</a></td>         
+       </tr>
+       <tr>
+               <td>
+                       <code>getAllBlogOptions(...)</code>(v2.2)
+                       <br /><code>getAllCategoryOptions(...)</code>(v2.2)
+                       <br /><code>getAllMemberOptions(...)</code>(v2.2)                              
+                       <br /><code>getAllItemOptions(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。</a></td>            
+       </tr>   
+       <tr>
+               <td>
+                       <code>getBlogOptionTop(...)</code>(v3.2)
+                       <br /><code>getMemberOptionTop(...)</code>(v3.2)
+                       <br /><code>getCategoryOptionTop(...)</code>(v3.2)
+         <br /><code>getItemOptionTop(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値のうちの最初の値を返します。</a></td>
+       </tr>
+       <tr>
+               <td><code>getID()</code></td>
+               <td>このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。</td>               
+       </tr>
+       <tr>
+               <td><code>getAdminURL()</code></td>
+               <td>プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。</td>              
+       </tr>
+       <tr>
+               <td><code>getDirectory()</code></td>
+               <td>プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は&quot;<code>.../nucleus/plugins/<em>plugname</em>/</code>&quot;のようになります。</td>           
+       </tr>
+       <tr>
+               <td><code>getShortName()</code></td>
+               <td>"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は <code>getAdminURL</code> と <code>getDirectory</code> で使用されます。</td>              
+       </tr>
+
+</table>
+
+<h1>スキン変数<a name="skinvars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<h2>解説</h2>
+
+<p>
+独自のスキン変数を生成し、<code>&lt;%plugin(<em>PlugName,parameters</em>)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。</p>
+
+<p>
+スキン変数を扱うには、<code>doSkinVar</code> メソッドを実装する必要があります。いくつかの例を以下に示します。</p>
+
+<pre class="example"><code>function doSkinVar($skinType)
+function doSkinVar($skinType, $param1, $param2)
+function doSkinVar($skinType, $skinVar, $param1, $param2)
+function doSkinVar($skinType, $skinVar, $param1 = 'default value')</code></pre>
+
+<ul>
+       <li><code>$skinType</code> パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error',
+  'search', 'imagepopup',  <a href="#templatevars" title="Information on templatevars">'template'</a>のうちの一つを取ります</li>
+       <li><code>$skinVar</code> は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<code>&lt;%plugin(PlugName,VarType)%&gt;</code>)。</li>
+       <li><code>doSkinVar()</code>(パラメータ無し)を使い、PHPファンクションの<code>func_get_args()</code>を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。</li>
+</ul>
+
+<h2>ノート</h2>
+
+<ul>
+       <li>(v2.0b) グローバル変数としてパースされている <code>$currentSkinName</code> を使ってスキンの名前を取得できます。</li>
+</ul>
+
+
+
+
+<h1>テンプレート変数<a name="templatevars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<h2>解説</h2>
+
+<p>
+テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。</p>
+
+<ol>
+       <li>スキン内ではなくテンプレート内から呼ばれます。</li>
+       <li>$skinTypeパラメータを取りません。代わりに現在パースされているアイテムやコメントの情報付きの追加パラメータを取ります。
+    <ul>
+                       <li><code>doTemplateVar</code> メソッドは <code>&amp;$item</code> パラメータを取ります。</li>
+                       <li><code>doTemplateCommentsVar</code> メソッドは <code>&amp;$item</code> と <code>&amp;$comment</code> パラメータを取ります。</li>
+         </ul>
+               <strong>&amp;マークに注意!</strong>
+       </li>
+</ol>
+       
+<p>テンプレート変数はスキン変数と同じ要領で呼ばれます(<code>&lt;%plugin(PlugName,parameters)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>)。</p>
+
+<p>
+デフォルトでは、全てのテンプレート変数は'<code>template</code>'を<code>skintype</code>パラメータとして、<code>doSkinVar</code> メソッドに渡ります。</p>
+
+<p>
+独自の実装を提供したい場合は、<code>doTemplateVar</code> メソッドや <code>doTemplateCommentsVar</code> メソッドを再定義する必要があります。<code>skintype</code>パラメータが無くなる以外はdoSkinVarと同様に働きます。</p>
+
+<pre class="example"><code>function doTemplateVar(&amp;$item)
+function doTemplateVar(&amp;$item, $param1, $param2)
+function doTemplateVar(&amp;$item, $type, $param1, $param2)
+function doTemplateVar(&amp;$item, $type, $param1 = 'default value')
+function doTemplateCommentsVar(&amp;$item, &amp;$comment)
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $param1, $param2)
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1, $param2)
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1 = 'default value')</code></pre>
+
+<h2>ノート</h2>
+
+<ul>
+       <li>(v2.0b) グローバル変数として内部で利用される <code>$currentSkinName</code> を使ってテンプレートの名前を取得できます。</li>
+</ul>
+
+
+
+
+<h1>アクション<a name="actions" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>プラグインは <code>action.php</code> を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータは
+<code>action</code>('plugin'と指定)、<code>name</code>(プラグイン名)、<code>type</code>(リクエストされたアクションの種類)です。</p>
+
+<p>これらのアクションを有効にするために、<code>doAction($actionType)</code> メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータは
+<code>requestVar('<em>name</em>')</code> で取得できます(<code>requestVar</code> はPHPが付加する magic_quotes_gpc に配慮しています)。</p>
+
+<p>
+<code>doAction</code> メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。</p>
+
+
+
+
+
+
+<h1>イベント<a name="events" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。</p>
+
+<h2>例</h2>
+
+<p>
+下記は <code>PreAddComment</code> イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。</p>
+
+<pre class="example"><code>class NP_Acronyms extends NucleusPlugin {
+  ...
+  function getEventList() { return array('PreAddComment'); }
+  ...
+  function event_PreAddComment(&amp;$data) {
+    // 頭字語 HTML を置き換え
+    $data['comment']['body'] = 
+        strreplace('HTML',
+                   '&lt;acronym title="HyperText Markup Language"&gt;HTML&lt;/acronym&gt;',
+                   $data['comment']['body']);
+  }
+}
+</code></pre>
+
+<p>このプラグインはコメント中の'HTML'というテキストを'<code>&lt;acronym title=&quot;HyperText
+Markup Language&quot;&gt;HTML&lt;/acronym&gt;</code>'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。</p>
+
+<h2>イベント登録の仕方</h2>
+
+<p>イベント登録に必要なステップは以下になります。</p>
+
+<ol>
+       <li><code>getEventList</code> メソッドから返る配列にイベント名を追加します。</li>
+       <li><code>event_EventName($data)</code> という形でメソッドを生成し、この中でイベントを処理します。</li>
+</ol>
+
+<p>複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。</p>
+
+<h2>パラメータ</h2>
+
+<p><code>event_EventName</code> メソッドはひとつだけ <code>$data</code> パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は<strong>参照形式</strong>で渡されるため、これらに加えた変更は記憶されます。</p>
+
+<p>以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。</p>
+
+<ul>
+       <li><var class="ref">参照渡し(緑)</var>: この種のパラメータに変更を加えるとNucleusに知られます。</li>
+       <li><var class="ro">値渡し(赤)</var>: プラグインイベントハンドラに渡される前に値がコピーされます。これらの変数への変更は自動的に破棄されます。.</li>
+</ul>
+
+<p>パラメータとして渡されるオブジェクトは<var class="obj">object</var>.として示されます。ほとんどのオブジェクトは参照渡しで、<var class="obj ref">object
+by ref</var>のように示されます。</p>
+
+<h2>イベントリスト</h2>
+
+<table summary="An overview of events to which a Nucleus Plugin can subscribe, and what parameters are passed along to the method that handles the event">
+       <caption>
+       プラグインが登録できるイベント</caption>
+       <tr>
+               <th>名前</th>
+               <th>いつ</th>
+               <th>パラメータ</th>
+       </tr>
+       <tr>
+               <td>InitSkinParse</td>
+               <td>スキンの初期化の直前</td>
+               <td><dl>
+                       <dt class="obj ref">skin</dt>
+                       <dd>パースする<code>SKIN</code>オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',
+                       'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>PreSkinParse</td>
+               <td>スキンのパースの直前</td>
+               <td><dl>
+                       <dt class="obj ref">skin</dt>
+                       <dd>パースする<code>SKIN</code>オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',
+                 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>
+                       <dt class="ref">contents</dt>
+                       <dd>スキンの内容</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostSkinParse</td>
+               <td>スキンのパースの直後</td>
+               <td><dl>
+                       <dt class="obj ref">skin</dt>
+                       <dd>パースする<code>SKIN</code>オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search',
+                 'imagepopup', 'fileparser'のいずれか)</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreItem</td>
+               <td>アイテムのパース前、ただしアイテムヘッダーのパース後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">item</dt>
+                       <dd>アイテムデータを持つオブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostItem</td>
+               <td>アイテムのパース後、ただしアイテムフッターのパース前</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">item</dt>
+                       <dd>アイテムデータを持つオブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreComment</td>
+               <td>コメントの表示前</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータを持つ連想配列</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostComment</td>
+               <td>コメントの表示後</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータを持つ連想配列</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDateHead</td>
+               <td>日付ヘッダーのパース前</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">timestamp</dt>
+                       <dd>日付ヘッダーのタイムスタンプ</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDateHead</td>
+               <td>日付ヘッダーのパース後</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">timestamp</dt>
+                       <dd>日付ヘッダーのタイムスタンプ</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDateFoot</td>
+               <td>日付フッターのパース前</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">timestamp</dt>
+                       <dd>日付フッターのタイムスタンプ</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDateFoot</td>
+               <td>日付フッターのパース後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">timestamp</dt>
+                       <dd>日付フッターのタイムスタンプ</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>LoginSuccess</td>
+               <td>ログイン成功後</td>
+               <td><dl>
+                       <dt class="obj ref">member</dt>
+                       <dd><code>MEMBER</code> オブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>LoginFailed</td>
+               <td>ログイン失敗後</td>
+               <td><dl>
+                       <dt class="ro">username</dt>
+                       <dd>ログイン時に使われたユーザー名</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>Logout</td>
+               <td>ログアウト後</td>
+               <td><dl>
+                       <dt class="ro">username</dt>
+                       <dd>ログアウト時のユーザー名</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreBlogContent</td>
+               <td>blogの内容がスキン変数を通して挿入される前</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',
+                         'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostBlogContent</td>
+               <td>blogの内容がスキン変数を通して挿入された後</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',
+                 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddComment</td>
+               <td>コメントがデータベースに追加される前</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータ(連想配列)</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddComment</td>
+               <td>コメントがデータベースに追加された後</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータ(連想配列)</dd>
+                       <dt class="ref">commentid</dt>
+                       <dd>コメントのID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostRegister</td>
+               <td>新規ユーザーの登録後</td>
+               <td><dl>
+                       <dt class="obj ref">member</dt>
+                       <dd>新しい<code>MEMBER</code> オブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddItem</td>
+               <td>アイテムがデータベースに追加された後</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>データベースに出来た新しい itemid</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostUpdateItem</td>
+               <td>アイテムがデータベースにアップデートされた直後</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>アイテムのID</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>PreAddItem</td>
+               <td>アイテムがデータベースに追加される直前</td>
+               <td><dl>
+                       <dt class="ref">title</dt>
+                       <dd>タイトル</dd>
+                       <dt class="ref">body</dt>
+                       <dd>本文</dd>
+                       <dt class="ref">more</dt>
+                       <dd>拡張テキスト</dd>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref">authorid</dt>
+                       <dd>執筆者ID</dd>
+                       <dt class="ref">timestamp</dt>
+                       <dd>UNIX タイムスタンプ</dd>
+                       <dt class="ref">closed</dt>
+                       <dd>1 (コメント不可) or 0 (コメント可)</dd>
+                       <dt class="ref">draft</dt>
+                       <dd>1 (ドラフト) or 0 (非ドラフト)</dd>
+                       <dt class="ref">catid</dt>
+                       <dd>カテゴリーID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreUpdateItem</td>
+               <td>データベースにあるアイテムが更新される直前</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>アイテム ID</dd>
+                       <dt class="ref">title</dt>
+                       <dd>タイトル</dd>
+                       <dt class="ref">body</dt>
+                       <dd>本文</dd>
+                       <dt class="ref">more</dt>
+                       <dd>拡張テキスト</dd>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG オブジェクト</code> object</dd>
+                       <dt class="ref">closed</dt>
+                       <dd>1 (コメント不可) or 0 (コメント可)</dd>
+                       <dt class="ref">catid</dt>
+                       <dd>カテゴリーID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PrepareItemForEdit</td>
+               <td>アイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>
+               <td><dl>
+                       <dt class="ref">item</dt>
+                       <dd>アイテムデータを持つ連想配列</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreUpdateComment</td>
+               <td>コメントが更新され、データベースに保存される直前</td>
+               <td><dl>
+                       <dt class="ref">body</dt>
+                       <dd>コメント本文</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PrepareCommentForEdit</td>
+               <td>コメントをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータ(連想配列)</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PrePluginOptionsEdit</td>
+               <td>
+                       (v2.0b) 'プラグインオプションの編集'フォームが生成される前
+                       <br />(v2.2) パラメータ追加
+                       <br />(v3.2) 各オプションにパラメータ追加
+               </td>
+               <td><dl>
+                       <dt class="ro">context</dt>
+                       <dd>(v2.2) <code>global</code>, <code>blog</code>, <code>member</code>, <code>item</code>, <code>category</code>のいずれか</dd>
+                       <dt class="ref">options</dt>
+                       <dd>次のインデックスをもつ連想配列: <code>name</code>, <code>value</code>, <code>oid</code>, <code>description</code>, <code>type</code>, <code>typeinfo</code>, <code>contextid</code>, <code>extra</code> 。追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要)<br />
+                       <code>extra</code>フィールドを用いて、オプションに追加HTML(たとえばフォームのコントロール)を追加できます。もしそうする場合、 <code>extra</code> に追加する前に <code>pid</code> と <code>getID()</code> を比較し、さらに <code>name</code> をチェックすべきです。</dd>
+                       <dt class="ro">plugid</dt>
+                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(コンテクストがglobalのときのみ存在)</dd>
+                       <dt class="ro">contextid</dt>
+                       <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PrePluginOptionsUpdate</td>
+               <td>
+                       (v3.2) プラグインオプションが更新される前。(このイベントを使ってオプションの新しい値を評価したり変更したりできます)
+               </td>
+               <td><dl>
+                       <dt class="ro">context</dt>
+                       <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>
+                       <dt class="ro">plugid</dt>
+                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)</dd>
+                       <dt class="ro">optionname</dt>
+                       <dd>オプション名</dd>
+                       <dt class="ro">contextid</dt>
+                       <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>
+                       <dt class="ref">value</dt>
+                       <dd>そのオプションの新しい値</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>PostPluginOptionsUpdate</td>
+               <td>
+                       (v2.0b) プラグインオプションの更新後<br />
+               (v2.2) コンテクストによって異なるパラメータ</td>
+               <td><dl>
+                       <dt class="ro">context</dt>
+                       <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>
+                       <dt class="ro">plugid</dt>
+                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(globalコンテクスト)</dd>
+                       <dt class="ro">blogid</dt>
+                       <dd>(v2.2) blog ID (blog コンテクスト)</dd>                       
+                       <dt class="ref obj">blog</dt>
+                       <dd>(v2.2) BLOG オブジェクト (blog コンテクスト)</dd>                       
+                       <dt class="ro">memberid</dt>
+                       <dd>(v2.2) member ID (member コンテクスト)</dd>                   
+                       <dt class="ref obj">member</dt>
+                       <dd>(v2.2) MEMBER オブジェクト (member コンテクスト)</dd>                   
+                       <dt class="ro">catid</dt>
+                       <dd>(v2.2) category ID (category コンテクスト)</dd>                       
+                       <dt class="ro">itemid</dt>
+                       <dd>(v2.2) item ID (item コンテクスト)</dd>
+                       <dt class="ref obj">member</dt>
+                       <dd>(v2.2) ITEM オブジェクト (item コンテクスト)</dd>
+               </dl></td>              
+               
+       </tr>   
+       <tr>
+               <td>PostAuthentication</td>
+               <td>(v2.0b) ログイン処理の完了後。ページリクエストごとに発生</td>
+               <td><dl>
+                       <dt class="ro">loggedIn</dt>
+                       <dd><code>$member->isLoggedIn()</code>の戻り値</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>PreAddItemForm</td>
+               <td>(v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前</td>
+               <td><dl>
+                       <dt class="ref">contents</dt>
+                       <dd>連想配列への参照。そのうちの'title',
+                         'body', 'more'にはフォームフィールドへの初期値を与えることができます。複数のプラグイン間でこれらの値の変更を避けるには、処理後に'hasBeenSet'の値を1にセットします(かつ処理前にこの値をチェックするようにします)</dd>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>AddItemFormExtras</td>
+               <td>(v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>                   
+       <tr>
+               <td>EditItemFormExtras</td>
+               <td>
+                       (v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。<br />
+                       <br />                  
+                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h3&gt;プラグイン名&lt;/h3&gt;
+&lt;p&gt;追加フォームの内容&lt;/p&gt;</code></pre>
+               このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+                       <dt class="ro">variables</dt>
+                       <dd>
+                               (read-only) 編集されるアイテムに関する全ての情報を持つ連想配列: 'itemid',
+                                 'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid',
+                                 'timestamp', 'karmapos', 'karmaneg', 'catid'
+                       </dd>                   
+                       <dt class="ro">itemid</dt>
+                       <dd>アイテム IDへのショートカット</dd>
+               </dl></td>              
+       </tr>                           
+       <tr>
+               <td>BlogSettingsFormExtras</td>
+               <td>(v2.0) blog設定ページにフォームを追加可能<br /><br />                        
+                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
+&lt;form method="post" action="..."&gt;&lt;p&gt;
+追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
+                       このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDeleteItem</td>
+               <td>(v2.0) アイテムがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>削除されるアイテムID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteItem</td>
+               <td>(v2.0) アイテムがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>削除されたアイテムID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDeleteCategory</td>
+               <td>(v2.0) カテゴリーがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">catid</dt>
+                       <dd>削除されるカテゴリー ID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteCategory</td>
+               <td>(v2.0) カテゴリーがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">catid</dt>
+                       <dd>削除されたカテゴリー ID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreDeleteBlog</td>
+               <td>(v2.0) blogがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>削除されるblogID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteBlog</td>
+               <td>(v2.0) blogがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>削除されたblogID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreDeleteMember</td>
+               <td>(v2.0) メンバーがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteMember</td>
+               <td>(v2.0) メンバーがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreDeleteTeamMember</td>
+               <td>(v2.0) メンバーがweblogチームから削除される直前</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>
+                       <dt class="ro">blogid</dt>
+                       <dd>blogID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteTeamMember</td>
+               <td>(v2.0) メンバーがweblogチームから削除された直後</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>
+                       <dt class="ro">blogid</dt>
+                       <dd>blogID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDeleteComment</td>
+               <td>(v2.0) コメントがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">commentid</dt>
+                       <dd>削除されるコメントID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteComment</td>
+               <td>(v2.0) コメントがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">commentid</dt>
+                       <dd>削除されたコメントID</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>ActionLogCleared</td>
+               <td>(v2.0) アクションログが消去された後</td>
+               <td>なし</td>         
+       </tr>
+       <tr>
+               <td>PreDeleteTemplate</td>
+               <td>(v2.0) テンプレートがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">templateid</dt>
+                       <dd>削除されるテンプレートID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteTemplate</td>
+               <td>(v2.0) テンプレートがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">templateid</dt>
+                       <dd>削除されたテンプレートID</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>PreDeleteSkin</td>
+               <td>(v2.0) スキンがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">skinid</dt>
+                       <dd>削除されるスキンID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteSkin</td>
+               <td>(v2.0) スキンがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">skinid</dt>
+                       <dd>削除されたスキンID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreDeletePlugin</td>
+               <td>(v2.0) プラグインがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">plugid</dt>
+                       <dd>削除されるプラグインID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeletePlugin</td>
+               <td>(v2.0) プラグインがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">plugid</dt>
+                       <dd>削除されたプラグインID</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>PreDeleteBan</td>
+               <td>(v2.0) 禁止IPがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>禁止IPが削除されるblogのID</dd>
+                       <dt class="ro">iprange</dt>
+                       <dd>禁止されたIPレンジ</dd>                     
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteBan</td>
+               <td>(v2.0) 禁止IPがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>禁止IPが削除されたblogのID</dd>
+                       <dt class="ro">iprange</dt>
+                       <dd>禁止されたIPレンジ</dd>                     
+               </dl></td>              
+       </tr>                   
+       <tr>
+               <td>PreAddCategory</td>
+               <td>(v2.0) 新しいカテゴリーがデータベースに生成される直前</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトの参照</dd>
+                       <dt class="ref">name</dt>
+                       <dd>新しいカテゴリー名</dd>                    
+                       <dt class="ref">description</dt>
+                       <dd>新しいカテゴリーの説明</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddCategory</td>
+               <td>(v2.0) 新しいカテゴリーがデータベースに生成された直後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+                       <dt class="ro">name</dt>
+                       <dd>新しいカテゴリー名</dd>                    
+                       <dt class="ro">description</dt>
+                       <dd>新しいカテゴリーの説明</dd>
+                       <dt class="ro">catid</dt>
+                       <dd>新しいカテゴリー ID</dd>                    
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddBlog</td>
+               <td>(v2.0) 新しいblogが生成される直前</td>
+               <td><dl>
+                       <dt class="ref">name</dt>
+                       <dd>新しい blog名</dd>
+                       <dt class="ref">shortname</dt>
+                       <dd>新しい blogの短縮名</dd>
+                       <dt class="ref">timeoffset</dt>
+                       <dd>新しい blogのタイムオフセット</dd>
+                       <dt class="ref">description</dt>
+                       <dd>新しい blogの説明</dd>
+                       <dt class="ref">defaultskin</dt>
+                       <dd>新しいblogのデフォルトスキンのID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddBlog</td>
+               <td>(v2.0) 新しいblogが生成された直後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd>新しい<code>BLOG</code> オブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddPlugin</td>
+               <td>(v2.0) プラグインが追加される直前</td>
+               <td><dl>
+                       <dt class="ref">file</dt>
+                       <dd>新しいプラグインのファイル名</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddPlugin</td>
+               <td>(v2.0) プラグインが追加された直後</td>
+               <td><dl>
+                       <dt class="ref obj">plugin</dt>
+                       <dd>新しく追加されたプラグインのオブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddTeamMember</td>
+               <td>(v2.0) メンバーがblogチームに追加される直前</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクト</dd>
+                       <dt class="ref">admin</dt>
+                       <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddTeamMember</td>
+               <td>(v2.0) メンバーがblogチームに追加された直後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクト</dd>
+                       <dt class="ro">admin</dt>
+                       <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddTemplate</td>
+               <td>(v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる)</td>
+               <td><dl>
+                       <dt class="ref">name</dt>
+                       <dd>新しいテンプレート名</dd>
+                       <dt class="ref">description</dt>
+                       <dd>新しいテンプレートの説明</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddTemplate</td>
+               <td>(v2.0) 新しいテンプレートが生成された直後</td>
+               <td><dl>
+                       <dt class="ro">name</dt>
+                       <dd>新しいテンプレート名</dd>
+                       <dt class="ro">description</dt>
+                       <dd>新しいテンプレートの説明</dd>
+                       <dt class="ro">templateid</dt>
+                       <dd>新しいテンプレートID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreAddSkin</td>
+               <td>(v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる)</td>
+               <td><dl>
+                       <dt class="ref">name</dt>
+                       <dd>新しいスキン名</dd>
+                       <dt class="ref">description</dt>
+                       <dd>新しいスキン名の説明</dd>
+                       <dt class="ref">type</dt>
+                       <dd>スキンのコンテントタイプ</dd>
+                       <dt class="ref">includeMode</dt>
+                       <dd>新しいスキンのインクルードモード</dd>
+                       <dt class="ref">includePrefix</dt>
+                       <dd>新しいスキンのインクルードプレフィックス</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddSkin</td>
+               <td>(v2.0) 新しいスキンが生成された直後</td>
+               <td><dl>
+                       <dt class="ro">name</dt>
+                       <dd>新しいスキン名</dd>
+                       <dt class="ro">description</dt>
+                       <dd>新しいスキンの説明</dd>
+                       <dt class="ro">type</dt>
+                       <dd>スキンのコンテントタイプ</dd>
+                       <dt class="ro">includeMode</dt>
+                       <dd>新しいスキンのインクルードモード</dd>
+                       <dt class="ro">includePrefix</dt>
+                       <dd>新しいスキンのインクルードプレフィックス</dd>
+                       <dt class="ro">skinid</dt>
+                       <dd>新しいスキンID</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>PreAddBan</td>
+               <td>(v2.0) 新しい禁止IPが追加される直前</td>
+               <td><dl>
+                       <dt class="ref">blogid</dt>
+                       <dd>blogID</dd>
+                       <dt class="ref">iprange</dt>
+                       <dd>禁止されたIPレンジ</dd>
+                       <dt class="ref">reason</dt>
+                       <dd>禁止された理由を記述したテキストメッセージ</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddBan</td>
+               <td>(v2.0) 新しい禁止IPが追加された直後</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>blogID</dd>
+                       <dt class="ro">iprange</dt>
+                       <dd>禁止されたIPレンジ</dd>
+                       <dt class="ro">reason</dt>
+                       <dd>禁止された理由を記述したテキストメッセージ</dd>
+               </dl></td>              
+       </tr>           
+
+       <tr>
+               <td>PreMoveItem</td>
+               <td>(v2.0) アイテムが他のblog/カテゴリーに移される直前</td>
+               <td><dl>
+                       <dt class="ref">itemid</dt>
+                       <dd>アイテムID</dd>
+                       <dt class="ref">destblogid</dt>
+                       <dd>移動先のblogID</dd>
+                       <dt class="ref">destcatid</dt>
+                       <dd>移動先のカテゴリーID</dd>                  
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostMoveItem</td>
+               <td>(v2.0) アイテムが他のblog/カテゴリーに移された直後</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>アイテムID</dd>
+                       <dt class="ro">destblogid</dt>
+                       <dd>新しいblogID</dd>
+                       <dt class="ro">destcatid</dt>
+                       <dd>新しいカテゴリーID</dd>     
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreMoveCategory</td>
+               <td>(v2.0) カテゴリーが他のblogに移される直前</td>
+               <td><dl>
+                       <dt class="ref">catid</dt>
+                       <dd>カテゴリーID</dd>
+                       <dt class="ref obj">sourceblog</dt>
+                       <dd>移動元の<code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">destblog</dt>
+                       <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostMoveCategory</td>
+               <td>(v2.0) カテゴリーが他のblogに移された直後</td>
+               <td><dl>
+                       <dt class="ro">catid</dt>
+                       <dd>カテゴリーID</dd>
+                       <dt class="ref obj">sourceblog</dt>
+                       <dd>移動元の<code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">destblog</dt>
+                       <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>MemberSettingsFormExtras</td>
+               <td>(v2.0) メンバー設定ページにフォームを追加可能<br /><br />                        
+                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。
+            <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
+&lt;form method="post" action="..."&gt;&lt;p&gt;
+追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
+このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>GeneralSettingsFormExtras</td>
+               <td>(v2.0) 一般設定ページにフォームを追加可能<br />
+                 <br />
+あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。
+<pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
+&lt;form method="post" action="..."&gt;&lt;p&gt;
+追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
+このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
+               <td>なし</td>         
+       </tr>
+       <tr>
+               <td>AdminPrePageHead</td>
+               <td>(v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。</td>
+               <td><dl>
+                       <dt class="ref">extrahead</dt>
+                       <dd>HTMLページのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>
+                       <dt class="ro">action</dt>
+                       <dd>現在実行されているアクション、またはページタイプ</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>AdminPrePageFoot</td>
+               <td>(v2.5) 管理画面で、ページフッターを出力する直前。</td>
+         <td><dl>
+                       <dt class="ro">action</dt>
+                       <dd></dd>
+               </dl>
+           現在実行されているアクション、またはページタイプ</td>
+       </tr>
+       <tr>
+               <td>PreSendContentType</td>
+               <td>(v2.5) HTTPヘッダーにコンテントタイプがセットされる直前</td>
+               <td><dl>
+                       <dt class="ref">contentType</dt>
+                       <dd>コンテントタイプ(<code>application/xhtml+xml</code>など)</dd>
+                       <dt class="ref">charset</dt>
+                       <dd>キャラクターセット</dd>
+                       <dt class="ro">pageType</dt>
+                       <dd>表示するページの種類を示す文字列:<code>skin</code> (スキンタイプ), <code>media</code> (メディアライブラリ), <code>admin-<em>action</em></code> (管理エリア), <code>bookmarklet-<em>action</em></code> (ブックマークレット)</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>QuickMenu</td>
+               <td>(v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例が<a href="#admin">プラグイン管理エリアを作る</a>のセクションにあります。</td>
+               <td><dl>
+                       <dt class="ref">options</dt>
+                       <dd>配列</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>BookmarkletExtraHead</td>
+               <td>(v2.5) ブックマークレット
+         XHTMLコードのヘッド領域内。</td>
+               <td><dl>
+                       <dt class="ref">extrahead</dt>
+                       <dd>XHTMLコードのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>FormExtra</td>
+               <td>(v3.2) このイベントは、プラグインがコメント、メンバー間メール、認証フォームのいずれかのフォーム内に追加フィールドを挿入するときに使います。フォーム処理の際に発生する <code>ValidateForm</code> イベントに対応します。</td>
+               <td><dl>
+                       <dt class="ro">type</dt>
+                       <dd>イベントを発生させるフォームタイプ
+                               <ul>
+                                       <li><code>activation</code></li>
+                                       <li><code>additemform</code> (注:これは管理画面のアイテム追加フォームではない)</li>
+                                       <li><code>commentform-loggedin</code></li>
+                                       <li><code>commentform-notloggedin</code></li>
+                                       <li><code>membermailform-loggedin</code></li>
+                                       <li><code>membermailform-notloggedin</code></li>
+                               </ul>
+                       </dd>
+                       <dt class="ro obj">member</dt>
+                       <dd><code>type</code> が <code>activation</code>のとき、このフィールドは認証メンバーの詳細情報を含みます</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>ValidateForm</td>
+               <td>(v3.2) コメント、メンバー間メール、アカウント認証のいずれかが処理されるときに呼ばれます。プラグインはこれで各データの評価を実行でき、もし不具合があれば処理を中断できます。<code>FormExtra</code> と共に使うとフォームにフィールドを追加できます。</td>
+               <td><dl>
+                       <dt class="ro">type</dt>
+                       <dd>処理されるフォームタイプ
+                               <ul>
+                                       <li><code>membermail</code></li>
+                                       <li><code>comment</code></li>
+                                       <li><code>activation</code></li>
+                               </ul>
+                       </dd>
+                       <dt class="ref">error</dt>
+                       <dd>フォーム処理をストップするときに、<code>error</code> フィールドに空でないエラーメッセージを記入します。このエラーメッセージはユーザー側に表示されます。</dd>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントフォームのとき、コメントデータに関する連想配列を含みます。</dd>
+                       <dt class="ro obj">member</dt>
+                       <dd>認証フォームのとき、認証中のメンバー情報を含みます。</dd>
+               </dl></td>
+       </tr>
+<!--
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr> -->
+</table>
+
+
+
+<h1>オプションを保存する<a name="options" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。</p>
+
+<p>オプションは異なったコンテクストで利用可能です。</p>
+
+<ol>
+       <li><strong>グローバルオプション</strong>:管理エリアのプラグインセクションで編集可能</li>
+       <li><strong>blogオプション</strong>:blog設定ページで編集可能</li>
+       <li><strong>カテゴリーオプション</strong>:blog設定ページ(のカテゴリー編集ページ)で編集可能</li>    
+       <li><strong>メンバーオプション</strong>:メンバー編集ページで編集可能</li>
+       <li><strong>アイテムオプション</strong>:アイテムの追加、およびアイテムの編集ページで編集可能</li>
+</ol>
+
+<h2>オプションの種類</h2>
+
+<p>オプションにはいくつかのタイプが提供されています。</p>
+
+<dl>
+       <dt>text</dt>
+       <dd>シンプルなテキスト</dd>
+       <dt>yesno</dt>
+       <dd>'yes'か'no'どちらか(編集画面ではラジオボタンとして表示されます)</dd>
+       <dt>password</dt>
+       <dd>テキストフィールド (編集画面では伏字で表示されます)</dd>
+       <dt>textarea (v2.2)</dt>
+       <dd>複数行のテキストフィールド</dd>
+       <dt>select (v2.2)</dt>
+       <dd>ドロップダウンメニュー。次のような形式の追加情報が必要です: Option 1|value1|Option 2|value2|Option 3|value3 </dd>
+</dl>
+
+<h2>オプション・メタ</h2>
+
+<p>Nucleus v3.2よりオプション・メタデータを用いて、オプションタイプを正しい値を受け取れるように制限できるようになりました。このメタデータは <code>$typeExtras</code>フィールドにセミコロン区切りのリストで保存されます。注:selectオプションでは、selectリストは<code>$typeExtras</code>のなかで一番最初でなければいけません。</p>
+
+<table><tr>
+       <th>キー</th>
+       <th>説明</th>
+</tr><tr>
+       <td><code>datatype</code></td>
+       <td>Nucleus本体に、どのデータ型を使いたいかという追加情報を与えます。現在は '<code>numerical</code>' のみ利用できます。 '<code>numerical</code>' を指定することでNucleusは数値情報のみを受け付けます(クライアントサイド・サーバサイド両方でチェック) ('<code>select</code>' と '<code>text</code>'のオプションタイプで利用できます)</td>
+</tr><tr>
+       <td><code>access</code></td>
+       <td>'<code>readonly</code>'にセットすることで、オプションを編集不可能にします('<code>text</code>' と '<code>textarea</code>'のオプションタイプで利用できます)<br />
+       '<code>hidden</code>'を使うと、利用者側にそのオプションの存在を完全に隠蔽します('<code>text</code>'のオプションタイプで利用できます)</td>
+</tr></table>
+
+<p>設定例</p>
+<pre class="example"><code>// 数値のみを受け付けるテキストオプションを作成
+$this->createBlogOption('FooBar', 'foobar', 'text', '0', 'datatype=numerical');
+// 数値のみを受け付けるセレクトオプションを作成
+$this->createItemOption('FooBar', 'foobar', 'select', '0', '0|0|1|1|2|2;datatype=numerical');
+// 編集不可能なテキストエリアオプションを作成
+$this->createOption('FooBar', 'foobar', 'textarea', 'This textarea is readonly', 'access=readonly');
+</code></pre>
+
+<h2>制限</h2>
+
+<ol>
+       <li>オプション名は最大20文字です。</li>
+       <li>オプションの説明文は最大255文字です。</li>
+       <li>オプションの値は制限ありません(v2.2より前のバージョンでは128文字の制限がありました)</li>
+       <li>'=', '|', ';' のキャラクターはセレクトオプション用のセレクトリストやオプション・メタデータ中で使用することはできません。</li>
+</ol>
+
+<h2>メソッド</h2>
+
+<h3>createOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>グローバル</strong>なコンテクストで新しいオプションを生成します。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>
+       <td>$name</td>
+       <td>オプション名</td>
+</tr><tr>
+       <td>$desc</td>
+       <td>オプション編集画面で表示される説明文</td>
+</tr><tr>
+       <td>$type</td>
+       <td>オプションタイプ(前出)</td>
+</tr><tr>
+       <td>$defValue</td>
+       <td>初期値</td>
+</tr><tr>
+       <td>$typeExtras</td>
+       <td>オプションタイプの追加情報(前出)</td>
+</tr></table>
+
+<h3>[v2.2] createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>blog</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
+
+<h3>[v2.2] createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>カテゴリー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
+
+<h3>[v2.2] createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>メンバー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
+
+<h3>[v3.2] createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>アイテム</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
+
+<h3>setOption($name, $value)</h3>
+
+<p>すでにデータベースに存在するオプションの値を変更します。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>              
+       <td>$name</td>
+       <td>オプション名</td>
+</tr><tr>
+       <td>$value</td>
+       <td>新しい値</td>
+</tr></table>
+
+<h3>[v2.2] setBlogOption($blogid, $name, $value)</h3>
+
+<p>blogオプションの値を変更します。<code>blogid</code>属性はどのblogでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
+
+<h3>[v2.2] setCategoryOption($catid, $name, $value)</h3>
+
+<p>カテゴリーオプションの値を変更します。<code>catid</code>属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
+
+<h3>[v2.2] setMemberOption($memberid, $name, $value)</h3>
+
+<p>メンバーオプションの値を変更します。<code>memberid</code>属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
+
+<h3>[v3.2] setItemOption($itemid, $name, $value)</h3>
+
+<p>アイテムオプションの値を変更します。<code>itemid</code>属性はどのアイテムでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
+
+<h3>getOption($name)</h3>
+
+<p>データベース内のオプションの値を返します。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>              
+       <td>$name</td>
+       <td>オプション名</td>
+</tr></table>
+
+<h3>[v2.2] getBlogOption($blogid, $name)</h3>
+
+<p>blogオプションの値を返します。<code>blogid</code>属性は値がリスエストされたblogを示します(その他のオプション:<code>getOption</code>を参照)。</p>
+
+<h3>[v2.2] getCategoryOption($catid, $name)</h3>
+
+<p>カテゴリーオプションの値を返します。<code>catid</code>属性は値がリスエストされたカテゴリーを示します(その他のオプション:<code>getOption</code>を参照)。<br />
+</p>
+
+<h3>[v2.2] getMemberOption($memberid, $name)</h3>
+
+<p>メンバーオプションの値を返します。<code>memberid</code>属性は値がリスエストされたメンバーを示します(その他のオプション:<code>getOption</code>を参照)。</p>
+
+<h3>[v3.2] getItemOption($itemid, $name)</h3>
+
+<p>アイテムオプションの値を返します。<code>itemid</code>属性は値がリスエストされたアイテムを示します(その他のオプション:<code>getOption</code>を参照)。</p>
+
+<h3>deleteOption($name)</h3>
+
+<p>データベースからオプションを削除します。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>              
+       <td>$name</td>
+       <td>オプション名</td>
+</tr></table>
+
+<h3>[v2.2] deleteBlogOption($name)</h3>
+
+<p>blogオプションを削除します(<code>deleteOption</code>を参照)。</p>
+
+<h3>[v2.2] deleteCategoryOption($name)</h3>
+
+<p>カテゴリーオプションを削除します(<code>deleteOption</code>を参照)。</p>
+
+<h3>[v2.2] deleteMemberOption($name)</h3>
+
+<p>メンバーオプションを削除します(<code>deleteOption</code>を参照)。</p>
+
+<h3>[v3.2] deleteItemOption($name)</h3>
+
+<p>アイテムオプションを削除します(<code>deleteOption</code>を参照)。</p>
+
+<h3>[v2.2] getAllBlogOptions($name)</h3>
+
+<p>与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。</p>
+
+<h3>[v2.2] getAllCategoryOptions($name)</h3>
+
+<p>与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。</p>
+
+<h3>[v2.2] getAllMemberOptions($name)</h3>
+
+<p>与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。</p>
+
+<h3>[v3.2] getAllItemOptions($name)</h3>
+
+<p>与えられたアイテムオプションの全ての値を返します。結果は存在するitemidごとの連想配列です。</p>
+
+<h3>[v3.2] getBlogOptionTop($name, $amount = 10, $sort = 'desc')</h3>
+
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのblogid ('id') の値 ('value') を持つ配列になっています。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>
+       <td>$name</td>
+       <td>オプション名</td>
+</tr><tr>
+       <td>$amount</td>
+       <td>必要なオプション数</td>
+</tr><tr>
+       <td>$sort</td>
+       <td>昇順 ('asc') か降順 ('desc') で並べ替え</td>
+</tr></table>
+
+<h3>[v3.2] getMemberOptionTop($name, $amount = 10, $sort = 'desc')</h3>
+
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのメンバーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
+
+<h3>[v3.2] getCategoryOptionTop($name, $amount = 10, $sort = 'desc')</h3>
+
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのカテゴリーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
+
+
+<h3>[v3.2] getItemOptionTop($name, $amount = 10, $sort = 'desc')</h3>
+
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのアイテムID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
+
+
+<div class="note">
+<b>注:</b> プラグインクラス内のコンストラクタから、これらのファンクションを呼ぶことはできません。プラグインがロードされた後にこれらを実行したいときは、かわりに<code>init()</code>メソッド内に置きます。</div>
+
+<h1>データベース・テーブル<a name="tables" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<h2>Nucleusテーブルへのアクセス</h2>
+
+<p>v2.0まで、Nucleusテーブルへのアクセスは単に<code>nucleus_</code>と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。</p>
+
+<ol>
+       <li><code>nucleus_item</code> などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために <code>sql_table('item') </code>というグローバルファンクションを利用します。</li>
+       <li><code>supportsFeature('SqlTablePrefix')</code> が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。</li>
+</ol>
+
+<p class="note">v2.0までのNucleusではグローバルファンクション <code>sql_table</code> は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。</p>
+
+<pre class="example"><code>&lt;?
+
+// プラグインがNucleusバージョン2.0以下と互換性を持つために必要
+if (!function_exists('sql_table'))
+{
+       function sql_table($name) {
+               return 'nucleus_' . $name;
+       }
+}
+
+class NP_HelloWorld extends NucleusPlugin {
+...
+}
+
+?&gt;</code></pre>
+
+<h2>独自テーブル</h2>
+
+<p>もしプラグイン独自のテーブルが必要なら、<code>install</code>メソッドの中で独自テーブルを生成し、<code>unInstall</code>メソッドの中でそれを削除するようにします。</p>
+
+<p>いくつかの注意点</p>
+<ul>
+       <li><code>nucleus_plug_<em>plugname</em></code> のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名を
+       <code>sql_table('plug_plugname')</code> で生成してください。
+       </li>
+       <li>自分自身でデータベース接続をする必要はありません。PHPコマンド <code>mysql_query()</code> を使ってSQL命令を実行できます。</li>
+       <li>自分でデータベース接続をする場合、後でNucleusデータベースへの接続を復元するようにしてください。自前処理の後で <code>sql_connect()</code>  を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。<code>$this- &gt;db</code>のリンクIDを保持でき、各クエリにそれを渡すことができます。</li>
+       <li>バックアップ機能を使う時は、独自テーブルもバックアップに含めるよう、<code>getTableList()</code> を再定義してください。</li>
+</ul>
+
+<h1>プラグイン管理エリア<a name="admin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。</p>
+
+<h2>基本</h2>
+
+<p>管理エリアを提供するには、次のステップが必要です。</p>
+
+<ol>
+  <li>プラグインディレクトリに<strong>プラグイン名</strong>のサブディレクトリを作ります。たとえばプラグイン名が<code>NP_PluginName</code>なら、'pluginname'です。ディレクトリ名はすべて小文字で!</li>
+  <li>
+       そのディレクトリで、次のような<strong>index.php</strong>を用意します。
+       <pre><code>&lt;?php
+
+       // if your 'plugin' directory is not in the default location,
+       // edit this variable to point to your site directory
+       // (where config.php is)
+       $strRel = '../../../';
+
+       include($strRel . 'config.php');
+       if (!$member->isLoggedIn())
+               doError('You\'re not logged in.');
+
+       include($DIR_LIBS . 'PLUGINADMIN.php');
+
+       // create the admin area page
+       $oPluginAdmin = new PluginAdmin('<strong>PluginName</strong>');
+       $oPluginAdmin->start();
+
+       echo '&lt;h2&gt;プラグイン名&lt;/h2&gt;';
+
+       echo '&lt;p&gt;<strong>ページ内容</strong>&lt;p&gt;';
+
+       $oPluginAdmin->end();
+
+?&gt;</code></pre>
+  </li>
+  <li>
+       プラグイン側に次のコードを挿入し、クイックメニューイベントに登録します。
+    <pre><code>function event_QuickMenu(&amp;$data) {
+               array_push(
+                       $data['options'],
+                       array(
+                               'title' => '<strong>プラグイン名</strong>',
+                               'url' => $this->getAdminURL(),
+                               'tooltip' => '<strong>ツールチップテキスト</strong>'
+                       )
+               );
+       }</code></pre>
+  </li>
+  <li>
+       プラグイン側に次の関数を記述します。
+    <pre><code>function hasAdminArea()
+{
+       return 1;
+}</code></pre>
+  </li>
+</ol>
+
+<h2>考慮すること</h2>
+
+<ul>
+ <li>登録できるからといって安易にクイックメニューへ登録しないこと。クイックメニューにプラグインが100個並んだりしたらかなりウンザリするでしょう。ですので、クイックメニューに登録する場合でも、クイックメニュー登録を有効・無効化するプラグインオプションを(グローバルまたはメンバーオプションで)用意することを考えてください。</li>
+ <li><code>プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel</code> 変数は手動で書き換える必要があります。</li>
+ <li>管理エリアのアウトプットが<strong>正しいXHTML</strong>になっているか確認してください。正しくないと、MozillaなどのGeckoベースのブラウザでページ表示が崩れます。</li>
+</ul>
+
+<h2>PluginAdmin クラス</h2>
+
+<p><code>PluginAdmin</code> クラスは助けになります。これを一度生成すれば、<code>$oPluginAdmin->plugin</code> でプラグインのインスタンスにアクセスできます。</p>
+
+<h1>プラグイン用ヘルプページ <a name="help" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>Nucleus v3.2から、プラグインの機能の概要、利用できるスキン・テンプレート変数、さらに詳細な情報のありかなどを示すヘルプページを提供可能になりました。</p>
+
+<p>ヘルプページは管理画面のプラグイン一覧からアクセス可能になります。</p>
+
+<h2>基本</h2>
+<p>ヘルプページを提供するために、次のステップが必要です。</p>
+<ol>
+<li>プラグインディレクトリに、プラグイン名をつけたサブディレクトリを作成します。ディレクトリ名は小文字であることに注意します。<a href="#admin">管理エリア</a>を作るときと同様です。</li>
+<li>そのディレクトリの中に help.html を作り、プラグインについての文章を記述します。次の雛型からはじめると良いでしょう。
+<pre><code>&lt;h3&gt;プラグインの概要&lt;/h3&gt;
+
+&lt;p&gt;このプラグインはヘルプページがいかに機能するかを示すためだけのものです&lt;/p&gt;
+
+&lt;h3&gt;インストール&lt;/h3&gt;
+
+&lt;p&gt;これを読めてるならインストールは正しく出来てます :-)&lt;/p&gt;
+
+&lt;h3&gt;スキン変数&lt;/h3&gt;
+
+&lt;p&gt;このプラグインはただのテストケースなのでスキン・テンプレート変数はありませんが、書くとすれば。
+
+&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1%&gt;&lt;/b&gt;: なにかをする&lt;/li&gt;
+&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1(foobar)%&gt;&lt;/b&gt;: 別のなにかをする&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
+
+&lt;h3&gt;サポートとバグ報告&lt;/h3&gt;
+
+&lt;p&gt;さらなるサポートやバグ報告のために、次のフォーラムのスレッドを利用してください。
+&lt;a href="http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;"&gt;
+http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;&lt;/a&gt;&lt;/p&gt;
+
+&lt;h3&gt;バージョン履歴&lt;/h3&gt;
+
+&lt;ul&gt;&lt;li&gt;Version 0.1: 最初のテストケースバージョン&lt;/li&gt;
+&lt;li&gt;Version 0.0: その前のバージョン ;-)&lt;/li&gt;&lt;/ul&gt;</code></pre>
+</li>
+<li>supportsFeature('HelpPage') で0より大きい数字を返すように設定します。
+<pre><code>function supportsFeature($what) {
+       switch($what) {
+       case 'HelpPage':
+               return 1;
+         default:
+               return 0;
+       }
+  }</code></pre>
+</li>
+</ol>
+
+<h1>プラグイン依存チェック <a name="dependency" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>v3.2から、他のプラグインとの依存関係を宣言する新しいプラグインインターフェイスが追加されました。他のプラグインの機能を必要とするプラグインに利用できます。特に依存関係が成立しなくて正しく機能しない状態を検知するときに便利です。</p>
+
+<h2>この機能を利用するプラグインの書き方</h2>
+
+<p>現実世界での例からはじめましょう。</p>
+
+<p>NP_PageLinkList は NP_BlogWithOffset の機能を利用するため、利用者には NP_BlogWithOffset のインストール後に NP_PageLinkList をインストールさせたいとします。NucleusはこのAPIによって、インストール前に依存関係を検知させる方法をプラグインに提供します。</p>
+
+<p>このケースでは、NP_PageLinkList 側に NP_BlogWithOffset が必要だということを認識させるコードを埋め込みます。プラグインがインストールされる際に、Nucleusコアは <code>getPluginDep()</code> というファンクションを呼び出します。このファンクションは必要なプラグインのリストを返し、コアはインストール済みのプラグインをチェックして、もし依存関係に欠如があればインストールを拒否します。</p>
+
+<p>必要なことは NP_PageLinkList にこのファンクションを追加する、ただそれだけです。</p>
+
+<pre><code>function getPluginDep() {
+        return array('NP_BlogWithOffset');
+}</code></pre>
+
+<p>このプラグイン依存チェックは、他のプラグインが依存しているプラグインがアンインストールされることも防ぎます。</p>
+
+</body>
+</html>
+
+
index bfcfab0..de22428 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: sqltables.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - SQL テーブル構造</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-       <style type="text/css">\r
-               /* auto increment table columns*/\r
-               .autoinc {\r
-               }\r
-\r
-               /* primary-keys */\r
-               .primary {\r
-                       text-decoration: underline;\r
-                       font-weight: bold;\r
-               }\r
-\r
-               /* NOT NULL */\r
-               .notnull {\r
-               }\r
-\r
-               /* unique key */\r
-               .unique {\r
-               }\r
-\r
-               /* foreign keys */\r
-               .foreign {\r
-                       font-style: italic;\r
-               }\r
-\r
-               /* auto increment table columns*/\r
-               .autoinc {\r
-               }\r
-\r
-               /* fulltext index */\r
-               .fulltext {\r
-               }\r
-\r
-               /* columns/tables to remove in later versions */\r
-               .toremove {\r
-                       color: red;\r
-               }\r
-\r
-\r
-\r
-\r
-       </style>\r
-</head>\r
-<body>\r
-\r
-\r
-<a name="top" id="top"></a>\r
-<div class="heading">\r
-  SQLテーブル・リファレンス <i>2005年3月5日</i>\r
-</div>\r
-<strong>訳者注:</strong>\r
-<ul>\r
-  <li>このドキュメントの原文は以下のURLにあります。<br>\r
-    <a href="http://nucleuscms.org/documentation/devdocs/sqltables.html">http://nucleuscms.org/documentation/devdocs/sqltables.html</a></li>\r
-  <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>\r
-</ul>\r
-<h1>はじめに</h1>\r
-<p><a href="index.html">開発者向けドキュメントの目次へ戻る</a></p>\r
-<p>このドキュメントはNucleusのデータベース・テーブルのフィールドを解説しています。</p>\r
-<p class="note">構造は<strong>Nucleus v3.2</strong>のものに従っています</p>\r
-<h1><a name="toc" id="toc"></a>目次</h1>\r
-<ul>\r
-  <li><a href="#legend">文書中の色使いについて</a></li>\r
-  <li>Blog\r
-    <ul>\r
-      <li><a href="#nucleus_blog">nucleus_blog</a></li>\r
-      <li><a href="#nucleus_category">nucleus_category</a></li>\r
-      <li><a href="#nucleus_item">nucleus_item</a></li>\r
-      <li><a href="#nucleus_comment">nucleus_comment</a></li>\r
-      <li><a href="#nucleus_member">nucleus_member</a></li>\r
-      <li><a href="#nucleus_team">nucleus_team</a></li>\r
-    </ul>\r
-  </li>\r
-  <li>プラグイン\r
-    <ul>\r
-      <li><a href="#nucleus_plugin">nucleus_plugin</a></li>\r
-      <li><a href="#nucleus_plugin_event">nucleus_plugin_event</a></li>\r
-      <li><a href="#nucleus_plugin_option">nucleus_plugin_option</a></li>\r
-      <li><a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a></li>\r
-    </ul>\r
-  </li>\r
-  <li>スキンとテンプレート\r
-    <ul>\r
-      <li><a href="#nucleus_skin">nucleus_skin</a></li>\r
-      <li><a href="#nucleus_skin_desc">nucleus_skin_desc</a></li>\r
-      <li><a href="#nucleus_template">nucleus_template</a></li>\r
-      <li><a href="#nucleus_template_desc">nucleus_template_desc</a></li>\r
-    </ul>\r
-  </li>\r
-  <li>管理\r
-    <ul>\r
-      <li><a href="#nucleus_actionlog">nucleus_actionlog</a></li>\r
-      <li><a href="#nucleus_config">nucleus_config</a>\r
-        <ul>\r
-          <li><a href="#nucleus_config_options">可能なオプション</a></li>\r
-        </ul>\r
-      </li>\r
-      <li><a href="#nucleus_tickets">nucleus_tickets</a></li>\r
-      <li><a href="#nucleus_activation">nucleus_activation</a></li>\r
-    </ul>\r
-  </li>\r
-  <li>その他\r
-    <ul>\r
-      <li><a href="#nucleus_karma">nucleus_karma</a></li>\r
-      <li><a href="#nucleus_ban">nucleus_ban</a></li>\r
-    </ul>\r
-  </li>\r
-</ul>\r
-<a id="legend" name="legend"></a>\r
-<h1>色使い<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p>この文書中では、カラムの型を示すために、文字の修飾を使っています。以下に例を示します:</p>\r
-<table width="893">\r
-  <tbody>\r
-    <tr>\r
-      <td class="primary" width="88">プライマリ</td>\r
-      <td width="775">プライマリキー</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="foreign" width="88">外部</td>\r
-      <td width="775">外部キー(クリックすると参照先に飛ぶ)。MySQLは外部キーとの一貫性保持に責任を持たないことに注意</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="toremove" width="88">削除予定</td>\r
-      <td width="775">同じ機能を提供するプラグインを優先するため、テーブルやカラムは将来のバージョンのNucleusで削除させる可能性が高い</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="fulltext" width="88">フルテキスト</td>\r
-      <td width="775">カラムにフルテキストのインデックスが付く(検索で使用する)</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_blog" name="nucleus_blog"></a>\r
-<h1>nucleus_blogテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary">bnumber</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>BlogのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">bname</td>\r
-      <td>varchar(60)</td>\r
-      <td>''</td>\r
-      <td>Blog名</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull unique">bshortname</td>\r
-      <td>varchar(15)</td>\r
-      <td>''</td>\r
-      <td>Blogの短縮名 (スキン変数 <code>&lt;%blog%&gt;</code>などで使うものと同じ)</td>\r
-    </tr>\r
-    <tr>\r
-      <td>bdesc</td>\r
-      <td>varchar(200)</td>\r
-      <td>NULL</td>\r
-      <td>Blogの説明</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">bcomments</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'1'</td>\r
-      <td>コメントを許可する(1=許可, 0=不許可)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">bmaxcomments</td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>indexスキンタイプで表示するコメントの最大数。既定値(0)は制限がないことを説明する。インライン・コメントを使わないのなら,ここはいじらないこと</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">btimeoffset</td>\r
-      <td>decimal(3,1)</td>\r
-      <td>'0.0'</td>\r
-      <td>サーバー時刻との時差。アイテムはサーバー時刻にこの値を足した時間でデータベースに保存される</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="toremove">bnotify</td>\r
-      <td>varchar(60)</td>\r
-      <td>NULL</td>\r
-      <td>通知するメール・アドレス。いくつかのイベントが起こると(どのイベントかは<code>bnotifytypeを参照のこと)</code>,このアドレス宛てにメールで通知が行く</td>\r
-    </tr>\r
-    <tr>\r
-      <td>burl</td>\r
-      <td>varchar(100)</td>\r
-      <td>NULL</td>\r
-      <td>BlogのURL</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="toremove">bupdate</td>\r
-      <td>varchar(60)</td>\r
-      <td>NULL</td>\r
-      <td>アイテムが投稿されるたびに変更が必要な更新ファイル。サーバー上の絶対パスで指定する</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_skin_desc">bdefskin</a></td>\r
-      <td>int(11)</td>\r
-      <td>'1'</td>\r
-      <td>このBlogを表示するときに使う標準のスキン</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">bpublic</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'1'</td>\r
-      <td>登録ユーザー以外にもコメントを許可する(1=許可/0=不許可)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull toremove">bsendping</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'0'</td>\r
-      <td>更新があったときにweblogs.comにpingを送る (1=送る/0=送らない)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull toremove">bconvertbreaks</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'1'</td>\r
-      <td>改行を<code>&lt;br /&gt;</code>に変換する (1=変換する/0=変換しない)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="foreign"><a href="#nucleus_category">bdefcat</a></td>\r
-      <td>int(11)</td>\r
-      <td>NULL</td>\r
-      <td>デフォルトのカテゴリー。他のカテゴリーが選択されていないとき、このカテゴリーになる</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">bnotifytype</td>\r
-      <td>int(11)</td>\r
-      <td>'15'</td>\r
-      <td>どのイベントが起こったときに通知メールを送るか(通知するメール・アドレスはbnotifyを参照)。三つの値の組み合わせからなり、掛け合わせることでnoifytypeの値が決まる。\r
-        <ul>\r
-          <li>3: 新しいコメント</li>\r
-          <li>5: 新しいカルマ投票</li>\r
-          <li>7: 新しいアイテム</li>\r
-        </ul>\r
-        既定値 = 新しいコメントと新しいカルマ投票(3×5=15)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">ballowpast</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'0'</td>\r
-      <td>過去の日時での投稿を許可する (1=許可/0=不許可)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">bincludesearch</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'0'</td>\r
-      <td>他のblogの検索の場合にも,検索対象にする(1=対象にする/0=対象にしない)</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_category" name="nucleus_category"></a>\r
-<h1>nucleus_categoryテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary">catid</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>カテゴリーID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_blog">cblog</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>カテゴリーが所属するBlogのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td>cname</td>\r
-      <td>varchar(40)</td>\r
-      <td>NULL</td>\r
-      <td>カテゴリーの名前</td>\r
-    </tr>\r
-    <tr>\r
-      <td>cdesc</td>\r
-      <td>varchar(200)</td>\r
-      <td>NULL</td>\r
-      <td>カテゴリーの説明</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_item" name="nucleus_item"></a>\r
-<h1>nucleus_itemテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary">inumber</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>アイテムのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="fulltext">ititle</td>\r
-      <td>varchar(160)</td>\r
-      <td>NULL</td>\r
-      <td>タイトル</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull fulltext">ibody</td>\r
-      <td>text</td>\r
-      <td></td>\r
-      <td>本文</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="fulltext">imore</td>\r
-      <td>text</td>\r
-      <td></td>\r
-      <td>追加部分</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_blog">iblog</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>アイテムが所属するBlogのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_member">iauthor</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>アイテムの著者のID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">itime</td>\r
-      <td>datetime</td>\r
-      <td>'0000-00-00 00:00:00'</td>\r
-      <td>投稿時間(サーバーとの時差を反映したもの)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">iclosed</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'0'</td>\r
-      <td>アイテムが閉鎖されたかどうか (1=閉鎖/0=閉鎖していない). \r
-        閉鎖すると、コメントやカルマ投票を受け付けない</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">idraft</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'0'</td>\r
-      <td>アイテムはドラフトかどうか。ドラフトは管理ページでだけ見られる</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull toremove">ikarmapos</td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>+のカルマ投票の総数</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull toremove">ikarmaneg</td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>−のカルマ投票の総数</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="foreign"><a href="#nucleus_category">icat</a></td>\r
-      <td>int(11)</td>\r
-      <td>NULL</td>\r
-      <td>アイテムが所属するカテゴリーのID</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_comment" name="nucleus_comment"></a>\r
-<h1>nucleus_commentテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary">cnumber</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>コメントのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull fulltext">cbody</td>\r
-      <td>text</td>\r
-      <td></td>\r
-      <td>コメントの本文</td>\r
-    </tr>\r
-    <tr>\r
-      <td>cuser</td>\r
-      <td>varchar(40)</td>\r
-      <td>NULL</td>\r
-      <td>筆者名(メンバーでない場合,メンバーの場合はcmember参照)</td>\r
-    </tr>\r
-    <tr>\r
-      <td>cmail</td>\r
-      <td>varchar(100)</td>\r
-      <td>NULL</td>\r
-      <td>メール・アドレスあるいはURL(メンバーでない場合,メンバーの場合はcmember参照)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="foreign"><a href="#nucleus_member">cmember</a></td>\r
-      <td>int(11)</td>\r
-      <td>NULL</td>\r
-      <td>コメントを書いたメンバーのID(メンバーでない場合は0)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_item">citem</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>コメントが書き込まれたアイテムのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">ctime</td>\r
-      <td>datetime</td>\r
-      <td>'0000-00-00 00:00:00'</td>\r
-      <td>コメントを書き込んだ時間</td>\r
-    </tr>\r
-    <tr>\r
-      <td>chost</td>\r
-      <td>varchar(60)</td>\r
-      <td>NULL</td>\r
-      <td>コメントを入力したホスト名</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">cip</td>\r
-      <td>varchar(15)</td>\r
-      <td>''</td>\r
-      <td>コメントを入力したIPアドレス</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_blog">cblog</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>コメントが付属するBlogのID</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_member" name="nucleus_member"></a>\r
-<h1>nucleus_memberテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary">mnumber</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>メンバーのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull unique">mname</td>\r
-      <td>varchar(16)</td>\r
-      <td>''</td>\r
-      <td>名前(ログインに使うものと同じ)</td>\r
-    </tr>\r
-    <tr>\r
-      <td>mrealname</td>\r
-      <td>varchar(60)</td>\r
-      <td>NULL</td>\r
-      <td>フルネーム</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">mpassword</td>\r
-      <td>varchar(40)</td>\r
-      <td>''</td>\r
-      <td>パスワード (<a href="http://www.php.net/md5" title="Info about the PHP md5() function">md5</a>で暗号化してある)</td>\r
-    </tr>\r
-    <tr>\r
-      <td>memail</td>\r
-      <td>varchar(60)</td>\r
-      <td>NULL</td>\r
-      <td>メール・アドレス</td>\r
-    </tr>\r
-    <tr>\r
-      <td>murl</td>\r
-      <td>varchar(100)</td>\r
-      <td>NULL</td>\r
-      <td>URL</td>\r
-    </tr>\r
-    <tr>\r
-      <td>mnotes</td>\r
-      <td>varchar(100)</td>\r
-      <td>NULL</td>\r
-      <td>追加事項(メンバー自身が記述できる)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">madmin</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'0'</td>\r
-      <td>Super-admin(最高権限管理者)か (1=そう/0=違う \r
-        super-adminはすべての権利を持つ。システムに一人はsuper-adminがいる)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">mcanlogin</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'1'</td>\r
-      <td>管理エリアへのログインを許可 (1=許可/0=不許可)</td>\r
-    </tr>\r
-    <tr>\r
-      <td>mcookiekey</td>\r
-      <td>varchar(40)</td>\r
-      <td>NULL</td>\r
-      <td>このキーのコピーがユーザーのクッキーに保存され、ログオンに使う。メンバーがログオンすると、ランダムなcookiekeyが生成され、一方はデータベースに、他方がユーザーのコンピュータに保存される。</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">deflang</td>\r
-      <td>varchar(20)</td>\r
-      <td>''</td>\r
-      <td>このメンバー用の言語ファイルを指定する</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_team" name="nucleus_team"></a>\r
-<h1>nucleus_teamテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p>Blogのチーム・メンバーごとに、この表にデータがある</p>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary foreign"><a href="#nucleus_member">tmember</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>メンバーのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary foreign"><a href="#nucleus_blog">tblog</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>チーム・メンバーになっているBlog</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">tadmin</td>\r
-      <td>tinyint(2)</td>\r
-      <td>'0'</td>\r
-      <td>Blogの管理者か (0=違う/1=そう。各Blogは一人は管理者がいる)</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_plugin" name="nucleus_plugin"></a>\r
-<h1>nucleus_pluginテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary">pid</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>プラグインのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">pfile</td>\r
-      <td>varchar(40)</td>\r
-      <td>''</td>\r
-      <td>プラグインのファイル名(例えば<code>NP_CommentControl</code>)。プラグイン・ディレクトリにファイルがないといけない(.phpの拡張子が付いて)。</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">porder</td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>プラグインが呼び出される順番。プラグイン・ページで表示される順番でもある。数字が小さい方がリストの上の方に来る。</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_plugin_event" name="nucleus_plugin_event"></a>\r
-<h1>nucleus_plugin_eventテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p>各プラグインが登録するイベントを記録するキャッシュ。リクエストの度にすべてのプラグインを読み込んで,それらが使うイベントを調べる手間を省くために保存している。<a href="plugins.html#events">プラグインのイベントについてはこちらを参照。</a></p>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_plugin">pid</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>プラグインのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td>event</td>\r
-      <td>varchar(40)</td>\r
-      <td>NULL</td>\r
-      <td>イベントの名前</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_plugin_option" name="nucleus_plugin_option"></a>\r
-<h1>nucleus_plugin_optionテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p>プラグイン・オプションの値を格納する。オプション自体の定義については<a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a>テーブルを参照。</p>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary foreign"><a href="#nucleus_plugin_option_desc">oid</a></td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>オプションのID (<a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a>テーブルを参照)</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">ovalue</td>\r
-      <td>TEXT</td>\r
-      <td>''</td>\r
-      <td>オプションの値</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary">ocontextid</td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>オプションが使われるコンテキストによって意味合いが変わる\r
-        <ul>\r
-          <li>グローバル・コンテキスト: 使わない</li>\r
-          <li>Blogコンテキスト: <a href="#nucleus_blog">B</a><a href="#nucleus_blog">logのID</a></li>\r
-          <li>カテゴリー・コンテキスト: <a href="#nucleus_category">カテゴリーのID</a></li>\r
-          <li>メンバー・コンテキスト: <a href="#nucleus_member">メンバーのID</a></li>\r
-        </ul>\r
-      </td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_plugin_option_desc" name="nucleus_plugin_option_desc"></a>\r
-<h1>nucleus_plugin_option_descテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p>プラグインがオプションを作るたびにこのテーブル内にデータができる。</p>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc unique">oid</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>オプションのID。<a href="#nucleus_plugin_option">nucleus_plugin_option</a>テーブルで使う</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary foreign"><a href="#nucleus_plugin">opid</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>オプションを作ったプラグインのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary">oname</td>\r
-      <td>varchar(20)</td>\r
-      <td>''</td>\r
-      <td>オプションの名前</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary">ocontext</td>\r
-      <td>varchar(20)</td>\r
-      <td>''</td>\r
-      <td>オプションのコンテキスト(<code>グローバル</code>, <code>Blog</code>, \r
-        <code>カテゴリー</code>,メンバー)</td>\r
-    </tr>\r
-    <tr>\r
-      <td>odesc</td>\r
-      <td>varchar(255)</td>\r
-      <td>NULL</td>\r
-      <td>オプションの説明</td>\r
-    </tr>\r
-    <tr>\r
-      <td>otype</td>\r
-      <td>varchar(20)</td>\r
-      <td>NULL</td>\r
-      <td>オプションの型.\r
-      <a title="Nucleus Plugin API - Option types" href="plugins.html#options">プラグインの文書を参照</a>.</td>\r
-    </tr>\r
-    <tr>\r
-      <td>odef</td>\r
-      <td>text</td>\r
-      <td></td>\r
-      <td>オプションの既定値</td>\r
-    </tr>\r
-    <tr>\r
-      <td>oextra</td>\r
-      <td>text</td>\r
-      <td></td>\r
-      <td>select option型などで使う、その他のデータ</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_skin" name="nucleus_skin"></a>\r
-<h1>nucleus_skinテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary foreign"><a href="#nucleus_skin_desc">sdesc</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>skin_descへの参照</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary">stype</td>\r
-      <td>varchar(20)</td>\r
-      <td>''</td>\r
-      <td>スキン・パートの型。以下のいずれかを取る\r
-        <ul>\r
-          <li><code>index</code></li>\r
-          <li><code>item</code></li>\r
-          <li><code>archive</code></li>\r
-          <li><code>archivelist</code></li>\r
-          <li><code>search</code></li>\r
-          <li><code>error</code></li>\r
-          <li><code>member</code></li>\r
-          <li><code>imagepopup</code></li>\r
-        </ul>\r
-      </td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">scontent</td>\r
-      <td>text</td>\r
-      <td></td>\r
-      <td>スキン・パートの内容</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_skin_desc" name="nucleus_skin_desc"></a>\r
-<h1>nucleus_skin_descテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary">sdnumber</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>スキンのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull unique">sdname</td>\r
-      <td>varchar(20)</td>\r
-      <td>''</td>\r
-      <td>スキンの名前</td>\r
-    </tr>\r
-    <tr>\r
-      <td>sddesc</td>\r
-      <td>varchar(200)</td>\r
-      <td>NULL</td>\r
-      <td>スキンの説明</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">sd型</td>\r
-      <td>varchar(40)</td>\r
-      <td>'text/html'</td>\r
-      <td>スキンのmimeタイプ</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">sdincmode</td>\r
-      <td>varchar(10)</td>\r
-      <td>'normal'</td>\r
-      <td>Includeモード。以下のいずれかを取る\r
-        <ul>\r
-          <li><code>normal</code></li>\r
-          <li><code>skindir</code></li>\r
-        </ul>\r
-      </td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">sdincpref</td>\r
-      <td>varchar(50)</td>\r
-      <td>''</td>\r
-      <td>ファイルをIncludeするときのプリフィックス</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_template" name="nucleus_template"></a>\r
-<h1>nucleus_templateテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary foreign"><a href="#nucleus_template_desc">tdesc</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>template_descへの参照</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary">tpartname</td>\r
-      <td>varchar(20)</td>\r
-      <td>''</td>\r
-      <td>テンプレート・パートの名前。以下のいずれかを取る<ul>\r
-          <li>ARCHIVELIST_FOOTER</li>\r
-          <li>ARCHIVELIST_HEADER</li>\r
-          <li>ARCHIVELIST_LISTITEM</li>\r
-          <li>CATLIST_FOOTER</li>\r
-          <li>CATLIST_HEADER</li>\r
-          <li>CATLIST_LISTITEM</li>\r
-          <li>COMMENTS_BODY</li>\r
-          <li>COMMENTS_MANY</li>\r
-          <li>COMMENTS_NONE</li>\r
-          <li>COMMENTS_ONE</li>\r
-          <li>COMMENTS_TOOMUCH</li>\r
-          <li>DATE_HEADER</li>\r
-          <li>EDITLINK</li>\r
-          <li>FORMAT_DATE</li>\r
-          <li>FORMAT_TIME</li>\r
-          <li>IMAGE_CODE</li>\r
-          <li>ITEM</li>\r
-          <li>LOCALE</li>\r
-          <li>MEDIA_CODE</li>\r
-          <li>MORELINK</li>\r
-          <li>POPUP_CODE</li>\r
-          <li>SEARCH_HIGHLIGHT</li>\r
-          <li>SEARCH_NOTHINGFOUND</li>\r
-        </ul>\r
-      </td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">tcontent</td>\r
-      <td>text</td>\r
-      <td></td>\r
-      <td>テンプレート・パートの内容</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_template_desc" name="nucleus_template_desc"></a>\r
-<h1>nucleus_template_descテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull autoinc primary unique">tdnumber</td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>テンプレートのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull unique">tdname</td>\r
-      <td>varchar(20)</td>\r
-      <td>''</td>\r
-      <td>テンプレートの名前</td>\r
-    </tr>\r
-    <tr>\r
-      <td>tddesc</td>\r
-      <td>varchar(200)</td>\r
-      <td>NULL</td>\r
-      <td>テンプレートの説明</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_actionlog" name="nucleus_actionlog"></a>\r
-<h1>nucleus_actionlogテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p>ログインやエラーなどのログを記録する</p>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th></th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">timestamp</td>\r
-      <td>datetime</td>\r
-      <td>'0000-00-00 00:00:00'</td>\r
-      <td>アクションの日時</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">message</td>\r
-      <td>varchar(255)</td>\r
-      <td>''</td>\r
-      <td>アクションのメッセージ</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_config" name="nucleus_config"></a>\r
-<h1>nucleus_configテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p>Nucleusは、いくつかのグローバル・オプションを<code>nucleus_config</code>テーブルに記憶する。これは<code>$CONF['OptionName']</code> \r
-でアクセスできる。</p>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary">name</td>\r
-      <td>varchar(20)</td>\r
-      <td>''</td>\r
-      <td>オプションの名前</td>\r
-    </tr>\r
-    <tr>\r
-      <td>value</td>\r
-      <td>varchar(128)</td>\r
-      <td>NULL</td>\r
-      <td>オプションの値</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a name="nucleus_config_options" id="nucleus_config_options"></a>\r
-<h2>使用できるオプション</h2>\r
-<p>使用できるオプションのオーバビューを以下に示す。</p>\r
-<p>はい/いいえタイプのオプションは1/0 (1=はい/真, 0=いいえ/偽)で示す。</p>\r
-<table width="901">\r
-  <tbody>\r
-    <tr>\r
-      <th width="149">Name</th>\r
-      <th width="163">既定値 Value</th>\r
-      <th width="575">説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="foreign" width="149"><a href="#nucleus_blog">DefaultBlog</a></td>\r
-      <td width="163">1</td>\r
-      <td width="575">デフォルトのBlogのID。Blogが明示的に記されていないときに使うもの</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">AdminEmail</td>\r
-      <td width="163"></td>\r
-      <td width="575">管理者のメール・アドレス</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">IndexURL</td>\r
-      <td width="163"></td>\r
-      <td width="575">サイトのURL。最後に/が付く必要がある</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">Language</td>\r
-      <td width="163">english</td>\r
-      <td width="575">デフォルトの言語ファイル名。「言語ファイル名.php」ファイルがlanguageディレクトリに必要</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">SessionCookie</td>\r
-      <td width="163">0</td>\r
-      <td width="575">寿命1ヶ月のクッキーの代わりにセッション・クッキーを使うかどうか</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">AllowMemberCreate</td>\r
-      <td width="163">0</td>\r
-      <td width="575">ビジターにアカウント作成を許すかどうか</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">AllowMemberMail</td>\r
-      <td width="163">1</td>\r
-      <td width="575">メンバー間でフォームを使ったメッセージ転送を許すかどうか(メール・アドレスは表示されない)</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">SiteName</td>\r
-      <td width="163"></td>\r
-      <td width="575">サイトの名前</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">AdminURL</td>\r
-      <td width="163"></td>\r
-      <td width="575">管理エリアのURL。最後に/が付く必要がある</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">NewMemberCanLogon</td>\r
-      <td width="163">1</td>\r
-      <td width="575">登録されたばかりのユーザーがログインできるかどうか。できないばあい,管理者が「can login」オプションを最初に変更する必要がある</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="toremove" width="149">DisableSite</td>\r
-      <td width="163">0</td>\r
-      <td width="575">サイトが無効状態になっているかどうか。無効状態の場合、管理者だけがアクセスできる。他のすべてのアクセスは<code>DisableSiteURL</code>にリダイレクトされる</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="toremove" width="149">DisableSiteURL</td>\r
-      <td width="163"></td>\r
-      <td width="575">サイトが無効状態のときにリダイレクトされるURL</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="toremove" width="149">LastVisit</td>\r
-      <td width="163">0</td>\r
-      <td width="575">「最後の訪問」のクッキーを保存するかどうか</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">MediaURL</td>\r
-      <td width="163"></td>\r
-      <td width="575">メディア・フォルダのURL。最後に/が付く</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">AllowedTypes</td>\r
-      <td width="163">jpg, jpeg, gif, mpg, mpeg, avi, mov, mp3, swf, png</td>\r
-      <td width="575">メディア・フォルダにアップロードを許すファイル型</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">AllowLoginEdit</td>\r
-      <td width="163">0</td>\r
-      <td width="575">メンバーにログイン名とパスワードの変更を許すかどうか</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">AllowUpload</td>\r
-      <td width="163">1</td>\r
-      <td width="575">ファイルのアップロードを許すかどうか</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="toremove" width="149">DisableJsTools</td>\r
-      <td width="163">2</td>\r
-      <td width="575">JavaScriptツールバーの形式<ul>\r
-          <li>0: 多機能型 (IE)</li>\r
-          <li>1: ツールバーを無効にする</li>\r
-          <li>2: シンプル型(Gecko)</li>\r
-        </ul>\r
-      </td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">CookiePath</td>\r
-      <td width="163">/</td>\r
-      <td width="575">クッキーをセットするパス</td>\r
-    </tr>\r
-    <tr>\r
-      <td>CookiePrefix</td>\r
-      <td></td>\r
-      <td>クッキーの名称に追加するプレフィクス文字列。複数の Nucleus を同じドメインにインストールする際に便利で、別の Nucleus で同じセッションが適用されることを予防する。\r
-    </tr>\r
-    <tr>\r
-      <td width="149">CookieDomain</td>\r
-      <td width="163"></td>\r
-      <td width="575">クッキーをセットするドメイン</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">CookieSecure</td>\r
-      <td width="163">0</td>\r
-      <td width="575">クッキーの通信にHTTPSを使うかどうか</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">MediaPrefix</td>\r
-      <td width="163">1</td>\r
-      <td width="575">アップロードしたファイル名に日付を加えるかどうか</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">MaxUploadSize</td>\r
-      <td width="163">1048576</td>\r
-      <td width="575">アップロードするファイルの最大値(バイト数)</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">NonmemberMail</td>\r
-      <td width="163">0</td>\r
-      <td width="575">メンバー以外の人にメンバーへのメールを許すかどうか</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">PluginURL</td>\r
-      <td width="163"></td>\r
-      <td width="575">プラグイン・フォルダのURL。/で終わる必要がある</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">ProtectMemNames</td>\r
-      <td width="163">1</td>\r
-      <td width="575">\r
-      このオプションが有効だと、ログインしていない人はメンバーと同じ名前でコメントを残せなくなる。こうすることによって、ゲストがメンバーのふりをすることを避けられる</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="foreign" width="149"><a href="#nucleus_skin_desc">BaseSkin</a></td>\r
-      <td width="163">1</td>\r
-      <td width="575">\r
-      Nucleusに、自動的にスキンが決まらないときに、どのスキンを使うかを指定する。スキンのパートが空だったり、ブログやスキンが洗濯されていない場合に起こる</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">SkinsURL</td>\r
-      <td width="163"></td>\r
-      <td width="575">スキン・フォルダのURL。最後に/が付く必要がある</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">ActionURL</td>\r
-      <td width="163"></td>\r
-      <td width="575">action.phpがあるURL.</td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">URLMode</td>\r
-      <td width="163">normal</td>\r
-      <td width="575"> <code>normal</code>か<code>pathinfo</code></td>\r
-    </tr>\r
-    <tr>\r
-      <td width="149">DatabaseVersion</td>\r
-      <td width="163">250</td>\r
-      <td width="575">データベースの構造が更新された最後のNucleusのバージョン番号</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-\r
-<a id="nucleus_tickets" name="nucleus_tickets"></a>\r
-<h1>nucleus_ticketsテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="トップに戻る" /></a></h1>\r
-\r
-<p>Nucleus は <code>nucleus_tickets</code> を使用することによりセキュリティ上の問題を予防する。特に、管理エリアにおいて諸設定やデータベースの内容に影響する場合、チケットを必須とする。チケットは管理ページがリクエストされた時とフォームから呼び出された時に発行される。チケットは発行から 1時間後に破棄される。</p>\r
-\r
-<table>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary">ticket</td>\r
-      <td>varchar(40)</td>\r
-      <td></td>\r
-      <td>特定の単一ユーザに割り当てられるユニークなチケット。一般に、チケットは次のような形になる: <code>65303a785423b4d53c7b3e6579766f26</code></td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign primary"><a href="#nucleus_member">member</a></td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>当該チケットが有効適用されるメンバー。</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">ctime</td>\r
-      <td>datetime</td>\r
-      <td></td>\r
-      <td>チケットの発行日時。チケットの有効期限は 1時間である。</td>\r
-    </tr>\r
-</table>\r
-\r
-\r
-<a id="nucleus_activation" name="nucleus_activation"></a>\r
-<h1>nucleus_activationテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="トップに戻る" /></a></h1>\r
-\r
-<p>新しいメンバーが登録された時点では、そのメンバーアカウントがアクティベートされるまで Nucleus はログインを許可しない。アクティベートのためのリンクを含むメールが送信され、これによってアクティベートすることができる。<code>nucleus_activation</code>テーブルはアクティベートの進捗状況を追跡する。</p>\r
-\r
-<table>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull primary">vkey</td>\r
-      <td>varchar(40)</td>\r
-      <td></td>\r
-      <td>アクティベートキー。このキーはメンバーのアクティベートコードに渡される。一般的に、キーは次のような形になる: <code>41cf637d4fbeeff954b4ca70b8bde9dd</code></td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_member">vmember</a></td>\r
-      <td>int(11)</td>\r
-      <td></td>\r
-      <td>アクティベートの必要があるメンバー。</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">vtime</td>\r
-      <td>datetime</td>\r
-      <td></td>\r
-      <td>アクティベートキーが発行された日時。アクティベートキーの有効期間は 2日間である。</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">vtype</td>\r
-      <td>varchar(15)</td>\r
-      <td></td>\r
-      <td>アクティベートの種別。\r
-          <ul>\r
-            <li><code>forgot</code>: パスワードを忘れたメンバー。</li>\r
-            <li><code>register</code>: 新しく登録されたメンバー。</li>\r
-            <li><code>addresschange</code>: メールアドレスを変更したメンバー。</li>\r
-          </ul>\r
-      </td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">vextra</td>\r
-      <td>varchar(128)</td>\r
-      <td></td>\r
-      <td>追加的な情報。アクティベート種別が <code>addresschange</code> の場合、ここには <code>oldemailaddress/x</code> として、x には 0 または 1 の値が入る。x は <a href="#nucleus_member">member</a>テーブルにある <code>mcanlogin</code> の値を参照する。(アクティベートが完全に終了するまで、このユーザはログインできない)</td>\r
-    </tr>\r
-</table>\r
-\r
-<a id="nucleus_karma" name="nucleus_karma"></a>\r
-<h1>nucleus_karmaテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p class="toremove">このテーブルは将来はなくなる可能性が高い。同じ機能を提供するプラグインに譲るためだ。</p>\r
-<p>この表は投票に使われたIPアドレスを記憶しておく。こうすることで一つのIPアドレスからは1票しか入れられなくなる</p>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_item">itemid</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>アイテムのID</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">ip</td>\r
-      <td>char(15)</td>\r
-      <td>''</td>\r
-      <td>投票者のIPアドレス</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<a id="nucleus_ban" name="nucleus_ban"></a>\r
-<h1>nucleus_banテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>\r
-<p class="toremove">このテーブルは将来のNucleusではなくなる可能性が高い。同じ機能を提供するプラグインに譲るためだ。</p>\r
-<p>コメントやカルマ投票を禁止するIPアドレスを記憶</p>\r
-<table>\r
-  <tbody>\r
-    <tr>\r
-      <th>カラム名</th>\r
-      <th>型</th>\r
-      <th>既定値</th>\r
-      <th>説明</th>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">iprange</td>\r
-      <td>varchar(15)</td>\r
-      <td>''</td>\r
-      <td>IPアドレスの範囲。アドレス単独でもいいし,一部(左から)でもいい。一部の場合は範囲を示す</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull">reason</td>\r
-      <td>varchar(255)</td>\r
-      <td>''</td>\r
-      <td>禁止の理由を示すメッセージ。コメントやカルマ投票を試みたときに表示される</td>\r
-    </tr>\r
-    <tr>\r
-      <td class="notnull foreign"><a href="#nucleus_blog">blogid</a></td>\r
-      <td>int(11)</td>\r
-      <td>'0'</td>\r
-      <td>禁止を有効にするBlogのID</td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: sqltables.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: sqltables.html,v 1.4.2.1 2005/09/09 05:25:32 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - SQL テーブル構造</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+       <style type="text/css">
+               /* auto increment table columns*/
+               .autoinc {
+               }
+
+               /* primary-keys */
+               .primary {
+                       text-decoration: underline;
+                       font-weight: bold;
+               }
+
+               /* NOT NULL */
+               .notnull {
+               }
+
+               /* unique key */
+               .unique {
+               }
+
+               /* foreign keys */
+               .foreign {
+                       font-style: italic;
+               }
+
+               /* auto increment table columns*/
+               .autoinc {
+               }
+
+               /* fulltext index */
+               .fulltext {
+               }
+
+               /* columns/tables to remove in later versions */
+               .toremove {
+                       color: red;
+               }
+
+
+
+
+       </style>
+</head>
+<body>
+
+
+<a name="top" id="top"></a>
+<div class="heading">
+  SQLテーブル・リファレンス <i>2005年3月5日</i>
+</div>
+<strong>訳者注:</strong>
+<ul>
+  <li>このドキュメントの原文は以下のURLにあります。<br>
+    <a href="http://nucleuscms.org/documentation/devdocs/sqltables.html">http://nucleuscms.org/documentation/devdocs/sqltables.html</a></li>
+  <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>
+</ul>
+<h1>はじめに</h1>
+<p><a href="index.html">開発者向けドキュメントの目次へ戻る</a></p>
+<p>このドキュメントはNucleusのデータベース・テーブルのフィールドを解説しています。</p>
+<p class="note">構造は<strong>Nucleus v3.2</strong>のものに従っています</p>
+<h1><a name="toc" id="toc"></a>目次</h1>
+<ul>
+  <li><a href="#legend">文書中の色使いについて</a></li>
+  <li>Blog
+    <ul>
+      <li><a href="#nucleus_blog">nucleus_blog</a></li>
+      <li><a href="#nucleus_category">nucleus_category</a></li>
+      <li><a href="#nucleus_item">nucleus_item</a></li>
+      <li><a href="#nucleus_comment">nucleus_comment</a></li>
+      <li><a href="#nucleus_member">nucleus_member</a></li>
+      <li><a href="#nucleus_team">nucleus_team</a></li>
+    </ul>
+  </li>
+  <li>プラグイン
+    <ul>
+      <li><a href="#nucleus_plugin">nucleus_plugin</a></li>
+      <li><a href="#nucleus_plugin_event">nucleus_plugin_event</a></li>
+      <li><a href="#nucleus_plugin_option">nucleus_plugin_option</a></li>
+      <li><a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a></li>
+    </ul>
+  </li>
+  <li>スキンとテンプレート
+    <ul>
+      <li><a href="#nucleus_skin">nucleus_skin</a></li>
+      <li><a href="#nucleus_skin_desc">nucleus_skin_desc</a></li>
+      <li><a href="#nucleus_template">nucleus_template</a></li>
+      <li><a href="#nucleus_template_desc">nucleus_template_desc</a></li>
+    </ul>
+  </li>
+  <li>管理
+    <ul>
+      <li><a href="#nucleus_actionlog">nucleus_actionlog</a></li>
+      <li><a href="#nucleus_config">nucleus_config</a>
+        <ul>
+          <li><a href="#nucleus_config_options">可能なオプション</a></li>
+        </ul>
+      </li>
+      <li><a href="#nucleus_tickets">nucleus_tickets</a></li>
+      <li><a href="#nucleus_activation">nucleus_activation</a></li>
+    </ul>
+  </li>
+  <li>その他
+    <ul>
+      <li><a href="#nucleus_karma">nucleus_karma</a></li>
+      <li><a href="#nucleus_ban">nucleus_ban</a></li>
+    </ul>
+  </li>
+</ul>
+<a id="legend" name="legend"></a>
+<h1>色使い<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p>この文書中では、カラムの型を示すために、文字の修飾を使っています。以下に例を示します:</p>
+<table width="893">
+  <tbody>
+    <tr>
+      <td class="primary" width="88">プライマリ</td>
+      <td width="775">プライマリキー</td>
+    </tr>
+    <tr>
+      <td class="foreign" width="88">外部</td>
+      <td width="775">外部キー(クリックすると参照先に飛ぶ)。MySQLは外部キーとの一貫性保持に責任を持たないことに注意</td>
+    </tr>
+    <tr>
+      <td class="toremove" width="88">削除予定</td>
+      <td width="775">同じ機能を提供するプラグインを優先するため、テーブルやカラムは将来のバージョンのNucleusで削除させる可能性が高い</td>
+    </tr>
+    <tr>
+      <td class="fulltext" width="88">フルテキスト</td>
+      <td width="775">カラムにフルテキストのインデックスが付く(検索で使用する)</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_blog" name="nucleus_blog"></a>
+<h1>nucleus_blogテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary">bnumber</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>BlogのID</td>
+    </tr>
+    <tr>
+      <td class="notnull">bname</td>
+      <td>varchar(60)</td>
+      <td>''</td>
+      <td>Blog名</td>
+    </tr>
+    <tr>
+      <td class="notnull unique">bshortname</td>
+      <td>varchar(15)</td>
+      <td>''</td>
+      <td>Blogの短縮名 (スキン変数 <code>&lt;%blog%&gt;</code>などで使うものと同じ)</td>
+    </tr>
+    <tr>
+      <td>bdesc</td>
+      <td>varchar(200)</td>
+      <td>NULL</td>
+      <td>Blogの説明</td>
+    </tr>
+    <tr>
+      <td class="notnull">bcomments</td>
+      <td>tinyint(2)</td>
+      <td>'1'</td>
+      <td>コメントを許可する(1=許可, 0=不許可)</td>
+    </tr>
+    <tr>
+      <td class="notnull">bmaxcomments</td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>indexスキンタイプで表示するコメントの最大数。既定値(0)は制限がないことを説明する。インライン・コメントを使わないのなら,ここはいじらないこと</td>
+    </tr>
+    <tr>
+      <td class="notnull">btimeoffset</td>
+      <td>decimal(3,1)</td>
+      <td>'0.0'</td>
+      <td>サーバー時刻との時差。アイテムはサーバー時刻にこの値を足した時間でデータベースに保存される</td>
+    </tr>
+    <tr>
+      <td class="toremove">bnotify</td>
+      <td>varchar(60)</td>
+      <td>NULL</td>
+      <td>通知するメール・アドレス。いくつかのイベントが起こると(どのイベントかは<code>bnotifytypeを参照のこと)</code>,このアドレス宛てにメールで通知が行く</td>
+    </tr>
+    <tr>
+      <td>burl</td>
+      <td>varchar(100)</td>
+      <td>NULL</td>
+      <td>BlogのURL</td>
+    </tr>
+    <tr>
+      <td class="toremove">bupdate</td>
+      <td>varchar(60)</td>
+      <td>NULL</td>
+      <td>アイテムが投稿されるたびに変更が必要な更新ファイル。サーバー上の絶対パスで指定する</td>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_skin_desc">bdefskin</a></td>
+      <td>int(11)</td>
+      <td>'1'</td>
+      <td>このBlogを表示するときに使う標準のスキン</td>
+    </tr>
+    <tr>
+      <td class="notnull">bpublic</td>
+      <td>tinyint(2)</td>
+      <td>'1'</td>
+      <td>登録ユーザー以外にもコメントを許可する(1=許可/0=不許可)</td>
+    </tr>
+    <tr>
+      <td class="notnull toremove">bsendping</td>
+      <td>tinyint(2)</td>
+      <td>'0'</td>
+      <td>更新があったときにweblogs.comにpingを送る (1=送る/0=送らない)</td>
+    </tr>
+    <tr>
+      <td class="notnull toremove">bconvertbreaks</td>
+      <td>tinyint(2)</td>
+      <td>'1'</td>
+      <td>改行を<code>&lt;br /&gt;</code>に変換する (1=変換する/0=変換しない)</td>
+    </tr>
+    <tr>
+      <td class="foreign"><a href="#nucleus_category">bdefcat</a></td>
+      <td>int(11)</td>
+      <td>NULL</td>
+      <td>デフォルトのカテゴリー。他のカテゴリーが選択されていないとき、このカテゴリーになる</td>
+    </tr>
+    <tr>
+      <td class="notnull">bnotifytype</td>
+      <td>int(11)</td>
+      <td>'15'</td>
+      <td>どのイベントが起こったときに通知メールを送るか(通知するメール・アドレスはbnotifyを参照)。三つの値の組み合わせからなり、掛け合わせることでnoifytypeの値が決まる。
+        <ul>
+          <li>3: 新しいコメント</li>
+          <li>5: 新しいカルマ投票</li>
+          <li>7: 新しいアイテム</li>
+        </ul>
+        既定値 = 新しいコメントと新しいカルマ投票(3×5=15)</td>
+    </tr>
+    <tr>
+      <td class="notnull">ballowpast</td>
+      <td>tinyint(2)</td>
+      <td>'0'</td>
+      <td>過去の日時での投稿を許可する (1=許可/0=不許可)</td>
+    </tr>
+    <tr>
+      <td class="notnull">bincludesearch</td>
+      <td>tinyint(2)</td>
+      <td>'0'</td>
+      <td>他のblogの検索の場合にも,検索対象にする(1=対象にする/0=対象にしない)</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_category" name="nucleus_category"></a>
+<h1>nucleus_categoryテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary">catid</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>カテゴリーID</td>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_blog">cblog</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>カテゴリーが所属するBlogのID</td>
+    </tr>
+    <tr>
+      <td>cname</td>
+      <td>varchar(40)</td>
+      <td>NULL</td>
+      <td>カテゴリーの名前</td>
+    </tr>
+    <tr>
+      <td>cdesc</td>
+      <td>varchar(200)</td>
+      <td>NULL</td>
+      <td>カテゴリーの説明</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_item" name="nucleus_item"></a>
+<h1>nucleus_itemテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary">inumber</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>アイテムのID</td>
+    </tr>
+    <tr>
+      <td class="fulltext">ititle</td>
+      <td>varchar(160)</td>
+      <td>NULL</td>
+      <td>タイトル</td>
+    </tr>
+    <tr>
+      <td class="notnull fulltext">ibody</td>
+      <td>text</td>
+      <td></td>
+      <td>本文</td>
+    </tr>
+    <tr>
+      <td class="fulltext">imore</td>
+      <td>text</td>
+      <td></td>
+      <td>追加部分</td>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_blog">iblog</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>アイテムが所属するBlogのID</td>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_member">iauthor</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>アイテムの著者のID</td>
+    </tr>
+    <tr>
+      <td class="notnull">itime</td>
+      <td>datetime</td>
+      <td>'0000-00-00 00:00:00'</td>
+      <td>投稿時間(サーバーとの時差を反映したもの)</td>
+    </tr>
+    <tr>
+      <td class="notnull">iclosed</td>
+      <td>tinyint(2)</td>
+      <td>'0'</td>
+      <td>アイテムが閉鎖されたかどうか (1=閉鎖/0=閉鎖していない). 
+        閉鎖すると、コメントやカルマ投票を受け付けない</td>
+    </tr>
+    <tr>
+      <td class="notnull">idraft</td>
+      <td>tinyint(2)</td>
+      <td>'0'</td>
+      <td>アイテムはドラフトかどうか。ドラフトは管理ページでだけ見られる</td>
+    </tr>
+    <tr>
+      <td class="notnull toremove">ikarmapos</td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>+のカルマ投票の総数</td>
+    </tr>
+    <tr>
+      <td class="notnull toremove">ikarmaneg</td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>−のカルマ投票の総数</td>
+    </tr>
+    <tr>
+      <td class="foreign"><a href="#nucleus_category">icat</a></td>
+      <td>int(11)</td>
+      <td>NULL</td>
+      <td>アイテムが所属するカテゴリーのID</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_comment" name="nucleus_comment"></a>
+<h1>nucleus_commentテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary">cnumber</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>コメントのID</td>
+    </tr>
+    <tr>
+      <td class="notnull fulltext">cbody</td>
+      <td>text</td>
+      <td></td>
+      <td>コメントの本文</td>
+    </tr>
+    <tr>
+      <td>cuser</td>
+      <td>varchar(40)</td>
+      <td>NULL</td>
+      <td>筆者名(メンバーでない場合,メンバーの場合はcmember参照)</td>
+    </tr>
+    <tr>
+      <td>cmail</td>
+      <td>varchar(100)</td>
+      <td>NULL</td>
+      <td>メール・アドレスあるいはURL(メンバーでない場合,メンバーの場合はcmember参照)</td>
+    </tr>
+    <tr>
+      <td class="foreign"><a href="#nucleus_member">cmember</a></td>
+      <td>int(11)</td>
+      <td>NULL</td>
+      <td>コメントを書いたメンバーのID(メンバーでない場合は0)</td>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_item">citem</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>コメントが書き込まれたアイテムのID</td>
+    </tr>
+    <tr>
+      <td class="notnull">ctime</td>
+      <td>datetime</td>
+      <td>'0000-00-00 00:00:00'</td>
+      <td>コメントを書き込んだ時間</td>
+    </tr>
+    <tr>
+      <td>chost</td>
+      <td>varchar(60)</td>
+      <td>NULL</td>
+      <td>コメントを入力したホスト名</td>
+    </tr>
+    <tr>
+      <td class="notnull">cip</td>
+      <td>varchar(15)</td>
+      <td>''</td>
+      <td>コメントを入力したIPアドレス</td>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_blog">cblog</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>コメントが付属するBlogのID</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_member" name="nucleus_member"></a>
+<h1>nucleus_memberテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary">mnumber</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>メンバーのID</td>
+    </tr>
+    <tr>
+      <td class="notnull unique">mname</td>
+      <td>varchar(16)</td>
+      <td>''</td>
+      <td>名前(ログインに使うものと同じ)</td>
+    </tr>
+    <tr>
+      <td>mrealname</td>
+      <td>varchar(60)</td>
+      <td>NULL</td>
+      <td>フルネーム</td>
+    </tr>
+    <tr>
+      <td class="notnull">mpassword</td>
+      <td>varchar(40)</td>
+      <td>''</td>
+      <td>パスワード (<a href="http://www.php.net/md5" title="Info about the PHP md5() function">md5</a>で暗号化してある)</td>
+    </tr>
+    <tr>
+      <td>memail</td>
+      <td>varchar(60)</td>
+      <td>NULL</td>
+      <td>メール・アドレス</td>
+    </tr>
+    <tr>
+      <td>murl</td>
+      <td>varchar(100)</td>
+      <td>NULL</td>
+      <td>URL</td>
+    </tr>
+    <tr>
+      <td>mnotes</td>
+      <td>varchar(100)</td>
+      <td>NULL</td>
+      <td>追加事項(メンバー自身が記述できる)</td>
+    </tr>
+    <tr>
+      <td class="notnull">madmin</td>
+      <td>tinyint(2)</td>
+      <td>'0'</td>
+      <td>Super-admin(最高権限管理者)か (1=そう/0=違う 
+        super-adminはすべての権利を持つ。システムに一人はsuper-adminがいる)</td>
+    </tr>
+    <tr>
+      <td class="notnull">mcanlogin</td>
+      <td>tinyint(2)</td>
+      <td>'1'</td>
+      <td>管理エリアへのログインを許可 (1=許可/0=不許可)</td>
+    </tr>
+    <tr>
+      <td>mcookiekey</td>
+      <td>varchar(40)</td>
+      <td>NULL</td>
+      <td>このキーのコピーがユーザーのクッキーに保存され、ログオンに使う。メンバーがログオンすると、ランダムなcookiekeyが生成され、一方はデータベースに、他方がユーザーのコンピュータに保存される。</td>
+    </tr>
+    <tr>
+      <td class="notnull">deflang</td>
+      <td>varchar(20)</td>
+      <td>''</td>
+      <td>このメンバー用の言語ファイルを指定する</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_team" name="nucleus_team"></a>
+<h1>nucleus_teamテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p>Blogのチーム・メンバーごとに、この表にデータがある</p>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull primary foreign"><a href="#nucleus_member">tmember</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>メンバーのID</td>
+    </tr>
+    <tr>
+      <td class="notnull primary foreign"><a href="#nucleus_blog">tblog</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>チーム・メンバーになっているBlog</td>
+    </tr>
+    <tr>
+      <td class="notnull">tadmin</td>
+      <td>tinyint(2)</td>
+      <td>'0'</td>
+      <td>Blogの管理者か (0=違う/1=そう。各Blogは一人は管理者がいる)</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_plugin" name="nucleus_plugin"></a>
+<h1>nucleus_pluginテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary">pid</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>プラグインのID</td>
+    </tr>
+    <tr>
+      <td class="notnull">pfile</td>
+      <td>varchar(40)</td>
+      <td>''</td>
+      <td>プラグインのファイル名(例えば<code>NP_CommentControl</code>)。プラグイン・ディレクトリにファイルがないといけない(.phpの拡張子が付いて)。</td>
+    </tr>
+    <tr>
+      <td class="notnull">porder</td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>プラグインが呼び出される順番。プラグイン・ページで表示される順番でもある。数字が小さい方がリストの上の方に来る。</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_plugin_event" name="nucleus_plugin_event"></a>
+<h1>nucleus_plugin_eventテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p>各プラグインが登録するイベントを記録するキャッシュ。リクエストの度にすべてのプラグインを読み込んで,それらが使うイベントを調べる手間を省くために保存している。<a href="plugins.html#events">プラグインのイベントについてはこちらを参照。</a></p>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_plugin">pid</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>プラグインのID</td>
+    </tr>
+    <tr>
+      <td>event</td>
+      <td>varchar(40)</td>
+      <td>NULL</td>
+      <td>イベントの名前</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_plugin_option" name="nucleus_plugin_option"></a>
+<h1>nucleus_plugin_optionテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p>プラグイン・オプションの値を格納する。オプション自体の定義については<a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a>テーブルを参照。</p>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary foreign"><a href="#nucleus_plugin_option_desc">oid</a></td>
+      <td>int(11)</td>
+      <td></td>
+      <td>オプションのID (<a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a>テーブルを参照)</td>
+    </tr>
+    <tr>
+      <td class="notnull">ovalue</td>
+      <td>TEXT</td>
+      <td>''</td>
+      <td>オプションの値</td>
+    </tr>
+    <tr>
+      <td class="notnull primary">ocontextid</td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>オプションが使われるコンテキストによって意味合いが変わる
+        <ul>
+          <li>グローバル・コンテキスト: 使わない</li>
+          <li>Blogコンテキスト: <a href="#nucleus_blog">B</a><a href="#nucleus_blog">logのID</a></li>
+          <li>カテゴリー・コンテキスト: <a href="#nucleus_category">カテゴリーのID</a></li>
+          <li>メンバー・コンテキスト: <a href="#nucleus_member">メンバーのID</a></li>
+        </ul>
+      </td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_plugin_option_desc" name="nucleus_plugin_option_desc"></a>
+<h1>nucleus_plugin_option_descテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p>プラグインがオプションを作るたびにこのテーブル内にデータができる。</p>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc unique">oid</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>オプションのID。<a href="#nucleus_plugin_option">nucleus_plugin_option</a>テーブルで使う</td>
+    </tr>
+    <tr>
+      <td class="notnull primary foreign"><a href="#nucleus_plugin">opid</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>オプションを作ったプラグインのID</td>
+    </tr>
+    <tr>
+      <td class="notnull primary">oname</td>
+      <td>varchar(20)</td>
+      <td>''</td>
+      <td>オプションの名前</td>
+    </tr>
+    <tr>
+      <td class="notnull primary">ocontext</td>
+      <td>varchar(20)</td>
+      <td>''</td>
+      <td>オプションのコンテキスト(<code>グローバル</code>, <code>Blog</code>, 
+        <code>カテゴリー</code>,メンバー)</td>
+    </tr>
+    <tr>
+      <td>odesc</td>
+      <td>varchar(255)</td>
+      <td>NULL</td>
+      <td>オプションの説明</td>
+    </tr>
+    <tr>
+      <td>otype</td>
+      <td>varchar(20)</td>
+      <td>NULL</td>
+      <td>オプションの型.
+      <a title="Nucleus Plugin API - Option types" href="plugins.html#options">プラグインの文書を参照</a>.</td>
+    </tr>
+    <tr>
+      <td>odef</td>
+      <td>text</td>
+      <td></td>
+      <td>オプションの既定値</td>
+    </tr>
+    <tr>
+      <td>oextra</td>
+      <td>text</td>
+      <td></td>
+      <td>select option型などで使う、その他のデータ</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_skin" name="nucleus_skin"></a>
+<h1>nucleus_skinテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull primary foreign"><a href="#nucleus_skin_desc">sdesc</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>skin_descへの参照</td>
+    </tr>
+    <tr>
+      <td class="notnull primary">stype</td>
+      <td>varchar(20)</td>
+      <td>''</td>
+      <td>スキン・パートの型。以下のいずれかを取る
+        <ul>
+          <li><code>index</code></li>
+          <li><code>item</code></li>
+          <li><code>archive</code></li>
+          <li><code>archivelist</code></li>
+          <li><code>search</code></li>
+          <li><code>error</code></li>
+          <li><code>member</code></li>
+          <li><code>imagepopup</code></li>
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td class="notnull">scontent</td>
+      <td>text</td>
+      <td></td>
+      <td>スキン・パートの内容</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_skin_desc" name="nucleus_skin_desc"></a>
+<h1>nucleus_skin_descテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary">sdnumber</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>スキンのID</td>
+    </tr>
+    <tr>
+      <td class="notnull unique">sdname</td>
+      <td>varchar(20)</td>
+      <td>''</td>
+      <td>スキンの名前</td>
+    </tr>
+    <tr>
+      <td>sddesc</td>
+      <td>varchar(200)</td>
+      <td>NULL</td>
+      <td>スキンの説明</td>
+    </tr>
+    <tr>
+      <td class="notnull">sdtype</td>
+      <td>varchar(40)</td>
+      <td>'text/html'</td>
+      <td>スキンのmimeタイプ</td>
+    </tr>
+    <tr>
+      <td class="notnull">sdincmode</td>
+      <td>varchar(10)</td>
+      <td>'normal'</td>
+      <td>Includeモード。以下のいずれかを取る
+        <ul>
+          <li><code>normal</code></li>
+          <li><code>skindir</code></li>
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td class="notnull">sdincpref</td>
+      <td>varchar(50)</td>
+      <td>''</td>
+      <td>ファイルをIncludeするときのプリフィックス</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_template" name="nucleus_template"></a>
+<h1>nucleus_templateテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull primary foreign"><a href="#nucleus_template_desc">tdesc</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>template_descへの参照</td>
+    </tr>
+    <tr>
+      <td class="notnull primary">tpartname</td>
+      <td>varchar(20)</td>
+      <td>''</td>
+      <td>テンプレート・パートの名前。以下のいずれかを取る<ul>
+          <li>ARCHIVELIST_FOOTER</li>
+          <li>ARCHIVELIST_HEADER</li>
+          <li>ARCHIVELIST_LISTITEM</li>
+          <li>CATLIST_FOOTER</li>
+          <li>CATLIST_HEADER</li>
+          <li>CATLIST_LISTITEM</li>
+          <li>COMMENTS_BODY</li>
+          <li>COMMENTS_MANY</li>
+          <li>COMMENTS_NONE</li>
+          <li>COMMENTS_ONE</li>
+          <li>COMMENTS_TOOMUCH</li>
+          <li>DATE_HEADER</li>
+          <li>EDITLINK</li>
+          <li>FORMAT_DATE</li>
+          <li>FORMAT_TIME</li>
+          <li>IMAGE_CODE</li>
+          <li>ITEM</li>
+          <li>LOCALE</li>
+          <li>MEDIA_CODE</li>
+          <li>MORELINK</li>
+          <li>POPUP_CODE</li>
+          <li>SEARCH_HIGHLIGHT</li>
+          <li>SEARCH_NOTHINGFOUND</li>
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td class="notnull">tcontent</td>
+      <td>text</td>
+      <td></td>
+      <td>テンプレート・パートの内容</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_template_desc" name="nucleus_template_desc"></a>
+<h1>nucleus_template_descテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull autoinc primary unique">tdnumber</td>
+      <td>int(11)</td>
+      <td></td>
+      <td>テンプレートのID</td>
+    </tr>
+    <tr>
+      <td class="notnull unique">tdname</td>
+      <td>varchar(20)</td>
+      <td>''</td>
+      <td>テンプレートの名前</td>
+    </tr>
+    <tr>
+      <td>tddesc</td>
+      <td>varchar(200)</td>
+      <td>NULL</td>
+      <td>テンプレートの説明</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_actionlog" name="nucleus_actionlog"></a>
+<h1>nucleus_actionlogテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p>ログインやエラーなどのログを記録する</p>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th></th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull">timestamp</td>
+      <td>datetime</td>
+      <td>'0000-00-00 00:00:00'</td>
+      <td>アクションの日時</td>
+    </tr>
+    <tr>
+      <td class="notnull">message</td>
+      <td>varchar(255)</td>
+      <td>''</td>
+      <td>アクションのメッセージ</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_config" name="nucleus_config"></a>
+<h1>nucleus_configテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p>Nucleusは、いくつかのグローバル・オプションを<code>nucleus_config</code>テーブルに記憶する。これは<code>$CONF['OptionName']</code> 
+でアクセスできる。</p>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull primary">name</td>
+      <td>varchar(20)</td>
+      <td>''</td>
+      <td>オプションの名前</td>
+    </tr>
+    <tr>
+      <td>value</td>
+      <td>varchar(128)</td>
+      <td>NULL</td>
+      <td>オプションの値</td>
+    </tr>
+  </tbody>
+</table>
+<a name="nucleus_config_options" id="nucleus_config_options"></a>
+<h2>使用できるオプション</h2>
+<p>使用できるオプションのオーバビューを以下に示す。</p>
+<p>はい/いいえタイプのオプションは1/0 (1=はい/真, 0=いいえ/偽)で示す。</p>
+<table width="901">
+  <tbody>
+    <tr>
+      <th width="149">Name</th>
+      <th width="163">既定値 Value</th>
+      <th width="575">説明</th>
+    </tr>
+    <tr>
+      <td class="foreign" width="149"><a href="#nucleus_blog">DefaultBlog</a></td>
+      <td width="163">1</td>
+      <td width="575">デフォルトのBlogのID。Blogが明示的に記されていないときに使うもの</td>
+    </tr>
+    <tr>
+      <td width="149">AdminEmail</td>
+      <td width="163"></td>
+      <td width="575">管理者のメール・アドレス</td>
+    </tr>
+    <tr>
+      <td width="149">IndexURL</td>
+      <td width="163"></td>
+      <td width="575">サイトのURL。最後に/が付く必要がある</td>
+    </tr>
+    <tr>
+      <td width="149">Language</td>
+      <td width="163">english</td>
+      <td width="575">デフォルトの言語ファイル名。「言語ファイル名.php」ファイルがlanguageディレクトリに必要</td>
+    </tr>
+    <tr>
+      <td width="149">SessionCookie</td>
+      <td width="163">0</td>
+      <td width="575">寿命1ヶ月のクッキーの代わりにセッション・クッキーを使うかどうか</td>
+    </tr>
+    <tr>
+      <td width="149">AllowMemberCreate</td>
+      <td width="163">0</td>
+      <td width="575">ビジターにアカウント作成を許すかどうか</td>
+    </tr>
+    <tr>
+      <td width="149">AllowMemberMail</td>
+      <td width="163">1</td>
+      <td width="575">メンバー間でフォームを使ったメッセージ転送を許すかどうか(メール・アドレスは表示されない)</td>
+    </tr>
+    <tr>
+      <td width="149">SiteName</td>
+      <td width="163"></td>
+      <td width="575">サイトの名前</td>
+    </tr>
+    <tr>
+      <td width="149">AdminURL</td>
+      <td width="163"></td>
+      <td width="575">管理エリアのURL。最後に/が付く必要がある</td>
+    </tr>
+    <tr>
+      <td width="149">NewMemberCanLogon</td>
+      <td width="163">1</td>
+      <td width="575">登録されたばかりのユーザーがログインできるかどうか。できないばあい,管理者が「can login」オプションを最初に変更する必要がある</td>
+    </tr>
+    <tr>
+      <td class="toremove" width="149">DisableSite</td>
+      <td width="163">0</td>
+      <td width="575">サイトが無効状態になっているかどうか。無効状態の場合、管理者だけがアクセスできる。他のすべてのアクセスは<code>DisableSiteURL</code>にリダイレクトされる</td>
+    </tr>
+    <tr>
+      <td class="toremove" width="149">DisableSiteURL</td>
+      <td width="163"></td>
+      <td width="575">サイトが無効状態のときにリダイレクトされるURL</td>
+    </tr>
+    <tr>
+      <td class="toremove" width="149">LastVisit</td>
+      <td width="163">0</td>
+      <td width="575">「最後の訪問」のクッキーを保存するかどうか</td>
+    </tr>
+    <tr>
+      <td width="149">MediaURL</td>
+      <td width="163"></td>
+      <td width="575">メディア・フォルダのURL。最後に/が付く</td>
+    </tr>
+    <tr>
+      <td width="149">AllowedTypes</td>
+      <td width="163">jpg, jpeg, gif, mpg, mpeg, avi, mov, mp3, swf, png</td>
+      <td width="575">メディア・フォルダにアップロードを許すファイル型</td>
+    </tr>
+    <tr>
+      <td width="149">AllowLoginEdit</td>
+      <td width="163">0</td>
+      <td width="575">メンバーにログイン名とパスワードの変更を許すかどうか</td>
+    </tr>
+    <tr>
+      <td width="149">AllowUpload</td>
+      <td width="163">1</td>
+      <td width="575">ファイルのアップロードを許すかどうか</td>
+    </tr>
+    <tr>
+      <td class="toremove" width="149">DisableJsTools</td>
+      <td width="163">2</td>
+      <td width="575">JavaScriptツールバーの形式<ul>
+          <li>0: 多機能型 (IE)</li>
+          <li>1: ツールバーを無効にする</li>
+          <li>2: シンプル型(Gecko)</li>
+        </ul>
+      </td>
+    </tr>
+    <tr>
+      <td width="149">CookiePath</td>
+      <td width="163">/</td>
+      <td width="575">クッキーをセットするパス</td>
+    </tr>
+    <tr>
+      <td>CookiePrefix</td>
+      <td></td>
+      <td>クッキーの名称に追加するプレフィクス文字列。複数の Nucleus を同じドメインにインストールする際に便利で、別の Nucleus で同じセッションが適用されることを予防する。
+    </tr>
+    <tr>
+      <td width="149">CookieDomain</td>
+      <td width="163"></td>
+      <td width="575">クッキーをセットするドメイン</td>
+    </tr>
+    <tr>
+      <td width="149">CookieSecure</td>
+      <td width="163">0</td>
+      <td width="575">クッキーの通信にHTTPSを使うかどうか</td>
+    </tr>
+    <tr>
+      <td width="149">MediaPrefix</td>
+      <td width="163">1</td>
+      <td width="575">アップロードしたファイル名に日付を加えるかどうか</td>
+    </tr>
+    <tr>
+      <td width="149">MaxUploadSize</td>
+      <td width="163">1048576</td>
+      <td width="575">アップロードするファイルの最大値(バイト数)</td>
+    </tr>
+    <tr>
+      <td width="149">NonmemberMail</td>
+      <td width="163">0</td>
+      <td width="575">メンバー以外の人にメンバーへのメールを許すかどうか</td>
+    </tr>
+    <tr>
+      <td width="149">PluginURL</td>
+      <td width="163"></td>
+      <td width="575">プラグイン・フォルダのURL。/で終わる必要がある</td>
+    </tr>
+    <tr>
+      <td width="149">ProtectMemNames</td>
+      <td width="163">1</td>
+      <td width="575">
+      このオプションが有効だと、ログインしていない人はメンバーと同じ名前でコメントを残せなくなる。こうすることによって、ゲストがメンバーのふりをすることを避けられる</td>
+    </tr>
+    <tr>
+      <td class="foreign" width="149"><a href="#nucleus_skin_desc">BaseSkin</a></td>
+      <td width="163">1</td>
+      <td width="575">
+      Nucleusに、自動的にスキンが決まらないときに、どのスキンを使うかを指定する。スキンのパートが空だったり、ブログやスキンが洗濯されていない場合に起こる</td>
+    </tr>
+    <tr>
+      <td width="149">SkinsURL</td>
+      <td width="163"></td>
+      <td width="575">スキン・フォルダのURL。最後に/が付く必要がある</td>
+    </tr>
+    <tr>
+      <td width="149">ActionURL</td>
+      <td width="163"></td>
+      <td width="575">action.phpがあるURL.</td>
+    </tr>
+    <tr>
+      <td width="149">URLMode</td>
+      <td width="163">normal</td>
+      <td width="575"> <code>normal</code>か<code>pathinfo</code></td>
+    </tr>
+    <tr>
+      <td width="149">DatabaseVersion</td>
+      <td width="163">250</td>
+      <td width="575">データベースの構造が更新された最後のNucleusのバージョン番号</td>
+    </tr>
+  </tbody>
+</table>
+
+<a id="nucleus_tickets" name="nucleus_tickets"></a>
+<h1>nucleus_ticketsテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="トップに戻る" /></a></h1>
+
+<p>Nucleus は <code>nucleus_tickets</code> を使用することによりセキュリティ上の問題を予防する。特に、管理エリアにおいて諸設定やデータベースの内容に影響する場合、チケットを必須とする。チケットは管理ページがリクエストされた時とフォームから呼び出された時に発行される。チケットは発行から 1時間後に破棄される。</p>
+
+<table>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull primary">ticket</td>
+      <td>varchar(40)</td>
+      <td></td>
+      <td>特定の単一ユーザに割り当てられるユニークなチケット。一般に、チケットは次のような形になる: <code>65303a785423b4d53c7b3e6579766f26</code></td>
+    </tr>
+    <tr>
+      <td class="notnull foreign primary"><a href="#nucleus_member">member</a></td>
+      <td>int(11)</td>
+      <td></td>
+      <td>当該チケットが有効適用されるメンバー。</td>
+    </tr>
+    <tr>
+      <td class="notnull">ctime</td>
+      <td>datetime</td>
+      <td></td>
+      <td>チケットの発行日時。チケットの有効期限は 1時間である。</td>
+    </tr>
+</table>
+
+
+<a id="nucleus_activation" name="nucleus_activation"></a>
+<h1>nucleus_activationテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="トップに戻る" /></a></h1>
+
+<p>新しいメンバーが登録された時点では、そのメンバーアカウントがアクティベートされるまで Nucleus はログインを許可しない。アクティベートのためのリンクを含むメールが送信され、これによってアクティベートすることができる。<code>nucleus_activation</code>テーブルはアクティベートの進捗状況を追跡する。</p>
+
+<table>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull primary">vkey</td>
+      <td>varchar(40)</td>
+      <td></td>
+      <td>アクティベートキー。このキーはメンバーのアクティベートコードに渡される。一般的に、キーは次のような形になる: <code>41cf637d4fbeeff954b4ca70b8bde9dd</code></td>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_member">vmember</a></td>
+      <td>int(11)</td>
+      <td></td>
+      <td>アクティベートの必要があるメンバー。</td>
+    </tr>
+    <tr>
+      <td class="notnull">vtime</td>
+      <td>datetime</td>
+      <td></td>
+      <td>アクティベートキーが発行された日時。アクティベートキーの有効期間は 2日間である。</td>
+    </tr>
+    <tr>
+      <td class="notnull">vtype</td>
+      <td>varchar(15)</td>
+      <td></td>
+      <td>アクティベートの種別。
+          <ul>
+            <li><code>forgot</code>: パスワードを忘れたメンバー。</li>
+            <li><code>register</code>: 新しく登録されたメンバー。</li>
+            <li><code>addresschange</code>: メールアドレスを変更したメンバー。</li>
+          </ul>
+      </td>
+    </tr>
+    <tr>
+      <td class="notnull">vextra</td>
+      <td>varchar(128)</td>
+      <td></td>
+      <td>追加的な情報。アクティベート種別が <code>addresschange</code> の場合、ここには <code>oldemailaddress/x</code> として、x には 0 または 1 の値が入る。x は <a href="#nucleus_member">member</a>テーブルにある <code>mcanlogin</code> の値を参照する。(アクティベートが完全に終了するまで、このユーザはログインできない)</td>
+    </tr>
+</table>
+
+<a id="nucleus_karma" name="nucleus_karma"></a>
+<h1>nucleus_karmaテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p class="toremove">このテーブルは将来はなくなる可能性が高い。同じ機能を提供するプラグインに譲るためだ。</p>
+<p>この表は投票に使われたIPアドレスを記憶しておく。こうすることで一つのIPアドレスからは1票しか入れられなくなる</p>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_item">itemid</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>アイテムのID</td>
+    </tr>
+    <tr>
+      <td class="notnull">ip</td>
+      <td>char(15)</td>
+      <td>''</td>
+      <td>投票者のIPアドレス</td>
+    </tr>
+  </tbody>
+</table>
+<a id="nucleus_ban" name="nucleus_ban"></a>
+<h1>nucleus_banテーブル<a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15"></a></h1>
+<p class="toremove">このテーブルは将来のNucleusではなくなる可能性が高い。同じ機能を提供するプラグインに譲るためだ。</p>
+<p>コメントやカルマ投票を禁止するIPアドレスを記憶</p>
+<table>
+  <tbody>
+    <tr>
+      <th>カラム名</th>
+      <th>型</th>
+      <th>既定値</th>
+      <th>説明</th>
+    </tr>
+    <tr>
+      <td class="notnull">iprange</td>
+      <td>varchar(15)</td>
+      <td>''</td>
+      <td>IPアドレスの範囲。アドレス単独でもいいし,一部(左から)でもいい。一部の場合は範囲を示す</td>
+    </tr>
+    <tr>
+      <td class="notnull">reason</td>
+      <td>varchar(255)</td>
+      <td>''</td>
+      <td>禁止の理由を示すメッセージ。コメントやカルマ投票を試みたときに表示される</td>
+    </tr>
+    <tr>
+      <td class="notnull foreign"><a href="#nucleus_blog">blogid</a></td>
+      <td>int(11)</td>
+      <td>'0'</td>
+      <td>禁止を有効にするBlogのID</td>
+    </tr>
+  </tbody>
+</table>
+
+</body>
+
+</html>
+
index 68f1b03..e0b89db 100755 (executable)
-body {\r
-       background-color: #fff;\r
-       color: #000;\r
-       font-family: verdana, arial;\r
-       font-size: small;\r
-}\r
-\r
-@media screen {\r
-       body {\r
-               margin-left: 10%;\r
-               margin-right: 10%;\r
-       }\r
-}\r
-\r
-@media print {\r
-       pre, .note, td, th {\r
-               border: 1px dashed gray;\r
-       }\r
-}\r
-\r
-img {\r
-       border: none;\r
-}\r
-\r
-a:link, a:visited {\r
-       color: #1D3565; \r
-       font-weight: bold;\r
-       text-decoration: none;\r
-}\r
-a: hover {\r
-       text-decoration: underline;\r
-}\r
-\r
-.heading {\r
-       text-align: center;\r
-       font-size: xx-large;\r
-       font-weight: bold;\r
-       color: gray;    \r
-}\r
-\r
-.heading i {\r
-       position: absolute;\r
-       top: 5px;\r
-       right: 5px;\r
-       font-size: small;\r
-       font-style: normal;\r
-       font-weight: normal;\r
-}\r
-\r
-p:first-letter {\r
-       font-size: large;\r
-}\r
-\r
-p {\r
-       text-indent: 20px;\r
-}\r
-\r
-h1 {\r
-       border-bottom: 1px dotted gray;\r
-       font-size: x-large;\r
-       color: #596d9d;\r
-}\r
-\r
-h2 {\r
-       color: gray;\r
-       font-size: large;\r
-       margin-left: 20px;\r
-       text-indent: 10px;\r
-       border-bottom: 1px solid #ddd;\r
-}\r
-\r
-pre, .note, .faq .answer {\r
-       background-color: #ddd;\r
-       padding: 10px;\r
-       font-size: small;\r
-}\r
-\r
-.screenshot {\r
-       text-align: center;\r
-       background-color: #ddd;\r
-       padding: 10px;\r
-}\r
-\r
-.faq .question {\r
-       font-weight: bold;\r
-       margin-bottom: 0px;\r
-}\r
-\r
-.faq .answer {\r
-\r
-}\r
-\r
-.faq {\r
-       margin-bottom: 20px;\r
-}\r
-\r
-table {\r
-       border: none;\r
-}\r
-\r
-th {\r
-       background-color: linen;\r
-       font-size: medium;\r
-}\r
-\r
-th, td {\r
-       padding: 5px;\r
-}\r
-\r
-td {\r
-       background-color: #dddddd;\r
-       font-size: small;\r
-       vertical-align: top;\r
-       text-align: left;\r
-}\r
-\r
-input, select, option, textarea {\r
-       background-color: transparent;\r
-}\r
-\r
-.deprecated {\r
-       border: 3px solid red;\r
-       padding: 5px;\r
-       font-size: medium;\r
-}\r
-\r
-tt, code, samp {\r
-       font-size: small;\r
-}\r
-\r
-.warning {\r
-       color: red;\r
-}\r
-.ok {\r
-       color: green;\r
-}\r
-\r
-acronym, abbr {\r
-       border-bottom: 1px dotted gray;\r
-       cursor: help;\r
-}\r
+body {
+       background-color: #fff;
+       color: #000;
+       font-family: verdana, arial;
+       font-size: small;
+}
+
+@media screen {
+       body {
+               margin-left: 10%;
+               margin-right: 10%;
+       }
+}
+
+@media print {
+       pre, .note, td, th {
+               border: 1px dashed gray;
+       }
+}
+
+img {
+       border: none;
+}
+
+a:link, a:visited {
+       color: #1D3565; 
+       font-weight: bold;
+       text-decoration: none;
+}
+a: hover {
+       text-decoration: underline;
+}
+
+.heading {
+       text-align: center;
+       font-size: xx-large;
+       font-weight: bold;
+       color: gray;    
+}
+
+.heading i {
+       position: absolute;
+       top: 5px;
+       right: 5px;
+       font-size: small;
+       font-style: normal;
+       font-weight: normal;
+}
+
+p:first-letter {
+       font-size: large;
+}
+
+p {
+       text-indent: 20px;
+}
+
+h1 {
+       border-bottom: 1px dotted gray;
+       font-size: x-large;
+       color: #596d9d;
+}
+
+h2 {
+       color: gray;
+       font-size: large;
+       margin-left: 20px;
+       text-indent: 10px;
+       border-bottom: 1px solid #ddd;
+}
+
+pre, .note, .faq .answer {
+       background-color: #ddd;
+       padding: 10px;
+       font-size: small;
+}
+
+.screenshot {
+       text-align: center;
+       background-color: #ddd;
+       padding: 10px;
+}
+
+.faq .question {
+       font-weight: bold;
+       margin-bottom: 0px;
+}
+
+.faq .answer {
+
+}
+
+.faq {
+       margin-bottom: 20px;
+}
+
+table {
+       border: none;
+}
+
+th {
+       background-color: linen;
+       font-size: medium;
+}
+
+th, td {
+       padding: 5px;
+}
+
+td {
+       background-color: #dddddd;
+       font-size: small;
+       vertical-align: top;
+       text-align: left;
+}
+
+input, select, option, textarea {
+       background-color: transparent;
+}
+
+.deprecated {
+       border: 3px solid red;
+       padding: 5px;
+       font-size: medium;
+}
+
+tt, code, samp {
+       font-size: small;
+}
+
+.warning {
+       color: red;
+}
+.ok {
+       color: green;
+}
+
+acronym, abbr {
+       border-bottom: 1px dotted gray;
+       cursor: help;
+}
index e71bca8..6b76072 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: xmlrpc.html,v 1.5 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - XML-RPC インターフェイス</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="heading">\r
-XML-RPC インターフェイス\r
-</div>\r
-\r
-<h1>はじめに</h1>\r
-\r
-<p>\r
-<a href="index.html">開発者マニュアルに戻る</a>\r
-</p>\r
-\r
-<p>\r
-このドキュメントはNucleusが提供するXML-RPCインターフェイスと、生成される<a href="#errorcodes">エラーメッセージ</a>についての解説です。この仕様は将来変更される可能性があることに注意して下さい。\r
-</p>\r
-\r
-<div class="note">\r
-NucleusにおけるXML-RPCインターフェイスのURLは以下のようになります:\r
-<br />\r
-<b>http://www.yourserver.com/yourpath/nucleus/xmlrpc/server.php</b>\r
-\r
-</div>\r
-\r
-<a name="bloggerApi" id="bloggerApi"></a>\r
-<h1>Blogger API (XML-RPC)</h1>\r
-\r
-<p>\r
-Nucleusは<a href="http://www.blogger.com/developers/api/1_docs/">Blogger API</a>に対応しています。これはBloggerと通信するツールやサービスに対して、Nucleusとも通信できるようにするものです。Nucleusの仕様により、いくつかのパラメータに若干の違いがあります。これについては後述の説明を参照して下さい。呼び出しや応答のメソッドは、もちろん、Bloggerのものと同じ構造になっています。\r
-</p>\r
-\r
-<p>\r
-ここに挙げたリストは利用できるメソッドの一覧です。クリックするとさらに詳しい情報を得ることができます(それぞれのリンク先はBlogger APIの仕様書やその<a href="http://groups.yahoo.com/group/bloggerDev">メーリングリスト</a>です)。\r
-</p>\r
-\r
-<ul>\r
-       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_newPost.html">blogger.newPost</a></b></li>\r
-       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_editPost.html">blogger.editPost</a></b></li>\r
-\r
-       <li><b><a href="http://groups.yahoo.com/group/bloggerDev/message/296">blogger.getPost</a></b></li>\r
-       <li><b><a href="http://groups.yahoo.com/group/bloggerDev/message/147">blogger.deletePost</a></b></li>\r
-       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_getUsersBlogs.html">blogger.getUsersBlogs</a></b></li>\r
-\r
-       <li><b><a href="http://groups.yahoo.com/group/bloggerDev/message/225">blogger.getRecentPosts</a></b></li>\r
-       <li><b><a href="http://groups.yahoo.com/group/bloggerDev/message/315">blogger.getUserInfo</a></b></li>\r
-       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_getTemplate.html">blogger.getTemplate</a></b></li>\r
-       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_setTemplate.html">blogger.setTemplate</a></b></li>\r
-</ul>\r
-\r
-\r
-<p>\r
-Nucleusは内部的に異なる実装を用いているため、パラメータの扱いに若干の違いがあります。概説すると:\r
-\r
-</p>\r
-\r
-<ul>\r
-       <li>Appkeyは無視されます。</li>\r
-       <li>Nucleusの場合は本文のあとにタイトルとカテゴリが続きます。Bloggerでは 'コンテンツ' と呼ばれるは本文だけが存在します。これらの追加されたパーツを利用可能にするため、<tt>&lt;title&gt;</tt>や<tt>&lt;category&gt;</tt>をNucleusに送るコンテンツに含めることができます。これらのタグは getRecentPosts の呼び出しでのみ追加されます。</li>\r
-       <li>Bloggerで 'templates' と呼ばれているものに相当するのが、Nucleusの 'スキン' です。ひとつのシステムに複数のスキンを設定でき、それぞれのスキンをblogごとに使い分けることができます。メソッド blogger.setTemplate と blogger.getTemplate は、Nucleusのblog設定で選択されているblogのデフォルトスキンに影響します。'main' と 'archiveIndex' の二種類のテンプレートは、Nucleusの 'メインの目次ページ' と '月別アーカイブ一覧ページ' に相当します。(<em>訳注: Blogger の仕様がわからないので、この項不確か</em>)</li>\r
-\r
-       <li>項目 <tt>publish</tt> は、追加した項目がデフォルトでドラフトになるか公開になるかを決める箇所です。<tt>blogger.editPost</tt> を使う場合は、<tt>publish</tt> がドラフトと公開のどちらになっていても無視されます。</li>\r
-       <li><tt>getUserInfo</tt> を呼び出した場合、返値のうち 'lastname' は空になり、'firstname' にフルネームが入ります。これはNucleusが姓と名を分けない仕様になっていることに由来します。</li>\r
-\r
-       <li>メソッド <tt>getRecentPostst</tt> は <tt>authorName</tt> と <tt>title</tt> を追加パラメータとして返します。Bloggerもまたこれらの値を返します(この仕様は文書化されていないようですが)。</li>\r
-</ul>\r
-\r
-<a name="metaWeblogApi" id="metaWeblogApi"></a>\r
-<h1><a name="metaweblog"></a>metaWeblog API</h1>\r
-\r
-<p>\r
-Nucleus v1.1以降、<a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a>もサポートされました。これはBlogger APIの拡張版です。 \r
-</p>\r
-\r
-<p>\r
-Nucleus v2.5では <code>newMediaObject</code> と <code>getRecentPosts</code> の二つのメソッドにも対応しました(これらは最初のmetaWeblog仕様には存在しませんでした)。\r
-</p>\r
-\r
-<p>\r
-利用可能なメソッド一覧は以下の通りです(<a href="http://www.xmlrpc.com/metaWeblogApi">specification</a>に詳しい情報があります):\r
-</p>\r
-\r
-<ul>\r
-       <li>metaWeblog.newPost</li>\r
-       <li>metaWeblog.editPost</li>    \r
-       <li>metaWeblog.getPost</li>     \r
-       <li>metaWeblog.getCategories</li>       \r
-       <li>metaWeblog.newMediaObject (v2.5)</li>\r
-       <li>metaWeblog.getRecentPosts (v2.5)</li>       \r
-\r
-</ul>\r
-\r
-<a name="mtApi" id="mtApi"></a>\r
-<h1>Movable Type API</h1>\r
-\r
-<p>v2.5から、Nucleusは<a href="http://www.movabletype.org/docs/mtmanual_programmatic.html">Movable Type API</a>からのメソッドをサポートするようになりました。</p>\r
-\r
-<p>利用できるメソッドの一覧を以下に示します:</p>\r
-\r
-<ul>\r
-       <li>mt.supportedMethods</li>\r
-\r
-       <li>mt.supportedTextFilters</li>\r
-       <li>mt.publishPost</li>\r
-       <li>mt.getCategoryList</li>\r
-       <li>mt.getPostCategories</li>\r
-       <li>mt.setPostCategories</li>\r
-       <li>mt.getRecentPostTitles</li>\r
-\r
-       <li>mt.getTrackbackPings</li>\r
-</ul>\r
-\r
-<p>いくつかのノート:</p>\r
-\r
-<ul>\r
-       <li>Nucleusはアイテムひとつにつき一つだけカテゴリを設定することができます。これは 'primary' 以外のカテゴリ設定項目はすべて無視されることを意味します。</li>\r
-       <li>トラックバックはNucleusのコアではサポート対象外です(プラグインの導入によって利用することができるようになります)。このため、<code>mt.getTrackbackPings</code> のデフォルトの返値は空です。</li>\r
-\r
-       <li>Nucleusはテキストフィルタを実装していません。このため、<code>mt.getSupportedTextFilters</code> は空の値を返します。</li>\r
-</ul>\r
-\r
-<h1><a name="errorcodes"></a>エラーコード</h1>\r
-\r
-<p>\r
-以下に示すのは、それぞれのメソッドから得られるエラーの種類です:\r
-</p>\r
-\r
-<table>\r
-       <tr>\r
-\r
-               <th>エラーコード</th>\r
-               <th>エラーメッセージ</th>\r
-       </tr>\r
-       <tr>\r
-               <td>801</td>\r
-               <td>Login Error <br />\r
-               ログインエラー(ユーザ名とパスワードの組み合わせが正しくないと推測されます)</td>\r
-       </tr>\r
-\r
-       <tr>\r
-               <td>802</td>\r
-               <td>No Such Blog<br />\r
-               指定されたBlogは存在しません</td>\r
-       </tr>\r
-       <tr>\r
-               <td>803</td>\r
-               <td>Not a Team Member<br />\r
-               チームに登録されていません</td>\r
-\r
-       </tr>\r
-       <tr>\r
-               <td>804</td>\r
-               <td>Cannot add Empty Items<br />\r
-               空のアイテムは投稿できません</td>\r
-       </tr>\r
-       <tr>\r
-               <td>805</td>\r
-\r
-               <td>Amount parameter must be in range 1..20<br />\r
-               パラメータの値は 1..20 の範囲でなければなりません(<i>getRecentItems</i></td>\r
-       </tr>\r
-       <tr>\r
-               <td>806</td>\r
-               <td>No Such Item<br />\r
-               指定されたアイテムは存在しません</td>\r
-       </tr>\r
-\r
-       <tr>\r
-               <td>807</td>\r
-               <td>Not Allowed to Alter Item<br />\r
-               アイテム追加の権限がありません</td>\r
-       </tr>\r
-       <tr>\r
-               <td>808</td>\r
-               <td>Invalid media type<br />\r
-               メディアタイプが不正です</td>\r
-\r
-       </tr>   \r
-       <tr>\r
-               <td>809</td>\r
-               <td>File is too large<br />\r
-               ファイルが大きすぎます(最大のアップロードファイルサイズ)</td>\r
-       </tr>           \r
-       <tr>\r
-               <td>810</td>\r
-               <td>Other error on newMediaObject<br />\r
-               newMediaObject で予期せぬエラーが発生しました(何が起きたのかもう少し情報が含まれるでしょう)</td>\r
-\r
-       </tr>\r
-       <tr>\r
-               <td><i>その他のコード &lt; 100</i></td>\r
-               <td>Errors encountered by the Useful Inc. XML-RPC implementation<br />\r
-               Usefil Inc. XML-RPC の実行でエラーが発生しました</td>\r
-       </tr>\r
-       <tr>\r
-               <td><i>その他のコード &gt; 100</i></td>\r
-\r
-               <td>Errors encountered by the XML parser<br />\r
-               XML パーサでエラーが発生しました</td>\r
-       </tr>\r
-\r
-\r
-</table>\r
-\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: xmlrpc.html,v 1.6 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: xmlrpc.html,v 1.5.2.1 2005/09/09 07:34:26 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - XML-RPC インターフェイス</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<div class="heading">
+XML-RPC インターフェイス
+</div>
+
+<h1>はじめに</h1>
+
+<p>
+<a href="index.html">開発者マニュアルに戻る</a>
+</p>
+
+<p>
+このドキュメントはNucleusが提供するXML-RPCインターフェイスと、生成される<a href="#errorcodes">エラーメッセージ</a>についての解説です。この仕様は将来変更される可能性があることに注意して下さい。
+</p>
+
+<div class="note">
+NucleusにおけるXML-RPCインターフェイスのURLは以下のようになります:
+<br />
+<b>http://www.yourserver.com/yourpath/nucleus/xmlrpc/server.php</b>
+
+</div>
+
+<a name="bloggerApi" id="bloggerApi"></a>
+<h1>Blogger API (XML-RPC)</h1>
+
+<p>
+Nucleusは<a href="http://www.blogger.com/developers/api/1_docs/">Blogger API</a>に対応しています。これはBloggerと通信するツールやサービスに対して、Nucleusとも通信できるようにするものです。Nucleusの仕様により、いくつかのパラメータに若干の違いがあります。これについては後述の説明を参照して下さい。呼び出しや応答のメソッドは、もちろん、Bloggerのものと同じ構造になっています。
+</p>
+
+<p>
+ここに挙げたリストは利用できるメソッドの一覧です。クリックするとさらに詳しい情報を得ることができます(それぞれのリンク先はBlogger APIの仕様書やその<a href="http://groups.yahoo.com/group/bloggerDev">メーリングリスト</a>です)。
+</p>
+
+<ul>
+       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_newPost.html">blogger.newPost</a></b></li>
+       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_editPost.html">blogger.editPost</a></b></li>
+
+       <li><b><a href="http://groups.yahoo.com/group/bloggerDev/message/296">blogger.getPost</a></b></li>
+       <li><b><a href="http://groups.yahoo.com/group/bloggerDev/message/147">blogger.deletePost</a></b></li>
+       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_getUsersBlogs.html">blogger.getUsersBlogs</a></b></li>
+
+       <li><b><a href="http://groups.yahoo.com/group/bloggerDev/message/225">blogger.getRecentPosts</a></b></li>
+       <li><b><a href="http://groups.yahoo.com/group/bloggerDev/message/315">blogger.getUserInfo</a></b></li>
+       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_getTemplate.html">blogger.getTemplate</a></b></li>
+       <li><b><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_setTemplate.html">blogger.setTemplate</a></b></li>
+</ul>
+
+
+<p>
+Nucleusは内部的に異なる実装を用いているため、パラメータの扱いに若干の違いがあります。概説すると:
+
+</p>
+
+<ul>
+       <li>Appkeyは無視されます。</li>
+       <li>Nucleusの場合は本文のあとにタイトルとカテゴリが続きます。Bloggerでは 'コンテンツ' と呼ばれるは本文だけが存在します。これらの追加されたパーツを利用可能にするため、<tt>&lt;title&gt;</tt>や<tt>&lt;category&gt;</tt>をNucleusに送るコンテンツに含めることができます。これらのタグは getRecentPosts の呼び出しでのみ追加されます。</li>
+       <li>Bloggerで 'templates' と呼ばれているものに相当するのが、Nucleusの 'スキン' です。ひとつのシステムに複数のスキンを設定でき、それぞれのスキンをblogごとに使い分けることができます。メソッド blogger.setTemplate と blogger.getTemplate は、Nucleusのblog設定で選択されているblogのデフォルトスキンに影響します。'main' と 'archiveIndex' の二種類のテンプレートは、Nucleusの 'メインの目次ページ' と '月別アーカイブ一覧ページ' に相当します。(<em>訳注: Blogger の仕様がわからないので、この項不確か</em>)</li>
+
+       <li>項目 <tt>publish</tt> は、追加した項目がデフォルトでドラフトになるか公開になるかを決める箇所です。<tt>blogger.editPost</tt> を使う場合は、<tt>publish</tt> がドラフトと公開のどちらになっていても無視されます。</li>
+       <li><tt>getUserInfo</tt> を呼び出した場合、返値のうち 'lastname' は空になり、'firstname' にフルネームが入ります。これはNucleusが姓と名を分けない仕様になっていることに由来します。</li>
+
+       <li>メソッド <tt>getRecentPostst</tt> は <tt>authorName</tt> と <tt>title</tt> を追加パラメータとして返します。Bloggerもまたこれらの値を返します(この仕様は文書化されていないようですが)。</li>
+</ul>
+
+<a name="metaWeblogApi" id="metaWeblogApi"></a>
+<h1><a name="metaweblog"></a>metaWeblog API</h1>
+
+<p>
+Nucleus v1.1以降、<a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a>もサポートされました。これはBlogger APIの拡張版です。 
+</p>
+
+<p>
+Nucleus v2.5では <code>newMediaObject</code> と <code>getRecentPosts</code> の二つのメソッドにも対応しました(これらは最初のmetaWeblog仕様には存在しませんでした)。
+</p>
+
+<p>
+利用可能なメソッド一覧は以下の通りです(<a href="http://www.xmlrpc.com/metaWeblogApi">specification</a>に詳しい情報があります):
+</p>
+
+<ul>
+       <li>metaWeblog.newPost</li>
+       <li>metaWeblog.editPost</li>    
+       <li>metaWeblog.getPost</li>     
+       <li>metaWeblog.getCategories</li>       
+       <li>metaWeblog.newMediaObject (v2.5)</li>
+       <li>metaWeblog.getRecentPosts (v2.5)</li>       
+
+</ul>
+
+<p>Nucleus v3.22以降、<code>mt_text_more</code> と <code>m_tallow_comment</code>もサポートされました。これはmetaWeblog API の拡張版です。つまりこれらの拡張機能をサポートするアプリケーション、例えば Ectoなど、を使用した場合、「続き」を編集することができ、アイテムにコメントを許可するかどうかを決定することができるようになる、ということです。</p>
+
+<a name="mtApi" id="mtApi"></a>
+<h1>Movable Type API</h1>
+
+<p>v2.5から、Nucleusは<a href="http://www.movabletype.org/docs/mtmanual_programmatic.html">Movable Type API</a>からのメソッドをサポートするようになりました。</p>
+
+<p>利用できるメソッドの一覧を以下に示します:</p>
+
+<ul>
+       <li>mt.supportedMethods</li>
+
+       <li>mt.supportedTextFilters</li>
+       <li>mt.publishPost</li>
+       <li>mt.getCategoryList</li>
+       <li>mt.getPostCategories</li>
+       <li>mt.setPostCategories</li>
+       <li>mt.getRecentPostTitles</li>
+
+       <li>mt.getTrackbackPings</li>
+</ul>
+
+<p>いくつかのノート:</p>
+
+<ul>
+       <li>Nucleusはアイテムひとつにつき一つだけカテゴリを設定することができます。これは 'primary' 以外のカテゴリ設定項目はすべて無視されることを意味します。</li>
+       <li>トラックバックはNucleusのコアではサポート対象外です(プラグインの導入によって利用することができるようになります)。このため、<code>mt.getTrackbackPings</code> のデフォルトの返値は空です。</li>
+
+       <li>Nucleusはテキストフィルタを実装していません。このため、<code>mt.getSupportedTextFilters</code> は空の値を返します。</li>
+</ul>
+
+<h1><a name="errorcodes"></a>エラーコード</h1>
+
+<p>
+以下に示すのは、それぞれのメソッドから得られるエラーの種類です:
+</p>
+
+<table>
+       <tr>
+
+               <th>エラーコード</th>
+               <th>エラーメッセージ</th>
+       </tr>
+       <tr>
+               <td>801</td>
+               <td>Login Error <br />
+               ログインエラー(ユーザ名とパスワードの組み合わせが正しくないと推測されます)</td>
+       </tr>
+
+       <tr>
+               <td>802</td>
+               <td>No Such Blog<br />
+               指定されたBlogは存在しません</td>
+       </tr>
+       <tr>
+               <td>803</td>
+               <td>Not a Team Member<br />
+               チームに登録されていません</td>
+
+       </tr>
+       <tr>
+               <td>804</td>
+               <td>Cannot add Empty Items<br />
+               空のアイテムは投稿できません</td>
+       </tr>
+       <tr>
+               <td>805</td>
+
+               <td>Amount parameter must be in range 1..20<br />
+               パラメータの値は 1..20 の範囲でなければなりません(<i>getRecentItems</i></td>
+       </tr>
+       <tr>
+               <td>806</td>
+               <td>No Such Item<br />
+               指定されたアイテムは存在しません</td>
+       </tr>
+
+       <tr>
+               <td>807</td>
+               <td>Not Allowed to Alter Item<br />
+               アイテム追加の権限がありません</td>
+       </tr>
+       <tr>
+               <td>808</td>
+               <td>Invalid media type<br />
+               メディアタイプが不正です</td>
+
+       </tr>   
+       <tr>
+               <td>809</td>
+               <td>File is too large<br />
+               ファイルが大きすぎます(最大のアップロードファイルサイズ)</td>
+       </tr>           
+       <tr>
+               <td>810</td>
+               <td>Other error on newMediaObject<br />
+               newMediaObject で予期せぬエラーが発生しました(何が起きたのかもう少し情報が含まれるでしょう)</td>
+
+       </tr>
+       <tr>
+               <td><i>その他のコード &lt; 100</i></td>
+               <td>Errors encountered by the Useful Inc. XML-RPC implementation<br />
+               Usefil Inc. XML-RPC の実行でエラーが発生しました</td>
+       </tr>
+       <tr>
+               <td><i>その他のコード &gt; 100</i></td>
+
+               <td>Errors encountered by the XML parser<br />
+               XML パーサでエラーが発生しました</td>
+       </tr>
+
+
+</table>
+
+</body>
+</html>
index f448bad..1635193 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: help.html,v 1.7 2005-04-09 05:36:19 kimitake Exp $ -->\r
-       <!-- $NucleusJP: help.html,v 1.6 2005/04/08 13:21:08 kimitake Exp $ -->\r
-\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus管理用ヘルプ</title>\r
-       <style type="text/css">\r
-       <!--\r
-               body {\r
-                       font-family: verdana, arial;\r
-                       font-size: small;\r
-               }\r
-\r
-               h1 {\r
-                       font-size: large;\r
-                       border-bottom: 1px gray dashed;\r
-                       color: #596d9d;\r
-                       text-align: left;\r
-               }\r
-\r
-               h2 {\r
-                       font-size: medium;\r
-                       border: 1px solid #ddd;\r
-                       background-color: whitesmoke;\r
-                       text-align: left;\r
-               }\r
-\r
-               .page {\r
-                       height: 800px;\r
-                       text-align: justify;\r
-                       margin-bottom: 100px;\r
-               }\r
-\r
-               pre {\r
-                       background-color: #ddd;\r
-                       padding: 5px;\r
-                       font-size: small;\r
-               }\r
-\r
-               .example {\r
-                       background-color: #ddd;\r
-                       padding: 5px;\r
-               }\r
-\r
-               ul.templates {\r
-                       font-size: x-small;\r
-                       line-height: 1.1;\r
-                       list-style: none;\r
-                       text-indent: -20px;\r
-                       margin-left: 20px;\r
-               }\r
-\r
-               ul {\r
-                       text-align: left;\r
-               }\r
-\r
-               a:link, a:visited {\r
-                       color: #1D3565;\r
-                       font-weight: bold;\r
-                       text-decoration: underline;\r
-               }\r
-\r
-               a:hover {\r
-                       background-color: whitesmoke;\r
-               }\r
-\r
-               .deprecated {\r
-                       border: 3px solid red;\r
-                       padding: 5px;\r
-                       font-size: medium;\r
-               }\r
-\r
-               tt, code {\r
-                       font-size: small;\r
-               }\r
-\r
-               table {\r
-                       border: 1px solid #ccc;\r
-               }\r
-\r
-               th {\r
-                       background-color: #eee;\r
-               }\r
-\r
-               td {\r
-                       vertical-align: top;\r
-               }\r
-\r
-               .note {\r
-                       background-color: #eee;\r
-                       padding: 5px;\r
-               }\r
-       -->\r
-       </style>\r
-</head>\r
-<body>\r
-\r
-<div class="page">\r
-<h1>Nucleusポップアップ・ヘルプ</h1>\r
-<p>ページがダウンロードされている間はお待ちください(だいたい100KBです)。</p>\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="future"></a>\r
-<a name="allowpastposting"></a>\r
-<h1>後で追加/過去に投稿</h1>\r
-<h2>後で追加</h2>\r
-<p>アイテム追加フォームの「後で追加」オプションにより、アイテムを指定した時間きっかりに公開することができます。その時が来るまで、アイテムはサイトの公開された部分で見られる事がありません。</p>\r
-<p>この日時は<strong>未来のものでなくてはなりません</strong>。アイテムを追加するblogの「過去の日時での投稿を許可する」オプションが有効である場合は除いて。</p>\r
-<h2>過去の日時での投稿を許可する</h2>\r
-<p>有効にすると、アイテムが追加された日時を指定できます。加えて、既に存在するアイテムのタイムスタンプ(投稿日時)を編集できます。</p>\r
-</div>\r
-\r
-<div class="page"><a name="changedate"></a>\r
-<h1>投稿日時の変更</h1>\r
-<p>\r
-「タイムスタンプを更新」オプションにより、アイテムの投稿された日付か時間あるいはその両方を変更できます。もしアイテムの内容を変更したのなら、この方法で記事をフロントページのトップに戻せるでしょう。</p>\r
-<p>しかし、そのアイテム独自のIDは変更されません。よって訪問者は、そのアイテムはもともとより低いID値のアイテム群より後に投稿されたことに気がつくことができます。</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="draft"></a>\r
-<h1>ドラフト(Drafts)</h1>\r
-<p>ドラフト状態のアイテムはblogの公開されたところではまだみることができません。記事を書いている時役に立つでしょうし、多少の間を取るにもいいでしょう。ドラフト状態のアイテムは「管理ホーム」にリストとして表示されるので、時間のあるときに作業を再開することが可能です。</p>\r
-<p>ドラフトを編集する際、「<strong>今すぐ追加</strong>」のラジオボタンを選び「保存」ボタンを押すと公開されます。</p>\r
-</div>\r
-\r
-<div class="page"><a name="extended"></a>\r
-<h1>「続き」部分</h1>\r
-<p>アイテムには、記事を続けるために用いられるオプションである「続き」部分があります。例えば、記事がblogのメインページに置くには長すぎる場合、導入を「本文」部分に、残りを「続き」部分に書くことができます。メインのblogページを閲覧すると、「続きを読む」というリンクを目にすることでしょう。(テンプレートによってリンクの形は定義されます)</p>\r
-<p>もし、導入をアイテムの単なる<em>概略</em>として書きたいのなら、<a href="#templatevar-smartbody">smartbody</a>というテンプレート変数を用いて、「本文」と「続き」の表示を分けることが可能です。\r
-</p>\r
-</div>\r
-\r
-<div class="page"><a name="shortblogname"></a>\r
-<h1>Blogの短縮名</h1>\r
-<p>「Blogの短縮名」は主に管理領域で、どのアイテムがどのblogと結びついているのか示すために使われます。</p>\r
-<p>また、新規blogを有効にするための代替indexファイルでも用いられます(以下はmyshortblognameが「Blogの短縮名」だった場合の呼び出しファイルの例):</p>\r
-<pre>\r
-&lt;?\r
-       include('./config.php');\r
-       selectBlog('myshortblogname');\r
-       selector();\r
-?&gt;\r
-</pre>\r
-</div>\r
-\r
-<div class="page"><a name="blogdefaultskin"></a>\r
-<h1>標準のスキン</h1>\r
-<p>blogごとの「設定」で選択された「標準のスキン」はそのblogが表示されるときに用いられるスキンです。選択できるのは一つだけです。(URLの引数を通して別のスキンで表示させることはできます)</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="blognotify"></a>\r
-<h1>通知するメールアドレス</h1>\r
-<p>このオプションは、新しくコメントが追加された際に通知するメールアドレスを一つあるいは複数いれるものです。もし通知が不要なら空っぽにしておいてください。メールアドレスは、あたりまえですが、有効なものでなくてはなりません。</p>\r
-<p>もし複数のメールアドレスを利用する場合は、セミコロン(<strong>;</strong>)で区切ってください。</p>\r
-<div class="note">\r
-<b>注意:</b>設定フィールドの最大長は128文字です。リスト可能なメールアドレスの量はそれによってのみ制限されます</div>\r
-<div class="note">\r
-<b>注意:</b>メンバー登録に使われているメールアドレスを通知先にした場合、自身で書いたのアイテムとコメントの通知を受け取ることはありません。自分で書いたことは知っているはずですから、問題にはならないでしょう。</div>\r
-</div>\r
-\r
-<div class="page"><a name="blogmaxcomments"></a>\r
-<h1>コメントの最大量</h1>\r
-<p><em>メインページ</em>に表示するコメントの最大数です。<strong>これはコメント可能な最大数を制限するものではありません</strong>。詳細のページでは、設定した最大数を超えていても全てのコメントが表示されます。</p>\r
-<p class="note"><strong>注意:</strong>テンプレート内部では、テンプレート変数<a href="#templatevar-comments">comments</a>のオプションパラメーターによってここでの値は上書きされます。</p>\r
-</div>\r
-\r
-<div class="page"><a name="blogtimeoffset"></a>\r
-<h1>サーバ時刻との時差</h1>\r
-<p>もしサーバの時刻があなたの生活時刻と一致しなければ、正確な時間を得る為にサーバ時刻との時差を加えたいかもしれません。減らすためには負の値を用いてください(マイナス記号をつける)。参照するために現在のサーバ時刻が表示されています。</p>\r
-<h2>実例</h2>\r
-<p>もしローカル時刻が20:35で表示されているサーバ時刻が14:35であった場合、blogの時刻を20:35にするためには「サーバ時刻との時差」を6.0に設定する必要があります。</p>\r
-<p class="note"><strong>注意:</strong>30分時差のあるタイムゾーンに住む人々のための、分刻みの時差補正もまた同様です。例えば「サーバ時刻との時差」を<strong>1.5</strong>にすると、1時間30分の補正となります。</p>\r
-</div>\r
-\r
-<div class="page"><a name="blogupdatefile"></a>\r
-<h1>自動更新するファイル</h1>\r
-<p>Nucleusはblogに新しいアイテムが追加されるたびに、ファイルを更新することができます。そのファイルの中身は最終変更時のタイムスタイプとなります。このようなファイルは、定期的に更新が無いかみるためにサーバ上のファイルをチェックして、そこから「weblogの更新状況」を作成するサービスに使うことができます。これらをメインblogに用た特徴は、訪問者がコメントを追加したりスキンやテンプレートに変更を加えたりしたときには更新を知らせることが無いということです。</p>\r
-<p>自動更新されるファイルが必要ないときは、フィールドを空っぽにしておいてください。</p>\r
-<p>自動更新されるファイルの場所は管理領域からの相対となることにご注意ください。なので、(<tt>/path/to/your/website/update.txt</tt> のような)絶対パスを使う方がよいでしょう。また自動更新されるファイルを作成してかつ書き込めるように(<a href="tips.html#filepermissions" onclick="window.open(this.href);return false;" class="out" title="quick guide on changing file permissions">パーミッションを0666</a>に)してください。</p>\r
-</div>\r
-\r
-<div class="page"><a name="teamadmin"></a>\r
-<h1>Blogの管理者</h1>\r
-<p>\r
-Blogの管理者は次のような追加権限をもちます:\r
-</p>\r
-\r
-<ul>\r
-       <li>チームの操作</li>\r
-       <li>blog設定の変更</li>\r
-       <li>(該当blogの) どの投稿者のアイテムでも編集と削除が可能</li>\r
-       <li>blogの削除</li>\r
-</ul>\r
-\r
-<p>一つのblogは複数の管理者を持つことができます。ただし、いつでも最低一人の管理者がいなくてはなりません。</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="superadmin"></a>\r
-<h1>管理者の特権</h1>\r
-\r
-<p><em>super-admin(最高管理者)</em>と呼ばれ、全ての機能と全てのweblogに<strong>フルアクセス</strong>できます。たとえblogのチームに入っていなくてもです。</p>\r
-\r
-<p>それに加えて:super-adminは、weblogの作成、一般設定の変更、テンプレートの書き換え、スキンの書き換え、メンバーの操作(メンバーの作成/編集/削除)を行う権限があります。</p>\r
-\r
-<p>普通、super-adminとなるのはサイトの管理者ただ一人でしょう。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="canlogin"></a>\r
-<h1>管理者領域へのログイン</h1>\r
-<p><a href="#superadmin" title="Administrator Privileges">super-admin</a>はそれぞれのメンバーの管理領域へのログインを許可しないよう設定できます。</p>\r
-</div>\r
-\r
-<div class="page"><a name="defaultblog"></a>\r
-<h1>既定のBlog</h1>\r
-<p>他のblogが要求時に指定されない場合、表示されるblogです。</p>\r
-</div>\r
-\r
-<div class="page"><a name="baseskin"></a>\r
-<h1>基本のスキン</h1>\r
-<p>このオプションは、判定が自動解決されない場合に代用するスキンをNucleusに設定します。これはスキン・パーツが空っぽだったり、blogやskinで明確に指定されていないときにおきます。</p>\r
-<p>ほとんどのユーザーは、この設定を気にする必要がありません。</p>\r
-</div>\r
-\r
-<div class="page"><a name="cookies"></a>\r
-<h1>Cookie設定</h1>\r
-\r
-<h2>ログインCookieの有効期間</h2>\r
-<p>メンバーがログインするとブラウザにcookieが保存され、翌日に戻ってきたときに再びログインする必要がなくなります。クッキーの有効期間によって、いつ無効になるか決定されます:</p>\r
-<ul>\r
-       <li><strong>セッションごと</strong> − ブラウザを終了させるとcookieは削除されます</li>\r
-       <li><strong>一ヶ月</strong> − 一ヶ月続けてサイトか管理領域を訪れないということが無い限り、cookieはコンピュータに残ります。このオプションを使えば、たぶん再ログインする必要はなくなるでしょう。(自分でログアウトしたときや、他のコンピュータからログインするときは別ですが)</li>\r
-</ul>\r
-\r
-<h2>CookieパスとCookieドメイン</h2>\r
-<p>これらは上級の設定です。通常は変更する必要はありません。その場合、cookieパスは単純にスラッシュ('/')を入れ、cookieドメインは空っぽにしておいてください。</p>\r
-\r
-<h2>セキュアCookie</h2>\r
-<p>通常は「いいえ」に設定してください。HTTPSのurlを用いておりかつhttps接続を通してのみcookieを送りたい場合でだけ、「はい」にしなければなりません。</p>\r
-\r
-<h2>最終訪問日時Cookieの保存</h2>\r
-<p>訪問者が最後に訪れた時間をcookieに含め保存させるよう、Nucleusを設定することが可能です。これによって、<a href="#templatenew">新規アイテム</a>の隣にしるしを置くことができます。</p>\r
-\r
-</div>\r
-\r
-\r
-<div class="page"><a name="language"></a>\r
-<h1>言語</h1>\r
-<p>個々のメンバー用のコンテンツをnucleusが作成するときに用いられる言語を選択することができます。Nucleusによって生成されるコンテンツには、管理領域、エラーメッセージ、スキンにおけるフォームなどが含まれます。</p>\r
-\r
-<p>言語の選択を行う場所は二ヶ所あります。「一般設定」にはデフォルトで用いられる「既定の言語」が含まれています。次にログイン状態のメンバーは、望むならこの設定を上書きできます。</p>\r
-\r
-<p>これら両方の設定が無効なら、英語がデフォルトの言語として用いられます</p>\r
-\r
-<p class="note"><strong>注意:</strong> 追加の言語ファイルは<a href="http://www.nucleuscms.org/" onclick="window.open(this.href);return false;" class="out" title="Nucleus CMS Website">Nucleusのウェブサイト</a>からダウンロードできます。(新規ウィンドウが開きます)</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="allowaccountcreation"></a>\r
-<h1>アカウントの作成</h1>\r
-<p>訪問者に自身のメンバーアカウント作成を許可するようにも許可しないようにもできます。新規メンバーは(管理者がチームに加えるまでは)blogにアイテムを追加することはできません。しかし、管理領域にログインして設定を変更できます。また自分のコメントを削除したり変更したりも可能です。</p>\r
-</div>\r
-\r
-<div class="page"><a name="allownewmemberlogin"></a>\r
-<h1>新規メンバーのログイン許可</h1>\r
-<p>もし訪問者による<a href="#allowaccountcreation">アカウントの作成</a>を許可するなら、この設定はその方法で作られたアカウントが<a href="#canlogin">管理領域にログイン</a>できるか否かを明確に定めます。</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="messageservice"></a>\r
-<h1>メッセージサービス</h1>\r
-\r
-<p>メンバーのプライバシーのために、全てのメールアドレスを隠したままで、スクリプトを通してメンバー同士でメールメッセージの送信ができます。送信されたメッセージにはどっちにしろ両ユーザーのメールアドレスが含まれますので、その後は通常のメールを用いた連絡を続けることができます。このサービスは無効にすることが可能です。</p>\r
-\r
-<h2>メンバー以外</h2>\r
-<p>デフォルトでは、非メンバーはメッセージサービスを使えません。なぜなら有効なメールアドレスが入力されたかチェックする方法が無いからです。「メンバー以外からのメッセージ送付を許可」することによってこの制限を緩和できます。非メンバーはメッセージの投函時にメールアドレスを尋ねられ、それが受け取ったメールのヘッダー<tt>From:</tt>に表示されることになります。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="disablesite"></a>\r
-<h1>サイトの閉鎖</h1>\r
-<p>Nucleusのサイト全体を閉じることが可能です。なんらかの設定調整を行うときに、あるいは何か恐ろしい間違いが起きた時にこれを実行したいと思うかもしれません:-)</p>\r
-<p>ここで設定しなければならないURLは、訪問者がリダイレクトされるURLとなります。</p>\r
-<p>例外:<strong>管理領域</strong>はそれまで通り利用可能であり、<strong><a href="#superadmin">最高管理者</a></strong>はそれまで通りにサイト全体をみることができます。(あとでサイトを再開することを忘れないでください;-))</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="urlmode"></a>\r
-<h1>URLモード</h1>\r
-<p>このオプションを用いることにより、URLスタイルを切り替え可能です:</p>\r
-<ul>\r
-       <li><strong>Normal</strong>: URLは次のようになります <code>http://host/index.php?itemid=1234</code></li>\r
-       <li><strong>Fancy</strong>: URLは次のようになります <code>http://host/item/1234</code></li>\r
-</ul>\r
-<p class="note"><strong>注意:</strong>「Fancy URL」モードで動作するようにするためには、いくつか他の作業が必要になります。それらは<a href="tips.html" class="out" onclick="window.open(this.href);return false;">Tips &amp; Suggestions</a>に記述されています。(新規ウィンドウが開きます)</p>\r
-</div>\r
-\r
-<div class="page"><a name="templateitems"></a>\r
-<h1>テンプレート:アイテム</h1>\r
-<p>アイテム表示時に、それぞれのアイテムで次のセットが繰り返されます:\r
-</p>\r
-\r
-<pre>\r
-アイテムのヘッダー\r
-アイテムの本体\r
-アイテムのフッター\r
-</pre>\r
-\r
-<p>これら3つのブロックはすべてテンプレートの一部であり、結果どのような見た目になるのか定義します。</p>\r
-\r
-<h2>変数</h2>\r
-\r
-<p>これらのテンプレート内で、アイテムのデータを挿入するのに<a href="#templatevars-overview" title="Find out which variables are available">テンプレート変数とよばれる系列が利用できます</a>。</p>\r
-\r
-<h2>例</h2>\r
-<p><a href="#templateitemsexample">テンプレート:アイテムの例</a></p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templateitemsexample"></a>\r
-<h1>テンプレート:アイテムの例</h1>\r
-<p>「アイテムの本体」テンプレートの一例です:</p>\r
-\r
-<pre>&lt;h1&gt;&lt;%title%&gt;&lt;/h1&gt;\r
-\r
-&lt;p&gt;&lt;%body%&gt;&lt;/p&gt;\r
-\r
-&lt;div class="metadata"&gt;\r
- &lt;a href="&lt;%itemlink%&gt;"&gt;link&lt;/a&gt; -\r
- &lt;%date%&gt; &lt;%time%&gt; -\r
- &lt;a href="&lt;%authorlink%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt; -\r
- &lt;%comments%&gt;\r
-&lt;/div&gt;</pre>\r
-\r
-<p>結果はこのようなものになります:</p>\r
-\r
-<div class="example">\r
-<h4 style="margin: 2px;">ここはアイテムのタイトルです</h4>\r
-<p style="margin: 2px; padding: 0px;">ここはアイテムのテキスト部分です</p>\r
-<div style="font-style: italic; margin: 2px;">\r
- <a href="#templateitemsexample">link</a> -\r
- August 8th 2002 18:51 -\r
- <a href="#templateitemsexample">karma</a> -\r
- <a href="#templateitemsexample">no comments</a>\r
-</div>\r
-</div>\r
-\r
-</div>\r
-\r
-\r
-<div class="page"><a name="templatecomments"></a>\r
-<h1>テンプレート:コメント</h1>\r
-\r
-<p>コメントブロックは3つの要素で構成されています。</p>\r
-\r
-<ol>\r
-       <li>\r
-               コメントが表示されるとき(詳細のページやメインページで許可されているコメントの最大数を下回っているとき)\r
-<pre>コメントのヘッダー\r
-  コメントの本体(繰り返し)\r
-コメントのフッター</pre>\r
-       </li>\r
-       <li>\r
-               コメントがまったく無いとき\r
-<pre>\r
-コメントが無い時\r
-</pre>\r
-       </li>\r
-       <li>\r
-               コメントがあるが、許可されている最大数を上回っているとき(アイテムの詳細のページでのみ表示されます)\r
-<pre>\r
-長すぎるコメントの時\r
-</pre>\r
-       </li>\r
-</ol>\r
-\r
-<p>これらのテンプレート内部では、いくつかの<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連変数</a>が利用できます。</p>\r
-\r
-</div>\r
-\r
-<div class="page">\r
-<a name="templatecommentheaders"></a>\r
-<a name="templatecommentfooters"></a>\r
-<h1>テンプレート:コメントのヘッダーとフッター</h1>\r
-\r
-<h2>特徴</h2>\r
-\r
-<p>「コメントの本体」はコメント一つごとに繰り返されますが、ヘッダーとフッターは一度しか表示されません。典型的な構成はこのようになります:</p>\r
-<pre>コメントのヘッダー\r
-  コメントの本体 1\r
-  コメントの本体 2\r
-  コメントの本体 3\r
-コメントのフッター</pre>\r
-<p>これらのテンプレート内では、<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連変数</a>が利用できます。</p>\r
-\r
-<h2>例</h2>\r
-\r
-<p>Header:</p>\r
-<pre>&lt;ul&gt;</pre>\r
-<p>Body:</p>\r
-<pre>&lt;li&gt;&lt;%user%&gt;: &lt;%body%&gt;&lt;/li&gt;</pre>\r
-<p>Footer</p>\r
-<pre>&lt;/ul&gt;</pre>\r
-<p>Result</p>\r
-\r
-<ul class="example">\r
-       <li>karma: いいね!</li>\r
-       <li>xiffy: ああ、たしかに!</li>\r
-</ul>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatemorelink"></a>\r
-<h1>テンプレート:続きへのリンク</h1>\r
-<p>これはアイテムのテンプレートで利用できるテンプレート変数、"morelink"のフォーマットとして用いられるテンプレートです。<a href="#templatevars-overview">利用可能な変数</a>はアイテムのテンプレートと同じです。</p>\r
-<p>もしアイテムに「続き」の部分が存在しない場合、テンプレート変数<code>&lt;%morelink%&gt;</code>は無効となります。</p>\r
-\r
-<h2>例</h2>\r
-<pre><code>&lt;a href="&lt;%itemlink%&gt;"&gt;[続きを読む!]&lt;/a&gt;</code></pre>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatearchivelists"></a>\r
-\r
-<h1>テンプレート:アーカイブリスト</h1>\r
-\r
-<p>過去ログのリストは、以下のようなリスト体裁をとります:</p>\r
-\r
-<pre>アーカイブリストヘッダー\r
-  アーカイブリスト本体(アーカイブごとに繰り返される)\r
-アーカイブリストフッター</pre>\r
-\r
-<p>利用できる変数:(ヘッダーとフッターでは<tt>blogid</tt>のみが許可されています)</p>\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>blogid</td>\r
-       <td>weblogのID</td>\r
-</tr><tr>\r
-       <td>archivelink</td>\r
-       <td>アーカイブへのリンク。<code>&lt;a href=".."&gt;</code>のようなタグとしてはめ込むことができる。</td>\r
-</tr><tr>\r
-       <td>month</td>\r
-       <td>月の数値(01-12の2文字表記)</td>\r
-</tr><tr>\r
-       <td>year</td>\r
-       <td>年(西暦の4文字表記)</td>\r
-</tr><tr>\r
-       <td>day</td>\r
-       <td>月の中での日付(二文字表記。日ごと表示の時のみ)</td>\r
-</tr></table>\r
-\r
-<p>リストに用いるアーカイブの日付表記をより融通の効くようにする方法は、<a href="#strftime">strftime</a>変数を用いることです。もし複雑すぎると感じたなら、次のを用いてください:</p>\r
-\r
-<pre><code>&lt;a href="&lt;%archivelink%&gt;"&gt;%B, %Y&lt;/a&gt;&lt;br /&gt;</code></pre>\r
-\r
-\r
-<p>言語設定をあなたの住んでいる地域の設定に変更するためには、<a href="#templatelocale">locale</a>を変更してください。</p>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page"><a name="templatecategorylists"></a>\r
-<h1>テンプレート:カテゴリーリスト</h1>\r
-\r
-<p>カテゴリーリストは下の表のようにフォーマットされます:</p>\r
-\r
-<pre>カテゴリーリストヘッダー\r
-  カテゴリーリストアイテム(繰り返し)\r
-カテゴリーリストフッター</pre>\r
-\r
-<p>利用可能な変数:(ヘッダーとフッターでは<tt>blogid</tt>、<tt>blogurl</tt>、<tt>self</tt>のみが許可されています)</p>\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>blogid</td>\r
-       <td>weblogのID</td>\r
-</tr><tr>\r
-       <td>blogurl</td>\r
-       <td>blogのURL(blogごとの「設定」で定義される)</td>\r
-</tr><tr>\r
-       <td>self</td>\r
-       <td>パラメーター無しの現在のページ(例えば<tt>index.php</tt>)</td>\r
-</tr><tr>\r
-       <td>catlink</td>\r
-       <td>該当カテゴリーの新しいアイテムへのリンク。これにより&lt;a href=".."&gt;タグを埋め込むことができる。</td>\r
-</tr><tr>\r
-       <td>catid</td>\r
-       <td>カテゴリーのID</td>\r
-</tr><tr>\r
-       <td>catname</td>\r
-       <td>カテゴリー名</td>\r
-</tr><tr>\r
-       <td>catdesc</td>\r
-       <td>カテゴリーの説明</td>\r
-</tr></table>\r
-\r
-<p><a href="#categorylistexample">例を見る</a></p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="categorylistexample"></a>\r
-<h1>テンプレート:カテゴリーリストの例</h1>\r
-<p>\r
-<a href="#templatecategorylists">(戻る)</a>\r
-</p>\r
-\r
-<h2>カテゴリーリストヘッダー</h2>\r
-<pre><code>&lt;ul&gt;\r
-  &lt;li&gt;&lt;a href="&lt;blogurl%&gt;"&gt;まとめて表示&lt;/a&gt;&lt;/li&gt;</code></pre>\r
-\r
-<h2>カテゴリーリストアイテム</h2>\r
-<pre><code>&lt;li&gt;&lt;a href="&lt;%catlink%&gt;"&gt;&lt;%catname%&gt;&lt;/a&gt;&lt;/li&gt;</code></pre>\r
-\r
-<h2>カテゴリーリストフッター</h2>\r
-<pre><code>&lt;/ul&gt;</code></pre>\r
-\r
-<h2>結果はこうなります:</h2>\r
-\r
-<ul class="example">\r
-       <li><a href="#categorylistexample">まとめて表示</a></li>\r
-       <li><a href="#categorylistexample">あなたのカテゴリー</a></li>\r
-       <li><a href="#categorylistexample">わたしのカテゴリー</a></li>\r
-</ul>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page"><a name="templatelocale"></a>\r
-<h1>テンプレート:Locale</h1>\r
-<p>これは実際のところテンプレートの部品というより設定です。設定することによって、日付と時刻のローカライズを選択できます。月と日の名前などは要求された言語での表示になるでしょう。</p>\r
-\r
-<p>使える変数は、Nucleusが動作しているコンピュータによります。使える変数をいくつかあげますと・・・:</p>\r
-\r
-<ul>\r
-       <li><strong>en</strong>:英語</li>\r
-       <li><strong>dutch</strong>:オランダ語</li>\r
-       <li><strong>ja_JP</strong>:日本語</li>\r
-       <li>...</li>\r
-</ul>\r
-\r
-<p>strftimeに関するより詳しい情報は、<a href="http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.html" onclick="window.open(this.href);return false;" class="out" title="Open Group specification">Open Group Specification</a>にあります。(新規ウィンドウが開きます)</p>\r
-\r
-<p>localeは<a href="#templatedatetime">日付と時刻のフォーマット</a>、<a href="#templatedateheads">日付ヘッダー</a>、<a href="#templatearchivelists">アーカイブリスト</a>で利用されます。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatedatetime"></a>\r
-<h1>テンプレート:日付と時刻のフォーマット</h1>\r
-<p>これらは<code>&lt;%date%&gt;</code>と<code>&lt;%time%&gt;</code>という変数(<a href="#templatevars-overview">テンプレート変数</a>をご覧ください)における日付と時刻のフォーマットに使われます。フォーマットは<a href="#templatelocale">locale</a>にも左右されます。</p>\r
-\r
-<p><a href="#strftime">利用できる変数の詳細な情報はこちらを</a>。もし手っ取り早く始めたいのなら、日付フォーマットに"%x"を、時刻フォーマットに"%X"をお使いください。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatedateheads"></a>\r
-<h1>テンプレート:日付ヘッダー/フッター</h1>\r
-\r
-<p>日付のヘッダーと日付のフッターは日付と時刻の変数を入れることができます。<a href="#strftime">利用できる変数の詳細情報はこちらにあります</a>。もし手早く始めるのなら、"%x"を日付フォーマットとして使ってください。日付フォーマットで使われる言語は、テンプレートの<a href="#templatelocale">locale設定</a>で決定されます。</p>\r
-\r
-<p>日付ヘッダーにテンプレート変数&lt;%%daylink%%&gt;を含めることによって、その日のアーカイブへのリンクを挿入できます。<strong>'%'が二つであることに注意を!月の中での現在日付に展開される%dを無効にするために必要な措置なのです。</strong>同様に、もし'%'という文字をここで使いたいなら、二つ重ねて('%%')置かないとサイトには表示されません。</p>\r
-\r
-<p>日付ヘッダーのサンプル:</p>\r
-\r
-<pre>\r
-&lt;div class="day"&gt;\r
-&lt;h1&gt;%d %B&lt;/h1&gt;\r
-</pre>\r
-\r
-<p>日付フッターのサンプル:</p>\r
-\r
-<pre>\r
-&lt;/div&gt;\r
-</pre>\r
-\r
-<p>daylinkを用いた日付ヘッダーの例:</p>\r
-\r
-<pre>\r
-&lt;div class="day"&gt;\r
-&lt;h1&gt;%d %B&lt;/h1&gt;\r
-&lt;a href="&lt;%%daylink%%&gt;"&gt;(アーカイブ)&lt;/a&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatehighlight"></a>\r
-<h1>テンプレート:ハイライト表示</h1>\r
-<p>ハイライト表示は検索実行時に使われます。これは規則変化に沿った表現として実際に使われますので、直前にバックスラッシュを置くことによっていくつかの記号をエスケープしたいと望むかもしれません。ハイライトされた単語が当てはめられる場所は"¥0"で示されます。</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>&lt;span style='background-color:yellow'&gt;¥0&lt;/span&gt;</code></pre>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatenothingfound"></a>\r
-<h1>テンプレート:検索で何も見つからなかった場合</h1>\r
-\r
-<p>検索が実行され結果何も見つからなかった場合に表示されます。</p>\r
-\r
-<p>利用可能な変数:</p>\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>blogid</td>\r
-       <td>weblogのID</td>\r
-</tr><tr>\r
-       <td>query</td>\r
-       <td>検索に用いられたクエリ</td>\r
-</tr></table>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>&lt;b&gt;&lt;%query%&gt;&lt;/b&gt;に該当する検索結果はありませんでした</code></pre>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatecommentbody"></a>\r
-<h1>テンプレート:コメントの本体</h1>\r
-<p>このテンプレート・パーツは単独のコメント表示に使われます。このテンプレート部では、<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連テンプレート変数</a>が利用できます。</p>\r
-\r
-<h2>例</h2>\r
-<pre><code>&lt;h2&gt;&lt;%userlink%&gt;さんによるコメント:&lt;/h2&gt;\r
-\r
-&lt;p&gt;&lt;%body%&gt;&lt;/p&gt;\r
-\r
-&lt;div class="metadata"&gt;\r
- (接続元:&lt;%host%&gt; 投稿日時:&lt;%date%&gt; &lt;%time%&gt;)\r
-&lt;/div&gt;</code></pre>\r
-\r
-<p>結果はこうなります:</p>\r
-\r
-<div class="example">\r
-<h4 style="margin: 2px;"><a href="#templatecommentbody">karma</a>さんによるコメント:</h4>\r
-<p style="margin: 2px;">ナイス!</p>\r
-<div style="margin:2px;font-size:smaller;">(接続元:host.example.org 投稿日時:2003-03-02 13:30)</div>\r
-</div>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatepopups"></a>\r
-<h1>テンプレート:メディアとポップアップ</h1>\r
-<p>これらのテンプレートは、画像ウィンドウのポップアップへのリンクと画像以外のメディア・オブジェクトのフォーマットに用いられます。それぞれのテンプレートで利用可能な変数を以下に記します:</p>\r
-\r
-<h2>ポップアップ画像へのリンクコード</h2>\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>popuplink</td>\r
-       <td>すぐに使える&lt;a href... といったリンク</td>\r
-</tr><tr>\r
-       <td>rawpopuplink</td>\r
-       <td>href="..."内部のurlのみ</td>\r
-</tr><tr>\r
-       <td>popupcode</td>\r
-       <td>ウィンドウを開くjavascriptコード</td>\r
-</tr><tr>\r
-       <td>text</td>\r
-       <td>代用テキスト(リンクテキスト)</td>\r
-</tr><tr>\r
-       <td>width</td>\r
-       <td>イメージの幅</td>\r
-</tr><tr>\r
-       <td>height</td>\r
-       <td>イメージの高さ</td>\r
-</tr><tr>\r
-       <td>popuptext</td>\r
-       <td>(textと同じ)</td>\r
-</tr></table>\r
-\r
-\r
-<h2>インライン画像のコード</h2>\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>image</td>\r
-       <td>すぐに使えるIMGタグ</td>\r
-</tr><tr>\r
-       <td>link</td>\r
-       <td>画像への直接リンク(URL)</td>\r
-</tr><tr>\r
-       <td>text</td>\r
-       <td>代用テキスト(リンクテキスト)</td>\r
-</tr><tr>\r
-       <td>width</td>\r
-       <td>イメージの幅</td>\r
-</tr><tr>\r
-       <td>height</td>\r
-       <td>イメージの高さ</td>\r
-</tr></table>\r
-\r
-<h2>メディアオブジェクトへのリンクコード</h2>\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>media</td>\r
-       <td>すぐに使えるAタグ</td>\r
-</tr><tr>\r
-       <td>link</td>\r
-       <td>ファイルへの直接リンク(URL)</td>\r
-</tr><tr>\r
-       <td>text</td>\r
-       <td>代用テキスト(リンクテキスト)</td>\r
-</tr></table>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatememberextra"></a>\r
-<h1>テンプレート:登録メンバーからのコメントへの追加表示</h1>\r
-<p>これはコメントの著者がメンバーであることをの証を追加するのに利用できるテンプレートです。最終的には<a href="#templatecommentbody">コメントの本体</a>で使われる<code>&lt;%authtext%&gt;</code>変数の表示となります。</p>\r
-\r
-<p>このテンプレート内部では、いくつかの<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連変数</a>が利用できます。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatecommentcontinued"></a>\r
-<h1>テンプレート:コメントの続きを読む</h1>\r
-<p>このリンク・フォーマットは、<a href="#templatecommentbody">コメントの本体</a>で使われる変数<code>&lt;%short%&gt;</code>の終わりに追加されます。</p>\r
-\r
-<p>このテンプレート内部では、いくつかの<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連変数</a>が利用できます(<code>&lt;%short%&gt;</code>変数以外)。</p>\r
-\r
-<p>例:</p>\r
-\r
-<pre>\r
- &lt;a href="&lt;%itemlink%&gt;"&gt;[続き]&lt;/a&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="templatecommentwords"></a>\r
-<h1>テンプレート:コメントの数え方</h1>\r
-<p>訳注:日本語で使う場合は、単複同型なので両方"コメント"にして問題ないです。</p>\r
-<p>たぶん、"1 comment(s)"よりむしろ"1 comment"と表示したい人が多いのではないでしょうか?「コメントが一つの時」と「コメントが二つ以上の時」のテンプレート部分はそういった目的のために使えます。これらは他の所で使える<code>&lt;%commentword%&gt;</code>変数の中身として利用されます。</p>\r
-\r
-<p>もし一つしかコメントが無い場合、<code>&lt;%commentword%&gt;</code>は「コメントが一つの時」と同じ内容になります。もし1より多い複数のコメントがついているなら、<code>&lt;%commentword%&gt;</code>は「コメントが二つ以上の時」と同じ内容になります。\r
-</p>\r
-\r
-<p>典型的な値は"comment"と"comments"です。<strong>ここでは特別な変数は利用できません</strong>。</p>\r
-</div>\r
-\r
-\r
-\r
-<div class="page"><a name="templateeditlink"></a>\r
-<h1>テンプレート:アイテムを編集するためのリンク </h1>\r
-<p>このテンプレートは<a href="#templatevar-edit">テンプレート変数edit</a>がどのように表示されるかを決めるものです。ここではどのような<a href="#templatevars-overview">テンプレート変数</a>でも使用できます。\r
-</p>\r
-\r
-<h2>例:</h2>\r
-\r
-<pre><code>&lt;a href="&lt;%editlink%&gt;"\r
-   onclick="&lt;%editpopupcode%&gt;"&gt;編集&lt;/a&gt;</code></pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page"><a name="skinpartindex"></a>\r
-<h1>スキン:メインの目次ページ</h1>\r
-<p>このスキン部品はweblogにおける最新のエントリー(複数)を表示するのに用いられます。通常はサイトのトップページにあたるでしょう。</p>\r
-\r
-<p>「メインの目次ページ」の非常に基本的な形:</p>\r
-\r
-<pre>\r
-&lt;html&gt;\r
-  &lt;head&gt;\r
-    &lt;title&gt;私のウェブログ&lt;/title&gt;\r
-  &lt;/head&gt;\r
-  &lt;body&gt;\r
-\r
-    &lt;h1&gt;私のウェブログ&lt;/h1&gt;\r
-    &lt;%blog(mytemplate,20)%&gt;\r
-\r
-  &lt;/body&gt;\r
-&lt;/html&gt;\r
-</pre>\r
-\r
-<p>これによりデフォルトweblog(上書きされた場合を除く)の最新アイテム20個が、'mytemplate'というテンプレートを用いて表示されます。</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="skinpartitem"></a>\r
-<h1>個別アイテムページ</h1>\r
-<p>これらのページは完全なアイテムを表示するために使われます。付けられた全てのコメントとコメント追加フォームを含めたものです。</p>\r
-\r
-<p>「個別アイテムページ」の非常に基本的な形:</p>\r
-\r
-<pre>\r
-&lt;html&gt;\r
-  &lt;head&gt;\r
-    &lt;title&gt;私のウェブログ :: アイテム&lt;/title&gt;\r
-  &lt;/head&gt;\r
-  &lt;body&gt;\r
-\r
-    &lt;h1&gt;アイテム&lt;/h1&gt;\r
-    &lt;%item(detailed)%&gt;\r
-\r
-    &lt;h1&gt;コメント&lt;/h1&gt;\r
-    &lt;%comments(detailed)%&gt;\r
-\r
-    &lt;h1&gt;コメントを追加&lt;/h1&gt;\r
-    &lt;%commentform%&gt;\r
-\r
-  &lt;/body&gt;\r
-&lt;/html&gt;\r
-</pre>\r
-\r
-<p>これにより'detailed'テンプレートを用いたアイテムとコメントが表示されます。加えて標準のコメントフォームも。</p>\r
-\r
-\r
-</div>\r
-\r
-<div class="page"><a name="skinpartarchivelist"></a>\r
-<h1>スキン:月別アーカイブ一覧ページ</h1>\r
-<p>アーカイブが存在する全ての月の概略と、それらアーカイブへのリンクです。</p>\r
-\r
-<p>「月別アーカイブ一覧ページ」の非常に基本的な形:</p>\r
-\r
-<pre>\r
-&lt;html&gt;\r
-  &lt;head&gt;\r
-    &lt;title&gt;私のウェブログ :: アーカイブ集&lt;/title&gt;\r
-  &lt;/head&gt;\r
-  &lt;body&gt;\r
-\r
-    &lt;h1&gt;アーカイブ集&lt;/h1&gt;\r
-    &lt;%archivelist(default)%&gt;\r
-\r
-  &lt;/body&gt;\r
-&lt;/html&gt;\r
-</pre>\r
-\r
-<p>これにより'default'テンプレートを用いた、存在するアーカイブファイル全てのリストが表示されます。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="skinpartarchive"></a>\r
-<h1>スキン:月別アーカイブページ</h1>\r
-<p>ひと月分のアーカイブ。「メインの目次ページ」と似た振る舞いをしますが、該当月の全てのアイテムを表示します。</p>\r
-\r
-<p>「月別アーカイブページ」の非常に基本的な形:</p>\r
-\r
-<pre>\r
-&lt;html&gt;\r
-  &lt;head&gt;\r
-    &lt;title&gt;私のウェブログ :: アーカイブ&lt;/title&gt;\r
-  &lt;/head&gt;\r
-  &lt;body&gt;\r
-\r
-    &lt;h1&gt;アーカイブ&lt;/h1&gt;\r
-    &lt;%archive(default)%&gt;\r
-\r
-  &lt;/body&gt;\r
-&lt;/html&gt;\r
-</pre>\r
-\r
-<p>これにより'default'テンプレートを用いて要求されたアーカイブが表示されます。</p>\r
-\r
-\r
-</div>\r
-\r
-\r
-<div class="page"><a name="skinpartsearch"></a>\r
-<h1>スキン:検索ページ</h1>\r
-<p>検索結果の表示に使われます。</p>\r
-\r
-<p>「検索ページ」の非常に基本的な形:\r
-</p>\r
-\r
-<pre>\r
-&lt;html&gt;\r
-  &lt;head&gt;\r
-    &lt;title&gt;私のウェブログ :: 検索&lt;/title&gt;\r
-  &lt;/head&gt;\r
-  &lt;body&gt;\r
-\r
-    &lt;h1&gt;検索&lt;/h1&gt;\r
-    &lt;%searchform%&gt;\r
-\r
-    &lt;h1&gt;検索結果&lt;/h1&gt;\r
-    &lt;%searchresults(default)%&gt;\r
-\r
-  &lt;/body&gt;\r
-&lt;/html&gt;\r
-</pre>\r
-\r
-<p>これにより、'default'テンプレートを用いた検索の結果が表示されます。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="skinparterror"></a>\r
-<h1>スキン:エラーページ</h1>\r
-<p>エラーが発生したときに用いられます。</p>\r
-\r
-<pre>\r
-&lt;html&gt;\r
-  &lt;head&gt;\r
-    &lt;title&gt;私のウェブログ :: エラー&lt;/title&gt;\r
-  &lt;/head&gt;\r
-  &lt;body&gt;\r
-\r
-    &lt;h1&gt;エラーが発生しました!&lt;/h1&gt;\r
-    &lt;%errormessage%&gt;\r
-\r
-    &lt;br /&gt;&lt;br /&gt;\r
-\r
-    &lt;a href="javascript:history.back();"&gt;戻る&lt;/a&gt;\r
-\r
-  &lt;/body&gt;\r
-&lt;/html&gt;\r
-</pre>\r
-\r
-<p>これによりエラーメッセージと、戻るためのリンクが表示されます。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="skinpartmember"></a>\r
-<h1>スキン:メンバー詳細ページ</h1>\r
-<p>メンバーの詳細を表示するのに使われます。</p>\r
-\r
-<p>「メンバー詳細ページ」の非常に基本的な形:</p>\r
-\r
-<pre>\r
-&lt;html&gt;\r
-  &lt;head&gt;\r
-    &lt;title&gt;私のウェブログ :: メンバーの詳細&lt;/title&gt;\r
-  &lt;/head&gt;\r
-  &lt;body&gt;\r
-\r
-    &lt;h1&gt;&lt;%member(name)%&gt; の情報&lt;/h1&gt;\r
-    ウェブサイト:\r
-    &lt;a href="&lt;%member(url)%&gt;"&gt;&lt;%member(url)%&gt;&lt;/a&gt;\r
-\r
-    &lt;h1&gt;メッセージを送る&lt;/h1&gt;\r
-    &lt;%membermailform%&gt;\r
-\r
-  &lt;/body&gt;\r
-&lt;/html&gt;\r
-</pre>\r
-\r
-<p>これにより、メンバー名とウェブサイトのアドレスとメール送信フォームが表示されます。</p>\r
-\r
-</div>\r
-\r
-\r
-<div class="page"><a name="skinpartimagepopup"></a>\r
-<h1>スキン:画像ポップアップウィンドウ</h1>\r
-<p>メディアファイル(画像)がポップアップウィンドウでの表示を必要とする場合に使われます。このスキンはそのような使われ方をする場合のレイアウトを決定します。</p>\r
-\r
-<p>「画像ポップアップウィンドウ」の非常に典型的な形:</p>\r
-\r
-<pre>\r
-&lt;html&gt;\r
-&lt;head&gt;\r
-  &lt;title&gt;&lt;%imagetext%&gt;&lt;/title&gt;\r
-  &lt;style type="text/css"&gt;\r
-   img { border: none; }\r
-  &lt;/style&gt;\r
-&lt;/head&gt;\r
-&lt;body&gt;\r
-  &lt;a href="javascript:window.close();"&gt;&lt;%image%&gt;&lt;/a&gt;\r
-&lt;/body&gt;\r
-&lt;/html&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-<div class="page"><a name="shortnames"></a>\r
-<h1>短縮名と表示される名前</h1>\r
-<p>ウェブログ、テンプレート、そしてスキンは名前や説明の他に短縮名を持たなくてはなりません。</p>\r
-\r
-<p>短縮名はaからzと0か9<strong>のみ</strong>で構成され、かつスペースを含むことは<strong>できません</strong>。</p>\r
-\r
-<p>表示される名前はメンバー名として使われます。aからz、 AからZ,、0から9とスペース(半角)が使用できます。ただし、スペースを名前の最初と最後に付けることはできません。</p>\r
-<p>訳注:テンプレートの名前には'/'が利用できたりするので、実際にはこの限りではないようです。</p>\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page"><a name="templatenew"></a>\r
-<h1>テンプレート:新しいアイテムに付けるマーク</h1>\r
-<p><a href="#cookies">最終訪問日時Cookieの保存</a>オプションが有効な時、「新しいアイテムに付けるマーク」テンプレートの内容が、前回訪問時から追加されたアイテムのための変数&lt;%new%&gt;に置き換えられます。変数<code>&lt;%new%&gt;</code>は、例えば<a href="#templateitems">アイテムの本体</a>テンプレートで利用できます。</p>\r
-\r
-<p>「最終訪問日時Cookieの保存」が有効でないか、アイテムが新しくなければ、このテンプレート部品は使われません。</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="strftime"></a>\r
-<h1>時間変数の概要</h1>\r
-\r
-<p>次の変換記述は文字列フォーマットに基づきます<small>(PHPドキュメントの<a href="http://jp.php.net/manual/ja/function.strftime.php" onclick="window.open(this.href);return false;" class="out">strftime関数</a>から持ってきたものです)</small>。より詳しい情報は<a href="http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.html" onclick="window.open(this.href);return false;" class="out" title="Open Group specification">Open Group Specification</a>にあります。</p>\r
-\r
-<ul>\r
-       <li><strong>%a</strong> - 現在のロケールに基づく短縮された曜日の名前</li>\r
-       <li><strong>%A</strong> - 現在のロケールに基づく完全な曜日の名前</li>\r
-       <li><strong>%b</strong> - 現在のロケールに基づく短縮された月の名前</li>\r
-       <li><strong>%B</strong> - 現在のロケールに基づく完全な月の名前</li>\r
-       <li><strong>%c</strong> - 現在のロケールに基づく適当な日付と時間の表現</li>\r
-       <li><strong>%d</strong> - 日付を10進数で(01から31) </li>\r
-       <li><strong>%H</strong> - 時間を24時間表示の10進数で(00から23まで)</li>\r
-       <li><strong>%I</strong> - 時間を12時間表示の10進数で(01から12までの範囲)</li>\r
-       <li><strong>%j</strong> - 年間での日付を10進数で表現 (001から366)</li>\r
-       <li><strong>%m</strong> - 月を10進数で表現 (01から12)</li>\r
-       <li><strong>%M</strong> - 分を10進数で表現</li>\r
-       <li><strong>%p</strong> - 指定した時間により 'am' または 'pm' 、または 現在のロケールに対応した文字列</li>\r
-       <li><strong>%S</strong> - 秒を10進数で表現</li>\r
-       <li><strong>%U</strong> - 年間で何番目の週であるかを 10 進数で表現。 年間で最初の日曜を最初の週の最初の日として数えます。</li>\r
-       <li><strong>%W</strong> - 現在の年で何番目の週であるかを10進数で表現。 年間で最初の月曜を最初の週の最初の日として数えます。</li>\r
-       <li><strong>%w</strong> - 曜日を10進数で表現。日曜は0になります。</li>\r
-       <li><strong>%x</strong> - 時間を除いた日付を現在のロケールに基づき表現します。</li>\r
-       <li><strong>%X</strong> - 日付を除いた時間を現在のロケールに基づき表現します。</li>\r
-       <li><strong>%y</strong> - 世紀の部分を除いた年を10進数として表現。(00から99までの範囲) </li>\r
-       <li><strong>%Y</strong> - 世紀を含む年を 10進数で表現</li>\r
-       <li><strong>%Z</strong> - タイムゾーンまたはその名前または短縮形</li>\r
-       <li><strong>%%</strong> - 文字リテラル'%' </li>\r
-</ul>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="pinguserland"></a>\r
-<h1>Weblogs.comへのPing</h1>\r
-<p>weblogを更新したときに、<a href="http://www.weblogs.com/" onclick="window.open(this.href);return false;" class="out">weblogs.com</a>に更新の通知(ping)を送るという選択ができます。このウェブサイトは要求する人みんなに、近頃更新されたweblogのリストを提供してくれます。多くのウェブサイトがこのデータを用いていますので、このpingを有効にすることでいくらかの新しい訪問者を得る事となるでしょう。</p>\r
-\r
-<p class="note"><strong>注意:</strong>この機能を正しく動かすために、blogごとの「設定」にあるweblogの「URL」と「Blogの名前」を埋める必要があります。</p>\r
-\r
-</div>\r
-\r
-<div class="page"><a name="blogsearchable"></a>\r
-\r
-<h1>常に検索対象に含める</h1>\r
-\r
-<p>「検索対象にする」オプションが選択されていると、対象のweblogは<strong>常に</strong>検索対象に含まれます。たとえ検索が他のweblogで行われたとしても。(訳注:2.5からのオプション)</p>\r
-\r
-<p>例として、'lifelog'と'linkdump'という2つのweblogを持ち、'linkdump'の「検索対象にする」が有効になっていると仮定しましょう。そうすると、'lifelog'での検索クエリは'linkdump'も検索するのに対して、'linkdump'の検索クエリは'linkdump'のエントリーしか検索しません。</p>\r
-\r
-\r
-</div>\r
-\r
-\r
-<div class="page"><a name="convertbreaks"></a>\r
-<h1>改行を変換する</h1>\r
-<p>デフォルトでは、Nucleusはアイテム内の改行を<code>&lt;br /&gt;</code>タグに変換します。だから改行も(X)HTMLでのアウトプットに現れるのです。</p>\r
-<p>手馴れたユーザーや、Semantic Web(<tt>br</tt>タグは情報を付加せず、ただ記述のためにのみ使われる)のために努力するユーザーは、この機能が迷惑だと感じるかもしれません。そしてこの機能を切るのです。</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="media"></a>\r
-<h1>メディア</h1>\r
-<p>Nucleusはメディアファイル(画像、動画、音楽など等)をウェブサイトにアップロードすることができます。</p>\r
-<p>このためにいくつかの設定が必要となります:</p>\r
-<ul>\r
-       <li><strong>メディア(画像・音声)ディレクトリ</strong>:メディアファイルが保存されるサーバー上の場所(ローカルのファイルシステム)</li>\r
-       <li><strong>メディアURL</strong>:メディアファイルのURL上の場所</li>\r
-       <li><strong>ファイルのアップロードを許可しますか?</strong>:ファイルのアップロードを不許可にすることが可能です</li>\r
-       <li><strong>アップロードを許可するファイルタイプ</strong>:アップロードできるファイルの拡張子群(反応が無い場合は、コンマで区切る)</li>\r
-       <li><strong>アップロードファイルの最大サイズ</strong>:アップロードファイルのサイズに制限を設ける</li>\r
-       <li><strong>アップロードするファイル名の頭に日付を付加する</strong>:もしこのオプションが有効なら、アップロードされたファイルには現在の日付が頭に付加されます。'bunny.jpg'という名前のファイルを2003年4月8日にアップロードしたなら、'20030408-bunny.jpg'というファイル名になります。何故こんな機能があるかというと、大量のファイルをアップロードしているときについ同じ名前を用いてしまう問題を避けるためです。</li>\r
-</ul>\r
-\r
-<p>メンバーはそれぞれ、自身のメディアファイルのプライベートなコレクションを持ちます。あとは、メディア・ディレクトリ下のサブディレクトリがグローバルなコレクション(メンバー間で共有)とみなされます。</p>\r
-\r
-<p>アップロードは、少なくとも一つのblogチームに入っているメンバーでなくては行えません。悪用を予防するためです。</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="protectmemnames"></a>\r
-<h1>メンバー名の保護</h1>\r
-<p>このオプションが有効なら、ログインしていないメンバーは登録済みメンバーと同じ名前を使ってコメントを加えることができません。このようにする理由は、ゲストによるメンバーへのなりすましを避けるためです。</p>\r
-</div>\r
-\r
-\r
-<div class="page"><a name="pluginurl"></a>\r
-<h1>プラグインURL</h1>\r
-<p>この設定はプラグイン管理領域のベースURLです。通常次のようになります。</p>\r
-<pre>http://hostname.com/nucleus/plugins/</pre>\r
-</div>\r
-\r
-<div class="page"><a name="skinsurl"></a>\r
-<h1>スキンURL</h1>\r
-<p>この設定はNucleusスキン・ディレクトリのベースURLです。通常次のようになります。</p>\r
-<pre>http://hostname.com/skins/</pre>\r
-</div>\r
-\r
-<div class="page"><a name="actionurl"></a>\r
-<h1>action.phpへのフルURL</h1>\r
-<p>この設定はNucleus付属のスクリプト<code>action.php</code>の絶対URLです。通常次のようになります。</p>\r
-<pre>http://hostname.com/actions.php</pre>\r
-</div>\r
-\r
-\r
-\r
-<div class="page"><a name="additem"></a>\r
-<h1>アイテムの追加</h1>\r
-<p>weblogにアイテムを追加する際、「本文」「タイトル」「続き」にて4種類のテンプレート変数を利用することができます:</p>\r
-<ul>\r
-       <li><a href="#templatevar-popup">&lt;%popup(...)%&gt;</a> ポップアップ画像の挿入</li>\r
-       <li><a href="#templatevar-image">&lt;%image(...)%&gt;</a> インライン画像の挿入</li>\r
-       <li><a href="#templatevar-media">&lt;%media(...)%&gt;</a> メディアオブジェクトの挿入</li>\r
-</ul>\r
-<p>普通、これらのタグはJavaScriptツールバーにある「メディアの追加」ボタンで書き入れられます。</p>\r
-\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-referer"></a>\r
-<h1>スキン変数:referer</h1>\r
-<p>参照もとのURLを挿入(空っぽになりえます)。</p>\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-<h2>スキンタイプ</h2>\r
-<p>全て</p>\r
-<h2>例</h2>\r
-<pre>\r
-&lt;a href="&lt;%referer%&gt;"&gt;戻る&lt;/a&gt;\r
-</pre>\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-itemid"></a>\r
-<h1>スキン変数:itemid</h1>\r
-<p>現在選択しているアイテムのIDを挿入</p>\r
-<h2>引数</h2>\r
-<p>None</p>\r
-<h2>スキンタイプ</h2>\r
-<p>個別アイテム</p>\r
-<h2>例</h2>\r
-<pre>\r
-&lt;%itemid%&gt;\r
-</pre>\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-itemlink"></a>\r
-\r
-<h1>スキン変数:itemlink</h1>\r
-\r
-<p>アイテムへの永続リンク(permanent link)を追加</p>\r
-\r
-<h2>引数</h2>\r
-\r
-<p>\r
-       オプション(2.5から)\r
-       <ul>\r
-               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>\r
-       </ul>\r
-</p>\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%itemlink%&gt;\r
-</pre>\r
-</div>\r
-\r
-<div class="page">\r
-<a name="skinvar-itemtitle"></a>\r
-<h1>スキン変数:itemtitle</h1>\r
-<p>アイテムのタイトルを挿入。HTMLは除去され、エンティティはエンコードされる。</p>\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-<h2>スキンタイプ</h2>\r
-<p>個別アイテム</p>\r
-<h2>例</h2>\r
-<pre>\r
-&lt;%itemtitle%&gt;\r
-</pre>\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-archivedate"></a>\r
-<h1>スキン変数:archivedate</h1>\r
-<p>アーカイブの日付としてフォーマット済みの日付を挿入。パラメーターなしで使うと、例えばアーカイブが2002年8月のものなら、'15 august 2002'か'august 2002'のどちらかが挿入されることになるでしょう。</p>\r
-<h2>引数</h2>\r
-<ul>\r
-       <li>オプション\r
-               <table><tr>\r
-                       <th>名前</th>\r
-                       <th>値</th>\r
-               </tr><tr>\r
-                       <td>Locale</td>\r
-                       <td>日付がフォーマットされるときに用いられる<a href="#templatelocale">Locale</a></td>\r
-               </tr><tr>\r
-                       <td>Format</td>\r
-                       <td>日付のフォーマット(<a href="#strftime">strftime変数</a>)</td>\r
-               </tr></table>\r
-       </li>\r
-</ul>\r
-<h2>スキンタイプ</h2>\r
-<p>月別アーカイブ</p>\r
-<h2>例</h2>\r
-<pre>\r
-Archive for &lt;%archivedate%&gt;\r
-Archive for &lt;%archivedate(dutch)%&gt;\r
-Archive for &lt;%archivedate(en,%B %Y)%&gt;\r
-</pre>\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-blog"></a>\r
-<h1>スキン変数:blog</h1>\r
-\r
-<p>現在動いているblog(通常はデフォルトのもの)の一番新しいアイテム群を、スキンに挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       オプション\r
-       <ul>\r
-               <li><strong><em>amount</em></strong>:表示するアイテムの数(デフォルトは10)。何番目のアイテムから始めるかというオフセットをNucleusに伝えるべく含めることもできる。例えば<code>10(5)</code>と記述すると5番目から始めて10個のアイテムを表示する。</li>\r
-               <li><strong><em>category</em></strong>:表示するカテゴリーの名前</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メインの目次、個別アイテム、月別アーカイブ、月別アーカイブ一覧、検索</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%blog(default,15)%&gt;\r
-&lt;%blog(default,5(15))%&gt;\r
-&lt;%blog(mytemplate)%&gt;\r
-&lt;%blog(mytemplate,5,mycategory)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-otherblog"></a>\r
-<h1>スキン変数:otherblog</h1>\r
-\r
-<p>指定されたblogの最新アイテム群をスキンに挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>blogname</strong>:表示するblogの名前(短縮名)</li>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>amount</em></strong>:表示するアイテムの数(デフォルトは10)。何番目のアイテムから始めるかというオフセットをNucleusに伝えるべく含めることもできる。例えば<code>10(5)</code>と記述すると5番目から始めて10個のアイテムを表示する。</li>\r
-               <li><strong><em>category</em></strong>:表示するカテゴリーの名前</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%otherblog(myblog,default,15)%&gt;\r
-&lt;%otherblog(yourblog,mytemplate)%&gt;\r
-&lt;%otherblog(yourblog,mytemplate,15,mycategory)%&gt;\r
-&lt;%otherblog(yourblog,mytemplate,5(15),mycategory)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-item"></a>\r
-<h1>スキン変数:item</h1>\r
-\r
-<p>現在選択されているアイテムを、指定されたテンプレートを用いて表示(コメントは除く)。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>template</strong>:使用するテンプレート名</li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%item(mytemplate)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-comments"></a>\r
-<h1>スキン変数:comments</h1>\r
-\r
-<p>現在選択されているアイテムについているコメントを、指定されたテンプレートを用いて表示。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>template</strong>:使用するテンプレート名</li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%comments(mytemplate)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-archive"></a>\r
-<h1>スキン変数:archive</h1>\r
-\r
-<p>選択された月と選択されているblog(普通はデフォルトのもの)のアーカイブを、指定されたテンプレートを用いて表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>月別アーカイブ</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%archive(mytemplate)%&gt;\r
-&lt;%archive(mytemplate,mycategory)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-otherarchive"></a>\r
-<h1>スキン変数:otherarchive</h1>\r
-\r
-<p>選択された月のアーカイブを、指定されたblogとテンプレートを用いて表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>blogname</strong>:使用するblogの名前(短縮名)</li>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>月別アーカイブ</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%otherarchive(myblog,mytemplate)%&gt;\r
-&lt;%otherarchive(myblog,mytemplate,mycategory)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-archivelist"></a>\r
-<h1>スキン変数:archivelist</h1>\r
-\r
-<p>現在選択しているblog(通常はデフォルトのもの)の存在するアーカイブのリストを、指定されたテンプレートを用いて表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>\r
-               <li><strong><em>limit</em></strong>:表示するリンク数の制限(例えば、過去3ヶ月分へのリンクしか表示させたくないときなど)</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%archivelist(mytemplate)%&gt;\r
-&lt;%archivelist(mytemplate,mycategory)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-<div class="page">\r
-<a name="skinvar-archivedaylist"></a>\r
-<h1>スキン変数:archivedaylist</h1>\r
-\r
-<p>スキン変数<a href="#skinvar-archivelist">archivelist</a>と同様ですが、<em>月</em>ごとの代わりに<em>日</em>ごとのエントリーを表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>\r
-               <li><strong><em>limit</em></strong>表示するリンク数の制限(例えば、過去3日分へのリンクしか表示させたくないときなど)</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム</p>\r
-\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%archivedaylist(mytemplate)%&gt;\r
-&lt;%archivedaylist(mytemplate,mycategory)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-otherarchivedaylist"></a>\r
-<h1>スキン変数:otherarchivedaylist</h1>\r
-\r
-<p>スキン変数<a href="#skinvar-otherarchivelist">otherarchivelist</a>と同様ですが、<em>月</em>ごとの代わりに<em>日</em>ごとのエントリーを表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>blogname</strong>:blogの名前(短縮名)</li>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       Optional\r
-       <ul>\r
-               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%otherarchivedaylist(yourblog,mytemplate)%&gt;\r
-&lt;%otherarchivedaylist(yourblog,mytemplate,mycategory)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-otherarchivelist"></a>\r
-<h1>スキン変数:otherarchivelist</h1>\r
-\r
-<p>指定されたblogの存在するアーカイブのリストを、指定されたテンプレートを用いて表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>blogname</strong>:blogの名前(短縮名)</li>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       Optional\r
-       <ul>\r
-               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%otherarchivelist(yourblog,mytemplate)%&gt;\r
-&lt;%otherarchivelist(yourblog,mytemplate,mycategory)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-categorylist"></a>\r
-<h1>スキン変数:categorylist</h1>\r
-\r
-<p>blog(デフォルトは選択されているblog)のカテゴリーリストを、指定されたテンプレートを用いて挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>blogname</em></strong>:使用するblogの短縮名</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%categorylist(mytemplate)%&gt;\r
-&lt;%categorylist(mytemplate,myweblog)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-category"></a>\r
-<h1>スキン変数:category</h1>\r
-\r
-<p>現在選択されているカテゴリーに関するいくつかの情報を挿入。カテゴリーが選択されていないときは何も表示しない。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>type</em></strong>:どの情報を内包させるのか。<b>name</b>-カテゴリー名(デフォルト)、<b>desc</b>-カテゴリーの説明、<b>id</b>-カテゴリーのID、のどれかとなる。</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%category%&gt;\r
-&lt;%category(id)%&gt;\r
-&lt;%category(desc)%&gt;\r
-&lt;%category(name)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-ifcat"></a>\r
-<h1>スキン変数:ifcat</h1>\r
-\r
-<p class="deprecated">Nucleusのバージョン2.0以降では使いません。<a href="#skinvar-if">&lt;%if(category)%&gt;</a>を代わりに使ってください。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       なし\r
-       <ul>\r
-               <li><em>text</em>:表示するテキスト</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%ifcat(Current Category: )%&gt;&lt;%category%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-searchresults"></a>\r
-<h1>スキン変数:searchresults</h1>\r
-\r
-<p>現在のクエリに対する検索結果を表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>maxresults</em></strong>:表示する結果の最大数</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>検索</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%searchresults(mytemplate)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-othersearchresults"></a>\r
-<h1>スキン変数:othersearchresults</h1>\r
-\r
-<p>指定されたblogの現在のクエリに対する検索結果を、指定されたテンプレートを用いて表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       必須:\r
-       <ul>\r
-               <li><strong>blogname</strong>:使用するblogの名前(短縮名)</li>\r
-               <li><strong>template</strong>:使用するテンプレート名</li>\r
-       </ul>\r
-       Optional:\r
-       <ul>\r
-               <li><strong><em>maxresults</em></strong>:表示する結果の最大数</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>検索</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%othersearchresults(myblog,mytemplate)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-query"></a>\r
-<h1>スキン変数:query</h1>\r
-\r
-<p>現在の検索クエリを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>検索</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%query%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-version"></a>\r
-<h1>スキン変数:version</h1>\r
-\r
-<p>現在使用しているNucleusのバージョンを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%version%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-previtem"></a>\r
-<h1>スキン変数:previtem</h1>\r
-\r
-<p>そのblogにおける一つ前のアイテムのIDを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%previtem%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-nextitem"></a>\r
-<h1>スキン変数:nextitem</h1>\r
-\r
-<p>そのblogにおける一つ先のアイテムのIDを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%nextitem%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-nextitemtitle"></a>\r
-<h1>スキン変数:nextitemtitle</h1>\r
-\r
-<p>そのblogにおける一つ先のアイテムのタイトルを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%nextitemtitle%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-previtemtitle"></a>\r
-<h1>スキン変数:previtemtitle</h1>\r
-\r
-<p>そのblogにおける一つ前のアイテムのタイトルを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%previtemtitle%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-prevarchive"></a>\r
-<h1>スキン変数:prevarchive</h1>\r
-\r
-<p>一日前か一ヶ月前かどちらかのアーカイブに相当する、<code>アーカイブ</code>標識を挿入。この値はアーカイブを選択するURL内で利用することができる。</p>\r
-\r
-<ul>\r
-       <li>もし表示されているアーカイブが一日単位なら、値は<code>YYYY-MM-DD</code>という形をとる</li>\r
-       <li>もし表示されているアーカイブが一ヶ月単位なら、値は<code>YYYY-MM</code>という形を取る</li>\r
-</ul>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>月別アーカイブ</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>&lt;a href="index.php?archive=&lt;%prevarchive%&gt;"&gt;....</code></pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-nextarchive"></a>\r
-<h1>スキン変数:nextarchive</h1>\r
-\r
-<p>一日先か一ヶ月先かどちらかのアーカイブに相当する、<code>アーカイブ</code>標識を挿入。この値はアーカイブを選択するURL内で利用することができる。\r
-</p>\r
-\r
-<ul>\r
-       <li>もし表示されているアーカイブが一日単位なら、値は<code>YYYY-MM-DD</code>という形をとる</li>\r
-       <li>もし表示されているアーカイブが一ヶ月単位なら、値は<code>YYYY-MM</code>という形を取る</li>\r
-</ul>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>月別アーカイブ</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>&lt;a href="index.php?archive=&lt;%nextarchive%&gt;"&gt;....</code></pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-archivetype"></a>\r
-<h1>スキン変数:archivetype</h1>\r
-\r
-<p><tt>日単位</tt>か<tt>月単位</tt>、どちらのアーカイブタイプが現在表示されているのか示す。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>月別アーカイブ</p>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-todaylink"></a>\r
-<h1>スキン変数:todaylink</h1>\r
-\r
-<p>weblogのメインページへのリンクを挿入。現在選択されているblogとカテゴリーが考慮される。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       オプション:(2.5からです)\r
-       <ul>\r
-               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>\r
-       </ul>\r
-</p>\r
-\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%todaylink%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-archivelink"></a>\r
-<h1>スキン変数:archivelink</h1>\r
-\r
-<p>現在選択しているblogとカテゴリー(blogが選択されていないときはデフォルトのblog)のアーカイブへのリンクを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-\r
-<p>\r
-       オプション:(2.5から)\r
-       <ul>\r
-               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>\r
-       </ul>\r
-</p>\r
-\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%archivelink%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-nextlink"></a>\r
-<h1>スキン変数:nextlink</h1>\r
-\r
-<p>アイテムページにおいては一つ先のアイテムへの、アーカイブページにおいては一つ先のアーカイブへのリンクを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       オプション:(2.5から)\r
-       <ul>\r
-               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>\r
-               <li><strong><em>amount</em></strong>:「検索」と「メインの目次」において:前または先のページに進んだときに表示されるアイテムの数</li>\r
-       </ul>\r
-</p>\r
-\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム、月別アーカイブ、検索、メインの目次</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%nextlink%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-prevlink"></a>\r
-<h1>スキン変数:prevlink</h1>\r
-\r
-<p>アイテムページにおいては一つ前のアイテムへの、アーカイブページにおいては一つ前のアーカイブへのリンクを挿入。「検索」と「メインの目次」でも使える。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       オプション:(2.5から)\r
-       <ul>\r
-               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>\r
-               <li><strong><em>amount</em></strong>:「検索」と「メインの目次」において:前または先のページに進んだときに表示されるアイテムの数</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム、月別アーカイブ、検索、メインの目次</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%prevlink%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-errormessage"></a>\r
-<h1>スキン変数:errormessage</h1>\r
-\r
-<p>エラーが発生したときに、それに相当するメッセージを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>エラー</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%errormessage%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-imagetext"></a>\r
-<h1>スキン変数:imagetext</h1>\r
-\r
-<p class="deprecated">このスキン変数はNucleusバージョン2.0以降使いません。代わりに<a href="#skinvar-image"><code>&lt;%image(caption)%&gt;</code></a>を使ってください。</p>\r
-\r
-<p>ポップアップ画像に見出しテキストをつける</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>画像ポップアップウィンドウ</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%imagetext%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-image"></a>\r
-<h1>スキン変数:image</h1>\r
-\r
-<p>選択された画像を挿入(画像ポップアップ用)</p>\r
-\r
-<h2>引数</h2>\r
-\r
-<p>オプション:</p>\r
-<ul>\r
-       <li>\r
-               <em>タイプ</em>\r
-               <table><tr>\r
-                       <td><strong>imgtag</strong>(デフォルト)</td>\r
-                       <td>完全なXHTMLタグ <code>&lt;img ... /&gt;</code></td>\r
-               </tr><tr>\r
-                       <td><strong>url</strong></td>\r
-                       <td>画像ファイルへのURL</td>\r
-               </tr><tr>\r
-                       <td><strong>width</strong></td>\r
-                       <td>イメージの幅</td>\r
-               </tr><tr>\r
-                       <td><strong>height</strong></td>\r
-                       <td>イメージの高さ</td>\r
-               </tr><tr>\r
-                       <td><strong>caption</strong></td>\r
-                       <td>画像の見出し(画像と共に表示されるテキスト)</td>\r
-               </tr></table>\r
-       </li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>画像ポップアップウィンドウ</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%image%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-vars"></a>\r
-<h1>スキン変数:vars</h1>\r
-\r
-<p class="deprecated">このスキン変数はNucleusバージョン2.0以降使いません。<a href="#skinvar-itemid">スキン変数:itemid</a>を使ってこのHTMLをあなた自身で挿入することはたいした手間ではないでしょう。</p>\r
-\r
-<p>itemidの入り隠しフォームのインプット欄を挿入。</p>\r
-\r
-<code>&lt;input type="hidden" name="itemid" value="<strong>1234</strong>" /&gt;</code>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-sitevar"></a>\r
-<h1>スキン変数:sitevar</h1>\r
-\r
-<p>サイト変数をインクルードする。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>タイプ</strong>:表示される変数の名前\r
-       <ul>\r
-               <li><em>url</em>:サイトのURL</li>\r
-               <li><em>name</em>:サイトの名前</li>\r
-               <li><em>admin</em>:管理者のメールアドレス</li>\r
-       </ul>\r
-       </li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%sitevar(name)%&gt;\r
-&lt;%sitevar(url)%&gt;\r
-&lt;a href="mailto:&lt;%sitevar(email)%&gt;"&gt;管理人&lt;/a&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-blogsetting"></a>\r
-<h1>スキン変数:blogsetting</h1>\r
-\r
-<p>現在選択しているblog(普通はデフォルトのもの)の詳細な設定を挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>タイプ</strong>:どの設定が入れられるか\r
-           <ul>\r
-               <li><em>id</em>:該当blogのID</li>\r
-               <li><em>url</em>:該当blogのURL</li>\r
-               <li><em>name</em>:該当blogの名前(長い名前)</li>\r
-               <li><em>desc</em>:該当blogの説明</li>\r
-               <li><em>short</em>:該当blogの短縮名</li> \r
-           </ul>\r
-       </li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム、メンバー詳細</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%blogsetting(name)%&gt;\r
-&lt;%blogsetting(id)%&gt;\r
-&lt;%blogsetting(desc)%&gt;\r
-&lt;a href="&lt;%blogsetting(url)%&gt;"&gt;...&lt;/a&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-member"></a>\r
-<h1>スキン変数:member</h1>\r
-\r
-<p>現在ログインしているメンバーに関する情報を挿入。メンバーの詳細ページにおいては、要求されたメンバーについての同じ情報を表示する追加オプションがある。</p>\r
-\r
-<p>ログインしていない訪問者の場合は、<em>your...</em>のパラメーターは何も挿入しない。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>タイプ</strong>:表示される情報\r
-               <p>ログインしたメンバーの情報:</p>\r
-           <ul>\r
-               <li><em>yourname</em>:メンバーのニックネーム(ログインに使うもの)</li>\r
-               <li><em>yourrealname</em>:メンバーのフルネーム</li>\r
-               <li><em>yournotes</em>:メンバーが自身のために設定できるその他の情報(備考欄)</li>\r
-               <li><em>yoururl</em>:メンバーのウェブサイトURL</li>\r
-               <li><em>youremail</em>:メンバーのメールアドレス</li>\r
-               <li><em>yourid</em>:メンバーのID</li>\r
-           </ul>\r
-           <p>要求されたメンバーの情報(「メンバー詳細」のページでのみ利用可):</p>\r
-           <ul>\r
-               <li><em>name</em>:メンバーのニックネーム(ログインに使うもの)</li>\r
-               <li><em>realname</em>:メンバーのフルネーム</li>\r
-               <li><em>notes</em>:メンバーが自身のために設定できるその他の情報(備考欄)</li>\r
-               <li><em>url</em>:メンバーのウェブサイトURL</li>\r
-               <li><em>email</em>:メンバーのメールアドレス</li>\r
-               <li><em>id</em>:メンバーのID</li>\r
-           </ul>\r
-       </li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>\r
-&lt;%if(loggedin)%&gt;\r
-こんにちは&lt;%member(yourrealname)%&gt;さん\r
-&lt;%endif%&gt;\r
-</code></pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-preview"></a>\r
-<h1>スキン変数:preview</h1>\r
-\r
-<p>指定されたテンプレートを用いて、ページ内にアイテムのプレビューを挿入。(<a href="#skinvar-additemform">additemform</a>に関連して使われる)</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>template</strong>:使用されるテンプレート名</li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メインの目次</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%preview(mytemplate)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-adminurl"></a>\r
-<h1>スキン変数:adminurl</h1>\r
-\r
-<p>管理領域への完全なURLを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;a href="&lt;%adminurl%&gt;"&gt;管理領域&lt;/a&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-additemform"></a>\r
-<h1>スキン変数:additemform</h1>\r
-\r
-<p>現在選択しているblog(普通はデフォルトのもの)へのアイテム追加フォームを表示。ほとんどの場合、<a href="#skinvar-preview">preview</a>と共に使われる。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メインの目次</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%additemform%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-include"></a>\r
-<h1>スキン/テンプレート変数:include</h1>\r
-\r
-<p>テキストファイルをアウトプット時に取り込む。ファイルの中身はなんらかの構文解析にかけられることは無いので、スキン/テンプレート変数やPHPコードを使うことはできない。(もしインクルード時に展開させたいなら、<a href="#skinvar-parsedinclude">parsedinclude</a>と<a href="#skinvar-phpinclude">phpinclude</a>をみること)</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>filename</strong>:取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもよい)。ここでURLを使うこともできることに注目を。</li>\r
-</ul>\r
-\r
-<h2>注意</h2>\r
-<ul>\r
-       <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code>と<code>IncludePrefix</code></a>に影響されます。</li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%include(filename.txt)%&gt;\r
-&lt;%include(/home/user/myself/filename.txt)%&gt;\r
-&lt;%include(http://mydomain.com/filename.html)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-phpinclude"></a>\r
-<h1>スキン/テンプレート変数:phpinclude</h1>\r
-\r
-<p>PHPファイルをアウトプット時にインクルードする。ファイルの中身はPHPとして解釈されるので注意すること。Nucleusのスキン/テンプレート変数は展開<b>されない</b>。(他のインクルードオプションとして、<a href="#skinvar-parsedinclude">parsedinclude</a>と<a href="#skinvar-include">include</a>をみること)</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>filename</strong>:取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもよい)。</li>\r
-</ul>\r
-\r
-<h2>注意</h2>\r
-<ul>\r
-       <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code>と<code>IncludePrefix</code></a>に影響されます。</li>\r
-       <li>ファイルはスタンダードなphpのコマンド<code>include()</code>を使ってインクルードされます。このコマンドは<em>内部の</em>クラス・メソッドから呼び出されるので、自身で<strong>アクセスしたいグローバル変数を宣言する必要があります</strong>。多くの<a href="#skinvar-phpinclude-vars">標準的な変数</a>はNucleusによって自動的にグローバルが宣言されます。</li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>&lt;%phpinclude(filename.php)%&gt;\r
-&lt;%phpinclude(/home/user/myself/filename.php)%&gt;</code></pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-phpinclude-vars"></a>\r
-<h1>スキン/テンプレート変数:phpinclude:vars</h1>\r
-\r
-<p>次のグローバル変数は、スキン/テンプレート変数の<a href="#skinvar-phpinclude">phpinclude</a>によってインクルードされたファイルからアクセスできるものです:</p>\r
-\r
-<p>\r
-$GATEWAY_INTERFACE, $SERVER_NAME, $SERVER_SOFTWARE\r
-<br />$SERVER_PROTOCOL, $REQUEST_METHOD, $QUERY_STRING\r
-<br />$DOCUMENT_ROOT, $HTTP_ACCEPT, $HTTP_ACCEPT_CHARSET\r
-<br />$HTTP_ACCEPT_ENCODING, $HTTP_ACCEPT_LANGUAGE\r
-<br />$HTTP_CONNECTION, $HTTP_HOST, $HTTP_REFERER\r
-<br />$HTTP_USER_AGENT, $REMOTE_ADDR, $REMOTE_PORT\r
-<br />$SCRIPT_FILENAME, $SERVER_ADMIN, $SERVER_PORT\r
-<br />$SERVER_SIGNATURE, $PATH_TRANSLATED, $SCRIPT_NAME\r
-<br />$REQUEST_URI, $argv, $argc, $PHP_SELF\r
-<br />$HTTP_COOKIE_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS\r
-<br />$HTTP_POST_FILES, $HTTP_ENV_VARS, $HTTP_SERVER_VARS\r
-<br />$HTTP_SESSION_VARS, $PATH_INFO, $HTTPS\r
-<br />$HTTP_RAW_POST_DATA, $HTTP_X_FORWARDED_FOR\r
-</p>\r
-\r
-<p>他の変数に関しては、'<tt>global $varname;</tt>'をきっちりとコードに加える必要があります。</p>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-parsedinclude"></a>\r
-<h1>スキン/テンプレート変数:parsedinclude</h1>\r
-\r
-<p>ファイルをアウトプット時に取り込む。ファイルの中身はNucleusのスキン/テンプレートによる構文解析にかけられるので、スキン/テンプレート変数を使うことができる。(他のインクルードオプションとして、<a href="#skinvar-phpinclude">phpinclude</a>と<a href="#skinvar-include">include</a>をみること)</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li><strong>filename</strong>:取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもよい)。</li>\r
-</ul>\r
-\r
-<h2>注意</h2>\r
-<ul>\r
-       <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code>と<code>IncludePrefix</code></a>に影響されます。</li>\r
-       <li>インクルードしたファイルの中からでも、再び<code>&lt;%parsedinclude(filename)%&gt;</code>を呼び出すことができます。無限ループを避けるため、行えるのは最大で3段階となります。</li>\r
-</ul>\r
-\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%parsedinclude(filename.txt)%&gt;\r
-&lt;%parsedinclude(/home/user/myself/filename.txt)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-plugin"></a>\r
-<h1>スキン/テンプレート変数:plugin</h1>\r
-\r
-<p>プラグインを呼び出す。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li>\r
-               <p>必須:</p>\r
-               <table><tr>\r
-                       <th>名前</th>\r
-                       <th>内容</th>\r
-               </tr><tr>\r
-                       <td>PlugName</td>\r
-                       <td>呼び出されるプラグインの名前。<strong>この名前は注意をはらうべき部分</strong></td>\r
-               </tr></table>\r
-       </li>\r
-       <li><p>プラグインによっては、その他のパラメーターが追加される。</p></li>\r
-</ul>\r
-\r
-<h2>注意</h2>\r
-<ul>\r
-       <li>プラグイン名が既存の変数とぶつからない場合、<code>&lt;%PluginName(parameters)%&gt;</code>を用いて直接呼び出すことができます。</li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%plugin(Calendar)%&gt;\r
-&lt;%plugin(LastComments,myweblog)%&gt;\r
-&lt;%LastComments(myweblog)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-loginform"></a>\r
-<h1>スキン変数:loginform</h1>\r
-\r
-<p>ログインフォームを加えるか、"ログイン中:karma !(ログアウト)"メッセージを表示する</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>&lt;%loginform%&gt;</code></pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-commentform"></a>\r
-<h1>スキン変数:commentform</h1>\r
-\r
-<p>アイテムページにコメントフォームを加える。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>destinationurl</em></strong>:コメント追加後にリダイレクトさせるURLを設定(デフォルトでは、投稿したアイテムの「アイテム詳細」ページにリダイレクトされる)</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%commentform%&gt;\r
-&lt;%commentform(http://host/thanks.html)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-set"></a>\r
-<h1>スキン/テンプレート変数 set</h1>\r
-\r
-<p><a href="#parser-properties" title="A list of available parser properties">パーサーのプロパティ</a>を設定する。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       <ul>\r
-               <li><strong>property</strong>:プロパティの名前</li>\r
-               <li><strong>value</strong>:プロパティの値</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%set(IncludeMode,skindir)%&gt;\r
-&lt;%set(IncludePrefix,somedir/)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-skinfile"></a>\r
-<h1>スキン/テンプレート変数:skinfile</h1>\r
-\r
-<p>インポートされたスキンから、スキンのURLに相対リンクを張るときに使う。最良の結果を得るためには、<a href="#parser-properties">パーサーのプロパティ</a><tt>IncludePrefix</tt>と共に使うこと。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       <ul>\r
-               <li><strong>filename</strong>:ファイルの名前(正確なURLに変換される)</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%skinfile(mystyle.css)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-skinname"></a>\r
-<h1>スキン/テンプレート変数:skinname</h1>\r
-\r
-<p>現在使用しているスキンの名前を挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%skinname%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-if"></a>\r
-<a name="skinvar-else"></a>\r
-<a name="skinvar-endif"></a>\r
-<h1>スキン変数:if/else/endif</h1>\r
-\r
-<p>決まった条件を満たしているときのみ、コンテンツ・ブロックを挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>スキン変数<code>if</code>のみオプションがある</p>\r
-\r
-\r
-<ul>\r
-       <li><strong>type</strong>:条件の種類</li>\r
-       <li><em>name</em>:オプションの名前(必須ではない)</li>\r
-       <li><em>value</em>:チェックする値(必須ではない)</li>\r
-</ul>\r
-\r
-<h2>条件の種類</h2>\r
-\r
-<ul>\r
-       <li><strong>category</strong>:カテゴリーを選択しているとき、条件は満たされる\r
-               <ul>\r
-                 <li><strong>category</strong>:カテゴリが選択いるか調べる</li>\r
-                 <li><strong>category,catname,<em>CategoryName</em></strong>:現在のカテゴリが <em>CategoryName</em> と一致するか調べる</li>\r
-                 <li><strong>category,catid,<em>CategoryID</em></strong>:現在のカテゴリが <em>CategoryId</em> と一致するか調べる</li>\r
-               </ul>\r
-       </li>\r
-       <li><strong>blogsetting</strong>:blog設定の<em>name</em>項目の値が<em>value</em>と一致しているか調べる(nameはSQLテーブルnucleus_blogにあるカラム名)</li>\r
-       <li><strong>loggedin</strong>:訪問中のメンバーが現在ログインしていれば、条件は満たされる</li>\r
-       <li><strong>onteam</strong>:訪問中のメンバーがログインしており、かつ現在いるblog(あるいは<em>name</em>パラメーターで指示されたblog)のチームに入っていれば、条件は満たされる</li>\r
-       <li><strong>previtem</strong>:もし現在のweblogにより新しいアイテムがあるのなら真となる(スキンタイプは個別アイテム 2.5から) (item skintype)</li>\r
-       <li><strong>nextitem</strong>:もし現在のweblogにより古いアイテムがあるのなら真となる(スキンタイプは個別アイテム 2.5から)</li>\r
-       <li><strong>skintype</strong>:現在のスキンタイプが<em>value</em>(index, search, item, archive, archivelist, ...)と一致するか調べる(URLでの表記となることに注意 2.5から)</li>\r
-       <li><strong>hasplugin</strong>:プラグインがインストールされているか、またはプラグインのオプションが特定の値をとっているか調べる\r
-               <ul>\r
-                       <li><strong>hasplugin,<em>PluginName</em></strong>:該当プラグインが存在すれば、条件は満たされる</li>\r
-                       <li><strong>hasplugin,<em>PluginName</em>,<em>OptionName</em></strong>:プラグインのオプションが「いいえ」に設定されてなければ、条件は満たされる</li>\r
-                       <li><strong>hasplugin,<em>PluginName</em>,<em>OptionName=value</em></strong>:プラグインのオプションが特定の値に設定されていれば、条件は満たされる</li>\r
-               </ul>\r
-       </li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%if(loggedin)%&gt;\r
-おかえりなさい!\r
-&lt;%else%&gt;\r
-ようこそ!\r
-&lt;%endif%&gt;\r
-</pre>\r
-\r
-<pre>\r
-&lt;%if(category,catname,Off Topic)%&gt;\r
-'Off Topic' カテゴリへようこそ。\r
-&lt;%endif%&gt;\r
-</pre>\r
-\r
-<h2>注意</h2>\r
-\r
-<p>条件が満たされない時にだけ何らかの表示を行いたい場合は、次のようにすることができます:</p>\r
-\r
-<pre>\r
-&lt;%if(skintype,error)%&gt;&lt;%else%&gt;\r
-&lt;%blogsetting(name)%&gt;\r
-&lt;%endif%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-membermailform"></a>\r
-<h1>スキン変数:membermailform</h1>\r
-\r
-<p>(メンバー詳細のページで)詳細が表示されているメンバーに対して、他のログインしているメンバーがメッセージを送ることのできるフォームを表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>rows</em></strong>:ボックスの横列の数値(デフォルトは10)</li>\r
-               <li><strong><em>cols</em></strong>:ボックスの縦列の数値(デフォルトは40)</li>\r
-               <li><strong><em>destination url</em></strong>:メッセージが送信された後リダイレクトするURL</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メンバー詳細</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%membermailform%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-searchform"></a>\r
-<h1>スキン変数:searchform</h1>\r
-\r
-<p>現在のblogに対する検索フォームを表示。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>blogname</em></strong>:検索を実行するblogの名前(短縮名)</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、個別アイテム</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%searchform%&gt;\r
-&lt;%searchform(otherweblog)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-nucleusbutton"></a>\r
-<h1>スキン変数:nucleusbutton</h1>\r
-\r
-<p><a href="http://nucleuscms.org/" class="out" onclick="window.open(this.href);return false;" title="Nucleus website (opens in new window)">Nucleusウェブサイト</a>へのリンクが付いた、ボタン(あるいはバナー)を挿入。</p>\r
-\r
-<h2>引数</h2>\r
-<p>\r
-       オプション:\r
-       <ul>\r
-               <li><strong><em>imgurl</em></strong>:画像のURL(デフォルトのものを使わない場合)</li>\r
-               <li><strong><em>imgwidth</em></strong>:画像の横幅(ピクセル単位)</li>\r
-               <li><strong><em>imgheight</em></strong>: 画像の高さ(ピクセル単位)</li>\r
-       </ul>\r
-</p>\r
-\r
-<h2>注意</h2>\r
-<ul>\r
-       <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code>と<code>IncludePrefix</code></a>に影響されます。</li>\r
-</ul>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%nucleusbutton%&gt;\r
-&lt;%nucleusbutton(nucleus/nucleus.gif,46,43)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="skinvar-self"></a>\r
-<h1>スキン変数:self</h1>\r
-\r
-<p>現在表示しているページのファイル名を挿入(index.phpか変更しているならそのファイル名)</p>\r
-\r
-<h2>引数</h2>\r
-<p>なし</p>\r
-\r
-<h2>スキンタイプ</h2>\r
-\r
-<p>すべて</p>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%self%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevars-overview"></a>\r
-<h1>テンプレート変数:概略</h1>\r
-\r
-<h2>どういったものなのか?</h2>\r
-\r
-<p>テンプレート変数は、厳密にいうならスキン変数と同じ方法で広く働きます。唯一の違いはテンプレート内部で利用できることでしょう。変数は<code>&lt;%<i>varname</i>%&gt;</code>という形を用いて呼び出され、変数の機能によってはテキストをインクルードします。また、その他のオプションパラメーターを持つ変数もあります。</p>\r
-\r
-<h2>利用可能な変数</h2>\r
-\r
-<p>これらテンプレート変数は、次のテンプレート部品で使われます:<tt>「アイテムのヘッダー」、「アイテムの本体」、「アイテムのフッター」、「日付ヘッダー」、「日付フッター」、「続きへのリンク」、「アイテムリンクの編集」</tt>。(変数<tt>image</tt>、<tt>popup</tt>、<tt>media</tt>もまたweblogアイテムの中で使われます。)</p>\r
-\r
-<ul>\r
-       <li><a href="#templatevars-basic">基本の変数・・・</a>(title、bodyなど...)</li>\r
-       <li><a href="#templatevars-advanced">上級の変数・・・</a>(include、pluginなど...)</li>\r
-</ul>\r
-\r
-<p>コメント関連のテンプレート部品(<tt>「コメントのヘッダー」、「コメントの本体」、「コメントのフッター」、「コメントが1つの時」、「コメントが2つ以上の時」、「コメントの続きを読む」、「コメントが無い時」、「長すぎるコメントの時」</tt>)は利用可能な変数のセットが異なります:</p>\r
-\r
-<ul>\r
-       <li><a href="#templatevars-comments">コメント関連の変数・・・</a></li>\r
-</ul>\r
-\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevars-basic"></a>\r
-<h1>テンプレート変数:基本の変数</h1>\r
-\r
-<p>これらすべての変数は、そのときパースされているアイテムに関わる値となります。</p>\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>title</td>\r
-       <td>アイテムのタイトル</td>\r
-</tr><tr>\r
-       <td>body</td>\r
-       <td>本文のテキスト</td>\r
-</tr><tr>\r
-       <td>more</td>\r
-       <td>続きのテキスト</td>\r
-</tr><tr>\r
-       <td>category</td>\r
-       <td>カテゴリーの名前</td>\r
-</tr><tr>\r
-       <td>categorylink</td>\r
-       <td>カテゴリーへの未加工のリンク</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-karma">karma</a></td>\r
-       <td>カルマ投票の得点</td>\r
-</tr><tr>\r
-       <td>authorlink</td>\r
-       <td>作者への未加工のリンク</td>\r
-</tr><tr>\r
-       <td>itemlink</td>\r
-       <td>アイテムへの未加工のリンク(permanent)</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-author">author</a></td>\r
-       <td>作者の名前</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-smartbody">smartbody</a></td>\r
-       <td>本文か続きのどちらか</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-morelink">morelink</a></td>\r
-       <td>続きを読む為のリンク</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-date">date</a></td>\r
-       <td>フォーマット済みの日付</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-time">time</td>\r
-       <td>フォーマット済みの時刻</td>\r
-</tr><tr>\r
-       <td>daylink</td>\r
-       <td>その日のアーカイブへの未加工のリンク</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-comments">comments</td>\r
-       <td>コメント・ブロックかコメント数</td>\r
-</tr><tr>\r
-       <td>itemid</td>\r
-       <td>アイテムのID</td>\r
-</tr><tr>\r
-       <td>blogurl</td>\r
-       <td>blogのURL</td>\r
-</tr></table>\r
-\r
-<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>\r
-\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevars-advanced"></a>\r
-<h1>テンプレート変数:上級の変数</h1>\r
-\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>authorid</td>\r
-       <td>現在のアイテムの作者ID</td>\r
-</tr><tr>\r
-       <td>blogid</td>\r
-       <td>blogのID</td>\r
-</tr><tr>\r
-       <td>catid</td>\r
-       <td>現在のアイテムが属するカテゴリーのID</td>\r
-</tr><tr>\r
-       <td>query</td>\r
-       <td>検索のクエリ(もし存在するなら)</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-syndicate_title">syndicate_title</a></td>\r
-       <td>配信用のタイトル</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-syndicate_description">syndicate_description</a></td>\r
-       <td>配信用の本文テキスト</td>\r
-</tr><tr>\r
-       <td>karmaposlink</td>\r
-       <td>投票用の未加工リンク</td>\r
-</tr><tr>\r
-       <td>karmaneglink</td>\r
-       <td>投票用の未加工リンク</td>\r
-</tr><tr>\r
-       <td>new</td>\r
-       <td>新しいアイテムを示すテキスト</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-include">include</a></td>\r
-       <td>パース無しでファイルをインクルード</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-parsedinclude">parsedinclude</a></td>\r
-       <td>パースしてファイルをインクルード</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-phpinclude">phpinclude</a></td>\r
-       <td>PHPでパースしてファイルをインクルード</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-plugin">plugin</a></td>\r
-       <td>プラグインを実行</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-edit">edit</a></td>\r
-       <td>アイテム編集のリンクを挿入</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-editlink">editlink</a></td>\r
-       <td>アイテム編集の未加工リンク(bookmarkletへのリンク)</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-editpopupcode">editpopupcode</a></td>\r
-       <td>editlink用のウィンドウをポップアップするjavascriptコード</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-skinfile">skinfile</a></td>\r
-       <td>インポートされたスキンに属しているファイル用の正確なURLの取り込み</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-set">set</a></td>\r
-       <td>パーサーのプロパティを設定</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-image">image</a></td>\r
-       <td>メディア書庫へのインライン画像</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-popup">popup</a></td>\r
-       <td>メディア・ディレクトリの画像をポップアップ</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-media">media</a></td>\r
-       <td>メディア・ディレクトリからの他のメディア・オブジェクト</td>\r
-</tr><tr>\r
-       <td>relevance</td>\r
-       <td>検索結果を表示するテンプレートに'search hit relevance'をインクルードする(2.5より)</td>\r
-</tr></table>\r
-\r
-<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevars-comments"></a>\r
-<h1>テンプレート変数:コメント関連</h1>\r
-\r
-\r
-<table><tr>\r
-       <th>名前</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td>body</td>\r
-       <td>コメントの本体</td>\r
-</tr><tr>\r
-       <td>user</td>\r
-       <td>ユーザー名</td>\r
-</tr><tr>\r
-       <td>userid</td>\r
-       <td>ユーザーのURLかメールアドレス</td>\r
-</tr><tr>\r
-       <td>userlink</td>\r
-       <td>非メンバーにはメールアドレスかURLに対して、メンバーにはメンバー詳細ページに対してリンクを行う(自動で切り替えるスマートなリンク)。注意:このリンクは&lt;a href="..."&gt;と&lt;/a&gt;タグを既に含んでいる。(有効なURLかメールアドレスが無い場合は、ユーザーの名前のみが表示される)</td>\r
-</tr><tr>\r
-       <td>userlinkraw</td>\r
-       <td>上と同じだが&lt;a href..の部分を除く。有効なURLかメールアドレスが存在しないときは空っぽになる。</td>\r
-</tr><tr>\r
-       <td>memberid</td>\r
-       <td>メンバーのID(非メンバーは0となる)</td>\r
-</tr><tr>\r
-       <td>commentcount</td>\r
-       <td>該当アイテムに付けられたコメントの総数</td>\r
-</tr><tr>\r
-       <td><a href="#templatecommentwords" title="commentword()">commentword</a></td>\r
-       <td>1 'comment'、2 'comments'</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-date" title="date([format])">date</a></td>\r
-       <td>コメントが追加された時の日付</td>\r
-</tr><tr>\r
-       <td><a href="#templatevar-time" title="time([format])">time</a></td>\r
-       <td>コメントが追加された時の時刻</td>\r
-</tr><tr>\r
-       <td>host</td>\r
-       <td>コメントがどこのホストから投稿されたか</td>\r
-</tr><tr>\r
-       <td>ip</td>\r
-       <td>コメントがどこのIPアドレスから投稿されたか</td>\r
-</tr><tr>\r
-       <td>commentid</td>\r
-       <td>現在のコメントのID</td>\r
-</tr><tr>\r
-       <td>itemid</td>\r
-       <td>現在のアイテムのID</td>\r
-</tr><tr>\r
-       <td>itemlink</td>\r
-       <td>アイテムの詳細ページへのリンク</td>\r
-</tr><tr>\r
-       <td><a href="#templateitemtitle" title="itemtitle([maxlength])">itemtitle</a></td>\r
-       <td>現在のアイテムのタイトル</td>\r
-</tr><tr>\r
-       <td>blogid</td>\r
-       <td>weblogのID</td>\r
-</tr><tr>\r
-       <td><a href="#templatememberextra" title="authtext()">authtext</a></td>\r
-       <td>メンバーなら証となるテキストを表示し、非メンバーなら空っぽ</td>\r
-</tr><tr>\r
-       <td>short</td>\r
-       <td>最初の改行部分から先が省略されたコメントの本体。テンプレートによっては末尾に<a href="#templatecommentcontinued">リンクが追加</a>される。</td>\r
-</tr><tr>\r
-       <td>timestamp</td>\r
-       <td>コメントが追加された時のタイムスタンプ</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-include" title="include(filename)">include</a></td>\r
-       <td>パース無しでファイルをインクルード</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-parsedinclude" title="parsedinclude(filename)">parsedinclude</a></td>\r
-       <td>パースしてファイルをインクルード</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-phpinclude" title="phpinclude(filename)">phpinclude</a></td>\r
-       <td>PHPでパースしてファイルをインクルード</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-plugin" title="plugin(name,[options...])">plugin</a></td>\r
-       <td>プラグインを実行</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-skinfile" title="skinfile(filename)">skinfile</a></td>\r
-       <td>インポートされたスキンに属しているファイル用の正確なURLの取り込み</td>\r
-</tr><tr>\r
-       <td><a href="#skinvar-set" title="set(property,value)">set</a></td>\r
-       <td>パーサーのプロパティを設定</td>\r
-</tr></table>\r
-\r
-\r
-\r
-<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-karma"></a>\r
-<h1>テンプレート変数:karma</h1>\r
-\r
-<p>カルマ投票のデータを挿入。カルマ投票は、アイテムの'カルマ'を投票する方法。一回のクリックで、訪問者は正にでも負にでも投票できる。これら投票の総計が、該当記事が訪問者にどのように思われているのか知らしめてくれるだろう。</p>\r
-\r
-<h2>引数</h2>\r
-\r
-<ul>オプション:\r
-       <ul>\r
-               <li><strong><em>どういったものか?</em></strong>:表示される情報の種類を選択:\r
-                       <ul>\r
-                               <li><strong>totalscore</strong>:カルマ投票の総合得点(正の投票数から負の投票数を引いたもの)<em>(デフォルト)</em></li>\r
-                               <li><strong>pos</strong>:正の投票の総計</li>\r
-                               <li><strong>neg</strong>:負の投票の総計</li>\r
-                               <li><strong>votes</strong>:投票数の総計</li>\r
-                               <li><strong>posp</strong>:正に投じられたパーセンテージ</li>\r
-                               <li><strong>negp</strong>:負に投じられたパーセンテージ</li>\r
-                       </ul>\r
-               </li>\r
-       </ul>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-<pre><code>&lt;%karma(posp)%&gt;がよい記事だと評価しました(総計&lt;%votes%&gt;票)</code></pre>\r
-\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templateitemtitle"></a>\r
-<h1>テンプレート変数:templateitemtitle</h1>\r
-\r
-<p>コメント関連テンプレート変数において、元記事のタイトルを挿入する。</p>\r
-\r
-<h2>引数</h2>\r
-\r
-<ul>オプション:\r
-       <ul>\r
-               <li><strong><em>maxlength</em></strong>:指定されると、<a href="#templatevar-syndicate_title">テンプレート変数syndicate_title</a>のような振る舞いでアイテムのタイトルを加工する。</li>\r
-       </ul>\r
-</ul>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-author"></a>\r
-<h1>テンプレート変数:author</h1>\r
-\r
-<p>作者の名前を挿入</p>\r
-\r
-<h2>引数</h2>\r
-<ul>オプション:\r
-       <ul>\r
-               <li><strong><em>どういったものか?</em></strong>:表示される情報の種類を選択:\r
-                       <ul>\r
-                               <li><strong>name</strong>:名前を表示<em>(デフォルト)</em></li>\r
-                               <li><strong>realname</strong>:作者の「本名」欄を表示名の代わりに</li>\r
-                               <li><strong>id</strong>:そのNucleusでのメンバーID</li>\r
-                               <li><strong>url</strong>:メンバーのウェブサイトのURL</li>\r
-                               <li><strong>email</strong>:メンバーのメールアドレス(使うのは避けるべき)</li>\r
-                       </ul>\r
-               </li>\r
-       </ul>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>&lt;%author%&gt;\r
-&lt;%author(realname)%&gt;\r
-&lt;a href="&lt;%author(url)%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt;</code></pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-smartbody"></a>\r
-<h1>テンプレート変数:smartbody</h1>\r
-\r
-<p>現在のアイテムを調べ、本文テキストか続きテキストのどちらを表示するか決定する。</p>\r
-\r
-<p>続き部分が空っぽなら、本文部分が選択される。そうでなければ続き部分が表示される。</p>\r
-\r
-<table style="text-align: center;"><tr>\r
-       <th>部分名</th><th colspan="2">空っぽか否か?</th>\r
-</tr><tr>\r
-       <td>本文</td><td>いいえ</td><td>いいえ</td>\r
-</tr></tr>\r
-       <td>続き</td><td>はい</td><td>いいえ</td>\r
-</tr></tr>\r
-       <th>smartbodyの表示=</th><th>「本文部分」</th><th>「続き部分」</th>\r
-</tr></table>\r
-\r
-<h2>使用例</h2>\r
-\r
-<p>本文のテキストが完全なテキストと判断され、続きの部分はフロントページに表示される「紹介」や「抜粋」と判断されます。</p>\r
-<p>フロントページで使われているテンプレートには<tt>&lt;%smartbody%&gt;</tt>を使い、抜粋が存在するときにはそれを、無い場合は完全なテキストを挿入します。アイテムの詳細テンプレートには、<tt>&lt;%body%&gt;</tt> + <tt>&lt;%more%&gt;</tt>のかわりに<tt>&lt;%body%&gt;</tt>を使います。<tt>&lt%body%&gt;</tt>は少なくとも完全なアイテムが入っているのですから。</p>\r
-\r
-\r
-\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-morelink"></a>\r
-<h1>テンプレート変数:morelink</h1>\r
-\r
-<p>アイテムの詳細ページへの、テンプレート(<a href="#templatemorelink">続きへのリンク</a>)で定義されているリンクを挿入。「続き」部分が無いときは空っぽとなる。</p>\r
-\r
-<p>テンプレート部品'続きへのリンク'の中身もまたパースされるので、同様に<a href="#templatevars-overview">テンプレート変数</a>を含むことができることに注意。</p>\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-date"></a>\r
-<h1>テンプレート変数:date</h1>\r
-\r
-<p><a href="#templatedatetime">テンプレートにおける日付の詳細なフォーマット</a>を用いた日付の挿入。オプションとして、与えられたパラメーターによる日付フォーマットのカスタムが可能。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>オプション:\r
-       <ul>\r
-               <li><strong><i>format</i></strong>:日付のフォーマットに用いる形式</li>\r
-       </ul>\r
-</ul>\r
-\r
-<h2>特別</h2>\r
-\r
-<p>4つの特別なパラメーターが利用可能:(下の二つは2.5から)</p>\r
-<ol>\r
- <li><code>rfc822</code>:ローカルにあわせたRFC822フォーマットの日付</li>\r
- <li><code>rfc822GMT</code>:GMTにあわせたRFCフォーマットの日付</li>\r
- <li><code>iso8601</code>:ISO-8601フォーマットの日付(<a href="http://www.w3.org/TR/NOTE-datetime">W3Cの時刻と日付フォーマット</a>に概略)。例:2002-10-02T10:00:00-05:00</li>\r
- <li><code>utc</code>:iso8601と同じだが、日付にはタイムゾーンの表示として"Z"を使うUTCで表現される。</li>\r
-</ol>\r
-\r
-<h2>例</h2>\r
-<pre>\r
-&lt;%date%&gt;\r
-&lt;%date(%x)%&gt;\r
-&lt;%date(rfc822)%&gt;\r
-&lt;%date(rfc822GMT)%&gt;\r
-</pre>\r
-\r
-\r
-</div>\r
-\r
-<div class="page">\r
-<a name="templatevar-time"></a>\r
-<h1>テンプレート変数:time</h1>\r
-\r
-<p><a href="#templatedatetime">テンプレートにおける時刻の詳細なフォーマット</a>を用いた時刻の挿入。オプションとして、与えられたパラメーターによる時刻フォーマットのカスタムが可能。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>オプション:\r
-       <ul>\r
-               <li><strong><i>format</i></strong>:時刻のフォーマットに用いる形式</li>\r
-       </ul>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-<pre>\r
-&lt;%time%&gt;\r
-&lt;%time(%X)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-comments"></a>\r
-<h1>テンプレート変数:comments</h1>\r
-\r
-<p>コメント・ブロックを挿入。<a href="#templatecomments">このブロックの構成に関するさらなる情報</a>。</p>\r
-\r
-<h2>引数</h2>\r
-<ul><p>オプション:</p>\r
-       <table><tr>\r
-               <th>名前</th>\r
-               <th>内容</th>\r
-       </tr><tr>\r
-               <td>MaxToShow</td>\r
-               <td>表示するコメントの数(設定されていれば、a href="#blogmaxcomments">blogごとの設定にあるコメントの最大量</a>を上書きする)</td>\r
-       </tr></table>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%comments%&gt;\r
-&lt;%comments(5)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-syndicate_title"></a>\r
-<h1>テンプレート変数:syndicate_title</h1>\r
-\r
-<p>HTMLタグを取り除き、100文字にまで縮めたアイテムのタイトルを挿入。テキストが縮められた場合は、末尾に"..."が追加される。</p>\r
-\r
-<p>この変数はもともとNucleusで用いるXML-RSSスキンで使うことを意図していたが、他の状況でも利用することも可能。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li>\r
-               <p>オプション:</p>\r
-               <table><tr>\r
-                       <th>名前</th>\r
-                       <th>内容</th>\r
-               </tr><tr>\r
-                       <td>MaxChars</td>\r
-                       <td>保持する文字数の最大値(デフォルトは100)</td>\r
-               </tr></table>\r
-       </li>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%syndicate_title%&gt;\r
-&lt;%syndicate_title(25)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-<div class="page">\r
-<a name="templatevar-syndicate_description"></a>\r
-<h1>テンプレート変数:syndicate_description</h1>\r
-\r
-<p>HTMLタグを取り除き、250文字にまで縮めたアイテムの本文を挿入。テキストが縮められた場合は、末尾に"..."が追加される。</p>\r
-\r
-<p>この変数はもともとNucleusで用いるXML-RSSスキンで使うことを意図していたが、他の状況でも利用することも可能。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li>\r
-               <p>オプション:</p>\r
-               <table><tr>\r
-                       <th>名前</th>\r
-                       <th>内容</th>\r
-               </tr><tr>\r
-                       <td>MaxChars</td>\r
-                       <td>保持する文字数の最大値(デフォルトは250)</td>\r
-               </tr></table>\r
-       </li>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%syndicate_description%&gt;\r
-&lt;%syndicate_description(25)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-image"></a>\r
-<h1>テンプレート変数:image</h1>\r
-\r
-<p>アイテム本体やテンプレートにインライン画像を挿入。</p>\r
-\r
-<p>通常、テンプレート変数imageはメディア書庫内の画像を追加するとき自動的に生成される。とはいえ、テンプレート内部で呼び出すことも出来る。その場合は、現在のアイテム作者のメディア・ディレクトリから画像が持ってこられることに注意すること。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li>\r
-               <p>必須:</p>\r
-               <table><tr>\r
-                       <th>名前</th>\r
-                       <th>内容</th>\r
-               </tr><tr>\r
-                       <td>filename</td>\r
-                       <td>画像ファイルの名前</td>\r
-               </tr><tr>\r
-                       <td>width</td>\r
-                       <td>画像の横幅(ピクセルかパーセンテージ)</td>\r
-               </tr><tr>\r
-                       <td>height</td>\r
-                       <td>画像の高さ(ピクセルかパーセンテージ)</td>\r
-               </tr><tr>\r
-                       <td>text</td>\r
-                       <td>画像の代用テキスト</td>\r
-               </tr></table>\r
-       </li>\r
-       <li><strong>注意:</strong>画像、ポップアップ、メディアタグにおいては、パラメーターは'|'で区切られなければなりません。コンマでは<em>ありませんよ</em>!</li>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%image(myphoto.jpg|100|200|これが私です)%&gt;\r
-&lt;%image(myphoto.jpg|50%|50%|縮小していますが、これが私です)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-popup"></a>\r
-<h1>テンプレート変数:popup</h1>\r
-\r
-<p>アイテム本体やテンプレートにポップアップ画像を挿入。</p>\r
-\r
-<p>通常、テンプレート変数popupはメディア書庫内の画像を追加するとき自動的に生成される。とはいえ、テンプレート内部で呼び出すことも出来る。その場合は、現在のアイテム作者のメディア・ディレクトリから画像が持ってこられることに注意すること。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li>\r
-               <p>必須:</p>\r
-               <table><tr>\r
-                       <th>名前</th>\r
-                       <th>内容</th>\r
-               </tr><tr>\r
-                       <td>filename</td>\r
-                       <td>画像ファイルの名前</td>\r
-               </tr><tr>\r
-                       <td>width</td>\r
-                       <td>画像の横幅(ピクセルかパーセンテージ)</td>\r
-               </tr><tr>\r
-                       <td>height</td>\r
-                       <td>画像の高さ(ピクセルかパーセンテージ)</td>\r
-               </tr><tr>\r
-                       <td>text</td>\r
-                       <td>画像の代用テキスト</td>\r
-               </tr></table>\r
-       </li>\r
-       <li><strong>注意:</strong>画像、ポップアップ、メディアタグにおいては、パラメーターは'|'で区切られなければなりません。コンマでは<em>ありませんよ</em>!</li>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-\r
-<pre>\r
-&lt;%popup(myphoto.jpg|100|200|これが私です)%&gt;\r
-&lt;%popup(myphoto.jpg|50%|50%|縮小していますが、これが私です)%&gt;\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-media"></a>\r
-<h1>テンプレート変数:media</h1>\r
-\r
-<p>アイテム本体やテンプレートにメディアオブジェクトを挿入。</p>\r
-\r
-<p>通常、テンプレート変数mediaはメディア書庫内の画像を追加するとき自動的に生成される。とはいえ、テンプレート内部で呼び出すことも出来る。その場合は、現在のアイテム作者のメディア・ディレクトリからオブジェクトが持ってこられることに注意すること。</p>\r
-\r
-<h2>引数</h2>\r
-<ul>\r
-       <li>\r
-               <p>必須:</p>\r
-               <table><tr>\r
-                       <th>名前</th>\r
-                       <th>内容</th>\r
-               </tr><tr>\r
-                       <td>filename</td>\r
-                       <td>メディアオブジェクトのファイル名</td>\r
-               </tr><tr>\r
-                       <td>text</td>\r
-                       <td>メディアオブジェクトの説明テキスト</td>\r
-               </tr></table>\r
-       </li>\r
-       <li><strong>注意:</strong>画像、ポップアップ、メディアタグにおいては、パラメーターは'|'で区切られなければなりません。コンマでは<em>ありませんよ</em>!</li>\r
-</ul>\r
-\r
-<h2>例</h2>\r
-\r
-<pre><code>&lt;%media(mysong.mp3|新曲を聞いてみてください)%&gt;</code></pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-edit"></a>\r
-<h1>テンプレート変数:edit</h1>\r
-\r
-<p>テンプレートの内部にて、このテンプレート変数を使えば'アイテムの編集'リンクを加えることが出来る。デフォルトでは、ポップアップするbookmarkletウィンドウへのリンクとなるが、<a href="#templateeditlink">テンプレート:アイテムリンクの編集</a>を通して振る舞いを変更することが可能。</p>\r
-\r
-<p><strong>注意:</strong>アイテムの編集が許可されたログイン状態のメンバーのみが、このリンクを目に出来ます。他の場合は、テンプレート変数editは何も表示しません。</p>\r
-\r
-<h2>例</h2>\r
-<p>「アイテムの本体」テンプレートの一例</p>\r
-<pre><code>&lt;h1&gt;&lt;%title%&gt;&lt;/h1&gt;\r
-&lt;p&gt;&lt;%body%&gt; &lt;%morelink%&gt;&lt;/p&gt;\r
-&lt;div class="metadata"&gt;\r
-       &lt;%edit%&gt; &lt;%comments%&gt;\r
-&lt;/div&gt;</code></pre>\r
-\r
-<h2>Results in</h2>\r
-\r
-<div class="example">\r
-<h4 style="margin:2px;">タイトル</h4>\r
-<p style="margin:2px;">アイテムの本文</p>\r
-<div style="margin:2px;"><a href="#templatevar-edit">編集</a> - <a href="#templatevar-edit">5 comments</a></div>\r
-</div>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-editlink"></a>\r
-<h1>テンプレート変数:editlink</h1>\r
-\r
-<p>'アイテムの編集'bookmarkletへのリンクを挿入。これは<a href="#templateeditlink">テンプレート:アイテムリンクの編集</a>内で単純に使うことが出来る。</p>\r
-\r
-<h2>例</h2>\r
-\r
-<p><a href="#templateeditlink">テンプレート:アイテムリンクの編集</a>はこんな感じになる:</p>\r
-<pre>\r
-&lt;a href="&lt;%editlink%&gt;"\r
-   onclick="&lt;%editpopupcode%&gt;"&gt;編集&lt;/a&gt; -\r
-</pre>\r
-\r
-</div>\r
-\r
-\r
-<div class="page">\r
-<a name="templatevar-editpopupcode"></a>\r
-<h1>テンプレート変数:editpopupcode</h1>\r
-\r
-<p>'アイテムリンクの編集'ウィンドウをポップアップで開くためには、リンクにいくつかのjavascriptコードを追加する必要がある。このコードを「テンプレート:アイテムリンクの編集」に置く手間を省くために、テンプレート変数editpopupcodeを用いてそれを挿入することが出来る。</p>\r
-\r
-<h2>例</h2>\r
-<p><a href="#templatevar-editlink">テンプレート変数:editlink</a>の例をみること。</p>\r
-</div>\r
-\r
-\r
-\r
-<div class="page">\r
-<a name="plugins"></a>\r
-<h1>プラグイン</h1>\r
-<p>Nucleusでは特別な機能を追加するために、カスタムしたプラグインをインストールすることができる。プラグインはまったく違う事柄を実行できる:\r
-</p>\r
-<ol>\r
-       <li>スキン変数のように振舞う</li>\r
-       <li>テンプレート変数のように振舞う</li>\r
-       <li>Nucleusによって生成されたイベントのフック。「プラグインの管理」画面での「上へ」と「下へ」リンクは、イベント発生時にプラグインを呼び出す順番を決定するために用いられる。最初のプラグインは最初に呼び出され、最後のプラグインは最後に呼び出される。</li>\r
-       <li><tt>action.php</tt>を通して呼び出されたときにアクタのように振舞う</li>\r
-</ol>\r
-<p>プラグインに対する責任は、完全にプラグインの作者にあることを心にとめておくこと。彼または彼女は、すべてが問題なく動くようきっちりと作らなければならない。</p>\r
-</div>\r
-\r
-<div class="page">\r
-<a name="parser-properties"></a>\r
-<a name="includemode"></a>\r
-<a name="includeprefix"></a>\r
-<h1>パーサーのプロパティ</h1>\r
-\r
-<p>利用可能なパーサーオプションを以下に記述する。</p>\r
-\r
-<table>\r
- <caption>パーサーのプロパティ</caption>\r
- <tr>\r
-       <th>オプション名</th>\r
-       <th>値</th>\r
- </tr><tr>\r
-       <td>Includeモード</td>\r
-       <td>\r
-               <ul>\r
-                       <li><strong>normal</strong>:通常の動作;ページを作成する.phpファイルのディレクトリ/URLから相対位置のファイルを取り出しインクルード。</li>\r
-                       <li><strong>skindir</strong>:スキンディレクトリ/スキンURLから相対位置のファイルを取り出しインクルード。</li>\r
-               </ul>\r
-               <p>このプロパティは次のスキン変数に影響を与えます:<a href="#skinvar-include">include</a>、<a href="#skinvar-phpinclude">phpinclude</a>、<a href="#skinvar-parsedinclude">parsedinclude</a>、<a href="#skinvar-nucleusbutton">nucleusbutton</a></p>\r
-       </td>\r
- </tr><tr>\r
-       <td>Includeプリフィックス</td>\r
-       <td>\r
-               <p>このプロパティはインクルードするファイルそれぞれの頭に追加されるプリフィックスです。例えば、プリフィックスが<tt>base/</tt>でインクルードするファイルが<tt>somefile.txt</tt>なら、最終的には<tt>base/somefile.txt</tt>をインクルードすることになります。</tt></p>\r
-               <p>このプロパティはIncludeModeのプロパティと共に使われることが意図されています。この方法で、<tt><em>skindir/</em>somename/</tt>にインポートされたスキンは、<tt>IncludeMode</tt>を<tt>skindirを使う</tt>に<tt>IncludePrefix</tt>を<tt>somename/</tt>に設定しておくことができます。</p>\r
-               <p>このプロパティは次のスキン変数に影響を与えます:<a href="#skinvar-include">include</a>、<a href="#skinvar-phpinclude">phpinclude</a>、<a href="#skinvar-parsedinclude">parsedinclude</a>、<a href="#skinvar-nucleusbutton">nucleusbutton</a></p>\r
-       </td>\r
-  </tr>\r
-</table>\r
-\r
-<p><tt>Includeプリフィックス</tt>と<tt>Includeモード</tt>のプロパティは、「スキンの一般的設定」において該当スキンでの包括的な設定が可能です。なお、プロパティが設定されてしまうと、例えばテンプレートも含めたすべてのパースデータにそれが適用されることを心にとめておいてください。</p>\r
-\r
-</div>\r
-\r
-</body>\r
-</html>\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: help.html,v 1.8 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: help.html,v 1.7.2.1 2005/09/09 07:34:11 kimitake Exp $ -->
+
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus管理用ヘルプ</title>
+       <style type="text/css">
+       <!--
+               body {
+                       font-family: verdana, arial;
+                       font-size: small;
+               }
+
+               h1 {
+                       font-size: large;
+                       border-bottom: 1px gray dashed;
+                       color: #596d9d;
+                       text-align: left;
+               }
+
+               h2 {
+                       font-size: medium;
+                       border: 1px solid #ddd;
+                       background-color: whitesmoke;
+                       text-align: left;
+               }
+
+               .page {
+                       height: 800px;
+                       text-align: justify;
+                       margin-bottom: 100px;
+               }
+
+               pre {
+                       background-color: #ddd;
+                       padding: 5px;
+                       font-size: small;
+               }
+
+               .example {
+                       background-color: #ddd;
+                       padding: 5px;
+               }
+
+               ul.templates {
+                       font-size: x-small;
+                       line-height: 1.1;
+                       list-style: none;
+                       text-indent: -20px;
+                       margin-left: 20px;
+               }
+
+               ul {
+                       text-align: left;
+               }
+
+               a:link, a:visited {
+                       color: #1D3565;
+                       font-weight: bold;
+                       text-decoration: underline;
+               }
+
+               a:hover {
+                       background-color: whitesmoke;
+               }
+
+               .deprecated {
+                       border: 3px solid red;
+                       padding: 5px;
+                       font-size: medium;
+               }
+
+               tt, code {
+                       font-size: small;
+               }
+
+               table {
+                       border: 1px solid #ccc;
+               }
+
+               th {
+                       background-color: #eee;
+               }
+
+               td {
+                       vertical-align: top;
+               }
+
+               .note {
+                       background-color: #eee;
+                       padding: 5px;
+               }
+       -->
+       </style>
+</head>
+<body>
+
+<div class="page">
+<h1>Nucleusポップアップ・ヘルプ</h1>
+<p>ページがダウンロードされている間はお待ちください(だいたい100KBです)。</p>
+</div>
+
+
+<div class="page">
+<a name="future"></a>
+<a name="allowpastposting"></a>
+<h1>後で追加/過去に投稿</h1>
+<h2>後で追加</h2>
+<p>アイテム追加フォームの「後で追加」オプションにより、アイテムを指定した時間きっかりに公開することができます。その時が来るまで、アイテムはサイトの公開された部分で見られる事がありません。</p>
+<p>この日時は<strong>未来のものでなくてはなりません</strong>。アイテムを追加するblogの「過去の日時での投稿を許可する」オプションが有効である場合は除いて。</p>
+<h2>過去の日時での投稿を許可する</h2>
+<p>有効にすると、アイテムが追加された日時を指定できます。加えて、既に存在するアイテムのタイムスタンプ(投稿日時)を編集できます。</p>
+</div>
+
+<div class="page"><a name="changedate"></a>
+<h1>投稿日時の変更</h1>
+<p>
+「タイムスタンプを更新」オプションにより、アイテムの投稿された日付か時間あるいはその両方を変更できます。もしアイテムの内容を変更したのなら、この方法で記事をフロントページのトップに戻せるでしょう。</p>
+<p>しかし、そのアイテム独自のIDは変更されません。よって訪問者は、そのアイテムはもともとより低いID値のアイテム群より後に投稿されたことに気がつくことができます。</p>
+</div>
+
+
+<div class="page"><a name="draft"></a>
+<h1>ドラフト(Drafts)</h1>
+<p>ドラフト状態のアイテムはblogの公開されたところではまだみることができません。記事を書いている時役に立つでしょうし、多少の間を取るにもいいでしょう。ドラフト状態のアイテムは「管理ホーム」にリストとして表示されるので、時間のあるときに作業を再開することが可能です。</p>
+<p>ドラフトを編集する際、「<strong>今すぐ追加</strong>」のラジオボタンを選び「保存」ボタンを押すと公開されます。</p>
+</div>
+
+<div class="page"><a name="extended"></a>
+<h1>「続き」部分</h1>
+<p>アイテムには、記事を続けるために用いられるオプションである「続き」部分があります。例えば、記事がblogのメインページに置くには長すぎる場合、導入を「本文」部分に、残りを「続き」部分に書くことができます。メインのblogページを閲覧すると、「続きを読む」というリンクを目にすることでしょう。(テンプレートによってリンクの形は定義されます)</p>
+<p>もし、導入をアイテムの単なる<em>概略</em>として書きたいのなら、<a href="#templatevar-smartbody">smartbody</a>というテンプレート変数を用いて、「本文」と「続き」の表示を分けることが可能です。
+</p>
+</div>
+
+<div class="page"><a name="shortblogname"></a>
+<h1>Blogの短縮名</h1>
+<p>「Blogの短縮名」は主に管理領域で、どのアイテムがどのblogと結びついているのか示すために使われます。</p>
+<p>また、新規blogを有効にするための代替indexファイルでも用いられます(以下はmyshortblognameが「Blogの短縮名」だった場合の呼び出しファイルの例):</p>
+<pre>
+&lt;?
+       include('./config.php');
+       selectBlog('myshortblogname');
+       selector();
+?&gt;
+</pre>
+</div>
+
+<div class="page"><a name="blogdefaultskin"></a>
+<h1>標準のスキン</h1>
+<p>blogごとの「設定」で選択された「標準のスキン」はそのblogが表示されるときに用いられるスキンです。選択できるのは一つだけです。(URLの引数を通して別のスキンで表示させることはできます)</p>
+</div>
+
+
+<div class="page"><a name="blognotify"></a>
+<h1>通知するメールアドレス</h1>
+<p>このオプションは、新しくコメントが追加された際に通知するメールアドレスを一つあるいは複数いれるものです。もし通知が不要なら空っぽにしておいてください。メールアドレスは、あたりまえですが、有効なものでなくてはなりません。</p>
+<p>もし複数のメールアドレスを利用する場合は、セミコロン(<strong>;</strong>)で区切ってください。</p>
+<div class="note">
+<b>注意:</b>設定フィールドの最大長は128文字です。リスト可能なメールアドレスの量はそれによってのみ制限されます</div>
+<div class="note">
+<b>注意:</b>メンバー登録に使われているメールアドレスを通知先にした場合、自身で書いたのアイテムとコメントの通知を受け取ることはありません。自分で書いたことは知っているはずですから、問題にはならないでしょう。</div>
+</div>
+
+<div class="page"><a name="blogmaxcomments"></a>
+<h1>コメントの最大量</h1>
+<p><em>メインページ</em>に表示するコメントの最大数です。<strong>これはコメント可能な最大数を制限するものではありません</strong>。詳細のページでは、設定した最大数を超えていても全てのコメントが表示されます。</p>
+<p class="note"><strong>注意:</strong>テンプレート内部では、テンプレート変数<a href="#templatevar-comments">comments</a>のオプションパラメーターによってここでの値は上書きされます。</p>
+</div>
+
+<div class="page"><a name="blogtimeoffset"></a>
+<h1>サーバ時刻との時差</h1>
+<p>もしサーバの時刻があなたの生活時刻と一致しなければ、正確な時間を得る為にサーバ時刻との時差を加えたいかもしれません。減らすためには負の値を用いてください(マイナス記号をつける)。参照するために現在のサーバ時刻が表示されています。</p>
+<h2>実例</h2>
+<p>もしローカル時刻が20:35で表示されているサーバ時刻が14:35であった場合、blogの時刻を20:35にするためには「サーバ時刻との時差」を6.0に設定する必要があります。</p>
+<p class="note"><strong>注意:</strong>30分時差のあるタイムゾーンに住む人々のための、分刻みの時差補正もまた同様です。例えば「サーバ時刻との時差」を<strong>1.5</strong>にすると、1時間30分の補正となります。</p>
+</div>
+
+<div class="page"><a name="blogupdatefile"></a>
+<h1>自動更新するファイル</h1>
+<p>Nucleusはblogに新しいアイテムが追加されるたびに、ファイルを更新することができます。そのファイルの中身は最終変更時のタイムスタイプとなります。このようなファイルは、定期的に更新が無いかみるためにサーバ上のファイルをチェックして、そこから「weblogの更新状況」を作成するサービスに使うことができます。これらをメインblogに用た特徴は、訪問者がコメントを追加したりスキンやテンプレートに変更を加えたりしたときには更新を知らせることが無いということです。</p>
+<p>自動更新されるファイルが必要ないときは、フィールドを空っぽにしておいてください。</p>
+<p>自動更新されるファイルの場所は管理領域からの相対となることにご注意ください。なので、(<tt>/path/to/your/website/update.txt</tt> のような)絶対パスを使う方がよいでしょう。また自動更新されるファイルを作成してかつ書き込めるように(<a href="tips.html#filepermissions" onclick="window.open(this.href);return false;" class="out" title="quick guide on changing file permissions">パーミッションを0666</a>に)してください。</p>
+</div>
+
+<div class="page"><a name="teamadmin"></a>
+<h1>Blogの管理者</h1>
+<p>
+Blogの管理者は次のような追加権限をもちます:
+</p>
+
+<ul>
+       <li>チームの操作</li>
+       <li>blog設定の変更</li>
+       <li>(該当blogの) どの投稿者のアイテムでも編集と削除が可能</li>
+       <li>blogの削除</li>
+</ul>
+
+<p>一つのblogは複数の管理者を持つことができます。ただし、いつでも最低一人の管理者がいなくてはなりません。</p>
+</div>
+
+
+<div class="page"><a name="superadmin"></a>
+<h1>管理者の特権</h1>
+
+<p><em>super-admin(最高管理者)</em>と呼ばれ、全ての機能と全てのweblogに<strong>フルアクセス</strong>できます。たとえblogのチームに入っていなくてもです。</p>
+
+<p>それに加えて:super-adminは、weblogの作成、一般設定の変更、テンプレートの書き換え、スキンの書き換え、メンバーの操作(メンバーの作成/編集/削除)を行う権限があります。</p>
+
+<p>普通、super-adminとなるのはサイトの管理者ただ一人でしょう。</p>
+
+</div>
+
+<div class="page"><a name="canlogin"></a>
+<h1>管理者領域へのログイン</h1>
+<p><a href="#superadmin" title="Administrator Privileges">super-admin</a>はそれぞれのメンバーの管理領域へのログインを許可しないよう設定できます。</p>
+</div>
+
+<div class="page"><a name="defaultblog"></a>
+<h1>既定のBlog</h1>
+<p>他のblogが要求時に指定されない場合、表示されるblogです。</p>
+</div>
+
+<div class="page"><a name="baseskin"></a>
+<h1>基本のスキン</h1>
+<p>このオプションは、判定が自動解決されない場合に代用するスキンをNucleusに設定します。これはスキン・パーツが空っぽだったり、blogやskinで明確に指定されていないときにおきます。</p>
+<p>ほとんどのユーザーは、この設定を気にする必要がありません。</p>
+</div>
+
+<div class="page"><a name="cookies"></a>
+<h1>Cookie設定</h1>
+
+<h2>ログインCookieの有効期間</h2>
+<p>メンバーがログインするとブラウザにcookieが保存され、翌日に戻ってきたときに再びログインする必要がなくなります。クッキーの有効期間によって、いつ無効になるか決定されます:</p>
+<ul>
+       <li><strong>セッションごと</strong> ? ブラウザを終了させるとcookieは削除されます</li>
+       <li><strong>一ヶ月</strong> ? 一ヶ月続けてサイトか管理領域を訪れないということが無い限り、cookieはコンピュータに残ります。このオプションを使えば、たぶん再ログインする必要はなくなるでしょう。(自分でログアウトしたときや、他のコンピュータからログインするときは別ですが)</li>
+</ul>
+
+<h2>CookieパスとCookieドメイン</h2>
+<p>これらは上級の設定です。通常は変更する必要はありません。その場合、cookieパスは単純にスラッシュ('/')を入れ、cookieドメインは空っぽにしておいてください。</p>
+
+<h2>セキュアCookie</h2>
+<p>通常は「いいえ」に設定してください。HTTPSのurlを用いておりかつhttps接続を通してのみcookieを送りたい場合でだけ、「はい」にしなければなりません。</p>
+
+<h2>最終訪問日時Cookieの保存</h2>
+<p>訪問者が最後に訪れた時間をcookieに含め保存させるよう、Nucleusを設定することが可能です。これによって、<a href="#templatenew">新規アイテム</a>の隣にしるしを置くことができます。</p>
+
+</div>
+
+
+<div class="page"><a name="language"></a>
+<h1>言語</h1>
+<p>個々のメンバー用のコンテンツをnucleusが作成するときに用いられる言語を選択することができます。Nucleusによって生成されるコンテンツには、管理領域、エラーメッセージ、スキンにおけるフォームなどが含まれます。</p>
+
+<p>言語の選択を行う場所は二ヶ所あります。「一般設定」にはデフォルトで用いられる「既定の言語」が含まれています。次にログイン状態のメンバーは、望むならこの設定を上書きできます。</p>
+
+<p>これら両方の設定が無効なら、英語がデフォルトの言語として用いられます</p>
+
+<p class="note"><strong>注意:</strong> 追加の言語ファイルは<a href="http://www.nucleuscms.org/" onclick="window.open(this.href);return false;" class="out" title="Nucleus CMS Website">Nucleusのウェブサイト</a>からダウンロードできます。(新規ウィンドウが開きます)</p>
+
+</div>
+
+<div class="page"><a name="allowaccountcreation"></a>
+<h1>アカウントの作成</h1>
+<p>訪問者に自身のメンバーアカウント作成を許可するようにも許可しないようにもできます。新規メンバーは(管理者がチームに加えるまでは)blogにアイテムを追加することはできません。しかし、管理領域にログインして設定を変更できます。また自分のコメントを削除したり変更したりも可能です。</p>
+</div>
+
+<div class="page"><a name="allownewmemberlogin"></a>
+<h1>新規メンバーのログイン許可</h1>
+<p>もし訪問者による<a href="#allowaccountcreation">アカウントの作成</a>を許可するなら、この設定はその方法で作られたアカウントが<a href="#canlogin">管理領域にログイン</a>できるか否かを明確に定めます。</p>
+</div>
+
+
+<div class="page"><a name="messageservice"></a>
+<h1>メッセージサービス</h1>
+
+<p>メンバーのプライバシーのために、全てのメールアドレスを隠したままで、スクリプトを通してメンバー同士でメールメッセージの送信ができます。送信されたメッセージにはどっちにしろ両ユーザーのメールアドレスが含まれますので、その後は通常のメールを用いた連絡を続けることができます。このサービスは無効にすることが可能です。</p>
+
+<h2>メンバー以外</h2>
+<p>デフォルトでは、非メンバーはメッセージサービスを使えません。なぜなら有効なメールアドレスが入力されたかチェックする方法が無いからです。「メンバー以外からのメッセージ送付を許可」することによってこの制限を緩和できます。非メンバーはメッセージの投函時にメールアドレスを尋ねられ、それが受け取ったメールのヘッダー<tt>From:</tt>に表示されることになります。</p>
+
+</div>
+
+<div class="page"><a name="disablesite"></a>
+<h1>サイトの閉鎖</h1>
+<p>Nucleusのサイト全体を閉じることが可能です。なんらかの設定調整を行うときに、あるいは何か恐ろしい間違いが起きた時にこれを実行したいと思うかもしれません:-)</p>
+<p>ここで設定しなければならないURLは、訪問者がリダイレクトされるURLとなります。</p>
+<p>例外:<strong>管理領域</strong>はそれまで通り利用可能であり、<strong><a href="#superadmin">最高管理者</a></strong>はそれまで通りにサイト全体をみることができます。(あとでサイトを再開することを忘れないでください;-))</p>
+</div>
+
+
+<div class="page"><a name="urlmode"></a>
+<h1>URLモード</h1>
+<p>このオプションを用いることにより、URLスタイルを切り替え可能です:</p>
+<ul>
+       <li><strong>Normal</strong>: URLは次のようになります <code>http://host/index.php?itemid=1234</code></li>
+       <li><strong>Fancy</strong>: URLは次のようになります <code>http://host/item/1234</code></li>
+</ul>
+<p class="note"><strong>注意:</strong>「Fancy URL」モードで動作するようにするためには、いくつか他の作業が必要になります。それらは<a href="tips.html" class="out" onclick="window.open(this.href);return false;">Tips &amp; Suggestions</a>に記述されています。(新規ウィンドウが開きます)</p>
+</div>
+
+<div class="page"><a name="templateitems"></a>
+<h1>テンプレート:アイテム</h1>
+<p>アイテム表示時に、それぞれのアイテムで次のセットが繰り返されます:
+</p>
+
+<pre>
+アイテムのヘッダー
+アイテムの本体
+アイテムのフッター
+</pre>
+
+<p>これら3つのブロックはすべてテンプレートの一部であり、結果どのような見た目になるのか定義します。</p>
+
+<h2>変数</h2>
+
+<p>これらのテンプレート内で、アイテムのデータを挿入するのに<a href="#templatevars-overview" title="Find out which variables are available">テンプレート変数とよばれる系列が利用できます</a>。</p>
+
+<h2>例</h2>
+<p><a href="#templateitemsexample">テンプレート:アイテムの例</a></p>
+
+</div>
+
+<div class="page"><a name="templateitemsexample"></a>
+<h1>テンプレート:アイテムの例</h1>
+<p>「アイテムの本体」テンプレートの一例です:</p>
+
+<pre>&lt;h1&gt;&lt;%title%&gt;&lt;/h1&gt;
+
+&lt;p&gt;&lt;%body%&gt;&lt;/p&gt;
+
+&lt;div class="metadata"&gt;
+ &lt;a href="&lt;%itemlink%&gt;"&gt;link&lt;/a&gt; -
+ &lt;%date%&gt; &lt;%time%&gt; -
+ &lt;a href="&lt;%authorlink%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt; -
+ &lt;%comments%&gt;
+&lt;/div&gt;</pre>
+
+<p>結果はこのようなものになります:</p>
+
+<div class="example">
+<h4 style="margin: 2px;">ここはアイテムのタイトルです</h4>
+<p style="margin: 2px; padding: 0px;">ここはアイテムのテキスト部分です</p>
+<div style="font-style: italic; margin: 2px;">
+ <a href="#templateitemsexample">link</a> -
+ August 8th 2002 18:51 -
+ <a href="#templateitemsexample">karma</a> -
+ <a href="#templateitemsexample">no comments</a>
+</div>
+</div>
+
+</div>
+
+
+<div class="page"><a name="templatecomments"></a>
+<h1>テンプレート:コメント</h1>
+
+<p>コメントブロックは3つの要素で構成されています。</p>
+
+<ol>
+       <li>
+               コメントが表示されるとき(詳細のページやメインページで許可されているコメントの最大数を下回っているとき)
+<pre>コメントのヘッダー
+  コメントの本体(繰り返し)
+コメントのフッター</pre>
+       </li>
+       <li>
+               コメントがまったく無いとき
+<pre>
+コメントが無い時
+</pre>
+       </li>
+       <li>
+               コメントがあるが、許可されている最大数を上回っているとき(アイテムの詳細のページでのみ表示されます)
+<pre>
+長すぎるコメントの時
+</pre>
+       </li>
+</ol>
+
+<p>これらのテンプレート内部では、いくつかの<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連変数</a>が利用できます。</p>
+
+</div>
+
+<div class="page">
+<a name="templatecommentheaders"></a>
+<a name="templatecommentfooters"></a>
+<h1>テンプレート:コメントのヘッダーとフッター</h1>
+
+<h2>特徴</h2>
+
+<p>「コメントの本体」はコメント一つごとに繰り返されますが、ヘッダーとフッターは一度しか表示されません。典型的な構成はこのようになります:</p>
+<pre>コメントのヘッダー
+  コメントの本体 1
+  コメントの本体 2
+  コメントの本体 3
+コメントのフッター</pre>
+<p>これらのテンプレート内では、<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連変数</a>が利用できます。</p>
+
+<h2>例</h2>
+
+<p>Header:</p>
+<pre>&lt;ul&gt;</pre>
+<p>Body:</p>
+<pre>&lt;li&gt;&lt;%user%&gt;: &lt;%body%&gt;&lt;/li&gt;</pre>
+<p>Footer</p>
+<pre>&lt;/ul&gt;</pre>
+<p>Result</p>
+
+<ul class="example">
+       <li>karma: いいね!</li>
+       <li>xiffy: ああ、たしかに!</li>
+</ul>
+
+</div>
+
+<div class="page"><a name="templatemorelink"></a>
+<h1>テンプレート:続きへのリンク</h1>
+<p>これはアイテムのテンプレートで利用できるテンプレート変数、"morelink"のフォーマットとして用いられるテンプレートです。<a href="#templatevars-overview">利用可能な変数</a>はアイテムのテンプレートと同じです。</p>
+<p>もしアイテムに「続き」の部分が存在しない場合、テンプレート変数<code>&lt;%morelink%&gt;</code>は無効となります。</p>
+
+<h2>例</h2>
+<pre><code>&lt;a href="&lt;%itemlink%&gt;"&gt;[続きを読む!]&lt;/a&gt;</code></pre>
+
+</div>
+
+<div class="page"><a name="templatearchivelists"></a>
+
+<h1>テンプレート:アーカイブリスト</h1>
+
+<p>過去ログのリストは、以下のようなリスト体裁をとります:</p>
+
+<pre>アーカイブリストヘッダー
+  アーカイブリスト本体(アーカイブごとに繰り返される)
+アーカイブリストフッター</pre>
+
+<p>利用できる変数:(ヘッダーとフッターでは<tt>blogid</tt>のみが許可されています)</p>
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>blogid</td>
+       <td>weblogのID</td>
+</tr><tr>
+       <td>archivelink</td>
+       <td>アーカイブへのリンク。<code>&lt;a href=".."&gt;</code>のようなタグとしてはめ込むことができる。</td>
+</tr><tr>
+       <td>month</td>
+       <td>月の数値(01-12の2文字表記)</td>
+</tr><tr>
+       <td>year</td>
+       <td>年(西暦の4文字表記)</td>
+</tr><tr>
+       <td>day</td>
+       <td>月の中での日付(二文字表記。日ごと表示の時のみ)</td>
+</tr></table>
+
+<p>リストに用いるアーカイブの日付表記をより融通の効くようにする方法は、<a href="#strftime">strftime</a>変数を用いることです。もし複雑すぎると感じたなら、次のを用いてください:</p>
+
+<pre><code>&lt;a href="&lt;%archivelink%&gt;"&gt;%B, %Y&lt;/a&gt;&lt;br /&gt;</code></pre>
+
+
+<p>言語設定をあなたの住んでいる地域の設定に変更するためには、<a href="#templatelocale">locale</a>を変更してください。</p>
+
+</div>
+
+
+
+
+<div class="page"><a name="templatecategorylists"></a>
+<h1>テンプレート:カテゴリーリスト</h1>
+
+<p>カテゴリーリストは下の表のようにフォーマットされます:</p>
+
+<pre>カテゴリーリストヘッダー
+  カテゴリーリストアイテム(繰り返し)
+カテゴリーリストフッター</pre>
+
+<p>利用可能な変数:(ヘッダーとフッターでは<tt>blogid</tt>、<tt>blogurl</tt>、<tt>self</tt>のみが許可されています)</p>
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>blogid</td>
+       <td>weblogのID</td>
+</tr><tr>
+       <td>blogurl</td>
+       <td>blogのURL(blogごとの「設定」で定義される)</td>
+</tr><tr>
+       <td>self</td>
+       <td>パラメーター無しの現在のページ(例えば<tt>index.php</tt>)</td>
+</tr><tr>
+       <td>catlink</td>
+       <td>該当カテゴリーの新しいアイテムへのリンク。これにより&lt;a href=".."&gt;タグを埋め込むことができる。</td>
+</tr><tr>
+       <td>catid</td>
+       <td>カテゴリーのID</td>
+</tr><tr>
+       <td>catname</td>
+       <td>カテゴリー名</td>
+</tr><tr>
+       <td>catdesc</td>
+       <td>カテゴリーの説明</td>
+</tr></table>
+
+<p><a href="#categorylistexample">例を見る</a></p>
+
+</div>
+
+<div class="page"><a name="categorylistexample"></a>
+<h1>テンプレート:カテゴリーリストの例</h1>
+<p>
+<a href="#templatecategorylists">(戻る)</a>
+</p>
+
+<h2>カテゴリーリストヘッダー</h2>
+<pre><code>&lt;ul&gt;
+  &lt;li&gt;&lt;a href="&lt;blogurl%&gt;"&gt;まとめて表示&lt;/a&gt;&lt;/li&gt;</code></pre>
+
+<h2>カテゴリーリストアイテム</h2>
+<pre><code>&lt;li&gt;&lt;a href="&lt;%catlink%&gt;"&gt;&lt;%catname%&gt;&lt;/a&gt;&lt;/li&gt;</code></pre>
+
+<h2>カテゴリーリストフッター</h2>
+<pre><code>&lt;/ul&gt;</code></pre>
+
+<h2>結果はこうなります:</h2>
+
+<ul class="example">
+       <li><a href="#categorylistexample">まとめて表示</a></li>
+       <li><a href="#categorylistexample">あなたのカテゴリー</a></li>
+       <li><a href="#categorylistexample">わたしのカテゴリー</a></li>
+</ul>
+
+</div>
+
+
+
+
+
+
+
+<div class="page"><a name="templatelocale"></a>
+<h1>テンプレート:Locale</h1>
+<p>これは実際のところテンプレートの部品というより設定です。設定することによって、日付と時刻のローカライズを選択できます。月と日の名前などは要求された言語での表示になるでしょう。</p>
+
+<p>使える変数は、Nucleusが動作しているコンピュータによります。使える変数をいくつかあげますと・・・:</p>
+
+<ul>
+       <li><strong>en</strong>:英語</li>
+       <li><strong>dutch</strong>:オランダ語</li>
+       <li><strong>ja_JP</strong>:日本語</li>
+       <li>...</li>
+</ul>
+
+<p>strftimeに関するより詳しい情報は、<a href="http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.html" onclick="window.open(this.href);return false;" class="out" title="Open Group specification">Open Group Specification</a>にあります。(新規ウィンドウが開きます)</p>
+
+<p>localeは<a href="#templatedatetime">日付と時刻のフォーマット</a>、<a href="#templatedateheads">日付ヘッダー</a>、<a href="#templatearchivelists">アーカイブリスト</a>で利用されます。</p>
+
+</div>
+
+<div class="page"><a name="templatedatetime"></a>
+<h1>テンプレート:日付と時刻のフォーマット</h1>
+<p>これらは<code>&lt;%date%&gt;</code>と<code>&lt;%time%&gt;</code>という変数(<a href="#templatevars-overview">テンプレート変数</a>をご覧ください)における日付と時刻のフォーマットに使われます。フォーマットは<a href="#templatelocale">locale</a>にも左右されます。</p>
+
+<p><a href="#strftime">利用できる変数の詳細な情報はこちらを</a>。もし手っ取り早く始めたいのなら、日付フォーマットに"%x"を、時刻フォーマットに"%X"をお使いください。</p>
+
+</div>
+
+<div class="page"><a name="templatedateheads"></a>
+<h1>テンプレート:日付ヘッダー/フッター</h1>
+
+<p>日付のヘッダーと日付のフッターは日付と時刻の変数を入れることができます。<a href="#strftime">利用できる変数の詳細情報はこちらにあります</a>。もし手早く始めるのなら、"%x"を日付フォーマットとして使ってください。日付フォーマットで使われる言語は、テンプレートの<a href="#templatelocale">locale設定</a>で決定されます。</p>
+
+<p>日付ヘッダーにテンプレート変数&lt;%%daylink%%&gt;を含めることによって、その日のアーカイブへのリンクを挿入できます。<strong>'%'が二つであることに注意を!月の中での現在日付に展開される%dを無効にするために必要な措置なのです。</strong>同様に、もし'%'という文字をここで使いたいなら、二つ重ねて('%%')置かないとサイトには表示されません。</p>
+
+<p>日付ヘッダーのサンプル:</p>
+
+<pre>
+&lt;div class="day"&gt;
+&lt;h1&gt;%d %B&lt;/h1&gt;
+</pre>
+
+<p>日付フッターのサンプル:</p>
+
+<pre>
+&lt;/div&gt;
+</pre>
+
+<p>daylinkを用いた日付ヘッダーの例:</p>
+
+<pre>
+&lt;div class="day"&gt;
+&lt;h1&gt;%d %B&lt;/h1&gt;
+&lt;a href="&lt;%%daylink%%&gt;"&gt;(アーカイブ)&lt;/a&gt;
+</pre>
+
+</div>
+
+<div class="page"><a name="templatehighlight"></a>
+<h1>テンプレート:ハイライト表示</h1>
+<p>ハイライト表示は検索実行時に使われます。これは規則変化に沿った表現として実際に使われますので、直前にバックスラッシュを置くことによっていくつかの記号をエスケープしたいと望むかもしれません。ハイライトされた単語が当てはめられる場所は"\0"で示されます。</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;span style='background-color:yellow'&gt;\0&lt;/span&gt;</code></pre>
+
+</div>
+
+<div class="page"><a name="templatenothingfound"></a>
+<h1>テンプレート:検索で何も見つからなかった場合</h1>
+
+<p>検索が実行され結果何も見つからなかった場合に表示されます。</p>
+
+<p>利用可能な変数:</p>
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>blogid</td>
+       <td>weblogのID</td>
+</tr><tr>
+       <td>query</td>
+       <td>検索に用いられたクエリ</td>
+</tr></table>
+
+<h2>例</h2>
+
+<pre><code>&lt;b&gt;&lt;%query%&gt;&lt;/b&gt;に該当する検索結果はありませんでした</code></pre>
+
+</div>
+
+<div class="page"><a name="templatecommentbody"></a>
+<h1>テンプレート:コメントの本体</h1>
+<p>このテンプレート・パーツは単独のコメント表示に使われます。このテンプレート部では、<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連テンプレート変数</a>が利用できます。</p>
+
+<h2>例</h2>
+<pre><code>&lt;h2&gt;&lt;%userlink%&gt;さんによるコメント:&lt;/h2&gt;
+
+&lt;p&gt;&lt;%body%&gt;&lt;/p&gt;
+
+&lt;div class="metadata"&gt;
+ (接続元:&lt;%host%&gt; 投稿日時:&lt;%date%&gt; &lt;%time%&gt;)
+&lt;/div&gt;</code></pre>
+
+<p>結果はこうなります:</p>
+
+<div class="example">
+<h4 style="margin: 2px;"><a href="#templatecommentbody">karma</a>さんによるコメント:</h4>
+<p style="margin: 2px;">ナイス!</p>
+<div style="margin:2px;font-size:smaller;">(接続元:host.example.org 投稿日時:2003-03-02 13:30)</div>
+</div>
+
+</div>
+
+<div class="page"><a name="templatepopups"></a>
+<h1>テンプレート:メディアとポップアップ</h1>
+<p>これらのテンプレートは、画像ウィンドウのポップアップへのリンクと画像以外のメディア・オブジェクトのフォーマットに用いられます。それぞれのテンプレートで利用可能な変数を以下に記します:</p>
+
+<h2>ポップアップ画像へのリンクコード</h2>
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>popuplink</td>
+       <td>すぐに使える&lt;a href... といったリンク</td>
+</tr><tr>
+       <td>rawpopuplink</td>
+       <td>href="..."内部のurlのみ</td>
+</tr><tr>
+       <td>popupcode</td>
+       <td>ウィンドウを開くjavascriptコード</td>
+</tr><tr>
+       <td>text</td>
+       <td>代用テキスト(リンクテキスト)</td>
+</tr><tr>
+       <td>width</td>
+       <td>イメージの幅</td>
+</tr><tr>
+       <td>height</td>
+       <td>イメージの高さ</td>
+</tr><tr>
+       <td>popuptext</td>
+       <td>(textと同じ)</td>
+</tr><tr>
+       <td>link</td>
+       <td>画像への直接リンク(URL)</td>
+</tr><tr>
+       <td>media</td>
+       <td>すぐに使える、ポップアップしないイメージのための A タグ</td>
+</tr></table>
+
+
+<h2>インライン画像のコード</h2>
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>image</td>
+       <td>すぐに使えるIMGタグ</td>
+</tr><tr>
+       <td>link</td>
+       <td>画像への直接リンク(URL)</td>
+</tr><tr>
+       <td>text</td>
+       <td>代用テキスト(リンクテキスト)</td>
+</tr><tr>
+       <td>width</td>
+       <td>イメージの幅</td>
+</tr><tr>
+       <td>height</td>
+       <td>イメージの高さ</td>
+</tr><tr>
+       <td>media</td>
+       <td>すぐに使える、イメージのための A タグ</td>
+</tr></table>
+
+<h2>メディアオブジェクトへのリンクコード</h2>
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>media</td>
+       <td>すぐに使えるAタグ</td>
+</tr><tr>
+       <td>link</td>
+       <td>ファイルへの直接リンク(URL)</td>
+</tr><tr>
+       <td>text</td>
+       <td>代用テキスト(リンクテキスト)</td>
+</tr></table>
+
+</div>
+
+<div class="page"><a name="templatememberextra"></a>
+<h1>テンプレート:登録メンバーからのコメントへの追加表示</h1>
+<p>これはコメントの著者がメンバーであることをの証を追加するのに利用できるテンプレートです。最終的には<a href="#templatecommentbody">コメントの本体</a>で使われる<code>&lt;%authtext%&gt;</code>変数の表示となります。</p>
+
+<p>このテンプレート内部では、いくつかの<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連変数</a>が利用できます。</p>
+
+</div>
+
+<div class="page"><a name="templatecommentcontinued"></a>
+<h1>テンプレート:コメントの続きを読む</h1>
+<p>このリンク・フォーマットは、<a href="#templatecommentbody">コメントの本体</a>で使われる変数<code>&lt;%short%&gt;</code>の終わりに追加されます。</p>
+
+<p>このテンプレート内部では、いくつかの<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連変数</a>が利用できます(<code>&lt;%short%&gt;</code>変数以外)。</p>
+
+<p>例:</p>
+
+<pre>
+ &lt;a href="&lt;%itemlink%&gt;"&gt;[続き]&lt;/a&gt;
+</pre>
+
+</div>
+
+<div class="page"><a name="templatecommentwords"></a>
+<h1>テンプレート:コメントの数え方</h1>
+<p>訳注:日本語で使う場合は、単複同型なので両方"コメント"にして問題ないです。</p>
+<p>たぶん、"1 comment(s)"よりむしろ"1 comment"と表示したい人が多いのではないでしょうか?「コメントが一つの時」と「コメントが二つ以上の時」のテンプレート部分はそういった目的のために使えます。これらは他の所で使える<code>&lt;%commentword%&gt;</code>変数の中身として利用されます。</p>
+
+<p>もし一つしかコメントが無い場合、<code>&lt;%commentword%&gt;</code>は「コメントが一つの時」と同じ内容になります。もし1より多い複数のコメントがついているなら、<code>&lt;%commentword%&gt;</code>は「コメントが二つ以上の時」と同じ内容になります。
+</p>
+
+<p>典型的な値は"comment"と"comments"です。<strong>ここでは特別な変数は利用できません</strong>。</p>
+</div>
+
+
+
+<div class="page"><a name="templateeditlink"></a>
+<h1>テンプレート:アイテムを編集するためのリンク </h1>
+<p>このテンプレートは<a href="#templatevar-edit">テンプレート変数edit</a>がどのように表示されるかを決めるものです。ここではどのような<a href="#templatevars-overview">テンプレート変数</a>でも使用できます。
+</p>
+
+<h2>例:</h2>
+
+<pre><code>&lt;a href="&lt;%editlink%&gt;"
+   onclick="&lt;%editpopupcode%&gt;"&gt;編集&lt;/a&gt;</code></pre>
+
+</div>
+
+
+
+
+<div class="page"><a name="skinpartindex"></a>
+<h1>スキン:メインの目次ページ</h1>
+<p>このスキン部品はweblogにおける最新のエントリー(複数)を表示するのに用いられます。通常はサイトのトップページにあたるでしょう。</p>
+
+<p>「メインの目次ページ」の非常に基本的な形:</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;私のウェブログ&lt;/h1&gt;
+    &lt;%blog(mytemplate,20)%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>これによりデフォルトweblog(上書きされた場合を除く)の最新アイテム20個が、'mytemplate'というテンプレートを用いて表示されます。</p>
+</div>
+
+
+<div class="page"><a name="skinpartitem"></a>
+<h1>個別アイテムページ</h1>
+<p>これらのページは完全なアイテムを表示するために使われます。付けられた全てのコメントとコメント追加フォームを含めたものです。</p>
+
+<p>「個別アイテムページ」の非常に基本的な形:</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: アイテム&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;アイテム&lt;/h1&gt;
+    &lt;%item(detailed)%&gt;
+
+    &lt;h1&gt;コメント&lt;/h1&gt;
+    &lt;%comments(detailed)%&gt;
+
+    &lt;h1&gt;コメントを追加&lt;/h1&gt;
+    &lt;%commentform%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>これにより'detailed'テンプレートを用いたアイテムとコメントが表示されます。加えて標準のコメントフォームも。</p>
+
+
+</div>
+
+<div class="page"><a name="skinpartarchivelist"></a>
+<h1>スキン:月別アーカイブ一覧ページ</h1>
+<p>アーカイブが存在する全ての月の概略と、それらアーカイブへのリンクです。</p>
+
+<p>「月別アーカイブ一覧ページ」の非常に基本的な形:</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: アーカイブ集&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;アーカイブ集&lt;/h1&gt;
+    &lt;%archivelist(default)%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>これにより'default'テンプレートを用いた、存在するアーカイブファイル全てのリストが表示されます。</p>
+
+</div>
+
+<div class="page"><a name="skinpartarchive"></a>
+<h1>スキン:月別アーカイブページ</h1>
+<p>ひと月分のアーカイブ。「メインの目次ページ」と似た振る舞いをしますが、該当月の全てのアイテムを表示します。</p>
+
+<p>「月別アーカイブページ」の非常に基本的な形:</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: アーカイブ&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;アーカイブ&lt;/h1&gt;
+    &lt;%archive(default)%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>これにより'default'テンプレートを用いて要求されたアーカイブが表示されます。</p>
+
+
+</div>
+
+
+<div class="page"><a name="skinpartsearch"></a>
+<h1>スキン:検索ページ</h1>
+<p>検索結果の表示に使われます。</p>
+
+<p>「検索ページ」の非常に基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: 検索&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;検索&lt;/h1&gt;
+    &lt;%searchform%&gt;
+
+    &lt;h1&gt;検索結果&lt;/h1&gt;
+    &lt;%searchresults(default)%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>これにより、'default'テンプレートを用いた検索の結果が表示されます。</p>
+
+</div>
+
+<div class="page"><a name="skinparterror"></a>
+<h1>スキン:エラーページ</h1>
+<p>エラーが発生したときに用いられます。</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: エラー&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;エラーが発生しました!&lt;/h1&gt;
+    &lt;%errormessage%&gt;
+
+    &lt;br /&gt;&lt;br /&gt;
+
+    &lt;a href="javascript:history.back();"&gt;戻る&lt;/a&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>これによりエラーメッセージと、戻るためのリンクが表示されます。</p>
+
+</div>
+
+<div class="page"><a name="skinpartmember"></a>
+<h1>スキン:メンバー詳細ページ</h1>
+<p>メンバーの詳細を表示するのに使われます。</p>
+
+<p>「メンバー詳細ページ」の非常に基本的な形:</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: メンバーの詳細&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;&lt;%member(name)%&gt; の情報&lt;/h1&gt;
+    ウェブサイト:
+    &lt;a href="&lt;%member(url)%&gt;"&gt;&lt;%member(url)%&gt;&lt;/a&gt;
+
+    &lt;h1&gt;メッセージを送る&lt;/h1&gt;
+    &lt;%membermailform%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>これにより、メンバー名とウェブサイトのアドレスとメール送信フォームが表示されます。</p>
+
+</div>
+
+
+<div class="page"><a name="skinpartimagepopup"></a>
+<h1>スキン:画像ポップアップウィンドウ</h1>
+<p>メディアファイル(画像)がポップアップウィンドウでの表示を必要とする場合に使われます。このスキンはそのような使われ方をする場合のレイアウトを決定します。</p>
+
+<p>「画像ポップアップウィンドウ」の非常に典型的な形:</p>
+
+<pre>
+&lt;html&gt;
+&lt;head&gt;
+  &lt;title&gt;&lt;%imagetext%&gt;&lt;/title&gt;
+  &lt;style type="text/css"&gt;
+   img { border: none; }
+  &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+  &lt;a href="javascript:window.close();"&gt;&lt;%image%&gt;&lt;/a&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+</div>
+
+
+
+
+
+<div class="page"><a name="shortnames"></a>
+<h1>短縮名と表示される名前</h1>
+<p>ウェブログ、テンプレート、そしてスキンは名前や説明の他に短縮名を持たなくてはなりません。</p>
+
+<p>短縮名はaからzと0か9<strong>のみ</strong>で構成され、かつスペースを含むことは<strong>できません</strong>。</p>
+
+<p>表示される名前はメンバー名として使われます。aからz、 AからZ,、0から9とスペース(半角)が使用できます。ただし、スペースを名前の最初と最後に付けることはできません。</p>
+<p>訳注:テンプレートの名前には'/'が利用できたりするので、実際にはこの限りではないようです。</p>
+</div>
+
+
+
+
+
+
+<div class="page"><a name="templatenew"></a>
+<h1>テンプレート:新しいアイテムに付けるマーク</h1>
+<p><a href="#cookies">最終訪問日時Cookieの保存</a>オプションが有効な時、「新しいアイテムに付けるマーク」テンプレートの内容が、前回訪問時から追加されたアイテムのための変数&lt;%new%&gt;に置き換えられます。変数<code>&lt;%new%&gt;</code>は、例えば<a href="#templateitems">アイテムの本体</a>テンプレートで利用できます。</p>
+
+<p>「最終訪問日時Cookieの保存」が有効でないか、アイテムが新しくなければ、このテンプレート部品は使われません。</p>
+</div>
+
+
+<div class="page"><a name="strftime"></a>
+<h1>時間変数の概要</h1>
+
+<p>次の変換記述は文字列フォーマットに基づきます<small>(PHPドキュメントの<a href="http://jp.php.net/manual/ja/function.strftime.php" onclick="window.open(this.href);return false;" class="out">strftime関数</a>から持ってきたものです)</small>。より詳しい情報は<a href="http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.html" onclick="window.open(this.href);return false;" class="out" title="Open Group specification">Open Group Specification</a>にあります。</p>
+
+<ul>
+       <li><strong>%a</strong> - 現在のロケールに基づく短縮された曜日の名前</li>
+       <li><strong>%A</strong> - 現在のロケールに基づく完全な曜日の名前</li>
+       <li><strong>%b</strong> - 現在のロケールに基づく短縮された月の名前</li>
+       <li><strong>%B</strong> - 現在のロケールに基づく完全な月の名前</li>
+       <li><strong>%c</strong> - 現在のロケールに基づく適当な日付と時間の表現</li>
+       <li><strong>%d</strong> - 日付を10進数で(01から31) </li>
+       <li><strong>%H</strong> - 時間を24時間表示の10進数で(00から23まで)</li>
+       <li><strong>%I</strong> - 時間を12時間表示の10進数で(01から12までの範囲)</li>
+       <li><strong>%j</strong> - 年間での日付を10進数で表現 (001から366)</li>
+       <li><strong>%m</strong> - 月を10進数で表現 (01から12)</li>
+       <li><strong>%M</strong> - 分を10進数で表現</li>
+       <li><strong>%p</strong> - 指定した時間により 'am' または 'pm' 、または 現在のロケールに対応した文字列</li>
+       <li><strong>%S</strong> - 秒を10進数で表現</li>
+       <li><strong>%U</strong> - 年間で何番目の週であるかを 10 進数で表現。 年間で最初の日曜を最初の週の最初の日として数えます。</li>
+       <li><strong>%W</strong> - 現在の年で何番目の週であるかを10進数で表現。 年間で最初の月曜を最初の週の最初の日として数えます。</li>
+       <li><strong>%w</strong> - 曜日を10進数で表現。日曜は0になります。</li>
+       <li><strong>%x</strong> - 時間を除いた日付を現在のロケールに基づき表現します。</li>
+       <li><strong>%X</strong> - 日付を除いた時間を現在のロケールに基づき表現します。</li>
+       <li><strong>%y</strong> - 世紀の部分を除いた年を10進数として表現。(00から99までの範囲) </li>
+       <li><strong>%Y</strong> - 世紀を含む年を 10進数で表現</li>
+       <li><strong>%Z</strong> - タイムゾーンまたはその名前または短縮形</li>
+       <li><strong>%%</strong> - 文字リテラル'%' </li>
+</ul>
+
+</div>
+
+<div class="page"><a name="pinguserland"></a>
+<h1>Weblogs.comへのPing</h1>
+<p>weblogを更新したときに、<a href="http://www.weblogs.com/" onclick="window.open(this.href);return false;" class="out">weblogs.com</a>に更新の通知(ping)を送るという選択ができます。このウェブサイトは要求する人みんなに、近頃更新されたweblogのリストを提供してくれます。多くのウェブサイトがこのデータを用いていますので、このpingを有効にすることでいくらかの新しい訪問者を得る事となるでしょう。</p>
+
+<p class="note"><strong>注意:</strong>この機能を正しく動かすために、blogごとの「設定」にあるweblogの「URL」と「Blogの名前」を埋める必要があります。</p>
+
+</div>
+
+<div class="page"><a name="blogsearchable"></a>
+
+<h1>常に検索対象に含める</h1>
+
+<p>「検索対象にする」オプションが選択されていると、対象のweblogは<strong>常に</strong>検索対象に含まれます。たとえ検索が他のweblogで行われたとしても。(訳注:2.5からのオプション)</p>
+
+<p>例として、'lifelog'と'linkdump'という2つのweblogを持ち、'linkdump'の「検索対象にする」が有効になっていると仮定しましょう。そうすると、'lifelog'での検索クエリは'linkdump'も検索するのに対して、'linkdump'の検索クエリは'linkdump'のエントリーしか検索しません。</p>
+
+
+</div>
+
+
+<div class="page"><a name="convertbreaks"></a>
+<h1>改行を変換する</h1>
+<p>デフォルトでは、Nucleusはアイテム内の改行を<code>&lt;br /&gt;</code>タグに変換します。だから改行も(X)HTMLでのアウトプットに現れるのです。</p>
+<p>手馴れたユーザーや、Semantic Web(<tt>br</tt>タグは情報を付加せず、ただ記述のためにのみ使われる)のために努力するユーザーは、この機能が迷惑だと感じるかもしれません。そしてこの機能を切るのです。</p>
+</div>
+
+
+<div class="page"><a name="media"></a>
+<h1>メディア</h1>
+<p>Nucleusはメディアファイル(画像、動画、音楽など等)をウェブサイトにアップロードすることができます。</p>
+<p>このためにいくつかの設定が必要となります:</p>
+<ul>
+       <li><strong>メディア(画像・音声)ディレクトリ</strong>:メディアファイルが保存されるサーバー上の場所(ローカルのファイルシステム)</li>
+       <li><strong>メディアURL</strong>:メディアファイルのURL上の場所</li>
+       <li><strong>ファイルのアップロードを許可しますか?</strong>:ファイルのアップロードを不許可にすることが可能です</li>
+       <li><strong>アップロードを許可するファイルタイプ</strong>:アップロードできるファイルの拡張子群(反応が無い場合は、コンマで区切る)</li>
+       <li><strong>アップロードファイルの最大サイズ</strong>:アップロードファイルのサイズに制限を設ける</li>
+       <li><strong>アップロードするファイル名の頭に日付を付加する</strong>:もしこのオプションが有効なら、アップロードされたファイルには現在の日付が頭に付加されます。'bunny.jpg'という名前のファイルを2003年4月8日にアップロードしたなら、'20030408-bunny.jpg'というファイル名になります。何故こんな機能があるかというと、大量のファイルをアップロードしているときについ同じ名前を用いてしまう問題を避けるためです。</li>
+</ul>
+
+<p>メンバーはそれぞれ、自身のメディアファイルのプライベートなコレクションを持ちます。あとは、メディア・ディレクトリ下のサブディレクトリがグローバルなコレクション(メンバー間で共有)とみなされます。</p>
+
+<p>アップロードは、少なくとも一つのblogチームに入っているメンバーでなくては行えません。悪用を予防するためです。</p>
+</div>
+
+
+<div class="page"><a name="protectmemnames"></a>
+<h1>メンバー名の保護</h1>
+<p>このオプションが有効なら、ログインしていないメンバーは登録済みメンバーと同じ名前を使ってコメントを加えることができません。このようにする理由は、ゲストによるメンバーへのなりすましを避けるためです。</p>
+</div>
+
+
+<div class="page"><a name="pluginurl"></a>
+<h1>プラグインURL</h1>
+<p>この設定はプラグイン管理領域のベースURLです。通常次のようになります。</p>
+<pre>http://hostname.com/nucleus/plugins/</pre>
+</div>
+
+<div class="page"><a name="skinsurl"></a>
+<h1>スキンURL</h1>
+<p>この設定はNucleusスキン・ディレクトリのベースURLです。通常次のようになります。</p>
+<pre>http://hostname.com/skins/</pre>
+</div>
+
+<div class="page"><a name="actionurl"></a>
+<h1>action.phpへのフルURL</h1>
+<p>この設定はNucleus付属のスクリプト<code>action.php</code>の絶対URLです。通常次のようになります。</p>
+<pre>http://hostname.com/actions.php</pre>
+</div>
+
+
+
+<div class="page"><a name="additem"></a>
+<h1>アイテムの追加</h1>
+<p>weblogにアイテムを追加する際、「本文」「タイトル」「続き」にて4種類のテンプレート変数を利用することができます:</p>
+<ul>
+       <li><a href="#templatevar-popup">&lt;%popup(...)%&gt;</a> ポップアップ画像の挿入</li>
+       <li><a href="#templatevar-image">&lt;%image(...)%&gt;</a> インライン画像の挿入</li>
+       <li><a href="#templatevar-media">&lt;%media(...)%&gt;</a> メディアオブジェクトの挿入</li>
+</ul>
+<p>普通、これらのタグはJavaScriptツールバーにある「メディアの追加」ボタンで書き入れられます。</p>
+
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-referer"></a>
+<h1>スキン変数:referer</h1>
+<p>参照もとのURLを挿入(空っぽになりえます)。</p>
+<h2>引数</h2>
+<p>なし</p>
+<h2>スキンタイプ</h2>
+<p>全て</p>
+<h2>例</h2>
+<pre>
+&lt;a href="&lt;%referer%&gt;"&gt;戻る&lt;/a&gt;
+</pre>
+</div>
+
+
+<div class="page">
+<a name="skinvar-itemid"></a>
+<h1>スキン変数:itemid</h1>
+<p>現在選択しているアイテムのIDを挿入</p>
+<h2>引数</h2>
+<p>None</p>
+<h2>スキンタイプ</h2>
+<p>個別アイテム</p>
+<h2>例</h2>
+<pre>
+&lt;%itemid%&gt;
+</pre>
+</div>
+
+
+<div class="page">
+<a name="skinvar-itemlink"></a>
+
+<h1>スキン変数:itemlink</h1>
+
+<p>アイテムへの永続リンク(permanent link)を追加</p>
+
+<h2>引数</h2>
+
+<p>
+       オプション(2.5から)
+       <ul>
+               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>
+       </ul>
+</p>
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%itemlink%&gt;
+</pre>
+</div>
+
+<div class="page">
+<a name="skinvar-itemtitle"></a>
+<h1>スキン変数:itemtitle</h1>
+<p>アイテムのタイトルを挿入。HTMLは除去され、エンティティはエンコードされる。</p>
+<h2>引数</h2>
+<p>なし</p>
+<h2>スキンタイプ</h2>
+<p>個別アイテム</p>
+<h2>例</h2>
+<pre>
+&lt;%itemtitle%&gt;
+</pre>
+</div>
+
+
+<div class="page">
+<a name="skinvar-archivedate"></a>
+<h1>スキン変数:archivedate</h1>
+<p>アーカイブの日付としてフォーマット済みの日付を挿入。パラメーターなしで使うと、例えばアーカイブが2002年8月のものなら、'15 august 2002'か'august 2002'のどちらかが挿入されることになるでしょう。</p>
+<h2>引数</h2>
+<ul>
+       <li>オプション
+               <table><tr>
+                       <th>名前</th>
+                       <th>値</th>
+               </tr><tr>
+                       <td>Locale</td>
+                       <td>日付がフォーマットされるときに用いられる<a href="#templatelocale">Locale</a></td>
+               </tr><tr>
+                       <td>Format</td>
+                       <td>日付のフォーマット(<a href="#strftime">strftime変数</a>)</td>
+               </tr></table>
+       </li>
+</ul>
+<h2>スキンタイプ</h2>
+<p>月別アーカイブ</p>
+<h2>例</h2>
+<pre>
+Archive for &lt;%archivedate%&gt;
+Archive for &lt;%archivedate(dutch)%&gt;
+Archive for &lt;%archivedate(en,%B %Y)%&gt;
+</pre>
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-blog"></a>
+<h1>スキン変数:blog</h1>
+
+<p>現在動いているblog(通常はデフォルトのもの)の一番新しいアイテム群を、スキンに挿入。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       オプション
+       <ul>
+               <li><strong><em>amount</em></strong>:表示するアイテムの数(デフォルトは10)。何番目のアイテムから始めるかというオフセットをNucleusに伝えるべく含めることもできる。例えば<code>10(5)</code>と記述すると5番目から始めて10個のアイテムを表示する。</li>
+               <li><strong><em>category</em></strong>:表示するカテゴリーの名前</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>メインの目次、個別アイテム、月別アーカイブ、月別アーカイブ一覧、検索</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%blog(default,15)%&gt;
+&lt;%blog(default,5(15))%&gt;
+&lt;%blog(mytemplate)%&gt;
+&lt;%blog(mytemplate,5,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-otherblog"></a>
+<h1>スキン変数:otherblog</h1>
+
+<p>指定されたblogの最新アイテム群をスキンに挿入。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>blogname</strong>:表示するblogの名前(短縮名)</li>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       オプション:
+       <ul>
+               <li><strong><em>amount</em></strong>:表示するアイテムの数(デフォルトは10)。何番目のアイテムから始めるかというオフセットをNucleusに伝えるべく含めることもできる。例えば<code>10(5)</code>と記述すると5番目から始めて10個のアイテムを表示する。</li>
+               <li><strong><em>category</em></strong>:表示するカテゴリーの名前</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherblog(myblog,default,15)%&gt;
+&lt;%otherblog(yourblog,mytemplate)%&gt;
+&lt;%otherblog(yourblog,mytemplate,15,mycategory)%&gt;
+&lt;%otherblog(yourblog,mytemplate,5(15),mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-item"></a>
+<h1>スキン変数:item</h1>
+
+<p>現在選択されているアイテムを、指定されたテンプレートを用いて表示(コメントは除く)。</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>template</strong>:使用するテンプレート名</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%item(mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-comments"></a>
+<h1>スキン変数:comments</h1>
+
+<p>現在選択されているアイテムについているコメントを、指定されたテンプレートを用いて表示。</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>template</strong>:使用するテンプレート名</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%comments(mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-archive"></a>
+<h1>スキン変数:archive</h1>
+
+<p>選択された月と選択されているblog(普通はデフォルトのもの)のアーカイブを、指定されたテンプレートを用いて表示。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       オプション:
+       <ul>
+               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>月別アーカイブ</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%archive(mytemplate)%&gt;
+&lt;%archive(mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-otherarchive"></a>
+<h1>スキン変数:otherarchive</h1>
+
+<p>選択された月のアーカイブを、指定されたblogとテンプレートを用いて表示。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>blogname</strong>:使用するblogの名前(短縮名)</li>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       オプション:
+       <ul>
+               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>月別アーカイブ</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherarchive(myblog,mytemplate)%&gt;
+&lt;%otherarchive(myblog,mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-archivelist"></a>
+<h1>スキン変数:archivelist</h1>
+
+<p>現在選択しているblog(通常はデフォルトのもの)の存在するアーカイブのリストを、指定されたテンプレートを用いて表示。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       オプション:
+       <ul>
+               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>
+               <li><strong><em>limit</em></strong>:表示するリンク数の制限(例えば、過去3ヶ月分へのリンクしか表示させたくないときなど)</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%archivelist(mytemplate)%&gt;
+&lt;%archivelist(mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+<div class="page">
+<a name="skinvar-archivedaylist"></a>
+<h1>スキン変数:archivedaylist</h1>
+
+<p>スキン変数<a href="#skinvar-archivelist">archivelist</a>と同様ですが、<em>月</em>ごとの代わりに<em>日</em>ごとのエントリーを表示。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       オプション:
+       <ul>
+               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>
+               <li><strong><em>limit</em></strong>表示するリンク数の制限(例えば、過去3日分へのリンクしか表示させたくないときなど)</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム</p>
+
+
+<h2>例</h2>
+
+<pre>
+&lt;%archivedaylist(mytemplate)%&gt;
+&lt;%archivedaylist(mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-otherarchivedaylist"></a>
+<h1>スキン変数:otherarchivedaylist</h1>
+
+<p>スキン変数<a href="#skinvar-otherarchivelist">otherarchivelist</a>と同様ですが、<em>月</em>ごとの代わりに<em>日</em>ごとのエントリーを表示。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>blogname</strong>:blogの名前(短縮名)</li>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       Optional
+       <ul>
+               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherarchivedaylist(yourblog,mytemplate)%&gt;
+&lt;%otherarchivedaylist(yourblog,mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-otherarchivelist"></a>
+<h1>スキン変数:otherarchivelist</h1>
+
+<p>指定されたblogの存在するアーカイブのリストを、指定されたテンプレートを用いて表示。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>blogname</strong>:blogの名前(短縮名)</li>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       Optional
+       <ul>
+               <li><strong><em>category</em></strong>:表示するカテゴリー名</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherarchivelist(yourblog,mytemplate)%&gt;
+&lt;%otherarchivelist(yourblog,mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-categorylist"></a>
+<h1>スキン変数:categorylist</h1>
+
+<p>blog(デフォルトは選択されているblog)のカテゴリーリストを、指定されたテンプレートを用いて挿入。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       オプション:
+       <ul>
+               <li><strong><em>blogname</em></strong>:使用するblogの短縮名</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%categorylist(mytemplate)%&gt;
+&lt;%categorylist(mytemplate,myweblog)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-category"></a>
+<h1>スキン変数:category</h1>
+
+<p>現在選択されているカテゴリーに関するいくつかの情報を挿入。カテゴリーが選択されていないときは何も表示しない。</p>
+
+<h2>引数</h2>
+<p>
+       オプション:
+       <ul>
+               <li><strong><em>type</em></strong>:どの情報を内包させるのか。<b>name</b>-カテゴリー名(デフォルト)、<b>desc</b>-カテゴリーの説明、<b>id</b>-カテゴリーのID、のどれかとなる。</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%category%&gt;
+&lt;%category(id)%&gt;
+&lt;%category(desc)%&gt;
+&lt;%category(name)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-ifcat"></a>
+<h1>スキン変数:ifcat</h1>
+
+<p class="deprecated">Nucleusのバージョン2.0以降では使いません。<a href="#skinvar-if">&lt;%if(category)%&gt;</a>を代わりに使ってください。</p>
+
+<h2>引数</h2>
+<p>
+       なし
+       <ul>
+               <li><em>text</em>:表示するテキスト</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%ifcat(Current Category: )%&gt;&lt;%category%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-searchresults"></a>
+<h1>スキン変数:searchresults</h1>
+
+<p>現在のクエリに対する検索結果を表示。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       オプション:
+       <ul>
+               <li><strong><em>maxresults</em></strong>:表示する結果の最大数</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>検索</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%searchresults(mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-othersearchresults"></a>
+<h1>スキン変数:othersearchresults</h1>
+
+<p>指定されたblogの現在のクエリに対する検索結果を、指定されたテンプレートを用いて表示。</p>
+
+<h2>引数</h2>
+<p>
+       必須:
+       <ul>
+               <li><strong>blogname</strong>:使用するblogの名前(短縮名)</li>
+               <li><strong>template</strong>:使用するテンプレート名</li>
+       </ul>
+       Optional:
+       <ul>
+               <li><strong><em>maxresults</em></strong>:表示する結果の最大数</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>検索</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%othersearchresults(myblog,mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-query"></a>
+<h1>スキン変数:query</h1>
+
+<p>現在の検索クエリを挿入。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>検索</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%query%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-version"></a>
+<h1>スキン変数:version</h1>
+
+<p>現在使用しているNucleusのバージョンを挿入。</p>
+
+<h2>引数</h2>
+
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%version%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-previtem"></a>
+<h1>スキン変数:previtem</h1>
+
+<p>そのblogにおける一つ前のアイテムのIDを挿入。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%previtem%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-nextitem"></a>
+<h1>スキン変数:nextitem</h1>
+
+<p>そのblogにおける一つ先のアイテムのIDを挿入。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%nextitem%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-nextitemtitle"></a>
+<h1>スキン変数:nextitemtitle</h1>
+
+<p>そのblogにおける一つ先のアイテムのタイトルを挿入。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%nextitemtitle%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-previtemtitle"></a>
+<h1>スキン変数:previtemtitle</h1>
+
+<p>そのblogにおける一つ前のアイテムのタイトルを挿入。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%previtemtitle%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-prevarchive"></a>
+<h1>スキン変数:prevarchive</h1>
+
+<p>一日前か一ヶ月前かどちらかのアーカイブに相当する、<code>アーカイブ</code>標識を挿入。この値はアーカイブを選択するURL内で利用することができる。</p>
+
+<ul>
+       <li>もし表示されているアーカイブが一日単位なら、値は<code>YYYY-MM-DD</code>という形をとる</li>
+       <li>もし表示されているアーカイブが一ヶ月単位なら、値は<code>YYYY-MM</code>という形を取る</li>
+</ul>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>月別アーカイブ</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;a href="index.php?archive=&lt;%prevarchive%&gt;"&gt;....</code></pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-nextarchive"></a>
+<h1>スキン変数:nextarchive</h1>
+
+<p>一日先か一ヶ月先かどちらかのアーカイブに相当する、<code>アーカイブ</code>標識を挿入。この値はアーカイブを選択するURL内で利用することができる。
+</p>
+
+<ul>
+       <li>もし表示されているアーカイブが一日単位なら、値は<code>YYYY-MM-DD</code>という形をとる</li>
+       <li>もし表示されているアーカイブが一ヶ月単位なら、値は<code>YYYY-MM</code>という形を取る</li>
+</ul>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>月別アーカイブ</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;a href="index.php?archive=&lt;%nextarchive%&gt;"&gt;....</code></pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-archivetype"></a>
+<h1>スキン変数:archivetype</h1>
+
+<p><tt>日単位</tt>か<tt>月単位</tt>、どちらのアーカイブタイプが現在表示されているのか示す。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>月別アーカイブ</p>
+
+</div>
+
+
+
+
+
+<div class="page">
+<a name="skinvar-todaylink"></a>
+<h1>スキン変数:todaylink</h1>
+
+<p>weblogのメインページへのリンクを挿入。現在選択されているblogとカテゴリーが考慮される。</p>
+
+<h2>引数</h2>
+<p>
+       オプション:(2.5からです)
+       <ul>
+               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>
+       </ul>
+</p>
+
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%todaylink%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-archivelink"></a>
+<h1>スキン変数:archivelink</h1>
+
+<p>現在選択しているblogとカテゴリー(blogが選択されていないときはデフォルトのblog)のアーカイブへのリンクを挿入。</p>
+
+<h2>引数</h2>
+
+<p>
+       オプション:(2.5から)
+       <ul>
+               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>
+       </ul>
+</p>
+
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%archivelink%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-nextlink"></a>
+<h1>スキン変数:nextlink</h1>
+
+<p>アイテムページにおいては一つ先のアイテムへの、アーカイブページにおいては一つ先のアーカイブへのリンクを挿入。</p>
+
+<h2>引数</h2>
+<p>
+       オプション:(2.5から)
+       <ul>
+               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>
+               <li><strong><em>amount</em></strong>:「検索」と「メインの目次」において:前または先のページに進んだときに表示されるアイテムの数</li>
+       </ul>
+</p>
+
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム、月別アーカイブ、検索、メインの目次</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%nextlink%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-prevlink"></a>
+<h1>スキン変数:prevlink</h1>
+
+<p>アイテムページにおいては一つ前のアイテムへの、アーカイブページにおいては一つ前のアーカイブへのリンクを挿入。「検索」と「メインの目次」でも使える。</p>
+
+<h2>引数</h2>
+<p>
+       オプション:(2.5から)
+       <ul>
+               <li><strong><em>linktext</em></strong>:記述されていると、未加工のリンクの代わりに完全な<code>&lt;a href...</code>タグがアウトプットされる</li>
+               <li><strong><em>amount</em></strong>:「検索」と「メインの目次」において:前または先のページに進んだときに表示されるアイテムの数</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム、月別アーカイブ、検索、メインの目次</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%prevlink%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-errormessage"></a>
+<h1>スキン変数:errormessage</h1>
+
+<p>エラーが発生したときに、それに相当するメッセージを挿入。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>エラー</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%errormessage%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-imagetext"></a>
+<h1>スキン変数:imagetext</h1>
+
+<p class="deprecated">このスキン変数はNucleusバージョン2.0以降使いません。代わりに<a href="#skinvar-image"><code>&lt;%image(caption)%&gt;</code></a>を使ってください。</p>
+
+<p>ポップアップ画像に見出しテキストをつける</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>画像ポップアップウィンドウ</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%imagetext%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-image"></a>
+<h1>スキン変数:image</h1>
+
+<p>選択された画像を挿入(画像ポップアップ用)</p>
+
+<h2>引数</h2>
+
+<p>オプション:</p>
+<ul>
+       <li>
+               <em>タイプ</em>
+               <table><tr>
+                       <td><strong>imgtag</strong>(デフォルト)</td>
+                       <td>完全なXHTMLタグ <code>&lt;img ... /&gt;</code></td>
+               </tr><tr>
+                       <td><strong>url</strong></td>
+                       <td>画像ファイルへのURL</td>
+               </tr><tr>
+                       <td><strong>width</strong></td>
+                       <td>イメージの幅</td>
+               </tr><tr>
+                       <td><strong>height</strong></td>
+                       <td>イメージの高さ</td>
+               </tr><tr>
+                       <td><strong>caption</strong></td>
+                       <td>画像の見出し(画像と共に表示されるテキスト)</td>
+               </tr></table>
+       </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>画像ポップアップウィンドウ</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%image%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-vars"></a>
+<h1>スキン変数:vars</h1>
+
+<p class="deprecated">このスキン変数はNucleusバージョン2.0以降使いません。<a href="#skinvar-itemid">スキン変数:itemid</a>を使ってこのHTMLをあなた自身で挿入することはたいした手間ではないでしょう。</p>
+
+<p>itemidの入り隠しフォームのインプット欄を挿入。</p>
+
+<code>&lt;input type="hidden" name="itemid" value="<strong>1234</strong>" /&gt;</code>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-sitevar"></a>
+<h1>スキン変数:sitevar</h1>
+
+<p>サイト変数をインクルードする。</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>タイプ</strong>:表示される変数の名前
+       <ul>
+               <li><em>url</em>:サイトのURL</li>
+               <li><em>name</em>:サイトの名前</li>
+               <li><em>admin</em>:管理者のメールアドレス</li>
+       </ul>
+       </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%sitevar(name)%&gt;
+&lt;%sitevar(url)%&gt;
+&lt;a href="mailto:&lt;%sitevar(email)%&gt;"&gt;管理人&lt;/a&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-blogsetting"></a>
+<h1>スキン変数:blogsetting</h1>
+
+<p>現在選択しているblog(普通はデフォルトのもの)の詳細な設定を挿入。</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>タイプ</strong>:どの設定が入れられるか
+           <ul>
+               <li><em>id</em>:該当blogのID</li>
+               <li><em>url</em>:該当blogのURL</li>
+               <li><em>name</em>:該当blogの名前(長い名前)</li>
+               <li><em>desc</em>:該当blogの説明</li>
+               <li><em>short</em>:該当blogの短縮名</li> 
+           </ul>
+       </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム、メンバー詳細</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%blogsetting(name)%&gt;
+&lt;%blogsetting(id)%&gt;
+&lt;%blogsetting(desc)%&gt;
+&lt;a href="&lt;%blogsetting(url)%&gt;"&gt;...&lt;/a&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-member"></a>
+<h1>スキン変数:member</h1>
+
+<p>現在ログインしているメンバーに関する情報を挿入。メンバーの詳細ページにおいては、要求されたメンバーについての同じ情報を表示する追加オプションがある。</p>
+
+<p>ログインしていない訪問者の場合は、<em>your...</em>のパラメーターは何も挿入しない。</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>タイプ</strong>:表示される情報
+               <p>ログインしたメンバーの情報:</p>
+           <ul>
+               <li><em>yourname</em>:メンバーのニックネーム(ログインに使うもの)</li>
+               <li><em>yourrealname</em>:メンバーのフルネーム</li>
+               <li><em>yournotes</em>:メンバーが自身のために設定できるその他の情報(備考欄)</li>
+               <li><em>yoururl</em>:メンバーのウェブサイトURL</li>
+               <li><em>youremail</em>:メンバーのメールアドレス</li>
+               <li><em>yourid</em>:メンバーのID</li>
+           </ul>
+           <p>要求されたメンバーの情報(「メンバー詳細」のページでのみ利用可):</p>
+           <ul>
+               <li><em>name</em>:メンバーのニックネーム(ログインに使うもの)</li>
+               <li><em>realname</em>:メンバーのフルネーム</li>
+               <li><em>notes</em>:メンバーが自身のために設定できるその他の情報(備考欄)</li>
+               <li><em>url</em>:メンバーのウェブサイトURL</li>
+               <li><em>email</em>:メンバーのメールアドレス</li>
+               <li><em>id</em>:メンバーのID</li>
+           </ul>
+       </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre><code>
+&lt;%if(loggedin)%&gt;
+こんにちは&lt;%member(yourrealname)%&gt;さん
+&lt;%endif%&gt;
+</code></pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-preview"></a>
+<h1>スキン変数:preview</h1>
+
+<p>指定されたテンプレートを用いて、ページ内にアイテムのプレビューを挿入。(<a href="#skinvar-additemform">additemform</a>に関連して使われる)</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>template</strong>:使用されるテンプレート名</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>メインの目次</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%preview(mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-adminurl"></a>
+<h1>スキン変数:adminurl</h1>
+
+<p>管理領域への完全なURLを挿入。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;a href="&lt;%adminurl%&gt;"&gt;管理領域&lt;/a&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-additemform"></a>
+<h1>スキン変数:additemform</h1>
+
+<p>現在選択しているblog(普通はデフォルトのもの)へのアイテム追加フォームを表示。ほとんどの場合、<a href="#skinvar-preview">preview</a>と共に使われる。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>メインの目次</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%additemform%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-include"></a>
+<h1>スキン/テンプレート変数:include</h1>
+
+<p>テキストファイルをアウトプット時に取り込む。ファイルの中身はなんらかの構文解析にかけられることは無いので、スキン/テンプレート変数やPHPコードを使うことはできない。(もしインクルード時に展開させたいなら、<a href="#skinvar-parsedinclude">parsedinclude</a>と<a href="#skinvar-phpinclude">phpinclude</a>をみること)</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>filename</strong>:取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもよい)。ここでURLを使うこともできることに注目を。</li>
+</ul>
+
+<h2>注意</h2>
+<ul>
+       <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code>と<code>IncludePrefix</code></a>に影響されます。</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%include(filename.txt)%&gt;
+&lt;%include(/home/user/myself/filename.txt)%&gt;
+&lt;%include(http://mydomain.com/filename.html)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-phpinclude"></a>
+<h1>スキン/テンプレート変数:phpinclude</h1>
+
+<p>PHPファイルをアウトプット時にインクルードする。ファイルの中身はPHPとして解釈されるので注意すること。Nucleusのスキン/テンプレート変数は展開<b>されない</b>。(他のインクルードオプションとして、<a href="#skinvar-parsedinclude">parsedinclude</a>と<a href="#skinvar-include">include</a>をみること)</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>filename</strong>:取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもよい)。</li>
+</ul>
+
+<h2>注意</h2>
+<ul>
+       <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code>と<code>IncludePrefix</code></a>に影響されます。</li>
+       <li>ファイルはスタンダードなphpのコマンド<code>include()</code>を使ってインクルードされます。このコマンドは<em>内部の</em>クラス・メソッドから呼び出されるので、自身で<strong>アクセスしたいグローバル変数を宣言する必要があります</strong>。多くの<a href="#skinvar-phpinclude-vars">標準的な変数</a>はNucleusによって自動的にグローバルが宣言されます。</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;%phpinclude(filename.php)%&gt;
+&lt;%phpinclude(/home/user/myself/filename.php)%&gt;</code></pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-phpinclude-vars"></a>
+<h1>スキン/テンプレート変数:phpinclude:vars</h1>
+
+<p>次のグローバル変数は、スキン/テンプレート変数の<a href="#skinvar-phpinclude">phpinclude</a>によってインクルードされたファイルからアクセスできるものです:</p>
+
+<p>
+$GATEWAY_INTERFACE, $SERVER_NAME, $SERVER_SOFTWARE
+<br />$SERVER_PROTOCOL, $REQUEST_METHOD, $QUERY_STRING
+<br />$DOCUMENT_ROOT, $HTTP_ACCEPT, $HTTP_ACCEPT_CHARSET
+<br />$HTTP_ACCEPT_ENCODING, $HTTP_ACCEPT_LANGUAGE
+<br />$HTTP_CONNECTION, $HTTP_HOST, $HTTP_REFERER
+<br />$HTTP_USER_AGENT, $REMOTE_ADDR, $REMOTE_PORT
+<br />$SCRIPT_FILENAME, $SERVER_ADMIN, $SERVER_PORT
+<br />$SERVER_SIGNATURE, $PATH_TRANSLATED, $SCRIPT_NAME
+<br />$REQUEST_URI, $argv, $argc, $PHP_SELF
+<br />$HTTP_COOKIE_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS
+<br />$HTTP_POST_FILES, $HTTP_ENV_VARS, $HTTP_SERVER_VARS
+<br />$HTTP_SESSION_VARS, $PATH_INFO, $HTTPS
+<br />$HTTP_RAW_POST_DATA, $HTTP_X_FORWARDED_FOR
+</p>
+
+<p>他の変数に関しては、'<tt>global $varname;</tt>'をきっちりとコードに加える必要があります。</p>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-parsedinclude"></a>
+<h1>スキン/テンプレート変数:parsedinclude</h1>
+
+<p>ファイルをアウトプット時に取り込む。ファイルの中身はNucleusのスキン/テンプレートによる構文解析にかけられるので、スキン/テンプレート変数を使うことができる。(他のインクルードオプションとして、<a href="#skinvar-phpinclude">phpinclude</a>と<a href="#skinvar-include">include</a>をみること)</p>
+
+<h2>引数</h2>
+<ul>
+       <li><strong>filename</strong>:取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもよい)。</li>
+</ul>
+
+<h2>注意</h2>
+<ul>
+       <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code>と<code>IncludePrefix</code></a>に影響されます。</li>
+       <li>インクルードしたファイルの中からでも、再び<code>&lt;%parsedinclude(filename)%&gt;</code>を呼び出すことができます。無限ループを避けるため、行えるのは最大で3段階となります。</li>
+</ul>
+
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%parsedinclude(filename.txt)%&gt;
+&lt;%parsedinclude(/home/user/myself/filename.txt)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-plugin"></a>
+<h1>スキン/テンプレート変数:plugin</h1>
+
+<p>プラグインを呼び出す。</p>
+
+<h2>引数</h2>
+<ul>
+       <li>
+               <p>必須:</p>
+               <table><tr>
+                       <th>名前</th>
+                       <th>内容</th>
+               </tr><tr>
+                       <td>PlugName</td>
+                       <td>呼び出されるプラグインの名前。<strong>この名前は注意をはらうべき部分</strong></td>
+               </tr></table>
+       </li>
+       <li><p>プラグインによっては、その他のパラメーターが追加される。</p></li>
+</ul>
+
+<h2>注意</h2>
+<ul>
+       <li>プラグイン名が既存の変数とぶつからない場合、<code>&lt;%PluginName(parameters)%&gt;</code>を用いて直接呼び出すことができます。</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%plugin(Calendar)%&gt;
+&lt;%plugin(LastComments,myweblog)%&gt;
+&lt;%LastComments(myweblog)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-loginform"></a>
+<h1>スキン変数:loginform</h1>
+
+<p>ログインフォームを加えるか、"ログイン中:karma !(ログアウト)"メッセージを表示する</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;%loginform%&gt;</code></pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-commentform"></a>
+<h1>スキン変数:commentform</h1>
+
+<p>アイテムページにコメントフォームを加える。</p>
+
+<h2>引数</h2>
+<p>
+       オプション:
+       <ul>
+               <li><strong><em>destinationurl</em></strong>:コメント追加後にリダイレクトさせるURLを設定(デフォルトでは、投稿したアイテムの「アイテム詳細」ページにリダイレクトされる)</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%commentform%&gt;
+&lt;%commentform(http://host/thanks.html)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-set"></a>
+<h1>スキン/テンプレート変数 set</h1>
+
+<p><a href="#parser-properties" title="A list of available parser properties">パーサーのプロパティ</a>を設定する。</p>
+
+<h2>引数</h2>
+<p>
+       <ul>
+               <li><strong>property</strong>:プロパティの名前</li>
+               <li><strong>value</strong>:プロパティの値</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%set(IncludeMode,skindir)%&gt;
+&lt;%set(IncludePrefix,somedir/)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-skinfile"></a>
+<h1>スキン/テンプレート変数:skinfile</h1>
+
+<p>インポートされたスキンから、スキンのURLに相対リンクを張るときに使う。最良の結果を得るためには、<a href="#parser-properties">パーサーのプロパティ</a><tt>IncludePrefix</tt>と共に使うこと。</p>
+
+<h2>引数</h2>
+<p>
+       <ul>
+               <li><strong>filename</strong>:ファイルの名前(正確なURLに変換される)</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%skinfile(mystyle.css)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-skinname"></a>
+<h1>スキン/テンプレート変数:skinname</h1>
+
+<p>現在使用しているスキンの名前を挿入。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%skinname%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-if"></a>
+<a name="skinvar-else"></a>
+<a name="skinvar-endif"></a>
+<h1>スキン変数:if/else/endif</h1>
+
+<p>決まった条件を満たしているときのみ、コンテンツ・ブロックを挿入。</p>
+
+<h2>引数</h2>
+<p>スキン変数<code>if</code>のみオプションがある</p>
+
+
+<ul>
+       <li><strong>type</strong>:条件の種類</li>
+       <li><em>name</em>:オプションの名前(必須ではない)</li>
+       <li><em>value</em>:チェックする値(必須ではない)</li>
+</ul>
+
+<h2>条件の種類</h2>
+
+<ul>
+       <li><strong>category</strong>:カテゴリーを選択しているとき、条件は満たされる
+               <ul>
+                 <li><strong>category</strong>:カテゴリが選択いるか調べる</li>
+                 <li><strong>category,catname,<em>CategoryName</em></strong>:現在のカテゴリが <em>CategoryName</em> と一致するか調べる</li>
+                 <li><strong>category,catid,<em>CategoryID</em></strong>:現在のカテゴリが <em>CategoryId</em> と一致するか調べる</li>
+               </ul>
+       </li>
+       <li><strong>blogsetting</strong>:blog設定の<em>name</em>項目の値が<em>value</em>と一致しているか調べる(nameはSQLテーブルnucleus_blogにあるカラム名)</li>
+       <li><strong>loggedin</strong>:訪問中のメンバーが現在ログインしていれば、条件は満たされる</li>
+       <li><strong>onteam</strong>:訪問中のメンバーがログインしており、かつ現在いるblog(あるいは<em>name</em>パラメーターで指示されたblog)のチームに入っていれば、条件は満たされる</li>
+       <li><strong>previtem</strong>:もし現在のweblogにより新しいアイテムがあるのなら真となる(スキンタイプは個別アイテム 2.5から) (item skintype)</li>
+       <li><strong>nextitem</strong>:もし現在のweblogにより古いアイテムがあるのなら真となる(スキンタイプは個別アイテム 2.5から)</li>
+       <li><strong>skintype</strong>:現在のスキンタイプが<em>value</em>(index, search, item, archive, archivelist, ...)と一致するか調べる(URLでの表記となることに注意 2.5から)</li>
+       <li><strong>hasplugin</strong>:プラグインがインストールされているか、またはプラグインのオプションが特定の値をとっているか調べる
+               <ul>
+                       <li><strong>hasplugin,<em>PluginName</em></strong>:該当プラグインが存在すれば、条件は満たされる</li>
+                       <li><strong>hasplugin,<em>PluginName</em>,<em>OptionName</em></strong>:プラグインのオプションが「いいえ」に設定されてなければ、条件は満たされる</li>
+                       <li><strong>hasplugin,<em>PluginName</em>,<em>OptionName=value</em></strong>:プラグインのオプションが特定の値に設定されていれば、条件は満たされる</li>
+               </ul>
+       </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%if(loggedin)%&gt;
+おかえりなさい!
+&lt;%else%&gt;
+ようこそ!
+&lt;%endif%&gt;
+</pre>
+
+<pre>
+&lt;%if(category,catname,Off Topic)%&gt;
+'Off Topic' カテゴリへようこそ。
+&lt;%endif%&gt;
+</pre>
+
+<h2>注意</h2>
+
+<p>条件が満たされない時にだけ何らかの表示を行いたい場合は、次のようにすることができます:</p>
+
+<pre>
+&lt;%if(skintype,error)%&gt;&lt;%else%&gt;
+&lt;%blogsetting(name)%&gt;
+&lt;%endif%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-membermailform"></a>
+<h1>スキン変数:membermailform</h1>
+
+<p>(メンバー詳細のページで)詳細が表示されているメンバーに対して、他のログインしているメンバーがメッセージを送ることのできるフォームを表示。</p>
+
+<h2>引数</h2>
+<p>
+       オプション:
+       <ul>
+               <li><strong><em>rows</em></strong>:ボックスの横列の数値(デフォルトは10)</li>
+               <li><strong><em>cols</em></strong>:ボックスの縦列の数値(デフォルトは40)</li>
+               <li><strong><em>destination url</em></strong>:メッセージが送信された後リダイレクトするURL</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>メンバー詳細</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%membermailform%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-searchform"></a>
+<h1>スキン変数:searchform</h1>
+
+<p>現在のblogに対する検索フォームを表示。</p>
+
+<h2>引数</h2>
+<p>
+       オプション:
+       <ul>
+               <li><strong><em>blogname</em></strong>:検索を実行するblogの名前(短縮名)</li>
+       </ul>
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%searchform%&gt;
+&lt;%searchform(otherweblog)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-nucleusbutton"></a>
+<h1>スキン変数:nucleusbutton</h1>
+
+<p><a href="http://nucleuscms.org/" class="out" onclick="window.open(this.href);return false;" title="Nucleus website (opens in new window)">Nucleusウェブサイト</a>へのリンクが付いた、ボタン(あるいはバナー)を挿入。</p>
+
+<h2>引数</h2>
+<p>
+       オプション:
+       <ul>
+               <li><strong><em>imgurl</em></strong>:画像のURL(デフォルトのものを使わない場合)</li>
+               <li><strong><em>imgwidth</em></strong>:画像の横幅(ピクセル単位)</li>
+               <li><strong><em>imgheight</em></strong>: 画像の高さ(ピクセル単位)</li>
+       </ul>
+</p>
+
+<h2>注意</h2>
+<ul>
+       <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code>と<code>IncludePrefix</code></a>に影響されます。</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%nucleusbutton%&gt;
+&lt;%nucleusbutton(nucleus/nucleus.gif,46,43)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-self"></a>
+<h1>スキン変数:self</h1>
+
+<p>現在表示しているページのファイル名を挿入(index.phpか変更しているならそのファイル名)</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>すべて</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%self%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="templatevars-overview"></a>
+<h1>テンプレート変数:概略</h1>
+
+<h2>どういったものなのか?</h2>
+
+<p>テンプレート変数は、厳密にいうならスキン変数と同じ方法で広く働きます。唯一の違いはテンプレート内部で利用できることでしょう。変数は<code>&lt;%<i>varname</i>%&gt;</code>という形を用いて呼び出され、変数の機能によってはテキストをインクルードします。また、その他のオプションパラメーターを持つ変数もあります。</p>
+
+<h2>利用可能な変数</h2>
+
+<p>これらテンプレート変数は、次のテンプレート部品で使われます:<tt>「アイテムのヘッダー」、「アイテムの本体」、「アイテムのフッター」、「日付ヘッダー」、「日付フッター」、「続きへのリンク」、「アイテムリンクの編集」</tt>。(変数<tt>image</tt>、<tt>popup</tt>、<tt>media</tt>もまたweblogアイテムの中で使われます。)</p>
+
+<ul>
+       <li><a href="#templatevars-basic">基本の変数・・・</a>(title、bodyなど...)</li>
+       <li><a href="#templatevars-advanced">上級の変数・・・</a>(include、pluginなど...)</li>
+</ul>
+
+<p>コメント関連のテンプレート部品(<tt>「コメントのヘッダー」、「コメントの本体」、「コメントのフッター」、「コメントが1つの時」、「コメントが2つ以上の時」、「コメントの続きを読む」、「コメントが無い時」、「長すぎるコメントの時」</tt>)は利用可能な変数のセットが異なります:</p>
+
+<ul>
+       <li><a href="#templatevars-comments">コメント関連の変数・・・</a></li>
+</ul>
+
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevars-basic"></a>
+<h1>テンプレート変数:基本の変数</h1>
+
+<p>これらすべての変数は、そのときパースされているアイテムに関わる値となります。</p>
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>title</td>
+       <td>アイテムのタイトル</td>
+</tr><tr>
+       <td>body</td>
+       <td>本文のテキスト</td>
+</tr><tr>
+       <td>more</td>
+       <td>続きのテキスト</td>
+</tr><tr>
+       <td>category</td>
+       <td>カテゴリーの名前</td>
+</tr><tr>
+       <td>categorylink</td>
+       <td>カテゴリーへの未加工のリンク</td>
+</tr><tr>
+       <td><a href="#templatevar-karma">karma</a></td>
+       <td>カルマ投票の得点</td>
+</tr><tr>
+       <td>authorlink</td>
+       <td>作者への未加工のリンク</td>
+</tr><tr>
+       <td>itemlink</td>
+       <td>アイテムへの未加工のリンク(permanent)</td>
+</tr><tr>
+       <td><a href="#templatevar-author">author</a></td>
+       <td>作者の名前</td>
+</tr><tr>
+       <td><a href="#templatevar-smartbody">smartbody</a></td>
+       <td>本文か続きのどちらか</td>
+</tr><tr>
+       <td><a href="#templatevar-morelink">morelink</a></td>
+       <td>続きを読む為のリンク</td>
+</tr><tr>
+       <td><a href="#templatevar-date">date</a></td>
+       <td>フォーマット済みの日付</td>
+</tr><tr>
+       <td><a href="#templatevar-time">time</td>
+       <td>フォーマット済みの時刻</td>
+</tr><tr>
+       <td>daylink</td>
+       <td>その日のアーカイブへの未加工のリンク</td>
+</tr><tr>
+       <td><a href="#templatevar-comments">comments</td>
+       <td>コメント・ブロックかコメント数</td>
+</tr><tr>
+       <td>itemid</td>
+       <td>アイテムのID</td>
+</tr><tr>
+       <td>blogurl</td>
+       <td>blogのURL</td>
+</tr></table>
+
+<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>
+
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevars-advanced"></a>
+<h1>テンプレート変数:上級の変数</h1>
+
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>authorid</td>
+       <td>現在のアイテムの作者ID</td>
+</tr><tr>
+       <td>blogid</td>
+       <td>blogのID</td>
+</tr><tr>
+       <td>catid</td>
+       <td>現在のアイテムが属するカテゴリーのID</td>
+</tr><tr>
+       <td>query</td>
+       <td>検索のクエリ(もし存在するなら)</td>
+</tr><tr>
+       <td><a href="#templatevar-syndicate_title">syndicate_title</a></td>
+       <td>配信用のタイトル</td>
+</tr><tr>
+       <td><a href="#templatevar-syndicate_description">syndicate_description</a></td>
+       <td>配信用の本文テキスト</td>
+</tr><tr>
+       <td>karmaposlink</td>
+       <td>投票用の未加工リンク</td>
+</tr><tr>
+       <td>karmaneglink</td>
+       <td>投票用の未加工リンク</td>
+</tr><tr>
+       <td>new</td>
+       <td>新しいアイテムを示すテキスト</td>
+</tr><tr>
+       <td><a href="#skinvar-include">include</a></td>
+       <td>パース無しでファイルをインクルード</td>
+</tr><tr>
+       <td><a href="#skinvar-parsedinclude">parsedinclude</a></td>
+       <td>パースしてファイルをインクルード</td>
+</tr><tr>
+       <td><a href="#skinvar-phpinclude">phpinclude</a></td>
+       <td>PHPでパースしてファイルをインクルード</td>
+</tr><tr>
+       <td><a href="#skinvar-plugin">plugin</a></td>
+       <td>プラグインを実行</td>
+</tr><tr>
+       <td><a href="#templatevar-edit">edit</a></td>
+       <td>アイテム編集のリンクを挿入</td>
+</tr><tr>
+       <td><a href="#templatevar-editlink">editlink</a></td>
+       <td>アイテム編集の未加工リンク(bookmarkletへのリンク)</td>
+</tr><tr>
+       <td><a href="#templatevar-editpopupcode">editpopupcode</a></td>
+       <td>editlink用のウィンドウをポップアップするjavascriptコード</td>
+</tr><tr>
+       <td><a href="#skinvar-skinfile">skinfile</a></td>
+       <td>インポートされたスキンに属しているファイル用の正確なURLの取り込み</td>
+</tr><tr>
+       <td><a href="#skinvar-set">set</a></td>
+       <td>パーサーのプロパティを設定</td>
+</tr><tr>
+       <td><a href="#templatevar-image">image</a></td>
+       <td>メディア書庫へのインライン画像</td>
+</tr><tr>
+       <td><a href="#templatevar-popup">popup</a></td>
+       <td>メディア・ディレクトリの画像をポップアップ</td>
+</tr><tr>
+       <td><a href="#templatevar-media">media</a></td>
+       <td>メディア・ディレクトリからの他のメディア・オブジェクト</td>
+</tr><tr>
+       <td>relevance</td>
+       <td>検索結果を表示するテンプレートに'search hit relevance'をインクルードする(2.5より)</td>
+</tr></table>
+
+<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="templatevars-comments"></a>
+<h1>テンプレート変数:コメント関連</h1>
+
+
+<table><tr>
+       <th>名前</th>
+       <th>説明</th>
+</tr><tr>
+       <td>body</td>
+       <td>コメントの本体</td>
+</tr><tr>
+       <td>user</td>
+       <td>ユーザー名</td>
+</tr><tr>
+       <td>userid</td>
+       <td>ユーザーのURLかメールアドレス</td>
+</tr><tr>
+       <td>userlink</td>
+       <td>非メンバーにはメールアドレスかURLに対して、メンバーにはメンバー詳細ページに対してリンクを行う(自動で切り替えるスマートなリンク)。注意:このリンクは&lt;a href="..."&gt;と&lt;/a&gt;タグを既に含んでいる。(有効なURLかメールアドレスが無い場合は、ユーザーの名前のみが表示される)</td>
+</tr><tr>
+       <td>userlinkraw</td>
+       <td>上と同じだが&lt;a href..の部分を除く。有効なURLかメールアドレスが存在しないときは空っぽになる。</td>
+</tr><tr>
+       <td>useremail</td>
+       <td>ユーザーのメールアドレス。もしユーザーによって提供されていない場合は空っぽ</td>
+</tr><tr>
+       <td>userwebsite</td>
+       <td>ユーザーのwebsiteのURL。もしユーザーによって提供されていない場合は空っぽ</td>
+</tr><tr>
+       <td>memberid</td>
+       <td>メンバーのID(非メンバーは0となる)</td>
+</tr><tr>
+       <td>commentcount</td>
+       <td>該当アイテムに付けられたコメントの総数</td>
+</tr><tr>
+       <td><a href="#templatecommentwords" title="commentword()">commentword</a></td>
+       <td>1 'comment'、2 'comments'</td>
+</tr><tr>
+       <td><a href="#templatevar-date" title="date([format])">date</a></td>
+       <td>コメントが追加された時の日付</td>
+</tr><tr>
+       <td><a href="#templatevar-time" title="time([format])">time</a></td>
+       <td>コメントが追加された時の時刻</td>
+</tr><tr>
+       <td>host</td>
+       <td>コメントがどこのホストから投稿されたか</td>
+</tr><tr>
+       <td>ip</td>
+       <td>コメントがどこのIPアドレスから投稿されたか</td>
+</tr><tr>
+       <td>commentid</td>
+       <td>現在のコメントのID</td>
+</tr><tr>
+       <td>itemid</td>
+       <td>現在のアイテムのID</td>
+</tr><tr>
+       <td>itemlink</td>
+       <td>アイテムの詳細ページへのリンク</td>
+</tr><tr>
+       <td><a href="#templateitemtitle" title="itemtitle([maxlength])">itemtitle</a></td>
+       <td>現在のアイテムのタイトル</td>
+</tr><tr>
+       <td>blogid</td>
+       <td>weblogのID</td>
+</tr><tr>
+       <td>blogurl</td>
+       <td>weblogのURL</td>
+</tr><tr>
+       <td><a href="#templatememberextra" title="authtext()">authtext</a></td>
+       <td>メンバーなら証となるテキストを表示し、非メンバーなら空っぽ</td>
+</tr><tr>
+       <td>short</td>
+       <td>最初の改行部分から先が省略されたコメントの本体。テンプレートによっては末尾に<a href="#templatecommentcontinued">リンクが追加</a>される。</td>
+</tr><tr>
+       <td>excerpt</td>
+       <td>コメントの本体。60文字でカットし'...'を追加</td>
+</tr><tr>
+       <td>timestamp</td>
+       <td>コメントが追加された時のタイムスタンプ</td>
+</tr><tr>
+       <td><a href="#skinvar-include" title="include(filename)">include</a></td>
+       <td>パース無しでファイルをインクルード</td>
+</tr><tr>
+       <td><a href="#skinvar-parsedinclude" title="parsedinclude(filename)">parsedinclude</a></td>
+       <td>パースしてファイルをインクルード</td>
+</tr><tr>
+       <td><a href="#skinvar-phpinclude" title="phpinclude(filename)">phpinclude</a></td>
+       <td>PHPでパースしてファイルをインクルード</td>
+</tr><tr>
+       <td><a href="#skinvar-plugin" title="plugin(name,[options...])">plugin</a></td>
+       <td>プラグインを実行</td>
+</tr><tr>
+       <td><a href="#skinvar-skinfile" title="skinfile(filename)">skinfile</a></td>
+       <td>インポートされたスキンに属しているファイル用の正確なURLの取り込み</td>
+</tr><tr>
+       <td><a href="#skinvar-set" title="set(property,value)">set</a></td>
+       <td>パーサーのプロパティを設定</td>
+</tr></table>
+
+
+
+<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevar-karma"></a>
+<h1>テンプレート変数:karma</h1>
+
+<p>カルマ投票のデータを挿入。カルマ投票は、アイテムの'カルマ'を投票する方法。一回のクリックで、訪問者は正にでも負にでも投票できる。これら投票の総計が、該当記事が訪問者にどのように思われているのか知らしめてくれるだろう。</p>
+
+<h2>引数</h2>
+
+<ul>オプション:
+       <ul>
+               <li><strong><em>どういったものか?</em></strong>:表示される情報の種類を選択:
+                       <ul>
+                               <li><strong>totalscore</strong>:カルマ投票の総合得点(正の投票数から負の投票数を引いたもの)<em>(デフォルト)</em></li>
+                               <li><strong>pos</strong>:正の投票の総計</li>
+                               <li><strong>neg</strong>:負の投票の総計</li>
+                               <li><strong>votes</strong>:投票数の総計</li>
+                               <li><strong>posp</strong>:正に投じられたパーセンテージ</li>
+                               <li><strong>negp</strong>:負に投じられたパーセンテージ</li>
+                       </ul>
+               </li>
+       </ul>
+</ul>
+
+<h2>例</h2>
+<pre><code>&lt;%karma(posp)%&gt;がよい記事だと評価しました(総計&lt;%votes%&gt;票)</code></pre>
+
+
+</div>
+
+
+
+<div class="page">
+<a name="templateitemtitle"></a>
+<h1>テンプレート変数:templateitemtitle</h1>
+
+<p>コメント関連テンプレート変数において、元記事のタイトルを挿入する。</p>
+
+<h2>引数</h2>
+
+<ul>オプション:
+       <ul>
+               <li><strong><em>maxlength</em></strong>:指定されると、<a href="#templatevar-syndicate_title">テンプレート変数syndicate_title</a>のような振る舞いでアイテムのタイトルを加工する。</li>
+       </ul>
+</ul>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="templatevar-author"></a>
+<h1>テンプレート変数:author</h1>
+
+<p>作者の名前を挿入</p>
+
+<h2>引数</h2>
+<ul>オプション:
+       <ul>
+               <li><strong><em>どういったものか?</em></strong>:表示される情報の種類を選択:
+                       <ul>
+                               <li><strong>name</strong>:名前を表示<em>(デフォルト)</em></li>
+                               <li><strong>realname</strong>:作者の「本名」欄を表示名の代わりに</li>
+                               <li><strong>id</strong>:そのNucleusでのメンバーID</li>
+                               <li><strong>url</strong>:メンバーのウェブサイトのURL</li>
+                               <li><strong>email</strong>:メンバーのメールアドレス(使うのは避けるべき)</li>
+                       </ul>
+               </li>
+       </ul>
+</ul>
+
+<h2>例</h2>
+
+<pre><code>&lt;%author%&gt;
+&lt;%author(realname)%&gt;
+&lt;a href="&lt;%author(url)%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt;</code></pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="templatevar-smartbody"></a>
+<h1>テンプレート変数:smartbody</h1>
+
+<p>現在のアイテムを調べ、本文テキストか続きテキストのどちらを表示するか決定する。</p>
+
+<p>続き部分が空っぽなら、本文部分が選択される。そうでなければ続き部分が表示される。</p>
+
+<table style="text-align: center;"><tr>
+       <th>部分名</th><th colspan="2">空っぽか否か?</th>
+</tr><tr>
+       <td>本文</td><td>いいえ</td><td>いいえ</td>
+</tr></tr>
+       <td>続き</td><td>はい</td><td>いいえ</td>
+</tr></tr>
+       <th>smartbodyの表示=</th><th>「本文部分」</th><th>「続き部分」</th>
+</tr></table>
+
+<h2>使用例</h2>
+
+<p>本文のテキストが完全なテキストと判断され、続きの部分はフロントページに表示される「紹介」や「抜粋」と判断されます。</p>
+<p>フロントページで使われているテンプレートには<tt>&lt;%smartbody%&gt;</tt>を使い、抜粋が存在するときにはそれを、無い場合は完全なテキストを挿入します。アイテムの詳細テンプレートには、<tt>&lt;%body%&gt;</tt> + <tt>&lt;%more%&gt;</tt>のかわりに<tt>&lt;%body%&gt;</tt>を使います。<tt>&lt%body%&gt;</tt>は少なくとも完全なアイテムが入っているのですから。</p>
+
+
+
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-morelink"></a>
+<h1>テンプレート変数:morelink</h1>
+
+<p>アイテムの詳細ページへの、テンプレート(<a href="#templatemorelink">続きへのリンク</a>)で定義されているリンクを挿入。「続き」部分が無いときは空っぽとなる。</p>
+
+<p>テンプレート部品'続きへのリンク'の中身もまたパースされるので、同様に<a href="#templatevars-overview">テンプレート変数</a>を含むことができることに注意。</p>
+</div>
+
+
+<div class="page">
+<a name="templatevar-date"></a>
+<h1>テンプレート変数:date</h1>
+
+<p><a href="#templatedatetime">テンプレートにおける日付の詳細なフォーマット</a>を用いた日付の挿入。オプションとして、与えられたパラメーターによる日付フォーマットのカスタムが可能。</p>
+
+<h2>引数</h2>
+<ul>オプション:
+       <ul>
+               <li><strong><i>format</i></strong>:日付のフォーマットに用いる形式</li>
+       </ul>
+</ul>
+
+<h2>特別</h2>
+
+<p>4つの特別なパラメーターが利用可能:(下の二つは2.5から)</p>
+<ol>
+ <li><code>rfc822</code>:ローカルにあわせたRFC822フォーマットの日付</li>
+ <li><code>rfc822GMT</code>:GMTにあわせたRFCフォーマットの日付</li>
+ <li><code>iso8601</code>:ISO-8601フォーマットの日付(<a href="http://www.w3.org/TR/NOTE-datetime">W3Cの時刻と日付フォーマット</a>に概略)。例:2002-10-02T10:00:00-05:00</li>
+ <li><code>utc</code>:iso8601と同じだが、日付にはタイムゾーンの表示として"Z"を使うUTCで表現される。</li>
+</ol>
+
+<h2>例</h2>
+<pre>
+&lt;%date%&gt;
+&lt;%date(%x)%&gt;
+&lt;%date(rfc822)%&gt;
+&lt;%date(rfc822GMT)%&gt;
+</pre>
+
+
+</div>
+
+<div class="page">
+<a name="templatevar-time"></a>
+<h1>テンプレート変数:time</h1>
+
+<p><a href="#templatedatetime">テンプレートにおける時刻の詳細なフォーマット</a>を用いた時刻の挿入。オプションとして、与えられたパラメーターによる時刻フォーマットのカスタムが可能。</p>
+
+<h2>引数</h2>
+<ul>オプション:
+       <ul>
+               <li><strong><i>format</i></strong>:時刻のフォーマットに用いる形式</li>
+       </ul>
+</ul>
+
+<h2>例</h2>
+<pre>
+&lt;%time%&gt;
+&lt;%time(%X)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-comments"></a>
+<h1>テンプレート変数:comments</h1>
+
+<p>コメント・ブロックを挿入。<a href="#templatecomments">このブロックの構成に関するさらなる情報</a>。</p>
+
+<h2>引数</h2>
+<ul><p>オプション:</p>
+       <table><tr>
+               <th>名前</th>
+               <th>内容</th>
+       </tr><tr>
+               <td>MaxToShow</td>
+               <td>表示するコメントの数(設定されていれば、a href="#blogmaxcomments">blogごとの設定にあるコメントの最大量</a>を上書きする)</td>
+       </tr></table>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%comments%&gt;
+&lt;%comments(5)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-syndicate_title"></a>
+<h1>テンプレート変数:syndicate_title</h1>
+
+<p>HTMLタグを取り除き、100文字にまで縮めたアイテムのタイトルを挿入。テキストが縮められた場合は、末尾に"..."が追加される。</p>
+
+<p>この変数はもともとNucleusで用いるXML-RSSスキンで使うことを意図していたが、他の状況でも利用することも可能。</p>
+
+<h2>引数</h2>
+<ul>
+       <li>
+               <p>オプション:</p>
+               <table><tr>
+                       <th>名前</th>
+                       <th>内容</th>
+               </tr><tr>
+                       <td>MaxChars</td>
+                       <td>保持する文字数の最大値(デフォルトは100)</td>
+               </tr></table>
+       </li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%syndicate_title%&gt;
+&lt;%syndicate_title(25)%&gt;
+</pre>
+
+</div>
+
+<div class="page">
+<a name="templatevar-syndicate_description"></a>
+<h1>テンプレート変数:syndicate_description</h1>
+
+<p>HTMLタグを取り除き、250文字にまで縮めたアイテムの本文を挿入。テキストが縮められた場合は、末尾に"..."が追加される。</p>
+
+<p>この変数はもともとNucleusで用いるXML-RSSスキンで使うことを意図していたが、他の状況でも利用することも可能。</p>
+
+<h2>引数</h2>
+<ul>
+       <li>
+               <p>オプション:</p>
+               <table><tr>
+                       <th>名前</th>
+                       <th>内容</th>
+               </tr><tr>
+                       <td>MaxChars</td>
+                       <td>保持する文字数の最大値(デフォルトは250)</td>
+               </tr></table>
+       </li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%syndicate_description%&gt;
+&lt;%syndicate_description(25)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-image"></a>
+<h1>テンプレート変数:image</h1>
+
+<p>アイテム本体やテンプレートにインライン画像を挿入。</p>
+
+<p>通常、テンプレート変数imageはメディア書庫内の画像を追加するとき自動的に生成される。とはいえ、テンプレート内部で呼び出すことも出来る。その場合は、現在のアイテム作者のメディア・ディレクトリから画像が持ってこられることに注意すること。</p>
+
+<h2>引数</h2>
+<ul>
+       <li>
+               <p>必須:</p>
+               <table><tr>
+                       <th>名前</th>
+                       <th>内容</th>
+               </tr><tr>
+                       <td>filename</td>
+                       <td>画像ファイルの名前</td>
+               </tr><tr>
+                       <td>width</td>
+                       <td>画像の横幅(ピクセルかパーセンテージ)</td>
+               </tr><tr>
+                       <td>height</td>
+                       <td>画像の高さ(ピクセルかパーセンテージ)</td>
+               </tr><tr>
+                       <td>text</td>
+                       <td>画像の代用テキスト</td>
+               </tr></table>
+       </li>
+       <li><strong>注意:</strong>画像、ポップアップ、メディアタグにおいては、パラメーターは'|'で区切られなければなりません。コンマでは<em>ありませんよ</em>!</li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%image(myphoto.jpg|100|200|これが私です)%&gt;
+&lt;%image(myphoto.jpg|50%|50%|縮小していますが、これが私です)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevar-popup"></a>
+<h1>テンプレート変数:popup</h1>
+
+<p>アイテム本体やテンプレートにポップアップ画像を挿入。</p>
+
+<p>通常、テンプレート変数popupはメディア書庫内の画像を追加するとき自動的に生成される。とはいえ、テンプレート内部で呼び出すことも出来る。その場合は、現在のアイテム作者のメディア・ディレクトリから画像が持ってこられることに注意すること。</p>
+
+<h2>引数</h2>
+<ul>
+       <li>
+               <p>必須:</p>
+               <table><tr>
+                       <th>名前</th>
+                       <th>内容</th>
+               </tr><tr>
+                       <td>filename</td>
+                       <td>画像ファイルの名前</td>
+               </tr><tr>
+                       <td>width</td>
+                       <td>画像の横幅(ピクセルかパーセンテージ)</td>
+               </tr><tr>
+                       <td>height</td>
+                       <td>画像の高さ(ピクセルかパーセンテージ)</td>
+               </tr><tr>
+                       <td>text</td>
+                       <td>画像の代用テキスト</td>
+               </tr></table>
+       </li>
+       <li><strong>注意:</strong>画像、ポップアップ、メディアタグにおいては、パラメーターは'|'で区切られなければなりません。コンマでは<em>ありませんよ</em>!</li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%popup(myphoto.jpg|100|200|これが私です)%&gt;
+&lt;%popup(myphoto.jpg|50%|50%|縮小していますが、これが私です)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevar-media"></a>
+<h1>テンプレート変数:media</h1>
+
+<p>アイテム本体やテンプレートにメディアオブジェクトを挿入。</p>
+
+<p>通常、テンプレート変数mediaはメディア書庫内の画像を追加するとき自動的に生成される。とはいえ、テンプレート内部で呼び出すことも出来る。その場合は、現在のアイテム作者のメディア・ディレクトリからオブジェクトが持ってこられることに注意すること。</p>
+
+<h2>引数</h2>
+<ul>
+       <li>
+               <p>必須:</p>
+               <table><tr>
+                       <th>名前</th>
+                       <th>内容</th>
+               </tr><tr>
+                       <td>filename</td>
+                       <td>メディアオブジェクトのファイル名</td>
+               </tr><tr>
+                       <td>text</td>
+                       <td>メディアオブジェクトの説明テキスト</td>
+               </tr></table>
+       </li>
+       <li><strong>注意:</strong>画像、ポップアップ、メディアタグにおいては、パラメーターは'|'で区切られなければなりません。コンマでは<em>ありませんよ</em>!</li>
+</ul>
+
+<h2>例</h2>
+
+<pre><code>&lt;%media(mysong.mp3|新曲を聞いてみてください)%&gt;</code></pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-edit"></a>
+<h1>テンプレート変数:edit</h1>
+
+<p>テンプレートの内部にて、このテンプレート変数を使えば'アイテムの編集'リンクを加えることが出来る。デフォルトでは、ポップアップするbookmarkletウィンドウへのリンクとなるが、<a href="#templateeditlink">テンプレート:アイテムリンクの編集</a>を通して振る舞いを変更することが可能。</p>
+
+<p><strong>注意:</strong>アイテムの編集が許可されたログイン状態のメンバーのみが、このリンクを目に出来ます。他の場合は、テンプレート変数editは何も表示しません。</p>
+
+<h2>例</h2>
+<p>「アイテムの本体」テンプレートの一例</p>
+<pre><code>&lt;h1&gt;&lt;%title%&gt;&lt;/h1&gt;
+&lt;p&gt;&lt;%body%&gt; &lt;%morelink%&gt;&lt;/p&gt;
+&lt;div class="metadata"&gt;
+       &lt;%edit%&gt; &lt;%comments%&gt;
+&lt;/div&gt;</code></pre>
+
+<h2>Results in</h2>
+
+<div class="example">
+<h4 style="margin:2px;">タイトル</h4>
+<p style="margin:2px;">アイテムの本文</p>
+<div style="margin:2px;"><a href="#templatevar-edit">編集</a> - <a href="#templatevar-edit">5 comments</a></div>
+</div>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-editlink"></a>
+<h1>テンプレート変数:editlink</h1>
+
+<p>'アイテムの編集'bookmarkletへのリンクを挿入。これは<a href="#templateeditlink">テンプレート:アイテムリンクの編集</a>内で単純に使うことが出来る。</p>
+
+<h2>例</h2>
+
+<p><a href="#templateeditlink">テンプレート:アイテムリンクの編集</a>はこんな感じになる:</p>
+<pre>
+&lt;a href="&lt;%editlink%&gt;"
+   onclick="&lt;%editpopupcode%&gt;"&gt;編集&lt;/a&gt; -
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-editpopupcode"></a>
+<h1>テンプレート変数:editpopupcode</h1>
+
+<p>'アイテムリンクの編集'ウィンドウをポップアップで開くためには、リンクにいくつかのjavascriptコードを追加する必要がある。このコードを「テンプレート:アイテムリンクの編集」に置く手間を省くために、テンプレート変数editpopupcodeを用いてそれを挿入することが出来る。</p>
+
+<h2>例</h2>
+<p><a href="#templatevar-editlink">テンプレート変数:editlink</a>の例をみること。</p>
+</div>
+
+
+
+<div class="page">
+<a name="plugins"></a>
+<h1>プラグイン</h1>
+<p>Nucleusでは特別な機能を追加するために、カスタムしたプラグインをインストールすることができる。プラグインはまったく違う事柄を実行できる:
+</p>
+<ol>
+       <li>スキン変数のように振舞う</li>
+       <li>テンプレート変数のように振舞う</li>
+       <li>Nucleusによって生成されたイベントのフック。「プラグインの管理」画面での「上へ」と「下へ」リンクは、イベント発生時にプラグインを呼び出す順番を決定するために用いられる。最初のプラグインは最初に呼び出され、最後のプラグインは最後に呼び出される。</li>
+       <li><tt>action.php</tt>を通して呼び出されたときにアクタのように振舞う</li>
+</ol>
+<p>プラグインに対する責任は、完全にプラグインの作者にあることを心にとめておくこと。彼または彼女は、すべてが問題なく動くようきっちりと作らなければならない。</p>
+</div>
+
+<div class="page">
+<a name="parser-properties"></a>
+<a name="includemode"></a>
+<a name="includeprefix"></a>
+<h1>パーサーのプロパティ</h1>
+
+<p>利用可能なパーサーオプションを以下に記述する。</p>
+
+<table>
+ <caption>パーサーのプロパティ</caption>
+ <tr>
+       <th>オプション名</th>
+       <th>値</th>
+ </tr><tr>
+       <td>Includeモード</td>
+       <td>
+               <ul>
+                       <li><strong>normal</strong>:通常の動作;ページを作成する.phpファイルのディレクトリ/URLから相対位置のファイルを取り出しインクルード。</li>
+                       <li><strong>skindir</strong>:スキンディレクトリ/スキンURLから相対位置のファイルを取り出しインクルード。</li>
+               </ul>
+               <p>このプロパティは次のスキン変数に影響を与えます:<a href="#skinvar-include">include</a>、<a href="#skinvar-phpinclude">phpinclude</a>、<a href="#skinvar-parsedinclude">parsedinclude</a>、<a href="#skinvar-nucleusbutton">nucleusbutton</a></p>
+       </td>
+ </tr><tr>
+       <td>Includeプリフィックス</td>
+       <td>
+               <p>このプロパティはインクルードするファイルそれぞれの頭に追加されるプリフィックスです。例えば、プリフィックスが<tt>base/</tt>でインクルードするファイルが<tt>somefile.txt</tt>なら、最終的には<tt>base/somefile.txt</tt>をインクルードすることになります。</tt></p>
+               <p>このプロパティはIncludeModeのプロパティと共に使われることが意図されています。この方法で、<tt><em>skindir/</em>somename/</tt>にインポートされたスキンは、<tt>IncludeMode</tt>を<tt>skindirを使う</tt>に<tt>IncludePrefix</tt>を<tt>somename/</tt>に設定しておくことができます。</p>
+               <p>このプロパティは次のスキン変数に影響を与えます:<a href="#skinvar-include">include</a>、<a href="#skinvar-phpinclude">phpinclude</a>、<a href="#skinvar-parsedinclude">parsedinclude</a>、<a href="#skinvar-nucleusbutton">nucleusbutton</a></p>
+       </td>
+  </tr>
+</table>
+
+<p><tt>Includeプリフィックス</tt>と<tt>Includeモード</tt>のプロパティは、「スキンの一般的設定」において該当スキンでの包括的な設定が可能です。なお、プロパティが設定されてしまうと、例えばテンプレートも含めたすべてのパースデータにそれが適用されることを心にとめておいてください。</p>
+
+</div>
+
+</body>
+</html>
+
index 7ccb7be..41357db 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: history.html,v 1.4 2005-06-30 20:59:58 kimitake Exp $ -->\r
-       <!-- $NucleusJP: history.html,v 1.3 2005/03/19 08:34:53 kimitake Exp $ -->\r
-       <title>Nucleus - History</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<h1>Version History</h1>\r
-\r
-<p>\r
-       <a href="index.html">Back to manual</a>\r
-</p>\r
-\r
-<ul>\r
-       <li>\r
-               <b>Nucleus v3.21 (June 30, 2005)</b>\r
-               <ul>\r
-                       <li>FIXED: <a href="http://secunia.com/advisories/15852/">XML-RPC for PHP Unspecified PHP Code Execution Vulnerability</a></li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v3.2 (March 7, 2005)</b>\r
-               <ul>\r
-                       <li>ADDED: <a href="http://wiki.gednet.com/NPSkinFiles">NP_SkinFiles</a> plugin installed on full install</li>\r
-                       <li>FIXED: Installing plugins through install.php failed (karma)</li>\r
-                       <li>FIXED: whitespace at start/end got trimmed on skin edit/import (karma)</li>\r
-                       <li>ADDED: <code>title</code>-attributes on inline/popup images (moraes)</li>\r
-                       <li>ADDED: New default skin (Ivan, hcgtv, moraes, ...)</li>\r
-                       <li>ADDED: fr 1081569, <code>&lt;%if(category,catid,1)%&gt;</code> support (moraes)</li>\r
-                       <li>ADDED: support for <code>rel="nofollow"</code> (Rakaz)</li>\r
-                       <li>FIXED: bug 1058978, subscription list of updated plugin showed the updated subscriptions while the old subscription-list was still in the database. Nucleus now gives a warning (TeRanEX)</li>\r
-                       <li>FIXED: bug 1083959, closed site still allowed posting comments (karma)</li>\r
-                       <li>FIXED: bug 1083971, editing blog settings was not possible on PHP versions &lt; 4.2.0 (floatval) (karma)</li>\r
-                       <li>FIXED: In v3.15, deleting an item via the bookmarklet failed (karma)</li>\r
-                       <li>ADDED: Support for <code>&lt;%blogsetting(short)%&gt;</code>, as suggested by caw (karma)</li>\r
-                       <li>FIXED: Default skin used <code>application/xml+rss</code> instead of <code>application/rss+xml</code>, causing RSS autodiscovery to fail. (karma)</li>\r
-                       <li>FIXED: Moved more hardcoded text into language files</li>\r
-                       <li>FIXED: Made it so malicious users cannot trick a logged in site member/admin into visiting a specifically crafted URL that performs some admin area task. (karma).</li>\r
-                       <li>FIXED: bug 976777, weblogs.com was not ping when posting draft (admun)</li>\r
-                       <li>ADDED: bug 1008171, cookie-prefix (karma)</li>\r
-                       <li>CHANGED: bug 1008175, move <code>getTemplate</code> into <code>MANAGER</code> class + some other performance tweaks (karma)</li>\r
-                       <li>ADDED: add plugin dependency check (admun)</li>\r
-                       <li>CHANGED: Sending out activation links rather than new passwords on new accounts, forgotten passwords, etc. (karma)</li>\r
-                       <li>ADDED: Plugins can now make text- and textarea-optiontypes readonly (TeRanEX)</li>\r
-                       <li>CHANGED: new plugin event <code>FormExtra</code> (for use with <code>ValidateForm</code>) (karma)</li>\r
-                       <li>CHANGED: better error handling when commenting. Errors now displayed together with comment form. (karma)</li>\r
-                       <li>CHANGED: actions (commenting, membermail, ...) can be done using any entry point, not just through <code>action.php</code> (karma)</li>\r
-                       <li>CHANGED: Added <code>$</code><code>Id$</code> info in sourcefiles (karma)</li>\r
-                       <li>CHANGED: PrePluginOptionsEdit-event now has an <code>extra</code>-field which can be used to add option-specific code to the page (TeRanEX)</li>\r
-                       <li>ADDED: new event, PrePluginOptionsUpdate, can be used by plugins to verify/modify the new value for an option (TeRanEX)</li>\r
-                       <li>ADDED: Plugins can now provide a documentation page, which is shown inside the admin area (TeRanEX)</li>\r
-                       <li>ADDED: Plugins can now limit values for an option to be only numeric (<code>datatype=numerical</code>) (TeRanEX)</li>\r
-                       <li>ADDED: OptionTop-methods, to let a plugin retreive an array of the x-highest (or lowest) values of an option (TeRanEX)</li>\r
-                       <li>ADDED: Plugins can now make specific options for items. These options can be edited directly from the item add or edit page (TeRanEX)</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v3.15 (November 14, 2004)</b>\r
-               <ul>\r
-                       <li>FIXED: Some XSS issues, as reported by Alexander Antipov</li>\r
-                       <li>FIXED: Validate data that is sent as HTTP headers (redirects etc) (karma)</li>\r
-                       <li>FIXED: bug 1029057, parsed include doesn't accept empty files (karma)</li>\r
-                       <li>FIXED: bug 1036849, 'relevance' listed in list of available skinvars, while it's a templatevar (karma)</li>\r
-                       <li>FIXED: It was possible to spoof the username on comments, even when "protect member names" was turned on. Reported by bigmouth. (karma)</li>\r
-                       <li>FIXED: bug 1025675, if(hasplugin) causes warnings in action log when plugin does not exist (karma)</li>\r
-                       <li>FIXED: bug 1008700, taking away admin attribute from a member was disallowed when that member did not have logon rights (karma)</li>\r
-                       <li>FIXED: bug 968925, member edit leak out repeat password box while it should be hidden (admun)</li>\r
-                       <li>FIXED: bug 933580, URLs in comments followed with a comma should not have the comma in the generated hyperlink (karma)</li>\r
-                       <li>FIXED: bug 1019584, separating search terms with a '+' character caused SQL errors (karma)</li>\r
-                       <li>FIXED: bug 1016217, superadmin should be allowed to edit all items/comments (karma)</li>\r
-                       <li>FIXED: bug 1019191, <code>&lt;%if(blogsetting,..)%&gt;</code> / <code>&lt;%if(category,...)%&gt;</code> broken on error pages (karma)</li>\r
-                       <li>FIXED: Made sure no code relies on the PHP5 setting <code>register_long_arrays</code> to be <code>On</code> (karma)</li>\r
-                       <li>FIXED: <code>Call to undefined function</code> when user specified a language in its profile (jef pober)</li>\r
-                       <li>FIXED: Quickmenu didn't show up after login from <code>index.php?action=showlogin</code> (karma)</li>\r
-                       <li>CHANGED: new plugin event <code>ValidateForm</code> (karma)</li>\r
-                       <li>CHANGED: Extra whitespace to make skin exports easier to read in text editors (karma)</li>\r
-                       <li>CHANGED: e-mail notifications are now sent as <code>utf-8</code> rather than <code>iso-8859-1</code> (karma)</li>\r
-                       <li>ADDED: Admin members can click the version number in the admin area to check for a newer version (karma)</li>\r
-                       <li>ADDED: <code>&lt;%if(admin)%&gt;</code> and <code>&lt;%if(admin,blogname)%&gt;</code> in skins (karma)</li>\r
-                       <li>ADDED: In the admin area, a list of all comments for a blog is now available (karma)</li>\r
-                       <li>ADDED: <code>ITEM::getitem</code> returns blogid, as suggested by leonbloy (karma)</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v3.1 (July 28, 2004)</b>\r
-               <ul>\r
-                       <li>FIXED: Nucleus v3.01 was missing a fix in <code>backup.php</code>, which could cause fulltext key info not to be backed up correctly</li>\r
-                       <li>ADDED: support for patch levels, so plugin API enhancements can be distributed to power users earlier (<a href="http://forum.nucleuscms.org/viewtopic.php?t=4142" title="More info...">suggested</a> by TeRanEX)</li>\r
-                       <li>FIXED: bug 974090, multiple identical SQL queries were executed when checking if a plugin is available (karma)</li>\r
-                       <li>FIXED: Default language wasn't always respected (fushimi)</li>\r
-                       <li>CHANGED: new bookmarklet style (TeRanEX / moraes)</li>\r
-                       <li>FIXED: After a karma vote, redirection to referer URL failed if <code>register_globals</code> is turned off (karma)</li>\r
-                       <li>FIXED: SQL Injection Vulnerability, reported by aCiDBiTS</li>\r
-                       <li>FIXED: bug 689468, moved PostAddComment from action.php to COMMENTS.php(admun)</li>\r
-                       <li>FIXED: bug 967580, Class variables were not explicitly defined in PHP classes (karma)</li>\r
-                       <li>FIXED: IE6 unreadable Admin menu textarea (admun)</li>\r
-                       <li>FIXED: Skin exports for skins containing CDATA sections (like the RSS feeds) caused the <code>skinbackup.xml</code> to contain invalid XML. (Import still worked, however) (karma)</li>\r
-                       <li>FIXED: German language file wrong translation (admun)</li>\r
-                       <li>CHANGED: replaced <code>split</code> by <code>preg_split</code> in the parser class. Should be faster according to PHP docs (karma)</li>\r
-                       <li>FIXED: documentation typo (admun)</li>\r
-                       <li>FIXED: PHP5: Install script failed to discover install path automatically (karma)</li>\r
-                       <li>FIXED: Skin parser no longer parses skinvars when they are inside a non-displayed <code>if</code>-section (karma)</li>\r
-                       <li>FIXED: bug 817361, prefix http:// to member's URL if missing (admun)</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v3.01 (July 13, 2004)</b>\r
-               <ul>\r
-                       <li>FIXED: PHP5: Links to plugin admin area broken (radekradek)</li>\r
-                       <li>FIXED: bug 966011, skins created with v2.0 could not be imported (karma)</li>\r
-                       <li>FIXED: Security issue spotted by rADo2</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v3.0 (May 30, 2004)</b>\r
-               <ul>\r
-                       <li>FIXED: When adding a weblog, select globally defined default skin by default (TeRanEX)</li>\r
-                       <li>FIXED: CSS conflict in default skin (moraes)</li>\r
-                       <li>FIXED: ADMIN.php no-cache after doctype added to support dynamic content for plugins in admin area (rADo2)</li>\r
-                       <li>FIXED: vars4.1.0.php fixed a strange bug for some PHP installs having empty $_REQUEST[] (rADo2)</li>\r
-                       <li>FIXED: globalfunctions.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>\r
-                       <li>FIXED: install.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>\r
-                       <li>FIXED: install.php - installCustomSkins skinbackup.xml renamed (rADo2)</li>\r
-                       <li>FIXED: install.php - installCustomPlugs now correctly syncs plugin events (rADo2)</li>\r
-                       <li>FIXED: Forcing focus on add/edit window after closing media library (nakahara21)</li>\r
-                       <li>ADDED: <code>class</code> attributes on textareas that allow skins/templates to be edited (karma)</li>\r
-                       <li>FIXED: Documentation and errors now tell to chmod config.php to 444 instead of 644 (hcgtv)</li>\r
-                       <li>CHANGED: Admin area style power-up (Radek)</li>\r
-                       <li>FIXED: Install script used $PHP_SELF, which is not available when register_globals is off (nakahara21)</li>\r
-                       <li>FIXED; Skin import failed if there were CDATA sections (Nucleus Japan)</li>\r
-                       <li>FIXED: <code>undoMagic</code> choked on array variables (Nucleus Japan)</li>\r
-                       <li>FIXED: htmlspecialchars causes broken url like "&amp;amp;amp;" (Nucleus Japan)</li>\r
-                       <li>FIXED: PostAddCategory event was never called (Nucleus Japan)</li>\r
-                       <li>FIXED: PostAddCategory event was not called when creating a new weblog (Nucleus Japan)</li>\r
-                       <li>FIXED: &lt;%blogurl%&gt; problem on category lists (nakahara21)</li>\r
-                       <li>CHANGED: Took out the HTTP Authentication part for now (it has no real use yet, and caused problems when Nucleus is installed in a protected directory)</li>\r
-                       <li>FIXED: When the 'Allow login edit' option was disabled, the e-mail address was not checked for validity when a user edited his/her settings. This would cause an e-mail with new password to be sent out to an invalid address. (Frankenstein)</li>\r
-                       <li>FIXED: Some PHP files were missing the closing <code>?&gt;</code> tag (ikeizer)</li>\r
-                       <li>FIXED: Plugins were inable to delete options (leonbloy)</li>\r
-                       <li>FIXED: XML-RPC: <code>metaWeblog.newPost</code> fails when an empty array is passed as list of categories (caused problems with Ecto)</li>\r
-                       <li>FIXED: Eliminated 2 SQL queries on most requests.</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v3.0 RC (April 27, 2004)</b>\r
-               <ul>\r
-                       <li>CHANGED: Labeled it v3.0, since users started believing "2.5 beta == 25 final"</li>\r
-                       <li>FIXED: XML-RPC: <code>metaWeblog.editPost</code> assigned the default category again when no categories were passed along (karma).</li>\r
-                       <li>FIXED: XML-RPC: <code>mt.getPostCategories</code> returned an invalid result (karma)</li>\r
-                       <li>CHANGED: On clean install, RSS and Atom feeds contain full items rather than excerpts only (karma)</li>\r
-                       <li>REMOVED: Clean installation does not include RSS 0.91 feed anymore. Only the RSS 2.0 and Atom 0.3 feeds are included (karma)</li>\r
-                       <li>ADDED: When a skin provides a preview thumbnail, it is displayed in the skin overview (include prefix required, 100x75 preview.png, preview-large.png). Also, when a readme.html file is present in the skin include dir, a link to that file is added (karma)</li>\r
-                       <li>CHANGED: Allowed skin names to have slashes (<code>/</code>) in them (karma)</li>\r
-                       <li>FIXED: When adding media in non-IE browsers, all text was removed</li>\r
-                       <li>FIXED: Wrong times displayed / 'no such item' errors when MySQL server and PHP server are in different timezones (karma)</li>\r
-                       <li>ADDED: Made sure language files for v2.5beta can be used with v2.5final without strange strings (e.g. _SETTINGS_EXTAUTH) showing up in the admin area (karma)</li>\r
-                       <li>FIXED: No CSS styles were applied on 'insert media' popup (karma)</li>\r
-                       <li>FIXED: Some more possible problems with URL linking in comments (karma)</li>\r
-                       <li>FIXED: In Opera, buttons on the extended area added text to the main body text instead (karma)</li>\r
-                       <li>CHANGED: Admin pages are being sent as <code>text/html</code> instead of <code>application/xhtml+xml</code> again, since it caused too much javascript problems. When <code>$CONF['debug']</code> is <code>1</code> however, the pages are still sent as <code>application/xhtml+xml</code> (karma)</li>\r
-                       <li>FIXED: <code>itemlink</code> in templatevars didn't include itemid when used on item skins (mas)</li>\r
-                       <li>FIXED: Errors when deleting plugins with options (Curtis)</li>\r
-                       <li>FIXED: &amp; not encoded in category names/descriptions in admin area (karma)</li>\r
-                       <li>ADDED: <code>hasplugin</code> option on <code>if</code> skinvars (Kazuhiko)</li>\r
-                       <li><del>ADDED: External Authentication (plugin contains authentication code) (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>\r
-                       <li><del>ADDED: HTTP Authentication (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>\r
-                       <li>FIXED: When using the JavaScript buttons to add images/bold text/... to the extended text area, the text was added to the main text body instead if JavaScript toolbar style was set to 'simple' (karma)</li>\r
-                       <li>FIXED: XML-RPC: Added <code>postid</code> in structs returned by <code>metaWeblog.getPost</code> and <code>metaWeblog.getRecentPosts</code> (karma)</li>\r
-                       <li>FIXED: XML-RPC: <code>metaWeblog.getRecentPosts</code> expected a <code>string</code> instead of an <code>int</code> for the <code>amountOfPosts</code> parameter. (karma)</li>\r
-                       <li>FIXED: convert linebreaks broke <code>\r\n</code> linebreaks (jmuto)</li>\r
-                       <li>FIXED: On <code>index</code> and <code>search</code> skinparts, <code>nextlink</code>/<code>prevlink</code> could not be used before a <code>blog</code> or <code>searchresults</code> skinvar was called (karma)</li>\r
-                       <li>FIXED: SQL errors when search query contained single quotes (<code>'</code>) (karma)</li>\r
-                       <li>FIXED: Backup did not store information about FULLTEXT keys. (karma)</li>\r
-                       <li>ADDED: Extended the <code>date</code> templatevariables with pre-defined formats <code>utc</code> and <code>iso8601</code> (needed for Atom syndication; karma)</li>\r
-                       <li>FIXED: super-admins that were not on a blog team did not see the categories when trying to add an item to that blog (karma)</li>\r
-                       <li>FIXED: <code>nextresults</code> and <code>prevresults</code> were listed as available skunvars, while they don't exist (karma)</li>\r
-                       <li>FIXED: XML-RPC library wrote <code>&lt;?phpxml version="1.0"?&gt;</code> as XML header (jmuto)</li>\r
-                       <li>FIXED: not longer showing comment form when comments disabled for blog (jmuto)</li>\r
-                       <li>CHANGED: Plugin options are no longer limited to 128 characters (karma)</li>\r
-                       <li>CHANGED: Exported skins are now saved as <code>skinbackup.xml</code> instead of <code>skindata.xml</code> to avoid confusion. (karma)</li>\r
-                       <li>ADDED: New plugin events <code>AdminPrePageHead</code>, <code>AdminPrePageFoot</code>, <code>PreSendContentType</code>, <code>QuickMenu</code>, <code>BookmarkletExtraHead</code> (karma)</li>\r
-                       <li>FIXED: Fix for bookmarklet, which failed in Opera (jmuto)</li>\r
-                       <li>FIXED: <code>nextitemtitle</code> and <code>previtemtitle</code> skinvars did not htmlencode their output (karma)</li>\r
-                       <li>CHANGED/ADDED: make all skinvars that insert links consistent. They can now all take a linktext parameter to insert a full link instead of a raw link. The <code>nextlink</code>/<code>prevlink</code> on search/index pages (introduced 2.5 beta) had to change for this. Skinvars that can take a linktext: <code>todaylink</code>, <code>archivelink</code>, <code>prevlink</code>, <code>nextlink</code> and <code>itemlink</code> (karma)</li>\r
-                       <li>FIXED: XML-RPC: <code>mt.setPostCategories</code> asumed that <code>isPrimary</code> was always present (karma)</li>\r
-                       <li>FIXED: Plugins that generate output when they are loaded can not longer break backups. (Xiffy)</li>\r
-                       <li>FIXED: The test that auto-disabled fancy URLs was incorrect, and also applied to top-level domains that use 3 characters (like .com) (karma)</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v2.5 beta (October 11, 2003)</b>\r
-               <ul>\r
-                       <li>ADDED: <code>if(previtem)</code>, <code>if(nextitem)</code> and <code>if(skintype,<em>typename</em>)</code> skinvars.</li>\r
-                       <li>FIXED: RSS conditional GET wasn't working correctly (Visa Kopu)</li>\r
-                       <li>ADDED: Templatevar <code>relevance</code> available when displaying search results (Xiffy)</li>\r
-                       <li>CHANGED: <code>nextlink</code> and <code>prevlink</code> skinvar now also available on <code>search</code> and <code>index</code> skins. (Xiffy)</li>\r
-                       <li>ADDED: Skinvars <code>nextitemtitle</code> and <code>previtemtitle</code> on <code>item</code> skins (Xiffy)</li>\r
-                       <li>FIXED: Upload did not notice duplicates correctly</li>\r
-                       <li>ADDED: XML-RPC: Support for <code>metaWeblog.newMediaObject</code> and <code>metaWeblog.getRecentPosts</code> methods</li>\r
-                       <li>ADDED: XML-RPC: Support for the <a href="http://www.movabletype.org/docs/mtmanual_programmatic.html">Movable Type API</a> (except for <code>mt.getTrackbackPings</code>)</li>\r
-                       <li>CHANGED: Fulltext search, prev/next links on search pages, ... (Xiffy)</li>\r
-                       <li>FIXED/CHANGED: Action log size drops back to 250 when more than 500 entries.</li>\r
-                       <li>FIXED: No more restrictions on category names</li>\r
-                       <li>ADDED: possibility to create <a href="http://nucleuscms.org/documentation/devdocs/custominstall.html">custom installs</a></li>\r
-                       <li>FIXED: XHTML admin documents now have a proper <code>xmlns</code> attribute set; <del>admin pages are now sent as <code>application/xhtml+xml</code> if the client browser accepts it.</del> <ins>Removed again in 3.5final</ins></li>\r
-                       <li>ADDED: Plugins can now make specific options for blogs, categories and members. These options can be edited directly from the blogsettings or member settings page.</li>\r
-                       <li>FIXED: It's no longer possible to select an item from an other weblog through <code>?itemid=</code> when there is a different <code>blogid=</code> parameter set in the request (or set using <code>selectBlog</code>)</li>\r
-                       <li>FIXED: Disallowed while trying to create a new category on item edit</li>\r
-                       <li>FIXED: Date/Time variables in date footer were not parsed</li>\r
-                       <li>FIXED: Adding an item while creating a new category prevented ping to be sent to weblogs.com</li>\r
-                       <li>FIXED: Right-click bookmarklet for IE (re-install to get it working with IE6)</li>\r
-                       <li>FIXED/CHANGED: hyperlink conversion in comments: ftp/http/mailto supported</li>\r
-                       <li>FIXED: spaces in between multiple notify e-mail addresses caused ar error message saying the e-mail address is invalid.</li>\r
-                       <li>FIXED: <code>archivedate</code> skinvar ignored the 'locale' parameter that was passed to it</li>\r
-                       <li>FIXED: <code>selectBlog</code> did not protect for changes in <code>?archivelist</code></li>\r
-                       <li>FIXED: <code>selectCategory</code> now takes a category id instead of a name (multiple categories can have the same name)</li>\r
-                       <li>CHANGED: Fancy URLs are only generated when <code>$CONF['Self']</code> does not end in <code>.php</code> (this avoids URLs like <code>index.php/item/95/item/94/member/1</code> when turning fancy URLs on without further configuration)</li>\r
-                       <li>CHANGED: Install script updates <em>config.php</em> automatically when it is writable</li>\r
-                       <li>CHANGED: When the content type of a skin is <code>application/xhtml+xml</code>, only send this to browsers that specify this type in their <code>HTTP_ACCEPT</code> header (otherwise, send <code>text/html</code> instead)</li>\r
-                       <li>CHANGED: More intelligent search keywords highlighting (multiple separate keywords etc), also available inside comment bodies now</li>\r
-                       <li>ADDED: Possibility to filter on filename in media library</li>\r
-                       <li>FIXED: <code>include('config.php')</code> caused problems when another <code>config.php</code> was in the PHP include path (nils bernhard)</li>\r
-                       <li>ADDED: LiveJournal conversion (moraes)</li>\r
-                       <li>FIXED: Karma Vote URLs used relative links to <code>action.php</code></li>\r
-                       <li>CHANGED: Support for PHP versions having <code>short_open_tag = Off</code> (Andrew Brampton/Terry Chay)</li>\r
-                       <li>ADDED: Plugin options can now also use a <code>textarea</code> type. (max. size for data is still 128 bytes though)</li>\r
-                       <li>FIXED: When unable to load a plugin, an error message is added to the actionlog</li>\r
-                       <li>FIXED: Not all messages sent to the actionlog actually appeared there</li>\r
-                       <li>ADDED: Made it possible to install more than one Nucleus installation in the same database (using a prefix to the tablenames)</li>\r
-                       <li>ADDED: Nucleus does not longer allow access to the Admin Area when files like <code>install.php</code>, <code>install.sql</code> or the <code>nucleus/upgrades</code> directory are still on the server.</li>\r
-                       <li>ADDED: <code>&lt;%member%&gt;</code> skinvar now also accepts <code>id</code> and <code>yourid</code> as parameter</li>\r
-                       <li>FIXED: JavaScript toolbar works better in Gecko-based browsers (Mozilla Firebird/Netscape 7)</li>\r
-                       <li>ADDED: <code>supportsFeature</code> method to plugin interface</li>\r
-                       <li>FIXED: Destination URL parameter on <code>membermailform</code> skinvar didn't work</li>\r
-                       <li>FIXED: Encoding of the window title of popup images (Osamu Higuchi)</li>\r
-                       <li>FIXED: Link at end of install sequence was pointing to install.php</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v2.0 Final (April 3, 2003)</b>\r
-               <ul>\r
-                       <li>FIXED: renamed the <code>xmlrpc_encode</code> and <code>xmlrpc_decode</code> methods in <code>xmlrpc.inc.php</code>, avoiding naming conflicts on some PHP configurations that are compiled with XMLRPC support</li>\r
-                       <li>FIXED: restore did not work on some PHP configurations, and did not correctly recognize <code>application/x-gzip</code> encoding type</li>\r
-                       <li>ADDED: <code>if(onteam[,blogname])</code> skinvar</li>\r
-                       <li>ADDED: automatic warning when headers have already been sent, with filename and linenumber included</li>\r
-                       <li>ADDED: About 40 extra plugin events</li>\r
-                       <li>ADDED: Made <code>&lt;%member%&gt;</code> available on all skin parts, and added <em>yourname</em>, <em>yoururl</em>, ... parameters</li>\r
-                       <li>FIXED: plugin loading is now a little more robust (non-fatal errors in the plugin PHP file used to cause a fatal error afterwards)</li>\r
-                       <li>ADDED: extra variables inside popup code/image code/media code template-parts: <code>width</code>, <code>height</code>, <code>link</code> and <code>text</code></li>\r
-                       <li>ADDED: Extra optional parameter for <code>image</code> skinvar, indicating which information to insert on the page</li>\r
-                       <li>CHANGED: Marked the <code>imagetext</code> skinvar as deprecated (use <code>image(caption)</code> instead)</li>\r
-                       <li>CHANGED: Marked the <code>ifcat</code> skinvar as deprecated (use <code>if(category)</code> instead)</li>\r
-                       <li>CHANGED: Marked the <code>vars</code> skinvar as deprecated (if anyone needs a hidden 'itemid' formfield [are there?], the itemid skinvar can be used instead)</li>\r
-                       <li>ADDED: <code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code> method in plugin interface</li>\r
-                       <li>CHANGED: comments are now also parsed using the same method as skins and items, allowing plugins, includes and more to be used there as well</li>\r
-                       <li>FIXED: guests cannot longer place 'fake' comments (making it look as if a regsitered memeber made the comment)</li>\r
-                       <li>FIXED: item contents is no longer trimmed</li>\r
-                       <li>FIXED: Made install script look less messy</li>\r
-                       <li>ADDED: <code>selectItem($id)</code> method</li>\r
-                       <li>FIXED: Unable to disable comments through 'edit item'</li>\r
-                       <li>ADDED: Plugins: EditItemFormExtras event gets itemid as separate parameter</li>\r
-                       <li>FIXED: missing ; in presented new blog code</li>\r
-                       <li>FIXED: PHP 4.0.6 didn't show item/member/... lists on admin area (PHP bug)</li>\r
-                       <li>ADDED: Plugin Hook: BlogSettingsFormExtras</li>\r
-                       <li>FIXED: &lt;%if(blogsetting,bcomments,1)%&gt; skinvars were not working</li>\r
-                       <li>ADDED: &lt;%if(loggedin)%&gt; skinvars were not working</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v2.0 beta (January 18, 2003)</b>\r
-               <ul>\r
-                       <li>FIXED: Highlighted text no longer has &lt;!--h--&gt; in it</li>\r
-                       <li>ADDED; Plugin hook: PostAuthentication</li>\r
-                       <li>ADDED: Plugin hooks PreAddItemForm, AddItemFormExtras and EditItemFormExtras</li>\r
-                       <li>CHANGED: Notifications emails (new comment, etc) are not sent to the person causing the notification (comment author)</li>\r
-                       <li>ADDED: plugins can access global variables <code>$currentTemplateName</code> and <code>$currentSkinName</code></li>\r
-                       <li>CHANGED: Spaces after commas in &lt;%image%&gt;, &lt;%popup%&gt;, &lt;%media%&gt; </li>\r
-                       <li>FIXED: HTML to Text conversion didn't always work</li>\r
-                       <li>ADDED: &lt;%date%&gt; templatevars extras (rfc822 &amp; rfc822GMT) (Xiffy)</li>\r
-                       <li>ADDED: ranges for &lt;%blog(...)%&gt; and &lt;%otherblog(...)%&gt; skinvars</li>\r
-                       <li>ADDED: templatevars &lt;%author(email)%&gt;, &lt;%author(url)%&gt; and &lt;%author(id)%&lt;</li>\r
-                       <li>CHANGED: Added info on new weblog creation (split up creation process into two steps)</li>\r
-                       <li>FIXED: Login screen after email address change did not work correctly</li>\r
-                       <li>ADDED: Plugin Hook: PrePluginOptionsEdit</li>\r
-                       <li>ADDED: Added a getMinNucleusVersion method to the plugin interface</li>\r
-                       <li>ADDED: PostPluginOptionsUpdate plugin event</li>\r
-                       <li>ADDED: Javascript toolbar: align left/center/right buttons (Irmo)</li>\r
-                       <li>ADDED: RSD skin/template</li>\r
-                       <li>ADDED: 'Fancy' URLs option &amp; support files. Allows for URLs like http://hostname/archive/1/2003-01-05 instead of http://hostname/index.php?blogid=1&amp;archive=2003-01-05</li>\r
-                       <li>ADDED: RSS 2.0 skin/template (Xiffy)</li>\r
-                       <li>ADDED: skinvar &lt;%skinname%&gt;</li>\r
-                       <li>ADDED: if/else in skins. parameters for 'if' are currently 'category' (=ifcat) or 'blogsetting/settingname' (settingname = columnname from database...)</li>\r
-                       <li>ADDED: Etag/If-None-Match support for xml-rss.php (needs some more work)</li>\r
-                       <li>FIXED: more friendly bookmarklet for Opera 6 users (all tabs are visible, editing through bookmarklet works)</li>\r
-                       <li>ADDED: on edit item, the post time can be changed (only if 'allow post to past' is enabled)</li>\r
-                       <li>ADDED: 'Allow Post to Past' option on weblog basis</li>\r
-                       <li>ADDED: IncludeMode and IncludePrefix settings in nucleus_skin_desc + interface to change these settings + user IncludePrefix while parsing includes.</li>\r
-                       <li>CHANGED: nucleusbutton skinvar now takes into account IncludeMode</li>\r
-                       <li>CHANGED: btimeoffset column is now DECIMAL instead of INT </li>\r
-                       <li>CHANGED: took away actionurl parameters from commentform and membermailform skinvars (it's a global setting now)</li>\r
-                       <li>ADDED: &lt;%set(property,value)%&lt; skin/template-var to set global parser properties. Only one option defined so far: 'IncludeMode'. Can be 'skindir' or 'normal' and affects the include/parseinclude/phpinclude skin/templatevars</li>\r
-                       <li>ADDED: &lt;%skinfile(filename)%&gt; skinvar (to be used on imported skins)</li>\r
-                       <li>ADDED: $CONF['SkinsURL'] and $DIR_SKINS (config.php)</li>\r
-                       <li>CHANGED: friendly names used on skin edit (instead of 'index', 'item' etc)</li>\r
-                       <li>ADDED: action url to global settings (action.php location)</li>\r
-                       <li>ADDED: $desturl and $actionurl parameters on membermailform skinvar</li>\r
-                       <li>ADDED: skin import/export class</li>\r
-                       <li>CHANGED: media library now works with multiple collections, of which one is private to the site member, and the rest is globally shared.</li>\r
-                       <li>CHANGED: base skin can now be changed (it's now a config setting). This skin is ONLY used in two cased: when all else fails, and when the selected skin does not have contents for the needed skinpart</li>\r
-                       <li>CHANGED: positive and negative karma votes are now kept separately, since that works better and is more flexible. The &lt;%karma%&gt; templatevar received an extra parameter to select which information to show</li>\r
-                       <li>ADDED: skinvars archivenext/archiveprev/archivetype</li>\r
-                       <li>CHANGED: skinvars nextlink/prevlink now also work on archive skins</li>\r
-                       <li>CHANGED: move item now also allows to choose a category</li>\r
-                       <li>CHANGED: new items can be added to other blogs also now</li>\r
-                       <li>FIXED: archivedate skinvar displaying wrong date</li>\r
-                       <li>FIXED: serverVar function was not working when using vars4.0.6.php</li>\r
-                       <li>ADDED: now also listing category in itemlist</li>\r
-                       <li>CHANGED: Admin Area now uses the Site Name instead of Nucleus</li>\r
-                       <li>CHANGED: admin.css and admin area: corrected h1, h2, h3 depth levels</li>\r
-                       <li>ADDED: batch operations</li>\r
-                       <li>FIXED: when language settings are changed, the new language is used immediately (only for global settings, not for member settings)</li>\r
-                       <li>CHANGED: archivelist query now uses the  SUBSTRING MySQL function instead of the YEAR/DAYOFMONTH/MONTH functions (caused trouble for some people)</li>\r
-                       <li>ADDED: maxlength attributes on forms</li>\r
-                       <li>CHANGED: commentlists: placed time/author in same table cell </li>\r
-                       <li>ADDED: extra convertor for Blogger blogs that use YACCS comments (exportable in CAIF format)</li>\r
-                       <li>FIXED: some possible security issues (thanks to Morgan Tocker)</li>\r
-                       <li>FIXED: shortening of strings does not corrupt HTML entities anymore (e.g. in RSS-feeds)</li>\r
-                       <li>CHANGED: links in comments are now handled differently. Part of the URL is now displayed instead of just http://.../</li>\r
-                       <li>ADDED: Opera version of bookmarklet</li>\r
-                       <li>ADDED: selectLanguage() function to force the use of a certain language file</li>\r
-                       <li>REMOVED: there was a plugin event AddItem which was actually not needed at all (wasn't included in the documentation too)</li>\r
-                       <li>ADDED: archivelist skinvars now takes an extra limit-parameter</li>\r
-                       <li>CHANGED: moved all forms which can be included through skinvar out of SKIN.php and into .template files in the nucleus/forms directory.</li>\r
-                       <li>FIXED: 'clone skin' did not copy contenttype</li>\r
-                       <li>FIXED: Errors in XML-RSS template (upgrading users might need to change this manually or by importing an updated skin)</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v1.55 (August 26, 2002)</b>\r
-               <ul>\r
-                       <li>ADDED: &lt;%archivedaylist%&gt; and &lt;%otherarchivedaylist%&gt; skinvars (to show archives by day instead of by month)</li>\r
-                       <li>FIXED: PHP error on createAccount through action.php</li>\r
-                       <li>ADDED: new parseFile-method available in index.php. Allows to parse non-blog pages with skinvars</li>\r
-                       <li>FIXED: editing comments with hyperreffed links</li>\r
-                       <li>ADDED: 'delete item' option on edit item, plus 'delete item' confirmation screens (also on bookmarklet)</li>\r
-                       <li>CHANGED: on multi-blog systems, the admin now only gets to see the blogs for which (s)he is on the team. All other blogs are available through an 'show all blogs...' link</li>\r
-                       <li>FIXED: link to recent items after weblogs.com ping was broken</li>\r
-                       <li>CHANGED: plugin event call 'PreAddComment' moved to immediately before the item is added to the database</li>\r
-                       <li>FIXED: tab-orders were not correct on multiple admin pages</li>\r
-                       <li>ADDED: &lt;%itemid%&gt; and &lt;%itemlink%&gt; available on item pages</li>\r
-                       <li>FIXED: install.php now works when the PHP option magic_quotes_runtime is enabled</li>\r
-                       <li>CHANGED: install.php gives an error when PHP is compiled without MySQL installed</li>\r
-                       <li>CHANGED: install.php automatically fills the 'mysql hostname' field when PHP option mysql.default_host is set.</li>\r
-                       <li>FIXED: greymatter convert was not putting a reference to the weblog in the comments table.</li>\r
-                       <li>CHANGED: added some linebreaks in the login screen of the admin area</li>\r
-                       <li>ADDED: new plugin events: PreAddItem, PreUpdateItem, PrepareItemForEdit, PreUpdateComment, PrepareCommentForEdit</li>\r
-                       <li>ADDED: JavaScript to hide empty fields when editing templates</li>\r
-                       <li>CHANGED: Admin area CSS now uses relative fontsizes and fontsize-keywords (also added trick to make IE5 get it right)</li>\r
-                       <li>FIXED: backup was broken :(</li>\r
-                       <li>CHANGED: replaced an SQL query that caused problems (NATURAL JOIN replaced by implicit inner join)</li>\r
-                       <li>ADDED: &lt;%self%&gt; available in categorylist templates</li>\r
-                       <li>ADDED: &lt;%itemtitle%&gt; skinvar available on item-skins</li>\r
-                       <li>FIXED: editing a comment you made in a blog that's not your own resulted in a 'disallowed action' error </li>\r
-                       <li>FIXED: plugin was listed twice in the list of available skinvars</li>\r
-                       <li>ADDED: &lt;%archivedate%&gt; skinvar on archive skins</li>\r
-                       <li>FIXED: admininstrators could not edit details of other members</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v1.5 (August 13, 2002)</b>\r
-               <ul>\r
-                       <li>ADDED: Introducing plugins (define your own skinvars and templatevars, add event listeners, ...)</li>\r
-                       <li>CHANGED: simpler and more accessible default templates/skins</li>\r
-                       <li>FIXED: GreyMatter convert now works when the <tt>asp_tags</tt> option in PHP is enabled</li>\r
-                       <li>ADDED: title and authorName fields in Blogger API getRecentItems call</li>\r
-                       <li>ADDED: HTML label tags for radio buttons and checkboxes (this way you can click anywhere on the text instead of only on the radio button/checkbox itself)</li>\r
-                       <li>FIXED: deleting a comment you made in a blog that's not your own resulted in a 'disallowed action' error (thanks moraes)</li>\r
-                       <li>CHANGED: the place where comments are inserted can now be chosen from within the template. Just include &lt;%comments%&gt; in the ITEM templatepart whereever you want the comment count (or comments) to appear. In upgrading, the old ordening is imitated by adding '&lt;%comments%&gt;' to the end of the ITEM template part.</li>\r
-                       <li>CHANGED: now trimming parameters that were passed to skinvars/templatevars</li>\r
-                       <li>ADDED: &lt;%referer%&gt; skinvar, which inserts HTTP_REFERER</li>\r
-                       <li>ADDED: '- New Category -' can now be chosen on add/edit item (only for blog admins). A new category is then created, and the chance is given to edit the category details.</li>\r
-                       <li>ADDED: optional attributes for templatevars &lt;%time(format)%&gt;, &lt;%date(format)%&gt;, &lt;%syndicate_title(maxLength)%&gt;, &lt;%syndicate_description(maxLength)%&gt;</li>\r
-                       <li>ADDED: new user registrations show up in action log</li>\r
-                       <li>ADDED: new option to allow non-members to send messages (the membermailform)</li>\r
-                       <li>FIXED: when an admin edits an item written by someone else, and uploads an image, the image is now saved under the original authors media directory</li>\r
-                       <li>CHANGED: &lt;%author(realname)%&gt; in item templates now inserts the real name of the author</li>\r
-                       <li>FIXED: install.php now works when magic_quotes_gpc is disabled</li>\r
-                       <li>ADDED: New settings: PluginURL, MaxUploadSize, ProtectMemNames</li>\r
-                       <li>ADDED: hotlinks to the defined skinparts from the skin overview (also gives a good view on which skinparts have been defined and which have not been defined)</li>\r
-                       <li>ADDED: &lt;%smartbody%&gt; for item templates, which chooses between showing the body and extended part, based on the extended part being empty or not. Using this, the body text can be your full text, and the extended part could be seen as an 'introduction', which you want to show on the front page. (request from smarko)</li>\r
-                       <li>ADDED: &lt;%edit%&gt;, &lt;%editlink%&gt; and &lt;%editpopupcode%&gt; can be used in item templates (and in items themselves) to insert a link  to where the item can be edited/deleted. (default setting uses bookmarklet to do this). The edit links only get shown when the user is allowed to edit a certain item (blog admin or item author). </li>\r
-                       <li>FIXED: bookmarklet now works correctly when magic_quotes_gpc and register_globals are turned off </li>\r
-                       <li>ADDED: PHP and MySQL versions are listed during the installation proces, with warnings when those version numbers are lower than what Nucleus requires</li>\r
-                       <li>CHANGED: item parsing method changed, so it's more easily extensible. plugin, parsedinclude, include and phpinclude are now also allowed in some templates. Inside items, there are also 3 allowed variables: 'image', 'media' and 'popup'</li>\r
-                       <li>FIXED: image popups didn't work with register_globals disabled</li>\r
-                       <li>CHANGED: renamed method: getBlogidFromName -> getBlogIDFromName (consistency)</li>\r
-                       <li>ADDED: method selectCategory($name)</li>\r
-                       <li>FIXED: Nucleus now handles data correctly when magic_quotes_gpc is disabled (solves some problems with template editing)</li>\r
-                       <li>CHANGED: categories in selection box are now sorted by name (tip from katatonik)</li>\r
-                       <li>FIXED: Not all tables got exported on backup :( (thanks Xiffy!)</li>\r
-                       <li>FIXED: add item form didn't handle keyboard shortcuts correctly (thanks Hop!)</li>\r
-                       <li>CHANGED: 'remember me' checkbox is now checked when the information was remembered from before (this way, the cookie gets set again and does not expire)</li>\r
-                       <li>FIXED: after a category got selected through skinvar parameters, skinvars applying to all categories also got applied only to the last category that was selected (thanks Xiffy!)</li>\r
-                       <li>ADDED: table nucleus_comment got an extra cblog column (redundant) to allow to find the blog that goes with a comment more easily.</li>\r
-                       <li>FIXED: email address checking routine (false email addresses like foo@@bar.com were allowed)</li>\r
-                       <li>CHANGED: New installations now get a robots.txt file (disallows karma voting/commenting/... by bots)</li>\r
-                       <li>CHANGED: JavaScript preview now shows image outlines and popup image links</li>\r
-                       <li>CHANGED: searchform now available on ALL skintypes</li>\r
-                       <li>FIXED: headers in globalfunctions/SKIN.php now sent _only_ when no other headers have been sent before. Should make including easier.</li>\r
-                       <li>CHANGED: RSS-auto-discovery tag in default skin</li>\r
-                       <li>CHANGED: formfields got labels (accessibility issue). Also access keys have been defined: L for login, 4 for Search (on windows, actions keys are used together with the ALT key)</li>\r
-                       <li>ADDED: left and right box buttons on JS toolbar</li>\r
-                       <li>FIXED: truncated entry when login is requested after adding (data didn't get passed on correctly)</li>\r
-                       <li>ADDED: &lt;%authorlink%&gt; to template vars for item templates (this one can take catid into account)</li>\r
-                       <li>ADDED: $CONF['Self'] => $CONF['ItemURL'], $CONF['IndexURL'], ... to optionally allow people to use different files for items/archives/...</li>\r
-                       <li>CHANGED: Now using mysql_fetch_assoc instead of mysql_fetch_array (efficiency)</li>\r
-                       <li>CHANGED: The &lt;%searchresults%&gt; and &lt;%othersearchresults%&gt; skintags got an extra parameter to limit the number of results (defaults to 50)</li>\r
-                       <li>FIXED: doError did not take into account chosen skin</li>\r
-                       <li>FIXED: Commentform not shown anymore for closed items (a message is shown instead)</li>\r
-                       <li>CHANGED: Removed all unneccessary javascript: links (deprecated)</li>\r
-                       <li>CHANGED: Media: Procentual width and height values are now allowed in image and inline constructs (e.g. &lt;%image(bla.gif|50%|50%|lala)%&gt;)</li>\r
-                       <li>FIXED: Blogger API: getPost wasn't returning category name</li>\r
-                       <li>FIXED: Blogger API: getRecentPosts wasn't converting linebreaks</li>\r
-                       <li>FIXED: surpressed warning on mysql_close</li>\r
-                       <li>FIXED: install-script now also accepts email addresses that contain uppercase characters</li>\r
-                       <li>FIXED: imported items did not show up in the weblog</li>\r
-                       <li>FIXED: blogger api &lt;title&gt; thingie didn't work</li>\r
-                       <li>CHANGED: Made all uploaded files be chmodded to 644</li>\r
-                       <li>FIXED: template cloning didn't clone all parts</li>\r
-                       <li>FIXED: After new user registration, there was a redirect to the members url (use 'desturl' now to indicate destination url)</li>\r
-                       <li>...and a lot of small changes</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v1.1 (April 30, 2002)</b>\r
-               <ul>\r
-                       <li>Started assuming that at least PHP 4.0.5 is available. (for older PHP versions, some small code-changes should do the trick)</li>\r
-                       <li>Added bookmarklets for Mac/IE5 users and Mozilla. Also, made the title of the page also show up in the title field of the new item. Makes more sense. <small>(thanks to <a href="http://www.35mm.org">Ricardo Lamego</a>)</small></li>\r
-                       <li>Made the <a href="http://www.php.net/manual/en/language.variables.predefined.php" title="see PHP doc">predefined PHP variables</a> available in scripts called through &lt;%phpinclude(..)%&gt; <small>(thanks to <a href="http://www.polskaya.be/">Polskaya</a> for noticing the problem)</small></li>\r
-                       <li>Fixed: &lt;%additemform%&gt; and &lt;%nucleusbutton%&gt; didn't work when admin area was not in a dir named 'nucleus'</li>\r
-                       <li>Added: &lt;%sitevar(adminurl)%&gt; and shortcut &lt;%adminurl%&gt; to include the URL of the admin area</li>\r
-                       <li>Changed all references to nucleus.demuynck.org into references to <a href="http://nucleuscms.org/">nucleuscms.org</a></li>\r
-                       <li>Extra settings: cookie domain, cookie path, secure cookie (for https)</li>\r
-                       <li>Instead of stripping tags in comments, &lt; and &gt; are now replaced by their entities (&amp;lt; and &amp;gt;). This way, greater than and lower than signs can be used in comments <small>(inspiration by <a href="http://www.adfundum.be/">Steven Verbruggen</a>)</small></li>\r
-                       <li>Added charset to language files, so international character sets can be used when needed <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=56">forum</a>)</small></li>\r
-                       <li>Added an extra content-type attribute to skins, so the output type can be set correctly by Nucleus</li>\r
-                       <li>Removed the 'headlines' skin and templates. Don't want new users to get too confused.</li>\r
-                       <li>Notification emails now also get the senders display name</li>\r
-                       <li>All errors now handled by doError method in globalfunctions.php (makes it easier when you want to use your own error handler instead of the error skin)</li>\r
-                       <li>Site-members can now override the default site-language setting for the pages they visit</li>\r
-                       <li>Added skinvars &lt;%otherarchive%&gt; and &lt;%othersearchresults%&gt; for use on archive/search pages.</li>\r
-                       <li>Skinvar &lt;%searchform%&gt; now takes an optional parameter: blogname (for which you want a search form)</li>\r
-                       <li>Introducing categories! (new settings; new skinvars category, categorylist and ifcat; new template vars &lt;%category%&gt;, &lt;%catid%&gt; and &lt;%categorylink%&gt;; new optional category params for skinvars blog, otherblog, archive, otherarchive, archivelist, otherarchivelist)</li>\r
-                       <li>Fixed: error skin didn't get copied on skin cloning</li>\r
-                       <li>Even more new skinvars to make skinning easier: &lt;%todaylink%&gt;, &lt;%archivelink%&gt;, &lt;%prevlink%&gt; and &lt;%nextlink%&gt; <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=67">forum</a>)</small></li>\r
-                       <li>Fixed: The install script was giving warnings about uninitialized variables on some PHP configurations</li>\r
-                       <li>Moved version history to separate file</li>\r
-                       <li>Made upgrade scripts a little more robust and more verbose</li>\r
-                       <li>XML-RPC: <a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a> support</li>\r
-                       <li>XML-RPC: &lt;title&gt; and &lt;category&gt; tags can now be used with the Blogger API (similar to b2)</li>\r
-                       <li>Fixed problem with create account <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=92">forum</a>)</small></li>\r
-                       <li>Made it so Nucleus still works when using PHP &gt;4.1.0 with register_globals turned off, which is the default setting for new installations <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=95">forum</a>)</small></li>\r
-                       <li>Media library: popup now requests login when needed</li>\r
-                       <li>Media library: option to auto-prefix uploaded files with date (turned on by default)</li>\r
-                       <li>Backup/Restore: backup file name now has date + nucleus.sql renamed to install.sql + extra "I'm sure"-checkbox on restore to avoid errors <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=100">forum</a>)</small></li>\r
-                       <li>Javascript toolbar: simpler version available that works in Mozilla</li>\r
-                       <li>Fixed: Closed items don't show 'no comments' link anymore <small>(forum)</small></li>\r
-                       <li>Fixed: Drafts items don't result in 'January 1970' entries in archivelist</li>\r
-                       <li>Fixed: Added &lt;image&gt; tag to xmlrss skin for new installs. It's required. (defaults to a nucleus logo, up to you to change it)</li>\r
-                       <li>Fixed: Error with restore (content with semicolons in it would not get restored)</li>\r
-                       <li>Added: Extra notification options</li>\r
-                       <li>Archives can now also be accessed by day, and an extra daylink template var is available in date headers</li>\r
-                       <li>Fixes in default skin</li>\r
-                       <li>As always, lots of small fixes &amp; code rewrites</li>\r
-                       <li>\r
-                               Changes (additions to and <del>deletions</del> from) language file:\r
-                               <ul>\r
-                                       <li>_SETTINGS_COOKIES_TITLE</li>\r
-                                       <li>_SETTINGS_COOKIEDOMAIN</li>\r
-                                       <li>_SETTINGS_COOKIEPATH</li>\r
-                                       <li>_SETTINGS_COOKIESECURE</li>\r
-                                       <li>_SKIN_UPDATED</li>\r
-                                       <li>_TEMPLATE_UPDATED</li>\r
-                                       <li>_CHARSET</li>\r
-                                       <li>_MEMBERS_DEFLANG</li>\r
-                                       <li>_MEMBERS_USESITELANG</li>\r
-                                       <li>_ADD_CATEGORY</li>\r
-                                       <li>_ADD_DRAFTNFUTURE</li>\r
-                                       <li>_ERROR_NOSUCHLANGUAGE</li>\r
-                                       <li>_ERROR_NOSUCHCATEGORY</li>\r
-                                       <li>_ERROR_DELETEDEFCATEGORY</li>\r
-                                       <li>_ERROR_DELETELASTCATEGORY</li>\r
-                                       <li>_ERROR_BADCATEGORYNAME</li>\r
-                                       <li>_ERROR_DUPCATEGORYNAME</li>\r
-                                       <li>_CONFIRMTXT_CATEGORY</li>\r
-                                       <li>_DELETED_CATEGORY</li>\r
-                                       <li>_LISTS_TYPE</li>\r
-                                       <li>_SKIN_TYPE</li>\r
-                                       <li>_YOURSITE</li>\r
-                                       <li><del>_LIST_COMMENT_HOST</del></li>\r
-                                       <li>_SETTINGS_MEDIA</li>\r
-                                       <li>_SETTINGS_MEDIAPREFIX</li>\r
-                                       <li>_SETTINGS_MEMBERS</li>\r
-                                       <li>_LOGIN_FORGOT</li>\r
-                                       <li>_TEMPLATE_CATEGORYLIST</li>\r
-                                       <li>_TEMPLATE_CATHEADER</li>\r
-                                       <li>_TEMPLATE_CATITEM</li>\r
-                                       <li>_TEMPLATE_CATFOOTER</li>\r
-                                       <li>_EBLOG_DEFCAT</li>\r
-                                       <li>_EBLOG_CAT_TITLE</li>\r
-                                       <li>_EBLOG_CAT_NAME</li>\r
-                                       <li>_EBLOG_CAT_DESC</li>\r
-                                       <li>_EBLOG_CAT_CREATE</li>\r
-                                       <li>_EBLOG_CAT_UPDATE</li>\r
-                                       <li>_EBLOG_CAT_UPDATE_BTN</li>\r
-                                       <li>_EBLOG_NOTIFY_ON</li>\r
-                                       <li>_EBLOG_NOTIFY_COMMENT</li>\r
-                                       <li>_EBLOG_NOTIFY_KARMA</li>\r
-                                       <li>_EBLOG_NOTIFY_ITEM</li>\r
-\r
-                               </ul>\r
-                       </li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v1.0 (March 6, 2002)</b>\r
-               <ul>\r
-                       <li>Fixed: width &amp; height of &lt;%image()%&gt; construct</li>\r
-                       <li>Changed: windows in popup windows don't have a white border anymore <small>(<a href="http://www.nucleuscms.org/forum/viewtopic.php?t=3">see forum</a>)</small>\r
-                       </li>\r
-                       <li>Fixed: bug with single quotes in image/popup constructs <small>(<a href="http://www.nucleuscms.org/index.php?itemid=1812">see message</a>)</small></li>\r
-                       <li>Fixed: fatal error in 'send password' method <small>(thanks to <a href="http://modder.org/HANK!">HANK!</a>)</small></li>\r
-                       <li>Fixed: removed some illegal characters from code documentation since they caused parse errors on some systems <small>(thanks to Martin Belle-Isle and Rodrigo Moraes; see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=5">forum</a> for extra details)</small></li>\r
-                       <li>Refined: added a note about spaces to the install-script <small>(see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=14">forum</a>)</small></li>\r
-                       <li>Added: donate-link on admin page <small>(hey! it's free, I have the right to bug you with this sort of things ;-)</small></li>\r
-                       <li>Changed: it's not possible anymore to create a draft future item. That didn't make sense. You can now choose whether you want to publish a draft item either immediately or in the future when editing the item</li>\r
-                       <li>Changed: made it so that the 'disable comments' choice is not offered anymore on add/edit item form when commenting is disabled in the blogsettings</li>\r
-                       <li>Fixed: where possible, redirection after commenting is now done to the correct file (instead of index.php)</li>\r
-                       <li>Fixed: bug where only superadmins could change usernames/passwords, even if the corresponding option in the settings was set <small>(thx <a href="http://www.sneppah.be/">slekke</a>)</small></li>\r
-                       <li>Added: allowed variables for a skinpart now shown when editing skin</li>\r
-                       <li>Wrote new re-usable parser that does skin parsing in a way that is more flexible and less prone to errors.</li>\r
-                       <li>Changed: passwords now stored in encrypted form</li>\r
-                       <li>Optimizing: optimized some queries</li>\r
-                       <li>Added: &lt;%otherarchivelist(blogname,templatename)%&gt; in skins</li>\r
-                       <li>Added: Blogger Convert</li>\r
-                       <li>Added: "shared computer" checkbox on login. Checking this box will make your cookie expire at the end of the session (instead of taking the global site setting) <small>(see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=33">forum</a>)</small></li>\r
-                       <li>Added: "remember me" checkbox on comment forms for non-members</li>\r
-                       <li>Most language related things are now moved to language files. Now you can roll your own :)</li>\r
-                       <li>Added: optional parameters rows/cols in membermailform skinvar</li>\r
-                       <li>Added: skinvars: &lt;%phpinclude(file)%&gt; and &lt;%parsedinclude(file)%&gt;. &lt;%plugin%&gt; is now deprecated (in favor of phpinclude). The plugins directory should also not be used anymore (it'll get another function in a later version)</li>\r
-                       <li>Added: skinvar &lt;%self%&gt; which includes the filename of the currently executing script (index.php or whatever is sen in $CONF['Self'])</li>\r
-                       <li>Automatich hyperlink detection in comments now also recognizes comma's</li>\r
-                       <li>Added: selectSkin('name') and selectBlog('name') functions available for use in index.php</li>\r
-                       <li>Added: Small <a href="tips.html#backups">restore-guide</a> for the worst case scenario</li>\r
-                       <li>Added: A toolbar with markup buttons on add/edit item, plus option to disable it in the settings. When Mozilla is used, Nucleus tries to disable it automatically (since it doesn't work there anyway)</li>\r
-                       <li>Fixed: media were not expanded in extended text <small>(thx <a href="http://www.elrado.nl/">raoul</a>)</small></li>\r
-                       <li>Changed javascript code of popup help so it works better in Mozilla <small>(thanks to <a href="http://idontsmoke.co.uk/">Paul Sowden</a>)</small></li>\r
-                       <li>UI improvements</li>\r
-                       <li>New default skin (the old one was just plain ugly :-)</li>\r
-                       <li>Small bug-fixes</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.96 (December 13, 2001)</b>\r
-               <ul>\r
-                       <li>Added: add-item-preview now also in admin area</li>\r
-                       <li>Added: action log</li>\r
-                       <li>Added: media library and file-upload</li>\r
-                       <li>Added: karma votes</li>\r
-                       <li>Added: Option to disable loginname/password changing by members</li>\r
-                       <li>Added: simple popup windows for image viewing</li>\r
-                       <li>Fixed: E-mail address validation check does not longer require addresses to be all lowercase</li>\r
-                       <li>Fixed: magic_quotes are now explicitly disabled, solving escaping problems (thanks to <a href="http://www.aroundmyroom.com/">Dennis Slagers</a>)</li>\r
-                       <li>Fixed: error handling when pinging weblogs.com</li>\r
-                       <li>Added: now also storing IP with comments (next to hostname)</li>\r
-                       <li>Added: IP banlist (to prevent nasty people from commenting/voting)</li>\r
-                       <li>Changed: Notification mails now include the item's title</li>\r
-                       <li>Changed: Weblogs can only be deleted by super-admins</li>\r
-                       <li>Changed: <a href="http://xmlrpc.usefulinc.com/">XML-RPC for PHP</a> v1.02</li>\r
-                       <li>Added: Small <a href="tips.html#filepermissions">guide to changing/setting filepermission</a> in docs</li>\r
-                       <li>Changed: Upgrade and conversion scripts now get packed separately</li>\r
-                       <li>Fixed: For error skins, the default skin is used now instead of 'default' (thanks to <a href="http://www.sneppah.be/">Slekke</a>)</li>\r
-                       <li>Fixed: The code to insert the Nucleus button was not XHTML (strict) compliant, oh my!</li>\r
-                       <li>GM Conversion: The conversion of {{popup}} now works correctly (and copies image files to the media dir)</li>\r
-                       <li>Fixed: a minor bug in XML-RPC call blogger.getUsersBlogs</li>\r
-                       <li>Fixed: a major bug in XML-RPC call blogger.getRecentPosts</li>\r
-                       <li>Fixed: problem concerning template editing and the XML-RPC call blogger.setTemplate</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.95 (October 10, 2001)</b>\r
-               <ul>\r
-                       <li>Added: per-blog setting to enable/disable line break conversion</li>\r
-                       <li>Added: per-blog setting to send a ping to Userland (weblogs.com) when you update your blog. This way, you'll be able to end up in the weblogs.com update-list</li>\r
-                       <li>Switched to v1.01 of the XML-RPC for PHP libs (was v1.0)</li>\r
-                       <li>Upgrade scripts are available (for upgrade from versions &lt; 0.95 to v0.95)</li>\r
-                       <li>Added: &lt;%previtem%&gt; and &lt;%nextitem%&gt; can be used in item-skins</li>\r
-                       <li>Some changes in the default database dump</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.94 (September 27, 2001)</b>\r
-               <ul>\r
-                       <li>Changed: 'Add Item' in admin-area now redirects to blog url (if available)</li>\r
-                       <li>Changed: <i>headlines.php</i> and <i>xml-rss.php</i> adapted to behave better in disabled-site situations</li>\r
-                       <li>Changed: &lt;%userlink%&gt; got smarter in recognizing e-mail addresses</li>\r
-                       <li>Added: tabindices in forms to make traversal with the TAB-button more natural</li>\r
-                       <li>Fixed: bookmarklet login did not pass data correctly</li>\r
-                       <li>Added: JavaScript to open links in new window (javascrip/opennew.js)</li>\r
-                       <li>Added: &lt;%year%&gt; and &lt;%month%&gt; in templates for archivelist-items</li>\r
-                       <li>CSS lightly changed because IE6 is a little bit more picky (which is actually a good thing)</li>\r
-                       <li>Fixed: popup code (JavaScript) for help-windows (didn't work ok in IE6)</li>\r
-                       <li>Added: Description or summary of what you are going to delete on the confirmation screens</li>\r
-                       <li>Added: Workaround (for advanced users) to get your archives into search engines (on tips &amp; suggestions page)</li>\r
-                       <li>Fixed: A bug in the XML-RPC server</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.93 (September 19, 2001)</b>\r
-               <ul>\r
-                       <li>Added: friendly error message on error with nucleusdir definition in config.php</li>\r
-                       <li>Changed: call_user_func instead of eval</li>\r
-                       <li>Added: forms included by skin variables now have class="formfield" and class="formbutton" arguments, to allow more control on the layout</li>\r
-                       <li>Created a <a href="tips.html">'Tips &amp; Suggestions'</a> page next to this manual</li>\r
-                       <li>XML-RPC API: added nucleus.addDatedItem method</li>\r
-                       <li>XML-RPC API: added nucleus.editItem method</li>\r
-                       <li>XML-RPC API: added nucleus.getRecentItems method</li>\r
-                       <li>XML-RPC API: added nucleus.getItem method</li>\r
-                       <li>Added documentation for XML-RPC nucleus.* methods</li>\r
-                       <li>Fix: Search results didn't show the amount of comments. Now they do.</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.92 (September 18, 2001)</b>\r
-               <ul>\r
-                       <li>GM conversion: {{linkmo and {{emailmo conversion now also works with PHP versions &lt; 4.0.4</li>\r
-                       <li>GM conversion: Fixed occasional JavaScript errors with {{linkmo and {{emailmo</li>\r
-                       <li>GM conversion: Fixed [read more] bug</li>\r
-                       <li>GM conversion: Extra intelligence in choosing URL or e-mail to save as userid for comments</li>\r
-                       <li>Added: ?archivelist can now be used without arguments to show the list of archives for the default weblog</li>\r
-                       <li>Fixed: Editing comments now does not allow the use of HTML anymore. The same checks as when adding new comments are performed on update attempts.</li>\r
-                       <li>Added: check to find out if update file is writable (on changing blogsettings and creating new weblog)</li>\r
-                       <li>Changed: hard returns in add item now get converted to line breaks (&lt;br /&gt;), Also, modified javascript code that handles preview to behave in the same way.</li>\r
-                       <li>Changed: &lt;%commentform%&gt; does not show user and userid fields for logged in users. Instead, it shows the name of the user.</li>\r
-                       <li>GM Conversion: {{popup command now also translated (will be converted into a link to the image, not into a popup window!)</li>\r
-                       <li>Updated: default templates (?archivelist)</li>\r
-                       <li>Changed: E-mail Address Validation Check</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.91 (September 15, 2001)</b>\r
-               <ul>\r
-                       <li>Improved conversion for GreyMatter blogs. Special markup commands are now recognized. (thanks to <a href="http://www.elrado.nl/">Raoul</a> for pointing this out)</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.90 [beta 2 release] (September 14, 2001)</b>\r
-               <ul>\r
-                       <li>an install-script is now available, no more messing around in shells</li>\r
-                       <li>created default skins/templates for a release version</li>\r
-                       <li>option to store 'last visit' cookie and to use 'new' indication on items</li>\r
-                       <li>?archivelist=.. request can now also be used with a blogid instead of a blog shortname</li>\r
-                       <li>forgotten password reminder</li>\r
-                       <li>Bookmarklet can be used without being logged in. A login prompt is shown in that case.</li>\r
-                       <li>When not being logged in to the admin area, requested actions are now completed after passing login information. Before, you would always end up at the action overview after passing login information, and your requested action would have gone lost.</li>\r
-                       <li>Super-admins now have access to all blogs, even if they are not on the team</li>\r
-                       <li>Logtext passed to bookmarklet now gets &lt;br /&gt; added before each newline</li>\r
-                       <li>Added little JavaScript to prevent submitting form data twice</li>\r
-                       <li>Sample plugin: google referer check</li>\r
-                       <li>Conversion script to import GreyMatter blogs included</li>\r
-                       <li>Removed 'assign comment to member' feature</li>\r
-                       <li>Added toolbar to popup help windows (because of the back/forward buttons)</li>\r
-                       <li>Added &lt;%blogurl%&gt; variable for item templates</li>\r
-                       <li>bug-fixes</li>\r
-                       <li>small esthetic changes</li>\r
-                       <li>...</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.80 [beta 1 release] (September 2, 2001)</b>\r
-               <ul>\r
-                       <li>XML-RPC Interface implementing the blogger methods</li>\r
-                       <li>fixes and code-reorganisation</li>\r
-                       <li>popup-help on item pages</li>\r
-                       <li>bookmarklets/right click blogging</li>\r
-                       <li>the start of something that looks like documentation</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.70 [not released] (August 20, 2001)</b>\r
-               <ul>\r
-                       <li>mySQL instead of XML</li>\r
-                       <li>extensive admin area</li>\r
-                       <li>'member' concept, including blog teams/admins/...</li>\r
-                       <li>rewrote most of the code</li>\r
-                       <li>skin format slightly changed</li>\r
-                       <li>almost ready for public release :)</li>\r
-                       <li>adding items with instant preview (when viewing the weblog)</li>\r
-                       <li>LOCALE used for time/date notations.</li>\r
-               </ul>\r
-       </li>\r
-       <li>\r
-               <b>Nucleus v0.60 and earlier (since February 2001)</b>\r
-               <br />\r
-               no history (XML versions with limited functions)\r
-       </li>\r
-</ul>\r
-\r
-\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: history.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: history.html,v 1.3.2.3 2006/05/23 20:38:40 kimitake Exp $ -->
+       <title>Nucleus - History</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<h1>Version History</h1>
+
+<p>
+       <a href="index.html">Back to manual</a>
+</p>
+
+<ul>
+       <li>
+               <b>Nucleus v3.23 (May 23, 2006)</b>
+               <ul>
+                       <li>FIXED: Remote code execution vulnerability (reported by rgod).</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v3.22 (August 21, 2005)</b>
+               <ul>
+                       <li>FIXED: Major security vulnerability in the phpxmlrpc library.</li>
+                       <li>FIXED: New NP_SkinFiles version, fixing a minor security issue. (rakaz)</li>
+                       <li>CHANGED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=17">#17</a>): An errormessage is now displayed when logon through loginform failed. (karma)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=91">#91</a>): Initialize variables in MEMBER class (andrew)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=90">#90</a>): there was no plugin callback on member edits when the email address changed (andrew)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=90">#90</a>): when editing members other than yourself, you shouldn't be logged out (andrew)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=85">#85</a>): If both <code>itemid</code> and <code>catid</code> are specified in the URL, ignore <code>catid</code> if it doesn't match <code>itemid</code> (karma)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=49">#49</a>): 'name clashes' warning on skin import no longer displayed when no clashes detected (karma)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=67">#67</a>): Add resilency to upgrade scripts (Frankenstein)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=88">#88</a>): PHP5.1: "Fatal error: Only variables can be passed by reference" (karma)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=87">#87</a>): Translate &amp; -> &amp;amp; when links added via toolbar (karma)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=42">#42</a>): <code>formatDate</code> didn't always use the correct timezone (karma)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=43">#43</a>): Only load user language file when logged in (karma).</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=76">#76</a>): Disabling site blocked admin menu access (karma).</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=57">#57</a>): PostRegister event not fired from inside admin area.</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=58">#58</a>): images and popups were not in feeds. (karma)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=33">#33</a>): add item form invalid ticket error (admun)</li>
+                       <li>FIXED: Most buttons of the toolbar reset the scroll position of the textarea to the top in Firefox (leonbloy)</li>
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=64">#64</a>): Applications that use the metaweblogAPI, such as Ecto can now also access and edit the extended body (rakaz)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=63">#63</a>): _getArrayVal() always returned first element of array (rakaz)</li>
+                       <li>ADDED: add InitSkinParse event (rakaz)</li>
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=38">#38</a>): added alternative output for &lt;%title%&gt;, &lt;%itemtitle%&gt;, &lt;%previtemtitle%&gt; and &lt;%nextitemtitle%&gt; (rakaz)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=51">#51</a>): removed hardcoded charset declaration from the RSS 2 skin (rakaz)</li>
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=55">#55</a>): add &lt;%skinvar%&gt; variable that corresponds with _CHARSET (rakaz)</li>
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=24">#24</a>): add PostUpdateItem event (admun)</li>
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=48">#48</a>):  &lt;%if(nextitem)%&gt; and &lt;%nextlink%&gt; didn't use the timezone offset. (<a href="http://forum.nucleuscms.org/viewtopic.php?t=6371">Basic</a>)</li>
+                       <li>FIXED: "ADMIN.php line 5270" fatal error when plugin filename and plugin classname mismtach (Frankenstein)</li>
+                       <li>CHANGED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&id=16">#16</a>): Event <code>PreSkinItem</code> can now modify the skin contents; <code>PreComment</code> now knows the ItemID. (<a href="http://forum.nucleuscms.org/viewtopic.php?t=6266">suggested</a> by Andy)</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v3.21 (June 30, 2005)</b>
+               <ul>
+                       <li>FIXED: <a href="http://secunia.com/advisories/15852/">XML-RPC for PHP Unspecified PHP Code Execution Vulnerability</a></li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v3.2 (March 7, 2005)</b>
+               <ul>
+                       <li>ADDED: <a href="http://wiki.gednet.com/NPSkinFiles">NP_SkinFiles</a> plugin installed on full install</li>
+                       <li>FIXED: Installing plugins through install.php failed (karma)</li>
+                       <li>FIXED: whitespace at start/end got trimmed on skin edit/import (karma)</li>
+                       <li>ADDED: <code>title</code>-attributes on inline/popup images (moraes)</li>
+                       <li>ADDED: New default skin (Ivan, hcgtv, moraes, ...)</li>
+                       <li>ADDED: fr 1081569, <code>&lt;%if(category,catid,1)%&gt;</code> support (moraes)</li>
+                       <li>ADDED: support for <code>rel="nofollow"</code> (Rakaz)</li>
+                       <li>FIXED: bug 1058978, subscription list of updated plugin showed the updated subscriptions while the old subscription-list was still in the database. Nucleus now gives a warning (TeRanEX)</li>
+                       <li>FIXED: bug 1083959, closed site still allowed posting comments (karma)</li>
+                       <li>FIXED: bug 1083971, editing blog settings was not possible on PHP versions &lt; 4.2.0 (floatval) (karma)</li>
+                       <li>FIXED: In v3.15, deleting an item via the bookmarklet failed (karma)</li>
+                       <li>ADDED: Support for <code>&lt;%blogsetting(short)%&gt;</code>, as suggested by caw (karma)</li>
+                       <li>FIXED: Default skin used <code>application/xml+rss</code> instead of <code>application/rss+xml</code>, causing RSS autodiscovery to fail. (karma)</li>
+                       <li>FIXED: Moved more hardcoded text into language files</li>
+                       <li>FIXED: Made it so malicious users cannot trick a logged in site member/admin into visiting a specifically crafted URL that performs some admin area task. (karma).</li>
+                       <li>FIXED: bug 976777, weblogs.com was not ping when posting draft (admun)</li>
+                       <li>ADDED: bug 1008171, cookie-prefix (karma)</li>
+                       <li>CHANGED: bug 1008175, move <code>getTemplate</code> into <code>MANAGER</code> class + some other performance tweaks (karma)</li>
+                       <li>ADDED: add plugin dependency check (admun)</li>
+                       <li>CHANGED: Sending out activation links rather than new passwords on new accounts, forgotten passwords, etc. (karma)</li>
+                       <li>ADDED: Plugins can now make text- and textarea-optiontypes readonly (TeRanEX)</li>
+                       <li>CHANGED: new plugin event <code>FormExtra</code> (for use with <code>ValidateForm</code>) (karma)</li>
+                       <li>CHANGED: better error handling when commenting. Errors now displayed together with comment form. (karma)</li>
+                       <li>CHANGED: actions (commenting, membermail, ...) can be done using any entry point, not just through <code>action.php</code> (karma)</li>
+                       <li>CHANGED: Added <code>$</code><code>Id$</code> info in sourcefiles (karma)</li>
+                       <li>CHANGED: PrePluginOptionsEdit-event now has an <code>extra</code>-field which can be used to add option-specific code to the page (TeRanEX)</li>
+                       <li>ADDED: new event, PrePluginOptionsUpdate, can be used by plugins to verify/modify the new value for an option (TeRanEX)</li>
+                       <li>ADDED: Plugins can now provide a documentation page, which is shown inside the admin area (TeRanEX)</li>
+                       <li>ADDED: Plugins can now limit values for an option to be only numeric (<code>datatype=numerical</code>) (TeRanEX)</li>
+                       <li>ADDED: OptionTop-methods, to let a plugin retreive an array of the x-highest (or lowest) values of an option (TeRanEX)</li>
+                       <li>ADDED: Plugins can now make specific options for items. These options can be edited directly from the item add or edit page (TeRanEX)</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v3.15 (November 14, 2004)</b>
+               <ul>
+                       <li>FIXED: Some XSS issues, as reported by Alexander Antipov</li>
+                       <li>FIXED: Validate data that is sent as HTTP headers (redirects etc) (karma)</li>
+                       <li>FIXED: bug 1029057, parsed include doesn't accept empty files (karma)</li>
+                       <li>FIXED: bug 1036849, 'relevance' listed in list of available skinvars, while it's a templatevar (karma)</li>
+                       <li>FIXED: It was possible to spoof the username on comments, even when "protect member names" was turned on. Reported by bigmouth. (karma)</li>
+                       <li>FIXED: bug 1025675, if(hasplugin) causes warnings in action log when plugin does not exist (karma)</li>
+                       <li>FIXED: bug 1008700, taking away admin attribute from a member was disallowed when that member did not have logon rights (karma)</li>
+                       <li>FIXED: bug 968925, member edit leak out repeat password box while it should be hidden (admun)</li>
+                       <li>FIXED: bug 933580, URLs in comments followed with a comma should not have the comma in the generated hyperlink (karma)</li>
+                       <li>FIXED: bug 1019584, separating search terms with a '+' character caused SQL errors (karma)</li>
+                       <li>FIXED: bug 1016217, superadmin should be allowed to edit all items/comments (karma)</li>
+                       <li>FIXED: bug 1019191, <code>&lt;%if(blogsetting,..)%&gt;</code> / <code>&lt;%if(category,...)%&gt;</code> broken on error pages (karma)</li>
+                       <li>FIXED: Made sure no code relies on the PHP5 setting <code>register_long_arrays</code> to be <code>On</code> (karma)</li>
+                       <li>FIXED: <code>Call to undefined function</code> when user specified a language in its profile (jef pober)</li>
+                       <li>FIXED: Quickmenu didn't show up after login from <code>index.php?action=showlogin</code> (karma)</li>
+                       <li>CHANGED: new plugin event <code>ValidateForm</code> (karma)</li>
+                       <li>CHANGED: Extra whitespace to make skin exports easier to read in text editors (karma)</li>
+                       <li>CHANGED: e-mail notifications are now sent as <code>utf-8</code> rather than <code>iso-8859-1</code> (karma)</li>
+                       <li>ADDED: Admin members can click the version number in the admin area to check for a newer version (karma)</li>
+                       <li>ADDED: <code>&lt;%if(admin)%&gt;</code> and <code>&lt;%if(admin,blogname)%&gt;</code> in skins (karma)</li>
+                       <li>ADDED: In the admin area, a list of all comments for a blog is now available (karma)</li>
+                       <li>ADDED: <code>ITEM::getitem</code> returns blogid, as suggested by leonbloy (karma)</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v3.1 (July 28, 2004)</b>
+               <ul>
+                       <li>FIXED: Nucleus v3.01 was missing a fix in <code>backup.php</code>, which could cause fulltext key info not to be backed up correctly</li>
+                       <li>ADDED: support for patch levels, so plugin API enhancements can be distributed to power users earlier (<a href="http://forum.nucleuscms.org/viewtopic.php?t=4142" title="More info...">suggested</a> by TeRanEX)</li>
+                       <li>FIXED: bug 974090, multiple identical SQL queries were executed when checking if a plugin is available (karma)</li>
+                       <li>FIXED: Default language wasn't always respected (fushimi)</li>
+                       <li>CHANGED: new bookmarklet style (TeRanEX / moraes)</li>
+                       <li>FIXED: After a karma vote, redirection to referer URL failed if <code>register_globals</code> is turned off (karma)</li>
+                       <li>FIXED: SQL Injection Vulnerability, reported by aCiDBiTS</li>
+                       <li>FIXED: bug 689468, moved PostAddComment from action.php to COMMENTS.php(admun)</li>
+                       <li>FIXED: bug 967580, Class variables were not explicitly defined in PHP classes (karma)</li>
+                       <li>FIXED: IE6 unreadable Admin menu textarea (admun)</li>
+                       <li>FIXED: Skin exports for skins containing CDATA sections (like the RSS feeds) caused the <code>skinbackup.xml</code> to contain invalid XML. (Import still worked, however) (karma)</li>
+                       <li>FIXED: German language file wrong translation (admun)</li>
+                       <li>CHANGED: replaced <code>split</code> by <code>preg_split</code> in the parser class. Should be faster according to PHP docs (karma)</li>
+                       <li>FIXED: documentation typo (admun)</li>
+                       <li>FIXED: PHP5: Install script failed to discover install path automatically (karma)</li>
+                       <li>FIXED: Skin parser no longer parses skinvars when they are inside a non-displayed <code>if</code>-section (karma)</li>
+                       <li>FIXED: bug 817361, prefix http:// to member's URL if missing (admun)</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v3.01 (July 13, 2004)</b>
+               <ul>
+                       <li>FIXED: PHP5: Links to plugin admin area broken (radekradek)</li>
+                       <li>FIXED: bug 966011, skins created with v2.0 could not be imported (karma)</li>
+                       <li>FIXED: Security issue spotted by rADo2</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v3.0 (May 30, 2004)</b>
+               <ul>
+                       <li>FIXED: When adding a weblog, select globally defined default skin by default (TeRanEX)</li>
+                       <li>FIXED: CSS conflict in default skin (moraes)</li>
+                       <li>FIXED: ADMIN.php no-cache after doctype added to support dynamic content for plugins in admin area (rADo2)</li>
+                       <li>FIXED: vars4.1.0.php fixed a strange bug for some PHP installs having empty $_REQUEST[] (rADo2)</li>
+                       <li>FIXED: globalfunctions.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>
+                       <li>FIXED: install.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>
+                       <li>FIXED: install.php - installCustomSkins skinbackup.xml renamed (rADo2)</li>
+                       <li>FIXED: install.php - installCustomPlugs now correctly syncs plugin events (rADo2)</li>
+                       <li>FIXED: Forcing focus on add/edit window after closing media library (nakahara21)</li>
+                       <li>ADDED: <code>class</code> attributes on textareas that allow skins/templates to be edited (karma)</li>
+                       <li>FIXED: Documentation and errors now tell to chmod config.php to 444 instead of 644 (hcgtv)</li>
+                       <li>CHANGED: Admin area style power-up (Radek)</li>
+                       <li>FIXED: Install script used $PHP_SELF, which is not available when register_globals is off (nakahara21)</li>
+                       <li>FIXED; Skin import failed if there were CDATA sections (Nucleus Japan)</li>
+                       <li>FIXED: <code>undoMagic</code> choked on array variables (Nucleus Japan)</li>
+                       <li>FIXED: htmlspecialchars causes broken url like "&amp;amp;amp;" (Nucleus Japan)</li>
+                       <li>FIXED: PostAddCategory event was never called (Nucleus Japan)</li>
+                       <li>FIXED: PostAddCategory event was not called when creating a new weblog (Nucleus Japan)</li>
+                       <li>FIXED: &lt;%blogurl%&gt; problem on category lists (nakahara21)</li>
+                       <li>CHANGED: Took out the HTTP Authentication part for now (it has no real use yet, and caused problems when Nucleus is installed in a protected directory)</li>
+                       <li>FIXED: When the 'Allow login edit' option was disabled, the e-mail address was not checked for validity when a user edited his/her settings. This would cause an e-mail with new password to be sent out to an invalid address. (Frankenstein)</li>
+                       <li>FIXED: Some PHP files were missing the closing <code>?&gt;</code> tag (ikeizer)</li>
+                       <li>FIXED: Plugins were inable to delete options (leonbloy)</li>
+                       <li>FIXED: XML-RPC: <code>metaWeblog.newPost</code> fails when an empty array is passed as list of categories (caused problems with Ecto)</li>
+                       <li>FIXED: Eliminated 2 SQL queries on most requests.</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v3.0 RC (April 27, 2004)</b>
+               <ul>
+                       <li>CHANGED: Labeled it v3.0, since users started believing "2.5 beta == 25 final"</li>
+                       <li>FIXED: XML-RPC: <code>metaWeblog.editPost</code> assigned the default category again when no categories were passed along (karma).</li>
+                       <li>FIXED: XML-RPC: <code>mt.getPostCategories</code> returned an invalid result (karma)</li>
+                       <li>CHANGED: On clean install, RSS and Atom feeds contain full items rather than excerpts only (karma)</li>
+                       <li>REMOVED: Clean installation does not include RSS 0.91 feed anymore. Only the RSS 2.0 and Atom 0.3 feeds are included (karma)</li>
+                       <li>ADDED: When a skin provides a preview thumbnail, it is displayed in the skin overview (include prefix required, 100x75 preview.png, preview-large.png). Also, when a readme.html file is present in the skin include dir, a link to that file is added (karma)</li>
+                       <li>CHANGED: Allowed skin names to have slashes (<code>/</code>) in them (karma)</li>
+                       <li>FIXED: When adding media in non-IE browsers, all text was removed</li>
+                       <li>FIXED: Wrong times displayed / 'no such item' errors when MySQL server and PHP server are in different timezones (karma)</li>
+                       <li>ADDED: Made sure language files for v2.5beta can be used with v2.5final without strange strings (e.g. _SETTINGS_EXTAUTH) showing up in the admin area (karma)</li>
+                       <li>FIXED: No CSS styles were applied on 'insert media' popup (karma)</li>
+                       <li>FIXED: Some more possible problems with URL linking in comments (karma)</li>
+                       <li>FIXED: In Opera, buttons on the extended area added text to the main body text instead (karma)</li>
+                       <li>CHANGED: Admin pages are being sent as <code>text/html</code> instead of <code>application/xhtml+xml</code> again, since it caused too much javascript problems. When <code>$CONF['debug']</code> is <code>1</code> however, the pages are still sent as <code>application/xhtml+xml</code> (karma)</li>
+                       <li>FIXED: <code>itemlink</code> in templatevars didn't include itemid when used on item skins (mas)</li>
+                       <li>FIXED: Errors when deleting plugins with options (Curtis)</li>
+                       <li>FIXED: &amp; not encoded in category names/descriptions in admin area (karma)</li>
+                       <li>ADDED: <code>hasplugin</code> option on <code>if</code> skinvars (Kazuhiko)</li>
+                       <li><del>ADDED: External Authentication (plugin contains authentication code) (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>
+                       <li><del>ADDED: HTTP Authentication (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>
+                       <li>FIXED: When using the JavaScript buttons to add images/bold text/... to the extended text area, the text was added to the main text body instead if JavaScript toolbar style was set to 'simple' (karma)</li>
+                       <li>FIXED: XML-RPC: Added <code>postid</code> in structs returned by <code>metaWeblog.getPost</code> and <code>metaWeblog.getRecentPosts</code> (karma)</li>
+                       <li>FIXED: XML-RPC: <code>metaWeblog.getRecentPosts</code> expected a <code>string</code> instead of an <code>int</code> for the <code>amountOfPosts</code> parameter. (karma)</li>
+                       <li>FIXED: convert linebreaks broke <code>\r\n</code> linebreaks (jmuto)</li>
+                       <li>FIXED: On <code>index</code> and <code>search</code> skinparts, <code>nextlink</code>/<code>prevlink</code> could not be used before a <code>blog</code> or <code>searchresults</code> skinvar was called (karma)</li>
+                       <li>FIXED: SQL errors when search query contained single quotes (<code>'</code>) (karma)</li>
+                       <li>FIXED: Backup did not store information about FULLTEXT keys. (karma)</li>
+                       <li>ADDED: Extended the <code>date</code> templatevariables with pre-defined formats <code>utc</code> and <code>iso8601</code> (needed for Atom syndication; karma)</li>
+                       <li>FIXED: super-admins that were not on a blog team did not see the categories when trying to add an item to that blog (karma)</li>
+                       <li>FIXED: <code>nextresults</code> and <code>prevresults</code> were listed as available skunvars, while they don't exist (karma)</li>
+                       <li>FIXED: XML-RPC library wrote <code>&lt;?phpxml version="1.0"?&gt;</code> as XML header (jmuto)</li>
+                       <li>FIXED: not longer showing comment form when comments disabled for blog (jmuto)</li>
+                       <li>CHANGED: Plugin options are no longer limited to 128 characters (karma)</li>
+                       <li>CHANGED: Exported skins are now saved as <code>skinbackup.xml</code> instead of <code>skindata.xml</code> to avoid confusion. (karma)</li>
+                       <li>ADDED: New plugin events <code>AdminPrePageHead</code>, <code>AdminPrePageFoot</code>, <code>PreSendContentType</code>, <code>QuickMenu</code>, <code>BookmarkletExtraHead</code> (karma)</li>
+                       <li>FIXED: Fix for bookmarklet, which failed in Opera (jmuto)</li>
+                       <li>FIXED: <code>nextitemtitle</code> and <code>previtemtitle</code> skinvars did not htmlencode their output (karma)</li>
+                       <li>CHANGED/ADDED: make all skinvars that insert links consistent. They can now all take a linktext parameter to insert a full link instead of a raw link. The <code>nextlink</code>/<code>prevlink</code> on search/index pages (introduced 2.5 beta) had to change for this. Skinvars that can take a linktext: <code>todaylink</code>, <code>archivelink</code>, <code>prevlink</code>, <code>nextlink</code> and <code>itemlink</code> (karma)</li>
+                       <li>FIXED: XML-RPC: <code>mt.setPostCategories</code> asumed that <code>isPrimary</code> was always present (karma)</li>
+                       <li>FIXED: Plugins that generate output when they are loaded can not longer break backups. (Xiffy)</li>
+                       <li>FIXED: The test that auto-disabled fancy URLs was incorrect, and also applied to top-level domains that use 3 characters (like .com) (karma)</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v2.5 beta (October 11, 2003)</b>
+               <ul>
+                       <li>ADDED: <code>if(previtem)</code>, <code>if(nextitem)</code> and <code>if(skintype,<em>typename</em>)</code> skinvars.</li>
+                       <li>FIXED: RSS conditional GET wasn't working correctly (Visa Kopu)</li>
+                       <li>ADDED: Templatevar <code>relevance</code> available when displaying search results (Xiffy)</li>
+                       <li>CHANGED: <code>nextlink</code> and <code>prevlink</code> skinvar now also available on <code>search</code> and <code>index</code> skins. (Xiffy)</li>
+                       <li>ADDED: Skinvars <code>nextitemtitle</code> and <code>previtemtitle</code> on <code>item</code> skins (Xiffy)</li>
+                       <li>FIXED: Upload did not notice duplicates correctly</li>
+                       <li>ADDED: XML-RPC: Support for <code>metaWeblog.newMediaObject</code> and <code>metaWeblog.getRecentPosts</code> methods</li>
+                       <li>ADDED: XML-RPC: Support for the <a href="http://www.movabletype.org/docs/mtmanual_programmatic.html">Movable Type API</a> (except for <code>mt.getTrackbackPings</code>)</li>
+                       <li>CHANGED: Fulltext search, prev/next links on search pages, ... (Xiffy)</li>
+                       <li>FIXED/CHANGED: Action log size drops back to 250 when more than 500 entries.</li>
+                       <li>FIXED: No more restrictions on category names</li>
+                       <li>ADDED: possibility to create <a href="http://nucleuscms.org/documentation/devdocs/custominstall.html">custom installs</a></li>
+                       <li>FIXED: XHTML admin documents now have a proper <code>xmlns</code> attribute set; <del>admin pages are now sent as <code>application/xhtml+xml</code> if the client browser accepts it.</del> <ins>Removed again in 3.5final</ins></li>
+                       <li>ADDED: Plugins can now make specific options for blogs, categories and members. These options can be edited directly from the blogsettings or member settings page.</li>
+                       <li>FIXED: It's no longer possible to select an item from an other weblog through <code>?itemid=</code> when there is a different <code>blogid=</code> parameter set in the request (or set using <code>selectBlog</code>)</li>
+                       <li>FIXED: Disallowed while trying to create a new category on item edit</li>
+                       <li>FIXED: Date/Time variables in date footer were not parsed</li>
+                       <li>FIXED: Adding an item while creating a new category prevented ping to be sent to weblogs.com</li>
+                       <li>FIXED: Right-click bookmarklet for IE (re-install to get it working with IE6)</li>
+                       <li>FIXED/CHANGED: hyperlink conversion in comments: ftp/http/mailto supported</li>
+                       <li>FIXED: spaces in between multiple notify e-mail addresses caused ar error message saying the e-mail address is invalid.</li>
+                       <li>FIXED: <code>archivedate</code> skinvar ignored the 'locale' parameter that was passed to it</li>
+                       <li>FIXED: <code>selectBlog</code> did not protect for changes in <code>?archivelist</code></li>
+                       <li>FIXED: <code>selectCategory</code> now takes a category id instead of a name (multiple categories can have the same name)</li>
+                       <li>CHANGED: Fancy URLs are only generated when <code>$CONF['Self']</code> does not end in <code>.php</code> (this avoids URLs like <code>index.php/item/95/item/94/member/1</code> when turning fancy URLs on without further configuration)</li>
+                       <li>CHANGED: Install script updates <em>config.php</em> automatically when it is writable</li>
+                       <li>CHANGED: When the content type of a skin is <code>application/xhtml+xml</code>, only send this to browsers that specify this type in their <code>HTTP_ACCEPT</code> header (otherwise, send <code>text/html</code> instead)</li>
+                       <li>CHANGED: More intelligent search keywords highlighting (multiple separate keywords etc), also available inside comment bodies now</li>
+                       <li>ADDED: Possibility to filter on filename in media library</li>
+                       <li>FIXED: <code>include('config.php')</code> caused problems when another <code>config.php</code> was in the PHP include path (nils bernhard)</li>
+                       <li>ADDED: LiveJournal conversion (moraes)</li>
+                       <li>FIXED: Karma Vote URLs used relative links to <code>action.php</code></li>
+                       <li>CHANGED: Support for PHP versions having <code>short_open_tag = Off</code> (Andrew Brampton/Terry Chay)</li>
+                       <li>ADDED: Plugin options can now also use a <code>textarea</code> type. (max. size for data is still 128 bytes though)</li>
+                       <li>FIXED: When unable to load a plugin, an error message is added to the actionlog</li>
+                       <li>FIXED: Not all messages sent to the actionlog actually appeared there</li>
+                       <li>ADDED: Made it possible to install more than one Nucleus installation in the same database (using a prefix to the tablenames)</li>
+                       <li>ADDED: Nucleus does not longer allow access to the Admin Area when files like <code>install.php</code>, <code>install.sql</code> or the <code>nucleus/upgrades</code> directory are still on the server.</li>
+                       <li>ADDED: <code>&lt;%member%&gt;</code> skinvar now also accepts <code>id</code> and <code>yourid</code> as parameter</li>
+                       <li>FIXED: JavaScript toolbar works better in Gecko-based browsers (Mozilla Firebird/Netscape 7)</li>
+                       <li>ADDED: <code>supportsFeature</code> method to plugin interface</li>
+                       <li>FIXED: Destination URL parameter on <code>membermailform</code> skinvar didn't work</li>
+                       <li>FIXED: Encoding of the window title of popup images (Osamu Higuchi)</li>
+                       <li>FIXED: Link at end of install sequence was pointing to install.php</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v2.0 Final (April 3, 2003)</b>
+               <ul>
+                       <li>FIXED: renamed the <code>xmlrpc_encode</code> and <code>xmlrpc_decode</code> methods in <code>xmlrpc.inc.php</code>, avoiding naming conflicts on some PHP configurations that are compiled with XMLRPC support</li>
+                       <li>FIXED: restore did not work on some PHP configurations, and did not correctly recognize <code>application/x-gzip</code> encoding type</li>
+                       <li>ADDED: <code>if(onteam[,blogname])</code> skinvar</li>
+                       <li>ADDED: automatic warning when headers have already been sent, with filename and linenumber included</li>
+                       <li>ADDED: About 40 extra plugin events</li>
+                       <li>ADDED: Made <code>&lt;%member%&gt;</code> available on all skin parts, and added <em>yourname</em>, <em>yoururl</em>, ... parameters</li>
+                       <li>FIXED: plugin loading is now a little more robust (non-fatal errors in the plugin PHP file used to cause a fatal error afterwards)</li>
+                       <li>ADDED: extra variables inside popup code/image code/media code template-parts: <code>width</code>, <code>height</code>, <code>link</code> and <code>text</code></li>
+                       <li>ADDED: Extra optional parameter for <code>image</code> skinvar, indicating which information to insert on the page</li>
+                       <li>CHANGED: Marked the <code>imagetext</code> skinvar as deprecated (use <code>image(caption)</code> instead)</li>
+                       <li>CHANGED: Marked the <code>ifcat</code> skinvar as deprecated (use <code>if(category)</code> instead)</li>
+                       <li>CHANGED: Marked the <code>vars</code> skinvar as deprecated (if anyone needs a hidden 'itemid' formfield [are there?], the itemid skinvar can be used instead)</li>
+                       <li>ADDED: <code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code> method in plugin interface</li>
+                       <li>CHANGED: comments are now also parsed using the same method as skins and items, allowing plugins, includes and more to be used there as well</li>
+                       <li>FIXED: guests cannot longer place 'fake' comments (making it look as if a regsitered memeber made the comment)</li>
+                       <li>FIXED: item contents is no longer trimmed</li>
+                       <li>FIXED: Made install script look less messy</li>
+                       <li>ADDED: <code>selectItem($id)</code> method</li>
+                       <li>FIXED: Unable to disable comments through 'edit item'</li>
+                       <li>ADDED: Plugins: EditItemFormExtras event gets itemid as separate parameter</li>
+                       <li>FIXED: missing ; in presented new blog code</li>
+                       <li>FIXED: PHP 4.0.6 didn't show item/member/... lists on admin area (PHP bug)</li>
+                       <li>ADDED: Plugin Hook: BlogSettingsFormExtras</li>
+                       <li>FIXED: &lt;%if(blogsetting,bcomments,1)%&gt; skinvars were not working</li>
+                       <li>ADDED: &lt;%if(loggedin)%&gt; skinvars were not working</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v2.0 beta (January 18, 2003)</b>
+               <ul>
+                       <li>FIXED: Highlighted text no longer has &lt;!--h--&gt; in it</li>
+                       <li>ADDED; Plugin hook: PostAuthentication</li>
+                       <li>ADDED: Plugin hooks PreAddItemForm, AddItemFormExtras and EditItemFormExtras</li>
+                       <li>CHANGED: Notifications emails (new comment, etc) are not sent to the person causing the notification (comment author)</li>
+                       <li>ADDED: plugins can access global variables <code>$currentTemplateName</code> and <code>$currentSkinName</code></li>
+                       <li>CHANGED: Spaces after commas in &lt;%image%&gt;, &lt;%popup%&gt;, &lt;%media%&gt; </li>
+                       <li>FIXED: HTML to Text conversion didn't always work</li>
+                       <li>ADDED: &lt;%date%&gt; templatevars extras (rfc822 &amp; rfc822GMT) (Xiffy)</li>
+                       <li>ADDED: ranges for &lt;%blog(...)%&gt; and &lt;%otherblog(...)%&gt; skinvars</li>
+                       <li>ADDED: templatevars &lt;%author(email)%&gt;, &lt;%author(url)%&gt; and &lt;%author(id)%&lt;</li>
+                       <li>CHANGED: Added info on new weblog creation (split up creation process into two steps)</li>
+                       <li>FIXED: Login screen after email address change did not work correctly</li>
+                       <li>ADDED: Plugin Hook: PrePluginOptionsEdit</li>
+                       <li>ADDED: Added a getMinNucleusVersion method to the plugin interface</li>
+                       <li>ADDED: PostPluginOptionsUpdate plugin event</li>
+                       <li>ADDED: Javascript toolbar: align left/center/right buttons (Irmo)</li>
+                       <li>ADDED: RSD skin/template</li>
+                       <li>ADDED: 'Fancy' URLs option &amp; support files. Allows for URLs like http://hostname/archive/1/2003-01-05 instead of http://hostname/index.php?blogid=1&amp;archive=2003-01-05</li>
+                       <li>ADDED: RSS 2.0 skin/template (Xiffy)</li>
+                       <li>ADDED: skinvar &lt;%skinname%&gt;</li>
+                       <li>ADDED: if/else in skins. parameters for 'if' are currently 'category' (=ifcat) or 'blogsetting/settingname' (settingname = columnname from database...)</li>
+                       <li>ADDED: Etag/If-None-Match support for xml-rss.php (needs some more work)</li>
+                       <li>FIXED: more friendly bookmarklet for Opera 6 users (all tabs are visible, editing through bookmarklet works)</li>
+                       <li>ADDED: on edit item, the post time can be changed (only if 'allow post to past' is enabled)</li>
+                       <li>ADDED: 'Allow Post to Past' option on weblog basis</li>
+                       <li>ADDED: IncludeMode and IncludePrefix settings in nucleus_skin_desc + interface to change these settings + user IncludePrefix while parsing includes.</li>
+                       <li>CHANGED: nucleusbutton skinvar now takes into account IncludeMode</li>
+                       <li>CHANGED: btimeoffset column is now DECIMAL instead of INT </li>
+                       <li>CHANGED: took away actionurl parameters from commentform and membermailform skinvars (it's a global setting now)</li>
+                       <li>ADDED: &lt;%set(property,value)%&lt; skin/template-var to set global parser properties. Only one option defined so far: 'IncludeMode'. Can be 'skindir' or 'normal' and affects the include/parseinclude/phpinclude skin/templatevars</li>
+                       <li>ADDED: &lt;%skinfile(filename)%&gt; skinvar (to be used on imported skins)</li>
+                       <li>ADDED: $CONF['SkinsURL'] and $DIR_SKINS (config.php)</li>
+                       <li>CHANGED: friendly names used on skin edit (instead of 'index', 'item' etc)</li>
+                       <li>ADDED: action url to global settings (action.php location)</li>
+                       <li>ADDED: $desturl and $actionurl parameters on membermailform skinvar</li>
+                       <li>ADDED: skin import/export class</li>
+                       <li>CHANGED: media library now works with multiple collections, of which one is private to the site member, and the rest is globally shared.</li>
+                       <li>CHANGED: base skin can now be changed (it's now a config setting). This skin is ONLY used in two cased: when all else fails, and when the selected skin does not have contents for the needed skinpart</li>
+                       <li>CHANGED: positive and negative karma votes are now kept separately, since that works better and is more flexible. The &lt;%karma%&gt; templatevar received an extra parameter to select which information to show</li>
+                       <li>ADDED: skinvars archivenext/archiveprev/archivetype</li>
+                       <li>CHANGED: skinvars nextlink/prevlink now also work on archive skins</li>
+                       <li>CHANGED: move item now also allows to choose a category</li>
+                       <li>CHANGED: new items can be added to other blogs also now</li>
+                       <li>FIXED: archivedate skinvar displaying wrong date</li>
+                       <li>FIXED: serverVar function was not working when using vars4.0.6.php</li>
+                       <li>ADDED: now also listing category in itemlist</li>
+                       <li>CHANGED: Admin Area now uses the Site Name instead of Nucleus</li>
+                       <li>CHANGED: admin.css and admin area: corrected h1, h2, h3 depth levels</li>
+                       <li>ADDED: batch operations</li>
+                       <li>FIXED: when language settings are changed, the new language is used immediately (only for global settings, not for member settings)</li>
+                       <li>CHANGED: archivelist query now uses the  SUBSTRING MySQL function instead of the YEAR/DAYOFMONTH/MONTH functions (caused trouble for some people)</li>
+                       <li>ADDED: maxlength attributes on forms</li>
+                       <li>CHANGED: commentlists: placed time/author in same table cell </li>
+                       <li>ADDED: extra convertor for Blogger blogs that use YACCS comments (exportable in CAIF format)</li>
+                       <li>FIXED: some possible security issues (thanks to Morgan Tocker)</li>
+                       <li>FIXED: shortening of strings does not corrupt HTML entities anymore (e.g. in RSS-feeds)</li>
+                       <li>CHANGED: links in comments are now handled differently. Part of the URL is now displayed instead of just http://.../</li>
+                       <li>ADDED: Opera version of bookmarklet</li>
+                       <li>ADDED: selectLanguage() function to force the use of a certain language file</li>
+                       <li>REMOVED: there was a plugin event AddItem which was actually not needed at all (wasn't included in the documentation too)</li>
+                       <li>ADDED: archivelist skinvars now takes an extra limit-parameter</li>
+                       <li>CHANGED: moved all forms which can be included through skinvar out of SKIN.php and into .template files in the nucleus/forms directory.</li>
+                       <li>FIXED: 'clone skin' did not copy contenttype</li>
+                       <li>FIXED: Errors in XML-RSS template (upgrading users might need to change this manually or by importing an updated skin)</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v1.55 (August 26, 2002)</b>
+               <ul>
+                       <li>ADDED: &lt;%archivedaylist%&gt; and &lt;%otherarchivedaylist%&gt; skinvars (to show archives by day instead of by month)</li>
+                       <li>FIXED: PHP error on createAccount through action.php</li>
+                       <li>ADDED: new parseFile-method available in index.php. Allows to parse non-blog pages with skinvars</li>
+                       <li>FIXED: editing comments with hyperreffed links</li>
+                       <li>ADDED: 'delete item' option on edit item, plus 'delete item' confirmation screens (also on bookmarklet)</li>
+                       <li>CHANGED: on multi-blog systems, the admin now only gets to see the blogs for which (s)he is on the team. All other blogs are available through an 'show all blogs...' link</li>
+                       <li>FIXED: link to recent items after weblogs.com ping was broken</li>
+                       <li>CHANGED: plugin event call 'PreAddComment' moved to immediately before the item is added to the database</li>
+                       <li>FIXED: tab-orders were not correct on multiple admin pages</li>
+                       <li>ADDED: &lt;%itemid%&gt; and &lt;%itemlink%&gt; available on item pages</li>
+                       <li>FIXED: install.php now works when the PHP option magic_quotes_runtime is enabled</li>
+                       <li>CHANGED: install.php gives an error when PHP is compiled without MySQL installed</li>
+                       <li>CHANGED: install.php automatically fills the 'mysql hostname' field when PHP option mysql.default_host is set.</li>
+                       <li>FIXED: greymatter convert was not putting a reference to the weblog in the comments table.</li>
+                       <li>CHANGED: added some linebreaks in the login screen of the admin area</li>
+                       <li>ADDED: new plugin events: PreAddItem, PreUpdateItem, PrepareItemForEdit, PreUpdateComment, PrepareCommentForEdit</li>
+                       <li>ADDED: JavaScript to hide empty fields when editing templates</li>
+                       <li>CHANGED: Admin area CSS now uses relative fontsizes and fontsize-keywords (also added trick to make IE5 get it right)</li>
+                       <li>FIXED: backup was broken :(</li>
+                       <li>CHANGED: replaced an SQL query that caused problems (NATURAL JOIN replaced by implicit inner join)</li>
+                       <li>ADDED: &lt;%self%&gt; available in categorylist templates</li>
+                       <li>ADDED: &lt;%itemtitle%&gt; skinvar available on item-skins</li>
+                       <li>FIXED: editing a comment you made in a blog that's not your own resulted in a 'disallowed action' error </li>
+                       <li>FIXED: plugin was listed twice in the list of available skinvars</li>
+                       <li>ADDED: &lt;%archivedate%&gt; skinvar on archive skins</li>
+                       <li>FIXED: admininstrators could not edit details of other members</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v1.5 (August 13, 2002)</b>
+               <ul>
+                       <li>ADDED: Introducing plugins (define your own skinvars and templatevars, add event listeners, ...)</li>
+                       <li>CHANGED: simpler and more accessible default templates/skins</li>
+                       <li>FIXED: GreyMatter convert now works when the <tt>asp_tags</tt> option in PHP is enabled</li>
+                       <li>ADDED: title and authorName fields in Blogger API getRecentItems call</li>
+                       <li>ADDED: HTML label tags for radio buttons and checkboxes (this way you can click anywhere on the text instead of only on the radio button/checkbox itself)</li>
+                       <li>FIXED: deleting a comment you made in a blog that's not your own resulted in a 'disallowed action' error (thanks moraes)</li>
+                       <li>CHANGED: the place where comments are inserted can now be chosen from within the template. Just include &lt;%comments%&gt; in the ITEM templatepart whereever you want the comment count (or comments) to appear. In upgrading, the old ordening is imitated by adding '&lt;%comments%&gt;' to the end of the ITEM template part.</li>
+                       <li>CHANGED: now trimming parameters that were passed to skinvars/templatevars</li>
+                       <li>ADDED: &lt;%referer%&gt; skinvar, which inserts HTTP_REFERER</li>
+                       <li>ADDED: '- New Category -' can now be chosen on add/edit item (only for blog admins). A new category is then created, and the chance is given to edit the category details.</li>
+                       <li>ADDED: optional attributes for templatevars &lt;%time(format)%&gt;, &lt;%date(format)%&gt;, &lt;%syndicate_title(maxLength)%&gt;, &lt;%syndicate_description(maxLength)%&gt;</li>
+                       <li>ADDED: new user registrations show up in action log</li>
+                       <li>ADDED: new option to allow non-members to send messages (the membermailform)</li>
+                       <li>FIXED: when an admin edits an item written by someone else, and uploads an image, the image is now saved under the original authors media directory</li>
+                       <li>CHANGED: &lt;%author(realname)%&gt; in item templates now inserts the real name of the author</li>
+                       <li>FIXED: install.php now works when magic_quotes_gpc is disabled</li>
+                       <li>ADDED: New settings: PluginURL, MaxUploadSize, ProtectMemNames</li>
+                       <li>ADDED: hotlinks to the defined skinparts from the skin overview (also gives a good view on which skinparts have been defined and which have not been defined)</li>
+                       <li>ADDED: &lt;%smartbody%&gt; for item templates, which chooses between showing the body and extended part, based on the extended part being empty or not. Using this, the body text can be your full text, and the extended part could be seen as an 'introduction', which you want to show on the front page. (request from smarko)</li>
+                       <li>ADDED: &lt;%edit%&gt;, &lt;%editlink%&gt; and &lt;%editpopupcode%&gt; can be used in item templates (and in items themselves) to insert a link  to where the item can be edited/deleted. (default setting uses bookmarklet to do this). The edit links only get shown when the user is allowed to edit a certain item (blog admin or item author). </li>
+                       <li>FIXED: bookmarklet now works correctly when magic_quotes_gpc and register_globals are turned off </li>
+                       <li>ADDED: PHP and MySQL versions are listed during the installation proces, with warnings when those version numbers are lower than what Nucleus requires</li>
+                       <li>CHANGED: item parsing method changed, so it's more easily extensible. plugin, parsedinclude, include and phpinclude are now also allowed in some templates. Inside items, there are also 3 allowed variables: 'image', 'media' and 'popup'</li>
+                       <li>FIXED: image popups didn't work with register_globals disabled</li>
+                       <li>CHANGED: renamed method: getBlogidFromName -> getBlogIDFromName (consistency)</li>
+                       <li>ADDED: method selectCategory($name)</li>
+                       <li>FIXED: Nucleus now handles data correctly when magic_quotes_gpc is disabled (solves some problems with template editing)</li>
+                       <li>CHANGED: categories in selection box are now sorted by name (tip from katatonik)</li>
+                       <li>FIXED: Not all tables got exported on backup :( (thanks Xiffy!)</li>
+                       <li>FIXED: add item form didn't handle keyboard shortcuts correctly (thanks Hop!)</li>
+                       <li>CHANGED: 'remember me' checkbox is now checked when the information was remembered from before (this way, the cookie gets set again and does not expire)</li>
+                       <li>FIXED: after a category got selected through skinvar parameters, skinvars applying to all categories also got applied only to the last category that was selected (thanks Xiffy!)</li>
+                       <li>ADDED: table nucleus_comment got an extra cblog column (redundant) to allow to find the blog that goes with a comment more easily.</li>
+                       <li>FIXED: email address checking routine (false email addresses like foo@@bar.com were allowed)</li>
+                       <li>CHANGED: New installations now get a robots.txt file (disallows karma voting/commenting/... by bots)</li>
+                       <li>CHANGED: JavaScript preview now shows image outlines and popup image links</li>
+                       <li>CHANGED: searchform now available on ALL skintypes</li>
+                       <li>FIXED: headers in globalfunctions/SKIN.php now sent _only_ when no other headers have been sent before. Should make including easier.</li>
+                       <li>CHANGED: RSS-auto-discovery tag in default skin</li>
+                       <li>CHANGED: formfields got labels (accessibility issue). Also access keys have been defined: L for login, 4 for Search (on windows, actions keys are used together with the ALT key)</li>
+                       <li>ADDED: left and right box buttons on JS toolbar</li>
+                       <li>FIXED: truncated entry when login is requested after adding (data didn't get passed on correctly)</li>
+                       <li>ADDED: &lt;%authorlink%&gt; to template vars for item templates (this one can take catid into account)</li>
+                       <li>ADDED: $CONF['Self'] => $CONF['ItemURL'], $CONF['IndexURL'], ... to optionally allow people to use different files for items/archives/...</li>
+                       <li>CHANGED: Now using mysql_fetch_assoc instead of mysql_fetch_array (efficiency)</li>
+                       <li>CHANGED: The &lt;%searchresults%&gt; and &lt;%othersearchresults%&gt; skintags got an extra parameter to limit the number of results (defaults to 50)</li>
+                       <li>FIXED: doError did not take into account chosen skin</li>
+                       <li>FIXED: Commentform not shown anymore for closed items (a message is shown instead)</li>
+                       <li>CHANGED: Removed all unneccessary javascript: links (deprecated)</li>
+                       <li>CHANGED: Media: Procentual width and height values are now allowed in image and inline constructs (e.g. &lt;%image(bla.gif|50%|50%|lala)%&gt;)</li>
+                       <li>FIXED: Blogger API: getPost wasn't returning category name</li>
+                       <li>FIXED: Blogger API: getRecentPosts wasn't converting linebreaks</li>
+                       <li>FIXED: surpressed warning on mysql_close</li>
+                       <li>FIXED: install-script now also accepts email addresses that contain uppercase characters</li>
+                       <li>FIXED: imported items did not show up in the weblog</li>
+                       <li>FIXED: blogger api &lt;title&gt; thingie didn't work</li>
+                       <li>CHANGED: Made all uploaded files be chmodded to 644</li>
+                       <li>FIXED: template cloning didn't clone all parts</li>
+                       <li>FIXED: After new user registration, there was a redirect to the members url (use 'desturl' now to indicate destination url)</li>
+                       <li>...and a lot of small changes</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v1.1 (April 30, 2002)</b>
+               <ul>
+                       <li>Started assuming that at least PHP 4.0.5 is available. (for older PHP versions, some small code-changes should do the trick)</li>
+                       <li>Added bookmarklets for Mac/IE5 users and Mozilla. Also, made the title of the page also show up in the title field of the new item. Makes more sense. <small>(thanks to <a href="http://www.35mm.org">Ricardo Lamego</a>)</small></li>
+                       <li>Made the <a href="http://www.php.net/manual/en/language.variables.predefined.php" title="see PHP doc">predefined PHP variables</a> available in scripts called through &lt;%phpinclude(..)%&gt; <small>(thanks to <a href="http://www.polskaya.be/">Polskaya</a> for noticing the problem)</small></li>
+                       <li>Fixed: &lt;%additemform%&gt; and &lt;%nucleusbutton%&gt; didn't work when admin area was not in a dir named 'nucleus'</li>
+                       <li>Added: &lt;%sitevar(adminurl)%&gt; and shortcut &lt;%adminurl%&gt; to include the URL of the admin area</li>
+                       <li>Changed all references to nucleus.demuynck.org into references to <a href="http://nucleuscms.org/">nucleuscms.org</a></li>
+                       <li>Extra settings: cookie domain, cookie path, secure cookie (for https)</li>
+                       <li>Instead of stripping tags in comments, &lt; and &gt; are now replaced by their entities (&amp;lt; and &amp;gt;). This way, greater than and lower than signs can be used in comments <small>(inspiration by <a href="http://www.adfundum.be/">Steven Verbruggen</a>)</small></li>
+                       <li>Added charset to language files, so international character sets can be used when needed <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=56">forum</a>)</small></li>
+                       <li>Added an extra content-type attribute to skins, so the output type can be set correctly by Nucleus</li>
+                       <li>Removed the 'headlines' skin and templates. Don't want new users to get too confused.</li>
+                       <li>Notification emails now also get the senders display name</li>
+                       <li>All errors now handled by doError method in globalfunctions.php (makes it easier when you want to use your own error handler instead of the error skin)</li>
+                       <li>Site-members can now override the default site-language setting for the pages they visit</li>
+                       <li>Added skinvars &lt;%otherarchive%&gt; and &lt;%othersearchresults%&gt; for use on archive/search pages.</li>
+                       <li>Skinvar &lt;%searchform%&gt; now takes an optional parameter: blogname (for which you want a search form)</li>
+                       <li>Introducing categories! (new settings; new skinvars category, categorylist and ifcat; new template vars &lt;%category%&gt;, &lt;%catid%&gt; and &lt;%categorylink%&gt;; new optional category params for skinvars blog, otherblog, archive, otherarchive, archivelist, otherarchivelist)</li>
+                       <li>Fixed: error skin didn't get copied on skin cloning</li>
+                       <li>Even more new skinvars to make skinning easier: &lt;%todaylink%&gt;, &lt;%archivelink%&gt;, &lt;%prevlink%&gt; and &lt;%nextlink%&gt; <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=67">forum</a>)</small></li>
+                       <li>Fixed: The install script was giving warnings about uninitialized variables on some PHP configurations</li>
+                       <li>Moved version history to separate file</li>
+                       <li>Made upgrade scripts a little more robust and more verbose</li>
+                       <li>XML-RPC: <a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a> support</li>
+                       <li>XML-RPC: &lt;title&gt; and &lt;category&gt; tags can now be used with the Blogger API (similar to b2)</li>
+                       <li>Fixed problem with create account <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=92">forum</a>)</small></li>
+                       <li>Made it so Nucleus still works when using PHP &gt;4.1.0 with register_globals turned off, which is the default setting for new installations <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=95">forum</a>)</small></li>
+                       <li>Media library: popup now requests login when needed</li>
+                       <li>Media library: option to auto-prefix uploaded files with date (turned on by default)</li>
+                       <li>Backup/Restore: backup file name now has date + nucleus.sql renamed to install.sql + extra "I'm sure"-checkbox on restore to avoid errors <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=100">forum</a>)</small></li>
+                       <li>Javascript toolbar: simpler version available that works in Mozilla</li>
+                       <li>Fixed: Closed items don't show 'no comments' link anymore <small>(forum)</small></li>
+                       <li>Fixed: Drafts items don't result in 'January 1970' entries in archivelist</li>
+                       <li>Fixed: Added &lt;image&gt; tag to xmlrss skin for new installs. It's required. (defaults to a nucleus logo, up to you to change it)</li>
+                       <li>Fixed: Error with restore (content with semicolons in it would not get restored)</li>
+                       <li>Added: Extra notification options</li>
+                       <li>Archives can now also be accessed by day, and an extra daylink template var is available in date headers</li>
+                       <li>Fixes in default skin</li>
+                       <li>As always, lots of small fixes &amp; code rewrites</li>
+                       <li>
+                               Changes (additions to and <del>deletions</del> from) language file:
+                               <ul>
+                                       <li>_SETTINGS_COOKIES_TITLE</li>
+                                       <li>_SETTINGS_COOKIEDOMAIN</li>
+                                       <li>_SETTINGS_COOKIEPATH</li>
+                                       <li>_SETTINGS_COOKIESECURE</li>
+                                       <li>_SKIN_UPDATED</li>
+                                       <li>_TEMPLATE_UPDATED</li>
+                                       <li>_CHARSET</li>
+                                       <li>_MEMBERS_DEFLANG</li>
+                                       <li>_MEMBERS_USESITELANG</li>
+                                       <li>_ADD_CATEGORY</li>
+                                       <li>_ADD_DRAFTNFUTURE</li>
+                                       <li>_ERROR_NOSUCHLANGUAGE</li>
+                                       <li>_ERROR_NOSUCHCATEGORY</li>
+                                       <li>_ERROR_DELETEDEFCATEGORY</li>
+                                       <li>_ERROR_DELETELASTCATEGORY</li>
+                                       <li>_ERROR_BADCATEGORYNAME</li>
+                                       <li>_ERROR_DUPCATEGORYNAME</li>
+                                       <li>_CONFIRMTXT_CATEGORY</li>
+                                       <li>_DELETED_CATEGORY</li>
+                                       <li>_LISTS_TYPE</li>
+                                       <li>_SKIN_TYPE</li>
+                                       <li>_YOURSITE</li>
+                                       <li><del>_LIST_COMMENT_HOST</del></li>
+                                       <li>_SETTINGS_MEDIA</li>
+                                       <li>_SETTINGS_MEDIAPREFIX</li>
+                                       <li>_SETTINGS_MEMBERS</li>
+                                       <li>_LOGIN_FORGOT</li>
+                                       <li>_TEMPLATE_CATEGORYLIST</li>
+                                       <li>_TEMPLATE_CATHEADER</li>
+                                       <li>_TEMPLATE_CATITEM</li>
+                                       <li>_TEMPLATE_CATFOOTER</li>
+                                       <li>_EBLOG_DEFCAT</li>
+                                       <li>_EBLOG_CAT_TITLE</li>
+                                       <li>_EBLOG_CAT_NAME</li>
+                                       <li>_EBLOG_CAT_DESC</li>
+                                       <li>_EBLOG_CAT_CREATE</li>
+                                       <li>_EBLOG_CAT_UPDATE</li>
+                                       <li>_EBLOG_CAT_UPDATE_BTN</li>
+                                       <li>_EBLOG_NOTIFY_ON</li>
+                                       <li>_EBLOG_NOTIFY_COMMENT</li>
+                                       <li>_EBLOG_NOTIFY_KARMA</li>
+                                       <li>_EBLOG_NOTIFY_ITEM</li>
+
+                               </ul>
+                       </li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v1.0 (March 6, 2002)</b>
+               <ul>
+                       <li>Fixed: width &amp; height of &lt;%image()%&gt; construct</li>
+                       <li>Changed: windows in popup windows don't have a white border anymore <small>(<a href="http://www.nucleuscms.org/forum/viewtopic.php?t=3">see forum</a>)</small>
+                       </li>
+                       <li>Fixed: bug with single quotes in image/popup constructs <small>(<a href="http://www.nucleuscms.org/index.php?itemid=1812">see message</a>)</small></li>
+                       <li>Fixed: fatal error in 'send password' method <small>(thanks to <a href="http://modder.org/HANK!">HANK!</a>)</small></li>
+                       <li>Fixed: removed some illegal characters from code documentation since they caused parse errors on some systems <small>(thanks to Martin Belle-Isle and Rodrigo Moraes; see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=5">forum</a> for extra details)</small></li>
+                       <li>Refined: added a note about spaces to the install-script <small>(see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=14">forum</a>)</small></li>
+                       <li>Added: donate-link on admin page <small>(hey! it's free, I have the right to bug you with this sort of things ;-)</small></li>
+                       <li>Changed: it's not possible anymore to create a draft future item. That didn't make sense. You can now choose whether you want to publish a draft item either immediately or in the future when editing the item</li>
+                       <li>Changed: made it so that the 'disable comments' choice is not offered anymore on add/edit item form when commenting is disabled in the blogsettings</li>
+                       <li>Fixed: where possible, redirection after commenting is now done to the correct file (instead of index.php)</li>
+                       <li>Fixed: bug where only superadmins could change usernames/passwords, even if the corresponding option in the settings was set <small>(thx <a href="http://www.sneppah.be/">slekke</a>)</small></li>
+                       <li>Added: allowed variables for a skinpart now shown when editing skin</li>
+                       <li>Wrote new re-usable parser that does skin parsing in a way that is more flexible and less prone to errors.</li>
+                       <li>Changed: passwords now stored in encrypted form</li>
+                       <li>Optimizing: optimized some queries</li>
+                       <li>Added: &lt;%otherarchivelist(blogname,templatename)%&gt; in skins</li>
+                       <li>Added: Blogger Convert</li>
+                       <li>Added: "shared computer" checkbox on login. Checking this box will make your cookie expire at the end of the session (instead of taking the global site setting) <small>(see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=33">forum</a>)</small></li>
+                       <li>Added: "remember me" checkbox on comment forms for non-members</li>
+                       <li>Most language related things are now moved to language files. Now you can roll your own :)</li>
+                       <li>Added: optional parameters rows/cols in membermailform skinvar</li>
+                       <li>Added: skinvars: &lt;%phpinclude(file)%&gt; and &lt;%parsedinclude(file)%&gt;. &lt;%plugin%&gt; is now deprecated (in favor of phpinclude). The plugins directory should also not be used anymore (it'll get another function in a later version)</li>
+                       <li>Added: skinvar &lt;%self%&gt; which includes the filename of the currently executing script (index.php or whatever is sen in $CONF['Self'])</li>
+                       <li>Automatich hyperlink detection in comments now also recognizes comma's</li>
+                       <li>Added: selectSkin('name') and selectBlog('name') functions available for use in index.php</li>
+                       <li>Added: Small <a href="tips.html#backups">restore-guide</a> for the worst case scenario</li>
+                       <li>Added: A toolbar with markup buttons on add/edit item, plus option to disable it in the settings. When Mozilla is used, Nucleus tries to disable it automatically (since it doesn't work there anyway)</li>
+                       <li>Fixed: media were not expanded in extended text <small>(thx <a href="http://www.elrado.nl/">raoul</a>)</small></li>
+                       <li>Changed javascript code of popup help so it works better in Mozilla <small>(thanks to <a href="http://idontsmoke.co.uk/">Paul Sowden</a>)</small></li>
+                       <li>UI improvements</li>
+                       <li>New default skin (the old one was just plain ugly :-)</li>
+                       <li>Small bug-fixes</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.96 (December 13, 2001)</b>
+               <ul>
+                       <li>Added: add-item-preview now also in admin area</li>
+                       <li>Added: action log</li>
+                       <li>Added: media library and file-upload</li>
+                       <li>Added: karma votes</li>
+                       <li>Added: Option to disable loginname/password changing by members</li>
+                       <li>Added: simple popup windows for image viewing</li>
+                       <li>Fixed: E-mail address validation check does not longer require addresses to be all lowercase</li>
+                       <li>Fixed: magic_quotes are now explicitly disabled, solving escaping problems (thanks to <a href="http://www.aroundmyroom.com/">Dennis Slagers</a>)</li>
+                       <li>Fixed: error handling when pinging weblogs.com</li>
+                       <li>Added: now also storing IP with comments (next to hostname)</li>
+                       <li>Added: IP banlist (to prevent nasty people from commenting/voting)</li>
+                       <li>Changed: Notification mails now include the item's title</li>
+                       <li>Changed: Weblogs can only be deleted by super-admins</li>
+                       <li>Changed: <a href="http://xmlrpc.usefulinc.com/">XML-RPC for PHP</a> v1.02</li>
+                       <li>Added: Small <a href="tips.html#filepermissions">guide to changing/setting filepermission</a> in docs</li>
+                       <li>Changed: Upgrade and conversion scripts now get packed separately</li>
+                       <li>Fixed: For error skins, the default skin is used now instead of 'default' (thanks to <a href="http://www.sneppah.be/">Slekke</a>)</li>
+                       <li>Fixed: The code to insert the Nucleus button was not XHTML (strict) compliant, oh my!</li>
+                       <li>GM Conversion: The conversion of {{popup}} now works correctly (and copies image files to the media dir)</li>
+                       <li>Fixed: a minor bug in XML-RPC call blogger.getUsersBlogs</li>
+                       <li>Fixed: a major bug in XML-RPC call blogger.getRecentPosts</li>
+                       <li>Fixed: problem concerning template editing and the XML-RPC call blogger.setTemplate</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.95 (October 10, 2001)</b>
+               <ul>
+                       <li>Added: per-blog setting to enable/disable line break conversion</li>
+                       <li>Added: per-blog setting to send a ping to Userland (weblogs.com) when you update your blog. This way, you'll be able to end up in the weblogs.com update-list</li>
+                       <li>Switched to v1.01 of the XML-RPC for PHP libs (was v1.0)</li>
+                       <li>Upgrade scripts are available (for upgrade from versions &lt; 0.95 to v0.95)</li>
+                       <li>Added: &lt;%previtem%&gt; and &lt;%nextitem%&gt; can be used in item-skins</li>
+                       <li>Some changes in the default database dump</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.94 (September 27, 2001)</b>
+               <ul>
+                       <li>Changed: 'Add Item' in admin-area now redirects to blog url (if available)</li>
+                       <li>Changed: <i>headlines.php</i> and <i>xml-rss.php</i> adapted to behave better in disabled-site situations</li>
+                       <li>Changed: &lt;%userlink%&gt; got smarter in recognizing e-mail addresses</li>
+                       <li>Added: tabindices in forms to make traversal with the TAB-button more natural</li>
+                       <li>Fixed: bookmarklet login did not pass data correctly</li>
+                       <li>Added: JavaScript to open links in new window (javascrip/opennew.js)</li>
+                       <li>Added: &lt;%year%&gt; and &lt;%month%&gt; in templates for archivelist-items</li>
+                       <li>CSS lightly changed because IE6 is a little bit more picky (which is actually a good thing)</li>
+                       <li>Fixed: popup code (JavaScript) for help-windows (didn't work ok in IE6)</li>
+                       <li>Added: Description or summary of what you are going to delete on the confirmation screens</li>
+                       <li>Added: Workaround (for advanced users) to get your archives into search engines (on tips &amp; suggestions page)</li>
+                       <li>Fixed: A bug in the XML-RPC server</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.93 (September 19, 2001)</b>
+               <ul>
+                       <li>Added: friendly error message on error with nucleusdir definition in config.php</li>
+                       <li>Changed: call_user_func instead of eval</li>
+                       <li>Added: forms included by skin variables now have class="formfield" and class="formbutton" arguments, to allow more control on the layout</li>
+                       <li>Created a <a href="tips.html">'Tips &amp; Suggestions'</a> page next to this manual</li>
+                       <li>XML-RPC API: added nucleus.addDatedItem method</li>
+                       <li>XML-RPC API: added nucleus.editItem method</li>
+                       <li>XML-RPC API: added nucleus.getRecentItems method</li>
+                       <li>XML-RPC API: added nucleus.getItem method</li>
+                       <li>Added documentation for XML-RPC nucleus.* methods</li>
+                       <li>Fix: Search results didn't show the amount of comments. Now they do.</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.92 (September 18, 2001)</b>
+               <ul>
+                       <li>GM conversion: {{linkmo and {{emailmo conversion now also works with PHP versions &lt; 4.0.4</li>
+                       <li>GM conversion: Fixed occasional JavaScript errors with {{linkmo and {{emailmo</li>
+                       <li>GM conversion: Fixed [read more] bug</li>
+                       <li>GM conversion: Extra intelligence in choosing URL or e-mail to save as userid for comments</li>
+                       <li>Added: ?archivelist can now be used without arguments to show the list of archives for the default weblog</li>
+                       <li>Fixed: Editing comments now does not allow the use of HTML anymore. The same checks as when adding new comments are performed on update attempts.</li>
+                       <li>Added: check to find out if update file is writable (on changing blogsettings and creating new weblog)</li>
+                       <li>Changed: hard returns in add item now get converted to line breaks (&lt;br /&gt;), Also, modified javascript code that handles preview to behave in the same way.</li>
+                       <li>Changed: &lt;%commentform%&gt; does not show user and userid fields for logged in users. Instead, it shows the name of the user.</li>
+                       <li>GM Conversion: {{popup command now also translated (will be converted into a link to the image, not into a popup window!)</li>
+                       <li>Updated: default templates (?archivelist)</li>
+                       <li>Changed: E-mail Address Validation Check</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.91 (September 15, 2001)</b>
+               <ul>
+                       <li>Improved conversion for GreyMatter blogs. Special markup commands are now recognized. (thanks to <a href="http://www.elrado.nl/">Raoul</a> for pointing this out)</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.90 [beta 2 release] (September 14, 2001)</b>
+               <ul>
+                       <li>an install-script is now available, no more messing around in shells</li>
+                       <li>created default skins/templates for a release version</li>
+                       <li>option to store 'last visit' cookie and to use 'new' indication on items</li>
+                       <li>?archivelist=.. request can now also be used with a blogid instead of a blog shortname</li>
+                       <li>forgotten password reminder</li>
+                       <li>Bookmarklet can be used without being logged in. A login prompt is shown in that case.</li>
+                       <li>When not being logged in to the admin area, requested actions are now completed after passing login information. Before, you would always end up at the action overview after passing login information, and your requested action would have gone lost.</li>
+                       <li>Super-admins now have access to all blogs, even if they are not on the team</li>
+                       <li>Logtext passed to bookmarklet now gets &lt;br /&gt; added before each newline</li>
+                       <li>Added little JavaScript to prevent submitting form data twice</li>
+                       <li>Sample plugin: google referer check</li>
+                       <li>Conversion script to import GreyMatter blogs included</li>
+                       <li>Removed 'assign comment to member' feature</li>
+                       <li>Added toolbar to popup help windows (because of the back/forward buttons)</li>
+                       <li>Added &lt;%blogurl%&gt; variable for item templates</li>
+                       <li>bug-fixes</li>
+                       <li>small esthetic changes</li>
+                       <li>...</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.80 [beta 1 release] (September 2, 2001)</b>
+               <ul>
+                       <li>XML-RPC Interface implementing the blogger methods</li>
+                       <li>fixes and code-reorganisation</li>
+                       <li>popup-help on item pages</li>
+                       <li>bookmarklets/right click blogging</li>
+                       <li>the start of something that looks like documentation</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.70 [not released] (August 20, 2001)</b>
+               <ul>
+                       <li>mySQL instead of XML</li>
+                       <li>extensive admin area</li>
+                       <li>'member' concept, including blog teams/admins/...</li>
+                       <li>rewrote most of the code</li>
+                       <li>skin format slightly changed</li>
+                       <li>almost ready for public release :)</li>
+                       <li>adding items with instant preview (when viewing the weblog)</li>
+                       <li>LOCALE used for time/date notations.</li>
+               </ul>
+       </li>
+       <li>
+               <b>Nucleus v0.60 and earlier (since February 2001)</b>
+               <br />
+               no history (XML versions with limited functions)
+       </li>
+</ul>
+
+
+</body>
+</html>
index 7230adc..404204c 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: index.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus CMS マニュアル</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="heading">\r
-Nucleus CMS マニュアル\r
-<i>(v3.2)</i>\r
-</div>\r
-\r
-<div class="note">\r
-<b>はじめに:</b>\r
-<ul>\r
-       <li>このマニュアルは管理エリアにて使用しているポップアップヘルプ(<a href="help.html">help.html</a>)に記載されていない内容を収録しております。Nucleusの<a href="#installation">インストールガイド</a>も収録しておりますので参考にしてください。</li>\r
-       <li>デベロッパーの方は、 <a href="devdocs/index.html">開発者向けマニュアル</a> を併せてご覧下さい。</li>\r
-</ul>\r
-</div>\r
-\r
-<h1><a name="toc"></a>目次</h1>\r
-\r
-<ul>\r
-       <li><a href="#about">Nucleus CMS とは</a></li>\r
-       <li><a href="#license">GPLライセンスについて</a></li>\r
-       <li><a href="#installation">インストールガイド</a></li>\r
-       <li><a href="skins.html">スキンとテンプレートの編集(ページデザイン)</a> (別ファイル)</li>\r
-       <li><a href="#security">セキュリティについて</a></li>\r
-       <li><a href="#performance">パフォーマンスについて</a></li>\r
-<!-- <li><a href="#import">Importing from other tools</a></li> -->\r
-       <li><a href="#comments">コメント受付時のルール</a></li>\r
-       <li><a href="#xmlrpc">XML-RPC インターフェイスについて</a></li>\r
-       <li><a href="#trouble">困った時は (FAQ)</a></li>\r
-       <li><a href="tips.html">Tips &amp; Suggestions</a> (別ファイル)</li>\r
-       <li><a href="#known">現在指摘されている問題点</a></li>\r
-       <li><a href="history.html">履歴</a> (別ファイル)</li>\r
-       <li><a href="#credits">謝辞</a></li>\r
-</ul>\r
-\r
-<h1>Nucleus とは<a name="about" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleus とはコンテンツマネジメントシステム(Contents Management System : 略してCMS)ツールです。PHPで書かれており、blogサイト運営に強力に役立ちます。主な特徴は以下の通りです:\r
-</p>\r
-\r
-<ul>\r
-       <li>自分のサーバで運用できる</li>\r
-       <li>複数のblog設置が可能で単一ページに複数blog表示も可能</li>\r
-       <li>プラグインによる機能拡張</li>\r
-       <li>コメント投稿の標準装備</li>\r
-       <li>自動過去ログ作成</li>\r
-       <li>カテゴリ分け</li>\r
-       <li>検索機能の標準装備</li>\r
-       <li>複数人による記事投稿</li>\r
-       <li>未来の日付での投稿</li>\r
-       <li>草稿機能</li>\r
-       <li>拡張性のある管理エリア</li>\r
-       <li>画像などのファイル添付機能</li>\r
-       <li>ページデザインのフルカスタマイズ</li>\r
-       <li>スキンのインポート/エクスポート</li>\r
-       <li>コメント悪用者のブロック</li>\r
-       <li>RSS 自動作成</li>\r
-       <li>インストールが簡単</li>\r
-       <li>バックアップが簡単</li>\r
-       <li>XML-RPC インターフェイス ( <a href="http://plant.blogger.com/api/">Blogger API</a> / <a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a> / <a href="http://www.movabletype.org/docs/mtmanual_programmatic.html#xmlrpc%20api">Movable Type API</a> 採用)</li>\r
-       <li>XHTML 準拠</li>\r
-       <li>Blogger と GreyMatter blogsからのコンバートツール</li>\r
-       <li>...</li>\r
-</ul>\r
-\r
-<p>\r
-Nucleusのインストールには以下の環境が必要です: <small>(不明な点はサーバ管理者にお尋ね下さい)</small>\r
-</p>\r
-\r
-<ul>\r
-       <li><a href="http://jp.php.net/manual/ja/">PHP</a> (バージョン 4.0.6 以降)</li>\r
-       <li><a href="http://dev.mysql.com/doc/mysql/ja/">MySQL</a> データベース (バージョン 3.23.38 以降)</li>\r
-       <li>デザインのカスタマイズをする場合は、<acronym title="Hypertext Markup Language">HTML</acronym> と <acronym title="Cascading Style Sheets">CSS</acronym> の基礎知識</li>\r
-</ul>\r
-\r
-\r
-\r
-<p>\r
-Nucleus はサイト構築にあたって痒いところに手が届くように設計されています。HTMLに関する知識が全くなく、簡単にblogサイトを持ちたい人は インストール不要のホスティング型のblogサービス(<a href="http://dir.yahoo.co.jp/Computers_and_Internet/Internet/Free_Services/Diaries/">Yahoo! JAPANの該当カテゴリ</a>参照)を利用した方が良いかもしれません。\r
-</p>\r
-\r
-\r
-\r
-\r
-<a name="license"></a>\r
-<h1>ライセンスについて <a name="copyright" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
-<br />\r
-Copyright (C) 2002-2005 The Nucleus Group\r
-</p>\r
-\r
-<p>このプログラムはフリーウェアです。フリーソフトウェア財団(the Free Software Foundation)が公表したGNU一般公共使用許諾(GNU General Public License)の「バージョン2」或いはそれ以降の各バージョンの中からいずれかを選択し、そのバージョンが定める条項に従ったうえで、本プログラムの再配布・改変を認めています。\r
-</p>\r
-\r
-<p>このプログラムがご自身の使用目的に合ったものであれば幸いです。しかしながら 、商品性および特定目的に対する適合性に関する黙示的な保証を含み、いかなる保証もいたしません。詳細につきましてはGNU 一般公有使用許諾書をお読みください。</p>\r
-\r
-<p>このプログラムと併せて<a href="../../license.txt">GNU General Public Licenseのコピー</a>をお受け取りのはずかと思いますが、受取られていない方は「Free Software\r
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA」までその旨をお知らせ下さい。</p>\r
-\r
-<p>\r
-このソフトウェアを所有することは、これらの条件に同意することを意味します。これらの条件に同意されない方は、所持するこのソフトウェアのコピーを削除してください。\r
-</p>\r
-\r
-\r
-<h1>インストールガイド <a name="installation" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<div class="note">\r
-<b>注意:</b> 旧バージョンをすでにご使用の方は、Nucleus Webサイトの<a href="http://www.nucleuscms.org/upgrade.php">アップグレードガイド</a>の方をご覧下さい。\r
-</div>\r
-\r
-<p>\r
-ほんの数ステップでインストールは完了します。手順は以下の通り:\r
-</p>\r
-\r
-<h2>1. 圧縮ファイルの解凍</h2>\r
-\r
-<p>\r
-ダウンロードしたパッケージファイルを解凍します。生成されるディレクトリ構成は以下のようになっているかをご確認下さい。(*はディレクトリ以下にファイルがある事を意味します)\r
-</p>\r
-\r
-<pre>\r
-/*                           (サイト表示用メインファイル)\r
-/nucleus/*                   (サイト管理用ファイル)\r
-/nucleus/javascript/*        (javascripts スクリプト)\r
-/nucleus/libs/*              (Nucleus のコアライブラリ)\r
-/nucleus/language/*          (言語ファイル)\r
-/nucleus/plugins/*           (プラグインファイル)\r
-/nucleus/xmlrpc/*            (XML-RPC インターフェイス用ファイル)\r
-/nucleus/documentation/*     (説明書)\r
-/nucleus/styles/*            (管理エリア専用cssファイル)\r
-/nucleus/forms/*             (入力フォーム部品ファイル)\r
-/extra/*                     (fancy URL用ファイルなど特殊なファイル)\r
-/skins/*                     (スキンファイル [読込み時にも使用])\r
-/media/*                     (添付ファイル [インストール時は空])\r
-</pre>\r
-\r
-<div class="note">\r
-<b>補足:</b><ul>\r
-       <li> 英語バージョンは一部の環境において正常に解凍できないとの報告があります。ファイルサイズが0バイトでないことを確認してください。</li>\r
-       <li>/nucleus/forms/ ディレクトリにあるファイルの拡張子はすべて「.template」です。<br />\r
-       ファイル名が長いため拡張子の一部がカットされている場合がありますので確認してください。\r
-       </li>\r
-</div>\r
-\r
-<h2>2. サーバに転送</h2>\r
-\r
-<p>\r
-FTPソフトを使ってサーバに全部のファイルを転送します。拡張子が.phpのファイルは必ずASCIIモードで転送してください。モードを間違えると動作しません。\r
-</p>\r
-\r
-<h3>パーミッションの変更(やらなくてもOK):</h3>\r
-\r
-<ol>\r
-       <li>\r
-               この段階で <em>config.php</em> のパーミッションを <strong>666</strong>に変更しておくと、後のインストール手順を減らす事ができます。この手順をスキップした方は手動で <em>config.php</em> を編集するだけですのでどちらでも構いません。 (パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)\r
-       </li>\r
-       <li>\r
-               画像など添付ファイルを使用される予定のある方は、mediaディレクトリを作成してこのディレクトリのパーミッションを書き込み可能に変更してください。書き込み可能にしておかないとアップロードが正常に行えません。通常は <strong>777</strong> かと思います(パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)。<br />(root 権限をお持ちの場合は、ディレクトリを <tt>httpd</tt> プロセスが動作しているユーザに <tt>chgrp</tt> してください。通常は <tt>httpd</tt> もしくは<tt>nobody</tt> で、ディレクトリは <tt>chmod 755</tt> になるでしょう。)\r
-       </li>\r
-       <li>\r
-               ファイル編集に SkinFiles プラグインをお使いになる場合は、/skins/ ディレクトリ以下にあるすべてのファイルとディレクトリのパーミッションを変更する必要があるでしょう。ファイルの編集を可能にするには、ファイルのパーミッションは <strong>666</strong> にしておくことになるでしょう(パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)。新しいファイルやディレクトリを作成できるようにするためには、親ディレクトリのパーミッションを <strong>777</strong> にしておくことになるでしょう。\r
-       </li>\r
-</ol>\r
-\r
-\r
-<h2>3. install.phpにアクセス</h2>\r
-\r
-<p>\r
-ブラウザを開いてサーバに転送したinstall.phpにアクセスします。URLは下記のようになります。(<i>www.yoursite.com</i> と <i>yourpath</i>の部分は読み替えてください)\r
-</p>\r
-\r
-<pre>\r
-http://www.yoursite.com/yourpath/install.php\r
-</pre>\r
-\r
-<p>\r
-表示されたページに必要入力事項を入力します。あらかじめ自動検知して入力済の部分がありますが確認をお願いします。送信後に次に行う手順が表示されますのでそれに従って作業してください。(最後にいくつかのファイルを手動でサーバから削除する作業が必要ですのでお忘れなく。)\r
-</p>\r
-\r
-<div class="note">\r
-<b>注意:</b> <i>install.php</i> にアクセスした際、「If you see this text in your browser...」というテキストが表示されたり、 install.phpのダウンロードが促されたりした場合は、そのサーバではphpスクリプトは動作しません。当然、残念ながらphpスクリプトであるNucleusを運用することができません。\r
-</div>\r
-\r
-<h2>4. 完了</h2>\r
-\r
-<p>\r
-インストールが完了したらすぐにトップページにアクセスすることができます。インストール完了画面の一番下にリンクが自動表示されていますのでジャンプして確認してみてください。\r
-</p>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>セキュリティについて <a name="security" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<h2>mySQL のパスワード</h2>\r
-\r
-<p>\r
-NucleusはphpスクリプトからmySQLデータベースにアクセスしますので、phpスクリプト内にmySQLパスワードを書き込んでおく必要があります。 複数ユーザーで使用するサーバの場合は100%安全ではないことをご了解下さい。また、ログイン名とログインパスワードを盗まれる可能性もあることもお知りおきください。phpスクリプトに重要な情報を埋め込んで使用する事の是非について調べたい方は詳しい方におたずね下さい。\r
-</p>\r
-\r
-<p>\r
-この危険性はデータベースを使用するすべてのphpスクリプトに共通する問題です。通常はユーザー側で解決できる問題ではありません。100%安全ではないと言うことを念頭に置いておいて下さい。\r
-</p>\r
-\r
-<h2>クッキー</h2>\r
-\r
-<p>\r
-Nucleus ではログイン情報の保持にクッキーを使用しています。クッキーが盗まれ誰かにログインされる危険性があります。 クッキーを覗いただけではパスワードは推測できません <small>(実際にはパスワードは暗号化して格納しています)</small> が、残念ながら、盗んだクッキーを利用してログインユーザーを偽装することが技術的に可能ではあります。\r
-</p>\r
-\r
-<h2>メディアディレクトリ</h2>\r
-\r
-<p>\r
-添付ファイルを使用する際はメディアディレクトリのパーミッションを777にする必要があります。777にするという事は、そのサーバ上にいる<b>誰もが</b>そのディレクトリを操作できる権限を持つという事です。しかしながら、オンラインでPHPスクリプトからファイルをアップロードするためにはこの設定は必須です。代替案はありません。\r
-</p>\r
-\r
-\r
-\r
-\r
-\r
-<h1>パフォーマンスについて <a name="performance" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-ほかのweblogツールとは異なり、Nucleusではあらゆる表示ページをサーバ上に保存しません。アクセスがあったURLを元にデータを呼出しその都度ページを生成して表示するという方法を採っています(動的ページ生成)。\r
-</p>\r
-\r
-<p>\r
-この仕組みが原因でトラブルが起きる事はまずありません。1秒あたりものすごい数のアクセスのある大規模なサイトであれば動作に問題があるかもしれませんが、今のところはよくわかっていません。そこそこ大きなサイトで、1つのNucleusで30以上のblogを運用しているサイトでも特に問題点はないという報告を受けていることをご紹介しておきます。\r
-</p>\r
-\r
-\r
-\r
-\r
-<!--\r
-<h1>Importing From Other Tools <a name="import" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleus contains some conversion scripts that allow you to import the data from your 'old' weblog tool into your Nucleus weblog. No data is destroyed during this process.\r
-</p>\r
-\r
-<p>\r
-More information is available on the <a href="http://www.nucleuscms.org/convert.php">Nucleus website</a>. At the time of release, the only available conversion tools are those for Blogger and GreyMatter blogs.\r
-</p>\r
--->\r
-\r
-\r
-<h1>コメント受付時のルール  <a name="comments" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleus では、コメントの性質を考えて以下のルールを設けています:\r
-</p>\r
-\r
-<ul>\r
-       <li>90字を越える連続した半角の英数字記号の投稿を禁止 (レイアウトが崩れるため) </li>\r
-       <li>コメント文は3文字以上であること</li>\r
-       <li>コメント文は5,000文字以下であること</li>\r
-       <li>ゲストのお名前は2文字以上であること </li>\r
-       <li>ゲストのお名前やe-mail欄は引用符、改行使用禁止 </li>\r
-       <li>コメント本文の3つの連続改行を1つの改行に置換 (見映え優先)</li>\r
-       <li>HTML タグは使用不可能</li>\r
-       <li>左右の余分なスペースは削除</li>\r
-       <li>URL はリンクテキストを短縮した上で自動リンク</li>\r
-</ul>\r
-\r
-<p>\r
-これらのルールを変更したい場合はコアファイルの書き換えが必要となります。\r
-</p>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>XML-RPC インターフェイス <a name="xmlrpc" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<div class="note">\r
-Nucleusの XML-RPC インターフェイスにつきましては下記URL参照:\r
-<br />\r
-<b>http://www.yourserver.com/yourpath/nucleus/xmlrpc/server.php</b>\r
-</div>\r
-\r
-<p>\r
-<a href="http://www.xmlrpc.com/">XML-RPC</a> とは、XMLを利用してデータを読み書きする規格です。難しく聞こえるかもしれませんが、このXML-RPCという規格を組み込んでいれば他のツールを使ってデータの読み書きが可能になるという事だけ覚えておいてください。\r
-</p>\r
-\r
-<p>\r
-現在の所、<a href="http://plant.blogger.com/api/">Blogger API</a>、<a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a>と<a href="http://www.movabletype.org/docs/mtmanual_programmatic.html#xmlrpc%20api">Movable Type API</a>の3つの規格を充足しています。この規格を使用した記事投稿ツールに興味のある方は、 <a href="http://www.cweblogs.com/wbeditor/">WB Editor</a> (Windows版:日本語対応) または <a href="http://www.kung-foo.tv/ecto/">Ecto</a> (MacOS版:日本語対応不明) を使ってみてください。\r
-</p>\r
-\r
-<p>\r
-このXML-RPC インターフェイスの呼出し方法につきましては、開発者向けドキュメントにて解説しています。 <a href="http://nucleuscms.org/download.php">こちらからダウンロード</a>するか、 <a href="http://nucleuscms.org/documentation/devdocs/xmlrpc.html">オンラインで</a>ご覧下さい。\r
-</p>\r
-\r
-\r
-\r
-<h1>困った時は (FAQ) <a name="trouble" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>Nuleusについて良く聞かれる質問をFAQとしてまとめました。質問される前にご一読下さい。大概のケースでは解決できるのではないでしょうか。\r
-</p>\r
-\r
-<div class="faq">\r
-<div class="question">このようなエラーが表示されるのですが: <q>Cannot send headers. Headers already sent...</q></div>\r
-<div class="answer">\r
-<code>config.php</code>の冒頭と末尾に空白(スペース)が入っている場合によく起こります。<tt>&lt;?</tt> の前、あるいは <tt>?&gt;</tt>よりも後にスペースが挿入されていないかどうか確認してください。このスペースを削除するとエラーは解消されます。また、同様に言語ファイルやインストールしているプラグインのファイルについても同じ事が起きますので確認してみてください。\r
-</div>\r
-</div>\r
-\r
-<div class="faq">\r
-<div class="question">インストール時にinstall.phpにアクセスするとダウンロードを促されるのですが。</div>\r
-<div class="answer">そのサーバはPHPプログラムに対応していません。残念ながらそのサーバでNucleusを運用することはできません。</div>\r
-</div>\r
-\r
-<div class="faq">\r
-<div class="question">トップページにアクセスすると「Connection Error」と表示されました。なぜですか?</div>\r
-<div class="answer">\r
-Nucleusがデータベースサーバにアクセスできないことを意味しています。<i>config.php</i>の最初で定義しているデータベース接続情報が正確かどうかをもう一度確認してみてください(パスワードがxxxxxxのままというケースがよくあります)。 また、本当にmySQLサーバがダウンしているのが原因かもしれません。\r
-</div>\r
-</div>\r
-\r
-<div class="faq">\r
-<div class="question">更新記録ファイルに更新情報が記録されないのですが。</div>\r
-<div class="answer">\r
-更新記録ファイルを使うためにはファイルのパーミッションの適切な設定が必要です。またblog設定にて設定する前にこのファイルを置いておく必要があります(空のファイルを作成してアップロードを先にしてください)。この更新記録ファイルのパーミッションは666、このファイルがあるディレクトリは755としてください。 (パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)\r
-</div>\r
-</div>\r
-\r
-<div class="faq">\r
-<div class="question">XML-RPC インターフェイスを有効にしたくないのですが。</div>\r
-<div class="answer">xmlrpc/ ディレクトリを削除するだけでOKです。何も問題はありません。</div>\r
-</div>\r
-\r
-<div class="faq">\r
-<div class="question">RSSの吐出しをしたくないのですが。</div>\r
-<div class="answer">xml-rss.php ( xml-rss2.php , rsd.php ) を削除して、念のために「xmlrss」(「feeds/rss20」)という名前のスキン/テンプレートを削除してください。</div>\r
-</div>\r
-\r
-\r
-<h1>現在指摘されている問題点 <a name="known" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>制限事項は以下の通りです:\r
-</p>\r
-\r
-<ul>\r
-       <li>このリリース時点においては、Nucleus 3.0への公式なログ移行ツールはありません。今後のログ移行ツールの情報は<a href="http://nucleuscms.org/convert.php">ログ移行ツール情報(英語:最新情報)</a> (<a href="http://japan.nucleuscms.org/convert.php">ログ移行ツール情報(日本語)</a>)に掲載していきます。</li>\r
-       <li>Ctrl + Shift + A ショートカットキーは ICQ/Trillian と衝突します。</li>\r
-       <li>サーバのPHPの設定がセーフモードonの場合、添付ファイルの使用時に問題が生じます。(画像ファイルのサイズが自動判定できない、アップロードがうまくいかない、など) <br />*あらかじめmediaディレクトリに「1」、「2」など記事投稿者の数だけ数字のディレクトリを作成しておいて書き込み可能にしておくことで回避できます。</li>\r
-       <li>RSSの表示が乱れることがあります。(特殊文字変換が原因。&amp;amp; が &amp;amp;amp; となるなど)</li>\r
-       <li>blog設定で入力するメールアドレス欄の登録の上限は255バイトです。ですから、たくさんのメールアドレスを登録することはできません(件数ではなく合計文字数です)。</li>\r
-       <li>Mozilla系のブラウザではプレビュー機能がうまく動作しません。</li>\r
-       <li>Internet Explorer 6 で記事の投稿直後にたまにブラウザが落ちることがあります。ブラウザが落ちても記事の投稿は反映されています。(このトラブル報告から時間が経っているので解決していればよいのですが...)</li>\r
-</ul>\r
-\r
-\r
-\r
-<h1>謝辞 <a name="credits" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>これまでの開発の陰には以下の方々の協力があったことを忘れてはなりません。どうかご一読を。</p>\r
-\r
-<h2>作者</h2>\r
-\r
-<ul>\r
-       <li>Wouter Demuynck</li>\r
-</ul>\r
-\r
-<h2>コアファイル改良</h2>\r
-\r
-<ul>\r
-       <li>Jeroen Budts氏</li>\r
-       <li>Edmond Hui氏</li>\r
-       <li>Appie Verschoor氏 (全文検索)</li>\r
-       <li>その他たくさんの方々... (<a href="history.html">開発履歴</a>をご覧下さい)</li>\r
-</ul>\r
-\r
-<h2>ライブラリなど</h2>\r
-\r
-<ul>\r
-       <li>Jeff MacMichael氏(NP_SkinFiles プラグイン)</li>\r
-       <li>Ivan Fong氏、Moraes氏、Hcgtv氏(Nucleus 3.2 標準スキン)</li>\r
-       <li>各種プラグイン作者の方々</li>\r
-       <li>言語ファイルを提供してくださった方々 (<a href="http://nucleuscms.org/languages.php">NucleusのWebサイトにて言語ファイルのダウンロードができます</a>)</li>\r
-       <li>ロゴを作成してくださったRodrigo Moraes氏</li>\r
-       <li>RSS 2.0 スキン作成された <a href="http://www.xiffy.nl">Xiffy</a>氏</li>\r
-       <li>XML-RPC インターフェイス 部分に使用した <a href="http://phpxmlrpc.sourceforge.net/">'XML-RPC for PHP'</a> (from <a href="http://www.usefulinc.com/">Useful Inc.</a>)</li>\r
-       <li>バックアップ/リストア部分の開発の元にさせていただいた <a href="http://phpbb.sourceforge.net/">phpBB</a> </li>\r
-       <li>即時プレビューのJavaScript コード の元にさせていただいたコードを書いた <a href="http://www.mijnkopthee.nl/">Mijn Kop Thee</a>氏 <small>(dutch)</small> と <a href="http://www.milov.nl/">milov.nl</a>氏</li>\r
-       <li>管理エリアで地球アイコンを使用させていただいている <a href="http://www.matterform.com/qbullets/legend.html">QBullets</a></li>\r
-</ul>\r
-\r
-<h2>感謝</h2>\r
-\r
-<p>\r
-Nucleusが今日に至るのも、また、このほかのたくさんの方々の支援に支えられているからです。御礼申し上げます。</p>\r
-\r
-<ul>\r
-       <li>NucleusのWebサイトにて<a href="http://nucleuscms.org/donators.php">寄付者のリスト</a>を掲示しております。</p>\r
-       <li><a href="http://forum.nucleuscms.org/groupcp.php?g=3">フォーラムを取り仕切ってくださっている方々</a> や <a href="http://forum.nucleuscms.org/memberlist.php?mode=posts&amp;order=DESC">フォーラムに来てくださっている方々</a>にも厚く御礼申し上げます。</li>\r
-</ul>\r
-\r
-\r
-\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: index.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: index.html,v 1.4.2.1 2005/09/27 06:59:11 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus CMS マニュアル</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<div class="heading">
+Nucleus CMS マニュアル
+<i>(v3.22)</i>
+</div>
+
+<div class="note">
+<b>はじめに:</b>
+<ul>
+       <li>このマニュアルは管理エリアにて使用しているポップアップヘルプ(<a href="help.html">help.html</a>)に記載されていない内容を収録しております。Nucleusの<a href="#installation">インストールガイド</a>も収録しておりますので参考にしてください。</li>
+       <li>デベロッパーの方は、 <a href="devdocs/index.html">開発者向けマニュアル</a> を併せてご覧下さい。</li>
+</ul>
+</div>
+
+<h1><a name="toc"></a>目次</h1>
+
+<ul>
+       <li><a href="#about">Nucleus CMS とは</a></li>
+       <li><a href="#license">GPLライセンスについて</a></li>
+       <li><a href="#installation">インストールガイド</a></li>
+       <li><a href="skins.html">スキンとテンプレートの編集(ページデザイン)</a> (別ファイル)</li>
+       <li><a href="#security">セキュリティについて</a></li>
+       <li><a href="#performance">パフォーマンスについて</a></li>
+<!-- <li><a href="#import">Importing from other tools</a></li> -->
+       <li><a href="#comments">コメント受付時のルール</a></li>
+       <li><a href="#xmlrpc">XML-RPC インターフェイスについて</a></li>
+       <li><a href="#trouble">困った時は (FAQ)</a></li>
+       <li><a href="tips.html">Tips &amp; Suggestions</a> (別ファイル)</li>
+       <li><a href="#known">現在指摘されている問題点</a></li>
+       <li><a href="history.html">履歴</a> (別ファイル)</li>
+       <li><a href="#credits">謝辞</a></li>
+</ul>
+
+<h1>Nucleus とは<a name="about" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleus とはコンテンツマネジメントシステム(Contents Management System : 略してCMS)ツールです。PHPで書かれており、blogサイト運営に強力に役立ちます。主な特徴は以下の通りです:
+</p>
+
+<ul>
+       <li>自分のサーバで運用できる</li>
+       <li>複数のblog設置が可能で単一ページに複数blog表示も可能</li>
+       <li>プラグインによる機能拡張</li>
+       <li>コメント投稿の標準装備</li>
+       <li>自動過去ログ作成</li>
+       <li>カテゴリ分け</li>
+       <li>検索機能の標準装備</li>
+       <li>複数人による記事投稿</li>
+       <li>未来の日付での投稿</li>
+       <li>草稿機能</li>
+       <li>拡張性のある管理エリア</li>
+       <li>画像などのファイル添付機能</li>
+       <li>ページデザインのフルカスタマイズ</li>
+       <li>スキンのインポート/エクスポート</li>
+       <li>コメント悪用者のブロック</li>
+       <li>RSS 自動作成</li>
+       <li>インストールが簡単</li>
+       <li>バックアップが簡単</li>
+       <li>XML-RPC インターフェイス ( <a href="http://plant.blogger.com/api/">Blogger API</a> / <a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a> / <a href="http://www.movabletype.org/docs/mtmanual_programmatic.html#xmlrpc%20api">Movable Type API</a> 採用)</li>
+       <li>XHTML 準拠</li>
+       <li>Blogger と GreyMatter blogsからのコンバートツール</li>
+       <li>...</li>
+</ul>
+
+<p>
+Nucleusのインストールには以下の環境が必要です: <small>(不明な点はサーバ管理者にお尋ね下さい)</small>
+</p>
+
+<ul>
+       <li><a href="http://jp.php.net/manual/ja/">PHP</a> (バージョン 4.0.6 以降)</li>
+       <li><a href="http://dev.mysql.com/doc/mysql/ja/">MySQL</a> データベース (バージョン 3.23.38 以降)</li>
+       <li>デザインのカスタマイズをする場合は、<acronym title="Hypertext Markup Language">HTML</acronym> と <acronym title="Cascading Style Sheets">CSS</acronym> の基礎知識</li>
+</ul>
+
+
+
+<p>
+Nucleus はサイト構築にあたって痒いところに手が届くように設計されています。HTMLに関する知識が全くなく、簡単にblogサイトを持ちたい人は インストール不要のホスティング型のblogサービス(<a href="http://dir.yahoo.co.jp/Computers_and_Internet/Internet/Free_Services/Diaries/">Yahoo! JAPANの該当カテゴリ</a>参照)を利用した方が良いかもしれません。
+</p>
+
+
+
+
+<a name="license"></a>
+<h1>ライセンスについて <a name="copyright" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+<br />
+Copyright (C) 2002-2005 The Nucleus Group
+</p>
+
+<p>このプログラムはフリーウェアです。フリーソフトウェア財団(the Free Software Foundation)が公表したGNU一般公共使用許諾(GNU General Public License)の「バージョン2」或いはそれ以降の各バージョンの中からいずれかを選択し、そのバージョンが定める条項に従ったうえで、本プログラムの再配布・改変を認めています。
+</p>
+
+<p>このプログラムがご自身の使用目的に合ったものであれば幸いです。しかしながら 、商品性および特定目的に対する適合性に関する黙示的な保証を含み、いかなる保証もいたしません。詳細につきましてはGNU 一般公有使用許諾書をお読みください。</p>
+
+<p>このプログラムと併せて<a href="../../license.txt">GNU General Public Licenseのコピー</a>をお受け取りのはずかと思いますが、受取られていない方は「Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA」までその旨をお知らせ下さい。</p>
+
+<p>
+このソフトウェアを所有することは、これらの条件に同意することを意味します。これらの条件に同意されない方は、所持するこのソフトウェアのコピーを削除してください。
+</p>
+
+
+<h1>インストールガイド <a name="installation" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<div class="note">
+<b>注意:</b> 旧バージョンをすでにご使用の方は、Nucleus Webサイトの<a href="http://www.nucleuscms.org/upgrade.php">アップグレードガイド</a>の方をご覧下さい。
+</div>
+
+<p>
+ほんの数ステップでインストールは完了します。手順は以下の通り:
+</p>
+
+<h2>1. 圧縮ファイルの解凍</h2>
+
+<p>
+ダウンロードしたパッケージファイルを解凍します。生成されるディレクトリ構成は以下のようになっているかをご確認下さい。(*はディレクトリ以下にファイルがある事を意味します)
+</p>
+
+<pre>
+/*                           (サイト表示用メインファイル)
+/nucleus/*                   (サイト管理用ファイル)
+/nucleus/javascript/*        (javascripts スクリプト)
+/nucleus/libs/*              (Nucleus のコアライブラリ)
+/nucleus/language/*          (言語ファイル)
+/nucleus/plugins/*           (プラグインファイル)
+/nucleus/xmlrpc/*            (XML-RPC インターフェイス用ファイル)
+/nucleus/documentation/*     (説明書)
+/nucleus/styles/*            (管理エリア専用cssファイル)
+/nucleus/forms/*             (入力フォーム部品ファイル)
+/extra/*                     (fancy URL用ファイルなど特殊なファイル)
+/skins/*                     (スキンファイル [読込み時にも使用])
+/media/*                     (添付ファイル [インストール時は空])
+</pre>
+
+<div class="note">
+<b>補足:</b><ul>
+       <li> 英語バージョンは一部の環境において正常に解凍できないとの報告があります。ファイルサイズが0バイトでないことを確認してください。</li>
+       <li>/nucleus/forms/ ディレクトリにあるファイルの拡張子はすべて「.template」です。<br />
+       ファイル名が長いため拡張子の一部がカットされている場合がありますので確認してください。
+       </li>
+</div>
+
+<h2>2. サーバに転送</h2>
+
+<p>
+FTPソフトを使ってサーバに全部のファイルを転送します。拡張子が.phpのファイルは必ずASCIIモードで転送してください。モードを間違えると動作しません。
+</p>
+
+<h3>パーミッションの変更(やらなくてもOK):</h3>
+
+<ol>
+       <li>
+               この段階で <em>config.php</em> のパーミッションを <strong>666</strong>に変更しておくと、後のインストール手順を減らす事ができます。この手順をスキップした方は手動で <em>config.php</em> を編集するだけですのでどちらでも構いません。 (パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)
+       </li>
+       <li>
+               画像など添付ファイルを使用される予定のある方は、mediaディレクトリを作成してこのディレクトリのパーミッションを書き込み可能に変更してください。書き込み可能にしておかないとアップロードが正常に行えません。通常は <strong>777</strong> かと思います(パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)。<br />(root 権限をお持ちの場合は、ディレクトリを <tt>httpd</tt> プロセスが動作しているユーザに <tt>chgrp</tt> してください。通常は <tt>httpd</tt> もしくは<tt>nobody</tt> で、ディレクトリは <tt>chmod 755</tt> になるでしょう。)
+       </li>
+       <li>
+               ファイル編集に SkinFiles プラグインをお使いになる場合は、/skins/ ディレクトリ以下にあるすべてのファイルとディレクトリのパーミッションを変更する必要があるでしょう。ファイルの編集を可能にするには、ファイルのパーミッションは <strong>666</strong> にしておくことになるでしょう(パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)。新しいファイルやディレクトリを作成できるようにするためには、親ディレクトリのパーミッションを <strong>777</strong> にしておくことになるでしょう。
+       </li>
+</ol>
+
+
+<h2>3. install.phpにアクセス</h2>
+
+<p>
+ブラウザを開いてサーバに転送したinstall.phpにアクセスします。URLは下記のようになります。(<i>www.yoursite.com</i> と <i>yourpath</i>の部分は読み替えてください)
+</p>
+
+<pre>
+http://www.yoursite.com/yourpath/install.php
+</pre>
+
+<p>
+表示されたページに必要入力事項を入力します。あらかじめ自動検知して入力済の部分がありますが確認をお願いします。送信後に次に行う手順が表示されますのでそれに従って作業してください。(最後にいくつかのファイルを手動でサーバから削除する作業が必要ですのでお忘れなく。)
+</p>
+
+<div class="note">
+<b>注意:</b> <i>install.php</i> にアクセスした際、「If you see this text in your browser...」というテキストが表示されたり、 install.phpのダウンロードが促されたりした場合は、そのサーバではphpスクリプトは動作しません。当然、残念ながらphpスクリプトであるNucleusを運用することができません。
+</div>
+
+<h2>4. 完了</h2>
+
+<p>
+インストールが完了したらすぐにトップページにアクセスすることができます。インストール完了画面の一番下にリンクが自動表示されていますのでジャンプして確認してみてください。
+</p>
+
+
+
+
+
+
+
+<h1>セキュリティについて <a name="security" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<h2>mySQL のパスワード</h2>
+
+<p>
+NucleusはphpスクリプトからmySQLデータベースにアクセスしますので、phpスクリプト内にmySQLパスワードを書き込んでおく必要があります。 複数ユーザーで使用するサーバの場合は100%安全ではないことをご了解下さい。また、ログイン名とログインパスワードを盗まれる可能性もあることもお知りおきください。phpスクリプトに重要な情報を埋め込んで使用する事の是非について調べたい方は詳しい方におたずね下さい。
+</p>
+
+<p>
+この危険性はデータベースを使用するすべてのphpスクリプトに共通する問題です。通常はユーザー側で解決できる問題ではありません。100%安全ではないと言うことを念頭に置いておいて下さい。
+</p>
+
+<h2>クッキー</h2>
+
+<p>
+Nucleus ではログイン情報の保持にクッキーを使用しています。クッキーが盗まれ誰かにログインされる危険性があります。 クッキーを覗いただけではパスワードは推測できません <small>(実際にはパスワードは暗号化して格納しています)</small> が、残念ながら、盗んだクッキーを利用してログインユーザーを偽装することが技術的に可能ではあります。
+</p>
+
+<h2>メディアディレクトリ</h2>
+
+<p>
+添付ファイルを使用する際はメディアディレクトリのパーミッションを777にする必要があります。777にするという事は、そのサーバ上にいる<b>誰もが</b>そのディレクトリを操作できる権限を持つという事です。しかしながら、オンラインでPHPスクリプトからファイルをアップロードするためにはこの設定は必須です。代替案はありません。
+</p>
+
+
+
+
+
+<h1>パフォーマンスについて <a name="performance" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+ほかのweblogツールとは異なり、Nucleusではあらゆる表示ページをサーバ上に保存しません。アクセスがあったURLを元にデータを呼出しその都度ページを生成して表示するという方法を採っています(動的ページ生成)。
+</p>
+
+<p>
+この仕組みが原因でトラブルが起きる事はまずありません。1秒あたりものすごい数のアクセスのある大規模なサイトであれば動作に問題があるかもしれませんが、今のところはよくわかっていません。そこそこ大きなサイトで、1つのNucleusで30以上のblogを運用しているサイトでも特に問題点はないという報告を受けていることをご紹介しておきます。
+</p>
+
+
+
+
+<!--
+<h1>Importing From Other Tools <a name="import" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleus contains some conversion scripts that allow you to import the data from your 'old' weblog tool into your Nucleus weblog. No data is destroyed during this process.
+</p>
+
+<p>
+More information is available on the <a href="http://www.nucleuscms.org/convert.php">Nucleus website</a>. At the time of release, the only available conversion tools are those for Blogger and GreyMatter blogs.
+</p>
+-->
+
+
+<h1>コメント受付時のルール  <a name="comments" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleus では、コメントの性質を考えて以下のルールを設けています:
+</p>
+
+<ul>
+       <li>90字を越える連続した半角の英数字記号の投稿を禁止 (レイアウトが崩れるため) </li>
+       <li>コメント文は3文字以上であること</li>
+       <li>コメント文は5,000文字以下であること</li>
+       <li>ゲストのお名前は2文字以上であること </li>
+       <li>ゲストのお名前やe-mail欄は引用符、改行使用禁止 </li>
+       <li>コメント本文の3つの連続改行を1つの改行に置換 (見映え優先)</li>
+       <li>HTML タグは使用不可能</li>
+       <li>左右の余分なスペースは削除</li>
+       <li>URL はリンクテキストを短縮した上で自動リンク</li>
+</ul>
+
+<p>
+これらのルールを変更したい場合はコアファイルの書き換えが必要となります。
+</p>
+
+
+
+
+
+
+<h1>XML-RPC インターフェイス <a name="xmlrpc" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<div class="note">
+Nucleusの XML-RPC インターフェイスにつきましては下記URL参照:
+<br />
+<b>http://www.yourserver.com/yourpath/nucleus/xmlrpc/server.php</b>
+</div>
+
+<p>
+<a href="http://www.xmlrpc.com/">XML-RPC</a> とは、XMLを利用してデータを読み書きする規格です。難しく聞こえるかもしれませんが、このXML-RPCという規格を組み込んでいれば他のツールを使ってデータの読み書きが可能になるという事だけ覚えておいてください。
+</p>
+
+<p>
+現在の所、<a href="http://plant.blogger.com/api/">Blogger API</a>、<a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a>と<a href="http://www.movabletype.org/docs/mtmanual_programmatic.html#xmlrpc%20api">Movable Type API</a>の3つの規格を充足しています。この規格を使用した記事投稿ツールに興味のある方は、 <a href="http://www.cweblogs.com/wbeditor/">WB Editor</a> (Windows版:日本語対応) または <a href="http://www.kung-foo.tv/ecto/">Ecto</a> (MacOS版:日本語対応不明) を使ってみてください。
+</p>
+
+<p>
+このXML-RPC インターフェイスの呼出し方法につきましては、開発者向けドキュメントにて解説しています。 <a href="http://nucleuscms.org/download.php">こちらからダウンロード</a>するか、 <a href="http://nucleuscms.org/documentation/devdocs/xmlrpc.html">オンラインで</a>ご覧下さい。
+</p>
+
+
+
+<h1>困った時は (FAQ) <a name="trouble" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>Nuleusについて良く聞かれる質問をFAQとしてまとめました。質問される前にご一読下さい。大概のケースでは解決できるのではないでしょうか。
+</p>
+
+<div class="faq">
+<div class="question">このようなエラーが表示されるのですが: <q>Cannot send headers. Headers already sent...</q></div>
+<div class="answer">
+<code>config.php</code>の冒頭と末尾に空白(スペース)が入っている場合によく起こります。<tt>&lt;?</tt> の前、あるいは <tt>?&gt;</tt>よりも後にスペースが挿入されていないかどうか確認してください。このスペースを削除するとエラーは解消されます。また、同様に言語ファイルやインストールしているプラグインのファイルについても同じ事が起きますので確認してみてください。
+</div>
+</div>
+
+<div class="faq">
+<div class="question">インストール時にinstall.phpにアクセスするとダウンロードを促されるのですが。</div>
+<div class="answer">そのサーバはPHPプログラムに対応していません。残念ながらそのサーバでNucleusを運用することはできません。</div>
+</div>
+
+<div class="faq">
+<div class="question">トップページにアクセスすると「Connection Error」と表示されました。なぜですか?</div>
+<div class="answer">
+Nucleusがデータベースサーバにアクセスできないことを意味しています。<i>config.php</i>の最初で定義しているデータベース接続情報が正確かどうかをもう一度確認してみてください(パスワードがxxxxxxのままというケースがよくあります)。 また、本当にmySQLサーバがダウンしているのが原因かもしれません。
+</div>
+</div>
+
+<div class="faq">
+<div class="question">更新記録ファイルに更新情報が記録されないのですが。</div>
+<div class="answer">
+更新記録ファイルを使うためにはファイルのパーミッションの適切な設定が必要です。またblog設定にて設定する前にこのファイルを置いておく必要があります(空のファイルを作成してアップロードを先にしてください)。この更新記録ファイルのパーミッションは666、このファイルがあるディレクトリは755としてください。 (パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)
+</div>
+</div>
+
+<div class="faq">
+<div class="question">XML-RPC インターフェイスを有効にしたくないのですが。</div>
+<div class="answer">xmlrpc/ ディレクトリを削除するだけでOKです。何も問題はありません。</div>
+</div>
+
+<div class="faq">
+<div class="question">RSSの吐出しをしたくないのですが。</div>
+<div class="answer">xml-rss.php ( xml-rss2.php , rsd.php ) を削除して、念のために「xmlrss」(「feeds/rss20」)という名前のスキン/テンプレートを削除してください。</div>
+</div>
+
+
+<h1>現在指摘されている問題点 <a name="known" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>制限事項は以下の通りです:
+</p>
+
+<ul>
+       <li>このリリース時点においては、Nucleus 3.0への公式なログ移行ツールはありません。今後のログ移行ツールの情報は<a href="http://nucleuscms.org/convert.php">ログ移行ツール情報(英語:最新情報)</a> (<a href="http://japan.nucleuscms.org/convert.php">ログ移行ツール情報(日本語)</a>)に掲載していきます。</li>
+       <li>Ctrl + Shift + A ショートカットキーは ICQ/Trillian と衝突します。</li>
+       <li>サーバのPHPの設定がセーフモードonの場合、添付ファイルの使用時に問題が生じます。(画像ファイルのサイズが自動判定できない、アップロードがうまくいかない、など) <br />*あらかじめmediaディレクトリに「1」、「2」など記事投稿者の数だけ数字のディレクトリを作成しておいて書き込み可能にしておくことで回避できます。</li>
+       <li>RSSの表示が乱れることがあります。(特殊文字変換が原因。&amp;amp; が &amp;amp;amp; となるなど)</li>
+       <li>blog設定で入力するメールアドレス欄の登録の上限は255バイトです。ですから、たくさんのメールアドレスを登録することはできません(件数ではなく合計文字数です)。</li>
+       <li>Mozilla系のブラウザではプレビュー機能がうまく動作しません。</li>
+       <li>Internet Explorer 6 で記事の投稿直後にたまにブラウザが落ちることがあります。ブラウザが落ちても記事の投稿は反映されています。(このトラブル報告から時間が経っているので解決していればよいのですが...)</li>
+</ul>
+
+
+
+<h1>謝辞 <a name="credits" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>これまでの開発の陰には以下の方々の協力があったことを忘れてはなりません。どうかご一読を。</p>
+
+<h2>作者</h2>
+
+<ul>
+       <li>Wouter Demuynck</li>
+</ul>
+
+<h2>コアファイル改良</h2>
+
+<ul>
+       <li>Jeroen Budts氏</li>
+       <li>Edmond Hui氏</li>
+       <li>Appie Verschoor氏 (全文検索)</li>
+       <li>その他たくさんの方々... (<a href="history.html">開発履歴</a>をご覧下さい)</li>
+</ul>
+
+<h2>ライブラリなど</h2>
+
+<ul>
+       <li>Jeff MacMichael氏(NP_SkinFiles プラグイン)</li>
+       <li>Ivan Fong氏、Moraes氏、Hcgtv氏(Nucleus 3.2 標準スキン)</li>
+       <li>各種プラグイン作者の方々</li>
+       <li>言語ファイルを提供してくださった方々 (<a href="http://nucleuscms.org/languages.php">NucleusのWebサイトにて言語ファイルのダウンロードができます</a>)</li>
+       <li>ロゴを作成してくださったRodrigo Moraes氏</li>
+       <li>RSS 2.0 スキン作成された <a href="http://www.xiffy.nl">Xiffy</a>氏</li>
+       <li>XML-RPC インターフェイス 部分に使用した <a href="http://phpxmlrpc.sourceforge.net/">'XML-RPC for PHP'</a> (from <a href="http://www.usefulinc.com/">Useful Inc.</a>)</li>
+       <li>バックアップ/リストア部分の開発の元にさせていただいた <a href="http://phpbb.sourceforge.net/">phpBB</a> </li>
+       <li>即時プレビューのJavaScript コード の元にさせていただいたコードを書いた <a href="http://www.mijnkopthee.nl/">Mijn Kop Thee</a>氏 <small>(dutch)</small> と <a href="http://www.milov.nl/">milov.nl</a>氏</li>
+       <li>管理エリアで地球アイコンを使用させていただいている <a href="http://www.matterform.com/qbullets/legend.html">QBullets</a></li>
+</ul>
+
+<h2>感謝</h2>
+
+<p>
+Nucleusが今日に至るのも、また、このほかのたくさんの方々の支援に支えられているからです。御礼申し上げます。</p>
+
+<ul>
+       <li>NucleusのWebサイトにて<a href="http://nucleuscms.org/donators.php">寄付者のリスト</a>を掲示しております。</p>
+       <li><a href="http://forum.nucleuscms.org/groupcp.php?g=3">フォーラムを取り仕切ってくださっている方々</a> や <a href="http://forum.nucleuscms.org/memberlist.php?mode=posts&amp;order=DESC">フォーラムに来てくださっている方々</a>にも厚く御礼申し上げます。</li>
+</ul>
+
+
+
+</body>
+</html>
index 7ffc079..9493210 100755 (executable)
Binary files a/nucleus/documentation/pics/chmod_menu.png and b/nucleus/documentation/pics/chmod_menu.png differ
index c29b35f..0fa45b8 100755 (executable)
Binary files a/nucleus/documentation/pics/chmod_window.png and b/nucleus/documentation/pics/chmod_window.png differ
index 70fc433..8a0f2ca 100755 (executable)
Binary files a/nucleus/documentation/pics/screen4.png and b/nucleus/documentation/pics/screen4.png differ
index 25c32ff..33062d4 100755 (executable)
Binary files a/nucleus/documentation/pics/screen5.png and b/nucleus/documentation/pics/screen5.png differ
index 73b1625..40e480c 100755 (executable)
Binary files a/nucleus/documentation/pics/skinsandtemplates.png and b/nucleus/documentation/pics/skinsandtemplates.png differ
index dc2238f..6c43f55 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: skins.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - スキンとテンプレートについて</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="heading">\r
-スキン &amp; テンプレート\r
-</div>\r
-\r
-<h1>Introduction</h1>\r
-\r
-<p>\r
-<a href="index.html">Nucleusマニュアルに戻る</a>\r
-</p>\r
-\r
-<p>Nucleusのインストールは無事完了したと思います。ここでは、ページ表示を定義するスキン/テンプレートの編集について説明をしたいと思います:</p>\r
-<ol>\r
-       <li>標準でインストールされるスキン/テンプレートの編集画面に入ります(又はこれを複製した物を編集すればいつでも標準表示に戻れます)</li>\r
-       <li>標準でインストールされるスキン/テンプレートを元に、希望通りの修正を行います</li>\r
-       <li>自分で編集したスキン/テンプレートを元に、スタイルシートを定義します</li>\r
-</ol>\r
-<p>このドキュメントは、これらの作業を行うにあたりヒントになる事項を紹介します。</p>\r
-\r
-<h1><a id="toc"></a>目次</h1>\r
-\r
-<ul>\r
-       <li><a href="#htmlcss">HTMLとCSSの関係について</a></li>\r
-       <li><a href="#defaultskin">標準のデザインで使用するファイル</a></li>\r
-       <li><a href="#templatesvsskins">テンプレートとスキンの相互関係</a></li>\r
-       <li><a href="#skincascade">適用されるスキンの優先順位</a></li>\r
-       <li>Howto:\r
-               <ul>\r
-                       <li><a href="#howto-additem">「アイテムの追加」フォームの埋込み方法</a></li>\r
-                       <li><a href="#howto-cssforms">入力フォームのデザインを定義するスタイルシート情報</a></li>\r
-                       <li><a href="#howto-karma">投票機能を有効にする方法</a></li>\r
-                       <li><a href="#howto-edit">「アイテムの編集」リンクの設置</a></li>\r
-               </ul>\r
-       </li>\r
-       <li><a href="#export">スキン/テンプレートのインポート/エクスポートについて</a></li>\r
-</ul>\r
-\r
-<h1>HTMLとCSSの関係について <a id="htmlcss" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-スキンとテンプレートを編集するにあたっては、HTMLとCSSの基礎知識が必要です。このセクションでは基礎知識を得る事ができる解説サイトを紹介しておきます。\r
-</p>\r
-\r
-<ul>\r
-       <li><a href="http://www.w3schools.com/">W3Schools</a>: online web building tutorials (HTML, XHTML, CSS)</li>\r
-       <li><a href="http://thenoodleincident.com/tutorials/css/">CSS Panic Guide</a>: links to various CSS resources</li>\r
-       <li><a href="http://hotwired.lycos.com/webmonkey/authoring/html_basics/index.html">Webmonkey: HTML Basics</a></li>\r
-       <li><a href="http://hotwired.lycos.com/webmonkey/authoring/stylesheets/">Webmonkey: Stylesheets</a></li>\r
-       <li><a href="http://diveintoaccessibility.org">Dive Into Accessibility</a>: Online book, not really about HTML, but about accessibility and how to make your site more accessible.</li>\r
-</ul>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>標準のデザインで使用するファイル <a id="defaultskin" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>このセクションでは、標準のスキンで使用しているファイル名と、編集の注意点を説明します。</p>\r
-\r
-<p>標準のスキンは以下の3つのファイルを使用しています:</p>\r
-<ol>\r
-       <li><tt>default.css</tt> (v3.0は <tt>grey.css</tt>): ページのデザインを定義するCSS(カスケーディング・スタイルシート)ファイル。色指定やレイアウト指定などを定義します。</li>\r
-       <li><tt>atom.gif</tt>: ページの左上に表示されるロゴ。</li>\r
-       <li><tt>nucleus2.gif</tt>: Nucleus ロゴ。</li>\r
-</ol>\r
-\r
-<p>CSSファイル (<tt>default.css</tt> / <tt>grey.css</tt>) には、標準のスキン/テンプレートを使用した際のページ構成(ブロック構造)を書き入れています。 基本的には<tt>.contents</tt>、 <tt>.logo</tt>、<tt>.menu</tt>の3つのdivブロックとなっています。</p>\r
-\r
-<p><tt>default.css</tt> / <tt>grey.css</tt>を編集するにあたっては、テキストエディタを使用してください。 例えばWindowsに標準添付されている「Notepad」やemacs や TextPadなどです。\r
-「WordPad」、「Word」、「OpenOffice Writer」などは余計なデータが混入しますので、<strong>絶対に使用しないでください</strong>。\r
-</p>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>テンプレートとスキンの相互関係 <a id="templatesvsskins" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleusではページ表示に「スキン」と「テンプレート」の両方を使用します。ではこれら2つの違いは何でしょう?\r
-</p>\r
-\r
-<ol>\r
-       <li>\r
-               <b>スキン</b> とは出力する内容(タグを含むソース)を定義するものです。1つのスキンでもいくつかの種別ごとに定義が必要で、メインページや個別アイテムページ、アーカイブページなど(標準で8タイプ)があります。\r
-               スキン内の定義内容は、どの部分にblogデータを展開するのか、どのテンプレートを使用して展開するのかなどの指定を含みます。\r
-       </li>\r
-       <li>\r
-               <b>テンプレート</b>とは、blogデータを展開するのに使われるひな形です。スキン内で指定されたテンプレートをひな形に、blogデータが指定された場所に出力されるのです。もちろん、複数のスキンで1つのテンプレートを使い回しすることもできますし、逆に1つのページに複数のテンプレートを使用するケースもあります。\r
-       </li>\r
-</ol>\r
-\r
-<p>下のサンプル画像をご覧下さい。ページ全体のソースはスキンで定義しています。その中の赤点線で囲った部分(カテゴリリストとblog記事)はテンプレートをひな形にして展開されたデータ部分です。この赤点線部分をどこに出力させるのかはスキンの方で指定しています。</p>\r
-\r
-<div class="screenshot">\r
-<img src="pics/skinsandtemplates.png" width="300" height="283" alt="Skins and Templates example" />\r
-</div>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>適用されるスキンの優先順位 <a id="skincascade" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-このセクションではページ表示に使うスキンを設定する方法を説明します。\r
-</p>\r
-\r
-<h2>スキンのタイプ</h2>\r
-\r
-<p>\r
-まず最初に、スキンタイプの種別について紹介しておきます。NucleusはアクセスされたURLを元に表示するスキンタイプを判別してページ表示に使います。下記が種別のリストです。(実際のURLは状況に応じて他のクエリが付加され、様々に変化します。)\r
-</p>\r
-\r
-<table>\r
-       <tr><th>クエリ文字列</th><th>スキンの種別</th><th>表示される記事</th></tr>\r
-       <tr><td>?itemid=..</td><td>item(個別アイテム)</td><td>指定された<i>itemid</i>の記事</td></tr>\r
-       <tr><td>?archive=..</td><td>archive(アーカイブ)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事(の該当記事)</td></tr>\r
-       <tr><td>?archivelist=...</td><td>archivelist(アーカイブリスト)</td><td>指定された<i>archivelist</i>のblog記事(のリスト)</td></tr>\r
-       <tr><td>?archivelist</td><td>archivelist(アーカイブリスト)</td><td>標準のblog記事(のリスト)</td></tr>\r
-       <tr><td>?query=...</td><td>search(検索)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事(の該当記事)</td></tr>\r
-       <tr><td>?memberid=..</td><td>member(メンバー)</td><td>なし</td></tr>\r
-       <tr><td>?imagepopup=..</td><td>imagepopup(ポップアップ画像)</td><td>なし (画像のみ表示するポップアップ・ウィンドウ)</td></tr>\r
-       <tr><td><i>(その他 又は クエリなし)</i></td><td>index(メイン)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事</td\r
-       ></tr>\r
-</table>\r
-\r
-<p>\r
-これら7つのタイプに併せて、エラーの場合に使われる <i>error</i> タイプがあります。\r
-</p>\r
-\r
-<h2>スキンの補完適用</h2>\r
-\r
-<p>\r
-上の表において、それぞれのケースで選択適用するblogがどれになるかを併せて説明しています。\r
-表示に使用するスキンは、blog設定で設定した「標準のスキン」です。\r
-</p>\r
-\r
-<p>\r
-新しくスキンを作成する際はすべてのスキンタイプを定義する必要はありません。選択適用するスキンタイプが定義されていない場合は、グローバル設定において設定した「標準のスキン」を代替適用します。(下記参照)。つまり、エラーページのスキンタイプだけを定義したスキンを使用するといったことが可能な訳です。\r
-</p>\r
-\r
-<h2>標準のスキン</h2>\r
-\r
-<p>\r
-Nucleus は「標準のスキン」が必ず必要です。この標準のスキンは、スキンタイプ定義が見あたらない場合の補完表示に使われるからです。もし、標準のスキンにおいても適用すべきスキンタイプの定義が見あたらない場合は、エラーメッセージが表示されてしまいます。\r
-</p>\r
-\r
-<p>\r
-また、指定されたblogが見あたらない場合は、適用するスキンのblog設定そのものが存在しませんから、エラーメッセージを表示するためのページデザインとして「標準のスキン」がかならず必要なのです。\r
-</p>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>Howto: 「アイテムの追加」フォームの埋込み方法 <a id="howto-additem" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleus ではblogページに新規投稿フォームを埋め込む機能を設けています。「新規投稿」リンクをページ内のどこかに作り、このリンクをクリックすると新規投稿フォームの表示/非表示の切り替えができます。 このフォームに入力後プレビュー機能が使えますので、どのように記事が表示されるかを瞬時に確認できて便利です。\r
-</p>\r
-\r
-<p>\r
-方法は、「メインの目次ページ」を編集するだけです。テンプレートの編集は必要ありません。\r
-</p>\r
-\r
-<h2>1. JavaScript コードの呼出し</h2>\r
-<p>\r
-まず最初に、edit.jsをページ上に呼び出すコードを追加します。&lt;head&gt; と &lt;/head&gt; タグの間のどこかに下のコードを追加して下さい。このファイルを呼び出す事によって新規投稿のプレビュー機能とフォームの表示/非表示切替え機能が有効になります。\r
-</p>\r
-\r
-<pre>\r
-&lt;script type="text/javascript"\r
-        src="nucleus/javascript/edit.js"&gt;&lt;/script&gt;\r
-</pre>\r
-\r
-<h2>2. 新規投稿フォームを埋め込む場所を指定</h2>\r
-\r
-<p>\r
-新規投稿フォームを埋め込みたい場所に追加します。"display:none;"は必ず間違えずに記述してください。\r
-</p>\r
-\r
-<pre>\r
-&lt;div id="edit" style="display:none;"&gt;\r
-...\r
-&lt;/div&gt;\r
-</pre>\r
-\r
-<h2>3. 入力フォームとプレビューエリアを埋め込むコードを追加</h2>\r
-\r
-<p>\r
-次に、このdivブロックの中に入力フォームとプレビューエリアを埋め込むコードを追加します。入力フォームは&lt;%additemform%&gt; と、プレビューエリアは &lt;%preview(<i>テンプレート名</i>)%&gt;と書く事によってそこに展開されます。あとは好きなコードを追加してください。 例えば次のように書きます。\r
-</p>\r
-\r
-<pre>\r
-&lt;h2&gt;Add Item&lt;/h2&gt;\r
-&lt;%additemform%&gt;\r
-\r
-&lt;h2&gt;Preview&lt;/h2&gt;\r
-&lt;%preview(mytemplate)%&gt;\r
-</pre>\r
-\r
-<h2>4. 新規投稿リンクの追加</h2>\r
-<p>\r
-最後に、このエリアを表示/非表示させるための切替えリンクをどこか別の場所に追加します。サンプルとして2つのコードを紹介しておきます。</p><p>1つめはシンプルなタイプ:\r
-</p>\r
-\r
-<pre>\r
-&lt;a href="javascript:showedit();"&gt;add item&lt;/a&gt;\r
-</pre>\r
-\r
-<p>\r
-2つ目はページ左上隅に切替えリンクを配置するタイプ:\r
-</p>\r
-\r
-<pre>\r
-&lt;div style="position: absolute; left: 0px;\r
-            top: 0px; width: 10px; height: 10px"\r
-     onclick="javascript:showedit();"&gt;\r
-&lt;/div&gt;\r
-</pre>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>Howto: 入力フォームのデザインを定義するスタイルシート情報 <a id="howto-cssforms" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-例えばスキン内に。 &lt;%searchform%&gt; や &lt;%commentform%&gt; と記述することによって、それぞれ検索フォームやコメント投稿フォームに置き換えられてページ内に表示されます。これらの入力フォームやボタンや入力フォーム領域には標準でクラス名が定義されていますので、cssファイル内でクラスの定義をすればスタイルの変更が可能です。</p>\r
-\r
-<p>\r
-入力フォーム領域のクラス名は下記のように指定されています。クラス名はフォーム全体を囲ったdivブロックを修飾しています。\r
-</p>\r
-\r
-<table>\r
-       <tr>\r
-               <th>フォームの種類</th>\r
-               <th>記述コード</th>\r
-               <th>CSS クラス名</th>\r
-       </tr>\r
-       <tr>\r
-               <td>新規投稿フォーム</td>\r
-               <td>&lt;%additemform%&gt;</td>\r
-               <td>.blogform</td>\r
-       </tr>\r
-       <tr>\r
-               <td>コメント投稿フォーム</td>\r
-               <td>&lt;%commentform%&gt;</td>\r
-               <td>.commentform</td>\r
-       </tr>\r
-       <tr>\r
-               <td>ログインフォーム</td>\r
-               <td>&lt;%loginform%&gt;</td>\r
-               <td>.loginform</td>\r
-       </tr>\r
-       <tr>\r
-               <td>検索フォーム</td>\r
-               <td>&lt;%searchform%&gt;</td>\r
-               <td>.searchform</td>\r
-       </tr>\r
-       <tr>\r
-               <td>メンバー間のメール送信フォーム</td>\r
-               <td>&lt;%membermailform%&gt;</td>\r
-               <td>.mailform</td>\r
-       </tr>\r
-</table>\r
-\r
-<p>\r
-ボタンと入力フォームのクラス名は以下のように指定しています。\r
-</p>\r
-\r
-<table>\r
-       <tr>\r
-               <th>タイプ</th>\r
-               <th>CSS クラス名</th>\r
-       </tr>\r
-       <tr>\r
-               <td>単行/複数行のテキスト入力フィールド</td>\r
-               <td>.formfield</td>\r
-       </tr>\r
-       <tr>\r
-               <td>ボタン</td>\r
-               <td>.formbutton</td>\r
-       </tr>\r
-</table>\r
-\r
-<p>\r
-スタイルシート内で実際にこれらを定義するサンプルです:\r
-</p>\r
-\r
-<pre>\r
-/* applies to all input fields */\r
-.formfield {\r
-  background-color: gray;\r
-}\r
-\r
-/* only applies to buttons for comment forms */\r
-.commentform .formbutton {\r
-  border: 1px solid #000;\r
-  background-color: #ddd;\r
-  color: #000;\r
-  font-size: xx-large;\r
-}\r
-</pre>\r
-\r
-<p>上のサンプルでは、Nucleusが自動生成するテキスト入力フィールドの全部が「 背景色 = 濃灰色 」で、コメント投稿フォーム内のボタンだけが「 文字サイズ = 大 / 四辺 = 黒色の1ピクセルの太さの線 / 文字色 = 黒 / 背景色 = 淡灰色 」とする、と定義しています。</p>\r
-\r
-\r
-<h1>Howto: 投票機能を有効にする方法 <a id="howto-karma" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>標準添付のスキン/テンプレートでは投票機能を表示させていません(使わない方がよいのかもしれません)。ここでは投票機能が表示されるようにテンプレートを書換える方法を紹介します。</p>\r
-\r
-<h2>1. 表示に使用する「メインの目次ページ」タイプで指定したテンプレートの編集画面を開く</h2>\r
-\r
-<p><tt>'default'</tt> ( v3.0では <tt>'grey/short'</tt> ) という名前のテンプレートの編集画面を開きます。(このテンプレート名はあくまでも新規インストール直後の状態で適用されているものです。複製や新規作成などにより変更している場合は読み替えてください。)</p>\r
-\r
-<h2>2. アイテムの本体部分の書換え</h2>\r
-\r
-<p>アイテムの本体部分の最後の方を以下のように書換えます:</p>\r
-\r
-<pre>\r
-&lt;div class="iteminfo"&gt;\r
-  &lt;%time%&gt; -\r
-  &lt;a href="&lt;%authorlink%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt; -\r
-  karma: &lt;%karma%&gt;\r
-    [&lt;a href="&lt;%karmaposlink%&gt;"&gt;+&lt;/a&gt;/&lt;a href="&lt;%karmaneglink%&gt;"&gt;-&lt;/a&gt;] -\r
-  &lt;%edit%&gt;\r
-  &lt;%comments%&gt;\r
-&lt;/div&gt;\r
-</pre>\r
-\r
-<p>編集後にメインページにアクセスすると記事詳細情報が下のように表示が変更されているのが確認できると思います:</p>\r
-\r
-<div><i>9:00:39 PM - <a href="">God</a> - karma: 5 [<a href="">+</a>/<a href="">-</a>] - <a href="">edit</a></i></div>\r
-\r
-<h2>3. アイテムの個別ページのテンプレート</h2>\r
-\r
-<p>上記の編集作業ではメインページでのみ投票スコアが表示される状態です。アイテムの個別ページでも同様に投票を表示したい場合は、スキンの「アイテムの個別ページ」で使用しているテンプレートに同様の修正を行ってください。新規インストール直後の状態では<tt>'detailed'</tt> ( v3.0では <tt>'grey/full'</tt> ) という名前のテンプレートがそれに該当します。</p>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>Howto: 「アイテムの編集」リンクの設置 <a id="howto-edit" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>Nucleus標準添付のスキンでは記事の編集権限を持つユーザーにだけ表示される「アイテムの編集」リンクを埋め込んでいます。 ここではどこでそのリンクを埋め込んでいるのかを説明します。</p>\r
-\r
-<h2>「アイテムを編集するためのリンク」の表示の設定</h2>\r
-\r
-<p>テンプレートの編集画面の「アイテムを編集するためのリンク」部分でアイテムの編集リンクの表示を定義しています。 標準添付のテンプレートでは以下のように定義しています:</p>\r
-<pre><code>&lt;a href="&lt;%editlink%&gt;" onclick="&lt;%editpopupcode%&gt;"&gt;edit&lt;/a&gt;</code></pre>\r
-\r
-<p>ポップアップ編集画面ではなく管理エリアの記事編集画面を使いたい場合は次のように修正してください:</p>\r
-\r
-<pre><code>&lt;a href="nucleus/index.php?action=itemedit&amp;amp;itemid=&lt;%itemid%&gt;"&gt;edit&lt;/a&gt;\r
-</code></pre>\r
-\r
-<h2>「アイテムの編集」リンクを表示する場所の指定</h2>\r
-\r
-<p>表示形式を決めたら、次にどこにこれを表示するのかを設定します。通常なら「アイテムの本体」の中に<code>&lt;%edit%&gt;</code>と記述します。この<code>&lt;%edit%&gt;</code>の部分が上で設定した表示形式に置き換えられてコードが自動生成されます。</p>\r
-\r
-<p>「アイテムの本体」の中の記述例は <a href="#howto-karma">投票機能を有効にする方法</a> を参照してください。</p>\r
-\r
-\r
-\r
-\r
-<h1>スキン/テンプレートのインポート/エクスポートについて <a id="export" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>バージョンv2.0以降からスキンとテンプレートをインポート/エクスポートする機能が追加されています。ここでは、スキンを作成する手順を追ってその機能をわかりやすく説明したいと思います。</p>\r
-\r
-<h2>新規スキンの作成</h2>\r
-\r
-<ol>\r
-       <li>\r
-               <p>まず管理エリアにてスキンを新規作成します。管理エリアに入り、「スキンの編集」画面の一番下にある「新しいスキン」の所に入力します。ここでは例として名前を「<strong>vista</strong>」とします。</p>\r
-       </li>\r
-       <li>\r
-               <p>スキンの一覧にこの「vista」という名前のスキンが追加されていますので、その行の右横「編集」リンクをクリックして編集画面に入ります。content type は 「<code>text/html</code>」としてください。 これから説明する作業を行うにあたって必要な設定となりますので、よく確認して設定してください。</p>\r
-               <p>さらにその下の <code>Include モード</code> と <code>Include プリフィックス</code> もよく注意して設定してください。スキンを移植したり配布したりする事を考えて、デザインに使用する画像やcssファイルなどは1つのディレクトリの中に格納しておく事とします。 </p>\r
-                <p><code>Include モード</code> と <code>Include プリフィックス</code> が適用される仕組みを簡単に説明しておきましょう。<code>config.php</code>で定義している「<code>$DIR_SKINS</code>」の値と、管理エリアのグローバル設定の中で設定している「<code>スキンURL</code>」が関連してきます。\r
-                例えばそれぞれ以下のような値になっているとします:</p>\r
-               <pre><code>/home/user/example/htdocs/skins/\r
-http://example.org/skins/</code></pre>\r
-               <p>この設定を準用してデザインに使用する画像やcssファイルなどを格納するディレクトリを次のように設定させます</p>\r
-               <pre><code>/home/user/example/htdocs/skins/vista/\r
-http://example.org/skins/vista/</code></pre>\r
-               <p>このように準用適用させる設定が<code>Include モード</code>です。準用させるためには<code>Include モード</code>を「<strong>skindirを使う</strong>」にしてください。</p>\r
-               <p>さらに <strong><code>Include プリフィックス</code></strong> は 「<strong>vista/</strong>」と入力してください。</p>\r
-               <p>この画面の設定:</p>\r
-               <ul>\r
-                       <li><strong>名前</strong>: vista</li>\r
-                       <li><strong>Content Type</strong>: text/html</li>\r
-                       <li><strong>Include モード</strong>: skindirを使う</li>\r
-                       <li><strong>Include プリフィックス</strong>: vista/</li>\r
-               </ul>\r
-       </li>\r
-</ol>\r
-\r
-<h2>スキンの編集</h2>\r
-\r
-<p>スキン内に記述するコードのうち、<code>include</code> と <code>phpinclude</code> と <code>parsedinclude</code>で読み込むファイルの場所指定に、この「<code>Include モード</code>」 と 「<code>Include プリフィックス</code>」の設定が適用されます。また、このほかに<code>skinfile</code>という記述コードでもこれらの設定を読み込んでURLの自動生成が行われます。</p>\r
-\r
-<p>例えばスキン内に以下のように記述したとします:</p>\r
-\r
-<pre><code>&lt;%skinfile(myFile.jpg)%&gt;</code></pre>\r
-\r
-<p>これはページ生成時に以下のように自動変換されます:</p>\r
-\r
-<pre><code>http://example.org/skins/vista/myFile.jpg</code></pre>\r
-\r
-<p>仕組みの説明はこのくらいにして、実際にスキンを編集してみましょう。<code>vista/</code> ディレクトリの中に「<code>pagefoot.inc</code>」 と 「<code>pagehead.inc</code>」 という名前の2つのファイルを作成して、これらのファイルを使い回す事によって作業効率を上げる方法をご紹介します:</p>\r
-\r
-<h3>pagehead.inc</h3>\r
-\r
-<pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;\r
-&lt;html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"&gt;\r
-&lt;head&gt;\r
-       &lt;title&gt;My Site&lt;/title&gt;\r
-       &lt;link rel="stylesheet" type="text/css" href="&lt;%skinfile(layout.css)%&gt;" /&gt;\r
-&lt;/head&gt;\r
-&lt;body&gt;\r
-\r
-&lt;div id="contents"&gt;</code></pre>\r
-\r
-<h3>pagefoot.inc</h3>\r
-\r
-<pre><code>&lt;/div&gt;&lt;!-- contents div end --&gt;\r
-\r
-&lt;div id="stuffbar"&gt;\r
-       &lt;h2&gt;Navigation&lt;/h2&gt;\r
-\r
-       &lt;ul&gt;\r
-               &lt;li&gt;&lt;a href="&lt;%todaylink%&gt;"&gt;Today&lt;/a&gt;&lt;/li&gt;\r
-               &lt;li&gt;&lt;a href="&lt;%archivelink%&gt;"&gt;Archives&lt;/a&gt;&lt;/li&gt;\r
-       &lt;/ul&gt;\r
-\r
-       &lt;h2&gt;About&lt;/h2&gt;\r
-\r
-       &lt;ul&gt;\r
-               &lt;li&gt;&lt;a href="http://www.nucleuscms.org/"&gt;Nucleus&lt;/a&gt; Power!&lt;/li&gt;\r
-       &lt;/ul&gt;\r
-&lt;/div&gt;&lt;!-- stuffbar end --&gt;\r
-\r
-&lt;/body&gt;\r
-&lt;/html&gt;</code></pre>\r
-\r
-<p>このような共通して使えるコードを書いたファイルを使い回します: (上のサンプルは重要な部分だけを抜粋した物です。実際に使用する際は標準添付のスキンを参考に、もっとたくさんのコードを書き込んだ方が良いでしょう。)</p>\r
-\r
-<h3>メインの目次ページ</h3>\r
-<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;\r
-\r
-&lt;h1&gt;My Blog&lt;/h1&gt;\r
-\r
-&lt;%blog(vista/main,10)%&gt;\r
-\r
-&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>\r
-\r
-<h3>アイテムの個別ページ</h3>\r
-\r
-<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;\r
-\r
-&lt;h1&gt;My Blog&lt;/h1&gt;\r
-\r
-&lt;h2&gt;Item&lt;/h2&gt;\r
-&lt;%item(vista/detailed)%&gt;\r
-\r
-&lt;h2&gt;Comments&lt;/h2&gt;\r
-&lt;%comments(vista/detailed)%&gt;\r
-\r
-&lt;h2&gt;Add Comment&lt;/h2&gt;\r
-&lt;%commentform%&gt;\r
-\r
-&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>\r
-\r
-<p>上のサンプルでは使用するテンプレート名を「<strong>vista/main</strong>」 、 「<strong>vista/detailed</strong>」と指定していることに注意してください。テンプレート名はスキン名と揃えて置いた方が後々編集する時にわかりやすくて便利です。単純に標準添付の 「<strong>default</strong>」 と 「<strong>detailed</strong>」(v3.0 では「<strong>grey/short</strong>」 と 「<strong>grey/full</strong>」) をそれぞれ複製して名前を付け替えただけの物でも構いません。</p>\r
-\r
-<h3>アーカイブ一覧ページ</h3>\r
-\r
-<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;\r
-\r
-&lt;h1&gt;My Blog&lt;/h1&gt;\r
-\r
-&lt;%archivelist(vista/main)%&gt;\r
-\r
-&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>\r
-\r
-<h3>アーカイブページ</h3>\r
-\r
-<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;\r
-\r
-&lt;h1&gt;My Blog&lt;/h1&gt;\r
-\r
-&lt;%archive(vista/main)%&gt;\r
-\r
-&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>\r
-\r
-<h2>スキンをエクスポートする</h2>\r
-\r
-<p>これでvistaスキンのできあがりです。では、このスキンをエクスポートしてみましょう。管理エリアの「スキンのインポート/エクスポート」画面に入り、以下の作業を行います:</p>\r
-\r
-<ol>\r
-       <li>書き出すスキン/テンプレートを選択するリストの中から「vista」、「vista/detailed」、「vista/main」の3つを選択してください。</li>\r
-       <li>その下の「追加情報」欄にこれから書き出すスキン/テンプレートについての説明書きを(必要ならば)入力し、<code>選択されたスキン/テンプレートを書き出し</code> ボタンを押します。 Nucleusにて「<code>skinbackup.xml</code>」の自動作成が行われます。</li>\r
-       <li>この「<code>skinbackup.xml</code>」ファイルを保存し、<code>vista/</code>ディレクトリの中に他の画像ファイルなどと一緒に格納してください。</li>\r
-       <li>この<code>vista/</code>ディレクトリごとzipファイルなどに圧縮します。</li>\r
-       <li>これでスキンパッケージのできあがりです。この圧縮ファイルを配布するだけでデザインの配布ができます。</li>\r
-</ol>\r
-\r
-<h2>スキンをインポートする</h2>\r
-\r
-<p>スキンをインポートするには、上と逆の手順を踏みます:</p>\r
-\r
-<ol>\r
-       <li>圧縮ファイルを解凍して生成されたディレクトリ(<code>vista/</code>)をサーバのスキンディレクトリ内に配置します(ひとつのスキンで1つのディレクトリを使用します)。</li>\r
-       <li>管理エリアの「スキンのインポート/エクスポート」画面にて、ドロップダウンリストから「vista」を選択し、「読み込み」ボタンを押します。</li>\r
-       <li>表示される説明に従います。(すでに同じ名前のスキン/テンプレートが存在する場合はその旨の警告が出ますので、上書きしたい場合は「既に存在するスキンを上書きする (ぶつかるスキン名を参照) 」のチェックを入れてから読み込むボタンを押せば上書きされます。)</li>\r
-       <li>これでスキンの読込みは完了です。ページ表示に使用したい場合はblog設定でこのスキン名を選択すれば適用されます。</li>\r
-</ol>\r
-\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: skins.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: skins.html,v 1.4 2005/03/19 08:34:53 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - スキンとテンプレートについて</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<div class="heading">
+スキン &amp; テンプレート
+</div>
+
+<h1>Introduction</h1>
+
+<p>
+<a href="index.html">Nucleusマニュアルに戻る</a>
+</p>
+
+<p>Nucleusのインストールは無事完了したと思います。ここでは、ページ表示を定義するスキン/テンプレートの編集について説明をしたいと思います:</p>
+<ol>
+       <li>標準でインストールされるスキン/テンプレートの編集画面に入ります(又はこれを複製した物を編集すればいつでも標準表示に戻れます)</li>
+       <li>標準でインストールされるスキン/テンプレートを元に、希望通りの修正を行います</li>
+       <li>自分で編集したスキン/テンプレートを元に、スタイルシートを定義します</li>
+</ol>
+<p>このドキュメントは、これらの作業を行うにあたりヒントになる事項を紹介します。</p>
+
+<h1><a id="toc"></a>目次</h1>
+
+<ul>
+       <li><a href="#htmlcss">HTMLとCSSの関係について</a></li>
+       <li><a href="#defaultskin">標準のデザインで使用するファイル</a></li>
+       <li><a href="#templatesvsskins">テンプレートとスキンの相互関係</a></li>
+       <li><a href="#skincascade">適用されるスキンの優先順位</a></li>
+       <li>Howto:
+               <ul>
+                       <li><a href="#howto-additem">「アイテムの追加」フォームの埋込み方法</a></li>
+                       <li><a href="#howto-cssforms">入力フォームのデザインを定義するスタイルシート情報</a></li>
+                       <li><a href="#howto-karma">投票機能を有効にする方法</a></li>
+                       <li><a href="#howto-edit">「アイテムの編集」リンクの設置</a></li>
+               </ul>
+       </li>
+       <li><a href="#export">スキン/テンプレートのインポート/エクスポートについて</a></li>
+</ul>
+
+<h1>HTMLとCSSの関係について <a id="htmlcss" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+スキンとテンプレートを編集するにあたっては、HTMLとCSSの基礎知識が必要です。このセクションでは基礎知識を得る事ができる解説サイトを紹介しておきます。
+</p>
+
+<ul>
+       <li><a href="http://www.w3schools.com/">W3Schools</a>: online web building tutorials (HTML, XHTML, CSS)</li>
+       <li><a href="http://thenoodleincident.com/tutorials/css/">CSS Panic Guide</a>: links to various CSS resources</li>
+       <li><a href="http://hotwired.lycos.com/webmonkey/authoring/html_basics/index.html">Webmonkey: HTML Basics</a></li>
+       <li><a href="http://hotwired.lycos.com/webmonkey/authoring/stylesheets/">Webmonkey: Stylesheets</a></li>
+       <li><a href="http://diveintoaccessibility.org">Dive Into Accessibility</a>: Online book, not really about HTML, but about accessibility and how to make your site more accessible.</li>
+</ul>
+
+
+
+
+
+
+
+<h1>標準のデザインで使用するファイル <a id="defaultskin" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>このセクションでは、標準のスキンで使用しているファイル名と、編集の注意点を説明します。</p>
+
+<p>標準のスキンは以下の3つのファイルを使用しています:</p>
+<ol>
+       <li><tt>default.css</tt> (v3.0は <tt>grey.css</tt>): ページのデザインを定義するCSS(カスケーディング・スタイルシート)ファイル。色指定やレイアウト指定などを定義します。</li>
+       <li><tt>atom.gif</tt>: ページの左上に表示されるロゴ。</li>
+       <li><tt>nucleus2.gif</tt>: Nucleus ロゴ。</li>
+</ol>
+
+<p>CSSファイル (<tt>default.css</tt> / <tt>grey.css</tt>) には、標準のスキン/テンプレートを使用した際のページ構成(ブロック構造)を書き入れています。 基本的には<tt>.contents</tt>、 <tt>.logo</tt>、<tt>.menu</tt>の3つのdivブロックとなっています。</p>
+
+<p><tt>default.css</tt> / <tt>grey.css</tt>を編集するにあたっては、テキストエディタを使用してください。 例えばWindowsに標準添付されている「Notepad」やemacs や TextPadなどです。
+「WordPad」、「Word」、「OpenOffice Writer」などは余計なデータが混入しますので、<strong>絶対に使用しないでください</strong>。
+</p>
+
+
+
+
+
+
+<h1>テンプレートとスキンの相互関係 <a id="templatesvsskins" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleusではページ表示に「スキン」と「テンプレート」の両方を使用します。ではこれら2つの違いは何でしょう?
+</p>
+
+<ol>
+       <li>
+               <b>スキン</b> とは出力する内容(タグを含むソース)を定義するものです。1つのスキンでもいくつかの種別ごとに定義が必要で、メインページや個別アイテムページ、アーカイブページなど(標準で8タイプ)があります。
+               スキン内の定義内容は、どの部分にblogデータを展開するのか、どのテンプレートを使用して展開するのかなどの指定を含みます。
+       </li>
+       <li>
+               <b>テンプレート</b>とは、blogデータを展開するのに使われるひな形です。スキン内で指定されたテンプレートをひな形に、blogデータが指定された場所に出力されるのです。もちろん、複数のスキンで1つのテンプレートを使い回しすることもできますし、逆に1つのページに複数のテンプレートを使用するケースもあります。
+       </li>
+</ol>
+
+<p>下のサンプル画像をご覧下さい。ページ全体のソースはスキンで定義しています。その中の赤点線で囲った部分(カテゴリリストとblog記事)はテンプレートをひな形にして展開されたデータ部分です。この赤点線部分をどこに出力させるのかはスキンの方で指定しています。</p>
+
+<div class="screenshot">
+<img src="pics/skinsandtemplates.png" width="300" height="283" alt="Skins and Templates example" />
+</div>
+
+
+
+
+
+
+
+
+
+<h1>適用されるスキンの優先順位 <a id="skincascade" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+このセクションではページ表示に使うスキンを設定する方法を説明します。
+</p>
+
+<h2>スキンのタイプ</h2>
+
+<p>
+まず最初に、スキンタイプの種別について紹介しておきます。NucleusはアクセスされたURLを元に表示するスキンタイプを判別してページ表示に使います。下記が種別のリストです。(実際のURLは状況に応じて他のクエリが付加され、様々に変化します。)
+</p>
+
+<table>
+       <tr><th>クエリ文字列</th><th>スキンの種別</th><th>表示される記事</th></tr>
+       <tr><td>?itemid=..</td><td>item(個別アイテム)</td><td>指定された<i>itemid</i>の記事</td></tr>
+       <tr><td>?archive=..</td><td>archive(アーカイブ)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事(の該当記事)</td></tr>
+       <tr><td>?archivelist=...</td><td>archivelist(アーカイブリスト)</td><td>指定された<i>archivelist</i>のblog記事(のリスト)</td></tr>
+       <tr><td>?archivelist</td><td>archivelist(アーカイブリスト)</td><td>標準のblog記事(のリスト)</td></tr>
+       <tr><td>?query=...</td><td>search(検索)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事(の該当記事)</td></tr>
+       <tr><td>?memberid=..</td><td>member(メンバー)</td><td>なし</td></tr>
+       <tr><td>?imagepopup=..</td><td>imagepopup(ポップアップ画像)</td><td>なし (画像のみ表示するポップアップ・ウィンドウ)</td></tr>
+       <tr><td><i>(その他 又は クエリなし)</i></td><td>index(メイン)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事</td
+       ></tr>
+</table>
+
+<p>
+これら7つのタイプに併せて、エラーの場合に使われる <i>error</i> タイプがあります。
+</p>
+
+<h2>スキンの補完適用</h2>
+
+<p>
+上の表において、それぞれのケースで選択適用するblogがどれになるかを併せて説明しています。
+表示に使用するスキンは、blog設定で設定した「標準のスキン」です。
+</p>
+
+<p>
+新しくスキンを作成する際はすべてのスキンタイプを定義する必要はありません。選択適用するスキンタイプが定義されていない場合は、グローバル設定において設定した「標準のスキン」を代替適用します。(下記参照)。つまり、エラーページのスキンタイプだけを定義したスキンを使用するといったことが可能な訳です。
+</p>
+
+<h2>標準のスキン</h2>
+
+<p>
+Nucleus は「標準のスキン」が必ず必要です。この標準のスキンは、スキンタイプ定義が見あたらない場合の補完表示に使われるからです。もし、標準のスキンにおいても適用すべきスキンタイプの定義が見あたらない場合は、エラーメッセージが表示されてしまいます。
+</p>
+
+<p>
+また、指定されたblogが見あたらない場合は、適用するスキンのblog設定そのものが存在しませんから、エラーメッセージを表示するためのページデザインとして「標準のスキン」がかならず必要なのです。
+</p>
+
+
+
+
+
+
+
+
+<h1>Howto: 「アイテムの追加」フォームの埋込み方法 <a id="howto-additem" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleus ではblogページに新規投稿フォームを埋め込む機能を設けています。「新規投稿」リンクをページ内のどこかに作り、このリンクをクリックすると新規投稿フォームの表示/非表示の切り替えができます。 このフォームに入力後プレビュー機能が使えますので、どのように記事が表示されるかを瞬時に確認できて便利です。
+</p>
+
+<p>
+方法は、「メインの目次ページ」を編集するだけです。テンプレートの編集は必要ありません。
+</p>
+
+<h2>1. JavaScript コードの呼出し</h2>
+<p>
+まず最初に、edit.jsをページ上に呼び出すコードを追加します。&lt;head&gt; と &lt;/head&gt; タグの間のどこかに下のコードを追加して下さい。このファイルを呼び出す事によって新規投稿のプレビュー機能とフォームの表示/非表示切替え機能が有効になります。
+</p>
+
+<pre>
+&lt;script type="text/javascript"
+        src="nucleus/javascript/edit.js"&gt;&lt;/script&gt;
+</pre>
+
+<h2>2. 新規投稿フォームを埋め込む場所を指定</h2>
+
+<p>
+新規投稿フォームを埋め込みたい場所に追加します。"display:none;"は必ず間違えずに記述してください。
+</p>
+
+<pre>
+&lt;div id="edit" style="display:none;"&gt;
+...
+&lt;/div&gt;
+</pre>
+
+<h2>3. 入力フォームとプレビューエリアを埋め込むコードを追加</h2>
+
+<p>
+次に、このdivブロックの中に入力フォームとプレビューエリアを埋め込むコードを追加します。入力フォームは&lt;%additemform%&gt; と、プレビューエリアは &lt;%preview(<i>テンプレート名</i>)%&gt;と書く事によってそこに展開されます。あとは好きなコードを追加してください。 例えば次のように書きます。
+</p>
+
+<pre>
+&lt;h2&gt;Add Item&lt;/h2&gt;
+&lt;%additemform%&gt;
+
+&lt;h2&gt;Preview&lt;/h2&gt;
+&lt;%preview(mytemplate)%&gt;
+</pre>
+
+<h2>4. 新規投稿リンクの追加</h2>
+<p>
+最後に、このエリアを表示/非表示させるための切替えリンクをどこか別の場所に追加します。サンプルとして2つのコードを紹介しておきます。</p><p>1つめはシンプルなタイプ:
+</p>
+
+<pre>
+&lt;a href="javascript:showedit();"&gt;add item&lt;/a&gt;
+</pre>
+
+<p>
+2つ目はページ左上隅に切替えリンクを配置するタイプ:
+</p>
+
+<pre>
+&lt;div style="position: absolute; left: 0px;
+            top: 0px; width: 10px; height: 10px"
+     onclick="javascript:showedit();"&gt;
+&lt;/div&gt;
+</pre>
+
+
+
+
+
+
+<h1>Howto: 入力フォームのデザインを定義するスタイルシート情報 <a id="howto-cssforms" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+例えばスキン内に。 &lt;%searchform%&gt; や &lt;%commentform%&gt; と記述することによって、それぞれ検索フォームやコメント投稿フォームに置き換えられてページ内に表示されます。これらの入力フォームやボタンや入力フォーム領域には標準でクラス名が定義されていますので、cssファイル内でクラスの定義をすればスタイルの変更が可能です。</p>
+
+<p>
+入力フォーム領域のクラス名は下記のように指定されています。クラス名はフォーム全体を囲ったdivブロックを修飾しています。
+</p>
+
+<table>
+       <tr>
+               <th>フォームの種類</th>
+               <th>記述コード</th>
+               <th>CSS クラス名</th>
+       </tr>
+       <tr>
+               <td>新規投稿フォーム</td>
+               <td>&lt;%additemform%&gt;</td>
+               <td>.blogform</td>
+       </tr>
+       <tr>
+               <td>コメント投稿フォーム</td>
+               <td>&lt;%commentform%&gt;</td>
+               <td>.commentform</td>
+       </tr>
+       <tr>
+               <td>ログインフォーム</td>
+               <td>&lt;%loginform%&gt;</td>
+               <td>.loginform</td>
+       </tr>
+       <tr>
+               <td>検索フォーム</td>
+               <td>&lt;%searchform%&gt;</td>
+               <td>.searchform</td>
+       </tr>
+       <tr>
+               <td>メンバー間のメール送信フォーム</td>
+               <td>&lt;%membermailform%&gt;</td>
+               <td>.mailform</td>
+       </tr>
+</table>
+
+<p>
+ボタンと入力フォームのクラス名は以下のように指定しています。
+</p>
+
+<table>
+       <tr>
+               <th>タイプ</th>
+               <th>CSS クラス名</th>
+       </tr>
+       <tr>
+               <td>単行/複数行のテキスト入力フィールド</td>
+               <td>.formfield</td>
+       </tr>
+       <tr>
+               <td>ボタン</td>
+               <td>.formbutton</td>
+       </tr>
+</table>
+
+<p>
+スタイルシート内で実際にこれらを定義するサンプルです:
+</p>
+
+<pre>
+/* applies to all input fields */
+.formfield {
+  background-color: gray;
+}
+
+/* only applies to buttons for comment forms */
+.commentform .formbutton {
+  border: 1px solid #000;
+  background-color: #ddd;
+  color: #000;
+  font-size: xx-large;
+}
+</pre>
+
+<p>上のサンプルでは、Nucleusが自動生成するテキスト入力フィールドの全部が「 背景色 = 濃灰色 」で、コメント投稿フォーム内のボタンだけが「 文字サイズ = 大 / 四辺 = 黒色の1ピクセルの太さの線 / 文字色 = 黒 / 背景色 = 淡灰色 」とする、と定義しています。</p>
+
+
+<h1>Howto: 投票機能を有効にする方法 <a id="howto-karma" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>標準添付のスキン/テンプレートでは投票機能を表示させていません(使わない方がよいのかもしれません)。ここでは投票機能が表示されるようにテンプレートを書換える方法を紹介します。</p>
+
+<h2>1. 表示に使用する「メインの目次ページ」タイプで指定したテンプレートの編集画面を開く</h2>
+
+<p><tt>'default'</tt> ( v3.0では <tt>'grey/short'</tt> ) という名前のテンプレートの編集画面を開きます。(このテンプレート名はあくまでも新規インストール直後の状態で適用されているものです。複製や新規作成などにより変更している場合は読み替えてください。)</p>
+
+<h2>2. アイテムの本体部分の書換え</h2>
+
+<p>アイテムの本体部分の最後の方を以下のように書換えます:</p>
+
+<pre>
+&lt;div class="iteminfo"&gt;
+  &lt;%time%&gt; -
+  &lt;a href="&lt;%authorlink%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt; -
+  karma: &lt;%karma%&gt;
+    [&lt;a href="&lt;%karmaposlink%&gt;"&gt;+&lt;/a&gt;/&lt;a href="&lt;%karmaneglink%&gt;"&gt;-&lt;/a&gt;] -
+  &lt;%edit%&gt;
+  &lt;%comments%&gt;
+&lt;/div&gt;
+</pre>
+
+<p>編集後にメインページにアクセスすると記事詳細情報が下のように表示が変更されているのが確認できると思います:</p>
+
+<div><i>9:00:39 PM - <a href="">God</a> - karma: 5 [<a href="">+</a>/<a href="">-</a>] - <a href="">edit</a></i></div>
+
+<h2>3. アイテムの個別ページのテンプレート</h2>
+
+<p>上記の編集作業ではメインページでのみ投票スコアが表示される状態です。アイテムの個別ページでも同様に投票を表示したい場合は、スキンの「アイテムの個別ページ」で使用しているテンプレートに同様の修正を行ってください。新規インストール直後の状態では<tt>'detailed'</tt> ( v3.0では <tt>'grey/full'</tt> ) という名前のテンプレートがそれに該当します。</p>
+
+
+
+
+
+
+<h1>Howto: 「アイテムの編集」リンクの設置 <a id="howto-edit" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>Nucleus標準添付のスキンでは記事の編集権限を持つユーザーにだけ表示される「アイテムの編集」リンクを埋め込んでいます。 ここではどこでそのリンクを埋め込んでいるのかを説明します。</p>
+
+<h2>「アイテムを編集するためのリンク」の表示の設定</h2>
+
+<p>テンプレートの編集画面の「アイテムを編集するためのリンク」部分でアイテムの編集リンクの表示を定義しています。 標準添付のテンプレートでは以下のように定義しています:</p>
+<pre><code>&lt;a href="&lt;%editlink%&gt;" onclick="&lt;%editpopupcode%&gt;"&gt;edit&lt;/a&gt;</code></pre>
+
+<p>ポップアップ編集画面ではなく管理エリアの記事編集画面を使いたい場合は次のように修正してください:</p>
+
+<pre><code>&lt;a href="nucleus/index.php?action=itemedit&amp;amp;itemid=&lt;%itemid%&gt;"&gt;edit&lt;/a&gt;
+</code></pre>
+
+<h2>「アイテムの編集」リンクを表示する場所の指定</h2>
+
+<p>表示形式を決めたら、次にどこにこれを表示するのかを設定します。通常なら「アイテムの本体」の中に<code>&lt;%edit%&gt;</code>と記述します。この<code>&lt;%edit%&gt;</code>の部分が上で設定した表示形式に置き換えられてコードが自動生成されます。</p>
+
+<p>「アイテムの本体」の中の記述例は <a href="#howto-karma">投票機能を有効にする方法</a> を参照してください。</p>
+
+
+
+
+<h1>スキン/テンプレートのインポート/エクスポートについて <a id="export" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>バージョンv2.0以降からスキンとテンプレートをインポート/エクスポートする機能が追加されています。ここでは、スキンを作成する手順を追ってその機能をわかりやすく説明したいと思います。</p>
+
+<h2>新規スキンの作成</h2>
+
+<ol>
+       <li>
+               <p>まず管理エリアにてスキンを新規作成します。管理エリアに入り、「スキンの編集」画面の一番下にある「新しいスキン」の所に入力します。ここでは例として名前を「<strong>vista</strong>」とします。</p>
+       </li>
+       <li>
+               <p>スキンの一覧にこの「vista」という名前のスキンが追加されていますので、その行の右横「編集」リンクをクリックして編集画面に入ります。content type は 「<code>text/html</code>」としてください。 これから説明する作業を行うにあたって必要な設定となりますので、よく確認して設定してください。</p>
+               <p>さらにその下の <code>Include モード</code> と <code>Include プリフィックス</code> もよく注意して設定してください。スキンを移植したり配布したりする事を考えて、デザインに使用する画像やcssファイルなどは1つのディレクトリの中に格納しておく事とします。 </p>
+                <p><code>Include モード</code> と <code>Include プリフィックス</code> が適用される仕組みを簡単に説明しておきましょう。<code>config.php</code>で定義している「<code>$DIR_SKINS</code>」の値と、管理エリアのグローバル設定の中で設定している「<code>スキンURL</code>」が関連してきます。
+                例えばそれぞれ以下のような値になっているとします:</p>
+               <pre><code>/home/user/example/htdocs/skins/
+http://example.org/skins/</code></pre>
+               <p>この設定を準用してデザインに使用する画像やcssファイルなどを格納するディレクトリを次のように設定させます</p>
+               <pre><code>/home/user/example/htdocs/skins/vista/
+http://example.org/skins/vista/</code></pre>
+               <p>このように準用適用させる設定が<code>Include モード</code>です。準用させるためには<code>Include モード</code>を「<strong>skindirを使う</strong>」にしてください。</p>
+               <p>さらに <strong><code>Include プリフィックス</code></strong> は 「<strong>vista/</strong>」と入力してください。</p>
+               <p>この画面の設定:</p>
+               <ul>
+                       <li><strong>名前</strong>: vista</li>
+                       <li><strong>Content Type</strong>: text/html</li>
+                       <li><strong>Include モード</strong>: skindirを使う</li>
+                       <li><strong>Include プリフィックス</strong>: vista/</li>
+               </ul>
+       </li>
+</ol>
+
+<h2>スキンの編集</h2>
+
+<p>スキン内に記述するコードのうち、<code>include</code> と <code>phpinclude</code> と <code>parsedinclude</code>で読み込むファイルの場所指定に、この「<code>Include モード</code>」 と 「<code>Include プリフィックス</code>」の設定が適用されます。また、このほかに<code>skinfile</code>という記述コードでもこれらの設定を読み込んでURLの自動生成が行われます。</p>
+
+<p>例えばスキン内に以下のように記述したとします:</p>
+
+<pre><code>&lt;%skinfile(myFile.jpg)%&gt;</code></pre>
+
+<p>これはページ生成時に以下のように自動変換されます:</p>
+
+<pre><code>http://example.org/skins/vista/myFile.jpg</code></pre>
+
+<p>仕組みの説明はこのくらいにして、実際にスキンを編集してみましょう。<code>vista/</code> ディレクトリの中に「<code>pagefoot.inc</code>」 と 「<code>pagehead.inc</code>」 という名前の2つのファイルを作成して、これらのファイルを使い回す事によって作業効率を上げる方法をご紹介します:</p>
+
+<h3>pagehead.inc</h3>
+
+<pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
+&lt;html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"&gt;
+&lt;head&gt;
+       &lt;title&gt;My Site&lt;/title&gt;
+       &lt;link rel="stylesheet" type="text/css" href="&lt;%skinfile(layout.css)%&gt;" /&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;div id="contents"&gt;</code></pre>
+
+<h3>pagefoot.inc</h3>
+
+<pre><code>&lt;/div&gt;&lt;!-- contents div end --&gt;
+
+&lt;div id="stuffbar"&gt;
+       &lt;h2&gt;Navigation&lt;/h2&gt;
+
+       &lt;ul&gt;
+               &lt;li&gt;&lt;a href="&lt;%todaylink%&gt;"&gt;Today&lt;/a&gt;&lt;/li&gt;
+               &lt;li&gt;&lt;a href="&lt;%archivelink%&gt;"&gt;Archives&lt;/a&gt;&lt;/li&gt;
+       &lt;/ul&gt;
+
+       &lt;h2&gt;About&lt;/h2&gt;
+
+       &lt;ul&gt;
+               &lt;li&gt;&lt;a href="http://www.nucleuscms.org/"&gt;Nucleus&lt;/a&gt; Power!&lt;/li&gt;
+       &lt;/ul&gt;
+&lt;/div&gt;&lt;!-- stuffbar end --&gt;
+
+&lt;/body&gt;
+&lt;/html&gt;</code></pre>
+
+<p>このような共通して使えるコードを書いたファイルを使い回します: (上のサンプルは重要な部分だけを抜粋した物です。実際に使用する際は標準添付のスキンを参考に、もっとたくさんのコードを書き込んだ方が良いでしょう。)</p>
+
+<h3>メインの目次ページ</h3>
+<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;
+
+&lt;h1&gt;My Blog&lt;/h1&gt;
+
+&lt;%blog(vista/main,10)%&gt;
+
+&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>
+
+<h3>アイテムの個別ページ</h3>
+
+<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;
+
+&lt;h1&gt;My Blog&lt;/h1&gt;
+
+&lt;h2&gt;Item&lt;/h2&gt;
+&lt;%item(vista/detailed)%&gt;
+
+&lt;h2&gt;Comments&lt;/h2&gt;
+&lt;%comments(vista/detailed)%&gt;
+
+&lt;h2&gt;Add Comment&lt;/h2&gt;
+&lt;%commentform%&gt;
+
+&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>
+
+<p>上のサンプルでは使用するテンプレート名を「<strong>vista/main</strong>」 、 「<strong>vista/detailed</strong>」と指定していることに注意してください。テンプレート名はスキン名と揃えて置いた方が後々編集する時にわかりやすくて便利です。単純に標準添付の 「<strong>default</strong>」 と 「<strong>detailed</strong>」(v3.0 では「<strong>grey/short</strong>」 と 「<strong>grey/full</strong>」) をそれぞれ複製して名前を付け替えただけの物でも構いません。</p>
+
+<h3>アーカイブ一覧ページ</h3>
+
+<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;
+
+&lt;h1&gt;My Blog&lt;/h1&gt;
+
+&lt;%archivelist(vista/main)%&gt;
+
+&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>
+
+<h3>アーカイブページ</h3>
+
+<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;
+
+&lt;h1&gt;My Blog&lt;/h1&gt;
+
+&lt;%archive(vista/main)%&gt;
+
+&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>
+
+<h2>スキンをエクスポートする</h2>
+
+<p>これでvistaスキンのできあがりです。では、このスキンをエクスポートしてみましょう。管理エリアの「スキンのインポート/エクスポート」画面に入り、以下の作業を行います:</p>
+
+<ol>
+       <li>書き出すスキン/テンプレートを選択するリストの中から「vista」、「vista/detailed」、「vista/main」の3つを選択してください。</li>
+       <li>その下の「追加情報」欄にこれから書き出すスキン/テンプレートについての説明書きを(必要ならば)入力し、<code>選択されたスキン/テンプレートを書き出し</code> ボタンを押します。 Nucleusにて「<code>skinbackup.xml</code>」の自動作成が行われます。</li>
+       <li>この「<code>skinbackup.xml</code>」ファイルを保存し、<code>vista/</code>ディレクトリの中に他の画像ファイルなどと一緒に格納してください。</li>
+       <li>この<code>vista/</code>ディレクトリごとzipファイルなどに圧縮します。</li>
+       <li>これでスキンパッケージのできあがりです。この圧縮ファイルを配布するだけでデザインの配布ができます。</li>
+</ol>
+
+<h2>スキンをインポートする</h2>
+
+<p>スキンをインポートするには、上と逆の手順を踏みます:</p>
+
+<ol>
+       <li>圧縮ファイルを解凍して生成されたディレクトリ(<code>vista/</code>)をサーバのスキンディレクトリ内に配置します(ひとつのスキンで1つのディレクトリを使用します)。</li>
+       <li>管理エリアの「スキンのインポート/エクスポート」画面にて、ドロップダウンリストから「vista」を選択し、「読み込み」ボタンを押します。</li>
+       <li>表示される説明に従います。(すでに同じ名前のスキン/テンプレートが存在する場合はその旨の警告が出ますので、上書きしたい場合は「既に存在するスキンを上書きする (ぶつかるスキン名を参照) 」のチェックを入れてから読み込むボタンを押せば上書きされます。)</li>
+       <li>これでスキンの読込みは完了です。ページ表示に使用したい場合はblog設定でこのスキン名を選択すれば適用されます。</li>
+</ol>
+
+</body>
+</html>
index 402bdab..317e6ea 100755 (executable)
-body {\r
-       background-color: #fff;\r
-       color: #000;\r
-       font-family: verdana, arial;\r
-       font-size: small;\r
-}\r
-\r
-@media screen {\r
-       body {\r
-               margin-left: 10%;\r
-               margin-right: 10%;\r
-       }\r
-}\r
-\r
-@media print {\r
-       pre, .note, td, th {\r
-               border: 1px dashed gray;\r
-       }\r
-}\r
-\r
-img {\r
-       border: none;\r
-}\r
-\r
-a:link, a:visited {\r
-       color: #1D3565; \r
-       font-weight: bold;\r
-       text-decoration: none;\r
-}\r
-a: hover {\r
-       text-decoration: underline;\r
-}\r
-\r
-.heading {\r
-       text-align: center;\r
-       font-size: xx-large;\r
-       font-weight: bold;\r
-       color: gray;    \r
-}\r
-\r
-.heading i {\r
-       position: absolute;\r
-       top: 5px;\r
-       right: 5px;\r
-       font-size: small;\r
-       font-style: normal;\r
-       font-weight: normal;\r
-}\r
-\r
-\r
-p {\r
-       text-indent: 20px;\r
-}\r
-\r
-h1 {\r
-       border-bottom: 1px dotted gray;\r
-       font-size: x-large;\r
-       color: #596d9d;\r
-}\r
-\r
-h2 {\r
-       color: gray;\r
-       font-size: large;\r
-       margin-left: 20px;\r
-       text-indent: 10px;\r
-       border-bottom: 1px solid #ddd;\r
-}\r
-\r
-pre, .note, .faq .answer {\r
-       background-color: #ddd;\r
-       padding: 10px;\r
-       font-size: small;\r
-}\r
-\r
-.screenshot {\r
-       text-align: center;\r
-       background-color: #ddd;\r
-       padding: 10px;\r
-}\r
-\r
-.faq .question {\r
-       font-weight: bold;\r
-       margin-bottom: 0px;\r
-}\r
-\r
-.faq .answer {\r
-\r
-}\r
-\r
-.faq {\r
-       margin-bottom: 20px;\r
-}\r
-\r
-table {\r
-       border: none;\r
-}\r
-\r
-th {\r
-       background-color: linen;\r
-       font-size: medium;\r
-}\r
-\r
-th, td {\r
-       padding: 5px;\r
-}\r
-\r
-td {\r
-       background-color: #dddddd;\r
-       font-size: small;\r
-       vertical-align: top;\r
-       text-align: left;\r
-}\r
-\r
-.deprecated {\r
-       border: 3px solid red;\r
-       padding: 5px;\r
-       font-size: medium;\r
-}\r
-\r
-tt, code, samp {\r
-       font-size: small;\r
-}\r
-\r
-.warning {\r
-       color: red;\r
-}\r
-.ok {\r
-       color: green;\r
-}\r
-\r
-acronym, abbr {\r
-       border-bottom: 1px dotted gray;\r
-       cursor: help;\r
-}\r
-\r
-label {\r
-       cursor: hand;\r
+body {
+       background-color: #fff;
+       color: #000;
+       font-family: verdana, arial;
+       font-size: small;
+}
+
+@media screen {
+       body {
+               margin-left: 10%;
+               margin-right: 10%;
+       }
+}
+
+@media print {
+       pre, .note, td, th {
+               border: 1px dashed gray;
+       }
+}
+
+img {
+       border: none;
+}
+
+a:link, a:visited {
+       color: #1D3565; 
+       font-weight: bold;
+       text-decoration: none;
+}
+a: hover {
+       text-decoration: underline;
+}
+
+.heading {
+       text-align: center;
+       font-size: xx-large;
+       font-weight: bold;
+       color: gray;    
+}
+
+.heading i {
+       position: absolute;
+       top: 5px;
+       right: 5px;
+       font-size: small;
+       font-style: normal;
+       font-weight: normal;
+}
+
+
+p {
+       text-indent: 20px;
+}
+
+h1 {
+       border-bottom: 1px dotted gray;
+       font-size: x-large;
+       color: #596d9d;
+}
+
+h2 {
+       color: gray;
+       font-size: large;
+       margin-left: 20px;
+       text-indent: 10px;
+       border-bottom: 1px solid #ddd;
+}
+
+pre, .note, .faq .answer {
+       background-color: #ddd;
+       padding: 10px;
+       font-size: small;
+}
+
+.screenshot {
+       text-align: center;
+       background-color: #ddd;
+       padding: 10px;
+}
+
+.faq .question {
+       font-weight: bold;
+       margin-bottom: 0px;
+}
+
+.faq .answer {
+
+}
+
+.faq {
+       margin-bottom: 20px;
+}
+
+table {
+       border: none;
+}
+
+th {
+       background-color: linen;
+       font-size: medium;
+}
+
+th, td {
+       padding: 5px;
+}
+
+td {
+       background-color: #dddddd;
+       font-size: small;
+       vertical-align: top;
+       text-align: left;
+}
+
+.deprecated {
+       border: 3px solid red;
+       padding: 5px;
+       font-size: medium;
+}
+
+tt, code, samp {
+       font-size: small;
+}
+
+.warning {
+       color: red;
+}
+.ok {
+       color: green;
+}
+
+acronym, abbr {
+       border-bottom: 1px dotted gray;
+       cursor: help;
+}
+
+label {
+       cursor: hand;
 }
\ No newline at end of file
index 7eb0951..b346191 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: tips.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - 便利な使い方ヒントの紹介</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="heading">\r
-Tips &amp; Suggestions\r
-</div>\r
-\r
-<h1>Introduction</h1>\r
-\r
-<p>\r
-<a href="index.html">Nucleusマニュアルに戻る</a>\r
-</p>\r
-\r
-<p>\r
-ここでは便利な使い方ヒントをご紹介します。</p>\r
-\r
-<h1><a name="toc"></a>目次</h1>\r
-\r
-<ul>\r
-       <li>\r
-               <a href="#searchengines">検索エンジンにひっかかりやすくする方法</a>\r
-               <ul>\r
-                       <li><a href="#searchengines-fancyurls">Fancy URL モード</a></li>\r
-                       <li><a href="#searchengines-rewrite">mod_rewrite</a></li>\r
-               </ul>\r
-       </li>\r
-       <li><a href="#filepermissions">ファイルとディレクトリのパーミッション変更ガイド</a></li>\r
-       <li><a href="#backups">バックアップをリストア(復元)する方法</a></li>\r
-       <li><a href="#newblog">新しくweblogを作成する方法</a></li>\r
-       <li><a href="#xhtml">XHTMLサポートについて</a></li>\r
-<!--\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>\r
--->\r
-</ul>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>Googleなどのサーチエンジンに引っかかりやすくする方法 <a name="searchengines" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<div class="note">\r
-<b>留意点:</b> これらの方法は、サーバの環境によっては動作しない事があります。\r
-</div>\r
-\r
-<p>\r
-Nucleus はアクセスごとにページを生成しています。アクセスするURLは「<code>index.php?archive=2001-09&amp;blogid=1</code>のようになっています。残念ながらURLに「?」やそのほかの余分な文字列がたくさんあるとgoogleなどの検索エンジンに登録されにくくなってしまいます。無駄なロボット巡回を省くための措置だそうです。\r
-</p>\r
-\r
-<p>この対策を2つ紹介しておきます。しかしながら必ず動作するとは限りませんのでご注意下さい(動作するかどうかはサーバ側の設定によります)。</p>\r
-\r
-<ol>\r
-       <li><a href="#searchengines-fancyurls">Fancy URLモード</a></li>\r
-       <li><a href="#searchengines-rewrite">mod_rewrite</a></li>\r
-</ol>\r
-\r
-<a name="searchengines-fancyurls"></a>\r
-<h2>Fancy URLモード</h2>\r
-\r
-<p>Nucleusではバージョン2.0からグローバル設定において「URLモード」というオプションを設けています。ここを「FancyURLモード」に設定して以下の作業を行うと、URLが「<code>http://example.org/index.php?itemid=1234</code>」から「<code>http://example.org/item/1234</code>」に変わります。このURL形式の方が検索エンジンに登録されやすくなります。 </p>\r
-\r
-<p>手順:</p>\r
-\r
-<ol>\r
-       <li>Copy all files from the <code>/extra/fancyurls</code> ディレクトリにある<code>index.html</code>以外の全部のファイルをルートディレクトリ(<code>index.php</code> と <code>action.php</code>があるディレクトリ)にコピーします。</li>\r
-       <li>すでにルートディレクトリに<code>.htaccess</code>ファイルを設置している方はまず現在の<code>.htaccess</code>ファイルをダウンロード後に今回の <code>/extra/fancyurls</code> ディレクトリにある<code>.htaccess</code>ファイルの中身を追加してください。(FTPソフトでは標準設定では<code>.htaccess</code>ファイルは見えないことが多いので、確認方法を調べた上で存在を確認してください。)<br />\r
-       <code>.htaccess</code>ファイルを設置していなかった方は<code>/extra/fancyurls</code> ディレクトリにある<code>.htaccess</code>ファイルをそのまま使用してください。</li>\r
-       <li>「<code>fancyurls.config.php</code>」という名前のファイルの中の<code>$CONF['Self']</code>の値を自分のトップページのURLとします。 <br /><strong>重要: URLの末尾にスラッシュは<em>絶対に</em>入れないでください。</strong></li>\r
-       <li>同様に<code>index.php</code>ファイルの<code>$CONF['Self']</code>の値を編集(引用符の中を削除)します。これをやらないと、URLが<code>index.php/item/1234</code>などとおかしくなります。</li>\r
-       <li>これらの新しくルートディレクトリに追加したファイルをサーバにアップロードします。</li>\r
-       <li>最後に、管理エリアのグローバル設定においてURLモードを「FancyURLモード」に変更します。</li>\r
-       <li>これで完了です。</li>\r
-</ol>\r
-\r
-<p>もしページが正常に表示されない場合(Internal Server Errorなどと表示される場合)は、残念ですがこの対策は使えません。上の作業で追加したファイルを速やかに削除し(<code>.htaccess</code>ファイルの削除も忘れずに)、管理エリアのグローバル設定においてURLモードを元に戻してください。</p>\r
-\r
-\r
-<a name="searchengines-rewrite"></a>\r
-<h2>mod_rewrite</h2>\r
-\r
-<p>\r
-次に紹介する対策はApacheサーバを使用していて、かつ、「mod_rewrite」の使用が許可されている環境でのみ有効な方法です。アクセスするページがhtmlファイルであるかのようにみせかける方法です。\r
-</p>\r
-\r
-<p>\r
-ルートディレクトリに「<code>.htaccess</code>」という名前のファイル(ファイル名の先頭はピリオドです)を作成し、以下の内容を書き込みます:\r
-</p>\r
-\r
-<pre>\r
-RewriteEngine On\r
-RewriteRule ^archive-([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3&blogid=$1\r
-RewriteRule ^item-([0-9]+).html+ index.php?itemid=$1\r
-RewriteRule ^archivelist-([a-z]+).html+ index.php?archivelist=$1\r
-</pre>\r
-\r
-<p>\r
-このファイルを <i>index.php</i> や <i>config.php</i> があるディレクトリにアップロードします。ブラウザで「<code>archive-1-2004-06.html</code>」にアクセスしてみましょう。きちんとページが表示されればこの方法が使える環境です。(このURL例は2004年6月の記事を表示させるURLですから該当月のログがない場合は「記事がありません」となりますが、これは成功している事を意味します。)<br />もし、アクセスした際に  500 error (internal server error) が表示されていたらそのサーバ環境ではこの方法は使えません。.htaccess ファイルを削除してください。\r
-</p>\r
-\r
-<p>\r
-成功していたら、次にこのURLにジャンプするようにテンプレートを書き換えます。上のURL例をリンク先とする場合は、アーカイブリスト(アーカイブ一覧ページ)で指定しているテンプレートの「アーカイブ一覧の本体」の部分を以下のように変更します:\r
-</p>\r
-\r
-<pre>\r
-&lt;a href="archive-&lt;%blogid%&gt;-&lt;%year%&gt;-&lt;%month%&gt;.html"&gt;...&lt;/a&gt;\r
-</pre>\r
-\r
-<p>\r
-これで検索エンジン対策の説明はおしまいです。あとは検索ロボットが到来するのを待ってみましょう。\r
-</p>\r
-\r
-\r
-<h1>ファイルとディレクトリのパーミッション変更ガイド <a name="filepermissions" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleusのいくつかの機能を正常動作させるためにはパーミッションの変更作業が必要となります。ここではFTPソフト(FTPクライアント)を使ってパーミッションを変更する方法を紹介しておきます。\r
-</p>\r
-<p>\r
-まずはパーミッション変更ができるFTPソフト(FTPクライアント)を入手します。英語ガイドでは「CuteFTP」というソフトを例にとって説明されていますが、シェアウェアであり日本ではメジャーではないのでOS別に分けて説明します。</P>\r
-\r
-<h2>Windows</h2>\r
-<p>\r
-Windows版では、「FFFTP」というソフトを例に用いて説明させていただきます。FFFTPはフリーウェアです。『<a href="http://www2.biglobe.ne.jp/‾sota/ffftp.html">Sota's Product : FFFTP</a>』で入手できます。また、FFFTPのインストールや基本的な使い方につきましては、『<a href="http://ftp.hm/ffftp/manual.shtml">初心者マニュアル - FFFTP Support Page.</a>』をご覧下さい。\r
-</p>\r
-\r
-<p>\r
-まずサーバに接続します。パーミッションを変更したいサーバ側のファイル又はディレクトリをクリックして選択します。(画面右側がサーバに置いてあるディレクトリとファイルのリストとなっています。)\r
-</p>\r
-\r
-<p>\r
-メニューバーの <tt>コマンド &gt; 属性変更</tt> を選択します。\r
-</p>\r
-\r
-<div class="screenshot">\r
-       <img src="pics/screen4.png" width="370" height="257" alt="menu" />\r
-</div>\r
-\r
-<p>\r
-パーミッションを設定するウィンドウがポップアップします:\r
-</p>\r
-\r
-<div class="screenshot">\r
-       <img src="pics/screen5.png" width="305" height="189" alt="The window that pops up" />\r
-</div>\r
-\r
-<p>\r
-このポップアップしたウィンドウの下の方に数字を入れる所がありますから、ここに説明書に記載されている数字(例えば777とか666)を入力してOKボタンを押します。これでおしまいです。\r
-</p>\r
-<h2>MacOS</h2>\r
-<p>\r
-MacOS上で動作する日本語が使えるFTPクライアントでは、「Fetch日本語版」が最も人気があるようです。『<a href="http://www.hart.co.jp/fetch/">Fetch日本語版公式ホームページ</a>』よりダウンロードできます。(使い続ける方は有料になります。)\r
-</p>\r
-<p>\r
-パーミッションの変更画面では数字を入力する機能がないようですので、どこにチェックを入れたら(はずしたら)よいかがよくわからない方は『<a href="http://trynext.co.jp/tips/chmod/">TryNext|Fetchによるパーミッション設定</a>』をご覧下さい。代表的なパーミッション設定例と、計算の仕方が説明されています。\r
-</p>\r
-<p>\r
-または、下記の表にチェックを入れてみて指示されているパーミッション値になるようにテストしてみても良いかと思います。\r
-(上記のWindows版FTPソフトの設定画面とは縦軸と横軸が逆になっていますので混同しないように。)\r
-</p>\r
-<SCRIPT language="javascript">\r
-<!--//\r
-//------------------------------------------------------------\r
-//javascript by @うさ http://usagi-js.com/\r
-//------------------------------------------------------------\r
-var nCurrentValue;\r
-function ResetValue()\r
-{\r
-       nCurrentValue = 0;\r
-}\r
-function CheckValue()\r
-{\r
-       //リセット\r
-       ResetValue()\r
-       //全てをチェック\r
-       if (document.frmSample.chkValue11.checked)\r
-       {\r
-               nCurrentValue = eval(document.frmSample.chkValue11.value);\r
-       }\r
-       if (document.frmSample.chkValue12.checked)\r
-       {\r
-               nCurrentValue += eval(document.frmSample.chkValue12.value);\r
-       }\r
-       if (document.frmSample.chkValue13.checked)\r
-       {\r
-               nCurrentValue += eval(document.frmSample.chkValue13.value);\r
-       }\r
-       if (document.frmSample.chkValue21.checked)\r
-       {\r
-               nCurrentValue += eval(document.frmSample.chkValue21.value);\r
-       }\r
-       if (document.frmSample.chkValue22.checked)\r
-       {\r
-               nCurrentValue += eval(document.frmSample.chkValue22.value);\r
-       }\r
-       if (document.frmSample.chkValue23.checked)\r
-       {\r
-               nCurrentValue += eval(document.frmSample.chkValue23.value);\r
-       }\r
-       if (document.frmSample.chkValue31.checked)\r
-       {\r
-               nCurrentValue += eval(document.frmSample.chkValue31.value);\r
-       }\r
-       if (document.frmSample.chkValue32.checked)\r
-       {\r
-               nCurrentValue += eval(document.frmSample.chkValue32.value);\r
-       }\r
-       if (document.frmSample.chkValue33.checked)\r
-       {\r
-               nCurrentValue += eval(document.frmSample.chkValue33.value);\r
-       }\r
-       //表示\r
-       document.frmSample.txtTotal.value=nCurrentValue;\r
-}\r
-//-->\r
-</SCRIPT>\r
-\r
-<table align="center"><tr>\r
-<FORM name="frmSample">\r
-<td> </td>\r
-<td >読む</td>\r
-<td>書込</td>\r
-<td>検索/実行</td>\r
-</tr>\r
-<tr>\r
-<td>オーナー</td>\r
-<td><INPUT type="checkbox" name="chkValue11" value="400" onClick="CheckValue()"></td>\r
-<td><INPUT type="checkbox" name="chkValue12" value="200" onClick="CheckValue()"></td>\r
-<td><INPUT type="checkbox" name="chkValue13" value="100" onClick="CheckValue()"></td>\r
-</tr>\r
-<tr>\r
-<td>グループ</td>\r
-<td><INPUT type="checkbox" name="chkValue21" value="40" onClick="CheckValue()"></td>\r
-<td><INPUT type="checkbox" name="chkValue22" value="20" onClick="CheckValue()"></td>\r
-<td><INPUT type="checkbox" name="chkValue23" value="10" onClick="CheckValue()"></td>\r
-</tr>\r
-<tr>\r
-<td>全員</td>\r
-<td><INPUT type="checkbox" name="chkValue31" value="4" onClick="CheckValue()"></td>\r
-<td><INPUT type="checkbox" name="chkValue32" value="2" onClick="CheckValue()"></td>\r
-<td><INPUT type="checkbox" name="chkValue33" value="1" onClick="CheckValue()"></td>\r
-</tr>\r
-<tr>\r
-<td colspan="4">\r
-パーミッション値(直接入力はできません)<br>\r
-<INPUT type="text" name="txtTotal" readonly>\r
-\r
-</td>\r
-</FORM>\r
-\r
-\r
-</tr></table>\r
-\r
-\r
-<h1>バックアップをリストア(復元)する方法 <a name="backups" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleus には最高管理者が使うことができるデータベースのバックアップ機能があります。定期的に(週1回など)バックアップを取られることを強くおすすめします。 生成されるバックアップファイルはスタンダードなSQLクエリ文です。バックアップを取った時点のデータベース状態に再構成するコマンドが書かれています。\r
-</p>\r
-\r
-<p>\r
-バックアップが作成できればリストアも簡単にできるはずですが、何らかの理由によりリストアが成功しないケースも考えられます。そこで、万が一管理エリアからリストアができない場合でも、データを書き戻す方法をいくつか紹介しておきます:\r
-</p>\r
-\r
-<div class="note">\r
-バックアップ作成時にzip圧縮を選択していた方はまず最初に解凍してください(中身はsqlファイルです)。\r
-</div>\r
-\r
-\r
-<h2>方法その1: ブラウザ上にて行う方法</h2>\r
-\r
-<p>\r
-<a href="http://phpmyadmin.sourceforge.net/">PHPMyAdmin</a>のようなブラウザでデータベースを操作できる状態の方は、ローカルにあるsqlファイルをデータベースに取り込む機能が付いているはずですので、この機能を使用してみてください。\r
-</p>\r
-\r
-<h2>方法その2: Shellにアクセスして作業する方法</h2>\r
-\r
-<p>\r
-Shellにアクセスできる状態の方は、mysqlプログラムを実行して下記のようなコマンドを叩けばリストアできます:\r
-</p>\r
-\r
-<pre>\r
-mysql -u <i>username</i> -p -h <i>hostname</i> <i>databasename</i> &lt; <i>backupfile.sql</i>\r
-</pre>\r
-\r
-\r
-<h1>新しくweblogを作成する方法 <a name="newblog" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<h2>1. 新規weblogの作成</h2>\r
-\r
-<p>最高管理者としてログインすると「新規weblog作成」メニューが使用できます。ここで画面の指示に従って作成してください。</p>\r
-\r
-<h2>2. 作成したweblogにアクセスする</h2>\r
-\r
-<p>新しく追加されたweblogにアクセスする方法はいくつかあります。</p>\r
-\r
-<ol>\r
-       <li>URLにて<strong><code>blogid</code>の値</strong>を指定する:\r
-               <pre><code>http://yourhost.com/index.php?blogid=<i>2</i></code></pre>\r
-               (作成したweblogのblogidは管理エリアのトップページにあるblog一覧の中の該当blogのリンク先を見ればわかります。)\r
-       </li>\r
-       <li>\r
-               アクセス専用のphpファイルを作成する:\r
-               <pre><code>$CONF['Self'] = '<i>copy.php</i>';\r
-include('./config.php');\r
-selectBlog('<i>shortblogname</i>');\r
-selector();\r
-\r
-?></code></pre>\r
-               上のような内容の「<tt>copy.php</tt>」という名前(この名前は一例です)のファイルをルートディレクトリに作成し、これにアクセスすると新しく追加されたblogが表示されます。\r
-               (作成したweblogの短縮名はは管理エリアのトップページにあるblog一覧の中から該当blogの設定画面に入るとわかります。)\r
-       </li>\r
-</ol>\r
-\r
-<h2>アクセス専用phpファイルの中で使用できるコマンド</h2>\r
-\r
-<p>上記のサンプル内で使用している <tt>selectBlog</tt> というコマンドは、アクセス専用phpファイルにて使用できるコマンドの一例です。他にも使用できるコマンドがありますので紹介しておきます:</p>\r
-\r
-<table><tr>\r
-       <th>コマンド</th>\r
-       <th>意味</th>\r
-</tr><tr>\r
-       <td><code>selectBlog('shortblogname');</td>\r
-       <td>「shortblogname」という短縮名のblogを表示させる<br />\r
-       (* URLにて指定するblogidの方が優先されます。URLにて指定がない場合にこの指定が使われます)\r
-       </td>\r
-</tr><tr>\r
-       <td><code>selectSkin('skinname');</td>\r
-       <td>「skinname」という名前のスキンを適用してページ表示する<br />\r
-       (* URLにて指定するskinidの方が優先されます。URLにて指定がない場合にこの指定が使われます)\r
-       </td>\r
-</tr><tr>\r
-       <td><code>selectCategory(1234);</td>\r
-       <td>IDが「1234」のカテゴリを選択した状態でページ表示する<br />\r
-       (* URLにて指定するcatidの方が優先されます。URLにて指定がない場合にこの指定が使われます)<br />\r
-       この指定にはカテゴリ名を指定する事もができますが、複数blogが存在している場合は同じカテゴリ名があることが考えられますのでID指定の方が無難でしょう。</td>\r
-</tr><tr>\r
-       <td><code>selectItem(1234);</td>\r
-       <td>IDが「1234」の記事を選択した状態でページ表示する<br />\r
-       (* URLの指定が優先されます。URLにて指定がない場合にこの指定が使われます)</td>\r
-</tr><tr>\r
-       <td><code>selectLanguage('french');</td>\r
-       <td>言語を「french」にしてページ表示する\r
-        (PHPエラーが出る可能性がありますので注意してください)</td>\r
-</tr></table>\r
-\r
-<p>\r
-アクセス専用phpファイルの中にこれらのコマンドを書く時は、コードの順番に留意してください。これらのコマンドは、<code>include('./config.php')</code>よりも<strong>後に</strong>書き、かつ、<code>selector();</code>という行よりも<strong>前に</strong>書かなくては反映されません。\r
-<p>\r
-\r
-<h2>サブディレクトリに新しいblogを配置する場合</h2>\r
-\r
-<p>例えば、最初のblogが <tt>http://yourhost.com/</tt> で表示されていて、新しく追加するblogは <tt>http://yourhost.com/sub/</tt> のようにサブディレクトリに配置したい方は、上記のサンプルと同じアクセス専用phpファイルをそのサブディレクトリに作成します。このサブディレクトリに配置したアクセス専用phpファイルの<code>include('./config.php');</code> という部分を <code>include('../config.php');</code>と書き換えるだけで動作します。</p>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>XHTML サポートについて <a name="xhtml" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-自分のページのソースコードを見た時、<code>&lt;br /&gt;</code>のようなタグコードにお気付きかと思います。これは、Nucleusが自動生成するコードがW3Cにて策定されているXHTML 1.0 standard(HTML4継承)に則っているからです。webの将来性を鑑みてこのようにしております。知る限りでは、XHTML形式の記述が古いブラウザとの互換性を損なってはいないようです。\r
-</p>\r
-\r
-<p>\r
-ですから、スキンとテンプレートの記述でミスを犯していなければ完全なXHTML準拠のソースコードが生成されるはずです。1点だけ付け加えておきますと、標準添付のスキンでは、敢えてdoctypeを「HTML 4 Loose」と宣言しております。これは、XHTML準拠でないコードをスキンやテンプレートや記事内に登録してしまい、正常にページ表示ができなくなる可能性を回避する為です。\r
-</p>\r
-\r
-\r
-\r
-</body>\r
-</html>\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: tips.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: tips.html,v 1.4 2005/03/19 08:34:53 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - 便利な使い方ヒントの紹介</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<div class="heading">
+Tips &amp; Suggestions
+</div>
+
+<h1>Introduction</h1>
+
+<p>
+<a href="index.html">Nucleusマニュアルに戻る</a>
+</p>
+
+<p>
+ここでは便利な使い方ヒントをご紹介します。</p>
+
+<h1><a name="toc"></a>目次</h1>
+
+<ul>
+       <li>
+               <a href="#searchengines">検索エンジンにひっかかりやすくする方法</a>
+               <ul>
+                       <li><a href="#searchengines-fancyurls">Fancy URL モード</a></li>
+                       <li><a href="#searchengines-rewrite">mod_rewrite</a></li>
+               </ul>
+       </li>
+       <li><a href="#filepermissions">ファイルとディレクトリのパーミッション変更ガイド</a></li>
+       <li><a href="#backups">バックアップをリストア(復元)する方法</a></li>
+       <li><a href="#newblog">新しくweblogを作成する方法</a></li>
+       <li><a href="#xhtml">XHTMLサポートについて</a></li>
+<!--
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>
+-->
+</ul>
+
+
+
+
+
+
+
+
+
+
+<h1>Googleなどのサーチエンジンに引っかかりやすくする方法 <a name="searchengines" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<div class="note">
+<b>留意点:</b> これらの方法は、サーバの環境によっては動作しない事があります。
+</div>
+
+<p>
+Nucleus はアクセスごとにページを生成しています。アクセスするURLは「<code>index.php?archive=2001-09&amp;blogid=1</code>のようになっています。残念ながらURLに「?」やそのほかの余分な文字列がたくさんあるとgoogleなどの検索エンジンに登録されにくくなってしまいます。無駄なロボット巡回を省くための措置だそうです。
+</p>
+
+<p>この対策を2つ紹介しておきます。しかしながら必ず動作するとは限りませんのでご注意下さい(動作するかどうかはサーバ側の設定によります)。</p>
+
+<ol>
+       <li><a href="#searchengines-fancyurls">Fancy URLモード</a></li>
+       <li><a href="#searchengines-rewrite">mod_rewrite</a></li>
+</ol>
+
+<a name="searchengines-fancyurls"></a>
+<h2>Fancy URLモード</h2>
+
+<p>Nucleusではバージョン2.0からグローバル設定において「URLモード」というオプションを設けています。ここを「FancyURLモード」に設定して以下の作業を行うと、URLが「<code>http://example.org/index.php?itemid=1234</code>」から「<code>http://example.org/item/1234</code>」に変わります。このURL形式の方が検索エンジンに登録されやすくなります。 </p>
+
+<p>手順:</p>
+
+<ol>
+       <li>Copy all files from the <code>/extra/fancyurls</code> ディレクトリにある<code>index.html</code>以外の全部のファイルをルートディレクトリ(<code>index.php</code> と <code>action.php</code>があるディレクトリ)にコピーします。</li>
+       <li>すでにルートディレクトリに<code>.htaccess</code>ファイルを設置している方はまず現在の<code>.htaccess</code>ファイルをダウンロード後に今回の <code>/extra/fancyurls</code> ディレクトリにある<code>.htaccess</code>ファイルの中身を追加してください。(FTPソフトでは標準設定では<code>.htaccess</code>ファイルは見えないことが多いので、確認方法を調べた上で存在を確認してください。)<br />
+       <code>.htaccess</code>ファイルを設置していなかった方は<code>/extra/fancyurls</code> ディレクトリにある<code>.htaccess</code>ファイルをそのまま使用してください。</li>
+       <li>「<code>fancyurls.config.php</code>」という名前のファイルの中の<code>$CONF['Self']</code>の値を自分のトップページのURLとします。 <br /><strong>重要: URLの末尾にスラッシュは<em>絶対に</em>入れないでください。</strong></li>
+       <li>同様に<code>index.php</code>ファイルの<code>$CONF['Self']</code>の値を編集(引用符の中を削除)します。これをやらないと、URLが<code>index.php/item/1234</code>などとおかしくなります。</li>
+       <li>これらの新しくルートディレクトリに追加したファイルをサーバにアップロードします。</li>
+       <li>最後に、管理エリアのグローバル設定においてURLモードを「FancyURLモード」に変更します。</li>
+       <li>これで完了です。</li>
+</ol>
+
+<p>もしページが正常に表示されない場合(Internal Server Errorなどと表示される場合)は、残念ですがこの対策は使えません。上の作業で追加したファイルを速やかに削除し(<code>.htaccess</code>ファイルの削除も忘れずに)、管理エリアのグローバル設定においてURLモードを元に戻してください。</p>
+
+
+<a name="searchengines-rewrite"></a>
+<h2>mod_rewrite</h2>
+
+<p>
+次に紹介する対策はApacheサーバを使用していて、かつ、「mod_rewrite」の使用が許可されている環境でのみ有効な方法です。アクセスするページがhtmlファイルであるかのようにみせかける方法です。
+</p>
+
+<p>
+ルートディレクトリに「<code>.htaccess</code>」という名前のファイル(ファイル名の先頭はピリオドです)を作成し、以下の内容を書き込みます:
+</p>
+
+<pre>
+RewriteEngine On
+RewriteRule ^archive-([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3&blogid=$1
+RewriteRule ^item-([0-9]+).html+ index.php?itemid=$1
+RewriteRule ^archivelist-([a-z]+).html+ index.php?archivelist=$1
+</pre>
+
+<p>
+このファイルを <i>index.php</i> や <i>config.php</i> があるディレクトリにアップロードします。ブラウザで「<code>archive-1-2004-06.html</code>」にアクセスしてみましょう。きちんとページが表示されればこの方法が使える環境です。(このURL例は2004年6月の記事を表示させるURLですから該当月のログがない場合は「記事がありません」となりますが、これは成功している事を意味します。)<br />もし、アクセスした際に  500 error (internal server error) が表示されていたらそのサーバ環境ではこの方法は使えません。.htaccess ファイルを削除してください。
+</p>
+
+<p>
+成功していたら、次にこのURLにジャンプするようにテンプレートを書き換えます。上のURL例をリンク先とする場合は、アーカイブリスト(アーカイブ一覧ページ)で指定しているテンプレートの「アーカイブ一覧の本体」の部分を以下のように変更します:
+</p>
+
+<pre>
+&lt;a href="archive-&lt;%blogid%&gt;-&lt;%year%&gt;-&lt;%month%&gt;.html"&gt;...&lt;/a&gt;
+</pre>
+
+<p>
+これで検索エンジン対策の説明はおしまいです。あとは検索ロボットが到来するのを待ってみましょう。
+</p>
+
+
+<h1>ファイルとディレクトリのパーミッション変更ガイド <a name="filepermissions" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleusのいくつかの機能を正常動作させるためにはパーミッションの変更作業が必要となります。ここではFTPソフト(FTPクライアント)を使ってパーミッションを変更する方法を紹介しておきます。
+</p>
+<p>
+まずはパーミッション変更ができるFTPソフト(FTPクライアント)を入手します。英語ガイドでは「CuteFTP」というソフトを例にとって説明されていますが、シェアウェアであり日本ではメジャーではないのでOS別に分けて説明します。</P>
+
+<h2>Windows</h2>
+<p>
+Windows版では、「FFFTP」というソフトを例に用いて説明させていただきます。FFFTPはフリーウェアです。『<a href="http://www2.biglobe.ne.jp/‾sota/ffftp.html">Sota's Product : FFFTP</a>』で入手できます。また、FFFTPのインストールや基本的な使い方につきましては、『<a href="http://ftp.hm/ffftp/manual.shtml">初心者マニュアル - FFFTP Support Page.</a>』をご覧下さい。
+</p>
+
+<p>
+まずサーバに接続します。パーミッションを変更したいサーバ側のファイル又はディレクトリをクリックして選択します。(画面右側がサーバに置いてあるディレクトリとファイルのリストとなっています。)
+</p>
+
+<p>
+メニューバーの <tt>コマンド &gt; 属性変更</tt> を選択します。
+</p>
+
+<div class="screenshot">
+       <img src="pics/screen4.png" width="370" height="257" alt="menu" />
+</div>
+
+<p>
+パーミッションを設定するウィンドウがポップアップします:
+</p>
+
+<div class="screenshot">
+       <img src="pics/screen5.png" width="305" height="189" alt="The window that pops up" />
+</div>
+
+<p>
+このポップアップしたウィンドウの下の方に数字を入れる所がありますから、ここに説明書に記載されている数字(例えば777とか666)を入力してOKボタンを押します。これでおしまいです。
+</p>
+<h2>MacOS</h2>
+<p>
+MacOS上で動作する日本語が使えるFTPクライアントでは、「Fetch日本語版」が最も人気があるようです。『<a href="http://www.hart.co.jp/fetch/">Fetch日本語版公式ホームページ</a>』よりダウンロードできます。(使い続ける方は有料になります。)
+</p>
+<p>
+パーミッションの変更画面では数字を入力する機能がないようですので、どこにチェックを入れたら(はずしたら)よいかがよくわからない方は『<a href="http://trynext.co.jp/tips/chmod/">TryNext|Fetchによるパーミッション設定</a>』をご覧下さい。代表的なパーミッション設定例と、計算の仕方が説明されています。
+</p>
+<p>
+または、下記の表にチェックを入れてみて指示されているパーミッション値になるようにテストしてみても良いかと思います。
+(上記のWindows版FTPソフトの設定画面とは縦軸と横軸が逆になっていますので混同しないように。)
+</p>
+<SCRIPT language="javascript">
+<!--//
+//------------------------------------------------------------
+//javascript by @うさ http://usagi-js.com/
+//------------------------------------------------------------
+var nCurrentValue;
+function ResetValue()
+{
+       nCurrentValue = 0;
+}
+function CheckValue()
+{
+       //リセット
+       ResetValue()
+       //全てをチェック
+       if (document.frmSample.chkValue11.checked)
+       {
+               nCurrentValue = eval(document.frmSample.chkValue11.value);
+       }
+       if (document.frmSample.chkValue12.checked)
+       {
+               nCurrentValue += eval(document.frmSample.chkValue12.value);
+       }
+       if (document.frmSample.chkValue13.checked)
+       {
+               nCurrentValue += eval(document.frmSample.chkValue13.value);
+       }
+       if (document.frmSample.chkValue21.checked)
+       {
+               nCurrentValue += eval(document.frmSample.chkValue21.value);
+       }
+       if (document.frmSample.chkValue22.checked)
+       {
+               nCurrentValue += eval(document.frmSample.chkValue22.value);
+       }
+       if (document.frmSample.chkValue23.checked)
+       {
+               nCurrentValue += eval(document.frmSample.chkValue23.value);
+       }
+       if (document.frmSample.chkValue31.checked)
+       {
+               nCurrentValue += eval(document.frmSample.chkValue31.value);
+       }
+       if (document.frmSample.chkValue32.checked)
+       {
+               nCurrentValue += eval(document.frmSample.chkValue32.value);
+       }
+       if (document.frmSample.chkValue33.checked)
+       {
+               nCurrentValue += eval(document.frmSample.chkValue33.value);
+       }
+       //表示
+       document.frmSample.txtTotal.value=nCurrentValue;
+}
+//-->
+</SCRIPT>
+
+<table align="center"><tr>
+<FORM name="frmSample">
+<td> </td>
+<td >読む</td>
+<td>書込</td>
+<td>検索/実行</td>
+</tr>
+<tr>
+<td>オーナー</td>
+<td><INPUT type="checkbox" name="chkValue11" value="400" onClick="CheckValue()"></td>
+<td><INPUT type="checkbox" name="chkValue12" value="200" onClick="CheckValue()"></td>
+<td><INPUT type="checkbox" name="chkValue13" value="100" onClick="CheckValue()"></td>
+</tr>
+<tr>
+<td>グループ</td>
+<td><INPUT type="checkbox" name="chkValue21" value="40" onClick="CheckValue()"></td>
+<td><INPUT type="checkbox" name="chkValue22" value="20" onClick="CheckValue()"></td>
+<td><INPUT type="checkbox" name="chkValue23" value="10" onClick="CheckValue()"></td>
+</tr>
+<tr>
+<td>全員</td>
+<td><INPUT type="checkbox" name="chkValue31" value="4" onClick="CheckValue()"></td>
+<td><INPUT type="checkbox" name="chkValue32" value="2" onClick="CheckValue()"></td>
+<td><INPUT type="checkbox" name="chkValue33" value="1" onClick="CheckValue()"></td>
+</tr>
+<tr>
+<td colspan="4">
+パーミッション値(直接入力はできません)<br>
+<INPUT type="text" name="txtTotal" readonly>
+
+</td>
+</FORM>
+
+
+</tr></table>
+
+
+<h1>バックアップをリストア(復元)する方法 <a name="backups" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleus には最高管理者が使うことができるデータベースのバックアップ機能があります。定期的に(週1回など)バックアップを取られることを強くおすすめします。 生成されるバックアップファイルはスタンダードなSQLクエリ文です。バックアップを取った時点のデータベース状態に再構成するコマンドが書かれています。
+</p>
+
+<p>
+バックアップが作成できればリストアも簡単にできるはずですが、何らかの理由によりリストアが成功しないケースも考えられます。そこで、万が一管理エリアからリストアができない場合でも、データを書き戻す方法をいくつか紹介しておきます:
+</p>
+
+<div class="note">
+バックアップ作成時にzip圧縮を選択していた方はまず最初に解凍してください(中身はsqlファイルです)。
+</div>
+
+
+<h2>方法その1: ブラウザ上にて行う方法</h2>
+
+<p>
+<a href="http://phpmyadmin.sourceforge.net/">PHPMyAdmin</a>のようなブラウザでデータベースを操作できる状態の方は、ローカルにあるsqlファイルをデータベースに取り込む機能が付いているはずですので、この機能を使用してみてください。
+</p>
+
+<h2>方法その2: Shellにアクセスして作業する方法</h2>
+
+<p>
+Shellにアクセスできる状態の方は、mysqlプログラムを実行して下記のようなコマンドを叩けばリストアできます:
+</p>
+
+<pre>
+mysql -u <i>username</i> -p -h <i>hostname</i> <i>databasename</i> &lt; <i>backupfile.sql</i>
+</pre>
+
+
+<h1>新しくweblogを作成する方法 <a name="newblog" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<h2>1. 新規weblogの作成</h2>
+
+<p>最高管理者としてログインすると「新規weblog作成」メニューが使用できます。ここで画面の指示に従って作成してください。</p>
+
+<h2>2. 作成したweblogにアクセスする</h2>
+
+<p>新しく追加されたweblogにアクセスする方法はいくつかあります。</p>
+
+<ol>
+       <li>URLにて<strong><code>blogid</code>の値</strong>を指定する:
+               <pre><code>http://yourhost.com/index.php?blogid=<i>2</i></code></pre>
+               (作成したweblogのblogidは管理エリアのトップページにあるblog一覧の中の該当blogのリンク先を見ればわかります。)
+       </li>
+       <li>
+               アクセス専用のphpファイルを作成する:
+               <pre><code>$CONF['Self'] = '<i>copy.php</i>';
+include('./config.php');
+selectBlog('<i>shortblogname</i>');
+selector();
+
+?></code></pre>
+               上のような内容の「<tt>copy.php</tt>」という名前(この名前は一例です)のファイルをルートディレクトリに作成し、これにアクセスすると新しく追加されたblogが表示されます。
+               (作成したweblogの短縮名はは管理エリアのトップページにあるblog一覧の中から該当blogの設定画面に入るとわかります。)
+       </li>
+</ol>
+
+<h2>アクセス専用phpファイルの中で使用できるコマンド</h2>
+
+<p>上記のサンプル内で使用している <tt>selectBlog</tt> というコマンドは、アクセス専用phpファイルにて使用できるコマンドの一例です。他にも使用できるコマンドがありますので紹介しておきます:</p>
+
+<table><tr>
+       <th>コマンド</th>
+       <th>意味</th>
+</tr><tr>
+       <td><code>selectBlog('shortblogname');</td>
+       <td>「shortblogname」という短縮名のblogを表示させる<br />
+       (* URLにて指定するblogidの方が優先されます。URLにて指定がない場合にこの指定が使われます)
+       </td>
+</tr><tr>
+       <td><code>selectSkin('skinname');</td>
+       <td>「skinname」という名前のスキンを適用してページ表示する<br />
+       (* URLにて指定するskinidの方が優先されます。URLにて指定がない場合にこの指定が使われます)
+       </td>
+</tr><tr>
+       <td><code>selectCategory(1234);</td>
+       <td>IDが「1234」のカテゴリを選択した状態でページ表示する<br />
+       (* URLにて指定するcatidの方が優先されます。URLにて指定がない場合にこの指定が使われます)<br />
+       この指定にはカテゴリ名を指定する事もができますが、複数blogが存在している場合は同じカテゴリ名があることが考えられますのでID指定の方が無難でしょう。</td>
+</tr><tr>
+       <td><code>selectItem(1234);</td>
+       <td>IDが「1234」の記事を選択した状態でページ表示する<br />
+       (* URLの指定が優先されます。URLにて指定がない場合にこの指定が使われます)</td>
+</tr><tr>
+       <td><code>selectLanguage('french');</td>
+       <td>言語を「french」にしてページ表示する
+        (PHPエラーが出る可能性がありますので注意してください)</td>
+</tr></table>
+
+<p>
+アクセス専用phpファイルの中にこれらのコマンドを書く時は、コードの順番に留意してください。これらのコマンドは、<code>include('./config.php')</code>よりも<strong>後に</strong>書き、かつ、<code>selector();</code>という行よりも<strong>前に</strong>書かなくては反映されません。
+<p>
+
+<h2>サブディレクトリに新しいblogを配置する場合</h2>
+
+<p>例えば、最初のblogが <tt>http://yourhost.com/</tt> で表示されていて、新しく追加するblogは <tt>http://yourhost.com/sub/</tt> のようにサブディレクトリに配置したい方は、上記のサンプルと同じアクセス専用phpファイルをそのサブディレクトリに作成します。このサブディレクトリに配置したアクセス専用phpファイルの<code>include('./config.php');</code> という部分を <code>include('../config.php');</code>と書き換えるだけで動作します。</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h1>XHTML サポートについて <a name="xhtml" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+自分のページのソースコードを見た時、<code>&lt;br /&gt;</code>のようなタグコードにお気付きかと思います。これは、Nucleusが自動生成するコードがW3Cにて策定されているXHTML 1.0 standard(HTML4継承)に則っているからです。webの将来性を鑑みてこのようにしております。知る限りでは、XHTML形式の記述が古いブラウザとの互換性を損なってはいないようです。
+</p>
+
+<p>
+ですから、スキンとテンプレートの記述でミスを犯していなければ完全なXHTML準拠のソースコードが生成されるはずです。1点だけ付け加えておきますと、標準添付のスキンでは、敢えてdoctypeを「HTML 4 Loose」と宣言しております。これは、XHTML準拠でないコードをスキンやテンプレートや記事内に登録してしまい、正常にページ表示ができなくなる可能性を回避する為です。
+</p>
+
+
+
+</body>
+</html>
+
index 397193a..e051702 100755 (executable)
@@ -1,52 +1,52 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <!-- $Id: forgotpassword.html,v 1.6 2005-03-15 08:29:27 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />\r
-       <title>Nucleus - パスワードの紛失</title>\r
-       <style type="text/css">\r
-       <!--\r
-               @import url(styles/admin.css);\r
-       -->\r
-       </style>\r
-</head>\r
-<body>\r
-               <div class="header">\r
-               <h1>Nucleus CMS</h1>\r
-               </div>\r
-               <div id="content">\r
-\r
-                       <h2>パスワードを忘れましたか?</h2>\r
-\r
-                       <p>\r
-                       以下にユーザー名とメールアドレスを入力してください。新しいパスワードを選択するページへのリンクの入ったメールが送信されます。\r
-                       </p>\r
-\r
-                       <form method="post" action="../action.php"><p>\r
-                               <input name="action" value="forgotpassword" type="hidden" />\r
-                               ユーザー名:\r
-                               <br />\r
-                               <input name="name" />\r
-                               <br />\r
-                               メールアドレス:\r
-                               <br />\r
-                               <input name="email" />\r
-                               <br />\r
-                               <br />\r
-                               <input type="submit" value="パスワードメールの送信" class="transparent" />\r
-                       </p></form>\r
-\r
-                       <p>\r
-                       もしユーザー名をお忘れなら、あなたのNucleusサイト管理者に連絡してください。\r
-                       </p>\r
-\r
-\r
-                       <div class="foot">\r
-                               <a href="http://nucleuscms.org/">Nucleus &copy; 2001-2005 The Nucleus Group</a>\r
-                       </div>\r
-\r
-               </div><!-- content -->\r
-\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <!-- $Id: forgotpassword.html,v 1.7 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: forgotpassword.html,v 1.6 2005/03/15 08:29:27 kimitake Exp $ -->
+       <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+       <title>Nucleus - パスワードの紛失</title>
+       <style type="text/css">
+       <!--
+               @import url(styles/admin.css);
+       -->
+       </style>
+</head>
+<body>
+               <div class="header">
+               <h1>Nucleus CMS</h1>
+               </div>
+               <div id="content">
+
+                       <h2>パスワードを忘れましたか?</h2>
+
+                       <p>
+                       以下にユーザー名とメールアドレスを入力してください。新しいパスワードを選択するページへのリンクの入ったメールが送信されます。
+                       </p>
+
+                       <form method="post" action="../action.php"><p>
+                               <input name="action" value="forgotpassword" type="hidden" />
+                               ユーザー名:
+                               <br />
+                               <input name="name" />
+                               <br />
+                               メールアドレス:
+                               <br />
+                               <input name="email" />
+                               <br />
+                               <br />
+                               <input type="submit" value="パスワードメールの送信" class="transparent" />
+                       </p></form>
+
+                       <p>
+                       もしユーザー名をお忘れなら、あなたのNucleusサイト管理者に連絡してください。
+                       </p>
+
+
+                       <div class="foot">
+                               <a href="http://nucleuscms.org/">Nucleus &copy; 2001-2005 The Nucleus Group</a>
+                       </div>
+
+               </div><!-- content -->
+
+</body>
+</html>
index 5c671f3..47d65f4 100755 (executable)
@@ -1,29 +1,30 @@
-<script type="text/javascript">setMediaPopupURL('<%formdata(adminurl)%>');</script>\r
-\r
-<form method="post" action="<%formdata(adminurl)%>index.php">\r
- <div class="blogform">\r
-   <input type="hidden" name="action" value="additem" />\r
-   <input type="hidden" name="actiontype" value="addnow" />               \r
-   <input type="hidden" name="closed" value="0" />                \r
-   <input type="hidden" name="catid" value="<%formdata(catid)%>" />\r
-   <input type="submit" name="submit" value="<%text(_ADD_ADDITEM)%>" class="formbutton" />\r
-   <br />\r
-   <input type="text" \r
-       name="title" \r
-       id="inputtitle" \r
-       onkeyup="storeCaret(this); updPreview('title');"\r
-       onclick="storeCaret(this);"\r
-       onselect="storeCaret(this);" \r
-       onkeypress="shortCuts();"                          \r
-       class="formfield" size="45" value="" />\r
-   <br />\r
-   <textarea name="body" id="inputbody" class="formfield" cols="45" rows="12" \r
-       onkeyup="storeCaret(this); updPreview('body');"\r
-       onclick="storeCaret(this);"\r
-       onselect="storeCaret(this);" \r
-       onkeypress="shortCuts();"       ></textarea>\r
-   <br />\r
-   <span class="shortcuts">[ctrl+shift+A]&nbsp;=&nbsp;Link, [ctrl+shift+B]&nbsp;=&nbsp;Bold, [ctrl+shift+I]&nbsp;=&nbsp;Italic, [ctrl+shift+M]&nbsp;=&nbsp;Insert&nbsp;Media.</span>\r
-   <%callback(FormExtra,additemform)%> \r
- </div>\r
-</form>
\ No newline at end of file
+<script type="text/javascript">setMediaPopupURL('<%formdata(adminurl)%>');</script>
+
+<form method="post" action="<%formdata(adminurl)%>index.php">
+ <div class="blogform">
+   <%ticket%>
+   <input type="hidden" name="action" value="additem" />
+   <input type="hidden" name="actiontype" value="addnow" />               
+   <input type="hidden" name="closed" value="0" />                
+   <input type="hidden" name="catid" value="<%formdata(catid)%>" />
+   <input type="submit" name="submit" value="<%text(_ADD_ADDITEM)%>" class="formbutton" />
+   <br />
+   <input type="text" 
+       name="title" 
+       id="inputtitle" 
+       onkeyup="storeCaret(this); updPreview('title');"
+       onclick="storeCaret(this);"
+       onselect="storeCaret(this);" 
+       onkeypress="shortCuts();"                          
+       class="formfield" size="45" value="" />
+   <br />
+   <textarea name="body" id="inputbody" class="formfield" cols="45" rows="12" 
+       onkeyup="storeCaret(this); updPreview('body');"
+       onclick="storeCaret(this);"
+       onselect="storeCaret(this);" 
+       onkeypress="shortCuts();"       ></textarea>
+   <br />
+   <span class="shortcuts">[ctrl+shift+A]&nbsp;=&nbsp;Link, [ctrl+shift+B]&nbsp;=&nbsp;Bold, [ctrl+shift+I]&nbsp;=&nbsp;Italic, [ctrl+shift+M]&nbsp;=&nbsp;Insert&nbsp;Media.</span>
+   <%callback(FormExtra,additemform)%> 
+ </div>
+</form>
index 503600c..b9393ec 100755 (executable)
@@ -1 +1 @@
-<div class="commentform"><%text(_ERROR_ITEMCLOSED)%></div>\r
+<div class="commentform"><%text(_ERROR_ITEMCLOSED)%></div>
index 89dfa4a..72a3171 100755 (executable)
@@ -1,19 +1,19 @@
-<a id="nucleus_cf"></a>\r
-<form method="post" action="#nucleus_cf">\r
-  <div class="commentform">\r
-       <%errordiv%>\r
-       \r
-       <input type="hidden" name="action" value="addcomment" />\r
-       <input type="hidden" name="url" value="<%formdata(destinationurl)%>" />\r
-       <input type="hidden" name="itemid" value="<%itemid%>" />\r
-       <label for="nucleus_cf_body"><%text(_COMMENTFORM_COMMENT)%></label>:\r
-       <br />\r
-       <textarea name="body" class="formfield" cols="40" rows="10" id="nucleus_cf_body"><%formdata(body)%></textarea>\r
-       <br />\r
-       <%text(_COMMENTFORM_YOUARE)%> <%formdata(membername)%>\r
-       <small>(<a href="?action=logout"><%text(_LOGOUT)%></a>)</small>\r
-       <br />\r
-       <input type="submit" value="<%text(_COMMENTFORM_SUBMIT)%>" class="formbutton" />\r
-       <%callback(FormExtra,commentform-loggedin)%>    \r
-  </div>\r
+<a id="nucleus_cf"></a>
+<form method="post" action="#nucleus_cf">
+  <div class="commentform">
+       <%errordiv%>
+       
+       <input type="hidden" name="action" value="addcomment" />
+       <input type="hidden" name="url" value="<%formdata(destinationurl)%>" />
+       <input type="hidden" name="itemid" value="<%itemid%>" />
+       <label for="nucleus_cf_body"><%text(_COMMENTFORM_COMMENT)%></label>:
+       <br />
+       <textarea name="body" class="formfield" cols="40" rows="10" id="nucleus_cf_body"><%formdata(body)%></textarea>
+       <br />
+       <%text(_COMMENTFORM_YOUARE)%> <%formdata(membername)%>
+       <small>(<a href="?action=logout"><%text(_LOGOUT)%></a>)</small>
+       <br />
+       <input type="submit" value="<%text(_COMMENTFORM_SUBMIT)%>" class="formbutton" />
+       <%callback(FormExtra,commentform-loggedin)%>    
+  </div>
 </form>
\ No newline at end of file
index 617eb0e..7d9946d 100755 (executable)
@@ -1,25 +1,25 @@
-<a id="nucleus_cf"></a>\r
-<form method="post" action="#nucleus_cf"> \r
-  <div class="commentform">\r
-\r
-       <%errordiv%>\r
-\r
-       <input type="hidden" name="action" value="addcomment" />\r
-       <input type="hidden" name="url" value="<%formdata(destinationurl)%>" />\r
-       <input type="hidden" name="itemid" value="<%itemid%>" />\r
-       <label for="nucleus_cf_body"><%text(_COMMENTFORM_COMMENT)%></label>:\r
-       <br />\r
-       <textarea name="body" class="formfield" cols="40" rows="10" id="nucleus_cf_body"><%formdata(body)%></textarea>\r
-       <br />\r
-       <label for="nucleus_cf_name"><%text(_COMMENTFORM_NAME)%></label>: <input name="user" size="40" maxlength="40" value="<%formdata(user)%>" class="formfield" id="nucleus_cf_name" />\r
-       <br />\r
-       <label for="nucleus_cf_mail"><%text(_COMMENTFORM_MAIL)%></label>: <input name="userid" size="40" maxlength="60" value="<%formdata(userid)%>" class="formfield" id="nucleus_cf_mail" />\r
-\r
-       <%callback(FormExtra,commentform-notloggedin)%> \r
-       \r
-       <br />\r
-       <input type="checkbox" value="1" name="remember" id="nucleus_cf_remember" <%formdata(rememberchecked)%> /><label for="nucleus_cf_remember"><%text(_COMMENTFORM_REMEMBER)%></label>\r
-       <br />\r
-       <input type="submit" value="<%text(_COMMENTFORM_SUBMIT)%>" class="formbutton" />\r
-  </div>\r
+<a id="nucleus_cf"></a>
+<form method="post" action="#nucleus_cf"> 
+  <div class="commentform">
+
+       <%errordiv%>
+
+       <input type="hidden" name="action" value="addcomment" />
+       <input type="hidden" name="url" value="<%formdata(destinationurl)%>" />
+       <input type="hidden" name="itemid" value="<%itemid%>" />
+       <label for="nucleus_cf_body"><%text(_COMMENTFORM_COMMENT)%></label>:
+       <br />
+       <textarea name="body" class="formfield" cols="40" rows="10" id="nucleus_cf_body"><%formdata(body)%></textarea>
+       <br />
+       <label for="nucleus_cf_name"><%text(_COMMENTFORM_NAME)%></label>: <input name="user" size="40" maxlength="40" value="<%formdata(user)%>" class="formfield" id="nucleus_cf_name" />
+       <br />
+       <label for="nucleus_cf_mail"><%text(_COMMENTFORM_MAIL)%></label>: <input name="userid" size="40" maxlength="60" value="<%formdata(userid)%>" class="formfield" id="nucleus_cf_mail" />
+
+       <%callback(FormExtra,commentform-notloggedin)%> 
+       
+       <br />
+       <input type="checkbox" value="1" name="remember" id="nucleus_cf_remember" <%formdata(rememberchecked)%> /><label for="nucleus_cf_remember"><%text(_COMMENTFORM_REMEMBER)%></label>
+       <br />
+       <input type="submit" value="<%text(_COMMENTFORM_SUBMIT)%>" class="formbutton" />
+  </div>
 </form>
\ No newline at end of file
index 698b081..28c0544 100755 (executable)
@@ -1,3 +1,4 @@
-<div class="loginform">\r
-       <%text(_LOGINFORM_YOUARE)%> <%formdata(membername)%> ! (<a href="<%self%>?action=logout"><%text(_LOGOUT)%></a>)\r
-</div>\r
+<a id="nucleus_lf"></a>
+<div class="loginform">
+       <%text(_LOGINFORM_YOUARE)%> <%formdata(membername)%> ! (<a href="<%self%>?action=logout"><%text(_LOGOUT)%></a>)
+</div>
index 7ae420a..a157f8c 100755 (executable)
@@ -1,12 +1,16 @@
-<form method="post" action="<%self%>">\r
-  <div class="loginform">\r
-       <input type="hidden" name="action" value="login" />\r
-       <label for="nucleus_lf_name" accesskey="l"><%text(_LOGINFORM_NAME)%></label>: <input id="nucleus_lf_name" name="login" size="10" value="" class="formfield" />\r
-       <br />\r
-       <label for="nucleus_lf_pwd"><%text(_LOGINFORM_PWD)%></label>: <input id="nucleus_lf_pwd" name="password" size="10" type="password" value="" class="formfield" />\r
-       <br />\r
-       <input type="submit" value="<%text(_LOGIN)%>" class="formbutton" />\r
-       <br />\r
-       <input type="checkbox" value="1" name="shared" id="nucleus_lf_shared" /><label for="nucleus_lf_shared"><%text(_LOGINFORM_SHARED)%></label>\r
-  </div>\r
+<a id="nucleus_lf"></a>
+<form method="post" action="#nucleus_lf">
+  <div class="loginform">
+  
+       <%errordiv%>
+  
+       <input type="hidden" name="action" value="login" />
+       <label for="nucleus_lf_name" accesskey="l"><%text(_LOGINFORM_NAME)%></label>: <input id="nucleus_lf_name" name="login" size="10" value="" class="formfield" />
+       <br />
+       <label for="nucleus_lf_pwd"><%text(_LOGINFORM_PWD)%></label>: <input id="nucleus_lf_pwd" name="password" size="10" type="password" value="" class="formfield" />
+       <br />
+       <input type="submit" value="<%text(_LOGIN)%>" class="formbutton" />
+       <br />
+       <input type="checkbox" value="1" name="shared" id="nucleus_lf_shared" /><label for="nucleus_lf_shared"><%text(_LOGINFORM_SHARED)%></label>
+  </div>
 </form>
\ No newline at end of file
index 12e51ee..a814712 100755 (executable)
@@ -1,19 +1,19 @@
-<a id="nucleus_mf"></a>\r
-<form method="post" action="#nucleus_mf">\r
-  <div class="mailform">\r
-       <%errordiv%>\r
-  \r
-       <input type="hidden" name="memberid" value="<%formdata(memberid)%>" />\r
-       <input type="hidden" name="action" value="sendmessage" />\r
-\r
-       <input type="hidden" name="url" value="<%formdata(url)%>" />\r
-\r
-       <textarea name="message" class="formfield" rows="<%formdata(rows)%>" cols="<%formdata(cols)%>"><%formdata(message)%></textarea>\r
-\r
-       <%callback(FormExtra,membermailform-loggedin)%> \r
-       \r
-       <br />\r
-       <input type="submit" value="<%text(_MEMBERMAIL_SUBMIT)%>" class="formbutton" />\r
-       \r
-  </div>\r
-</form>                \r
+<a id="nucleus_mf"></a>
+<form method="post" action="#nucleus_mf">
+  <div class="mailform">
+       <%errordiv%>
+  
+       <input type="hidden" name="memberid" value="<%formdata(memberid)%>" />
+       <input type="hidden" name="action" value="sendmessage" />
+
+       <input type="hidden" name="url" value="<%formdata(url)%>" />
+
+       <textarea name="message" class="formfield" rows="<%formdata(rows)%>" cols="<%formdata(cols)%>"><%formdata(message)%></textarea>
+
+       <%callback(FormExtra,membermailform-loggedin)%> 
+       
+       <br />
+       <input type="submit" value="<%text(_MEMBERMAIL_SUBMIT)%>" class="formbutton" />
+       
+  </div>
+</form>                
index ba73ca3..810a49f 100755 (executable)
@@ -1,20 +1,20 @@
-<a id="nucleus_mf"></a>\r
-<form method="post" action="#nucleus_mf">\r
-  <div class="mailform">\r
-       <%errordiv%>\r
-       \r
-       <input type="hidden" name="memberid" value="<%formdata(memberid)%>" />\r
-       <input type="hidden" name="action" value="sendmessage" />\r
-\r
-       <input type="hidden" name="url" value="<%formdata(url)%>" />\r
-\r
-       <textarea name="message" class="formfield" rows="<%formdata(rows)%>" cols="<%formdata(cols)%>"><%formdata(message)%></textarea>\r
-       <br />\r
-       <%text(_MEMBERMAIL_MAIL)%><input type="text" name="frommail" class="formfield" value="<%formdata(frommail)%>" />\r
-       \r
-       <%callback(FormExtra,membermailform-notloggedin)%>      \r
-       \r
-       <br />\r
-       <input type="submit" value="<%text(_MEMBERMAIL_SUBMIT)%>" class="formbutton" />\r
-  </div>\r
-</form>                \r
+<a id="nucleus_mf"></a>
+<form method="post" action="#nucleus_mf">
+  <div class="mailform">
+       <%errordiv%>
+       
+       <input type="hidden" name="memberid" value="<%formdata(memberid)%>" />
+       <input type="hidden" name="action" value="sendmessage" />
+
+       <input type="hidden" name="url" value="<%formdata(url)%>" />
+
+       <textarea name="message" class="formfield" rows="<%formdata(rows)%>" cols="<%formdata(cols)%>"><%formdata(message)%></textarea>
+       <br />
+       <%text(_MEMBERMAIL_MAIL)%><input type="text" name="frommail" class="formfield" value="<%formdata(frommail)%>" />
+       
+       <%callback(FormExtra,membermailform-notloggedin)%>      
+       
+       <br />
+       <input type="submit" value="<%text(_MEMBERMAIL_SUBMIT)%>" class="formbutton" />
+  </div>
+</form>                
index dbda482..a283175 100755 (executable)
@@ -1,3 +1,3 @@
-<div class="nucleusbutton">\r
-<a href="http://nucleuscms.org/"><img src="<%formdata(imgurl)%>" width="<%formdata(imgwidth)%>" height="<%formdata(imgheight)%>" alt="Powered by Nucleus CMS" /></a>\r
-</div>\r
+<div class="nucleusbutton">
+<a href="http://nucleuscms.org/"><img src="<%formdata(imgurl)%>" width="<%formdata(imgwidth)%>" height="<%formdata(imgheight)%>" alt="Powered by Nucleus CMS" /></a>
+</div>
index 2ddcc68..a63ce9f 100755 (executable)
@@ -1,9 +1,9 @@
-<form method="get" action="<%self%>">\r
-  <div class="searchform">\r
-       <input name="query" class="formfield" size="10" maxlength="60" accesskey="4" value="<%formdata(query)%>" />\r
-       <input type="hidden" name="amount" value="0" />\r
-       <input type="hidden" name="blogid" value="<%formdata(id)%>" />\r
-       <br />\r
-       <input type="submit" value="<%text(_SEARCHFORM_SUBMIT)%>" class="formbutton" />\r
-  </div>\r
-</form>\r
+<form method="get" action="<%self%>">
+  <div class="searchform">
+       <input name="query" class="formfield" size="10" maxlength="60" accesskey="4" value="<%formdata(query)%>" />
+       <input type="hidden" name="amount" value="0" />
+       <input type="hidden" name="blogid" value="<%formdata(id)%>" />
+       <br />
+       <input type="submit" value="<%text(_SEARCHFORM_SUBMIT)%>" class="formbutton" />
+  </div>
+</form>
index a27a944..53d9bf6 100755 (executable)
Binary files a/nucleus/images/button-alignright.gif and b/nucleus/images/button-alignright.gif differ
index 9158414..b681b8d 100755 (executable)
Binary files a/nucleus/images/button-left.gif and b/nucleus/images/button-left.gif differ
index c1a41e2..fc3e7bc 100755 (executable)
Binary files a/nucleus/images/button-link.gif and b/nucleus/images/button-link.gif differ
index 03f2a47..e9ab802 100755 (executable)
Binary files a/nucleus/images/globe.gif and b/nucleus/images/globe.gif differ
index 2001194..46f7685 100755 (executable)
@@ -1,49 +1,49 @@
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *  \r
-  * Some JavaScript code for the admin area\r
-  *\r
-  * $Id: admin.js,v 1.3 2005-03-12 06:19:04 kimitake Exp $\r
-  * $NucleusJP$\r
-  */\r
-\r
-function help(url) {\r
-       popup = window.open(url,'helpwindow','status=no,toolbar=yes,scrollbars=yes,resizable=yes,width=500,height=500,top=0,left=0');\r
-       if (popup.focus) popup.focus();\r
-       if (popup.GetAttention) popup.GetAttention();\r
-       return false;\r
-}                              \r
-\r
-var oldCellColor = "#000";\r
-function focusRow(row) {\r
-       var cells = row.cells;\r
-       if (!cells) return;\r
-       oldCellColor = cells[0].style.backgroundColor;\r
-       for (var i=0;i<cells.length;i++) {\r
-               cells[i].style.backgroundColor='whitesmoke';\r
-       }\r
-}\r
-function blurRow(row) {\r
-       var cells = row.cells;\r
-       if (!cells) return;\r
-       for (var i=0;i<cells.length;i++) {\r
-               cells[i].style.backgroundColor=oldCellColor;\r
-       }\r
-}\r
-function batchSelectAll(what) {\r
-       var i = 0;\r
-       var el;\r
-       while (el = document.getElementById('batch' + i)) {\r
-               el.checked = what?'checked':'';\r
-               i++;\r
-       }\r
-       return false;                                   \r
-}\r
-\r
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2006 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *  
+  * Some JavaScript code for the admin area
+  *
+  * $Id: admin.js,v 1.4 2006-07-12 07:11:47 kimitake Exp $
+  * $NucleusJP: admin.js,v 1.3 2005/03/12 06:19:04 kimitake Exp $
+  */
+
+function help(url) {
+       popup = window.open(url,'helpwindow','status=no,toolbar=yes,scrollbars=yes,resizable=yes,width=500,height=500,top=0,left=0');
+       if (popup.focus) popup.focus();
+       if (popup.GetAttention) popup.GetAttention();
+       return false;
+}                              
+
+var oldCellColor = "#000";
+function focusRow(row) {
+       var cells = row.cells;
+       if (!cells) return;
+       oldCellColor = cells[0].style.backgroundColor;
+       for (var i=0;i<cells.length;i++) {
+               cells[i].style.backgroundColor='whitesmoke';
+       }
+}
+function blurRow(row) {
+       var cells = row.cells;
+       if (!cells) return;
+       for (var i=0;i<cells.length;i++) {
+               cells[i].style.backgroundColor=oldCellColor;
+       }
+}
+function batchSelectAll(what) {
+       var i = 0;
+       var el;
+       while (el = document.getElementById('batch' + i)) {
+               el.checked = what?'checked':'';
+               i++;
+       }
+       return false;                                   
+}
+
index 09c9abb..58c7413 100755 (executable)
@@ -1,71 +1,71 @@
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *  \r
-  * Some JavaScript code for the bookmarklets\r
-  *\r
-  * $Id: bookmarklet.js,v 1.3 2005-03-12 06:19:04 kimitake Exp $\r
-  * $NucleusJP$\r
-  */\r
-\r
-/**\r
- * On browsers that have DOM support, the non-visible tabs of the bookmarklet are \r
- * initially hidden. This is not defined in the CSS stylesheet since this causes \r
- * problems with Opera (which does not seem to be sending form data for input\r
- * fields which are in a hidden block)\r
- */\r
-function initStyles() {\r
-       hideBlock('more');\r
-       hideBlock('options');\r
-       hideBlock('preview');\r
-       \r
-       // in browsers that do not support DOM (like opera), the buttons used\r
-       // to switch tabs are useless and can be hidden\r
-       document.getElementById('switchbuttons').style.display = 'inline';\r
-}\r
-\r
-/**\r
- * To be called with id='body','more','options' or 'preview'\r
- * Hides all other tabs and makes the chosen one visible\r
- */\r
-function flipBlock(id) {\r
-\r
-       showBlock(id);\r
-       \r
-       if (id != 'body')\r
-               hideBlock('body');\r
-       if (id != 'more')\r
-               hideBlock('more');\r
-       if (id != 'options')\r
-               hideBlock('options');\r
-       if (id != 'preview')\r
-               hideBlock('preview');           \r
-       \r
-}\r
-\r
-/**\r
- * Hides one element (tab)\r
- */\r
-function hideBlock(id) {\r
-       document.getElementById(id).style.display = "none";\r
-}\r
-\r
-/**\r
- * Makes an element (tab) visible\r
- */\r
-function showBlock(id) {\r
-       document.getElementById(id).style.display = "block";\r
-}\r
-\r
-function help(url) {\r
-       popup = window.open(url,'helpwindow','status=no,toolbar=yes,scrollbars=yes,resizable=yes,width=500,height=500,top=0,left=0');\r
-       if (popup.focus) popup.focus();\r
-       if (popup.GetAttention) popup.GetAttention();\r
-       return false;\r
-}\r
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2006 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *  
+  * Some JavaScript code for the bookmarklets
+  *
+  * $Id: bookmarklet.js,v 1.4 2006-07-12 07:11:47 kimitake Exp $
+  * $NucleusJP: bookmarklet.js,v 1.3 2005/03/12 06:19:04 kimitake Exp $
+  */
+
+/**
+ * On browsers that have DOM support, the non-visible tabs of the bookmarklet are 
+ * initially hidden. This is not defined in the CSS stylesheet since this causes 
+ * problems with Opera (which does not seem to be sending form data for input
+ * fields which are in a hidden block)
+ */
+function initStyles() {
+       hideBlock('more');
+       hideBlock('options');
+       hideBlock('preview');
+       
+       // in browsers that do not support DOM (like opera), the buttons used
+       // to switch tabs are useless and can be hidden
+       document.getElementById('switchbuttons').style.display = 'inline';
+}
+
+/**
+ * To be called with id='body','more','options' or 'preview'
+ * Hides all other tabs and makes the chosen one visible
+ */
+function flipBlock(id) {
+
+       showBlock(id);
+       
+       if (id != 'body')
+               hideBlock('body');
+       if (id != 'more')
+               hideBlock('more');
+       if (id != 'options')
+               hideBlock('options');
+       if (id != 'preview')
+               hideBlock('preview');           
+       
+}
+
+/**
+ * Hides one element (tab)
+ */
+function hideBlock(id) {
+       document.getElementById(id).style.display = "none";
+}
+
+/**
+ * Makes an element (tab) visible
+ */
+function showBlock(id) {
+       document.getElementById(id).style.display = "block";
+}
+
+function help(url) {
+       popup = window.open(url,'helpwindow','status=no,toolbar=yes,scrollbars=yes,resizable=yes,width=500,height=500,top=0,left=0');
+       if (popup.focus) popup.focus();
+       if (popup.GetAttention) popup.GetAttention();
+       return false;
+}
index 809850b..81d1ff5 100755 (executable)
@@ -1,34 +1,34 @@
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  *    Javascript code to make sure that:\r
-  *  - javascript still works when sending pages as application/xhtml+xml\r
-  *  - this doesn't break functionality in IE\r
-  *\r
-  * How to use:\r
-  *            - Include this file\r
-  *            - Use createElement() instead of document.createElement()\r
-  *\r
-  * That's basically it :)\r
-  *\r
-  * $Id: compatibility.js,v 1.3 2005-03-12 06:19:04 kimitake Exp $\r
-  * $NucleusJP$\r
-  */\r
-\r
-// to get the script working when page is sent as application/xhtml+xml\r
-function createElement(element) {\r
-  if (document.createElementNS) {\r
-       return document.createElementNS('http://www.w3.org/1999/xhtml', element);\r
-  }\r
-  if (document.createElement) {\r
-       return document.createElement(element);\r
-  }\r
-  return false;\r
-}\r
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2006 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  *    Javascript code to make sure that:
+  *  - javascript still works when sending pages as application/xhtml+xml
+  *  - this doesn't break functionality in IE
+  *
+  * How to use:
+  *            - Include this file
+  *            - Use createElement() instead of document.createElement()
+  *
+  * That's basically it :)
+  *
+  * $Id: compatibility.js,v 1.4 2006-07-12 07:11:47 kimitake Exp $
+  * $NucleusJP: compatibility.js,v 1.3 2005/03/12 06:19:04 kimitake Exp $
+  */
+
+// to get the script working when page is sent as application/xhtml+xml
+function createElement(element) {
+  if (document.createElementNS) {
+       return document.createElementNS('http://www.w3.org/1999/xhtml', element);
+  }
+  if (document.createElement) {
+       return document.createElement(element);
+  }
+  return false;
+}
index ade3d80..925c9bb 100755 (executable)
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  * This file contains functions to allow adding items from inside the weblog.\r
-  * Also contains code to avoid submitting form data twice.\r
-  *\r
-  * $Id: edit.js,v 1.4 2005-03-23 06:14:53 kimitake Exp $\r
-  * $NucleusJP: edit.js,v 1.3 2005/03/12 06:19:04 kimitake Exp $\r
-  */\r
-\r
-var nucleusConvertBreaks = true;\r
-var nucleusMediaPopupURL = '';\r
-var nucleusMediaURL = 'media/';\r
-var nucleusAuthorId = 0;\r
-\r
-function setConvertBreaks(newval) {    nucleusConvertBreaks = newval; }\r
-function setMediaUrl(url) { nucleusMediaURL = url; }\r
-function setAuthorId(id) { nucleusAuthorId = id; }\r
-\r
-function preview(id, value) {\r
-       elem = document.getElementById(id);\r
-       if (!elem) return;\r
-       \r
-       var preview = nucleusConvertBreaks ? str_replace("\n","<br />",value)+"&nbsp;" : value+"&nbsp;";\r
-       \r
-       // expand the media commands (without explicit collection)\r
-       preview = preview.replace(/\<\%image\(([^\/\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<img src='"+nucleusMediaURL+nucleusAuthorId+"/$1' width='$2' height='$3' alt=\"$4\" />");\r
-       \r
-       // expand the media commands (with collection)\r
-       preview = preview.replace(/\<\%image\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<img src='"+nucleusMediaURL+"$1' width='$2' height='$3' alt=\"$4\" />");\r
-       preview = preview.replace(/\<\%popup\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<a href='' onclick='if (event &amp;&amp; event.preventDefault) event.preventDefault(); alert(\"popup image\"); return false;' title='popup'>$4</a>");\r
-       preview = preview.replace(/\<\%media\(([^\|]*)\|([^)]*)\)\%\>/g,"<a href='' title='media link'>$2</a>");        \r
-       \r
-       elem.innerHTML = preview;\r
-}\r
-\r
-function showedit() {\r
-       prevval = document.getElementById('edit').style.display;\r
-       if (prevval == "block")\r
-               newval = "none";\r
-       else\r
-               newval = "block";\r
-       document.getElementById('edit').style.display = newval;\r
-\r
-       if (newval == "block")\r
-               updAllPreviews();       \r
-}\r
-\r
-function updAllPreviews() {\r
-       updPreview('title');\r
-       updPreview('body');\r
-       updPreview('more');\r
-}\r
-\r
-function isEditVisible() {\r
-       var editform = document.getElementById('edit');\r
-       if (!editform) return true;\r
-       var prevval = editform.style.display;\r
-       return (prevval == "none") ? false : true;\r
-}\r
-\r
-function updPreview(id) {\r
-       // don't update when preview is hidden\r
-       if (!isEditVisible()) return;\r
-       \r
-       var inputField = document.getElementById('input' + id);\r
-       if (!inputField) return;\r
-       preview('prev' + id, inputField.value);\r
-}\r
-\r
-// replace a in s by b (taken from milov.nl)\r
-function str_replace(a, b, s)\r
-{\r
-       if (a == b || !s.length || !a.length) return s;\r
-       if ((p=s.indexOf(a)) == -1) { return s; }\r
-       else { ns = s.substring(0,p) + b + s.substring(p+a.length,s.length); }\r
-       return (s.indexOf(a) != -1) ? str_replace(a, b, ns) : ns;\r
-}\r
-\r
-function shortCuts() {\r
-       if (!event || (event.ctrlKey != true)) return;\r
-       \r
-       switch (event.keyCode) {\r
-               case 1:\r
-                       ahrefThis(); break; // ctrl-shift-a\r
-               case 2:\r
-                       boldThis(); break; // ctrl-shift-b\r
-               case 9:\r
-                       italicThis(); break; // ctrl-shift-i\r
-               case 13:\r
-                       addMedia(); break; // ctrl-shift-m\r
-               default: \r
-                       return;\r
-       }\r
-       return;\r
-}\r
-\r
-function cutThis() { execAndUpdate('cut'); }\r
-function copyThis() { execAndUpdate('copy'); }\r
-function pasteThis() { execAndUpdate('paste'); }\r
-function boldThis() { insertAroundCaret('<b>','</b>'); }\r
-function italicThis() { insertAroundCaret('<i>','</i>'); }\r
-function leftThis() { insertAroundCaret('<div class="leftbox">','</div>'); }\r
-function rightThis() { insertAroundCaret('<div class="rightbox">','</div>'); }\r
-function alignleftThis() { insertAroundCaret('<div style="text-align: left">','</div>'); }\r
-function alignrightThis() { insertAroundCaret('<div style="text-align: right">','</div>'); }\r
-function aligncenterThis() { insertAroundCaret('<div style="text-align: center">','</div>'); }\r
-\r
-\r
-function ahrefThis() {\r
-       if (document.selection)\r
-               strSelection = document.selection.createRange().text;\r
-       else\r
-               strSelection = '';\r
-               \r
-       strHref = prompt("Create a link to:","http://");\r
-       if (strHref == null) return;\r
-       \r
-       var textpre = "<a href=\"" + strHref + "\">";\r
-       insertAroundCaret(textpre, "</a>");\r
-}\r
-\r
-function execAndUpdate(action) {\r
-       lastCaretPos.execCommand(action);\r
-       updAllPreviews();       \r
-}\r
-\r
-\r
-var nonie_FormType = 'body';\r
-\r
-// Add media to new item\r
-function addMedia() {\r
-       \r
-       var mediapopup = window.open(nucleusMediaPopupURL + 'media.php','name',\r
-               'status=yes,toolbar=no,scrollbars=yes,resizable=yes,width=500,height=450,top=0,left=0');\r
-\r
-       return;\r
-} \r
-\r
-\r
-function setMediaPopupURL(url) {\r
-       nucleusMediaPopupURL = url;\r
-}\r
-\r
-function includeImage(collection, filename, type, width, height) {\r
-       if (isCaretEmpty()) {\r
-               text = prompt("Text to display ?","");\r
-       } else {\r
-               text = getCaretText();\r
-       }\r
-       \r
-       // add collection name when not private collection (or editing a message that's not your)\r
-       var fullName;\r
-       if (isNaN(collection) || (nucleusAuthorId != collection)) {\r
-               fullName = collection + '/' + filename;\r
-       } else {\r
-               fullName = filename;\r
-       }\r
-               \r
-       \r
-       var replaceBy;\r
-       switch(type) {\r
-               case 'popup':\r
-                       replaceBy = '<%popup(' +  fullName + '|'+width+'|'+height+'|' + text +')%>';\r
-                       break;\r
-               case 'inline':\r
-               default:\r
-                       replaceBy = '<%image(' +  fullName + '|'+width+'|'+height+'|' + text +')%>';\r
-       }\r
-       \r
-       insertAtCaret(replaceBy);\r
-       updAllPreviews();       \r
-\r
-}\r
-\r
-\r
-function includeOtherMedia(collection, filename) {\r
-       if (isCaretEmpty()) {\r
-               text = prompt("Text to display ?","");\r
-       } else {\r
-               text = getCaretText();\r
-       }\r
-       \r
-       // add collection name when not private collection (or editing a message that's not your)\r
-       var fullName;\r
-       if (isNaN(collection) || (nucleusAuthorId != collection)) {\r
-               fullName = collection + '/' + filename;\r
-       } else {\r
-               fullName = filename;\r
-       }       \r
-       \r
-       var replaceBy = '<%media(' +  fullName + '|' + text +')%>';\r
-       \r
-       insertAtCaret(replaceBy);\r
-       updAllPreviews();       \r
-}\r
-\r
-\r
-\r
-// function to prevent submitting form data twice\r
-var submitcount=0;\r
-function checkSubmit() {\r
-       if (submitcount == 0) {\r
-               submitcount++;\r
-               return true;\r
-       } else {\r
-               return false;\r
-       }\r
-}\r
-\r
-\r
-// code to store the caret (cursor) position of a text field/text area\r
-// taken from javascript.faqts and modified\r
-// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130\r
-\r
-// stores the caret\r
-var lastSelected, lastCaretPos;\r
-function storeCaret (textEl) {\r
-\r
-       // store caret\r
-       if (textEl.createTextRange) \r
-               //textEl.caretPos = document.selection.createRange().duplicate();\r
-               lastCaretPos = document.selection.createRange().duplicate();\r
-\r
-       // also store lastselectedelement\r
-       lastSelected = textEl;\r
-       \r
-       nonie_FormType = textEl.name;\r
-}\r
-\r
-//var lastSelected;\r
-\r
-// inserts text at caret (overwriting selection)\r
-function insertAtCaret (text) {\r
-       var textEl = lastSelected;\r
-       if (textEl && textEl.createTextRange && lastCaretPos) {\r
-               var caretPos = lastCaretPos;\r
-               caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;\r
-       } else if (!document.all && document.getElementById) {\r
-               mozReplace(document.getElementById('input' + nonie_FormType), text);                            \r
-       } else if (textEl) {\r
-               textEl.value  += text;\r
-       } else {\r
-               document.getElementById('input' + nonie_FormType).value += text;                \r
-       }\r
-       updAllPreviews();\r
-}\r
-\r
-// inserts a tag around the selected text\r
-function insertAroundCaret (textpre, textpost) {\r
-       var textEl = lastSelected;\r
-       \r
-       if (textEl && textEl.createTextRange && lastCaretPos) {\r
-               var caretPos = lastCaretPos;\r
-               caretPos.text = textpre + caretPos.text + textpost;\r
-       } else if (!document.all && document.getElementById) {\r
-               mozWrap(document.getElementById('input' + nonie_FormType), textpre, textpost);          \r
-       } else {\r
-               document.getElementById('input' + nonie_FormType).value += textpre + textpost;\r
-       }\r
-\r
-       updAllPreviews();\r
-}\r
-\r
-/* some methods to get things working in Mozilla as well */\r
-function mozWrap(txtarea, lft, rgt) {\r
-       var selLength = txtarea.textLength;\r
-       var selStart = txtarea.selectionStart;\r
-       var selEnd = txtarea.selectionEnd;\r
-       if (selEnd==1 || selEnd==2) selEnd=selLength;\r
-       var s1 = (txtarea.value).substring(0,selStart);\r
-       var s2 = (txtarea.value).substring(selStart, selEnd)\r
-       var s3 = (txtarea.value).substring(selEnd, selLength);\r
-       txtarea.value = s1 + lft + s2 + rgt + s3;\r
-}\r
-function mozReplace(txtarea, newText) {\r
-       var selLength = txtarea.textLength;\r
-       var selStart = txtarea.selectionStart;\r
-       var selEnd = txtarea.selectionEnd;\r
-       if (selEnd==1 || selEnd==2) selEnd=selLength;\r
-       var s1 = (txtarea.value).substring(0,selStart);\r
-       var s2 = (txtarea.value).substring(selStart, selEnd)\r
-       var s3 = (txtarea.value).substring(selEnd, selLength);\r
-       txtarea.value = s1 + newText + s3;\r
-}\r
-function mozSelectedText() {\r
-       var txtarea = document.getElementById('input' + nonie_FormType);\r
-       var selLength = txtarea.textLength;\r
-       var selStart = txtarea.selectionStart;\r
-       var selEnd = txtarea.selectionEnd;\r
-       if (selEnd==1 || selEnd==2) selEnd=selLength;\r
-       return (txtarea.value).substring(selStart, selEnd);\r
-}\r
-\r
-function getCaretText() {\r
-       if (!document.all && document.getElementById)\r
-               return mozSelectedText();\r
-       else\r
-               return lastCaretPos.text;\r
-}\r
-\r
-function isCaretEmpty() {\r
-       if (lastSelected && lastSelected.createTextRange && lastCaretPos)\r
-               return (lastCaretPos.text == '');\r
-       else if (!document.all && document.getElementById)\r
-               return (mozSelectedText() == '');\r
-       else\r
-               return true;\r
-}\r
-\r
-function BtnHighlight(el) {\r
-       with(el.style){\r
-               borderLeft="1px solid gray";\r
-               borderRight="1px solid #e9e9e9";\r
-               borderTop="1px solid gray";\r
-               borderBottom="1px solid #e9e9e9";\r
-       }\r
-}\r
-\r
-function BtnNormal(el) {\r
-       with(el.style){\r
-               padding="3px";\r
-               border="1px solid #dddddd";\r
-       }\r
-}\r
-\r
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+  * Copyright (C) 2002-2006 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  * This file contains functions to allow adding items from inside the weblog.
+  * Also contains code to avoid submitting form data twice.
+  *
+  * $Id: edit.js,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+  * $NucleusJP: edit.js,v 1.4.2.1 2005/09/27 06:58:55 kimitake Exp $
+  */
+
+var nucleusConvertBreaks = true;
+var nucleusMediaPopupURL = '';
+var nucleusMediaURL = 'media/';
+var nucleusAuthorId = 0;
+var scrollTop = -1;
+
+function setConvertBreaks(newval) {    nucleusConvertBreaks = newval; }
+function setMediaUrl(url) { nucleusMediaURL = url; }
+function setAuthorId(id) { nucleusAuthorId = id; }
+
+function preview(id, value) {
+       elem = document.getElementById(id);
+       if (!elem) return;
+
+       var preview = nucleusConvertBreaks ? str_replace("\n","<br />",value)+"&#160;" : value+"&#160;";
+
+       // expand the media commands (without explicit collection)
+       preview = preview.replace(/\<\%image\(([^\/\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<img src='"+nucleusMediaURL+nucleusAuthorId+"/$1' width='$2' height='$3' alt=\"$4\" />");
+
+       // expand the media commands (with collection)
+       preview = preview.replace(/\<\%image\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<img src='"+nucleusMediaURL+"$1' width='$2' height='$3' alt=\"$4\" />");
+       preview = preview.replace(/\<\%popup\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<a href='' onclick='if (event &amp;&amp; event.preventDefault) event.preventDefault(); alert(\"popup image\"); return false;' title='popup'>$4</a>");
+       preview = preview.replace(/\<\%media\(([^\|]*)\|([^)]*)\)\%\>/g,"<a href='' title='media link'>$2</a>");
+
+       elem.innerHTML = preview;
+}
+
+function showedit() {
+       prevval = document.getElementById('edit').style.display;
+       if (prevval == "block")
+               newval = "none";
+       else
+               newval = "block";
+       document.getElementById('edit').style.display = newval;
+
+       if (newval == "block")
+               updAllPreviews();
+}
+
+function updAllPreviews() {
+       updPreview('title');
+       updPreview('body');
+       updPreview('more');
+}
+
+function isEditVisible() {
+       var editform = document.getElementById('edit');
+       if (!editform) return true;
+       var prevval = editform.style.display;
+       return (prevval == "none") ? false : true;
+}
+
+function updPreview(id) {
+       // don't update when preview is hidden
+       if (!isEditVisible()) return;
+
+       var inputField = document.getElementById('input' + id);
+       if (!inputField) return;
+       preview('prev' + id, inputField.value);
+}
+
+// replace a in s by b (taken from milov.nl)
+function str_replace(a, b, s)
+{
+       if (a == b || !s.length || !a.length) return s;
+       if ((p=s.indexOf(a)) == -1) { return s; }
+       else { ns = s.substring(0,p) + b + s.substring(p+a.length,s.length); }
+       return (s.indexOf(a) != -1) ? str_replace(a, b, ns) : ns;
+}
+
+function shortCuts() {
+       if (!event || (event.ctrlKey != true)) return;
+
+       switch (event.keyCode) {
+               case 1:
+                       ahrefThis(); break; // ctrl-shift-a
+               case 2:
+                       boldThis(); break; // ctrl-shift-b
+               case 9:
+                       italicThis(); break; // ctrl-shift-i
+               case 13:
+                       addMedia(); break; // ctrl-shift-m
+               default:
+                       return;
+       }
+       return;
+}
+
+function cutThis() { execAndUpdate('cut'); }
+function copyThis() { execAndUpdate('copy'); }
+function pasteThis() { execAndUpdate('paste'); }
+function boldThis() { insertAroundCaret('<b>','</b>'); }
+function italicThis() { insertAroundCaret('<i>','</i>'); }
+function leftThis() { insertAroundCaret('<div class="leftbox">','</div>'); }
+function rightThis() { insertAroundCaret('<div class="rightbox">','</div>'); }
+function alignleftThis() { insertAroundCaret('<div style="text-align: left">','</div>'); }
+function alignrightThis() { insertAroundCaret('<div style="text-align: right">','</div>'); }
+function aligncenterThis() { insertAroundCaret('<div style="text-align: center">','</div>'); }
+
+
+function ahrefThis() {
+       if (document.selection)
+               strSelection = document.selection.createRange().text;
+       else
+               strSelection = '';
+
+       strHref = prompt("Create a link to:","http://");
+       if (strHref == null) return;
+
+       var textpre = "<a href=\"" + strHref.replace(/&/g,'&amp;') + "\">";
+       insertAroundCaret(textpre, "</a>");
+}
+
+function execAndUpdate(action) {
+       lastSelected.caretPos.execCommand(action);
+       updAllPreviews();
+}
+
+
+var nonie_FormType = 'body';
+
+// Add media to new item
+function addMedia() {
+
+       var mediapopup = window.open(nucleusMediaPopupURL + 'media.php','name',
+               'status=yes,toolbar=no,scrollbars=yes,resizable=yes,width=500,height=450,top=0,left=0');
+
+       return;
+}
+
+
+function setMediaPopupURL(url) {
+       nucleusMediaPopupURL = url;
+}
+
+function includeImage(collection, filename, type, width, height) {
+       if (isCaretEmpty()) {
+               text = prompt("Text to display ?","");
+       } else {
+               text = getCaretText();
+       }
+
+       // add collection name when not private collection (or editing a message that's not your)
+       var fullName;
+       if (isNaN(collection) || (nucleusAuthorId != collection)) {
+               fullName = collection + '/' + filename;
+       } else {
+               fullName = filename;
+       }
+
+
+       var replaceBy;
+       switch(type) {
+               case 'popup':
+                       replaceBy = '<%popup(' +  fullName + '|'+width+'|'+height+'|' + text +')%>';
+                       break;
+               case 'inline':
+               default:
+                       replaceBy = '<%image(' +  fullName + '|'+width+'|'+height+'|' + text +')%>';
+       }
+
+       insertAtCaret(replaceBy);
+       updAllPreviews();
+
+}
+
+
+function includeOtherMedia(collection, filename) {
+       if (isCaretEmpty()) {
+               text = prompt("Text to display ?","");
+       } else {
+               text = getCaretText();
+       }
+
+       // add collection name when not private collection (or editing a message that's not your)
+       var fullName;
+       if (isNaN(collection) || (nucleusAuthorId != collection)) {
+               fullName = collection + '/' + filename;
+       } else {
+               fullName = filename;
+       }
+
+       var replaceBy = '<%media(' +  fullName + '|' + text +')%>';
+
+       insertAtCaret(replaceBy);
+       updAllPreviews();
+}
+
+
+
+// function to prevent submitting form data twice
+var submitcount=0;
+function checkSubmit() {
+       if (submitcount == 0) {
+               submitcount++;
+               return true;
+       } else {
+               return false;
+       }
+}
+
+
+// code to store the caret (cursor) position of a text field/text area
+// taken from javascript.faqts and modified
+// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
+
+// stores the caret
+var lastSelected, lastCaretPos;
+function storeCaret (textEl) {
+
+       // store caret
+       if (textEl.createTextRange) 
+               //textEl.caretPos = document.selection.createRange().duplicate();
+               lastCaretPos = document.selection.createRange().duplicate();
+
+       // also store lastselectedelement
+       lastSelected = textEl;
+       
+       nonie_FormType = textEl.name;
+
+       scrollTop = textEl.scrollTop;
+}
+
+//var lastSelected;
+
+// inserts text at caret (overwriting selection)
+function insertAtCaret (text) {
+       var textEl = lastSelected;
+       if (textEl && textEl.createTextRange && lastCaretPos) {
+               var caretPos = lastCaretPos;
+               caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
+       } else if (!document.all && document.getElementById) {
+               mozReplace(document.getElementById('input' + nonie_FormType), text);                            
+               if(scrollTop>-1) {
+                       document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
+               }
+       } else if (textEl) {
+               textEl.value  += text;
+       } else {
+               document.getElementById('input' + nonie_FormType).value += text;                
+               if(scrollTop>-1) {
+                       document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
+               }
+       }
+       updAllPreviews();
+}
+
+// inserts a tag around the selected text
+function insertAroundCaret (textpre, textpost) {
+       var textEl = lastSelected;
+       
+       if (textEl && textEl.createTextRange && lastCaretPos) {
+               var caretPos = lastCaretPos;
+               caretPos.text = textpre + caretPos.text + textpost;
+       } else if (!document.all && document.getElementById) {
+               mozWrap(document.getElementById('input' + nonie_FormType), textpre, textpost);          
+               if(scrollTop>-1) {
+                       document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
+               }
+       } else {
+               document.getElementById('input' + nonie_FormType).value += textpre + textpost;
+               if(scrollTop>-1) {
+                       document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
+               }
+       }
+
+       updAllPreviews();
+}
+
+/* some methods to get things working in Mozilla as well */
+function mozWrap(txtarea, lft, rgt) {
+       var selLength = txtarea.textLength;
+       var selStart = txtarea.selectionStart;
+       var selEnd = txtarea.selectionEnd;
+       if (selEnd==1 || selEnd==2) selEnd=selLength;
+       var s1 = (txtarea.value).substring(0,selStart);
+       var s2 = (txtarea.value).substring(selStart, selEnd)
+       var s3 = (txtarea.value).substring(selEnd, selLength);
+       txtarea.value = s1 + lft + s2 + rgt + s3;
+}
+function mozReplace(txtarea, newText) {
+       var selLength = txtarea.textLength;
+       var selStart = txtarea.selectionStart;
+       var selEnd = txtarea.selectionEnd;
+       if (selEnd==1 || selEnd==2) selEnd=selLength;
+       var s1 = (txtarea.value).substring(0,selStart);
+       var s2 = (txtarea.value).substring(selStart, selEnd)
+       var s3 = (txtarea.value).substring(selEnd, selLength);
+       txtarea.value = s1 + newText + s3;
+}
+function mozSelectedText() {
+       var txtarea = document.getElementById('input' + nonie_FormType);
+       var selLength = txtarea.textLength;
+       var selStart = txtarea.selectionStart;
+       var selEnd = txtarea.selectionEnd;
+       if (selEnd==1 || selEnd==2) selEnd=selLength;
+       return (txtarea.value).substring(selStart, selEnd);
+}
+
+function getCaretText() {
+       if (!document.all && document.getElementById)
+               return mozSelectedText();
+       else
+               return lastCaretPos.text;
+}
+
+function isCaretEmpty() {
+       if (lastSelected && lastSelected.createTextRange && lastCaretPos)
+               return (lastCaretPos.text == '');
+       else if (!document.all && document.getElementById)
+               return (mozSelectedText() == '');
+       else
+               return true;
+}
+
+function BtnHighlight(el) {
+       with(el.style){
+               borderLeft="1px solid gray";
+               borderRight="1px solid #e9e9e9";
+               borderTop="1px solid gray";
+               borderBottom="1px solid #e9e9e9";
+       }
+}
+
+function BtnNormal(el) {
+       with(el.style){
+               padding="3px";
+               border="1px solid #dddddd";
+       }
+}
+
index 50f792c..3974d80 100755 (executable)
@@ -1,11 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>Nothing Here</title>\r
-</head>\r
-<body>\r
-\r
-<h1>Nothing to see here</h1>\r
-\r
-</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
 </html>
\ No newline at end of file
index 6374511..817ec8e 100755 (executable)
@@ -1,37 +1,37 @@
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  * script the check (on the clientside) if a entered value\r
-  * is a valid number and remove the invalid chars\r
-  *\r
-  * $Id: numbercheck.js,v 1.2 2005-03-12 06:19:04 kimitake Exp $\r
-  * $NucleusJP$\r
-  */\r
-\r
-function checkNumeric(f)\r
-{\r
-       newval='';\r
-       dot = false;\r
-       for (i = 0; i < f.value.length; i++) {\r
-               c = f.value.substring(i,i+1);\r
-               if (isInteger(c) || ((c == '.')&&(dot == false)) || ((i == 0)&&(c == '-'))) {\r
-                       newval += c;\r
-                       if (c == '.') {\r
-                               dot = true;\r
-                       }\r
-               }\r
-       }\r
-       f.value = newval;\r
-}\r
-\r
-function isInteger(value)\r
-{\r
-       return (parseInt(value) == value);\r
-}\r
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2006 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  * script the check (on the clientside) if a entered value
+  * is a valid number and remove the invalid chars
+  *
+  * $Id: numbercheck.js,v 1.3 2006-07-12 07:11:47 kimitake Exp $
+  * $NucleusJP: numbercheck.js,v 1.2 2005/03/12 06:19:04 kimitake Exp $
+  */
+
+function checkNumeric(f)
+{
+       newval='';
+       dot = false;
+       for (i = 0; i < f.value.length; i++) {
+               c = f.value.substring(i,i+1);
+               if (isInteger(c) || ((c == '.')&&(dot == false)) || ((i == 0)&&(c == '-'))) {
+                       newval += c;
+                       if (c == '.') {
+                               dot = true;
+                       }
+               }
+       }
+       f.value = newval;
+}
+
+function isInteger(value)
+{
+       return (parseInt(value) == value);
+}
index a765404..8e9c9b0 100755 (executable)
@@ -1,63 +1,63 @@
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- *\r
- * $Id: opennew.js,v 1.3 2005-03-12 06:19:04 kimitake Exp $\r
- * $NucleusJP$\r
- *\r
- * JavaScript to open non-local links in a new window.\r
- *\r
- * How to use:\r
- *  in the <head>...</head> section of your page, add the following line:\r
- *\r
- *  <script type="text/javascript" src="nucleus/javascript/opennew.js"></script>\r
- *\r
- *  Then, add the following to your <body> tag:\r
- *\r
- *  <body ... onload="setOpenNewWindow(true);">\r
- *\r
- *  And you're all done.\r
- *\r
- * Variables that can be overridden if necessary:\r
- *     local = something to recognize local URLs (by default, if your page is something like\r
- *              http://www.example.com/path/page.html, then local will be automatically set to\r
- *              http://www.example.com/path/)\r
- *      exception = something to recognize exceptions to the local check. You might need this\r
- *                  when you use a 'click-through' type of script (e.g. when\r
- *                  http://www.example.com/path/click.php?http://otherpage.com/ would \r
- *                  auto-redirect to otherpage.com and record a click in your logs)\r
- *                  In most of the cases, this variable is unneeded and can be left empty\r
- *      destinationFrame = name of the destination frame (by default this is "_blank" to spawn a\r
- *                         new window for each link clicked)\r
- */\r
-\r
-\r
-var local = document.URL.substring(0,document.URL.lastIndexOf('/'));\r
-var exception = "";\r
-var destinationFrame = "_blank";\r
-\r
-function setOpenNewWindow(newWin) {\r
-       if (newWin) {\r
-               from = ""; to = destinationFrame;\r
-       } else {\r
-               from = destinationFrame; to = "";\r
-       }\r
-\r
-       for (var i=0; i<=(document.links.length-1); i++) {\r
-               if (document.links[i].target == from) {\r
-\r
-                       var href = document.links[i].href;\r
-                       var isLocal = (href.indexOf(local) != -1);\r
-                       if (isLocal && ((exception=="") || (href.indexOf(exception) != -1)))\r
-                               isLocal = false;\r
-                       if (!isLocal)\r
-                               document.links[i].target = to;\r
-               }\r
-       }\r
-}\r
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ *
+ * $Id: opennew.js,v 1.4 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: opennew.js,v 1.3 2005/03/12 06:19:04 kimitake Exp $
+ *
+ * JavaScript to open non-local links in a new window.
+ *
+ * How to use:
+ *  in the <head>...</head> section of your page, add the following line:
+ *
+ *  <script type="text/javascript" src="nucleus/javascript/opennew.js"></script>
+ *
+ *  Then, add the following to your <body> tag:
+ *
+ *  <body ... onload="setOpenNewWindow(true);">
+ *
+ *  And you're all done.
+ *
+ * Variables that can be overridden if necessary:
+ *     local = something to recognize local URLs (by default, if your page is something like
+ *              http://www.example.com/path/page.html, then local will be automatically set to
+ *              http://www.example.com/path/)
+ *      exception = something to recognize exceptions to the local check. You might need this
+ *                  when you use a 'click-through' type of script (e.g. when
+ *                  http://www.example.com/path/click.php?http://otherpage.com/ would 
+ *                  auto-redirect to otherpage.com and record a click in your logs)
+ *                  In most of the cases, this variable is unneeded and can be left empty
+ *      destinationFrame = name of the destination frame (by default this is "_blank" to spawn a
+ *                         new window for each link clicked)
+ */
+
+
+var local = document.URL.substring(0,document.URL.lastIndexOf('/'));
+var exception = "";
+var destinationFrame = "_blank";
+
+function setOpenNewWindow(newWin) {
+       if (newWin) {
+               from = ""; to = destinationFrame;
+       } else {
+               from = destinationFrame; to = "";
+       }
+
+       for (var i=0; i<=(document.links.length-1); i++) {
+               if (document.links[i].target == from) {
+
+                       var href = document.links[i].href;
+                       var isLocal = (href.indexOf(local) != -1);
+                       if (isLocal && ((exception=="") || (href.indexOf(exception) != -1)))
+                               isLocal = false;
+                       if (!isLocal)
+                               document.links[i].target = to;
+               }
+       }
+}
\ No newline at end of file
index 187417e..4b8d2d8 100755 (executable)
@@ -1,67 +1,67 @@
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  *    Javascript code to hide empty textareas when editing templates.\r
-  *\r
-  * @require compatibility.js\r
-  *\r
-  * $Id: templateEdit.js,v 1.3 2005-03-12 06:19:04 kimitake Exp $\r
-  * $NucleusJP$\r
-  */\r
-\r
-var amountOfFields = 1;\r
-var editText = 'empty field (click to edit)';\r
-\r
-function hideUnused() {\r
-       while (document.getElementById('textarea' + amountOfFields)) \r
-               amountOfFields++;\r
-       amountOfFields--;\r
-\r
-       for (var i=1;i<=amountOfFields;i++) {\r
-               var el = document.getElementById('textarea' + i);\r
-\r
-               // hide textareas when empty, and add onclick event\r
-               // to make them visible again\r
-               if (el.value == '') {\r
-                       el.style.display = 'none';\r
-                       var tdEl = document.getElementById('td' + i);\r
-                       \r
-                       var aHref = createElement('a');\r
-                       aHref.href = '';\r
-                       aHref.className = "expandLink";\r
-                       aHref.id = "expandLink" + i;\r
-                       aHref.onclick = new Function("return makeVisible("+i+")");\r
-                       aHref.tabIndex = el.tabIndex;\r
-                       aHref.title = editText;\r
-                       aHref.appendChild(document.createTextNode(editText));\r
-\r
-                       tdEl.appendChild(aHref);\r
-                       \r
-               }\r
-       }\r
-\r
-}\r
-\r
-function setTemplateEditText(newText) {\r
-       editText = newText;\r
-}\r
-\r
-function makeVisible(i) {\r
-       var textareaEl = document.getElementById('textarea' + i);\r
-       var expandEl = document.getElementById('expandLink' + i);\r
-\r
-       textareaEl.style.display = 'block';\r
-       expandEl.style.display = 'none';\r
-\r
-       textareaEl.focus();\r
-       return false;\r
-}\r
-\r
-window.onload = hideUnused;    \r
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2006 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  *    Javascript code to hide empty textareas when editing templates.
+  *
+  * @require compatibility.js
+  *
+  * $Id: templateEdit.js,v 1.4 2006-07-12 07:11:47 kimitake Exp $
+  * $NucleusJP: templateEdit.js,v 1.3 2005/03/12 06:19:04 kimitake Exp $
+  */
+
+var amountOfFields = 1;
+var editText = 'empty field (click to edit)';
+
+function hideUnused() {
+       while (document.getElementById('textarea' + amountOfFields)) 
+               amountOfFields++;
+       amountOfFields--;
+
+       for (var i=1;i<=amountOfFields;i++) {
+               var el = document.getElementById('textarea' + i);
+
+               // hide textareas when empty, and add onclick event
+               // to make them visible again
+               if (el.value == '') {
+                       el.style.display = 'none';
+                       var tdEl = document.getElementById('td' + i);
+                       
+                       var aHref = createElement('a');
+                       aHref.href = '';
+                       aHref.className = "expandLink";
+                       aHref.id = "expandLink" + i;
+                       aHref.onclick = new Function("return makeVisible("+i+")");
+                       aHref.tabIndex = el.tabIndex;
+                       aHref.title = editText;
+                       aHref.appendChild(document.createTextNode(editText));
+
+                       tdEl.appendChild(aHref);
+                       
+               }
+       }
+
+}
+
+function setTemplateEditText(newText) {
+       editText = newText;
+}
+
+function makeVisible(i) {
+       var textareaEl = document.getElementById('textarea' + i);
+       var expandEl = document.getElementById('expandLink' + i);
+
+       textareaEl.style.display = 'block';
+       expandEl.style.display = 'none';
+
+       textareaEl.focus();
+       return false;
+}
+
+window.onload = hideUnused;    
\ No newline at end of file
index e7db22a..2ccfe64 100755 (executable)
-<?php\r
-// English Nucleus Language File\r
-//\r
-// Author: Wouter Demuynck\r
-// Nucleus version: v1.0-v3.2\r
-//\r
-// Please note: if you want to translate this file to your own language, be aware\r
-// that in a next Nucleus version, new variables might be added and some other ones\r
-// might be deleted. Therefor, it's important to list the Nucleus version for which\r
-// the file was written in your document.\r
-//\r
-// Fully translated language file can be sent to us and will be made\r
-// available for download (with proper credit to the author, of course)\r
-\r
-// START changed/added after 3.15 START\r
-\r
-define('_LIST_PLUG_SUBS_NEEDUPDATE','Please use the \'Update Subscription list\'-button to update the plugin\'s subscription list.');\r
-define('_LIST_PLUGS_DEP',                      'Plugin(s) requires:');\r
-\r
-// END changed/added after 3.15\r
-\r
-// START changed/added after 3.1 START\r
-\r
-// comments list per weblog\r
-define('_COMMENTS_BLOG',                       'All Comments for blog');\r
-define('_NOCOMMENTS_BLOG',                     'No comments were made on items of this blog');\r
-define('_BLOGLIST_COMMENTS',           'Comments');\r
-define('_BLOGLIST_TT_COMMENTS',                'A list of all comments made on items of this blog');\r
-\r
-\r
-// for use in archivetype-skinvar\r
-define('_ARCHIVETYPE_DAY',                     'day');\r
-define('_ARCHIVETYPE_MONTH',           'month');\r
-\r
-// tickets (prevents malicious users to trick an admin to perform actions he doesn't want)\r
-define('_ERROR_BADTICKET',                     'Invalid or expired ticket.');\r
-\r
-// plugin dependency\r
-define('_ERROR_INSREQPLUGIN',          'Plugin installation failed, requires ');\r
-define('_ERROR_DELREQPLUGIN',          'Plugin deletion failed, required by ');\r
-\r
-// cookie prefix\r
-define('_SETTINGS_COOKIEPREFIX',       'Cookie Prefix');\r
-\r
-// account activation\r
-define('_ERROR_NOLOGON_NOACTIVATE',    'Cannot send activation link. You\'re not allowed to log in.');\r
-define('_ERROR_ACTIVATE',                      'Activation key does not exist, is invalid, or has expired.');\r
-define('_ACTIONLOG_ACTIVATIONLINK', 'Activation link sent');\r
-define('_MSG_ACTIVATION_SENT',         'An activation link has been sent by e-mail.');\r
-\r
-// activation link emails\r
-define('_ACTIVATE_REGISTER_MAIL',      "Hi <%memberName%>,\n\nYou need to activate your account at <%siteName%> (<%siteUrl%>).\nYou can do this by visiting the link below: \n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");\r
-define('_ACTIVATE_REGISTER_MAILTITLE', "Activate your '<%memberName%>' account");\r
-define('_ACTIVATE_REGISTER_TITLE',     'Welcome <%memberName%>');\r
-define('_ACTIVATE_REGISTER_TEXT',      'You\'re almost there. Please choose a password for your account below.');\r
-define('_ACTIVATE_FORGOT_MAIL',                "Hi <%memberName%>,\n\nUsing the link below, you can choose a new password for your account at <%siteName%> (<%siteUrl%>) by choosing a new password.\n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");\r
-define('_ACTIVATE_FORGOT_MAILTITLE',"Re-activate your '<%memberName%>' account");\r
-define('_ACTIVATE_FORGOT_TITLE',       'Welcome <%memberName%>');\r
-define('_ACTIVATE_FORGOT_TEXT',                'You can choose a new password for your account below:');\r
-define('_ACTIVATE_CHANGE_MAIL',                "Hi <%memberName%>,\n\nSince your e-mail address has changed, you'll need to re-activate your account at <%siteName%> (<%siteUrl%>).\nYou can do this by visiting the link below: \n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");\r
-define('_ACTIVATE_CHANGE_MAILTITLE',"Re-activate your '<%memberName%>' account");\r
-define('_ACTIVATE_CHANGE_TITLE',       'Welcome <%memberName%>');\r
-define('_ACTIVATE_CHANGE_TEXT',                'Your address change has been verified. Thanks!');\r
-define('_ACTIVATE_SUCCESS_TITLE',      'Activation Succeeded');\r
-define('_ACTIVATE_SUCCESS_TEXT',       'Your account has been successfully activated.');\r
-define('_MEMBERS_SETPWD',                      'Set Password');\r
-define('_MEMBERS_SETPWD_BTN',          'Set Password');\r
-define('_QMENU_ACTIVATE',                      'Account Activation');\r
-define('_QMENU_ACTIVATE_TEXT',         '<p>After you have activated your account, you can start using it by <a href="index.php?action=showlogin">logging in</a>.</p>');\r
-\r
-define('_PLUGS_BTN_UPDATE',                    'Update subscription list');\r
-\r
-// global settings\r
-define('_SETTINGS_JSTOOLBAR',          'Javascript Toolbar Style');\r
-define('_SETTINGS_JSTOOLBAR_FULL',     'Full Toolbar (IE)');\r
-define('_SETTINGS_JSTOOLBAR_SIMPLE','Simple Toolbar (Non-IE)');\r
-define('_SETTINGS_JSTOOLBAR_NONE',     'Disable Toolbar');\r
-define('_SETTINGS_URLMODE_HELP',       '(Info: <a href="documentation/tips.html#searchengines-fancyurls">How to activate fancy URLs</a>)');\r
-\r
-// extra plugin settings part when editing categories/members/blogs/...\r
-define('_PLUGINS_EXTRA',                       'Extra Plugin Settings');\r
-\r
-// itemlist info column keys\r
-define('_LIST_ITEM_BLOG',                      'blog:');\r
-define('_LIST_ITEM_CAT',                       'cat:');\r
-define('_LIST_ITEM_AUTHOR',                    'author:');\r
-define('_LIST_ITEM_DATE',                      'date:');\r
-define('_LIST_ITEM_TIME',                      'time:');\r
-\r
-// indication of registered members in comments list\r
-define('_LIST_COMMENTS_MEMBER',        '(member)');\r
-\r
-// batch operations\r
-define('_BATCH_WITH_SEL',                      'With selected:');\r
-define('_BATCH_EXEC',                          'Execute');\r
-\r
-// quickmenu\r
-define('_QMENU_HOME',                          'Home');\r
-define('_QMENU_ADD',                           'Add Item');\r
-define('_QMENU_ADD_SELECT',                    '-- select --');\r
-define('_QMENU_USER_SETTINGS',         'Settings');\r
-define('_QMENU_USER_ITEMS',                    'Items');\r
-define('_QMENU_USER_COMMENTS',         'Comments');\r
-define('_QMENU_MANAGE',                                'Management');\r
-define('_QMENU_MANAGE_LOG',                    'Action Log');\r
-define('_QMENU_MANAGE_SETTINGS',       'Global Settings');\r
-define('_QMENU_MANAGE_MEMBERS',                'Members');\r
-define('_QMENU_MANAGE_NEWBLOG',                'New Weblog');\r
-define('_QMENU_MANAGE_BACKUPS',                'Backups');\r
-define('_QMENU_MANAGE_PLUGINS',                'Plugins');\r
-define('_QMENU_LAYOUT',                                'Layout');\r
-define('_QMENU_LAYOUT_SKINS',          'Skins');\r
-define('_QMENU_LAYOUT_TEMPL',          'Templates');\r
-define('_QMENU_LAYOUT_IEXPORT',                'Import/Export');\r
-define('_QMENU_PLUGINS',                       'Plugins');\r
-\r
-// quickmenu on logon screen\r
-define('_QMENU_INTRO',                         'Introduction');\r
-define('_QMENU_INTRO_TEXT',                    '<p>This is the logon screen for Nucleus CMS, the content management system that\'s being used to maintain this website.</p><p>If you have an account, you can log on and start posting new items.</p>');\r
-\r
-// helppages for plugins\r
-define('_ERROR_PLUGNOHELPFILE',                'The helpfile for this plugin can not be found');\r
-define('_PLUGS_HELP_TITLE',                    'Helppage for plugin');\r
-define('_LIST_PLUGS_HELP',                     'help');\r
-\r
-\r
-// END changed/started after 3.1\r
-\r
-// START changed/added after v2.5beta START\r
-\r
-// general settings (security)\r
-define('_SETTINGS_EXTAUTH',                    'Enable External Authentication');\r
-define('_WARNING_EXTAUTH',                     'Warning: Enable only if needed.');\r
-\r
-// member profile\r
-define('_MEMBERS_BYPASS',                      'Use External Authentication');\r
-\r
-// 'always include in search' blog setting (yes/no) [in v2.5beta, the 'always' part wasn't clear]\r
-define('_EBLOG_SEARCH',                                '<em>Always</em> include in search');\r
-\r
-// END changed/added after v2.5beta\r
-\r
-// START introduced after v2.0 START\r
-\r
-// media library\r
-define('_MEDIA_VIEW',                          'view');\r
-define('_MEDIA_VIEW_TT',                       'View file (opens in new window)');\r
-define('_MEDIA_FILTER_APPLY',          'Apply Filter');\r
-define('_MEDIA_FILTER_LABEL',          'Filter: ');\r
-define('_MEDIA_UPLOAD_TO',                     'Upload to...');\r
-define('_MEDIA_UPLOAD_NEW',                    'Upload new file...');\r
-define('_MEDIA_COLLECTION_SELECT',     'Select');\r
-define('_MEDIA_COLLECTION_TT',         'Switch to this category');\r
-define('_MEDIA_COLLECTION_LABEL',      'Current collection: ');\r
-\r
-// tooltips on toolbar\r
-define('_ADD_ALIGNLEFT_TT',                    'Align Left');\r
-define('_ADD_ALIGNRIGHT_TT',           'Align Right');\r
-define('_ADD_ALIGNCENTER_TT',          'Align Center');\r
-\r
-\r
-// generic upload failure\r
-define('_ERROR_UPLOADFAILED',          'Upload failed');\r
-\r
-// END introduced after v2.0 END\r
-\r
-// START introduced after v1.5 START\r
-\r
-// posting to the past/edit timestamps\r
-define('_EBLOG_ALLOWPASTPOSTING',      'Allow posting to the past');\r
-define('_ADD_CHANGEDATE',                      'Update timestamp');\r
-define('_BMLET_CHANGEDATE',                    'Update timestamp');\r
-\r
-// skin import/export\r
-define('_OVERVIEW_SKINIMPORT',         'Skin import/export...');\r
-\r
-// skin settings\r
-define('_PARSER_INCMODE_NORMAL',       'Normal');\r
-define('_PARSER_INCMODE_SKINDIR',      'Use skin dir');\r
-define('_SKIN_INCLUDE_MODE',           'Include mode');\r
-define('_SKIN_INCLUDE_PREFIX',         'Include prefix');\r
-\r
-// global settings\r
-define('_SETTINGS_BASESKIN',           'Base Skin');\r
-define('_SETTINGS_SKINSURL',           'Skins URL');\r
-define('_SETTINGS_ACTIONSURL',         'Full URL to action.php');\r
-\r
-// category moves (batch)\r
-define('_ERROR_MOVEDEFCATEGORY',       'Cannot move default category');\r
-define('_ERROR_MOVETOSELF',                    'Cannot move category (destination blog is the same as source blog)');\r
-define('_MOVECAT_TITLE',                       'Select blog to move category to');\r
-define('_MOVECAT_BTN',                         'Move category');\r
-\r
-// URLMode setting\r
-define('_SETTINGS_URLMODE',                    'URL Mode');\r
-define('_SETTINGS_URLMODE_NORMAL',     'Normal');\r
-define('_SETTINGS_URLMODE_PATHINFO','Fancy');\r
-\r
-// Batch operations\r
-define('_BATCH_NOSELECTION',           'Nothing selected to perform actions on');\r
-define('_BATCH_ITEMS',                         'Batch operation on items');\r
-define('_BATCH_CATEGORIES',                    'Batch operation on categories');\r
-define('_BATCH_MEMBERS',                       'Batch operation on members');\r
-define('_BATCH_TEAM',                          'Batch operation on team members');\r
-define('_BATCH_COMMENTS',                      'Batch operation on comments');\r
-define('_BATCH_UNKNOWN',                       'Unknown batch operation: ');\r
-define('_BATCH_EXECUTING',                     'Executing');\r
-define('_BATCH_ONCATEGORY',                    'on category');\r
-define('_BATCH_ONITEM',                                'on item');\r
-define('_BATCH_ONCOMMENT',                     'on comment');\r
-define('_BATCH_ONMEMBER',                      'on member');\r
-define('_BATCH_ONTEAM',                                'on team member');\r
-define('_BATCH_SUCCESS',                       'Success!');\r
-define('_BATCH_DONE',                          'Done!');\r
-define('_BATCH_DELETE_CONFIRM',                'Confirm Batch Deletion');\r
-define('_BATCH_DELETE_CONFIRM_BTN',    'Confirm Batch Deletion');\r
-define('_BATCH_SELECTALL',                     'select all');\r
-define('_BATCH_DESELECTALL',           'deselect all');\r
-\r
-// batch operations: options in dropdowns\r
-define('_BATCH_ITEM_DELETE',           'Delete');\r
-define('_BATCH_ITEM_MOVE',                     'Move');\r
-define('_BATCH_MEMBER_DELETE',         'Delete');\r
-define('_BATCH_MEMBER_SET_ADM',                'Give admin rights');\r
-define('_BATCH_MEMBER_UNSET_ADM',      'Take away admin rights');\r
-define('_BATCH_TEAM_DELETE',           'Delete from team');\r
-define('_BATCH_TEAM_SET_ADM',          'Give admin rights');\r
-define('_BATCH_TEAM_UNSET_ADM',                'Take away admin rights');\r
-define('_BATCH_CAT_DELETE',                    'Delete');\r
-define('_BATCH_CAT_MOVE',                      'Move to other blog');\r
-define('_BATCH_COMMENT_DELETE',                'Delete');\r
-\r
-// itemlist: Add new item...\r
-define('_ITEMLIST_ADDNEW',                     'Add new item...');\r
-define('_ADD_PLUGIN_EXTRAS',           'Extra Plugin Options');\r
-\r
-// errors\r
-define('_ERROR_CATCREATEFAIL',         'Could not create new category');\r
-define('_ERROR_NUCLEUSVERSIONREQ',     'This plugin requires a newer Nucleus version: ');\r
-\r
-// backlinks\r
-define('_BACK_TO_BLOGSETTINGS',                'Back to blogsettings');\r
-\r
-// skin import export\r
-define('_SKINIE_TITLE_IMPORT',         'Import');\r
-define('_SKINIE_TITLE_EXPORT',         'Export');\r
-define('_SKINIE_BTN_IMPORT',           'Import');\r
-define('_SKINIE_BTN_EXPORT',           'Export selected skins/templates');\r
-define('_SKINIE_LOCAL',                                'Import from local file:');\r
-define('_SKINIE_NOCANDIDATES',         'No candidates for import found in the skins directory');\r
-define('_SKINIE_FROMURL',                      'Import from URL:');\r
-define('_SKINIE_EXPORT_INTRO',         'Select the skins and templates you want to export below');\r
-define('_SKINIE_EXPORT_SKINS',         'Skins');\r
-define('_SKINIE_EXPORT_TEMPLATES',     'Templates');\r
-define('_SKINIE_EXPORT_EXTRA',         'Extra Info');\r
-define('_SKINIE_CONFIRM_OVERWRITE',    'Overwrite skins that already exists (see nameclashes)');\r
-define('_SKINIE_CONFIRM_IMPORT',       'Yes, I want to import this');\r
-define('_SKINIE_CONFIRM_TITLE',                'About to import skins and templates');\r
-define('_SKINIE_INFO_SKINS',           'Skins in file:');\r
-define('_SKINIE_INFO_TEMPLATES',       'Templates in file:');\r
-define('_SKINIE_INFO_GENERAL',         'Info:');\r
-define('_SKINIE_INFO_SKINCLASH',       'Skin name clashes:');\r
-define('_SKINIE_INFO_TEMPLCLASH',      'Template name clashes:');\r
-define('_SKINIE_INFO_IMPORTEDSKINS','Imported skins:');\r
-define('_SKINIE_INFO_IMPORTEDTEMPLS','Imported templates:');\r
-define('_SKINIE_DONE',                         'Done Importing');\r
-\r
-define('_AND',                                         'and');\r
-define('_OR',                                          'or');\r
-\r
-// empty fields on template edit\r
-define('_EDITTEMPLATE_EMPTY',          'empty field (click to edit)');\r
-\r
-// skin overview list\r
-define('_LIST_SKINS_INCMODE',          'IncludeMode:');\r
-define('_LIST_SKINS_INCPREFIX',                'IncludePrefix:');\r
-define('_LIST_SKINS_DEFINED',          'Defined parts:');\r
-\r
-// backup\r
-define('_BACKUPS_TITLE',                       'Backup / Restore');\r
-define('_BACKUP_TITLE',                                'Backup');\r
-define('_BACKUP_INTRO',                                'Click the button below to create a backup of your Nucleus database. You\'ll be prompted to save a backup file. Store it in a safe place.');\r
-define('_BACKUP_ZIP_YES',                      'Try to use compression');\r
-define('_BACKUP_ZIP_NO',                       'Do not use compression');\r
-define('_BACKUP_BTN',                          'Create Backup');\r
-define('_BACKUP_NOTE',                         '<b>Note:</b> Only the database contents is stored in the backup. Media files and settings in config.php are thus <b>NOT</b> included in the backup.');\r
-define('_RESTORE_TITLE',                       'Restore');\r
-define('_RESTORE_NOTE',                                '<b>WARNING:</b> Restoring from a backup will <b>ERASE</b> all current Nucleus data in the database! Only do this when you\'re really sure!     <br />  <b>Note:</b> Make sure that the version of Nucleus in which you created the backup should be the same as the version you\'re running right now! It won\'t work otherwise');\r
-define('_RESTORE_INTRO',                       'Select the backup file below (it\'ll be uploaded to the server) and click the "Restore" button to start.');\r
-define('_RESTORE_IMSURE',                      'Yes, I\'m sure I want to do this!');\r
-define('_RESTORE_BTN',                         'Restore From File');\r
-define('_RESTORE_WARNING',                     '(make sure you\'re restoring the correct backup, maybe make a new backup before you start)');\r
-define('_ERROR_BACKUP_NOTSURE',                'You\'ll need to check the \'I\'m sure\' testbox');\r
-define('_RESTORE_COMPLETE',                    'Restore Complete');\r
-\r
-// new item notification\r
-define('_NOTIFY_NI_MSG',                       'A new item has been posted:');\r
-define('_NOTIFY_NI_TITLE',                     'New Item!');\r
-define('_NOTIFY_KV_MSG',                       'Karma vote on item:');\r
-define('_NOTIFY_KV_TITLE',                     'Nucleus karma:');\r
-define('_NOTIFY_NC_MSG',                       'Comment on item:');\r
-define('_NOTIFY_NC_TITLE',                     'Nucleus comment:');\r
-define('_NOTIFY_USERID',                       'User ID:');\r
-define('_NOTIFY_USER',                         'User:');\r
-define('_NOTIFY_COMMENT',                      'Comment:');\r
-define('_NOTIFY_VOTE',                         'Vote:');\r
-define('_NOTIFY_HOST',                         'Host:');\r
-define('_NOTIFY_IP',                           'IP:');\r
-define('_NOTIFY_MEMBER',                       'Member:');\r
-define('_NOTIFY_TITLE',                                'Title:');\r
-define('_NOTIFY_CONTENTS',                     'Contents:');\r
-\r
-// member mail message\r
-define('_MMAIL_MSG',                           'A message sent to you by');\r
-define('_MMAIL_FROMANON',                      'an anonymous visitor');\r
-define('_MMAIL_FROMNUC',                       'Posted from a Nucleus weblog at');\r
-define('_MMAIL_TITLE',                         'A message from');\r
-define('_MMAIL_MAIL',                          'Message:');\r
-\r
-// END introduced after v1.5 END\r
-\r
-\r
-// START introduced after v1.1 START\r
-\r
-// bookmarklet buttons\r
-define('_BMLET_ADD',                           'Add Item');\r
-define('_BMLET_EDIT',                          'Edit Item');\r
-define('_BMLET_DELETE',                                'Delete Item');\r
-define('_BMLET_BODY',                          'Body');\r
-define('_BMLET_MORE',                          'Extended');\r
-define('_BMLET_OPTIONS',                       'Options');\r
-define('_BMLET_PREVIEW',                       'Preview');\r
-\r
-// used in bookmarklet\r
-define('_ITEM_UPDATED',                                'Item was updated');\r
-define('_ITEM_DELETED',                                'Item was deleted');\r
-\r
-// plugins\r
-define('_CONFIRMTXT_PLUGIN',           'Are you sure you want to delete the plugin named');\r
-define('_ERROR_NOSUCHPLUGIN',          'No such plugin');\r
-define('_ERROR_DUPPLUGIN',                     'Sorry, this plugin is already installed');\r
-define('_ERROR_PLUGFILEERROR',         'No such plugin exists, or the permissions are set incorrectly');\r
-define('_PLUGS_NOCANDIDATES',          'No plugin candidates found');\r
-\r
-define('_PLUGS_TITLE_MANAGE',          'Manage Plugins');\r
-define('_PLUGS_TITLE_INSTALLED',       'Currently Installed');\r
-define('_PLUGS_TITLE_UPDATE',          'Update subscription list');\r
-define('_PLUGS_TEXT_UPDATE',           'Nucleus keeps a cache of the event subscriptions of the plugins. When you upgrade a plugin by replacing it\'s file, you should run this update to make sure that the correct subscriptions are cached');\r
-define('_PLUGS_TITLE_NEW',                     'Install New Plugin');\r
-define('_PLUGS_ADD_TEXT',                      'Below is a list of all the files in your plugins directory, that might be non-installed plugins. Make sure you are <strong>really sure</strong> that it\'s a plugin before adding it.');\r
-define('_PLUGS_BTN_INSTALL',           'Install Plugin');\r
-define('_BACKTOOVERVIEW',                      'Back to overview');\r
-\r
-// editlink\r
-define('_TEMPLATE_EDITLINK',           'Edit Item Link');\r
-\r
-// add left / add right tooltips\r
-define('_ADD_LEFT_TT',                         'Add left box');\r
-define('_ADD_RIGHT_TT',                                'Add right box');\r
-\r
-// add/edit item: new category (in dropdown box)\r
-define('_ADD_NEWCAT',                          'New Category...');\r
-\r
-// new settings\r
-define('_SETTINGS_PLUGINURL',          'Plugin URL');\r
-define('_SETTINGS_MAXUPLOADSIZE',      'Max. upload file size (bytes)');\r
-define('_SETTINGS_NONMEMBERMSGS',      'Allow non-members to send messages');\r
-define('_SETTINGS_PROTECTMEMNAMES',    'Protect member names');\r
-\r
-// overview screen\r
-define('_OVERVIEW_PLUGINS',                    'Manage Plugins...');\r
-\r
-// actionlog\r
-define('_ACTIONLOG_NEWMEMBER',         'New member registration:');\r
-\r
-// membermail (when not logged in)\r
-define('_MEMBERMAIL_MAIL',                     'Your email address:');\r
-\r
-// file upload\r
-define('_ERROR_DISALLOWEDUPLOAD2',     'You do not have admin rights on any of the blogs that have the destination member on the teamlist. Therefor, you\'re not allowed to upload files to this member\'s media directory');\r
-\r
-// plugin list\r
-define('_LISTS_INFO',                          'Information');\r
-define('_LIST_PLUGS_AUTHOR',           'By:');\r
-define('_LIST_PLUGS_VER',                      'Version:');\r
-define('_LIST_PLUGS_SITE',                     'Visit site');\r
-define('_LIST_PLUGS_DESC',                     'Description:');\r
-define('_LIST_PLUGS_SUBS',                     'Subscribes to the following events:');\r
-define('_LIST_PLUGS_UP',                       'move up');\r
-define('_LIST_PLUGS_DOWN',                     'move down');\r
-define('_LIST_PLUGS_UNINSTALL',                'uninstall');\r
-define('_LIST_PLUGS_ADMIN',                    'admin');\r
-define('_LIST_PLUGS_OPTIONS',          'edit&nbsp;options');\r
-\r
-// plugin option list\r
-define('_LISTS_VALUE',                         'Value');\r
-\r
-// plugin options\r
-define('_ERROR_NOPLUGOPTIONS',         'this plugin does not have any options set');\r
-define('_PLUGS_BACK',                          'Back to Plugin Overview');\r
-define('_PLUGS_SAVE',                          'Save Options');\r
-define('_PLUGS_OPTIONS_UPDATED',       'Plugin options updated');\r
-\r
-define('_OVERVIEW_MANAGEMENT',         'Management');\r
-define('_OVERVIEW_MANAGE',                     'Nucleus management...');\r
-define('_MANAGE_GENERAL',                      'General Management');\r
-define('_MANAGE_SKINS',                                'Skin and Templates');\r
-define('_MANAGE_EXTRA',                                'Extra features');\r
-\r
-define('_BACKTOMANAGE',                                'Back to Nucleus management');\r
-\r
-\r
-// END introduced after v1.1 END\r
-\r
-\r
-\r
-\r
-// charset to use\r
-define('_CHARSET',                                     'iso-8859-1');\r
-\r
-// global stuff\r
-define('_LOGOUT',                                      'Log Out');\r
-define('_LOGIN',                                       'Log In');\r
-define('_YES',                                         'Yes');\r
-define('_NO',                                          'No');\r
-define('_SUBMIT',                                      'Submit');\r
-define('_ERROR',                                       'Error');\r
-define('_ERRORMSG',                                    'An error has occurred!');\r
-define('_BACK',                                                'Go Back');\r
-define('_NOTLOGGEDIN',                         'Not logged in');\r
-define('_LOGGEDINAS',                          'Logged in as');\r
-define('_ADMINHOME',                           'Admin Home');\r
-define('_NAME',                                                'Name');\r
-define('_BACKHOME',                                    'Back to Admin Home');\r
-define('_BADACTION',                           'Non existing action requested');\r
-define('_MESSAGE',                                     'Message');\r
-define('_HELP_TT',                                     'Help!');\r
-define('_YOURSITE',                                    'Your site');\r
-\r
-\r
-define('_POPUP_CLOSE',                         'Close Window');\r
-\r
-define('_LOGIN_PLEASE',                                'Please Log in First');\r
-\r
-// commentform\r
-define('_COMMENTFORM_YOUARE',          'You are');\r
-define('_COMMENTFORM_SUBMIT',          'Add Comment');\r
-define('_COMMENTFORM_COMMENT',         'Your comment');\r
-define('_COMMENTFORM_NAME',                    'Name');\r
-define('_COMMENTFORM_MAIL',                    'E-mail/HTTP');\r
-define('_COMMENTFORM_REMEMBER',                'Remember Me');\r
-\r
-// loginform\r
-define('_LOGINFORM_NAME',                      'Username');\r
-define('_LOGINFORM_PWD',                       'Password');\r
-define('_LOGINFORM_YOUARE',                    'Logged in as');\r
-define('_LOGINFORM_SHARED',                    'Shared Computer');\r
-\r
-// member mailform\r
-define('_MEMBERMAIL_SUBMIT',           'Send Message');\r
-\r
-// search form\r
-define('_SEARCHFORM_SUBMIT',           'Search');\r
-\r
-// add item form\r
-define('_ADD_ADDTO',                           'Add new item to');\r
-define('_ADD_CREATENEW',                       'Create new item');\r
-define('_ADD_BODY',                                    'Body');\r
-define('_ADD_TITLE',                           'Title');\r
-define('_ADD_MORE',                                    'Extended (optional)');\r
-define('_ADD_CATEGORY',                                'Category');\r
-define('_ADD_PREVIEW',                         'Preview');\r
-define('_ADD_DISABLE_COMMENTS',                'Disable comments?');\r
-define('_ADD_DRAFTNFUTURE',                    'Draft &amp; Future Items');\r
-define('_ADD_ADDITEM',                         'Add Item');\r
-define('_ADD_ADDNOW',                          'Add Now');\r
-define('_ADD_ADDLATER',                                'Add Later');\r
-define('_ADD_PLACE_ON',                                'Place on');\r
-define('_ADD_ADDDRAFT',                                'Add to drafts');\r
-define('_ADD_NOPASTDATES',                     '(dates and times in the past are NOT valid, the current time will be used in that case)');\r
-define('_ADD_BOLD_TT',                         'Bold');\r
-define('_ADD_ITALIC_TT',                       'Italic');\r
-define('_ADD_HREF_TT',                         'Make Link');\r
-define('_ADD_MEDIA_TT',                                'Add Media');\r
-define('_ADD_PREVIEW_TT',                      'Show/Hide Preview');\r
-define('_ADD_CUT_TT',                          'Cut');\r
-define('_ADD_COPY_TT',                         'Copy');\r
-define('_ADD_PASTE_TT',                                'Paste');\r
-\r
-\r
-// edit item form\r
-define('_EDIT_ITEM',                           'Edit Item');\r
-define('_EDIT_SUBMIT',                         'Edit Item');\r
-define('_EDIT_ORIG_AUTHOR',                    'Original author');\r
-define('_EDIT_BACKTODRAFTS',           'Add back to drafts');\r
-define('_EDIT_COMMENTSNOTE',           '(note: disabling comments will _not_ hide previously added comments)');\r
-\r
-// used on delete screens\r
-define('_DELETE_CONFIRM',                      'Please confirm deletion');\r
-define('_DELETE_CONFIRM_BTN',          'Confirm Deletion');\r
-define('_CONFIRMTXT_ITEM',                     'You\'re about to delete the item following item:');\r
-define('_CONFIRMTXT_COMMENT',          'You\'re about to delete the following comment:');\r
-define('_CONFIRMTXT_TEAM1',                    'You\'re about to delete ');\r
-define('_CONFIRMTXT_TEAM2',                    ' from the teamlist for blog ');\r
-define('_CONFIRMTXT_BLOG',                     'The blog you are going to delete is: ');\r
-define('_WARNINGTXT_BLOGDEL',          'Warning! Deleting a blog will delete ALL items of that blog, and all comments. Please confirm to make clear that you are CERTAIN of what you\'re doing!<br />Also, don\'t interrupt Nucleus while removing your blog.');\r
-define('_CONFIRMTXT_MEMBER',           'You\'re about to delete the following member profile: ');\r
-define('_CONFIRMTXT_TEMPLATE',         'You\'re about to delete the template named ');\r
-define('_CONFIRMTXT_SKIN',                     'You\'re about to delete the skin named ');\r
-define('_CONFIRMTXT_BAN',                      'You\'re about to delete the ban for the ip range');\r
-define('_CONFIRMTXT_CATEGORY',         'You\'re about to delete the category ');\r
-\r
-// some status messages\r
-define('_DELETED_ITEM',                                'Item Deleted');\r
-define('_DELETED_MEMBER',                      'Member Deleted');\r
-define('_DELETED_COMMENT',                     'Comment Deleted');\r
-define('_DELETED_BLOG',                                'Blog Deleted');\r
-define('_DELETED_CATEGORY',                    'Category Deleted');\r
-define('_ITEM_MOVED',                          'Item Moved');\r
-define('_ITEM_ADDED',                          'Item Added');\r
-define('_COMMENT_UPDATED',                     'Comment updated');\r
-define('_SKIN_UPDATED',                                'Skin data has been saved');\r
-define('_TEMPLATE_UPDATED',                    'Template data has been saved');\r
-\r
-// errors\r
-define('_ERROR_COMMENT_LONGWORD',      'Please don\'t use words of lengths higher than 90 in your comments');\r
-define('_ERROR_COMMENT_NOCOMMENT',     'Please enter a comment');\r
-define('_ERROR_COMMENT_NOUSERNAME',    'Bad username');\r
-define('_ERROR_COMMENT_TOOLONG',       'Your comments are too long (max. 5000 chars)');\r
-define('_ERROR_COMMENTS_DISABLED',     'Comments for this blog are currently disabled.');\r
-define('_ERROR_COMMENTS_NONPUBLIC',    'You must be logged in as a member to add comment to this blog');\r
-define('_ERROR_COMMENTS_MEMBERNICK','The name you want to use to post comments is in use by a site member. Choose something else.');\r
-define('_ERROR_SKIN',                          'Skin error');\r
-define('_ERROR_ITEMCLOSED',                    'This item is closed, it\'s not possible to add new comments to it or to vote on it');\r
-define('_ERROR_NOSUCHITEM',                    'No such item exists');\r
-define('_ERROR_NOSUCHBLOG',                    'No such blog');\r
-define('_ERROR_NOSUCHSKIN',                    'No such skin');\r
-define('_ERROR_NOSUCHMEMBER',          'No such member');\r
-define('_ERROR_NOTONTEAM',                     'You\'re not on the teamlist of this weblog.');\r
-define('_ERROR_BADDESTBLOG',           'Destination blog does not exist');\r
-define('_ERROR_NOTONDESTTEAM',         'Cannot move item, since you\'re not on the teamlist of the destination blog');\r
-define('_ERROR_NOEMPTYITEMS',          'Cannot add empty items!');\r
-define('_ERROR_BADMAILADDRESS',                'Email address is not valid');\r
-define('_ERROR_BADNOTIFY',                     'One or more of the given notify addresses is not a valid email address');\r
-define('_ERROR_BADNAME',                       'Name is not valid (only a-z and 0-9 allowed, no spaces at start/end)');\r
-define('_ERROR_NICKNAMEINUSE',         'Another member is already using that nickname');\r
-define('_ERROR_PASSWORDMISMATCH',      'Passwords must match');\r
-define('_ERROR_PASSWORDTOOSHORT',      'Password should be at least 6 characters');\r
-define('_ERROR_PASSWORDMISSING',       'Password cannot be empty');\r
-define('_ERROR_REALNAMEMISSING',       'You must enter a real name');\r
-define('_ERROR_ATLEASTONEADMIN',       'There should always be at least one super-admin that can login to the admin area.');\r
-define('_ERROR_ATLEASTONEBLOGADMIN','Performing this action would leave your weblog unmaintainable. Please make sure there is always at least one admin.');\r
-define('_ERROR_ALREADYONTEAM',         'You can\'t add a member that is already on the team');\r
-define('_ERROR_BADSHORTBLOGNAME',      'The short blog name should only contain a-z and 0-9, without spaces');\r
-define('_ERROR_DUPSHORTBLOGNAME',      'Another blog already has the chosen short name. These names should be unique');\r
-define('_ERROR_UPDATEFILE',                    'Cannot get write access to the update-file. Make sure the file permissions are set ok (try chmodding it to 666). Also note that the location is relative to the admin-area directory, so you might want to use an absolute path (something like /your/path/to/nucleus/)');\r
-define('_ERROR_DELDEFBLOG',                    'Cannot delete the default blog');\r
-define('_ERROR_DELETEMEMBER',          'This member cannot be deleted, probably because she is the author of items or comments');\r
-define('_ERROR_BADTEMPLATENAME',       'Invalid name for template, use only a-z and 0-9, without spaces');\r
-define('_ERROR_DUPTEMPLATENAME',       'Another template with this name already exists');\r
-define('_ERROR_BADSKINNAME',           'Invalid name for skin (only a-z, 0-9 are allowed, no spaces)');\r
-define('_ERROR_DUPSKINNAME',           'Another skin with this name already exists');\r
-define('_ERROR_DEFAULTSKIN',           'There must at all times be a skin named "default"');\r
-define('_ERROR_SKINDEFDELETE',         'Cannot delete skin since it is the default skin for the following weblog: ');\r
-define('_ERROR_DISALLOWED',                    'Sorry, you\'re not allowed to perform this action');\r
-define('_ERROR_DELETEBAN',                     'Error while trying to delete ban (ban does not exist)');\r
-define('_ERROR_ADDBAN',                                'Error while trying to add ban. Ban might not have been added correctly in all your blogs.');\r
-define('_ERROR_BADACTION',                     'Required action does not exist');\r
-define('_ERROR_MEMBERMAILDISABLED',    'Member to Member mail messages are disabled');\r
-define('_ERROR_MEMBERCREATEDISABLED','Creation of member accounts is disabled');\r
-define('_ERROR_INCORRECTEMAIL',                'Incorrect mail address');\r
-define('_ERROR_VOTEDBEFORE',           'You have already voted for this item');\r
-define('_ERROR_BANNED1',                       'Cannot perform action since you (ip range ');\r
-define('_ERROR_BANNED2',                       ') are banned from doing so. The message was: \'');\r
-define('_ERROR_BANNED3',                       '\'');\r
-define('_ERROR_LOGINNEEDED',           'You must be logged in in order to perform this action');\r
-define('_ERROR_CONNECT',                       'Connect Error');\r
-define('_ERROR_FILE_TOO_BIG',          'File is too big!');\r
-define('_ERROR_BADFILETYPE',           'Sorry, this filetype is not allowed');\r
-define('_ERROR_BADREQUEST',                    'Bad upload request');\r
-define('_ERROR_DISALLOWEDUPLOAD',      'You are not on any weblogs teamlist. Hence, you are not allowed to upload files');\r
-define('_ERROR_BADPERMISSIONS',                'File/Dir permissions are not set correctly');\r
-define('_ERROR_UPLOADMOVEP',           'Error while moving uploaded file');\r
-define('_ERROR_UPLOADCOPY',                    'Error while copying file');\r
-define('_ERROR_UPLOADDUPLICATE',       'Another file with that name already exists. Try to rename it before uploading.');\r
-define('_ERROR_LOGINDISALLOWED',       'Sorry, you\'re not allowed to log in to the admin area. You can log in as another user, though');\r
-define('_ERROR_DBCONNECT',                     'Could not connect to mySQL server');\r
-define('_ERROR_DBSELECT',                      'Could not select the nucleus database.');\r
-define('_ERROR_NOSUCHLANGUAGE',                'No such language file exists');\r
-define('_ERROR_NOSUCHCATEGORY',                'No such category exists');\r
-define('_ERROR_DELETELASTCATEGORY',    'There must at least be one category');\r
-define('_ERROR_DELETEDEFCATEGORY',     'Cannot delete default category');\r
-define('_ERROR_BADCATEGORYNAME',       'Bad category name');\r
-define('_ERROR_DUPCATEGORYNAME',       'Another category with this name already exists');\r
-\r
-// some warnings (used for mediadir setting)\r
-define('_WARNING_NOTADIR',                     'Warning: Current value is not a directory!');\r
-define('_WARNING_NOTREADABLE',         'Warning: Current value is a non-readable directory!');\r
-define('_WARNING_NOTWRITABLE',         'Warning: Current value is NOT a writable directory!');\r
-\r
-// media and upload\r
-define('_MEDIA_UPLOADLINK',                    'Upload a new file');\r
-define('_MEDIA_MODIFIED',                      'modified');\r
-define('_MEDIA_FILENAME',                      'filename');\r
-define('_MEDIA_DIMENSIONS',                    'dimensions');\r
-define('_MEDIA_INLINE',                                'Inline');\r
-define('_MEDIA_POPUP',                         'Popup');\r
-define('_UPLOAD_TITLE',                                'Choose File');\r
-define('_UPLOAD_MSG',                          'Select the file you want to upload below, and hit the \'Upload\' button.');\r
-define('_UPLOAD_BUTTON',                       'Upload');\r
-\r
-// some status messages\r
-//define('_MSG_ACCOUNTCREATED',                'Account created, password will be sent through email');\r
-//define('_MSG_PASSWORDSENT',                  'Password has been sent by e-mail.');\r
-define('_MSG_LOGINAGAIN',                      'You\'ll need to login again, because your info changed');\r
-define('_MSG_SETTINGSCHANGED',         'Settings Changed');\r
-define('_MSG_ADMINCHANGED',                    'Admin Changed');\r
-define('_MSG_NEWBLOG',                         'New Blog Created');\r
-define('_MSG_ACTIONLOGCLEARED',                'Action Log Cleared');\r
-\r
-// actionlog in admin area\r
-define('_ACTIONLOG_DISALLOWED',                'Disallowed action: ');\r
-define('_ACTIONLOG_PWDREMINDERSENT','New password sent for ');\r
-define('_ACTIONLOG_TITLE',                     'Action Log');\r
-define('_ACTIONLOG_CLEAR_TITLE',       'Clear Action Log');\r
-define('_ACTIONLOG_CLEAR_TEXT',                'Clear action log now');\r
-\r
-// team management\r
-define('_TEAM_TITLE',                          'Manage team for blog ');\r
-define('_TEAM_CURRENT',                                'Current team');\r
-define('_TEAM_ADDNEW',                         'Add new member to team');\r
-define('_TEAM_CHOOSEMEMBER',           'Choose member');\r
-define('_TEAM_ADMIN',                          'Admin privileges? ');\r
-define('_TEAM_ADD',                                    'Add to team');\r
-define('_TEAM_ADD_BTN',                                'Add to team');\r
-\r
-// blogsettings\r
-define('_EBLOG_TITLE',                         'Edit Blog Settings');\r
-define('_EBLOG_TEAM_TITLE',                    'Edit Team');\r
-define('_EBLOG_TEAM_TEXT',                     'Click here to edit your team...');\r
-define('_EBLOG_SETTINGS_TITLE',                'Blog settings');\r
-define('_EBLOG_NAME',                          'Blog Name');\r
-define('_EBLOG_SHORTNAME',                     'Short Blog Name');\r
-define('_EBLOG_SHORTNAME_EXTRA',       '<br />(should only contain a-z and no spaces)');\r
-define('_EBLOG_DESC',                          'Blog Description');\r
-define('_EBLOG_URL',                           'URL');\r
-define('_EBLOG_DEFSKIN',                       'Default Skin');\r
-define('_EBLOG_DEFCAT',                                'Default Category');\r
-define('_EBLOG_LINEBREAKS',                    'Convert line breaks');\r
-define('_EBLOG_DISABLECOMMENTS',       'Comments enabled?<br /><small>(Disabling comments means that adding comments is not possible.)</small>');\r
-define('_EBLOG_ANONYMOUS',                     'Allow comments by non-members?');\r
-define('_EBLOG_NOTIFY',                                'Notify Address(es) (use ; as separator)');\r
-define('_EBLOG_NOTIFY_ON',                     'Notify on');\r
-define('_EBLOG_NOTIFY_COMMENT',                'New comments');\r
-define('_EBLOG_NOTIFY_KARMA',          'New karma votes');\r
-define('_EBLOG_NOTIFY_ITEM',           'New weblog items');\r
-define('_EBLOG_PING',                          'Ping Weblogs.com on update?');\r
-define('_EBLOG_MAXCOMMENTS',           'Max Amount of comments');\r
-define('_EBLOG_UPDATE',                                'Update file');\r
-define('_EBLOG_OFFSET',                                'Time Offset');\r
-define('_EBLOG_STIME',                         'Current server time is');\r
-define('_EBLOG_BTIME',                         'Current blog time is');\r
-define('_EBLOG_CHANGE',                                'Change Settings');\r
-define('_EBLOG_CHANGE_BTN',                    'Change Settings');\r
-define('_EBLOG_ADMIN',                         'Blog Admin');\r
-define('_EBLOG_ADMIN_MSG',                     'You will be assigned admin privileges');\r
-define('_EBLOG_CREATE_TITLE',          'Create new weblog');\r
-define('_EBLOG_CREATE_TEXT',           'Fill out the form below to create a new weblog. <br /><br /> <b>Note:</b> Only the necessary options are listed. If you want to set extra options, enter the blogsettings page after creating the weblog.');\r
-define('_EBLOG_CREATE',                                'Create!');\r
-define('_EBLOG_CREATE_BTN',                    'Create Weblog');\r
-define('_EBLOG_CAT_TITLE',                     'Categories');\r
-define('_EBLOG_CAT_NAME',                      'Category Name');\r
-define('_EBLOG_CAT_DESC',                      'Category Description');\r
-define('_EBLOG_CAT_CREATE',                    'Create New Category');\r
-define('_EBLOG_CAT_UPDATE',                    'Update Category');\r
-define('_EBLOG_CAT_UPDATE_BTN',                'Update Category');\r
-\r
-// templates\r
-define('_TEMPLATE_TITLE',                      'Edit Templates');\r
-define('_TEMPLATE_AVAILABLE_TITLE',    'Available Templates');\r
-define('_TEMPLATE_NEW_TITLE',          'New Template');\r
-define('_TEMPLATE_NAME',                       'Template Name');\r
-define('_TEMPLATE_DESC',                       'Template Description');\r
-define('_TEMPLATE_CREATE',                     'Create Template');\r
-define('_TEMPLATE_CREATE_BTN',         'Create Template');\r
-define('_TEMPLATE_EDIT_TITLE',         'Edit Template');\r
-define('_TEMPLATE_BACK',                       'Back to Template Overview');\r
-define('_TEMPLATE_EDIT_MSG',           'Not all template parts are needed, leave empty those that are not needed.');\r
-define('_TEMPLATE_SETTINGS',           'Template Settings');\r
-define('_TEMPLATE_ITEMS',                      'Items');\r
-define('_TEMPLATE_ITEMHEADER',         'Item Header');\r
-define('_TEMPLATE_ITEMBODY',           'Item Body');\r
-define('_TEMPLATE_ITEMFOOTER',         'Item Footer');\r
-define('_TEMPLATE_MORELINK',           'Link to extended entry');\r
-define('_TEMPLATE_NEW',                                'Indication of new item');\r
-define('_TEMPLATE_COMMENTS_ANY',       'Comments (if any)');\r
-define('_TEMPLATE_CHEADER',                    'Comments Header');\r
-define('_TEMPLATE_CBODY',                      'Comments Body');\r
-define('_TEMPLATE_CFOOTER',                    'Comments Footer');\r
-define('_TEMPLATE_CONE',                       'One Comment');\r
-define('_TEMPLATE_CMANY',                      'Two (or more) Comments');\r
-define('_TEMPLATE_CMORE',                      'Comments Read More');\r
-define('_TEMPLATE_CMEXTRA',                    'Member Extra');\r
-define('_TEMPLATE_COMMENTS_NONE',      'Comments (if none)');\r
-define('_TEMPLATE_CNONE',                      'No Comments');\r
-define('_TEMPLATE_COMMENTS_TOOMUCH','Comments (if any, but too much to show inline)');\r
-define('_TEMPLATE_CTOOMUCH',           'Too Much Comments');\r
-define('_TEMPLATE_ARCHIVELIST',                'Archive Lists');\r
-define('_TEMPLATE_AHEADER',                    'Archive List Header');\r
-define('_TEMPLATE_AITEM',                      'Archive List Item');\r
-define('_TEMPLATE_AFOOTER',                    'Archive List Footer');\r
-define('_TEMPLATE_DATETIME',           'Date and Time');\r
-define('_TEMPLATE_DHEADER',                    'Date Header');\r
-define('_TEMPLATE_DFOOTER',                    'Date Footer');\r
-define('_TEMPLATE_DFORMAT',                    'Date Format');\r
-define('_TEMPLATE_TFORMAT',                    'Time Format');\r
-define('_TEMPLATE_LOCALE',                     'Locale');\r
-define('_TEMPLATE_IMAGE',                      'Image popups');\r
-define('_TEMPLATE_PCODE',                      'Popup Link Code');\r
-define('_TEMPLATE_ICODE',                      'Inline Image Code');\r
-define('_TEMPLATE_MCODE',                      'Media Object Link Code');\r
-define('_TEMPLATE_SEARCH',                     'Search');\r
-define('_TEMPLATE_SHIGHLIGHT',         'Highlight');\r
-define('_TEMPLATE_SNOTFOUND',          'Nothing found in search');\r
-define('_TEMPLATE_UPDATE',                     'Update');\r
-define('_TEMPLATE_UPDATE_BTN',         'Update Template');\r
-define('_TEMPLATE_RESET_BTN',          'Reset Data');\r
-define('_TEMPLATE_CATEGORYLIST',       'Category Lists');\r
-define('_TEMPLATE_CATHEADER',          'Category List Header');\r
-define('_TEMPLATE_CATITEM',                    'Category List Item');\r
-define('_TEMPLATE_CATFOOTER',          'Category List Footer');\r
-\r
-// skins\r
-define('_SKIN_EDIT_TITLE',                     'Edit Skins');\r
-define('_SKIN_AVAILABLE_TITLE',                'Available Skins');\r
-define('_SKIN_NEW_TITLE',                      'New Skin');\r
-define('_SKIN_NAME',                           'Name');\r
-define('_SKIN_DESC',                           'Description');\r
-define('_SKIN_TYPE',                           'Content Type');\r
-define('_SKIN_CREATE',                         'Create');\r
-define('_SKIN_CREATE_BTN',                     'Create Skin');\r
-define('_SKIN_EDITONE_TITLE',          'Edit skin');\r
-define('_SKIN_BACK',                           'Back to Skin Overview');\r
-define('_SKIN_PARTS_TITLE',                    'Skin Parts');\r
-define('_SKIN_PARTS_MSG',                      'Not all types are needed for each skin. Leave empty those you don\'t need. Choose the skin type to edit below:');\r
-define('_SKIN_PART_MAIN',                      'Main Index');\r
-define('_SKIN_PART_ITEM',                      'Item Pages');\r
-define('_SKIN_PART_ALIST',                     'Archive List');\r
-define('_SKIN_PART_ARCHIVE',           'Archive');\r
-define('_SKIN_PART_SEARCH',                    'Search');\r
-define('_SKIN_PART_ERROR',                     'Errors');\r
-define('_SKIN_PART_MEMBER',                    'Member Details');\r
-define('_SKIN_PART_POPUP',                     'Image Popups');\r
-define('_SKIN_GENSETTINGS_TITLE',      'General Settings');\r
-define('_SKIN_CHANGE',                         'Change');\r
-define('_SKIN_CHANGE_BTN',                     'Change these settings');\r
-define('_SKIN_UPDATE_BTN',                     'Update Skin');\r
-define('_SKIN_RESET_BTN',                      'Reset Data');\r
-define('_SKIN_EDITPART_TITLE',         'Edit Skin');\r
-define('_SKIN_GOBACK',                         'Go Back');\r
-define('_SKIN_ALLOWEDVARS',                    'Allowed Variables (click for info):');\r
-\r
-// global settings\r
-define('_SETTINGS_TITLE',                      'General Settings');\r
-define('_SETTINGS_SUB_GENERAL',                'General Settings');\r
-define('_SETTINGS_DEFBLOG',                    'Default Blog');\r
-define('_SETTINGS_ADMINMAIL',          'Administrator Email');\r
-define('_SETTINGS_SITENAME',           'Site Name');\r
-define('_SETTINGS_SITEURL',                    'URL of Site (should end with a slash)');\r
-define('_SETTINGS_ADMINURL',           'URL of Admin Area (should end with a slash)');\r
-define('_SETTINGS_DIRS',                       'Nucleus Directories');\r
-define('_SETTINGS_MEDIADIR',           'Media Directory');\r
-define('_SETTINGS_SEECONFIGPHP',       '(see config.php)');\r
-define('_SETTINGS_MEDIAURL',           'Media URL (should end with a slash)');\r
-define('_SETTINGS_ALLOWUPLOAD',                'Allow File Upload?');\r
-define('_SETTINGS_ALLOWUPLOADTYPES','Allow File Types for Upload');\r
-define('_SETTINGS_CHANGELOGIN',                'Allow Members to Change Login/Password');\r
-define('_SETTINGS_COOKIES_TITLE',      'Cookie Settings');\r
-define('_SETTINGS_COOKIELIFE',         'Login Cookie Lifetime');\r
-define('_SETTINGS_COOKIESESSION',      'Session Cookies');\r
-define('_SETTINGS_COOKIEMONTH',                'Lifetime of a Month');\r
-define('_SETTINGS_COOKIEPATH',         'Cookie Path (advanced)');\r
-define('_SETTINGS_COOKIEDOMAIN',       'Cookie Domain (advanced)');\r
-define('_SETTINGS_COOKIESECURE',       'Secure Cookie (advanced)');\r
-define('_SETTINGS_LASTVISIT',          'Save Last Visit Cookies');\r
-define('_SETTINGS_ALLOWCREATE',                'Allow Visitors to Create a Member Account');\r
-define('_SETTINGS_NEWLOGIN',           'Login Allowed for User-Created accounts');\r
-define('_SETTINGS_NEWLOGIN2',          '(only goes for newly created accounts)');\r
-define('_SETTINGS_MEMBERMSGS',         'Allow Member-2-Member Service');\r
-define('_SETTINGS_LANGUAGE',           'Default Language');\r
-define('_SETTINGS_DISABLESITE',                'Disable Site');\r
-define('_SETTINGS_DBLOGIN',                    'mySQL Login &amp; Database');\r
-define('_SETTINGS_UPDATE',                     'Update Settings');\r
-define('_SETTINGS_UPDATE_BTN',         'Update Settings');\r
-define('_SETTINGS_DISABLEJS',          'Disable JavaScript Toolbar');\r
-define('_SETTINGS_MEDIA',                      'Media/Upload Settings');\r
-define('_SETTINGS_MEDIAPREFIX',                'Prefix uploaded files with date');\r
-define('_SETTINGS_MEMBERS',                    'Member Settings');\r
-\r
-// bans\r
-define('_BAN_TITLE',                           'Ban List for');\r
-define('_BAN_NONE',                                    'No bans for this weblog');\r
-define('_BAN_NEW_TITLE',                       'Add New Ban');\r
-define('_BAN_NEW_TEXT',                                'Add a new ban now');\r
-define('_BAN_REMOVE_TITLE',                    'Remove Ban');\r
-define('_BAN_IPRANGE',                         'IP Range');\r
-define('_BAN_BLOGS',                           'Which blogs?');\r
-define('_BAN_DELETE_TITLE',                    'Delete Ban');\r
-define('_BAN_ALLBLOGS',                                'All blogs to which you have admin privileges.');\r
-define('_BAN_REMOVED_TITLE',           'Ban Removed');\r
-define('_BAN_REMOVED_TEXT',                    'Ban was removed for the following blogs:');\r
-define('_BAN_ADD_TITLE',                       'Add Ban');\r
-define('_BAN_IPRANGE_TEXT',                    'Choose the IP range you want to block below. The less numbers in it, the more addresses will be blocked.');\r
-define('_BAN_BLOGS_TEXT',                      'You can either select to ban the IP on one blog only, or you can select to block the IP on all blogs where you have administrator privileges. Make your choice below.');\r
-define('_BAN_REASON_TITLE',                    'Reason');\r
-define('_BAN_REASON_TEXT',                     'You can provide a reason for the ban, which will be displayed when the IP holder tries to add another comment or tries to cast a karma vote. Maximum length is 256 characters.');\r
-define('_BAN_ADD_BTN',                         'Add Ban');\r
-\r
-// LOGIN screen\r
-define('_LOGIN_MESSAGE',                       'Message');\r
-define('_LOGIN_NAME',                          'Name');\r
-define('_LOGIN_PASSWORD',                      'Password');\r
-define('_LOGIN_SHARED',                                _LOGINFORM_SHARED);\r
-define('_LOGIN_FORGOT',                                'Forgot your password?');\r
-\r
-// membermanagement\r
-define('_MEMBERS_TITLE',                       'Member Management');\r
-define('_MEMBERS_CURRENT',                     'Current Members');\r
-define('_MEMBERS_NEW',                         'New Member');\r
-define('_MEMBERS_DISPLAY',                     'Display Name');\r
-define('_MEMBERS_DISPLAY_INFO',                '(This is the name you use to login)');\r
-define('_MEMBERS_REALNAME',                    'Real Name');\r
-define('_MEMBERS_PWD',                         'Password');\r
-define('_MEMBERS_REPPWD',                      'Repeat Password');\r
-define('_MEMBERS_EMAIL',                       'Email address');\r
-define('_MEMBERS_EMAIL_EDIT',          '(When you change the email address, a new password will be automatically sent out to that address)');\r
-define('_MEMBERS_URL',                         'Website Address (URL)');\r
-define('_MEMBERS_SUPERADMIN',          'Administrator privileges');\r
-define('_MEMBERS_CANLOGIN',                    'Can login to admin area');\r
-define('_MEMBERS_NOTES',                       'Notes');\r
-define('_MEMBERS_NEW_BTN',                     'Add Member');\r
-define('_MEMBERS_EDIT',                                'Edit Member');\r
-define('_MEMBERS_EDIT_BTN',                    'Change Settings');\r
-define('_MEMBERS_BACKTOOVERVIEW',      'Back to Member Overview');\r
-define('_MEMBERS_DEFLANG',                     'Language');\r
-define('_MEMBERS_USESITELANG',         '- use site settings -');\r
-\r
-// List of blogs (TT = tooltip)\r
-define('_BLOGLIST_TT_VISIT',           'Visit Site');\r
-define('_BLOGLIST_ADD',                                'Add Item');\r
-define('_BLOGLIST_TT_ADD',                     'Add a new item to this weblog');\r
-define('_BLOGLIST_EDIT',                       'Edit/Delete Items');\r
-define('_BLOGLIST_TT_EDIT',                    '');\r
-define('_BLOGLIST_BMLET',                      'Bookmarklet');\r
-define('_BLOGLIST_TT_BMLET',           '');\r
-define('_BLOGLIST_SETTINGS',           'Settings');\r
-define('_BLOGLIST_TT_SETTINGS',                'Edit settings or manage team');\r
-define('_BLOGLIST_BANS',                       'Bans');\r
-define('_BLOGLIST_TT_BANS',                    'View, add or remove banned IPs');\r
-define('_BLOGLIST_DELETE',                     'Delete All');\r
-define('_BLOGLIST_TT_DELETE',          'Delete this weblog');\r
-\r
-// OVERVIEW screen\r
-define('_OVERVIEW_YRBLOGS',                    'Your weblogs');\r
-define('_OVERVIEW_YRDRAFTS',           'Your drafts');\r
-define('_OVERVIEW_YRSETTINGS',         'Your settings');\r
-define('_OVERVIEW_GSETTINGS',          'General settings');\r
-define('_OVERVIEW_NOBLOGS',                    'You\'re not on any weblogs teamlist');\r
-define('_OVERVIEW_NODRAFTS',           'No drafts');\r
-define('_OVERVIEW_EDITSETTINGS',       'Edit Your Settings...');\r
-define('_OVERVIEW_BROWSEITEMS',                'Browse your items...');\r
-define('_OVERVIEW_BROWSECOMM',         'Browse your comments...');\r
-define('_OVERVIEW_VIEWLOG',                    'View Action Log...');\r
-define('_OVERVIEW_MEMBERS',                    'Manage Members...');\r
-define('_OVERVIEW_NEWLOG',                     'Create New Weblog...');\r
-define('_OVERVIEW_SETTINGS',           'Edit Settings...');\r
-define('_OVERVIEW_TEMPLATES',          'Edit Templates...');\r
-define('_OVERVIEW_SKINS',                      'Edit Skins...');\r
-define('_OVERVIEW_BACKUP',                     'Backup/Restore...');\r
-\r
-// ITEMLIST\r
-define('_ITEMLIST_BLOG',                       'Items for blog');\r
-define('_ITEMLIST_YOUR',                       'Your items');\r
-\r
-// Comments\r
-define('_COMMENTS',                                    'Comments');\r
-define('_NOCOMMENTS',                          'No comments for this item');\r
-define('_COMMENTS_YOUR',                       'Your Comments');\r
-define('_NOCOMMENTS_YOUR',                     'You didn\'t write any comments');\r
-\r
-// LISTS (general)\r
-define('_LISTS_NOMORE',                                'No more results, or no results at all');\r
-define('_LISTS_PREV',                          'Previous');\r
-define('_LISTS_NEXT',                          'Next');\r
-define('_LISTS_SEARCH',                                'Search');\r
-define('_LISTS_CHANGE',                                'Change');\r
-define('_LISTS_PERPAGE',                       'items/page');\r
-define('_LISTS_ACTIONS',                       'Actions');\r
-define('_LISTS_DELETE',                                'Delete');\r
-define('_LISTS_EDIT',                          'Edit');\r
-define('_LISTS_MOVE',                          'Move');\r
-define('_LISTS_CLONE',                         'Clone');\r
-define('_LISTS_TITLE',                         'Title');\r
-define('_LISTS_BLOG',                          'Blog');\r
-define('_LISTS_NAME',                          'Name');\r
-define('_LISTS_DESC',                          'Description');\r
-define('_LISTS_TIME',                          'Time');\r
-define('_LISTS_COMMENTS',                      'Comments');\r
-define('_LISTS_TYPE',                          'Type');\r
-\r
-\r
-// member list\r
-define('_LIST_MEMBER_NAME',                    'Display Name');\r
-define('_LIST_MEMBER_RNAME',           'Real Name');\r
-define('_LIST_MEMBER_ADMIN',           'Super-admin? ');\r
-define('_LIST_MEMBER_LOGIN',           'Can login? ');\r
-define('_LIST_MEMBER_URL',                     'Website');\r
-\r
-// banlist\r
-define('_LIST_BAN_IPRANGE',                    'IP Range');\r
-define('_LIST_BAN_REASON',                     'Reason');\r
-\r
-// actionlist\r
-define('_LIST_ACTION_MSG',                     'Message');\r
-\r
-// commentlist\r
-define('_LIST_COMMENT_BANIP',          'Ban IP');\r
-define('_LIST_COMMENT_WHO',                    'Author');\r
-define('_LIST_COMMENT',                                'Comment');\r
-define('_LIST_COMMENT_HOST',           'Host');\r
-\r
-// itemlist\r
-define('_LIST_ITEM_INFO',                      'Info');\r
-define('_LIST_ITEM_CONTENT',           'Title and Text');\r
-\r
-\r
-// teamlist\r
-define('_LIST_TEAM_ADMIN',                     'Admin ');\r
-define('_LIST_TEAM_CHADMIN',           'Change Admin');\r
-\r
-// edit comments\r
-define('_EDITC_TITLE',                         'Edit Comments');\r
-define('_EDITC_WHO',                           'Author');\r
-define('_EDITC_HOST',                          'From Where?');\r
-define('_EDITC_WHEN',                          'When?');\r
-define('_EDITC_TEXT',                          'Text');\r
-define('_EDITC_EDIT',                          'Edit Comment');\r
-define('_EDITC_MEMBER',                                'member');\r
-define('_EDITC_NONMEMBER',                     'non member');\r
-\r
-// move item\r
-define('_MOVE_TITLE',                          'Move to which blog?');\r
-define('_MOVE_BTN',                                    'Move Item');\r
-\r
-?>\r
+<?php
+// English Nucleus Language File
+//
+// Author: Wouter Demuynck
+// Nucleus version: v1.0-v3.2
+//
+// Please note: if you want to translate this file to your own language, be aware
+// that in a next Nucleus version, new variables might be added and some other ones
+// might be deleted. Therefor, it's important to list the Nucleus version for which
+// the file was written in your document.
+//
+// Fully translated language file can be sent to us and will be made
+// available for download (with proper credit to the author, of course)
+
+// START changed/added after 3.3 START
+define('_AUTOSAVEDRAFT',               'Auto save draft');
+define('_AUTOSAVEDRAFT_LASTSAVED',     'Last saved: ');
+define('_AUTOSAVEDRAFT_NOTYETSAVED',   'No saves have been made yet');
+define('_AUTOSAVEDRAFT_NOW',           'Auto save now');
+define('_SKIN_PARTS_SPECIAL',          'Special skin parts');
+define('_ERROR_SKIN_PARTS_SPECIAL_FORMAT',             'You must enter a name that exists only out of lowercase letters and digits');
+define('_ERROR_SKIN_PARTS_SPECIAL_DELETE',             'Can\'t delete this skin part');
+define('_CONFIRMTXT_SKIN_PARTS_SPECIAL',               'Do you really want to delete this special skin part?');
+// END changed/added after 3.3 END
+
+// START changed/added after 3.22 START
+define('_SEARCHFORM_QUERY',                    'Keywords to search');
+define('_ERROR_EMAIL_REQUIRED',                'Email address is required');
+define('_COMMENTFORM_MAIL',                    'Website:');
+define('_COMMENTFORM_EMAIL',           'E-mail:');
+define('_EBLOG_REQUIREDEMAIL',         'Require E-mail address with comments?');
+define('_ERROR_COMMENTS_SPAM',      'Your comment was rejected because it did not pass the spam test');
+// END changed/added after 3.22 END
+
+// START changed/added after 3.15 START
+
+define('_LIST_PLUG_SUBS_NEEDUPDATE','Please use the \'Update Subscription list\'-button to update the plugin\'s subscription list.');
+define('_LIST_PLUGS_DEP',                      'Plugin(s) requires:');
+
+// END changed/added after 3.15
+
+// START changed/added after 3.1 START
+
+// comments list per weblog
+define('_COMMENTS_BLOG',                       'All Comments for blog');
+define('_NOCOMMENTS_BLOG',                     'No comments were made on items of this blog');
+define('_BLOGLIST_COMMENTS',           'Comments');
+define('_BLOGLIST_TT_COMMENTS',                'A list of all comments made on items of this blog');
+
+
+// for use in archivetype-skinvar
+define('_ARCHIVETYPE_DAY',                     'day');
+define('_ARCHIVETYPE_MONTH',           'month');
+
+// tickets (prevents malicious users to trick an admin to perform actions he doesn't want)
+define('_ERROR_BADTICKET',                     'Invalid or expired ticket.');
+
+// plugin dependency
+define('_ERROR_INSREQPLUGIN',          'Plugin installation failed, requires ');
+define('_ERROR_DELREQPLUGIN',          'Plugin deletion failed, required by ');
+
+// cookie prefix
+define('_SETTINGS_COOKIEPREFIX',       'Cookie Prefix');
+
+// account activation
+define('_ERROR_NOLOGON_NOACTIVATE',    'Cannot send activation link. You\'re not allowed to log in.');
+define('_ERROR_ACTIVATE',                      'Activation key does not exist, is invalid, or has expired.');
+define('_ACTIONLOG_ACTIVATIONLINK', 'Activation link sent');
+define('_MSG_ACTIVATION_SENT',         'An activation link has been sent by e-mail.');
+
+// activation link emails
+define('_ACTIVATE_REGISTER_MAIL',      "Hi <%memberName%>,\n\nYou need to activate your account at <%siteName%> (<%siteUrl%>).\nYou can do this by visiting the link below: \n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_REGISTER_MAILTITLE', "Activate your '<%memberName%>' account");
+define('_ACTIVATE_REGISTER_TITLE',     'Welcome <%memberName%>');
+define('_ACTIVATE_REGISTER_TEXT',      'You\'re almost there. Please choose a password for your account below.');
+define('_ACTIVATE_FORGOT_MAIL',                "Hi <%memberName%>,\n\nUsing the link below, you can choose a new password for your account at <%siteName%> (<%siteUrl%>) by choosing a new password.\n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_FORGOT_MAILTITLE',"Re-activate your '<%memberName%>' account");
+define('_ACTIVATE_FORGOT_TITLE',       'Welcome <%memberName%>');
+define('_ACTIVATE_FORGOT_TEXT',                'You can choose a new password for your account below:');
+define('_ACTIVATE_CHANGE_MAIL',                "Hi <%memberName%>,\n\nSince your e-mail address has changed, you'll need to re-activate your account at <%siteName%> (<%siteUrl%>).\nYou can do this by visiting the link below: \n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_CHANGE_MAILTITLE',"Re-activate your '<%memberName%>' account");
+define('_ACTIVATE_CHANGE_TITLE',       'Welcome <%memberName%>');
+define('_ACTIVATE_CHANGE_TEXT',                'Your address change has been verified. Thanks!');
+define('_ACTIVATE_SUCCESS_TITLE',      'Activation Succeeded');
+define('_ACTIVATE_SUCCESS_TEXT',       'Your account has been successfully activated.');
+define('_MEMBERS_SETPWD',                      'Set Password');
+define('_MEMBERS_SETPWD_BTN',          'Set Password');
+define('_QMENU_ACTIVATE',                      'Account Activation');
+define('_QMENU_ACTIVATE_TEXT',         '<p>After you have activated your account, you can start using it by <a href="index.php?action=showlogin">logging in</a>.</p>');
+
+define('_PLUGS_BTN_UPDATE',                    'Update subscription list');
+
+// global settings
+define('_SETTINGS_JSTOOLBAR',          'Javascript Toolbar Style');
+define('_SETTINGS_JSTOOLBAR_FULL',     'Full Toolbar (IE)');
+define('_SETTINGS_JSTOOLBAR_SIMPLE','Simple Toolbar (Non-IE)');
+define('_SETTINGS_JSTOOLBAR_NONE',     'Disable Toolbar');
+define('_SETTINGS_URLMODE_HELP',       '(Info: <a href="documentation/tips.html#searchengines-fancyurls">How to activate fancy URLs</a>)');
+
+// extra plugin settings part when editing categories/members/blogs/...
+define('_PLUGINS_EXTRA',                       'Extra Plugin Settings');
+
+// itemlist info column keys
+define('_LIST_ITEM_BLOG',                      'blog:');
+define('_LIST_ITEM_CAT',                       'cat:');
+define('_LIST_ITEM_AUTHOR',                    'author:');
+define('_LIST_ITEM_DATE',                      'date:');
+define('_LIST_ITEM_TIME',                      'time:');
+
+// indication of registered members in comments list
+define('_LIST_COMMENTS_MEMBER',        '(member)');
+
+// batch operations
+define('_BATCH_WITH_SEL',                      'With selected:');
+define('_BATCH_EXEC',                          'Execute');
+
+// quickmenu
+define('_QMENU_HOME',                          'Home');
+define('_QMENU_ADD',                           'Add Item');
+define('_QMENU_ADD_SELECT',                    '-- select --');
+define('_QMENU_USER_SETTINGS',         'Profile');
+define('_QMENU_USER_ITEMS',                    'Items');
+define('_QMENU_USER_COMMENTS',         'Comments');
+define('_QMENU_MANAGE',                                'Management');
+define('_QMENU_MANAGE_LOG',                    'Action Log');
+define('_QMENU_MANAGE_SETTINGS',       'Configuration');
+define('_QMENU_MANAGE_MEMBERS',                'Members');
+define('_QMENU_MANAGE_NEWBLOG',                'New Weblog');
+define('_QMENU_MANAGE_BACKUPS',                'Backups');
+define('_QMENU_MANAGE_PLUGINS',                'Plugins');
+define('_QMENU_LAYOUT',                                'Layout');
+define('_QMENU_LAYOUT_SKINS',          'Skins');
+define('_QMENU_LAYOUT_TEMPL',          'Templates');
+define('_QMENU_LAYOUT_IEXPORT',                'Import/Export');
+define('_QMENU_PLUGINS',                       'Plugins');
+
+// quickmenu on logon screen
+define('_QMENU_INTRO',                         'Introduction');
+define('_QMENU_INTRO_TEXT',                    '<p>This is the logon screen for Nucleus CMS, the content management system that\'s being used to maintain this website.</p><p>If you have an account, you can log on and start posting new items.</p>');
+
+// helppages for plugins
+define('_ERROR_PLUGNOHELPFILE',                'The helpfile for this plugin can not be found');
+define('_PLUGS_HELP_TITLE',                    'Helppage for plugin');
+define('_LIST_PLUGS_HELP',                     'help');
+
+
+// END changed/started after 3.1
+
+// START changed/added after v2.5beta START
+
+// general settings (security)
+define('_SETTINGS_EXTAUTH',                    'Enable External Authentication');
+define('_WARNING_EXTAUTH',                     'Warning: Enable only if needed.');
+
+// member profile
+define('_MEMBERS_BYPASS',                      'Use External Authentication');
+
+// 'always include in search' blog setting (yes/no) [in v2.5beta, the 'always' part wasn't clear]
+define('_EBLOG_SEARCH',                                '<em>Always</em> include in search');
+
+// END changed/added after v2.5beta
+
+// START introduced after v2.0 START
+
+// media library
+define('_MEDIA_VIEW',                          'view');
+define('_MEDIA_VIEW_TT',                       'View file (opens in new window)');
+define('_MEDIA_FILTER_APPLY',          'Apply Filter');
+define('_MEDIA_FILTER_LABEL',          'Filter: ');
+define('_MEDIA_UPLOAD_TO',                     'Upload to...');
+define('_MEDIA_UPLOAD_NEW',                    'Upload new file...');
+define('_MEDIA_COLLECTION_SELECT',     'Select');
+define('_MEDIA_COLLECTION_TT',         'Switch to this category');
+define('_MEDIA_COLLECTION_LABEL',      'Current collection: ');
+
+// tooltips on toolbar
+define('_ADD_ALIGNLEFT_TT',                    'Align Left');
+define('_ADD_ALIGNRIGHT_TT',           'Align Right');
+define('_ADD_ALIGNCENTER_TT',          'Align Center');
+
+
+// generic upload failure
+define('_ERROR_UPLOADFAILED',          'Upload failed');
+
+// END introduced after v2.0 END
+
+// START introduced after v1.5 START
+
+// posting to the past/edit timestamps
+define('_EBLOG_ALLOWPASTPOSTING',      'Allow posting to the past');
+define('_ADD_CHANGEDATE',                      'Update timestamp');
+define('_BMLET_CHANGEDATE',                    'Update timestamp');
+
+// skin import/export
+define('_OVERVIEW_SKINIMPORT',         'Skin import/export...');
+
+// skin settings
+define('_PARSER_INCMODE_NORMAL',       'Normal');
+define('_PARSER_INCMODE_SKINDIR',      'Use skin dir');
+define('_SKIN_INCLUDE_MODE',           'Include mode');
+define('_SKIN_INCLUDE_PREFIX',         'Include prefix');
+
+// global settings
+define('_SETTINGS_BASESKIN',           'Base Skin');
+define('_SETTINGS_SKINSURL',           'Skins URL');
+define('_SETTINGS_ACTIONSURL',         'Full URL to action.php');
+
+// category moves (batch)
+define('_ERROR_MOVEDEFCATEGORY',       'Cannot move default category');
+define('_ERROR_MOVETOSELF',                    'Cannot move category (destination blog is the same as source blog)');
+define('_MOVECAT_TITLE',                       'Select blog to move category to');
+define('_MOVECAT_BTN',                         'Move category');
+
+// URLMode setting
+define('_SETTINGS_URLMODE',                    'URL Mode');
+define('_SETTINGS_URLMODE_NORMAL',     'Normal');
+define('_SETTINGS_URLMODE_PATHINFO','Fancy');
+
+// Batch operations
+define('_BATCH_NOSELECTION',           'Nothing selected to perform actions on');
+define('_BATCH_ITEMS',                         'Batch operation on items');
+define('_BATCH_CATEGORIES',                    'Batch operation on categories');
+define('_BATCH_MEMBERS',                       'Batch operation on members');
+define('_BATCH_TEAM',                          'Batch operation on team members');
+define('_BATCH_COMMENTS',                      'Batch operation on comments');
+define('_BATCH_UNKNOWN',                       'Unknown batch operation: ');
+define('_BATCH_EXECUTING',                     'Executing');
+define('_BATCH_ONCATEGORY',                    'on category');
+define('_BATCH_ONITEM',                                'on item');
+define('_BATCH_ONCOMMENT',                     'on comment');
+define('_BATCH_ONMEMBER',                      'on member');
+define('_BATCH_ONTEAM',                                'on team member');
+define('_BATCH_SUCCESS',                       'Success!');
+define('_BATCH_DONE',                          'Done!');
+define('_BATCH_DELETE_CONFIRM',                'Confirm Batch Deletion');
+define('_BATCH_DELETE_CONFIRM_BTN',    'Confirm Batch Deletion');
+define('_BATCH_SELECTALL',                     'select all');
+define('_BATCH_DESELECTALL',           'deselect all');
+
+// batch operations: options in dropdowns
+define('_BATCH_ITEM_DELETE',           'Delete');
+define('_BATCH_ITEM_MOVE',                     'Move');
+define('_BATCH_MEMBER_DELETE',         'Delete');
+define('_BATCH_MEMBER_SET_ADM',                'Give admin rights');
+define('_BATCH_MEMBER_UNSET_ADM',      'Take away admin rights');
+define('_BATCH_TEAM_DELETE',           'Delete from team');
+define('_BATCH_TEAM_SET_ADM',          'Give admin rights');
+define('_BATCH_TEAM_UNSET_ADM',                'Take away admin rights');
+define('_BATCH_CAT_DELETE',                    'Delete');
+define('_BATCH_CAT_MOVE',                      'Move to other blog');
+define('_BATCH_COMMENT_DELETE',                'Delete');
+
+// itemlist: Add new item...
+define('_ITEMLIST_ADDNEW',                     'Add new item...');
+define('_ADD_PLUGIN_EXTRAS',           'Extra Plugin Options');
+
+// errors
+define('_ERROR_CATCREATEFAIL',         'Could not create new category');
+define('_ERROR_NUCLEUSVERSIONREQ',     'This plugin requires a newer Nucleus version: ');
+
+// backlinks
+define('_BACK_TO_BLOGSETTINGS',                'Back to blogsettings');
+
+// skin import export
+define('_SKINIE_TITLE_IMPORT',         'Import');
+define('_SKINIE_TITLE_EXPORT',         'Export');
+define('_SKINIE_BTN_IMPORT',           'Import');
+define('_SKINIE_BTN_EXPORT',           'Export selected skins/templates');
+define('_SKINIE_LOCAL',                                'Import from local file:');
+define('_SKINIE_NOCANDIDATES',         'No candidates for import found in the skins directory');
+define('_SKINIE_FROMURL',                      'Import from URL:');
+define('_SKINIE_EXPORT_INTRO',         'Select the skins and templates you want to export below');
+define('_SKINIE_EXPORT_SKINS',         'Skins');
+define('_SKINIE_EXPORT_TEMPLATES',     'Templates');
+define('_SKINIE_EXPORT_EXTRA',         'Extra Info');
+define('_SKINIE_CONFIRM_OVERWRITE',    'Overwrite skins that already exists (see nameclashes)');
+define('_SKINIE_CONFIRM_IMPORT',       'Yes, I want to import this');
+define('_SKINIE_CONFIRM_TITLE',                'About to import skins and templates');
+define('_SKINIE_INFO_SKINS',           'Skins in file:');
+define('_SKINIE_INFO_TEMPLATES',       'Templates in file:');
+define('_SKINIE_INFO_GENERAL',         'Info:');
+define('_SKINIE_INFO_SKINCLASH',       'Skin name clashes:');
+define('_SKINIE_INFO_TEMPLCLASH',      'Template name clashes:');
+define('_SKINIE_INFO_IMPORTEDSKINS','Imported skins:');
+define('_SKINIE_INFO_IMPORTEDTEMPLS','Imported templates:');
+define('_SKINIE_DONE',                         'Done Importing');
+
+define('_AND',                                         'and');
+define('_OR',                                          'or');
+
+// empty fields on template edit
+define('_EDITTEMPLATE_EMPTY',          'empty field (click to edit)');
+
+// skin overview list
+define('_LIST_SKINS_INCMODE',          'IncludeMode:');
+define('_LIST_SKINS_INCPREFIX',                'IncludePrefix:');
+define('_LIST_SKINS_DEFINED',          'Defined parts:');
+
+// backup
+define('_BACKUPS_TITLE',                       'Backup / Restore');
+define('_BACKUP_TITLE',                                'Backup');
+define('_BACKUP_INTRO',                                'Click the button below to create a backup of your Nucleus database. You\'ll be prompted to save a backup file. Store it in a safe place.');
+define('_BACKUP_ZIP_YES',                      'Try to use compression');
+define('_BACKUP_ZIP_NO',                       'Do not use compression');
+define('_BACKUP_BTN',                          'Create Backup');
+define('_BACKUP_NOTE',                         '<b>Note:</b> Only the database contents is stored in the backup. Media files and settings in config.php are thus <b>NOT</b> included in the backup.');
+define('_RESTORE_TITLE',                       'Restore');
+define('_RESTORE_NOTE',                                '<b>WARNING:</b> Restoring from a backup will <b>ERASE</b> all current Nucleus data in the database! Only do this when you\'re really sure!     <br />  <b>Note:</b> Make sure that the version of Nucleus in which you created the backup should be the same as the version you\'re running right now! It won\'t work otherwise');
+define('_RESTORE_INTRO',                       'Select the backup file below (it\'ll be uploaded to the server) and click the "Restore" button to start.');
+define('_RESTORE_IMSURE',                      'Yes, I\'m sure I want to do this!');
+define('_RESTORE_BTN',                         'Restore From File');
+define('_RESTORE_WARNING',                     '(make sure you\'re restoring the correct backup, maybe make a new backup before you start)');
+define('_ERROR_BACKUP_NOTSURE',                'You\'ll need to check the \'I\'m sure\' testbox');
+define('_RESTORE_COMPLETE',                    'Restore Complete');
+
+// new item notification
+define('_NOTIFY_NI_MSG',                       'A new item has been posted:');
+define('_NOTIFY_NI_TITLE',                     'New Item!');
+define('_NOTIFY_KV_MSG',                       'Karma vote on item:');
+define('_NOTIFY_KV_TITLE',                     'Nucleus karma:');
+define('_NOTIFY_NC_MSG',                       'Comment on item:');
+define('_NOTIFY_NC_TITLE',                     'Nucleus comment:');
+define('_NOTIFY_USERID',                       'User ID:');
+define('_NOTIFY_USER',                         'User:');
+define('_NOTIFY_COMMENT',                      'Comment:');
+define('_NOTIFY_VOTE',                         'Vote:');
+define('_NOTIFY_HOST',                         'Host:');
+define('_NOTIFY_IP',                           'IP:');
+define('_NOTIFY_MEMBER',                       'Member:');
+define('_NOTIFY_TITLE',                                'Title:');
+define('_NOTIFY_CONTENTS',                     'Contents:');
+
+// member mail message
+define('_MMAIL_MSG',                           'A message sent to you by');
+define('_MMAIL_FROMANON',                      'an anonymous visitor');
+define('_MMAIL_FROMNUC',                       'Posted from a Nucleus weblog at');
+define('_MMAIL_TITLE',                         'A message from');
+define('_MMAIL_MAIL',                          'Message:');
+
+// END introduced after v1.5 END
+
+
+// START introduced after v1.1 START
+
+// bookmarklet buttons
+define('_BMLET_ADD',                           'Add Item');
+define('_BMLET_EDIT',                          'Edit Item');
+define('_BMLET_DELETE',                                'Delete Item');
+define('_BMLET_BODY',                          'Body');
+define('_BMLET_MORE',                          'Extended');
+define('_BMLET_OPTIONS',                       'Options');
+define('_BMLET_PREVIEW',                       'Preview');
+
+// used in bookmarklet
+define('_ITEM_UPDATED',                                'Item was updated');
+define('_ITEM_DELETED',                                'Item was deleted');
+
+// plugins
+define('_CONFIRMTXT_PLUGIN',           'Are you sure you want to delete the plugin named');
+define('_ERROR_NOSUCHPLUGIN',          'No such plugin');
+define('_ERROR_DUPPLUGIN',                     'Sorry, this plugin is already installed');
+define('_ERROR_PLUGFILEERROR',         'No such plugin exists, or the permissions are set incorrectly');
+define('_PLUGS_NOCANDIDATES',          'No plugin candidates found');
+
+define('_PLUGS_TITLE_MANAGE',          'Manage Plugins');
+define('_PLUGS_TITLE_INSTALLED',       'Currently Installed');
+define('_PLUGS_TITLE_UPDATE',          'Update subscription list');
+define('_PLUGS_TEXT_UPDATE',           'Nucleus keeps a cache of the event subscriptions of the plugins. When you upgrade a plugin by replacing it\'s file, you should run this update to make sure that the correct subscriptions are cached');
+define('_PLUGS_TITLE_NEW',                     'Install New Plugin');
+define('_PLUGS_ADD_TEXT',                      'Below is a list of all the files in your plugins directory, that might be non-installed plugins. Make sure you are <strong>really sure</strong> that it\'s a plugin before adding it.');
+define('_PLUGS_BTN_INSTALL',           'Install Plugin');
+define('_BACKTOOVERVIEW',                      'Back to overview');
+
+// editlink
+define('_TEMPLATE_EDITLINK',           'Edit Item Link');
+
+// add left / add right tooltips
+define('_ADD_LEFT_TT',                         'Add left box');
+define('_ADD_RIGHT_TT',                                'Add right box');
+
+// add/edit item: new category (in dropdown box)
+define('_ADD_NEWCAT',                          'New Category...');
+
+// new settings
+define('_SETTINGS_PLUGINURL',          'Plugin URL');
+define('_SETTINGS_MAXUPLOADSIZE',      'Max. upload file size (bytes)');
+define('_SETTINGS_NONMEMBERMSGS',      'Allow non-members to send messages');
+define('_SETTINGS_PROTECTMEMNAMES',    'Protect member names');
+
+// overview screen
+define('_OVERVIEW_PLUGINS',                    'Manage Plugins...');
+
+// actionlog
+define('_ACTIONLOG_NEWMEMBER',         'New member registration:');
+
+// membermail (when not logged in)
+define('_MEMBERMAIL_MAIL',                     'Your email address:');
+
+// file upload
+define('_ERROR_DISALLOWEDUPLOAD2',     'You do not have admin rights on any of the blogs that have the destination member on the teamlist. Therefor, you\'re not allowed to upload files to this member\'s media directory');
+
+// plugin list
+define('_LISTS_INFO',                          'Information');
+define('_LIST_PLUGS_AUTHOR',           'By:');
+define('_LIST_PLUGS_VER',                      'Version:');
+define('_LIST_PLUGS_SITE',                     'Visit site');
+define('_LIST_PLUGS_DESC',                     'Description:');
+define('_LIST_PLUGS_SUBS',                     'Subscribes to the following events:');
+define('_LIST_PLUGS_UP',                       'move up');
+define('_LIST_PLUGS_DOWN',                     'move down');
+define('_LIST_PLUGS_UNINSTALL',                'uninstall');
+define('_LIST_PLUGS_ADMIN',                    'admin');
+define('_LIST_PLUGS_OPTIONS',          'edit&nbsp;options');
+
+// plugin option list
+define('_LISTS_VALUE',                         'Value');
+
+// plugin options
+define('_ERROR_NOPLUGOPTIONS',         'this plugin does not have any options set');
+define('_PLUGS_BACK',                          'Back to Plugin Overview');
+define('_PLUGS_SAVE',                          'Save Options');
+define('_PLUGS_OPTIONS_UPDATED',       'Plugin options updated');
+
+define('_OVERVIEW_MANAGEMENT',         'Management');
+define('_OVERVIEW_MANAGE',                     'Nucleus management...');
+define('_MANAGE_GENERAL',                      'General Management');
+define('_MANAGE_SKINS',                                'Skin and Templates');
+define('_MANAGE_EXTRA',                                'Extra features');
+
+define('_BACKTOMANAGE',                                'Back to Nucleus management');
+
+
+// END introduced after v1.1 END
+
+
+
+
+// charset to use
+define('_CHARSET',                                     'iso-8859-1');
+
+// global stuff
+define('_LOGOUT',                                      'Log Out');
+define('_LOGIN',                                       'Log In');
+define('_YES',                                         'Yes');
+define('_NO',                                          'No');
+define('_SUBMIT',                                      'Submit');
+define('_ERROR',                                       'Error');
+define('_ERRORMSG',                                    'An error has occurred!');
+define('_BACK',                                                'Go Back');
+define('_NOTLOGGEDIN',                         'Not logged in');
+define('_LOGGEDINAS',                          'Logged in as');
+define('_ADMINHOME',                           'Admin Home');
+define('_NAME',                                                'Name');
+define('_BACKHOME',                                    'Back to Admin Home');
+define('_BADACTION',                           'Non existing action requested');
+define('_MESSAGE',                                     'Message');
+define('_HELP_TT',                                     'Help!');
+define('_YOURSITE',                                    'Your site');
+
+
+define('_POPUP_CLOSE',                         'Close Window');
+
+define('_LOGIN_PLEASE',                                'Please Log in First');
+
+// commentform
+define('_COMMENTFORM_YOUARE',          'You are');
+define('_COMMENTFORM_SUBMIT',          'Add Comment');
+define('_COMMENTFORM_COMMENT',         'Your comment:');
+define('_COMMENTFORM_NAME',                    'Name:');
+define('_COMMENTFORM_REMEMBER',                'Remember Me');
+
+// loginform
+define('_LOGINFORM_NAME',                      'Username:');
+define('_LOGINFORM_PWD',                       'Password:');
+define('_LOGINFORM_YOUARE',                    'Logged in as');
+define('_LOGINFORM_SHARED',                    'Shared Computer');
+
+// member mailform
+define('_MEMBERMAIL_SUBMIT',           'Send Message');
+
+// search form
+define('_SEARCHFORM_SUBMIT',           'Search');
+
+// add item form
+define('_ADD_ADDTO',                           'Add new item to');
+define('_ADD_CREATENEW',                       'Create new item');
+define('_ADD_BODY',                                    'Body');
+define('_ADD_TITLE',                           'Title');
+define('_ADD_MORE',                                    'Extended (optional)');
+define('_ADD_CATEGORY',                                'Category');
+define('_ADD_PREVIEW',                         'Preview');
+define('_ADD_DISABLE_COMMENTS',                'Disable comments?');
+define('_ADD_DRAFTNFUTURE',                    'Draft &amp; Future Items');
+define('_ADD_ADDITEM',                         'Add Item');
+define('_ADD_ADDNOW',                          'Add Now');
+define('_ADD_ADDLATER',                                'Add Later');
+define('_ADD_PLACE_ON',                                'Place on');
+define('_ADD_ADDDRAFT',                                'Add to drafts');
+define('_ADD_NOPASTDATES',                     '(dates and times in the past are NOT valid, the current time will be used in that case)');
+define('_ADD_BOLD_TT',                         'Bold');
+define('_ADD_ITALIC_TT',                       'Italic');
+define('_ADD_HREF_TT',                         'Make Link');
+define('_ADD_MEDIA_TT',                                'Add Media');
+define('_ADD_PREVIEW_TT',                      'Show/Hide Preview');
+define('_ADD_CUT_TT',                          'Cut');
+define('_ADD_COPY_TT',                         'Copy');
+define('_ADD_PASTE_TT',                                'Paste');
+
+
+// edit item form
+define('_EDIT_ITEM',                           'Edit Item');
+define('_EDIT_SUBMIT',                         'Edit Item');
+define('_EDIT_ORIG_AUTHOR',                    'Original author');
+define('_EDIT_BACKTODRAFTS',           'Add back to drafts');
+define('_EDIT_COMMENTSNOTE',           '(note: disabling comments will _not_ hide previously added comments)');
+
+// used on delete screens
+define('_DELETE_CONFIRM',                      'Please confirm deletion');
+define('_DELETE_CONFIRM_BTN',          'Confirm Deletion');
+define('_CONFIRMTXT_ITEM',                     'You\'re about to delete the item following item:');
+define('_CONFIRMTXT_COMMENT',          'You\'re about to delete the following comment:');
+define('_CONFIRMTXT_TEAM1',                    'You\'re about to delete ');
+define('_CONFIRMTXT_TEAM2',                    ' from the teamlist for blog ');
+define('_CONFIRMTXT_BLOG',                     'The blog you are going to delete is: ');
+define('_WARNINGTXT_BLOGDEL',          'Warning! Deleting a blog will delete ALL items of that blog, and all comments. Please confirm to make clear that you are CERTAIN of what you\'re doing!<br />Also, don\'t interrupt Nucleus while removing your blog.');
+define('_CONFIRMTXT_MEMBER',           'You\'re about to delete the following member profile: ');
+define('_CONFIRMTXT_TEMPLATE',         'You\'re about to delete the template named ');
+define('_CONFIRMTXT_SKIN',                     'You\'re about to delete the skin named ');
+define('_CONFIRMTXT_BAN',                      'You\'re about to delete the ban for the ip range');
+define('_CONFIRMTXT_CATEGORY',         'You\'re about to delete the category ');
+
+// some status messages
+define('_DELETED_ITEM',                                'Item Deleted');
+define('_DELETED_MEMBER',                      'Member Deleted');
+define('_DELETED_COMMENT',                     'Comment Deleted');
+define('_DELETED_BLOG',                                'Blog Deleted');
+define('_DELETED_CATEGORY',                    'Category Deleted');
+define('_ITEM_MOVED',                          'Item Moved');
+define('_ITEM_ADDED',                          'Item Added');
+define('_COMMENT_UPDATED',                     'Comment updated');
+define('_SKIN_UPDATED',                                'Skin data has been saved');
+define('_TEMPLATE_UPDATED',                    'Template data has been saved');
+
+// errors
+define('_ERROR_COMMENT_LONGWORD',      'Please don\'t use words of lengths higher than 90 in your comments');
+define('_ERROR_COMMENT_NOCOMMENT',     'Please enter a comment');
+define('_ERROR_COMMENT_NOUSERNAME',    'Bad username');
+define('_ERROR_COMMENT_TOOLONG',       'Your comments are too long (max. 5000 chars)');
+define('_ERROR_COMMENTS_DISABLED',     'Comments for this blog are currently disabled.');
+define('_ERROR_COMMENTS_NONPUBLIC',    'You must be logged in as a member to add comment to this blog');
+define('_ERROR_COMMENTS_MEMBERNICK','The name you want to use to post comments is in use by a site member. Choose something else.');
+define('_ERROR_SKIN',                          'Skin error');
+define('_ERROR_ITEMCLOSED',                    'This item is closed, it\'s not possible to add new comments to it or to vote on it');
+define('_ERROR_NOSUCHITEM',                    'No such item exists');
+define('_ERROR_NOSUCHBLOG',                    'No such blog');
+define('_ERROR_NOSUCHSKIN',                    'No such skin');
+define('_ERROR_NOSUCHMEMBER',          'No such member');
+define('_ERROR_NOTONTEAM',                     'You\'re not on the teamlist of this weblog.');
+define('_ERROR_BADDESTBLOG',           'Destination blog does not exist');
+define('_ERROR_NOTONDESTTEAM',         'Cannot move item, since you\'re not on the teamlist of the destination blog');
+define('_ERROR_NOEMPTYITEMS',          'Cannot add empty items!');
+define('_ERROR_BADMAILADDRESS',                'Email address is not valid');
+define('_ERROR_BADNOTIFY',                     'One or more of the given notify addresses is not a valid email address');
+define('_ERROR_BADNAME',                       'Name is not valid (only a-z and 0-9 allowed, no spaces at start/end)');
+define('_ERROR_NICKNAMEINUSE',         'Another member is already using that nickname');
+define('_ERROR_PASSWORDMISMATCH',      'Passwords must match');
+define('_ERROR_PASSWORDTOOSHORT',      'Password should be at least 6 characters');
+define('_ERROR_PASSWORDMISSING',       'Password cannot be empty');
+define('_ERROR_REALNAMEMISSING',       'You must enter a real name');
+define('_ERROR_ATLEASTONEADMIN',       'There should always be at least one super-admin that can login to the admin area.');
+define('_ERROR_ATLEASTONEBLOGADMIN','Performing this action would leave your weblog unmaintainable. Please make sure there is always at least one admin.');
+define('_ERROR_ALREADYONTEAM',         'You can\'t add a member that is already on the team');
+define('_ERROR_BADSHORTBLOGNAME',      'The short blog name should only contain a-z and 0-9, without spaces');
+define('_ERROR_DUPSHORTBLOGNAME',      'Another blog already has the chosen short name. These names should be unique');
+define('_ERROR_UPDATEFILE',                    'Cannot get write access to the update-file. Make sure the file permissions are set ok (try chmodding it to 666). Also note that the location is relative to the admin-area directory, so you might want to use an absolute path (something like /your/path/to/nucleus/)');
+define('_ERROR_DELDEFBLOG',                    'Cannot delete the default blog');
+define('_ERROR_DELETEMEMBER',          'This member cannot be deleted, probably because he/she is the author of item(s)');
+define('_ERROR_BADTEMPLATENAME',       'Invalid name for template, use only a-z and 0-9, without spaces');
+define('_ERROR_DUPTEMPLATENAME',       'Another template with this name already exists');
+define('_ERROR_BADSKINNAME',           'Invalid name for skin (only a-z, 0-9 are allowed, no spaces)');
+define('_ERROR_DUPSKINNAME',           'Another skin with this name already exists');
+define('_ERROR_DEFAULTSKIN',           'There must at all times be a skin named "default"');
+define('_ERROR_SKINDEFDELETE',         'Cannot delete skin since it is the default skin for the following weblog: ');
+define('_ERROR_DISALLOWED',                    'Sorry, you\'re not allowed to perform this action');
+define('_ERROR_DELETEBAN',                     'Error while trying to delete ban (ban does not exist)');
+define('_ERROR_ADDBAN',                                'Error while trying to add ban. Ban might not have been added correctly in all your blogs.');
+define('_ERROR_BADACTION',                     'Required action does not exist');
+define('_ERROR_MEMBERMAILDISABLED',    'Member to Member mail messages are disabled');
+define('_ERROR_MEMBERCREATEDISABLED','Creation of member accounts is disabled');
+define('_ERROR_INCORRECTEMAIL',                'Incorrect mail address');
+define('_ERROR_VOTEDBEFORE',           'You have already voted for this item');
+define('_ERROR_BANNED1',                       'Cannot perform action since you (ip range ');
+define('_ERROR_BANNED2',                       ') are banned from doing so. The message was: \'');
+define('_ERROR_BANNED3',                       '\'');
+define('_ERROR_LOGINNEEDED',           'You must be logged in in order to perform this action');
+define('_ERROR_CONNECT',                       'Connect Error');
+define('_ERROR_FILE_TOO_BIG',          'File is too big!');
+define('_ERROR_BADFILETYPE',           'Sorry, this filetype is not allowed');
+define('_ERROR_BADREQUEST',                    'Bad upload request');
+define('_ERROR_DISALLOWEDUPLOAD',      'You are not on any weblogs teamlist. Hence, you are not allowed to upload files');
+define('_ERROR_BADPERMISSIONS',                'File/Dir permissions are not set correctly');
+define('_ERROR_UPLOADMOVEP',           'Error while moving uploaded file');
+define('_ERROR_UPLOADCOPY',                    'Error while copying file');
+define('_ERROR_UPLOADDUPLICATE',       'Another file with that name already exists. Try to rename it before uploading.');
+define('_ERROR_LOGINDISALLOWED',       'Sorry, you\'re not allowed to log in to the admin area. You can log in as another user, though');
+define('_ERROR_DBCONNECT',                     'Could not connect to mySQL server');
+define('_ERROR_DBSELECT',                      'Could not select the nucleus database.');
+define('_ERROR_NOSUCHLANGUAGE',                'No such language file exists');
+define('_ERROR_NOSUCHCATEGORY',                'No such category exists');
+define('_ERROR_DELETELASTCATEGORY',    'There must at least be one category');
+define('_ERROR_DELETEDEFCATEGORY',     'Cannot delete default category');
+define('_ERROR_BADCATEGORYNAME',       'Bad category name');
+define('_ERROR_DUPCATEGORYNAME',       'Another category with this name already exists');
+
+// some warnings (used for mediadir setting)
+define('_WARNING_NOTADIR',                     'Warning: Current value is not a directory!');
+define('_WARNING_NOTREADABLE',         'Warning: Current value is a non-readable directory!');
+define('_WARNING_NOTWRITABLE',         'Warning: Current value is NOT a writable directory!');
+
+// media and upload
+define('_MEDIA_UPLOADLINK',                    'Upload a new file');
+define('_MEDIA_MODIFIED',                      'modified');
+define('_MEDIA_FILENAME',                      'filename');
+define('_MEDIA_DIMENSIONS',                    'dimensions');
+define('_MEDIA_INLINE',                                'Inline');
+define('_MEDIA_POPUP',                         'Popup');
+define('_UPLOAD_TITLE',                                'Choose File');
+define('_UPLOAD_MSG',                          'Select the file you want to upload below, and hit the \'Upload\' button.');
+define('_UPLOAD_BUTTON',                       'Upload');
+
+// some status messages
+//define('_MSG_ACCOUNTCREATED',                'Account created, password will be sent through email');
+//define('_MSG_PASSWORDSENT',                  'Password has been sent by e-mail.');
+define('_MSG_LOGINAGAIN',                      'You\'ll need to login again, because your info changed');
+define('_MSG_SETTINGSCHANGED',         'Settings Changed');
+define('_MSG_ADMINCHANGED',                    'Admin Changed');
+define('_MSG_NEWBLOG',                         'New Blog Created');
+define('_MSG_ACTIONLOGCLEARED',                'Action Log Cleared');
+
+// actionlog in admin area
+define('_ACTIONLOG_DISALLOWED',                'Disallowed action: ');
+define('_ACTIONLOG_PWDREMINDERSENT','New password sent for ');
+define('_ACTIONLOG_TITLE',                     'Action Log');
+define('_ACTIONLOG_CLEAR_TITLE',       'Clear Action Log');
+define('_ACTIONLOG_CLEAR_TEXT',                'Clear action log now');
+
+// team management
+define('_TEAM_TITLE',                          'Manage team for blog ');
+define('_TEAM_CURRENT',                                'Current team');
+define('_TEAM_ADDNEW',                         'Add new member to team');
+define('_TEAM_CHOOSEMEMBER',           'Choose member');
+define('_TEAM_ADMIN',                          'Admin privileges? ');
+define('_TEAM_ADD',                                    'Add to team');
+define('_TEAM_ADD_BTN',                                'Add to team');
+
+// blogsettings
+define('_EBLOG_TITLE',                         'Edit Blog Settings');
+define('_EBLOG_TEAM_TITLE',                    'Edit Team');
+define('_EBLOG_TEAM_TEXT',                     'Click here to edit your team...');
+define('_EBLOG_SETTINGS_TITLE',                'Blog settings');
+define('_EBLOG_NAME',                          'Blog Name');
+define('_EBLOG_SHORTNAME',                     'Short Blog Name');
+define('_EBLOG_SHORTNAME_EXTRA',       '<br />(should only contain a-z and no spaces)');
+define('_EBLOG_DESC',                          'Blog Description');
+define('_EBLOG_URL',                           'URL');
+define('_EBLOG_DEFSKIN',                       'Default Skin');
+define('_EBLOG_DEFCAT',                                'Default Category');
+define('_EBLOG_LINEBREAKS',                    'Convert line breaks');
+define('_EBLOG_DISABLECOMMENTS',       'Comments enabled?<br /><small>(Disabling comments means that adding comments is not possible.)</small>');
+define('_EBLOG_ANONYMOUS',                     'Allow comments by non-members?');
+define('_EBLOG_NOTIFY',                                'Notify Address(es) (use ; as separator)');
+define('_EBLOG_NOTIFY_ON',                     'Notify on');
+define('_EBLOG_NOTIFY_COMMENT',                'New comments');
+define('_EBLOG_NOTIFY_KARMA',          'New karma votes');
+define('_EBLOG_NOTIFY_ITEM',           'New weblog items');
+define('_EBLOG_PING',                          'Ping Weblogs.com on update?');
+define('_EBLOG_MAXCOMMENTS',           'Max Amount of comments');
+define('_EBLOG_UPDATE',                                'Update file');
+define('_EBLOG_OFFSET',                                'Time Offset');
+define('_EBLOG_STIME',                         'Current server time is');
+define('_EBLOG_BTIME',                         'Current blog time is');
+define('_EBLOG_CHANGE',                                'Change Settings');
+define('_EBLOG_CHANGE_BTN',                    'Change Settings');
+define('_EBLOG_ADMIN',                         'Blog Admin');
+define('_EBLOG_ADMIN_MSG',                     'You will be assigned admin privileges');
+define('_EBLOG_CREATE_TITLE',          'Create new weblog');
+define('_EBLOG_CREATE_TEXT',           'Fill out the form below to create a new weblog. <br /><br /> <b>Note:</b> Only the necessary options are listed. If you want to set extra options, enter the blogsettings page after creating the weblog.');
+define('_EBLOG_CREATE',                                'Create!');
+define('_EBLOG_CREATE_BTN',                    'Create Weblog');
+define('_EBLOG_CAT_TITLE',                     'Categories');
+define('_EBLOG_CAT_NAME',                      'Category Name');
+define('_EBLOG_CAT_DESC',                      'Category Description');
+define('_EBLOG_CAT_CREATE',                    'Create New Category');
+define('_EBLOG_CAT_UPDATE',                    'Update Category');
+define('_EBLOG_CAT_UPDATE_BTN',                'Update Category');
+
+// templates
+define('_TEMPLATE_TITLE',                      'Edit Templates');
+define('_TEMPLATE_AVAILABLE_TITLE',    'Available Templates');
+define('_TEMPLATE_NEW_TITLE',          'New Template');
+define('_TEMPLATE_NAME',                       'Template Name');
+define('_TEMPLATE_DESC',                       'Template Description');
+define('_TEMPLATE_CREATE',                     'Create Template');
+define('_TEMPLATE_CREATE_BTN',         'Create Template');
+define('_TEMPLATE_EDIT_TITLE',         'Edit Template');
+define('_TEMPLATE_BACK',                       'Back to Template Overview');
+define('_TEMPLATE_EDIT_MSG',           'Not all template parts are needed, leave empty those that are not needed.');
+define('_TEMPLATE_SETTINGS',           'Template Settings');
+define('_TEMPLATE_ITEMS',                      'Items');
+define('_TEMPLATE_ITEMHEADER',         'Item Header');
+define('_TEMPLATE_ITEMBODY',           'Item Body');
+define('_TEMPLATE_ITEMFOOTER',         'Item Footer');
+define('_TEMPLATE_MORELINK',           'Link to extended entry');
+define('_TEMPLATE_NEW',                                'Indication of new item');
+define('_TEMPLATE_COMMENTS_ANY',       'Comments (if any)');
+define('_TEMPLATE_CHEADER',                    'Comments Header');
+define('_TEMPLATE_CBODY',                      'Comments Body');
+define('_TEMPLATE_CFOOTER',                    'Comments Footer');
+define('_TEMPLATE_CONE',                       'One Comment');
+define('_TEMPLATE_CMANY',                      'Two (or more) Comments');
+define('_TEMPLATE_CMORE',                      'Comments Read More');
+define('_TEMPLATE_CMEXTRA',                    'Member Extra');
+define('_TEMPLATE_COMMENTS_NONE',      'Comments (if none)');
+define('_TEMPLATE_CNONE',                      'No Comments');
+define('_TEMPLATE_COMMENTS_TOOMUCH','Comments (if any, but too much to show inline)');
+define('_TEMPLATE_CTOOMUCH',           'Too Much Comments');
+define('_TEMPLATE_ARCHIVELIST',                'Archive Lists');
+define('_TEMPLATE_AHEADER',                    'Archive List Header');
+define('_TEMPLATE_AITEM',                      'Archive List Item');
+define('_TEMPLATE_AFOOTER',                    'Archive List Footer');
+define('_TEMPLATE_DATETIME',           'Date and Time');
+define('_TEMPLATE_DHEADER',                    'Date Header');
+define('_TEMPLATE_DFOOTER',                    'Date Footer');
+define('_TEMPLATE_DFORMAT',                    'Date Format');
+define('_TEMPLATE_TFORMAT',                    'Time Format');
+define('_TEMPLATE_LOCALE',                     'Locale');
+define('_TEMPLATE_IMAGE',                      'Image popups');
+define('_TEMPLATE_PCODE',                      'Popup Link Code');
+define('_TEMPLATE_ICODE',                      'Inline Image Code');
+define('_TEMPLATE_MCODE',                      'Media Object Link Code');
+define('_TEMPLATE_SEARCH',                     'Search');
+define('_TEMPLATE_SHIGHLIGHT',         'Highlight');
+define('_TEMPLATE_SNOTFOUND',          'Nothing found in search');
+define('_TEMPLATE_UPDATE',                     'Update');
+define('_TEMPLATE_UPDATE_BTN',         'Update Template');
+define('_TEMPLATE_RESET_BTN',          'Reset Data');
+define('_TEMPLATE_CATEGORYLIST',       'Category Lists');
+define('_TEMPLATE_CATHEADER',          'Category List Header');
+define('_TEMPLATE_CATITEM',                    'Category List Item');
+define('_TEMPLATE_CATFOOTER',          'Category List Footer');
+
+// skins
+define('_SKIN_EDIT_TITLE',                     'Edit Skins');
+define('_SKIN_AVAILABLE_TITLE',                'Available Skins');
+define('_SKIN_NEW_TITLE',                      'New Skin');
+define('_SKIN_NAME',                           'Name');
+define('_SKIN_DESC',                           'Description');
+define('_SKIN_TYPE',                           'Content Type');
+define('_SKIN_CREATE',                         'Create');
+define('_SKIN_CREATE_BTN',                     'Create Skin');
+define('_SKIN_EDITONE_TITLE',          'Edit skin');
+define('_SKIN_BACK',                           'Back to Skin Overview');
+define('_SKIN_PARTS_TITLE',                    'Skin Parts');
+define('_SKIN_PARTS_MSG',                      'Not all types are needed for each skin. Leave empty those you don\'t need. Choose the skin type to edit below:');
+define('_SKIN_PART_MAIN',                      'Main Index');
+define('_SKIN_PART_ITEM',                      'Item Pages');
+define('_SKIN_PART_ALIST',                     'Archive List');
+define('_SKIN_PART_ARCHIVE',           'Archive');
+define('_SKIN_PART_SEARCH',                    'Search');
+define('_SKIN_PART_ERROR',                     'Errors');
+define('_SKIN_PART_MEMBER',                    'Member Details');
+define('_SKIN_PART_POPUP',                     'Image Popups');
+define('_SKIN_GENSETTINGS_TITLE',      'General Settings');
+define('_SKIN_CHANGE',                         'Change');
+define('_SKIN_CHANGE_BTN',                     'Change these settings');
+define('_SKIN_UPDATE_BTN',                     'Update Skin');
+define('_SKIN_RESET_BTN',                      'Reset Data');
+define('_SKIN_EDITPART_TITLE',         'Edit Skin');
+define('_SKIN_GOBACK',                         'Go Back');
+define('_SKIN_ALLOWEDVARS',                    'Allowed Variables (click for info):');
+
+// global settings
+define('_SETTINGS_TITLE',                      'General Settings');
+define('_SETTINGS_SUB_GENERAL',                'General Settings');
+define('_SETTINGS_DEFBLOG',                    'Default Blog');
+define('_SETTINGS_ADMINMAIL',          'Administrator Email');
+define('_SETTINGS_SITENAME',           'Site Name');
+define('_SETTINGS_SITEURL',                    'URL of Site (should end with a slash)');
+define('_SETTINGS_ADMINURL',           'URL of Admin Area (should end with a slash)');
+define('_SETTINGS_DIRS',                       'Nucleus Directories');
+define('_SETTINGS_MEDIADIR',           'Media Directory');
+define('_SETTINGS_SEECONFIGPHP',       '(see config.php)');
+define('_SETTINGS_MEDIAURL',           'Media URL (should end with a slash)');
+define('_SETTINGS_ALLOWUPLOAD',                'Allow File Upload?');
+define('_SETTINGS_ALLOWUPLOADTYPES','Allow File Types for Upload');
+define('_SETTINGS_CHANGELOGIN',                'Allow Members to Change Login/Password');
+define('_SETTINGS_COOKIES_TITLE',      'Cookie Settings');
+define('_SETTINGS_COOKIELIFE',         'Login Cookie Lifetime');
+define('_SETTINGS_COOKIESESSION',      'Session Cookies');
+define('_SETTINGS_COOKIEMONTH',                'Lifetime of a Month');
+define('_SETTINGS_COOKIEPATH',         'Cookie Path (advanced)');
+define('_SETTINGS_COOKIEDOMAIN',       'Cookie Domain (advanced)');
+define('_SETTINGS_COOKIESECURE',       'Secure Cookie (advanced)');
+define('_SETTINGS_LASTVISIT',          'Save Last Visit Cookies');
+define('_SETTINGS_ALLOWCREATE',                'Allow Visitors to Create a Member Account');
+define('_SETTINGS_NEWLOGIN',           'Login Allowed for User-Created accounts');
+define('_SETTINGS_NEWLOGIN2',          '(only goes for newly created accounts)');
+define('_SETTINGS_MEMBERMSGS',         'Allow Member-2-Member Service');
+define('_SETTINGS_LANGUAGE',           'Default Language');
+define('_SETTINGS_DISABLESITE',                'Disable Site');
+define('_SETTINGS_DBLOGIN',                    'mySQL Login &amp; Database');
+define('_SETTINGS_UPDATE',                     'Update Settings');
+define('_SETTINGS_UPDATE_BTN',         'Update Settings');
+define('_SETTINGS_DISABLEJS',          'Disable JavaScript Toolbar');
+define('_SETTINGS_MEDIA',                      'Media/Upload Settings');
+define('_SETTINGS_MEDIAPREFIX',                'Prefix uploaded files with date');
+define('_SETTINGS_MEMBERS',                    'Member Settings');
+
+// bans
+define('_BAN_TITLE',                           'Ban List for');
+define('_BAN_NONE',                                    'No bans for this weblog');
+define('_BAN_NEW_TITLE',                       'Add New Ban');
+define('_BAN_NEW_TEXT',                                'Add a new ban now');
+define('_BAN_REMOVE_TITLE',                    'Remove Ban');
+define('_BAN_IPRANGE',                         'IP Range');
+define('_BAN_BLOGS',                           'Which blogs?');
+define('_BAN_DELETE_TITLE',                    'Delete Ban');
+define('_BAN_ALLBLOGS',                                'All blogs to which you have admin privileges.');
+define('_BAN_REMOVED_TITLE',           'Ban Removed');
+define('_BAN_REMOVED_TEXT',                    'Ban was removed for the following blogs:');
+define('_BAN_ADD_TITLE',                       'Add Ban');
+define('_BAN_IPRANGE_TEXT',                    'Choose the IP range you want to block below. The less numbers in it, the more addresses will be blocked.');
+define('_BAN_BLOGS_TEXT',                      'You can either select to ban the IP on one blog only, or you can select to block the IP on all blogs where you have administrator privileges. Make your choice below.');
+define('_BAN_REASON_TITLE',                    'Reason');
+define('_BAN_REASON_TEXT',                     'You can provide a reason for the ban, which will be displayed when the IP holder tries to add another comment or tries to cast a karma vote. Maximum length is 256 characters.');
+define('_BAN_ADD_BTN',                         'Add Ban');
+
+// LOGIN screen
+define('_LOGIN_MESSAGE',                       'Message');
+define('_LOGIN_NAME',                          'Name');
+define('_LOGIN_PASSWORD',                      'Password');
+define('_LOGIN_SHARED',                                _LOGINFORM_SHARED);
+define('_LOGIN_FORGOT',                                'Forgot your password?');
+
+// membermanagement
+define('_MEMBERS_TITLE',                       'Member Management');
+define('_MEMBERS_CURRENT',                     'Current Members');
+define('_MEMBERS_NEW',                         'New Member');
+define('_MEMBERS_DISPLAY',                     'Display Name');
+define('_MEMBERS_DISPLAY_INFO',                '(This is the name you use to login)');
+define('_MEMBERS_REALNAME',                    'Real Name');
+define('_MEMBERS_PWD',                         'Password');
+define('_MEMBERS_REPPWD',                      'Repeat Password');
+define('_MEMBERS_EMAIL',                       'Email address');
+define('_MEMBERS_EMAIL_EDIT',          '(When you change the email address, a new password will be automatically sent out to that address)');
+define('_MEMBERS_URL',                         'Website Address (URL)');
+define('_MEMBERS_SUPERADMIN',          'Administrator privileges');
+define('_MEMBERS_CANLOGIN',                    'Can login to admin area');
+define('_MEMBERS_NOTES',                       'Notes');
+define('_MEMBERS_NEW_BTN',                     'Add Member');
+define('_MEMBERS_EDIT',                                'Edit Member');
+define('_MEMBERS_EDIT_BTN',                    'Change Settings');
+define('_MEMBERS_BACKTOOVERVIEW',      'Back to Member Overview');
+define('_MEMBERS_DEFLANG',                     'Language');
+define('_MEMBERS_USESITELANG',         '- use site settings -');
+
+// List of blogs (TT = tooltip)
+define('_BLOGLIST_TT_VISIT',           'Visit Site');
+define('_BLOGLIST_ADD',                                'Add Item');
+define('_BLOGLIST_TT_ADD',                     'Add a new item to this weblog');
+define('_BLOGLIST_EDIT',                       'Edit/Delete Items');
+define('_BLOGLIST_TT_EDIT',                    '');
+define('_BLOGLIST_BMLET',                      'Bookmarklet');
+define('_BLOGLIST_TT_BMLET',           '');
+define('_BLOGLIST_SETTINGS',           'Settings');
+define('_BLOGLIST_TT_SETTINGS',                'Edit settings or manage team');
+define('_BLOGLIST_BANS',                       'Bans');
+define('_BLOGLIST_TT_BANS',                    'View, add or remove banned IPs');
+define('_BLOGLIST_DELETE',                     'Delete All');
+define('_BLOGLIST_TT_DELETE',          'Delete this weblog');
+
+// OVERVIEW screen
+define('_OVERVIEW_YRBLOGS',                    'Your weblogs');
+define('_OVERVIEW_YRDRAFTS',           'Your drafts');
+define('_OVERVIEW_YRSETTINGS',         'Your settings');
+define('_OVERVIEW_GSETTINGS',          'General settings');
+define('_OVERVIEW_NOBLOGS',                    'You\'re not on any weblogs teamlist');
+define('_OVERVIEW_NODRAFTS',           'No drafts');
+define('_OVERVIEW_EDITSETTINGS',       'Edit Your Settings...');
+define('_OVERVIEW_BROWSEITEMS',                'Browse your items...');
+define('_OVERVIEW_BROWSECOMM',         'Browse your comments...');
+define('_OVERVIEW_VIEWLOG',                    'View Action Log...');
+define('_OVERVIEW_MEMBERS',                    'Manage Members...');
+define('_OVERVIEW_NEWLOG',                     'Create New Weblog...');
+define('_OVERVIEW_SETTINGS',           'Edit Settings...');
+define('_OVERVIEW_TEMPLATES',          'Edit Templates...');
+define('_OVERVIEW_SKINS',                      'Edit Skins...');
+define('_OVERVIEW_BACKUP',                     'Backup/Restore...');
+
+// ITEMLIST
+define('_ITEMLIST_BLOG',                       'Items for blog');
+define('_ITEMLIST_YOUR',                       'Your items');
+
+// Comments
+define('_COMMENTS',                                    'Comments');
+define('_NOCOMMENTS',                          'No comments for this item');
+define('_COMMENTS_YOUR',                       'Your Comments');
+define('_NOCOMMENTS_YOUR',                     'You didn\'t write any comments');
+
+// LISTS (general)
+define('_LISTS_NOMORE',                                'No more results, or no results at all');
+define('_LISTS_PREV',                          'Previous');
+define('_LISTS_NEXT',                          'Next');
+define('_LISTS_SEARCH',                                'Search');
+define('_LISTS_CHANGE',                                'Change');
+define('_LISTS_PERPAGE',                       'items/page');
+define('_LISTS_ACTIONS',                       'Actions');
+define('_LISTS_DELETE',                                'Delete');
+define('_LISTS_EDIT',                          'Edit');
+define('_LISTS_MOVE',                          'Move');
+define('_LISTS_CLONE',                         'Clone');
+define('_LISTS_TITLE',                         'Title');
+define('_LISTS_BLOG',                          'Blog');
+define('_LISTS_NAME',                          'Name');
+define('_LISTS_DESC',                          'Description');
+define('_LISTS_TIME',                          'Time');
+define('_LISTS_COMMENTS',                      'Comments');
+define('_LISTS_TYPE',                          'Type');
+
+
+// member list
+define('_LIST_MEMBER_NAME',                    'Display Name');
+define('_LIST_MEMBER_RNAME',           'Real Name');
+define('_LIST_MEMBER_ADMIN',           'Super-admin? ');
+define('_LIST_MEMBER_LOGIN',           'Can login? ');
+define('_LIST_MEMBER_URL',                     'Website');
+
+// banlist
+define('_LIST_BAN_IPRANGE',                    'IP Range');
+define('_LIST_BAN_REASON',                     'Reason');
+
+// actionlist
+define('_LIST_ACTION_MSG',                     'Message');
+
+// commentlist
+define('_LIST_COMMENT_BANIP',          'Ban IP');
+define('_LIST_COMMENT_WHO',                    'Author');
+define('_LIST_COMMENT',                                'Comment');
+define('_LIST_COMMENT_HOST',           'Host');
+
+// itemlist
+define('_LIST_ITEM_INFO',                      'Info');
+define('_LIST_ITEM_CONTENT',           'Title and Text');
+
+
+// teamlist
+define('_LIST_TEAM_ADMIN',                     'Admin ');
+define('_LIST_TEAM_CHADMIN',           'Change Admin');
+
+// edit comments
+define('_EDITC_TITLE',                         'Edit Comments');
+define('_EDITC_WHO',                           'Author');
+define('_EDITC_HOST',                          'From Where?');
+define('_EDITC_WHEN',                          'When?');
+define('_EDITC_TEXT',                          'Text');
+define('_EDITC_EDIT',                          'Edit Comment');
+define('_EDITC_MEMBER',                                'member');
+define('_EDITC_NONMEMBER',                     'non member');
+
+// move item
+define('_MOVE_TITLE',                          'Move to which blog?');
+define('_MOVE_BTN',                                    'Move Item');
+
+?>
index 50f792c..3974d80 100755 (executable)
@@ -1,11 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>Nothing Here</title>\r
-</head>\r
-<body>\r
-\r
-<h1>Nothing to see here</h1>\r
-\r
-</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
 </html>
\ No newline at end of file
index 6d76112..5d7bbeb 100755 (executable)
-<?php\r
-\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * Actions that can be called via action.php\r
- *\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: ACTION.php,v 1.3 2005-08-13 07:30:01 kimitake Exp $\r
- * $NucleusJP: ACTION.php,v 1.2 2005/03/12 06:19:04 kimitake Exp $\r
- */\r
-class ACTION\r
-{\r
-       function ACTION()\r
-       {\r
-       \r
-       }\r
-       \r
-       function doAction($action) \r
-       {\r
-               switch($action) {\r
-                       case 'addcomment':\r
-                               return $this->addComment();\r
-                               break;\r
-                       case 'sendmessage':\r
-                               return $this->sendMessage();\r
-                               break;\r
-                       case 'createaccount':\r
-                               return $this->createAccount();\r
-                               break;          \r
-                       case 'forgotpassword':\r
-                               return $this->forgotPassword();\r
-                               break;\r
-                       case 'votepositive':\r
-                               return $this->doKarma('pos');\r
-                               break;\r
-                       case 'votenegative':\r
-                               return $this->doKarma('neg');\r
-                               break;\r
-                       case 'plugin':\r
-                               return $this->callPlugin();\r
-                               break;\r
-                       default:\r
-                               doError(_ERROR_BADACTION);\r
-               }\r
-       }\r
-       \r
-       function addComment() {\r
-               global $CONF, $errormessage, $manager;\r
-\r
-               $post['itemid'] =       intPostVar('itemid');\r
-               $post['user'] =         postVar('user');\r
-               $post['userid'] =       postVar('userid');\r
-               $post['body'] =         postVar('body');\r
-\r
-               // set cookies when required\r
-               $remember = intPostVar('remember');\r
-               if ($remember == 1) {\r
-                       $lifetime = time()+2592000;\r
-                       setcookie($CONF['CookiePrefix'] . 'comment_user',$post['user'],$lifetime,'/','',0);\r
-                       setcookie($CONF['CookiePrefix'] . 'comment_userid', $post['userid'],$lifetime,'/','',0);\r
-               }\r
-\r
-               $comments = new COMMENTS($post['itemid']);\r
-\r
-               $blogid = getBlogIDFromItemID($post['itemid']);\r
-               $this->checkban($blogid);\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               // note: PreAddComment and PostAddComment gets called somewhere inside addComment\r
-               $errormessage = $comments->addComment($blog->getCorrectTime(),$post);\r
-\r
-               if ($errormessage == '1') {             \r
-                       // redirect when adding comments succeeded\r
-                       if (postVar('url')) {\r
-                               redirect(postVar('url'));\r
-                       } else {\r
-                               $url = createItemLink($post['itemid']);\r
-                               redirect($url);\r
-                       }\r
-               } else {\r
-                       // else, show error message using default skin for blog\r
-                       return array(\r
-                               'message' => $errormessage,\r
-                               'skinid' => $blog->getDefaultSkin()\r
-                       );\r
-               }\r
-               \r
-               exit;\r
-       }\r
-\r
-       // Sends a message from the current member to the member given as argument\r
-       function sendMessage() {\r
-               global $CONF, $member;\r
-\r
-               $error = $this->validateMessage();\r
-               if ($error != '')\r
-                       return array('message' => $error);\r
-\r
-               if (!$member->isLoggedIn()) {\r
-                       $fromMail = postVar('frommail');\r
-                       $fromName = _MMAIL_FROMANON;\r
-               } else {\r
-                       $fromMail = $member->getEmail();\r
-                       $fromName = $member->getDisplayName();\r
-               }\r
-\r
-               $tomem = new MEMBER();\r
-               $tomem->readFromId(postVar('memberid'));\r
-\r
-               $message  = _MMAIL_MSG . ' ' . $fromName . "\n"\r
-                         . '(' . _MMAIL_FROMNUC. ' ' . $CONF['IndexURL'] .") \n\n"\r
-                         . _MMAIL_MAIL . " \n\n"\r
-                         . postVar('message');\r
-               $message .= getMailFooter();\r
-\r
-               $title = _MMAIL_TITLE . ' ' . $fromName;\r
-               mb_language('ja');\r
-               mb_internal_encoding(_CHARSET);\r
-               @mb_send_mail($tomem->getEmail(), $title, $message, "From: ". $fromMail);\r
-\r
-               if (postVar('url')) {\r
-                       redirect(postVar('url'));\r
-               } else {\r
-                       $CONF['MemberURL'] = $CONF['IndexURL'];\r
-                       if ($CONF['URLMode'] == 'pathinfo')\r
-                               $url = createMemberLink($tomem->getID());\r
-                       else\r
-                               $url = $CONF['IndexURL'] . createMemberLink($tomem->getID());\r
-                       redirect($url);\r
-               }\r
-               \r
-               exit;\r
-\r
-       }\r
-       \r
-       function validateMessage() {\r
-               global $CONF, $member, $manager;\r
-\r
-               if (!$CONF['AllowMemberMail']) \r
-                       return _ERROR_MEMBERMAILDISABLED;\r
-\r
-               if (!$member->isLoggedIn() && !$CONF['NonmemberMail'])\r
-                       return _ERROR_DISALLOWED;\r
-\r
-               if (!$member->isLoggedIn() && (!isValidMailAddress(postVar('frommail'))))\r
-                       return _ERROR_BADMAILADDRESS;\r
-                       \r
-               // let plugins do verification (any plugin which thinks the comment is invalid\r
-               // can change 'error' to something other than '')\r
-               $result = '';\r
-               $manager->notify('ValidateForm', array('type' => 'membermail', 'error' => &$result));\r
-               \r
-               return $result;\r
-               \r
-       }\r
-\r
-       // creates a new user account\r
-       function createAccount() {\r
-               global $CONF, $manager;\r
-\r
-               if (!$CONF['AllowMemberCreate']) \r
-                       doError(_ERROR_MEMBERCREATEDISABLED);\r
-\r
-               // even though the member can not log in, set some random initial password. One never knows.\r
-               srand((double)microtime()*1000000);\r
-               $initialPwd = md5(uniqid(rand(), true));\r
-\r
-               // create member (non admin/can not login/no notes/random string as password)\r
-               $r = MEMBER::create(postVar('name'), postVar('realname'), $initialPwd, postVar('email'), postVar('url'), 0, 0, '');\r
-               \r
-               if ($r != 1)\r
-                       doError($r);\r
-                       \r
-               // send message containing password.\r
-               $newmem = new MEMBER();\r
-               $newmem->readFromName(postVar('name'));\r
-               $newmem->sendActivationLink('register');\r
-\r
-               $manager->notify('PostRegister',array('member' => &$newmem));           \r
-\r
-               if (postVar('desturl')) {\r
-                       redirect(postVar('desturl'));\r
-               } else {\r
-                       header ("Content-Type: text/html; charset="._CHARSET);\r
-                       echo _MSG_ACTIVATION_SENT;\r
-               }\r
-               \r
-               exit;\r
-       }\r
-\r
-       // sends a new password \r
-       function forgotPassword() {\r
-               $membername = trim(postVar('name'));\r
-\r
-               if (!MEMBER::exists($membername))\r
-                       doError(_ERROR_NOSUCHMEMBER);\r
-               $mem = MEMBER::createFromName($membername);\r
-\r
-               if (!$mem->canLogin())\r
-                       doError(_ERROR_NOLOGON_NOACTIVATE);\r
-\r
-               // check if e-mail address is correct\r
-               if (!($mem->getEmail() == postVar('email')))\r
-                       doError(_ERROR_INCORRECTEMAIL);\r
-\r
-               // send activation link\r
-               $mem->sendActivationLink('forgot');\r
-\r
-               if (postVar('url')) {\r
-                       redirect(postVar('url'));\r
-               } else {\r
-                       header ("Content-Type: text/html; charset="._CHARSET);\r
-                       echo _MSG_ACTIVATION_SENT;\r
-               }\r
-               \r
-               exit;\r
-       }\r
-\r
-       // handle karma votes\r
-       function doKarma($type) {\r
-               global $itemid, $member, $CONF, $manager;\r
-\r
-               // check if itemid exists\r
-               if (!$manager->existsItem($itemid,0,0)) \r
-                       doError(_ERROR_NOSUCHITEM);\r
-\r
-               $blogid = getBlogIDFromItemID($itemid);\r
-               $this->checkban($blogid);       \r
-\r
-               $karma =& $manager->getKarma($itemid);\r
-\r
-               // check if not already voted\r
-               if (!$karma->isVoteAllowed(serverVar('REMOTE_ADDR'))) \r
-                       doError(_ERROR_VOTEDBEFORE);            \r
-\r
-               // check if item does allow voting\r
-               $item =& $manager->getItem($itemid,0,0);\r
-               if ($item['closed'])\r
-                       doError(_ERROR_ITEMCLOSED);\r
-\r
-               switch($type) {\r
-                       case 'pos': \r
-                               $karma->votePositive();\r
-                               break;\r
-                       case 'neg':\r
-                               $karma->voteNegative();\r
-                               break;\r
-               }\r
-\r
-               $blogid = getBlogIDFromItemID($itemid);\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               // send email to notification address, if any\r
-               if ($blog->getNotifyAddress() && $blog->notifyOnVote()) {\r
-\r
-                       $mailto_msg = _NOTIFY_KV_MSG . ' ' . $itemid . "\n";\r
-                       $mailto_msg .= $CONF['IndexURL'] . 'index.php?itemid=' . $itemid . "\n\n";\r
-                       if ($member->isLoggedIn()) {\r
-                               $mailto_msg .= _NOTIFY_MEMBER . ' ' . $member->getDisplayName() . ' (ID=' . $member->getID() . ")\n";\r
-                       }\r
-                       $mailto_msg .= _NOTIFY_IP . ' ' . serverVar('REMOTE_ADDR') . "\n";\r
-                       $mailto_msg .= _NOTIFY_HOST . ' ' .  gethostbyaddr(serverVar('REMOTE_ADDR'))  . "\n";\r
-                       $mailto_msg .= _NOTIFY_VOTE . "\n " . $type . "\n";\r
-                       $mailto_msg .= getMailFooter();\r
-\r
-                       $mailto_title = _NOTIFY_KV_TITLE . ' ' . strip_tags($item['title']) . ' (' . $itemid . ')';\r
-\r
-                       $frommail = $member->getNotifyFromMailAddress();\r
-\r
-                       $notify = new NOTIFICATION($blog->getNotifyAddress());\r
-                       $notify->notify($mailto_title, $mailto_msg , $frommail);\r
-               }\r
-\r
-\r
-               $refererUrl = serverVar('HTTP_REFERER');\r
-               if ($refererUrl)\r
-                       $url = $refererUrl;\r
-               else\r
-                       $url = $CONF['IndexURL'] . 'index.php?itemid=' . $itemid;\r
-\r
-               redirect($url); \r
-               exit;\r
-       }\r
-\r
-       /**\r
-         * Calls a plugin action\r
-         */\r
-       function callPlugin() {\r
-               global $manager;\r
-\r
-               $pluginName = 'NP_' . requestVar('name');\r
-               $actionType = requestVar('type');\r
-\r
-               // 1: check if plugin is installed\r
-               if (!$manager->pluginInstalled($pluginName))\r
-                       doError(_ERROR_NOSUCHPLUGIN);\r
-\r
-               // 2: call plugin\r
-               $pluginObject =& $manager->getPlugin($pluginName);\r
-               if ($pluginObject)\r
-                       $error = $pluginObject->doAction($actionType);\r
-               else\r
-                       $error = 'Could not load plugin (see actionlog)';\r
-\r
-               // doAction returns error when:\r
-               // - an error occurred (duh)\r
-               // - no actions are allowed (doAction is not implemented)\r
-               if ($error)\r
-                       doError($error);\r
-                       \r
-               exit;\r
-\r
-       }\r
-\r
-       function checkban($blogid) {\r
-               // check if banned\r
-               $ban = BAN::isBanned($blogid, serverVar('REMOTE_ADDR'));\r
-               if ($ban != 0) {\r
-                       doError(_ERROR_BANNED1 . $ban->iprange . _ERROR_BANNED2 . $ban->message . _ERROR_BANNED3);\r
-               }\r
-\r
-       }\r
-\r
-\r
-}\r
-\r
-?>\r
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2005 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Actions that can be called via action.php
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2005 The Nucleus Group
+ * @version $Id: ACTION.php,v 1.4 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: ACTION.php,v 1.3 2005/08/13 07:30:01 kimitake Exp $
+ */
+class ACTION
+{
+       function ACTION()
+       {
+       
+       }
+       
+       function doAction($action) 
+       {
+               switch($action) {
+                       case 'addcomment':
+                               return $this->addComment();
+                               break;
+                       case 'sendmessage':
+                               return $this->sendMessage();
+                               break;
+                       case 'createaccount':
+                               return $this->createAccount();
+                               break;          
+                       case 'forgotpassword':
+                               return $this->forgotPassword();
+                               break;
+                       case 'votepositive':
+                               return $this->doKarma('pos');
+                               break;
+                       case 'votenegative':
+                               return $this->doKarma('neg');
+                               break;
+                       case 'plugin':
+                               return $this->callPlugin();
+                               break;
+                       default:
+                               doError(_ERROR_BADACTION);
+               }
+       }
+       
+       function addComment() {
+               global $CONF, $errormessage, $manager;
+
+               $post['itemid'] =       intPostVar('itemid');
+               $post['user'] =         postVar('user');
+               $post['userid'] =       postVar('userid');
+               $post['body'] =         postVar('body');
+
+               // set cookies when required
+               $remember = intPostVar('remember');
+               if ($remember == 1) {
+                       $lifetime = time()+2592000;
+                       setcookie($CONF['CookiePrefix'] . 'comment_user',$post['user'],$lifetime,'/','',0);
+                       setcookie($CONF['CookiePrefix'] . 'comment_userid', $post['userid'],$lifetime,'/','',0);
+               }
+
+               $comments = new COMMENTS($post['itemid']);
+
+               $blogid = getBlogIDFromItemID($post['itemid']);
+               $this->checkban($blogid);
+               $blog =& $manager->getBlog($blogid);
+
+               // note: PreAddComment and PostAddComment gets called somewhere inside addComment
+               $errormessage = $comments->addComment($blog->getCorrectTime(),$post);
+
+               if ($errormessage == '1') {             
+                       // redirect when adding comments succeeded
+                       if (postVar('url')) {
+                               redirect(postVar('url'));
+                       } else {
+                               $url = createItemLink($post['itemid']);
+                               redirect($url);
+                       }
+               } else {
+                       // else, show error message using default skin for blog
+                       return array(
+                               'message' => $errormessage,
+                               'skinid' => $blog->getDefaultSkin()
+                       );
+               }
+               
+               exit;
+       }
+
+       // Sends a message from the current member to the member given as argument
+       function sendMessage() {
+               global $CONF, $member;
+
+               $error = $this->validateMessage();
+               if ($error != '')
+                       return array('message' => $error);
+
+               if (!$member->isLoggedIn()) {
+                       $fromMail = postVar('frommail');
+                       $fromName = _MMAIL_FROMANON;
+               } else {
+                       $fromMail = $member->getEmail();
+                       $fromName = $member->getDisplayName();
+               }
+
+               $tomem = new MEMBER();
+               $tomem->readFromId(postVar('memberid'));
+
+               $message  = _MMAIL_MSG . ' ' . $fromName . "\n"
+                         . '(' . _MMAIL_FROMNUC. ' ' . $CONF['IndexURL'] .") \n\n"
+                         . _MMAIL_MAIL . " \n\n"
+                         . postVar('message');
+               $message .= getMailFooter();
+
+               $title = _MMAIL_TITLE . ' ' . $fromName;
+               mb_language('ja');
+               mb_internal_encoding(_CHARSET);
+               @mb_send_mail($tomem->getEmail(), $title, $message, "From: ". $fromMail);
+
+               if (postVar('url')) {
+                       redirect(postVar('url'));
+               } else {
+                       $CONF['MemberURL'] = $CONF['IndexURL'];
+                       if ($CONF['URLMode'] == 'pathinfo')
+                       {
+                               $url = createLink('member', array('memberid' => $tomem->getID(), 'name' => $tomem->getDisplayName()));
+                       }
+                       else
+                       {
+                               $url = $CONF['IndexURL'] . createMemberLink($tomem->getID());
+                       }
+                       redirect($url);
+               }
+               
+               exit;
+
+       }
+       
+       function validateMessage() {
+               global $CONF, $member, $manager;
+
+               if (!$CONF['AllowMemberMail']) 
+                       return _ERROR_MEMBERMAILDISABLED;
+
+               if (!$member->isLoggedIn() && !$CONF['NonmemberMail'])
+                       return _ERROR_DISALLOWED;
+
+               if (!$member->isLoggedIn() && (!isValidMailAddress(postVar('frommail'))))
+                       return _ERROR_BADMAILADDRESS;
+                       
+               // let plugins do verification (any plugin which thinks the comment is invalid
+               // can change 'error' to something other than '')
+               $result = '';
+               $manager->notify('ValidateForm', array('type' => 'membermail', 'error' => &$result));
+               
+               return $result;
+               
+       }
+
+       // creates a new user account
+       function createAccount() {
+               global $CONF, $manager;
+
+               if (!$CONF['AllowMemberCreate']) 
+                       doError(_ERROR_MEMBERCREATEDISABLED);
+
+               // even though the member can not log in, set some random initial password. One never knows.
+               srand((double)microtime()*1000000);
+               $initialPwd = md5(uniqid(rand(), true));
+
+               // create member (non admin/can not login/no notes/random string as password)
+               $r = MEMBER::create(postVar('name'), postVar('realname'), $initialPwd, postVar('email'), postVar('url'), 0, 0, '');
+               
+               if ($r != 1)
+                       doError($r);
+                       
+               // send message containing password.
+               $newmem = new MEMBER();
+               $newmem->readFromName(postVar('name'));
+               $newmem->sendActivationLink('register');
+
+               $manager->notify('PostRegister',array('member' => &$newmem));           
+
+               if (postVar('desturl')) {
+                       redirect(postVar('desturl'));
+               } else {
+                       header ("Content-Type: text/html; charset="._CHARSET);
+                       echo _MSG_ACTIVATION_SENT;
+               }
+               
+               exit;
+       }
+
+       // sends a new password 
+       function forgotPassword() {
+               $membername = trim(postVar('name'));
+
+               if (!MEMBER::exists($membername))
+                       doError(_ERROR_NOSUCHMEMBER);
+               $mem = MEMBER::createFromName($membername);
+
+               if (!$mem->canLogin())
+                       doError(_ERROR_NOLOGON_NOACTIVATE);
+
+               // check if e-mail address is correct
+               if (!($mem->getEmail() == postVar('email')))
+                       doError(_ERROR_INCORRECTEMAIL);
+
+               // send activation link
+               $mem->sendActivationLink('forgot');
+
+               if (postVar('url')) {
+                       redirect(postVar('url'));
+               } else {
+                       header ("Content-Type: text/html; charset="._CHARSET);
+                       echo _MSG_ACTIVATION_SENT;
+               }
+               
+               exit;
+       }
+
+       // handle karma votes
+       function doKarma($type) {
+               global $itemid, $member, $CONF, $manager;
+
+               // check if itemid exists
+               if (!$manager->existsItem($itemid,0,0)) 
+                       doError(_ERROR_NOSUCHITEM);
+
+               $blogid = getBlogIDFromItemID($itemid);
+               $this->checkban($blogid);       
+
+               $karma =& $manager->getKarma($itemid);
+
+               // check if not already voted
+               if (!$karma->isVoteAllowed(serverVar('REMOTE_ADDR'))) 
+                       doError(_ERROR_VOTEDBEFORE);            
+
+               // check if item does allow voting
+               $item =& $manager->getItem($itemid,0,0);
+               if ($item['closed'])
+                       doError(_ERROR_ITEMCLOSED);
+
+               switch($type) {
+                       case 'pos': 
+                               $karma->votePositive();
+                               break;
+                       case 'neg':
+                               $karma->voteNegative();
+                               break;
+               }
+
+               $blogid = getBlogIDFromItemID($itemid);
+               $blog =& $manager->getBlog($blogid);
+
+               // send email to notification address, if any
+               if ($blog->getNotifyAddress() && $blog->notifyOnVote()) {
+
+                       $mailto_msg = _NOTIFY_KV_MSG . ' ' . $itemid . "\n";
+                       $mailto_msg .= $CONF['IndexURL'] . 'index.php?itemid=' . $itemid . "\n\n";
+                       if ($member->isLoggedIn()) {
+                               $mailto_msg .= _NOTIFY_MEMBER . ' ' . $member->getDisplayName() . ' (ID=' . $member->getID() . ")\n";
+                       }
+                       $mailto_msg .= _NOTIFY_IP . ' ' . serverVar('REMOTE_ADDR') . "\n";
+                       $mailto_msg .= _NOTIFY_HOST . ' ' .  gethostbyaddr(serverVar('REMOTE_ADDR'))  . "\n";
+                       $mailto_msg .= _NOTIFY_VOTE . "\n " . $type . "\n";
+                       $mailto_msg .= getMailFooter();
+
+                       $mailto_title = _NOTIFY_KV_TITLE . ' ' . strip_tags($item['title']) . ' (' . $itemid . ')';
+
+                       $frommail = $member->getNotifyFromMailAddress();
+
+                       $notify = new NOTIFICATION($blog->getNotifyAddress());
+                       $notify->notify($mailto_title, $mailto_msg , $frommail);
+               }
+
+
+               $refererUrl = serverVar('HTTP_REFERER');
+               if ($refererUrl)
+                       $url = $refererUrl;
+               else
+                       $url = $CONF['IndexURL'] . 'index.php?itemid=' . $itemid;
+
+               redirect($url); 
+               exit;
+       }
+
+       /**
+         * Calls a plugin action
+         */
+       function callPlugin() {
+               global $manager;
+
+               $pluginName = 'NP_' . requestVar('name');
+               $actionType = requestVar('type');
+
+               // 1: check if plugin is installed
+               if (!$manager->pluginInstalled($pluginName))
+                       doError(_ERROR_NOSUCHPLUGIN);
+
+               // 2: call plugin
+               $pluginObject =& $manager->getPlugin($pluginName);
+               if ($pluginObject)
+                       $error = $pluginObject->doAction($actionType);
+               else
+                       $error = 'Could not load plugin (see actionlog)';
+
+               // doAction returns error when:
+               // - an error occurred (duh)
+               // - no actions are allowed (doAction is not implemented)
+               if ($error)
+                       doError($error);
+                       
+               exit;
+
+       }
+
+       function checkban($blogid) {
+               // check if banned
+               $ban = BAN::isBanned($blogid, serverVar('REMOTE_ADDR'));
+               if ($ban != 0) {
+                       doError(_ERROR_BANNED1 . $ban->iprange . _ERROR_BANNED2 . $ban->message . _ERROR_BANNED3);
+               }
+
+       }
+
+
+}
+
+?>
diff --git a/nucleus/libs/ACTIONS.php b/nucleus/libs/ACTIONS.php
new file mode 100644 (file)
index 0000000..06f508e
--- /dev/null
@@ -0,0 +1,1091 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/*
+ * This class contains the functions that get called by using
+ * the special tags in the skins
+ *
+ * The allowed tags for a type of skinpart are defined by the
+ * SKIN::getAllowedActionsForType($type) method
+ */
+class ACTIONS extends BaseActions {
+
+       // part of the skin currently being parsed ('index', 'item', 'archive',
+       // 'archivelist', 'member', 'search', 'error', 'imagepopup')
+       var $skintype;
+
+       // contains an assoc array with parameters that need to be included when
+       // generating links to items/archives/... (e.g. catid)
+       var $linkparams;
+
+       // reference to the skin object for which a part is being parsed
+       var $skin;
+
+
+       // used when including templated forms from the include/ dir. The $formdata var
+       // contains the values to fill out in there (assoc array name -> value)
+       var $formdata;
+
+
+       // filled out with the number of displayed items after calling one of the
+
+       // (other)blog/(other)searchresults skinvars.
+
+       var $amountfound;
+
+       function ACTIONS($type) {
+               // call constructor of superclass first
+               $this->BaseActions();
+
+               $this->skintype = $type;
+
+               global $catid;
+               if ($catid)
+                       $this->linkparams = array('catid' => $catid);
+       }
+
+       function setSkin(&$skin) {
+               $this->skin =& $skin;
+       }
+
+       function setParser(&$parser) {
+               $this->parser =& $parser;
+       }
+
+       /*
+               Forms get parsedincluded now, using an extra <formdata> skinvar
+       */
+       function doForm($filename) {
+               global $DIR_NUCLEUS;
+               array_push($this->parser->actions,'formdata','text','callback','errordiv','ticket');
+               $oldIncludeMode = PARSER::getProperty('IncludeMode');
+               $oldIncludePrefix = PARSER::getProperty('IncludePrefix');
+               PARSER::setProperty('IncludeMode','normal');
+               PARSER::setProperty('IncludePrefix','');
+               $this->parse_parsedinclude($DIR_NUCLEUS . 'forms/' . $filename . '.template');
+               PARSER::setProperty('IncludeMode',$oldIncludeMode);
+               PARSER::setProperty('IncludePrefix',$oldIncludePrefix);
+               array_pop($this->parser->actions);              // errordiv
+               array_pop($this->parser->actions);              // callback
+               array_pop($this->parser->actions);              // text
+               array_pop($this->parser->actions);              // formdata
+               array_pop($this->parser->actions);              // ticket
+       }
+
+       function parse_ticket() {
+               global $manager;
+               $manager->addTicketHidden();
+       }
+
+       function parse_formdata($what) {
+               echo $this->formdata[$what];
+       }
+       function parse_text($which) {
+               // constant($which) only available from 4.0.4 :(
+               if (defined($which)) {
+                       eval("echo $which;");
+               }
+       }
+       function parse_callback($eventName, $type)
+       {
+               global $manager;
+               $manager->notify($eventName, array('type' => $type));
+       }
+       function parse_errordiv() {
+               global $errormessage;
+               if ($errormessage)
+                       echo '<div class="error">', htmlspecialchars($errormessage),'</div>';
+       }
+
+       function parse_skinname() {
+               echo $this->skin->getName();
+       }
+
+       /**
+        * Checks conditions for if statements
+        *
+        * @param string $field type of <%if%>
+        * @param string $name property of field
+        * @param string $value value of property
+        */
+       function checkCondition($field, $name='', $value = '') {
+               global $catid, $blog, $member, $itemidnext, $itemidprev, $manager;
+
+               $condition = 0;
+               switch($field) {
+                       case 'category':
+                               $condition = ($blog && $this->_ifCategory($name,$value));
+                               break;
+                       case 'blogsetting':
+                               $condition = ($blog && ($blog->getSetting($name) == $value));
+                               break;
+                       case 'loggedin':
+                               $condition = $member->isLoggedIn();
+                               break;
+                       case 'onteam':
+                               $condition = $member->isLoggedIn() && $this->_ifOnTeam($name);
+                               break;
+                       case 'admin':
+                               $condition = $member->isLoggedIn() && $this->_ifAdmin($name);
+                               break;
+                       case 'nextitem':
+                               $condition = ($itemidnext != '');
+                               break;
+                       case 'previtem':
+                               $condition = ($itemidprev != '');
+                               break;
+                       case 'skintype':
+                               $condition = ($name == $this->skintype);
+                               break;
+                       case 'hasplugin':
+                               $condition = $this->_ifHasPlugin($name, $value);
+                               break;
+                       default:
+                               $condition = $manager->pluginInstalled('NP_' . $field) && $this->_ifPlugin($field, $name, $value);
+                               break;
+               }
+               return $condition;
+       }
+
+       /**
+        *      hasplugin,PlugName
+        *         -> checks if plugin exists
+        *      hasplugin,PlugName,OptionName
+        *         -> checks if the option OptionName from plugin PlugName is not set to 'no'
+        *      hasplugin,PlugName,OptionName=value
+        *         -> checks if the option OptionName from plugin PlugName is set to value
+        */
+       function _ifHasPlugin($name, $value) {
+               global $manager;
+               $condition = false;
+               // (pluginInstalled method won't write a message in the actionlog on failure)
+               if ($manager->pluginInstalled('NP_'.$name)) {
+                       $plugin =& $manager->getPlugin('NP_' . $name);
+                       if ($plugin != NULL) {
+                               if ($value == "") {
+                                       $condition = true;
+                               } else {
+                                       list($name2, $value2) = explode('=', $value, 2);
+                                       if ($value2 == "" && $plugin->getOption($name2) != 'no') {
+                                               $condition = true;
+                                       } else if ($plugin->getOption($name2) == $value2) {
+                                               $condition = true;
+                                       }
+                               }
+                       }
+               }
+               return $condition;
+       }
+
+       function _ifPlugin($name, $key = '', $value = '') {
+               global $manager;
+
+               $plugin =& $manager->getPlugin('NP_' . $name);
+               if (!$plugin) return;
+
+               $params = func_get_args();
+               array_shift($params);
+
+               return call_user_func_array(array(&$plugin, 'doIf'), $params);
+       }
+
+       function _ifCategory($name = '', $value='') {
+               global $blog, $catid;
+
+               // when no parameter is defined, just check if a category is selected
+               if (($name != 'catname' && $name != 'catid') || ($value == ''))
+                       return $blog->isValidCategory($catid);
+
+               // check category name
+               if ($name == 'catname') {
+                       $value = $blog->getCategoryIdFromName($value);
+                       if ($value == $catid)
+                               return $blog->isValidCategory($catid);
+               }
+
+               // check category id
+               if (($name == 'catid') && ($value == $catid))
+                       return $blog->isValidCategory($catid);
+
+               return false;
+       }
+
+       function _ifOnTeam($blogName = '') {
+               global $blog, $member, $manager;
+
+               // when no blog found
+               if (($blogName == '') && (!is_object($blog)))
+                       return 0;
+
+               // explicit blog selection
+               if ($blogName != '')
+                       $blogid = getBlogIDFromName($blogName);
+
+               if (($blogName == '') || !$manager->existsBlogID($blogid))
+                       // use current blog
+                       $blogid = $blog->getID();
+
+               return $member->teamRights($blogid);
+       }
+
+       function _ifAdmin($blogName = '') {
+               global $blog, $member, $manager;
+
+               // when no blog found
+               if (($blogName == '') && (!is_object($blog)))
+                       return 0;
+
+               // explicit blog selection
+               if ($blogName != '')
+                       $blogid = getBlogIDFromName($blogName);
+
+               if (($blogName == '') || !$manager->existsBlogID($blogid))
+                       // use current blog
+                       $blogid = $blog->getID();
+
+               return $member->isBlogAdmin($blogid);
+       }
+
+       function parse_ifcat($text = '') {
+               if ($text == '') {
+                       // new behaviour
+                       $this->parse_if('category');
+               } else {
+                       // old behaviour
+                       global $catid, $blog;
+                       if ($blog->isValidCategory($catid))
+                               echo $text;
+               }
+       }
+
+       // a link to the today page (depending on selected blog, etc...)
+       function parse_todaylink($linktext = '') {
+               global $blog, $CONF;
+               if ($blog)
+                       echo $this->_link(createBlogidLink($blog->getID(),$this->linkparams), $linktext);
+               else
+                       echo $this->_link($CONF['SiteUrl'], $linktext);
+       }
+
+       // a link to the archives for the current blog (or for default blog)
+       function parse_archivelink($linktext = '') {
+               global $blog, $CONF;
+               if ($blog)
+                       echo $this->_link(createArchiveListLink($blog->getID(),$this->linkparams), $linktext);
+               else
+                       echo $this->_link(createArchiveListLink(), $linktext);
+       }
+
+       // include itemid of prev item
+       function parse_previtem() {
+               global $itemidprev;
+               echo $itemidprev;
+       }
+
+       // include itemtitle of prev item
+       function parse_previtemtitle($format = '') {
+               global $itemtitleprev;
+
+               switch ($format) {
+                       case 'xml':
+                               echo stringToXML ($itemtitleprev);
+                               break;
+                       case 'attribute':
+                               echo stringToAttribute ($itemtitleprev);
+                               break;
+                       case 'raw':
+                               echo $itemtitleprev;
+                               break;
+                       default:
+                               echo htmlspecialchars($itemtitleprev);
+                               break;
+               }
+       }
+
+       // include itemid of next item
+       function parse_nextitem() {
+               global $itemidnext;
+               echo $itemidnext;
+       }
+
+       // include itemtitle of next item
+       function parse_nextitemtitle($format = '') {
+               global $itemtitlenext;
+
+               switch ($format) {
+                       case 'xml':
+                               echo stringToXML ($itemtitlenext);
+                               break;
+                       case 'attribute':
+                               echo stringToAttribute ($itemtitlenext);
+                               break;
+                       case 'raw':
+                               echo $itemtitlenext;
+                               break;
+                       default:
+                               echo htmlspecialchars($itemtitlenext);
+                               break;
+               }
+       }
+
+       function parse_prevarchive() {
+               global $archiveprev;
+               echo $archiveprev;
+       }
+
+       function parse_nextarchive() {
+               global $archivenext;
+               echo $archivenext;
+       }
+
+       function parse_archivetype() {
+               global $archivetype;
+               echo $archivetype;
+       }
+
+       function parse_prevlink($linktext = '', $amount = 10) {
+               global $itemidprev, $archiveprev, $startpos;
+
+               if ($this->skintype == 'item')
+                       $this->_itemlink($itemidprev, $linktext);
+               else if ($this->skintype == 'search' || $this->skintype == 'index')
+                       $this->_searchlink($amount, $startpos, 'prev', $linktext);
+               else
+                       $this->_archivelink($archiveprev, $linktext);
+       }
+
+       function parse_nextlink($linktext = '', $amount = 10) {
+               global $itemidnext, $archivenext, $startpos;
+               if ($this->skintype == 'item')
+                       $this->_itemlink($itemidnext, $linktext);
+               else if ($this->skintype == 'search' || $this->skintype == 'index')
+                       $this->_searchlink($amount, $startpos, 'next', $linktext);
+               else
+                       $this->_archivelink($archivenext, $linktext);
+       }
+
+       /**
+        * returns either
+        *              - a raw link (html/xml encoded) when no linktext is provided
+        *              - a (x)html <a href... link when a text is present (text htmlencoded)
+        */
+       function _link($url, $linktext = '')
+       {
+               $u = htmlspecialchars($url);
+               $u = preg_replace("/&amp;amp;/",'&amp;',$u); // fix URLs that already had encoded ampersands
+               if ($linktext != '')
+                       $l = '<a href="' . $u .'">'.htmlspecialchars($linktext).'</a>';
+               else
+                       $l = $u;
+               return $l;
+       }
+
+       /**
+        * Outputs a next/prev link
+        *
+        * @param $maxresults
+        *              The maximum amount of items shown per page (e.g. 10)
+        * @param $startpos
+        *              Current start position (requestVar('startpos'))
+        * @param $direction
+        *              either 'prev' or 'next'
+        * @param $linktext
+        *              When present, the output will be a full <a href...> link. When empty,
+        *              only a raw link will be outputted
+        */
+       function _searchlink($maxresults, $startpos, $direction, $linktext = '') {
+               global $CONF, $blog, $query, $amount;
+               // TODO: Move request uri to linkparams. this is ugly. sorry for that.
+               $startpos       = intval($startpos);            // will be 0 when empty.
+               $parsed         = parse_url(serverVar('REQUEST_URI'));
+               $parsed         = $parsed['query'];
+               $url            = '';
+
+               switch ($direction) {
+                       case 'prev':
+                               if ( intval($startpos) - intval($maxresults) >= 0) {
+                                       $startpos       = intval($startpos) - intval($maxresults);
+                                       $url            = $CONF['SearchURL'].'?'.alterQueryStr($parsed,'startpos',$startpos);
+                               }
+                               break;
+                       case 'next':
+                               $iAmountOnPage = $this->amountfound;
+                               if ($iAmountOnPage == 0)
+                               {
+                                       // [%nextlink%] or [%prevlink%] probably called before [%blog%] or [%searchresults%]
+                                       // try a count query
+                                       switch ($this->skintype)
+                                       {
+                                               case 'index':
+                                                       $sqlquery = $blog->getSqlBlog('', 'count');
+                                                       break;
+                                               case 'search':
+                                                       $sqlquery = $blog->getSqlSearch($query, $amount, $unused_highlight, 'count');
+                                                       break;
+                                       }
+                                       if ($sqlquery)
+                                               $iAmountOnPage = intval(quickQuery($sqlquery)) - intval($startpos);
+                               }
+                               if (intval($iAmountOnPage) >= intval($maxresults)) {
+                                       $startpos       = intval($startpos) + intval($maxresults);
+                                       $url            = $CONF['SearchURL'].'?'.alterQueryStr($parsed,'startpos',$startpos);
+                               }
+                               break;
+                       default:
+                               break;
+               } // switch($direction)
+
+               if ($url != '')
+                       echo $this->_link($url, $linktext);
+       }
+
+       function _itemlink($id, $linktext = '') {
+               global $CONF;
+               if ($id)
+                       echo $this->_link(createItemLink($id, $this->linkparams), $linktext);
+               else
+                       $this->parse_todaylink($linktext);
+       }
+
+       function _archivelink($id, $linktext = '') {
+               global $CONF, $blog;
+               if ($id)
+                       echo $this->_link(createArchiveLink($blog->getID(), $id, $this->linkparams), $linktext);
+               else
+                       $this->parse_todaylink($linktext);
+       }
+
+
+       function parse_itemlink($linktext = '') {
+               global $itemid;
+               $this->_itemlink($itemid, $linktext);
+       }
+
+       /**
+         * %archivedate(locale,date format)%
+         */
+       function parse_archivedate($locale = '-def-') {
+               global $archive;
+
+               if ($locale == '-def-')
+                       setlocale(LC_TIME,$template['LOCALE']);
+               else
+                       setlocale(LC_TIME,$locale);
+
+               // get archive date
+               sscanf($archive,'%d-%d-%d',$y,$m,$d);
+
+               // get format
+               $args = func_get_args();
+               // format can be spread over multiple parameters
+               if (sizeof($args) > 1) {
+                       // take away locale
+                       array_shift($args);
+                       // implode
+                       $format=implode(',',$args);
+               } elseif ($d == 0) {
+                       $format = '%B %Y';
+               } else {
+                       $format = '%d %B %Y';
+               }
+
+               echo strftime($format,mktime(0,0,0,$m,$d?$d:1,$y));
+       }
+
+       function parse_blog($template, $amount = 10, $category = '') {
+               global $blog, $startpos;
+
+               list($limit, $offset) = sscanf($amount, '%d(%d)');
+               $this->_setBlogCategory($blog, $category);
+               $this->_preBlogContent('blog',$blog);
+               $this->amountfound = $blog->readLog($template, $limit, $offset, $startpos);
+               $this->_postBlogContent('blog',$blog);
+       }
+
+       function parse_otherblog($blogname, $template, $amount = 10, $category = '') {
+               global $manager;
+
+               list($limit, $offset) = sscanf($amount, '%d(%d)');
+
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherblog',$b);
+               $this->amountfound = $b->readLog($template, $limit, $offset);
+               $this->_postBlogContent('otherblog',$b);
+       }
+
+       // include one item (no comments)
+       function parse_item($template) {
+               global $blog, $itemid, $highlight;
+               $this->_setBlogCategory($blog, '');     // need this to select default category
+               $this->_preBlogContent('item',$blog);
+               $r = $blog->showOneitem($itemid, $template, $highlight);
+               if ($r == 0)
+                       echo _ERROR_NOSUCHITEM;
+               $this->_postBlogContent('item',$blog);
+       }
+
+       function parse_itemid() {
+               global $itemid;
+               echo $itemid;
+       }
+
+
+       // include comments for one item
+       function parse_comments($template) {
+               global $itemid, $manager, $blog, $highlight;
+               $template =& $manager->getTemplate($template);
+
+               // create parser object & action handler
+               $actions =& new ITEMACTIONS($blog);
+               $parser =& new PARSER($actions->getDefinedActions(),$actions);
+               $actions->setTemplate($template);
+               $actions->setParser($parser);
+               $item = ITEM::getitem($itemid, 0, 0);
+               $actions->setCurrentItem($item);
+
+               $comments =& new COMMENTS($itemid);
+               $comments->setItemActions($actions);
+               $comments->showComments($template, -1, 1, $highlight);  // shows ALL comments
+       }
+
+       function parse_archive($template, $category = '') {
+               global $blog, $archive;
+               // can be used with either yyyy-mm or yyyy-mm-dd
+               sscanf($archive,'%d-%d-%d',$y,$m,$d);
+               $this->_setBlogCategory($blog, $category);
+               $this->_preBlogContent('achive',$blog);
+               $blog->showArchive($template, $y, $m, $d);
+               $this->_postBlogContent('achive',$blog);
+
+       }
+
+       function parse_otherarchive($blogname, $template, $category = '') {
+               global $archive, $manager;
+               sscanf($archive,'%d-%d-%d',$y,$m,$d);
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherachive',$b);
+               $b->showArchive($template, $y, $m, $d);
+               $this->_postBlogContent('otherachive',$b);
+       }
+
+       function parse_archivelist($template, $category = 'all', $limit = 0) {
+               global $blog;
+               if ($category == 'all') $category = '';
+               $this->_preBlogContent('archivelist',$blog);
+               $this->_setBlogCategory($blog, $category);
+               $blog->showArchiveList($template, 'month', $limit);
+               $this->_postBlogContent('archivelist',$blog);
+       }
+
+       function parse_archivedaylist($template, $category = 'all', $limit = 0) {
+               global $blog;
+               if ($category == 'all') $category = '';
+               $this->_preBlogContent('archivelist',$blog);
+               $this->_setBlogCategory($blog, $category);
+               $blog->showArchiveList($template, 'day', $limit);
+               $this->_postBlogContent('archivelist',$blog);
+       }
+
+       function parse_itemtitle($format = '') {
+               global $manager, $itemid;
+               $item =& $manager->getItem($itemid,0,0);
+
+               switch ($format) {
+                       case 'xml':
+                               echo stringToXML ($item['title']);
+                               break;
+                       case 'attribute':
+                               echo stringToAttribute ($item['title']);
+                               break;
+                       case 'raw':
+                               echo $item['title'];
+                               break;
+                       default:
+                               echo htmlspecialchars(strip_tags($item['title']));
+                               break;
+               }
+       }
+
+       function parse_categorylist($template, $blogname = '') {
+               global $blog, $manager;
+
+               if ($blogname == '') {
+                       $this->_preBlogContent('categorylist',$blog);
+                       $blog->showCategoryList($template);
+                       $this->_postBlogContent('categorylist',$blog);
+               } else {
+                       $b =& $manager->getBlog(getBlogIDFromName($blogname));
+                       $this->_preBlogContent('categorylist',$b);
+                       $b->showCategoryList($template);
+                       $this->_postBlogContent('categorylist',$b);
+               }
+       }
+
+       function parse_category($type = 'name') {
+               global $catid, $blog;
+               if (!$blog->isValidCategory($catid))
+                       return;
+
+               switch($type) {
+                       case 'name':
+                               echo $blog->getCategoryName($catid);
+                               break;
+                       case 'desc':
+                               echo $blog->getCategoryDesc($catid);
+                               break;
+                       case 'id':
+                               echo $catid;
+                               break;
+               }
+       }
+
+       function parse_otherarchivelist($blogname, $template, $category = 'all', $limit = 0) {
+               global $manager;
+               if ($category == 'all') $category = '';
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherarchivelist',$b);
+               $b->showArchiveList($template, 'month', $limit);
+               $this->_postBlogContent('otherarchivelist',$b);
+       }
+
+       function parse_otherarchivedaylist($blogname, $template, $category = 'all', $limit = 0) {
+               global $manager;
+               if ($category == 'all') $category = '';
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherarchivelist',$b);
+               $b->showArchiveList($template, 'day', $limit);
+               $this->_postBlogContent('otherarchivelist',$b);
+       }
+
+       function parse_searchresults($template, $maxresults = 50 ) {
+               global $blog, $query, $amount, $startpos;
+
+               $this->_setBlogCategory($blog, '');     // need this to select default category
+               $this->_preBlogContent('searchresults',$blog);
+               $this->amountfound = $blog->search($query, $template, $amount, $maxresults, $startpos);
+               $this->_postBlogContent('searchresults',$blog);
+       }
+
+       function parse_othersearchresults($blogname, $template, $maxresults = 50) {
+               global $query, $amount, $manager, $startpos;
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, '');        // need this to select default category
+               $this->_preBlogContent('othersearchresults',$b);
+               $b->search($query, $template, $amount, $maxresults, $startpos);
+               $this->_postBlogContent('othersearchresults',$b);
+       }
+
+       // includes the search query
+       function parse_query() {
+               global $query;
+               echo htmlspecialchars($query);
+       }
+
+       // include nucleus versionnumber
+       function parse_version() {
+               global $nucleus;
+               echo 'Nucleus CMS ' . $nucleus['version'];
+       }
+
+
+       function parse_errormessage() {
+               global $errormessage;
+               echo $errormessage;
+       }
+
+
+       function parse_imagetext() {
+               echo htmlspecialchars(requestVar('imagetext'));
+       }
+
+       function parse_image($what = 'imgtag') {
+               global $CONF;
+
+               $imagetext      = htmlspecialchars(requestVar('imagetext'));
+               $imagepopup = requestVar('imagepopup');
+               $width          = intRequestVar('width');
+               $height         = intRequestVar('height');
+               $fullurl        = htmlspecialchars($CONF['MediaURL'] . $imagepopup);
+
+               switch($what)
+               {
+                       case 'url':
+                               echo $fullurl;
+                               break;
+                       case 'width':
+                               echo $width;
+                               break;
+                       case 'height':
+                               echo $height;
+                               break;
+                       case 'caption':
+                       case 'text':
+                               echo $imagetext;
+                               break;
+                       case 'imgtag':
+                       default:
+                               echo "<img src=\"$fullurl\" width=\"$width\" height=\"$height\" alt=\"$imagetext\" title=\"$imagetext\" />";
+                               break;
+               }
+       }
+
+       // When commentform is not used, to include a hidden field with itemid
+       function parse_vars() {
+               global $itemid;
+               echo '<input type="hidden" name="itemid" value="'.$itemid.'" />';
+       }
+
+       // include a sitevar
+       function parse_sitevar($which) {
+               global $CONF;
+               switch($which) {
+                       case 'url':
+                               echo $CONF['IndexURL'];
+                               break;
+                       case 'name':
+                               echo $CONF['SiteName'];
+                               break;
+                       case 'admin':
+                               echo $CONF['AdminEmail'];
+                               break;
+                       case 'adminurl':
+                               echo $CONF['AdminURL'];
+               }
+       }
+
+       // shortcut for admin url
+       function parse_adminurl() { $this->parse_sitevar('adminurl'); }
+
+       function parse_blogsetting($which) {
+               global $blog;
+               switch($which) {
+                       case 'id':
+                               echo $blog->getID();
+                               break;
+                       case 'url':
+                               echo $blog->getURL();
+                               break;
+                       case 'name':
+                               echo $blog->getName();
+                               break;
+                       case 'desc':
+                               echo $blog->getDescription();
+                               break;
+                       case 'short':
+                               echo $blog->getShortName();
+                               break;
+               }
+       }
+
+       // includes a member info thingie
+       function parse_member($what) {
+               global $memberinfo, $member;
+
+               // 1. only allow the member-details-page specific variables on member pages
+               if ($this->skintype == 'member') {
+
+                       switch($what) {
+                               case 'name':
+                                       echo $memberinfo->getDisplayName();
+                                       break;
+                               case 'realname':
+                                       echo $memberinfo->getRealName();
+                                       break;
+                               case 'notes':
+                                       echo $memberinfo->getNotes();
+                                       break;
+                               case 'url':
+                                       echo $memberinfo->getURL();
+                                       break;
+                               case 'email':
+                                       echo $memberinfo->getEmail();
+                                       break;
+                               case 'id':
+                                       echo $memberinfo->getID();
+                                       break;
+                       }
+               }
+
+               // 2. the next bunch of options is available everywhere, as long as the user is logged in
+               if ($member->isLoggedIn())
+               {
+                       switch($what) {
+                               case 'yourname':
+                                       echo $member->getDisplayName();
+                                       break;
+                               case 'yourrealname':
+                                       echo $member->getRealName();
+                                       break;
+                               case 'yournotes':
+                                       echo $member->getNotes();
+                                       break;
+                               case 'yoururl':
+                                       echo $member->getURL();
+                                       break;
+                               case 'youremail':
+                                       echo $member->getEmail();
+                                       break;
+                               case 'yourid':
+                                       echo $member->getID();
+                                       break;
+                       }
+               }
+
+       }
+
+       function parse_preview($template) {
+               global $blog, $CONF, $manager;
+
+               $template =& $manager->getTemplate($template);
+               $row['body'] = '<span id="prevbody"></span>';
+               $row['title'] = '<span id="prevtitle"></span>';
+               $row['more'] = '<span id="prevmore"></span>';
+               $row['itemlink'] = '';
+               $row['itemid'] = 0; $row['blogid'] = $blog->getID();
+               echo TEMPLATE::fill($template['ITEM_HEADER'],$row);
+               echo TEMPLATE::fill($template['ITEM'],$row);
+               echo TEMPLATE::fill($template['ITEM_FOOTER'],$row);
+       }
+
+       function parse_additemform() {
+               global $blog, $CONF;
+               $this->formdata = array(
+                       'adminurl' => htmlspecialchars($CONF['AdminURL']),
+                       'catid' => $blog->getDefaultCategory()
+               );
+               $blog->InsertJavaScriptInfo();
+               $this->doForm('additemform');
+       }
+
+       /**
+         * Executes a plugin skinvar
+         *
+         * @param pluginName name of plugin (without the NP_)
+         *
+         * extra parameters can be added
+         */
+       function parse_plugin($pluginName) {
+               global $manager;
+
+               // only continue when the plugin is really installed
+               if (!$manager->pluginInstalled('NP_' . $pluginName))
+                       return;
+
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);
+               if (!$plugin) return;
+
+               // get arguments
+               $params = func_get_args();
+
+               // remove plugin name
+               array_shift($params);
+
+               // add skin type on front
+               array_unshift($params, $this->skintype);
+
+               call_user_func_array(array(&$plugin,'doSkinVar'), $params);
+       }
+
+
+       function parse_commentform($destinationurl = '') {
+               global $blog, $itemid, $member, $CONF, $manager, $DIR_LIBS, $errormessage;
+
+               // warn when trying to provide a actionurl (used to be a parameter in Nucleus <2.0)
+               if (stristr($destinationurl, 'action.php')) {
+                       $args = func_get_args();
+                       $destinationurl = $args[1];
+                       ACTIONLOG::add(WARNING,'actionurl is not longer a parameter on commentform skinvars. Moved to be a global setting instead.');
+               }
+
+               $actionurl = $CONF['ActionURL'];
+
+               // if item is closed, show message and do nothing
+               $item =& $manager->getItem($itemid,0,0);
+               if ($item['closed'] || !$blog->commentsEnabled()) {
+                       $this->doForm('commentform-closed');
+                       return;
+               }
+
+               if (!$destinationurl)
+               {
+                       $destinationurl = createLink(
+                               'item',
+                               array(
+                                       'itemid' => $itemid,
+                                       'title' => $item['title'],
+                                       'timestamp' => $item['timestamp'],
+                                       'extra' => $this->linkparams
+                               )
+                       );
+
+                       // note: createLink returns an HTML encoded URL
+               } else {
+                       // HTML encode URL
+                       $destinationurl = htmlspecialchars($destinationurl);
+               }
+
+               // values to prefill
+               $user = cookieVar($CONF['CookiePrefix'] .'comment_user');
+               if (!$user) $user = postVar('user');
+               $userid = cookieVar($CONF['CookiePrefix'] .'comment_userid');
+               if (!$userid) $userid = postVar('userid');
+               $email = cookieVar($CONF['CookiePrefix'] .'comment_email');
+               if (!$email) {
+                       $email = postVar('email');
+               }
+               $body = postVar('body');
+
+               $this->formdata = array(
+                       'destinationurl' => $destinationurl,    // url is already HTML encoded
+                       'actionurl' => htmlspecialchars($actionurl),
+                       'itemid' => $itemid,
+                       'user' => htmlspecialchars($user),
+                       'userid' => htmlspecialchars($userid),
+                       'email' => htmlspecialchars($email),
+                       'body' => htmlspecialchars($body),
+                       'membername' => $member->getDisplayName(),
+                       'rememberchecked' => cookieVar($CONF['CookiePrefix'] .'comment_user')?'checked="checked"':''
+               );
+
+               if (!$member->isLoggedIn()) {
+                       $this->doForm('commentform-notloggedin');
+               } else {
+                       $this->doForm('commentform-loggedin');
+               }
+       }
+
+       function parse_loginform() {
+               global $member, $CONF;
+               if (!$member->isLoggedIn()) {
+                       $filename = 'loginform-notloggedin';
+                       $this->formdata = array();
+               } else {
+                       $filename = 'loginform-loggedin';
+                       $this->formdata = array(
+                               'membername' => $member->getDisplayName(),
+                       );
+               }
+               $this->doForm($filename);
+       }
+
+
+       function parse_membermailform($rows = 10, $cols = 40, $desturl = '') {
+               global $member, $CONF, $memberid;
+
+               if ($desturl == '') {
+                       if ($CONF['URLMode'] == 'pathinfo')
+                               $desturl = createMemberLink($memberid);
+                       else
+                               $desturl = $CONF['IndexURL'] . createMemberLink($memberid);
+               }
+
+               $message = postVar('message');
+               $frommail = postVar('frommail');
+
+               $this->formdata = array(
+                       'url' => htmlspecialchars($desturl),
+                       'actionurl' => htmlspecialchars($CONF['ActionURL']),
+                       'memberid' => $memberid,
+                       'rows' => $rows,
+                       'cols' => $cols,
+                       'message' => htmlspecialchars($message),
+                       'frommail' => htmlspecialchars($frommail)
+               );
+               if ($member->isLoggedIn()) {
+                       $this->doForm('membermailform-loggedin');
+               } else if ($CONF['NonmemberMail']) {
+                       $this->doForm('membermailform-notloggedin');
+               } else {
+                       $this->doForm('membermailform-disallowed');
+               }
+
+       }
+
+       function parse_searchform($blogname = '') {
+               global $CONF, $manager, $maxresults;
+               if ($blogname) {
+                       $blog =& $manager->getBlog(getBlogIDFromName($blogname));
+               } else {
+                       global $blog;
+               }
+               // use default blog when no blog is selected
+               $this->formdata = array(
+                       'id' => $blog?$blog->getID():$CONF['DefaultBlog'],
+                       'query' => htmlspecialchars(getVar('query')),
+               );
+               $this->doForm('searchform');
+       }
+
+       function parse_nucleusbutton($imgurl = '',
+                                                                $imgwidth = '85',
+                                                                $imgheight = '31') {
+               global $CONF;
+               if ($imgurl == '') {
+                       $imgurl = $CONF['AdminURL'] . 'nucleus.gif';
+               } else if (PARSER::getProperty('IncludeMode') == 'skindir'){
+                       // when skindit IncludeMode is used: start from skindir
+                       $imgurl = $CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix') . $imgurl;
+               }
+
+               $this->formdata = array(
+                       'imgurl' => $imgurl,
+                       'imgwidth' => $imgwidth,
+                       'imgheight' => $imgheight,
+               );
+               $this->doForm('nucleusbutton');
+       }
+
+       function parse_self() {
+               global $CONF;
+               echo $CONF['Self'];
+       }
+
+       function parse_referer() {
+               echo htmlspecialchars(serverVar('HTTP_REFERER'));
+       }
+
+       function parse_charset() {
+               echo _CHARSET;
+       }
+
+       /**
+         * Helper function that sets the category that a blog will need to use
+         *
+         * @param $blog
+         *             An object of the blog class, passed by reference (we want to make changes to it)
+         * @param $catname
+         *             The name of the category to use
+         */
+       function _setBlogCategory(&$blog, $catname) {
+               global $catid;
+               if ($catname != '')
+                       $blog->setSelectedCategoryByName($catname);
+               else
+                       $blog->setSelectedCategory($catid);
+       }
+
+       function _preBlogContent($type, &$blog) {
+               global $manager;
+               $manager->notify('PreBlogContent',array('blog' => &$blog, 'type' => $type));
+       }
+
+       function _postBlogContent($type, &$blog) {
+               global $manager;
+               $manager->notify('PostBlogContent',array('blog' => &$blog, 'type' => $type));
+       }
+
+}
+?>
index b548c6f..7c10790 100755 (executable)
-<?php\r
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  * The code for the Nucleus admin area\r
-  *\r
-  * $Id: ADMIN.php,v 1.6 2005-08-13 07:28:38 kimitake Exp $\r
-  * $NucleusJP: ADMIN.php,v 1.5 2005/04/19 06:58:03 kimitake Exp $\r
-  */\r
-\r
-class ADMIN {\r
-\r
-       // action currently being executed ($action=xxxx -> action_xxxx method)\r
-       var $action;\r
-\r
-       function ADMIN() {\r
-\r
-       }\r
-\r
-       /**\r
-         * Executes an action\r
-         *\r
-         * @param $action\r
-         *             action to be performed\r
-         */\r
-       function action($action) {\r
-               global $CONF, $manager;\r
-\r
-               // list of action aliases\r
-               $alias = array(\r
-                       'login' => 'overview',\r
-                       '' => 'overview'\r
-               );\r
-\r
-               if ($alias[$action])\r
-                       $action = $alias[$action];\r
-\r
-               $methodName = 'action_' . $action;\r
-\r
-               $this->action = strtolower($action);\r
-\r
-               // check ticket. All actions need a ticket, unless they are considered to be safe (a safe action\r
-               // is an action that requires user interaction before something is actually done)\r
-               // all safe actions are in this array:\r
-               $aActionsNotToCheck = array('showlogin', 'login', 'overview', 'itemlist', 'blogcommentlist', 'bookmarklet', 'blogsettings', 'banlist', 'deleteblog', 'editmembersettings', 'browseownitems', 'browseowncomments', 'createitem', 'itemedit', 'itemmove', 'categoryedit', 'categorydelete', 'manage', 'actionlog', 'settingsedit', 'backupoverview', 'pluginlist', 'createnewlog', 'usermanagement', 'skinoverview', 'templateoverview', 'skinieoverview', 'itemcommentlist', 'commentedit', 'commentdelete', 'banlistnewfromitem', 'banlistdelete', 'itemdelete', 'manageteam', 'teamdelete', 'banlistnew', 'memberedit', 'memberdelete', 'pluginhelp', 'pluginoptions', 'plugindelete', 'skinedittype', 'skindelete', 'skinedit', 'templateedit', 'templatedelete', 'activate');\r
-/*\r
-               // the rest of the actions needs to be checked\r
-               $aActionsToCheck = array('additem', 'itemupdate', 'itemmoveto', 'categoryupdate', 'categorydeleteconfirm', 'itemdeleteconfirm', 'commentdeleteconfirm', 'teamdeleteconfirm', 'memberdeleteconfirm', 'templatedeleteconfirm', 'skindeleteconfirm', 'banlistdeleteconfirm', 'plugindeleteconfirm', 'batchitem', 'batchcomment', 'batchmember', 'batchcategory', 'batchteam', 'regfile', 'commentupdate', 'banlistadd', 'changemembersettings', 'clearactionlog', 'settingsupdate', 'blogsettingsupdate', 'categorynew', 'teamchangeadmin', 'teamaddmember', 'memberadd', 'addnewlog', 'addnewlog2', 'backupcreate', 'backuprestore', 'pluginup', 'plugindown', 'pluginupdate', 'pluginadd', 'pluginoptionsupdate', 'skinupdate', 'skinclone', 'skineditgeneral', 'templateclone', 'templatenew', 'templateupdate', 'skinieimport', 'skinieexport', 'skiniedoimport', 'skinnew', 'deleteblogconfirm', 'sendping', 'rawping', 'activatesetpwd');\r
-*/\r
-               if (!in_array($this->action, $aActionsNotToCheck))\r
-               {\r
-                       if (!$manager->checkTicket())\r
-                               $this->error(_ERROR_BADTICKET);\r
-               }\r
-\r
-               if (method_exists($this, $methodName))\r
-                       call_user_func(array(&$this, $methodName));\r
-               else\r
-                       $this->error(_BADACTION . " ($action)");\r
-\r
-       }\r
-\r
-\r
-       function action_showlogin() {\r
-               global $error;\r
-               $this->action_login($error);\r
-       }\r
-\r
-       function action_login($msg = '', $passvars = 1) {\r
-               global $member;\r
-\r
-               // skip to overview when allowed\r
-               if ($member->isLoggedIn() && $member->canLogin()) {\r
-                       $this->action_overview();\r
-                       exit;\r
-               }\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<h2>', _LOGIN ,'</h2>';\r
-               if ($msg) echo _MESSAGE , ': ', htmlspecialchars($msg);\r
-               ?>\r
-\r
-               <form action="index.php" method="post"><p>\r
-               <?php echo _LOGIN_NAME?>: <br /><input name="login"  tabindex="10" />\r
-               <br />\r
-               <?php echo _LOGIN_PASSWORD?>: <br /><input name="password"  tabindex="20" type="password" />\r
-               <br />\r
-               <input name="action" value="login" type="hidden" />\r
-               <br />\r
-               <input type="submit" value="<?php echo _LOGIN?>" tabindex="30" />\r
-               <br />\r
-               <small>\r
-                       <input type="checkbox" value="1" name="shared" tabindex="40" id="shared" /><label for="shared"><?php echo _LOGIN_SHARED?></label>\r
-                       <br /><a href="forgotpassword.html"><?php echo _LOGIN_FORGOT?></a>\r
-               </small>\r
-               <?php                   // pass through vars\r
-\r
-                       $oldaction = postVar('oldaction');\r
-                       if (  ($oldaction != 'logout')  && ($oldaction != 'login')  && $passvars ) {\r
-                               passRequestVars();\r
-                       }\r
-\r
-\r
-               ?>\r
-               </p></form>\r
-               <?php           $this->pagefoot();\r
-       }\r
-\r
-\r
-       /**\r
-         * provides a screen with the overview of the actions available\r
-         */\r
-       function action_overview($msg = '') {\r
-               global $member;\r
-\r
-               $this->pagehead();\r
-\r
-               if ($msg)\r
-                       echo _MESSAGE , ': ', $msg;\r
-\r
-               /* ---- add items ---- */\r
-               echo '<h2>' . _OVERVIEW_YRBLOGS . '</h2>';\r
-\r
-               $showAll = requestVar('showall');\r
-\r
-               if (($member->isAdmin()) && ($showAll == 'yes')) {\r
-                       // Super-Admins have access to all blogs! (no add item support though)\r
-                       $query =  'SELECT bnumber, bname, 1 as tadmin, burl, bshortname'\r
-                                  . ' FROM ' . sql_table('blog')\r
-                                  . ' ORDER BY bname';\r
-               } else {\r
-                       $query =  'SELECT bnumber, bname, tadmin, burl, bshortname'\r
-                                  . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')\r
-                                  . ' WHERE tblog=bnumber and tmember=' . $member->getID()\r
-                                  . ' ORDER BY bname';\r
-               }\r
-               $template['content'] = 'bloglist';\r
-               $template['superadmin'] = $member->isAdmin();\r
-               $amount = showlist($query,'table',$template);\r
-\r
-               if (($showAll != 'yes') && ($member->isAdmin())) {\r
-                       $total = quickQuery('SELECT COUNT(*) as result FROM ' . sql_table('blog'));\r
-                       if ($total > $amount)\r
-                               echo '<p><a href="index.php?action=overview&amp;showall=yes">Show all blogs</a></p>';\r
-               }\r
-\r
-               if ($amount == 0)\r
-                       echo _OVERVIEW_NOBLOGS;\r
-\r
-               if ($amount != 0) {\r
-                       echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';\r
-                       $query =  'SELECT ititle, inumber, bshortname'\r
-                                  . ' FROM ' . sql_table('item'). ', ' . sql_table('blog')\r
-                                  . ' WHERE iauthor='.$member->getID().' and iblog=bnumber and idraft=1';\r
-                       $template['content'] = 'draftlist';\r
-                       $amountdrafts = showlist($query, 'table', $template);\r
-                       if ($amountdrafts == 0)\r
-                               echo _OVERVIEW_NODRAFTS;\r
-               }\r
-\r
-               /* ---- user settings ---- */\r
-               echo '<h2>' . _OVERVIEW_YRSETTINGS . '</h2>';\r
-               echo '<ul>';\r
-               echo '<li><a href="index.php?action=editmembersettings">' . _OVERVIEW_EDITSETTINGS. '</a></li>';\r
-               echo '<li><a href="index.php?action=browseownitems">' . _OVERVIEW_BROWSEITEMS.'</a></li>';\r
-               echo '<li><a href="index.php?action=browseowncomments">'._OVERVIEW_BROWSECOMM.'</a></li>';\r
-               echo '</ul>';\r
-\r
-               /* ---- general settings ---- */\r
-               if ($member->isAdmin()) {\r
-                       echo '<h2>' . _OVERVIEW_MANAGEMENT. '</h2>';\r
-                       echo '<ul>';\r
-                       echo '<li><a href="index.php?action=manage">',_OVERVIEW_MANAGE,'</a></li>';\r
-                       echo '</ul>';\r
-               }\r
-\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       // returns a link to a weblog (takes BLOG object as parameter)\r
-       function bloglink(&$blog) {\r
-               return '<a href="'.htmlspecialchars($blog->getURL()).'" title="'._BLOGLIST_TT_VISIT.'">'.$blog->getName() .'</a>';\r
-       }\r
-\r
-       function action_manage($msg = '') {\r
-               global $member;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
-\r
-               if ($msg)\r
-                       echo '<p>' , _MESSAGE , ': ', $msg , '</p>';\r
-\r
-\r
-               echo '<h2>' . _MANAGE_GENERAL. '</h2>';\r
-\r
-               echo '<ul>';\r
-               echo '<li><a href="index.php?action=createnewlog">'._OVERVIEW_NEWLOG.'</a></li>';\r
-               echo '<li><a href="index.php?action=settingsedit">'._OVERVIEW_SETTINGS.'</a></li>';\r
-               echo '<li><a href="index.php?action=usermanagement">'._OVERVIEW_MEMBERS.'</a></li>';\r
-               echo '<li><a href="index.php?action=actionlog">'._OVERVIEW_VIEWLOG.'</a></li>';\r
-               echo '</ul>';\r
-\r
-               echo '<h2>' . _MANAGE_SKINS . '</h2>';\r
-               echo '<ul>';\r
-               echo '<li><a href="index.php?action=skinoverview">'._OVERVIEW_SKINS.'</a></li>';\r
-               echo '<li><a href="index.php?action=templateoverview">'._OVERVIEW_TEMPLATES.'</a></li>';\r
-               echo '<li><a href="index.php?action=skinieoverview">'._OVERVIEW_SKINIMPORT.'</a></li>';\r
-               echo '</ul>';\r
-\r
-               echo '<h2>' . _MANAGE_EXTRA . '</h2>';\r
-               echo '<ul>';\r
-               echo '<li><a href="index.php?action=backupoverview">'._OVERVIEW_BACKUP.'</a></li>';\r
-               echo '<li><a href="index.php?action=pluginlist">'._OVERVIEW_PLUGINS.'</a></li>';\r
-               echo '</ul>';\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_itemlist($blogid = '') {\r
-               global $member, $manager;\r
-\r
-               if ($blogid == '')\r
-                       $blogid = intRequestVar('blogid');\r
-\r
-               $member->teamRights($blogid) or $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
-               echo '<h2>' . _ITEMLIST_BLOG . ' ' . $this->bloglink($blog) . '</h2>';\r
-\r
-               // start index\r
-               if (postVar('start'))\r
-                       $start = intPostVar('start');\r
-               else\r
-                       $start = 0;\r
-\r
-               if ($start == 0)\r
-                       echo '<p><a href="index.php?action=createitem&amp;blogid='.$blogid.'">',_ITEMLIST_ADDNEW,'</a></p>';\r
-\r
-               // amount of items to show\r
-               if (postVar('amount'))\r
-                       $amount = intPostVar('amount');\r
-               else\r
-                       $amount = 10;\r
-\r
-               $search = postVar('search');    // search through items\r
-\r
-               $query =  'SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime'\r
-                          . ' FROM ' . sql_table('item') . ', ' . sql_table('blog') . ', ' . sql_table('member') . ', ' . sql_table('category')\r
-                          . ' WHERE iblog=bnumber and iauthor=mnumber and icat=catid and iblog=' . $blogid;\r
-\r
-               if ($search)\r
-                       $query .= ' and ((ititle LIKE "%' . addslashes($search) . '%") or (ibody LIKE "%' . addslashes($search) . '%") or (imore LIKE "%' . addslashes($search) . '%"))';\r
-\r
-               // non-blog-admins can only edit/delete their own items\r
-               if (!$member->blogAdminRights($blogid))\r
-                       $query .= ' and iauthor=' . $member->getID();\r
-\r
-\r
-               $query .= ' ORDER BY itime DESC'\r
-                               . " LIMIT $start,$amount";\r
-\r
-               $template['content'] = 'itemlist';\r
-               $template['now'] = $blog->getCorrectTime(time());\r
-\r
-\r
-               $navList =& new NAVLIST('itemlist', $start, $amount, 0, 1000, $blogid, $search, 0);\r
-               $navList->showBatchList('item',$query,'table',$template);\r
-\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-\r
-       function action_batchitem() {\r
-               global $member, $manager;\r
-\r
-               // check if logged in\r
-               $member->isLoggedIn() or $this->disallow();\r
-\r
-               // more precise check will be done for each performed operation\r
-\r
-               // get array of itemids from request\r
-               $selected = requestIntArray('batch');\r
-               $action = requestVar('batchaction');\r
-\r
-               // Show error when no items were selected\r
-               if (!is_array($selected) || sizeof($selected) == 0)\r
-                       $this->error(_BATCH_NOSELECTION);\r
-\r
-               // On move: when no destination blog/category chosen, show choice now\r
-               $destCatid = intRequestVar('destcatid');\r
-               if (($action == 'move') && (!$manager->existsCategory($destCatid)))\r
-                       $this->batchMoveSelectDestination('item',$selected);\r
-\r
-               // On delete: check if confirmation has been given\r
-               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
-                       $this->batchAskDeleteConfirmation('item',$selected);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';\r
-               echo '<h2>',_BATCH_ITEMS,'</h2>';\r
-               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
-               echo '<ul>';\r
-\r
-\r
-               // walk over all itemids and perform action\r
-               foreach ($selected as $itemid) {\r
-                       $itemid = intval($itemid);\r
-                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONITEM,' <b>', $itemid, '</b>...';\r
-\r
-                       // perform action, display errors if needed\r
-                       switch($action) {\r
-                               case 'delete':\r
-                                       $error = $this->deleteOneItem($itemid);\r
-                                       break;\r
-                               case 'move':\r
-                                       $error = $this->moveOneItem($itemid, $destCatid);\r
-                                       break;\r
-                               default:\r
-                                       $error = _BATCH_UNKNOWN . $action;\r
-                       }\r
-\r
-                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';\r
-                       echo '</li>';\r
-               }\r
-\r
-               echo '</ul>';\r
-               echo '<b>',_BATCH_DONE,'</b>';\r
-\r
-               $this->pagefoot();\r
-\r
-\r
-       }\r
-\r
-       function action_batchcomment() {\r
-               global $member;\r
-\r
-               // check if logged in\r
-               $member->isLoggedIn() or $this->disallow();\r
-\r
-               // more precise check will be done for each performed operation\r
-\r
-               // get array of itemids from request\r
-               $selected = requestIntArray('batch');\r
-               $action = requestVar('batchaction');\r
-\r
-               // Show error when no items were selected\r
-               if (!is_array($selected) || sizeof($selected) == 0)\r
-                       $this->error(_BATCH_NOSELECTION);\r
-\r
-               // On delete: check if confirmation has been given\r
-               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
-                       $this->batchAskDeleteConfirmation('comment',$selected);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';\r
-               echo '<h2>',_BATCH_COMMENTS,'</h2>';\r
-               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
-               echo '<ul>';\r
-\r
-               // walk over all itemids and perform action\r
-               foreach ($selected as $commentid) {\r
-                       $commentid = intval($commentid);\r
-                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONCOMMENT,' <b>', $commentid, '</b>...';\r
-\r
-                       // perform action, display errors if needed\r
-                       switch($action) {\r
-                               case 'delete':\r
-                                       $error = $this->deleteOneComment($commentid);\r
-                                       break;\r
-                               default:\r
-                                       $error = _BATCH_UNKNOWN . $action;\r
-                       }\r
-\r
-                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';\r
-                       echo '</li>';\r
-               }\r
-\r
-               echo '</ul>';\r
-               echo '<b>',_BATCH_DONE,'</b>';\r
-\r
-               $this->pagefoot();\r
-\r
-\r
-       }\r
-\r
-       function action_batchmember() {\r
-               global $member;\r
-\r
-               // check if logged in and admin\r
-               ($member->isLoggedIn() && $member->isAdmin()) or $this->disallow();\r
-\r
-               // get array of itemids from request\r
-               $selected = requestIntArray('batch');\r
-               $action = requestVar('batchaction');\r
-\r
-               // Show error when no members selected\r
-               if (!is_array($selected) || sizeof($selected) == 0)\r
-                       $this->error(_BATCH_NOSELECTION);\r
-\r
-               // On delete: check if confirmation has been given\r
-               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
-                       $this->batchAskDeleteConfirmation('member',$selected);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<a href="index.php?action=usermanagement">(',_MEMBERS_BACKTOOVERVIEW,')</a>';\r
-               echo '<h2>',_BATCH_MEMBERS,'</h2>';\r
-               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
-               echo '<ul>';\r
-\r
-               // walk over all itemids and perform action\r
-               foreach ($selected as $memberid) {\r
-                       $memberid = intval($memberid);\r
-                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONMEMBER,' <b>', $memberid, '</b>...';\r
-\r
-                       // perform action, display errors if needed\r
-                       switch($action) {\r
-                               case 'delete':\r
-                                       $error = $this->deleteOneMember($memberid);\r
-                                       break;\r
-                               case 'setadmin':\r
-                                       // always succeeds\r
-                                       sql_query('UPDATE ' . sql_table('member') . ' SET madmin=1 WHERE mnumber='.$memberid);\r
-                                       $error = '';\r
-                                       break;\r
-                               case 'unsetadmin':\r
-                                       // there should always remain at least one super-admin\r
-                                       $r = sql_query('SELECT * FROM '.sql_table('member'). ' WHERE madmin=1 and mcanlogin=1');\r
-                                       if (mysql_num_rows($r) < 2)\r
-                                               $error = _ERROR_ATLEASTONEADMIN;\r
-                                       else\r
-                                               sql_query('UPDATE ' . sql_table('member') .' SET madmin=0 WHERE mnumber='.$memberid);\r
-                                       break;\r
-                               default:\r
-                                       $error = _BATCH_UNKNOWN . $action;\r
-                       }\r
-\r
-                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';\r
-                       echo '</li>';\r
-               }\r
-\r
-               echo '</ul>';\r
-               echo '<b>',_BATCH_DONE,'</b>';\r
-\r
-               $this->pagefoot();\r
-\r
-\r
-       }\r
-\r
-\r
-       function action_batchteam() {\r
-               global $member;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               // check if logged in and admin\r
-               ($member->isLoggedIn() && $member->blogAdminRights($blogid)) or $this->disallow();\r
-\r
-               // get array of itemids from request\r
-               $selected = requestIntArray('batch');\r
-               $action = requestVar('batchaction');\r
-\r
-               // Show error when no members selected\r
-               if (!is_array($selected) || sizeof($selected) == 0)\r
-                       $this->error(_BATCH_NOSELECTION);\r
-\r
-               // On delete: check if confirmation has been given\r
-               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
-                       $this->batchAskDeleteConfirmation('team',$selected);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manageteam&amp;blogid=',$blogid,'">(',_BACK,')</a></p>';\r
-\r
-               echo '<h2>',_BATCH_TEAM,'</h2>';\r
-               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
-               echo '<ul>';\r
-\r
-               // walk over all itemids and perform action\r
-               foreach ($selected as $memberid) {\r
-                       $memberid = intval($memberid);\r
-                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONTEAM,' <b>', $memberid, '</b>...';\r
-\r
-                       // perform action, display errors if needed\r
-                       switch($action) {\r
-                               case 'delete':\r
-                                       $error = $this->deleteOneTeamMember($blogid, $memberid);\r
-                                       break;\r
-                               case 'setadmin':\r
-                                       // always succeeds\r
-                                       sql_query('UPDATE '.sql_table('team').' SET tadmin=1 WHERE tblog='.$blogid.' and tmember='.$memberid);\r
-                                       $error = '';\r
-                                       break;\r
-                               case 'unsetadmin':\r
-                                       // there should always remain at least one admin\r
-                                       $r = sql_query('SELECT * FROM '.sql_table('team').' WHERE tadmin=1 and tblog='.$blogid);\r
-                                       if (mysql_num_rows($r) < 2)\r
-                                               $error = _ERROR_ATLEASTONEBLOGADMIN;\r
-                                       else\r
-                                               sql_query('UPDATE '.sql_table('team').' SET tadmin=0 WHERE tblog='.$blogid.' and tmember='.$memberid);\r
-                                       break;\r
-                               default:\r
-                                       $error = _BATCH_UNKNOWN . $action;\r
-                       }\r
-\r
-                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';\r
-                       echo '</li>';\r
-               }\r
-\r
-               echo '</ul>';\r
-               echo '<b>',_BATCH_DONE,'</b>';\r
-\r
-               $this->pagefoot();\r
-\r
-\r
-       }\r
-\r
-\r
-\r
-       function action_batchcategory() {\r
-               global $member, $manager;\r
-\r
-               // check if logged in\r
-               $member->isLoggedIn() or $this->disallow();\r
-\r
-               // more precise check will be done for each performed operation\r
-\r
-               // get array of itemids from request\r
-               $selected = requestIntArray('batch');\r
-               $action = requestVar('batchaction');\r
-\r
-               // Show error when no items were selected\r
-               if (!is_array($selected) || sizeof($selected) == 0)\r
-                       $this->error(_BATCH_NOSELECTION);\r
-\r
-               // On move: when no destination blog chosen, show choice now\r
-               $destBlogId = intRequestVar('destblogid');\r
-               if (($action == 'move') && (!$manager->existsBlogID($destBlogId)))\r
-                       $this->batchMoveCategorySelectDestination('category',$selected);\r
-\r
-               // On delete: check if confirmation has been given\r
-               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
-                       $this->batchAskDeleteConfirmation('category',$selected);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';\r
-               echo '<h2>',BATCH_CATEGORIES,'</h2>';\r
-               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
-               echo '<ul>';\r
-\r
-               // walk over all itemids and perform action\r
-               foreach ($selected as $catid) {\r
-                       $catid = intval($catid);\r
-                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONCATEGORY,' <b>', $catid, '</b>...';\r
-\r
-                       // perform action, display errors if needed\r
-                       switch($action) {\r
-                               case 'delete':\r
-                                       $error = $this->deleteOneCategory($catid);\r
-                                       break;\r
-                               case 'move':\r
-                                       $error = $this->moveOneCategory($catid, $destBlogId);\r
-                                       break;\r
-                               default:\r
-                                       $error = _BATCH_UNKNOWN . $action;\r
-                       }\r
-\r
-                       echo '<b>',($error ? 'Error: '.$error : _BATCH_SUCCESS),'</b>';\r
-                       echo '</li>';\r
-               }\r
-\r
-               echo '</ul>';\r
-               echo '<b>',_BATCH_DONE,'</b>';\r
-\r
-               $this->pagefoot();\r
-\r
-       }\r
-\r
-       function batchMoveSelectDestination($type, $ids) {\r
-               global $manager;\r
-               $this->pagehead();\r
-               ?>\r
-               <h2><?php echo _MOVE_TITLE?></h2>\r
-               <form method="post" action="index.php"><div>\r
-\r
-                       <input type="hidden" name="action" value="batch<?php echo $type?>" />\r
-                       <input type="hidden" name="batchaction" value="move" />\r
-                       <?php\r
-                               $manager->addTicketHidden();\r
-\r
-                               // insert selected item numbers\r
-                               $idx = 0;\r
-                               foreach ($ids as $id)\r
-                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';\r
-\r
-                               // show blog/category selection list\r
-                               $this->selectBlogCategory('destcatid');\r
-\r
-                       ?>\r
-\r
-\r
-                       <input type="submit" value="<?php echo _MOVE_BTN?>" onclick="return checkSubmit();" />\r
-\r
-               </div></form>\r
-               <?php           $this->pagefoot();\r
-               exit;\r
-       }\r
-\r
-       function batchMoveCategorySelectDestination($type, $ids) {\r
-               global $manager;\r
-               $this->pagehead();\r
-               ?>\r
-               <h2><?php echo _MOVECAT_TITLE?></h2>\r
-               <form method="post" action="index.php"><div>\r
-\r
-                       <input type="hidden" name="action" value="batch<?php echo $type?>" />\r
-                       <input type="hidden" name="batchaction" value="move" />\r
-                       <?php\r
-                               $manager->addTicketHidden();\r
-\r
-                               // insert selected item numbers\r
-                               $idx = 0;\r
-                               foreach ($ids as $id)\r
-                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';\r
-\r
-                               // show blog/category selection list\r
-                               $this->selectBlog('destblogid');\r
-\r
-                       ?>\r
-\r
-\r
-                       <input type="submit" value="<?php echo _MOVECAT_BTN?>" onclick="return checkSubmit();" />\r
-\r
-               </div></form>\r
-               <?php           $this->pagefoot();\r
-               exit;\r
-       }\r
-\r
-       function batchAskDeleteConfirmation($type, $ids) {\r
-               global $manager;\r
-\r
-               $this->pagehead();\r
-               ?>\r
-               <h2><?php echo _BATCH_DELETE_CONFIRM?></h2>\r
-               <form method="post" action="index.php"><div>\r
-\r
-                       <input type="hidden" name="action" value="batch<?php echo $type?>" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="batchaction" value="delete" />\r
-                       <input type="hidden" name="confirmation" value="yes" />\r
-                       <?php                           // insert selected item numbers\r
-                               $idx = 0;\r
-                               foreach ($ids as $id)\r
-                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';\r
-\r
-                               // add hidden vars for team & comment\r
-                               if ($type == 'team')\r
-                               {\r
-                                       echo '<input type="hidden" name="blogid" value="',intRequestVar('blogid'),'" />';\r
-                               }\r
-                               if ($type == 'comment')\r
-                               {\r
-                                       echo '<input type="hidden" name="itemid" value="',intRequestVar('itemid'),'" />';\r
-                               }\r
-\r
-                       ?>\r
-\r
-                       <input type="submit" value="<?php echo _BATCH_DELETE_CONFIRM_BTN?>" onclick="return checkSubmit();" />\r
-\r
-               </div></form>\r
-               <?php           $this->pagefoot();\r
-               exit;\r
-       }\r
-\r
-\r
-       /**\r
-         * Inserts a HTML select element with choices for all categories to which the current\r
-         * member has access\r
-         */\r
-       function selectBlogCategory($name, $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1) {\r
-               ADMIN::selectBlog($name, 'category', $selected, $tabindex, $showNewCat, $iForcedBlogInclude);\r
-       }\r
-\r
-       /**\r
-         * Inserts a HTML select element with choices for all blogs to which the user has access\r
-         *             mode = 'blog' => shows blognames and values are blogids\r
-         *             mode = 'category' => show category names and values are catids\r
-         *\r
-         * @param $iForcedBlogInclude\r
-         *             ID of a blog that always needs to be included, without checking if the member is on the blog team (-1 = none)\r
-         */\r
-       function selectBlog($name, $mode='blog', $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1) {\r
-               global $member, $CONF;\r
-\r
-               // 0. get IDs of blogs to which member can post items (+ forced blog)\r
-               $aBlogIds = array();\r
-               if ($iForcedBlogInclude != -1)\r
-                       $aBlogIds[] = intval($iForcedBlogInclude);\r
-\r
-               if (($member->isAdmin()) && ($CONF['ShowAllBlogs']))\r
-                       $queryBlogs =  'SELECT bnumber FROM '.sql_table('blog').' ORDER BY bname';\r
-               else\r
-                       $queryBlogs =  'SELECT bnumber FROM '.sql_table('blog').', '.sql_table('team').' WHERE tblog=bnumber and tmember=' . $member->getID();\r
-               $rblogids = sql_query($queryBlogs);\r
-               while ($o = mysql_fetch_object($rblogids))\r
-                       if ($o->bnumber != $iForcedBlogInclude)\r
-                               $aBlogIds[] = intval($o->bnumber);\r
-\r
-               if (count($aBlogIds) == 0)\r
-                       return;\r
-\r
-               echo '<select name="',$name,'" tabindex="',$tabindex,'">';\r
-\r
-               // 1. select blogs (we'll create optiongroups)\r
-               // (only select those blogs that have the user on the team)\r
-               $queryBlogs =  'SELECT bnumber, bname FROM '.sql_table('blog').' WHERE bnumber in ('.implode(',',$aBlogIds).') ORDER BY bname';\r
-               $blogs = sql_query($queryBlogs);\r
-               if ($mode == 'category') {\r
-                       if (mysql_num_rows($blogs) > 1)\r
-                               $multipleBlogs = 1;\r
-\r
-                       while ($oBlog = mysql_fetch_object($blogs)) {\r
-                               if ($multipleBlogs)\r
-                                       echo '<optgroup label="',htmlspecialchars($oBlog->bname),'">';\r
-\r
-                               // show selection to create new category when allowed/wanted\r
-                               if ($showNewCat) {\r
-                                       // check if allowed to do so\r
-                                       if ($member->blogAdminRights($oBlog->bnumber))\r
-                                               echo '<option value="newcat-',$oBlog->bnumber,'">',_ADD_NEWCAT,'</option>';\r
-                               }\r
-\r
-                               // 2. for each category in that blog\r
-                               $categories = sql_query('SELECT cname, catid FROM '.sql_table('category').' WHERE cblog=' . $oBlog->bnumber . ' ORDER BY cname ASC');\r
-                               while ($oCat = mysql_fetch_object($categories)) {\r
-                                       if ($oCat->catid == $selected)\r
-                                               $selectText = ' selected="selected" ';\r
-                                       else\r
-                                               $selectText = '';\r
-                                       echo '<option value="',$oCat->catid,'" ', $selectText,'>',htmlspecialchars($oCat->cname),'</option>';\r
-                               }\r
-\r
-                               if ($multipleBlogs)\r
-                                       echo '</optgroup>';\r
-                       }\r
-               } else {\r
-                       // blog mode\r
-                       while ($oBlog = mysql_fetch_object($blogs)) {\r
-                               echo '<option value="',$oBlog->bnumber,'"';\r
-                               if ($oBlog->bnumber == $selected)\r
-                                       echo ' selected="selected"';\r
-                               echo'>',htmlspecialchars($oBlog->bname),'</option>';\r
-                       }\r
-               }\r
-               echo '</select>';\r
-\r
-       }\r
-\r
-       function action_browseownitems() {\r
-               global $member;\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
-               echo '<h2>' . _ITEMLIST_YOUR. '</h2>';\r
-\r
-               // start index\r
-               if (postVar('start'))\r
-                       $start = postVar('start');\r
-               else\r
-                       $start = 0;\r
-\r
-               // amount of items to show\r
-               if (postVar('amount'))\r
-                       $amount = postVar('amount');\r
-               else\r
-                       $amount = 10;\r
-\r
-               $search = postVar('search');    // search through items\r
-\r
-               $query =  'SELECT bshortname, cname, mname, ititle, ibody, idraft, inumber, itime'\r
-                          . ' FROM '.sql_table('item').', '.sql_table('blog') . ', '.sql_table('member') . ', '.sql_table('category')\r
-                          . ' WHERE iauthor='. $member->getID() .' and iauthor=mnumber and iblog=bnumber and icat=catid';\r
-\r
-               if ($search)\r
-                       $query .= ' and ((ititle LIKE "%' . addslashes($search) . '%") or (ibody LIKE "%' . addslashes($search) . '%") or (imore LIKE "%' . addslashes($search) . '%"))';\r
-\r
-               $query .= ' ORDER BY itime DESC'\r
-                               . " LIMIT $start,$amount";\r
-\r
-               $template['content'] = 'itemlist';\r
-               $template['now'] = time();\r
-\r
-               $navList =& new NAVLIST('browseownitems', $start, $amount, 0, 1000, $blogid, $search, 0);\r
-               $navList->showBatchList('item',$query,'table',$template);\r
-\r
-               $this->pagefoot();\r
-\r
-       }\r
-\r
-       /**\r
-         * Show all the comments for a given item\r
-         */\r
-       function action_itemcommentlist($itemid = '') {\r
-               global $member;\r
-\r
-               if ($itemid == '')\r
-                       $itemid = intRequestVar('itemid');\r
-\r
-               // only allow if user is allowed to alter item\r
-               $member->canAlterItem($itemid) or $this->disallow();\r
-\r
-               $blogid = getBlogIdFromItemId($itemid);\r
-\r
-               $this->pagehead();\r
-\r
-               // start index\r
-               if (postVar('start'))\r
-                       $start = postVar('start');\r
-               else\r
-                       $start = 0;\r
-\r
-               // amount of items to show\r
-               if (postVar('amount'))\r
-                       $amount = postVar('amount');\r
-               else\r
-                       $amount = 10;\r
-\r
-               $search = postVar('search');\r
-\r
-               echo '<p>(<a href="index.php?action=itemlist&amp;blogid=',$blogid,'">',_BACKTOOVERVIEW,'</a>)</p>';\r
-               echo '<h2>',_COMMENTS,'</h2>';\r
-\r
-               $query =  'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE citem=' . $itemid;\r
-\r
-               if ($search)\r
-                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';\r
-\r
-               $query .= ' ORDER BY ctime ASC'\r
-                               . " LIMIT $start,$amount";\r
-\r
-               $template['content'] = 'commentlist';\r
-               $template['canAddBan'] = $member->blogAdminRights(getBlogIDFromItemID($itemid));\r
-\r
-               $navList =& new NAVLIST('itemcommentlist', $start, $amount, 0, 1000, 0, $search, $itemid);\r
-               $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS);\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       /**\r
-         * Browse own comments\r
-         */\r
-       function action_browseowncomments() {\r
-               global $member;\r
-\r
-               // start index\r
-               if (postVar('start'))\r
-                       $start = postVar('start');\r
-               else\r
-                       $start = 0;\r
-\r
-               // amount of items to show\r
-               if (postVar('amount'))\r
-                       $amount = postVar('amount');\r
-               else\r
-                       $amount = 10;\r
-\r
-               $search = postVar('search');\r
-\r
-\r
-               $query =  'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cmember=' . $member->getID();\r
-\r
-               if ($search)\r
-                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';\r
-\r
-               $query .= ' ORDER BY ctime DESC'\r
-                               . " LIMIT $start,$amount";\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
-               echo '<h2>', _COMMENTS_YOUR ,'</h2>';\r
-\r
-               $template['content'] = 'commentlist';\r
-               $template['canAddBan'] = 0;     // doesn't make sense to allow banning yourself\r
-\r
-               $navList =& new NAVLIST('browseowncomments', $start, $amount, 0, 1000, 0, $search, 0);\r
-               $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS_YOUR);\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       /**\r
-         * Browse all comments for a weblog\r
-         */\r
-       function action_blogcommentlist($blogid = '')\r
-       {\r
-               global $member, $manager;\r
-\r
-               if ($blogid == '')\r
-                       $blogid = intRequestVar('blogid');\r
-               else\r
-                       $blogid = intval($blogid);\r
-\r
-               $member->teamRights($blogid) or $member->isAdmin() or $this->disallow();\r
-\r
-               // start index\r
-               if (postVar('start'))\r
-                       $start = postVar('start');\r
-               else\r
-                       $start = 0;\r
-\r
-               // amount of items to show\r
-               if (postVar('amount'))\r
-                       $amount = postVar('amount');\r
-               else\r
-                       $amount = 10;\r
-\r
-               $search = postVar('search');            // search through comments\r
-\r
-\r
-               $query =  'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cblog=' . intval($blogid);\r
-\r
-               if ($search != '')\r
-                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';\r
-\r
-\r
-               $query .= ' ORDER BY ctime DESC'\r
-                               . " LIMIT $start,$amount";\r
-\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
-               echo '<h2>', _COMMENTS_BLOG , ' ' , $this->bloglink($blog), '</h2>';\r
-\r
-               $template['content'] = 'commentlist';\r
-               $template['canAddBan'] = $member->blogAdminRights($blogid);\r
-\r
-               $navList =& new NAVLIST('blogcommentlist', $start, $amount, 0, 1000, $blogid, $search, 0);\r
-               $navList->showBatchList('comment',$query,'table',$template, _NOCOMMENTS_BLOG);\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       /**\r
-         * Provide a page to item a new item to the given blog\r
-         */\r
-       function action_createitem() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               // check if allowed\r
-               $member->teamRights($blogid) or $this->disallow();\r
-\r
-               $memberid = $member->getID();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $this->pagehead();\r
-\r
-               // generate the add-item form\r
-               $formfactory =& new PAGEFACTORY($blogid);\r
-               $formfactory->createAddForm('admin');\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_itemedit() {\r
-               global $member, $manager;\r
-\r
-               $itemid = intRequestVar('itemid');\r
-\r
-               // only allow if user is allowed to alter item\r
-               $member->canAlterItem($itemid) or $this->disallow();\r
-\r
-               $item =& $manager->getItem($itemid,1,1);\r
-               $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));\r
-\r
-               $manager->notify('PrepareItemForEdit', array('item' => &$item));\r
-\r
-               if ($blog->convertBreaks()) {\r
-                       $item['body'] = removeBreaks($item['body']);\r
-                       $item['more'] = removeBreaks($item['more']);\r
-               }\r
-\r
-               // form to edit blog items\r
-               $this->pagehead();\r
-               $formfactory =& new PAGEFACTORY($blog->getID());\r
-               $formfactory->createEditForm('admin',$item);\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_itemupdate() {\r
-               global $member, $manager, $CONF;\r
-\r
-               $itemid = intRequestVar('itemid');\r
-               $catid = postVar('catid');\r
-\r
-               // only allow if user is allowed to alter item\r
-               $member->canUpdateItem($itemid, $catid) or $this->disallow();\r
-\r
-               $actiontype = postVar('actiontype');\r
-\r
-               // delete actions are handled by itemdelete (which has confirmation)\r
-               if ($actiontype == 'delete') {\r
-                       $this->action_itemdelete();\r
-                       return;\r
-               }\r
-\r
-               $body   = postVar('body');\r
-               $title  = postVar('title');\r
-               $more   = postVar('more');\r
-               $closed = intPostVar('closed');\r
-\r
-               // default action = add now\r
-               if (!$actiontype)\r
-                       $actiontype='addnow';\r
-\r
-               // create new category if needed\r
-               if (strstr($catid,'newcat')) {\r
-                       // get blogid\r
-                       list($blogid) = sscanf($catid,"newcat-%d");\r
-\r
-                       // create\r
-                       $blog =& $manager->getBlog($blogid);\r
-                       $catid = $blog->createNewCategory();\r
-\r
-                       // show error when sth goes wrong\r
-                       if (!$catid)\r
-                               $this->doError(_ERROR_CATCREATEFAIL);\r
-               }\r
-\r
-               /*\r
-                       set some variables based on actiontype\r
-\r
-                       actiontypes:\r
-                               draft items -> addnow, addfuture, adddraft, delete\r
-                               non-draft items -> edit, changedate, delete\r
-\r
-                       variables set:\r
-                               $timestamp: set to a nonzero value for future dates or date changes\r
-                               $wasdraft: set to 1 when the item used to be a draft item\r
-                               $publish: set to 1 when the edited item is not a draft\r
-               */\r
-               switch ($actiontype) {\r
-                       case 'adddraft':\r
-                               $publish = 0;\r
-                               $wasdraft = 1;\r
-                               $timestamp = 0;\r
-                               break;\r
-                       case 'addfuture':\r
-                               $wasdraft = 1;\r
-                               $publish = 1;\r
-                               $timestamp = mktime(postVar('hour'), postVar('minutes'), 0, postVar('month'), postVar('day'), postVar('year'));\r
-                               break;\r
-                       case 'addnow':\r
-                               $wasdraft = 1;\r
-                               $publish = 1;\r
-                               $timestamp = 0;\r
-                               break;\r
-                       case 'changedate':\r
-                               $timestamp = mktime(postVar('hour'), postVar('minutes'), 0, postVar('month'), postVar('day'), postVar('year'));\r
-                               $publish = 1;\r
-                               $wasdraft = 0;\r
-                               break;\r
-                       case 'edit':\r
-                       default:\r
-                               $publish = 1;\r
-                               $wasdraft = 0;\r
-                               $timestamp = 0;\r
-               }\r
-\r
-               // edit the item for real\r
-               ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);\r
-\r
-               $blogid = getBlogIDFromItemID($itemid);\r
-               $blog =& $manager->getBlog($blogid);\r
-               if (!$closed && $publish && $wasdraft && $blog->pingUserland()) {\r
-                       $this->action_sendping($blogid);\r
-                       return;\r
-               }\r
-\r
-               // show category edit window when we created a new category\r
-               // ($catid will then be a new category ID, while postVar('catid') will be 'newcat-x')\r
-               if ($catid != intPostVar('catid')) {\r
-                       $this->action_categoryedit(\r
-                               $catid,\r
-                               $blog->getID(),\r
-                               $CONF['AdminURL'] . 'index.php?action=itemlist&blogid=' . getBlogIDFromItemID($itemid)\r
-                       );\r
-               } else {\r
-                       // TODO: set start item correctly for itemlist\r
-                       $this->action_itemlist(getBlogIDFromItemID($itemid));\r
-               }\r
-       }\r
-\r
-       function action_itemdelete() {\r
-               global $member, $manager;\r
-\r
-               $itemid = intRequestVar('itemid');\r
-\r
-               // only allow if user is allowed to alter item\r
-               $member->canAlterItem($itemid) or $this->disallow();\r
-\r
-               if (!$manager->existsItem($itemid,1,1))\r
-                       $this->error(_ERROR_NOSUCHITEM);\r
-\r
-               $item =& $manager->getItem($itemid,1,1);\r
-               $title = htmlspecialchars(strip_tags($item['title']));\r
-               $body = strip_tags($item['body']);\r
-               $body = htmlspecialchars(shorten($body,300,'...'));\r
-\r
-               $this->pagehead();\r
-               ?>\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <p><?php echo _CONFIRMTXT_ITEM?></p>\r
-\r
-                       <div class="note">\r
-                               <b>"<?php echo  $title ?>"</b>\r
-                               <br />\r
-                               <?php echo $body?>\r
-                       </div>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                               <input type="hidden" name="action" value="itemdeleteconfirm" />\r
-                               <?php $manager->addTicketHidden() ?>\r
-                               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />\r
-                               <input type="submit" value="<?php echo _DELETE_CONFIRM_BTN?>"  tabindex="10" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_itemdeleteconfirm() {\r
-               global $member;\r
-\r
-               $itemid = intRequestVar('itemid');\r
-\r
-               // only allow if user is allowed to alter item\r
-               $member->canAlterItem($itemid) or $this->disallow();\r
-\r
-               // get blogid first\r
-               $blogid = getBlogIdFromItemId($itemid);\r
-\r
-               // delete item (note: some checks will be performed twice)\r
-               $this->deleteOneItem($itemid);\r
-\r
-               $this->action_itemlist($blogid);\r
-       }\r
-\r
-       // deletes one item and returns error if something goes wrong\r
-       function deleteOneItem($itemid) {\r
-               global $member, $manager;\r
-\r
-               // only allow if user is allowed to alter item (also checks if itemid exists)\r
-               if (!$member->canAlterItem($itemid))\r
-                       return _ERROR_DISALLOWED;\r
-\r
-               $manager->loadClass('ITEM');\r
-               ITEM::delete($itemid);\r
-       }\r
-\r
-       function action_itemmove() {\r
-               global $member, $manager;\r
-\r
-               $itemid = intRequestVar('itemid');\r
-\r
-               // only allow if user is allowed to alter item\r
-               $member->canAlterItem($itemid) or $this->disallow();\r
-\r
-               $item =& $manager->getItem($itemid,1,1);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-                       <h2><?php echo _MOVE_TITLE?></h2>\r
-                       <form method="post" action="index.php"><div>\r
-                               <input type="hidden" name="action" value="itemmoveto" />\r
-                               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />\r
-\r
-                               <?php\r
-\r
-                                       $manager->addTicketHidden();\r
-                                       $this->selectBlogCategory('catid',$item['catid'],10,1);\r
-                               ?>\r
-\r
-                               <input type="submit" value="<?php echo _MOVE_BTN?>" tabindex="10000" onclick="return checkSubmit();" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_itemmoveto() {\r
-               global $member, $manager;\r
-\r
-               $itemid = intRequestVar('itemid');\r
-               $catid = requestVar('catid');\r
-\r
-               // create new category if needed\r
-               if (strstr($catid,'newcat')) {\r
-                       // get blogid\r
-                       list($blogid) = sscanf($catid,'newcat-%d');\r
-\r
-                       // create\r
-                       $blog =& $manager->getBlog($blogid);\r
-                       $catid = $blog->createNewCategory();\r
-\r
-                       // show error when sth goes wrong\r
-                       if (!$catid)\r
-                               $this->doError(_ERROR_CATCREATEFAIL);\r
-               }\r
-\r
-               // only allow if user is allowed to alter item\r
-               $member->canUpdateItem($itemid, $catid) or $this->disallow();\r
-\r
-               ITEM::move($itemid, $catid);\r
-\r
-               if ($catid != intRequestVar('catid'))\r
-                       $this->action_categoryedit($catid, $blog->getID());\r
-               else\r
-                       $this->action_itemlist(getBlogIDFromCatID($catid));\r
-       }\r
-\r
-       /**\r
-         * Moves one item to a given category (category existance should be checked by caller)\r
-         * errors are returned\r
-         */\r
-       function moveOneItem($itemid, $destCatid) {\r
-               global $member;\r
-\r
-               // only allow if user is allowed to move item\r
-               if (!$member->canUpdateItem($itemid, $destCatid))\r
-                       return _ERROR_DISALLOWED;\r
-\r
-               ITEM::move($itemid, $destCatid);\r
-       }\r
-\r
-       /**\r
-         * Adds a item to the chosen blog\r
-         */\r
-       function action_additem() {\r
-               global $member, $manager, $CONF;\r
-\r
-               $manager->loadClass('ITEM');\r
-\r
-               $result = ITEM::createFromRequest();\r
-\r
-               if ($result['status'] == 'error')\r
-                       $this->error($result['message']);\r
-\r
-               $blogid = getBlogIDFromItemID($result['itemid']);\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $pingUrl = $manager->addTicketToUrl($CONF['AdminURL'] . 'index.php?action=sendping&blogid=' . intval($blogid));\r
-\r
-               if ($result['status'] == 'newcategory')\r
-                       $this->action_categoryedit(\r
-                               $result['catid'],\r
-                               $blogid,\r
-                               $blog->pingUserland() ? $pingUrl : ''\r
-                       );\r
-               elseif ((postVar('actiontype') == 'addnow') && $blog->pingUserland())\r
-                       $this->action_sendping($blogid);\r
-               else\r
-                       $this->action_itemlist($blogid);\r
-       }\r
-\r
-       /**\r
-         * Shows a window that says we're about to ping weblogs.com.\r
-         * immediately refresh to the real pinging page, which will\r
-         * show an error, or redirect to the blog.\r
-         *\r
-         * @param $blogid ID of blog for which ping needs to be sent out\r
-         */\r
-       function action_sendping($blogid = -1) {\r
-               global $member, $manager;\r
-\r
-               if ($blogid == -1)\r
-                       $blogid = intRequestVar('blogid');\r
-\r
-               $member->isLoggedIn() or $this->disallow();\r
-\r
-               $rawPingUrl = $manager->addTicketToUrl('index.php?action=rawping&blogid=' . intval($blogid));\r
-\r
-               $this->pagehead('<meta http-equiv="refresh" content="1; url='.htmlspecialchars($rawPingUrl).'" />');\r
-               ?>\r
-               <h2>Site Updated, Now pinging weblogs.com</h2>\r
-\r
-               <p>\r
-                       Pinging weblogs.com! This can a while...\r
-                       <br />\r
-                       When the ping is complete (and successfull), your weblog will show up in the weblogs.com updates list.\r
-               </p>\r
-\r
-               <p>\r
-                       If you aren't automatically passed through, <a href="index.php?action=rawping&amp;blogid=<?php echo $blogid?>">try again</a>\r
-               </p>\r
-               <?php           $this->pagefoot();\r
-       }\r
-\r
-       // ping to Weblogs.com\r
-       // sends the real ping (can take up to 10 seconds!)\r
-       function action_rawping() {\r
-               global $manager;\r
-               // TODO: checks?\r
-\r
-               $blogid = intRequestVar('blogid');\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $result = $blog->sendUserlandPing();\r
-\r
-               $this->pagehead();\r
-\r
-               ?>\r
-\r
-               <h2>Ping Results</h2>\r
-\r
-               <p>The following message was returned by weblogs.com:</p>\r
-\r
-               <div class='note'><?php echo  $result ?></div>\r
-\r
-               <ul>\r
-                       <li><a href="index.php?action=itemlist&amp;blogid=<?php echo $blog->getID()?>">View list of recent items for <?php echo htmlspecialchars($blog->getName())?></a></li>\r
-                       <li><a href="<?php echo $blog->getURL()?>">Visit your own site</a></li>\r
-               </ul>\r
-\r
-               <?php           $this->pagefoot();\r
-       }\r
-\r
-       /**\r
-         * Allows to edit previously made comments\r
-         */\r
-       function action_commentedit() {\r
-               global $member, $manager;\r
-\r
-               $commentid = intRequestVar('commentid');\r
-\r
-               $member->canAlterComment($commentid) or $this->disallow();\r
-\r
-               $comment = COMMENT::getComment($commentid);\r
-\r
-               $manager->notify('PrepareCommentForEdit',array('comment' => &$comment));\r
-\r
-               // change <br /> to \n\r
-               $comment['body'] = str_replace('<br />','',$comment['body']);\r
-\r
-               $comment['body'] = eregi_replace("<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>","\\1",$comment['body']);\r
-\r
-               $this->pagehead();\r
-\r
-               ?>\r
-               <h2><?php echo _EDITC_TITLE?></h2>\r
-\r
-               <form action="index.php" method="post"><div>\r
-\r
-               <input type="hidden" name="action" value="commentupdate" />\r
-               <?php $manager->addTicketHidden(); ?>\r
-               <input type="hidden" name="commentid" value="<?php echo  $commentid; ?>" />\r
-               <table><tr>\r
-                       <th colspan="2"><?php echo _EDITC_TITLE?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _EDITC_WHO?></td>\r
-                       <td>\r
-                       <?php                           if ($comment['member'])\r
-                                       echo $comment['member'] . " (" . _EDITC_MEMBER . ")";\r
-                               else\r
-                                       echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";\r
-                       ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _EDITC_WHEN?></td>\r
-                       <td><?php echo  date("Y-m-d @ H:i",$comment['timestamp']); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EDITC_HOST?></td>\r
-                       <td><?php echo  $comment['host']; ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EDITC_TEXT?></td>\r
-                       <td>\r
-                               <textarea name="body" tabindex="10" rows="10" cols="50"><?php                                   // htmlspecialchars not needed (things should be escaped already)\r
-                                       echo $comment['body'];\r
-                               ?></textarea>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _EDITC_EDIT?></td>\r
-                       <td><input type="submit"  tabindex="20" value="<?php echo _EDITC_EDIT?>" onclick="return checkSubmit();" /></td>\r
-               </tr></table>\r
-\r
-               </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_commentupdate() {\r
-               global $member, $manager;\r
-\r
-               $commentid = intRequestVar('commentid');\r
-\r
-               $member->canAlterComment($commentid) or $this->disallow();\r
-\r
-               $body = postVar('body');\r
-\r
-               // intercept words that are too long\r
-               if (eregi("[a-zA-Z0-9|\.,;:!\?=\/\\]{90,90}",$body) != false)\r
-                       $this->error(_ERROR_COMMENT_LONGWORD);\r
-\r
-               // check length\r
-               if (strlen($body)<3)\r
-                       $this->error(_ERROR_COMMENT_NOCOMMENT);\r
-               if (strlen($body)>5000)\r
-                       $this->error(_ERROR_COMMENT_TOOLONG);\r
-\r
-\r
-               // prepare body\r
-               $body = COMMENT::prepareBody($body);\r
-\r
-               // call plugins\r
-               $manager->notify('PreUpdateComment',array('body' => &$body));\r
-\r
-               $query =  'UPDATE '.sql_table('comment')\r
-                          . " SET cbody='" .addslashes($body). "'"\r
-                          . " WHERE cnumber=" . $commentid;\r
-               sql_query($query);\r
-\r
-               // get itemid\r
-               $res = sql_query('SELECT citem FROM '.sql_table('comment').' WHERE cnumber=' . $commentid);\r
-               $o = mysql_fetch_object($res);\r
-               $itemid = $o->citem;\r
-\r
-               if ($member->canAlterItem($itemid))\r
-                       $this->action_itemcommentlist($itemid);\r
-               else\r
-                       $this->action_browseowncomments();\r
-\r
-       }\r
-\r
-       function action_commentdelete() {\r
-               global $member, $manager;\r
-\r
-               $commentid = intRequestVar('commentid');\r
-\r
-               $member->canAlterComment($commentid) or $this->disallow();\r
-\r
-               $comment = COMMENT::getComment($commentid);\r
-\r
-               $body = strip_tags($comment['body']);\r
-               $body = htmlspecialchars(shorten($body, 300, '...'));\r
-\r
-               if ($comment['member'])\r
-                       $author = $comment['member'];\r
-               else\r
-                       $author = $comment['user'];\r
-\r
-               $this->pagehead();\r
-               ?>\r
-\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <p><?php echo _CONFIRMTXT_COMMENT?></p>\r
-\r
-                       <div class="note">\r
-                       <b><?php echo _EDITC_WHO?>:</b> <?php echo  $author ?>\r
-                       <br />\r
-                       <b><?php echo _EDITC_TEXT?>:</b> <?php echo  $body ?>\r
-                       </div>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                               <input type="hidden" name="action" value="commentdeleteconfirm" />\r
-                               <?php $manager->addTicketHidden() ?>\r
-                               <input type="hidden" name="commentid" value="<?php echo  $commentid; ?>" />\r
-                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_commentdeleteconfirm() {\r
-               global $member;\r
-\r
-               $commentid = intRequestVar('commentid');\r
-\r
-               // get item id first\r
-               $res = sql_query('SELECT citem FROM '.sql_table('comment') .' WHERE cnumber=' . $commentid);\r
-               $o = mysql_fetch_object($res);\r
-               $itemid = $o->citem;\r
-\r
-               $error = $this->deleteOneComment($commentid);\r
-               if ($error)\r
-                       $this->doError($error);\r
-\r
-               if ($member->canAlterItem($itemid))\r
-                       $this->action_itemcommentlist($itemid);\r
-               else\r
-                       $this->action_browseowncomments();\r
-       }\r
-\r
-       function deleteOneComment($commentid) {\r
-               global $member, $manager;\r
-\r
-               $commentid = intval($commentid);\r
-\r
-               if (!$member->canAlterComment($commentid))\r
-                       return _ERROR_DISALLOWED;\r
-\r
-               $manager->notify('PreDeleteComment', array('commentid' => $commentid));\r
-\r
-               // delete the comments associated with the item\r
-               $query = 'DELETE FROM '.sql_table('comment').' WHERE cnumber=' . $commentid;\r
-               sql_query($query);\r
-\r
-               $manager->notify('PostDeleteComment', array('commentid' => $commentid));\r
-\r
-               return '';\r
-       }\r
-\r
-       /**\r
-         * Usermanagement main\r
-         */\r
-       function action_usermanagement() {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-\r
-               echo '<h2>' . _MEMBERS_TITLE .'</h2>';\r
-\r
-               echo '<h3>' . _MEMBERS_CURRENT .'</h3>';\r
-\r
-               // show list of members with actions\r
-               $query =  'SELECT *'\r
-                          . ' FROM '.sql_table('member');\r
-               $template['content'] = 'memberlist';\r
-               $template['tabindex'] = 10;\r
-\r
-               $batch =& new BATCH('member');\r
-               $batch->showlist($query,'table',$template);\r
-\r
-               echo '<h3>' . _MEMBERS_NEW .'</h3>';\r
-               ?>\r
-                       <form method="post" action="index.php"><div>\r
-\r
-                       <input type="hidden" name="action" value="memberadd" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-\r
-                       <table>\r
-                       <tr>\r
-                               <th colspan="2"><?php echo _MEMBERS_NEW?></th>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_DISPLAY?> <?php help('shortnames');?>\r
-                                       <br /><small>(This is the name used to logon)</small>\r
-                               </td>\r
-                               <td><input tabindex="10010" name="name" size="16" maxlength="16" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_REALNAME?></td>\r
-                               <td><input name="realname" tabindex="10020" size="40" maxlength="60" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_PWD?></td>\r
-                               <td><input name="password" tabindex="10030" size="16" maxlength="40" type="password" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_REPPWD?></td>\r
-                               <td><input name="repeatpassword" tabindex="10035" size="16" maxlength="40" type="password" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_EMAIL?></td>\r
-                               <td><input name="email" tabindex="10040" size="40" maxlength="60" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_URL?></td>\r
-                               <td><input name="url" tabindex="10050" size="40" maxlength="100" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_SUPERADMIN?> <?php help('superadmin'); ?></td>\r
-                               <td><?php $this->input_yesno('admin',0,10060); ?> </td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_CANLOGIN?> <?php help('canlogin'); ?></td>\r
-                               <td><?php $this->input_yesno('canlogin',1,10070); ?></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_NOTES?></td>\r
-                               <td><input name="notes" maxlength="100" size="40" tabindex="10080" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_NEW?></td>\r
-                               <td><input type="submit" value="<?php echo _MEMBERS_NEW_BTN?>" tabindex="10090" onclick="return checkSubmit();" /></td>\r
-                       </tr></table>\r
-\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       /**\r
-         * Edit member settings\r
-         */\r
-       function action_memberedit() {\r
-               $this->action_editmembersettings(intRequestVar('memberid'));\r
-       }\r
-       function action_editmembersettings($memberid = '') {\r
-               global $member, $manager, $CONF;\r
-\r
-               if ($memberid == '')\r
-                       $memberid = $member->getID();\r
-\r
-               // check if allowed\r
-               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();\r
-\r
-               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';\r
-               $this->pagehead($extrahead);\r
-\r
-               // show message to go back to member overview (only for admins)\r
-               if ($member->isAdmin())\r
-                       echo '<a href="index.php?action=usermanagement">(' ._MEMBERS_BACKTOOVERVIEW. ')</a>';\r
-               else\r
-                       echo '<a href="index.php?action=overview">(' ._BACKHOME. ')</a>';\r
-\r
-               echo '<h2>' . _MEMBERS_EDIT . '</h2>';\r
-\r
-               $mem = MEMBER::createFromID($memberid);\r
-\r
-               ?>\r
-               <form method="post" action="index.php"><div>\r
-\r
-               <input type="hidden" name="action" value="changemembersettings" />\r
-               <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />\r
-               <?php $manager->addTicketHidden() ?>\r
-\r
-               <table><tr>\r
-                       <th colspan="2"><?php echo _MEMBERS_EDIT?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _MEMBERS_DISPLAY?> <?php help('shortnames');?>\r
-                               <br /><small><?php echo _MEMBERS_DISPLAY_INFO?></small>\r
-                       </td>\r
-                       <td>\r
-                       <?php if ($CONF['AllowLoginEdit'] || $member->isAdmin()) { ?>\r
-                               <input name="name" tabindex="10" maxlength="16" size="16" value="<?php echo  htmlspecialchars($mem->getDisplayName()); ?>" />\r
-                       <?php } else {\r
-                               echo htmlspecialchars($member->getDisplayName());\r
-                          }\r
-                       ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _MEMBERS_REALNAME?></td>\r
-                       <td><input name="realname" tabindex="20" maxlength="60" size="40" value="<?php echo  htmlspecialchars($mem->getRealName()); ?>" /></td>\r
-               </tr><tr>\r
-               <?php if ($CONF['AllowLoginEdit'] || $member->isAdmin()) { ?>\r
-                       <td><?php echo _MEMBERS_PWD?></td>\r
-                       <td><input type="password" tabindex="30" maxlength="40" size="16" name="password" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _MEMBERS_REPPWD?></td>\r
-                       <td><input type="password" tabindex="35" maxlength="40" size="16" name="repeatpassword" /></td>\r
-               <?php } ?>\r
-               </tr><tr>\r
-                       <td><?php echo _MEMBERS_EMAIL?>\r
-                               <br /><small><?php echo _MEMBERS_EMAIL_EDIT?></small>\r
-                       </td>\r
-                       <td><input name="email" tabindex="40" size="40" maxlength="60" value="<?php echo  htmlspecialchars($mem->getEmail()); ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _MEMBERS_URL?></td>\r
-                       <td><input name="url" tabindex="50" size="40" maxlength="100" value="<?php echo  htmlspecialchars($mem->getURL()); ?>" /></td>\r
-               <?php // only allow to change this by super-admins\r
-                  // we don't want normal users to 'upgrade' themselves to super-admins, do we? ;-)\r
-                  if ($member->isAdmin()) {\r
-               ?>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_SUPERADMIN?> <?php help('superadmin'); ?></td>\r
-                               <td><?php $this->input_yesno('admin',$mem->isAdmin(),60); ?></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _MEMBERS_CANLOGIN?> <?php help('canlogin'); ?></td>\r
-                               <td><?php $this->input_yesno('canlogin',$mem->canLogin(),70); ?></td>\r
-               <?php } ?>\r
-               </tr><tr>\r
-                       <td><?php echo _MEMBERS_NOTES?></td>\r
-                       <td><input name="notes" tabindex="80" size="40" maxlength="100" value="<?php echo  htmlspecialchars($mem->getNotes()); ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _MEMBERS_DEFLANG?> <?php help('language'); ?>\r
-                       </td>\r
-                       <td>\r
-\r
-                               <select name="deflang" tabindex="85">\r
-                                       <option value=""><?php echo _MEMBERS_USESITELANG?></option>\r
-                               <?php                           // show a dropdown list of all available languages\r
-                               global $DIR_LANG;\r
-                               $dirhandle = opendir($DIR_LANG);\r
-                               while ($filename = readdir($dirhandle)) {\r
-                                       if (ereg("^(.*)\.php$",$filename,$matches)) {\r
-                                               $name = $matches[1];\r
-                                               echo "<option value='$name'";\r
-                                               if ($name == $mem->getLanguage())\r
-                                                       echo " selected='selected'";\r
-                                               echo ">$name</option>";\r
-                                       }\r
-                               }\r
-                               closedir($dirhandle);\r
-\r
-                               ?>\r
-                               </select>\r
-\r
-                       </td>\r
-               </tr>\r
-               <?php\r
-                       // plugin options\r
-                       $this->_insertPluginOptions('member',$memberid);\r
-               ?>\r
-               <tr>\r
-                       <th colspan="2"><?php echo _MEMBERS_EDIT ?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _MEMBERS_EDIT?></td>\r
-                       <td><input type="submit" tabindex="90" value="<?php echo _MEMBERS_EDIT_BTN?>" onclick="return checkSubmit();" /></td>\r
-               </tr></table>\r
-\r
-               </div></form>\r
-\r
-               <?php\r
-                       echo '<h3>',_PLUGINS_EXTRA,'</h3>';\r
-\r
-                       $manager->notify(\r
-                               'MemberSettingsFormExtras',\r
-                               array(\r
-                                       'member' => &$mem\r
-                               )\r
-                       );\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-\r
-       function action_changemembersettings() {\r
-               global $member, $CONF, $manager;\r
-\r
-               $memberid = intRequestVar('memberid');\r
-\r
-               // check if allowed\r
-               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();\r
-\r
-               $name                   = trim(postVar('name'));\r
-               $realname               = trim(postVar('realname'));\r
-               $password               = postVar('password');\r
-               $repeatpassword = postVar('repeatpassword');\r
-               $email                  = postVar('email');\r
-               $url                    = postVar('url');\r
-\r
-               // Sometimes user didn't prefix the URL with http://, this cause a malformed URL. Let's fix it.\r
-               if (!eregi("^https?://", $url))\r
-                       $url = "http://".$url;\r
-\r
-               $admin                  = postVar('admin');\r
-               $canlogin               = postVar('canlogin');\r
-               $notes                  = postVar('notes');\r
-               $deflang                = postVar('deflang');\r
-\r
-               $mem = MEMBER::createFromID($memberid);\r
-\r
-               if ($CONF['AllowLoginEdit'] || $member->isAdmin()) {\r
-\r
-                       if (!isValidDisplayName($name))\r
-                               $this->error(_ERROR_BADNAME);\r
-\r
-                       if (($name != $mem->getDisplayName()) && MEMBER::exists($name))\r
-                               $this->error(_ERROR_NICKNAMEINUSE);\r
-\r
-                       if ($password != $repeatpassword)\r
-                               $this->error(_ERROR_PASSWORDMISMATCH);\r
-\r
-                       if ($password && (strlen($password) < 6))\r
-                               $this->error(_ERROR_PASSWORDTOOSHORT);\r
-               }\r
-\r
-               if (!isValidMailAddress($email))\r
-                       $this->error(_ERROR_BADMAILADDRESS);\r
-\r
-\r
-               if (!$realname)\r
-                       $this->error(_ERROR_REALNAMEMISSING);\r
-\r
-               if (($deflang != '') && (!checkLanguage($deflang)))\r
-                       $this->error(_ERROR_NOSUCHLANGUAGE);\r
-\r
-               // check if there will remain at least one site member with both the logon and admin rights\r
-               // (check occurs when taking away one of these rights from such a member)\r
-               if (    (!$admin && $mem->isAdmin() && $mem->canLogin())\r
-                        || (!$canlogin && $mem->isAdmin() && $mem->canLogin())\r
-                  )\r
-               {\r
-                       $r = sql_query('SELECT * FROM '.sql_table('member').' WHERE madmin=1 and mcanlogin=1');\r
-                       if (mysql_num_rows($r) < 2)\r
-                               $this->error(_ERROR_ATLEASTONEADMIN);\r
-               }\r
-\r
-               if ($CONF['AllowLoginEdit'] || $member->isAdmin()) {\r
-                       $mem->setDisplayName($name);\r
-                       if ($password)\r
-                               $mem->setPassword($password);\r
-               }\r
-\r
-               if ($newpass)\r
-                       $mem->setPassword($password);\r
-\r
-               $oldEmail = $mem->getEmail();\r
-\r
-               $mem->setRealName($realname);\r
-               $mem->setEmail($email);\r
-               $mem->setURL($url);\r
-               $mem->setNotes($notes);\r
-               $mem->setLanguage($deflang);\r
-\r
-\r
-               // only allow super-admins to make changes to the admin status\r
-               if ($member->isAdmin()) {\r
-                       $mem->setAdmin($admin);\r
-                       $mem->setCanLogin($canlogin);\r
-               }\r
-\r
-\r
-               $mem->write();\r
-\r
-               // if email changed, generate new password\r
-               if ($oldEmail != $mem->getEmail())\r
-               {\r
-                       $mem->sendActivationLink('addresschange', $oldEmail);\r
-                       // logout member\r
-                       $mem->newCookieKey();\r
-                       $member->logout();\r
-                       $this->action_login(_MSG_ACTIVATION_SENT, 0);\r
-                       return;\r
-               }\r
-\r
-\r
-               // store plugin options\r
-               $aOptions = requestArray('plugoption');\r
-               NucleusPlugin::_applyPluginOptions($aOptions);\r
-               $manager->notify('PostPluginOptionsUpdate',array('context' => 'member', 'memberid' => $memberid, 'member' => &$mem));\r
-\r
-               if (  ( $mem->getID() == $member->getID() )\r
-                  && ( $newpass || ( $mem->getDisplayName() != $member->getDisplayName() ) )\r
-                  ) {\r
-                       $mem->newCookieKey();\r
-                       $member->logout();\r
-                       $this->action_login(_MSG_LOGINAGAIN, 0);\r
-               } else {\r
-                       $this->action_overview(_MSG_SETTINGSCHANGED);\r
-               }\r
-       }\r
-\r
-       function action_memberadd() {\r
-               global $member;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               if (postVar('password') != postVar('repeatpassword'))\r
-                       $this->error(_ERROR_PASSWORDMISMATCH);\r
-               if (strlen(postVar('password')) < 6)\r
-                       $this->error(_ERROR_PASSWORDTOOSHORT);\r
-\r
-               $res = MEMBER::create(postVar('name'), postVar('realname'), postVar('password'), postVar('email'), postVar('url'), postVar('admin'), postVar('canlogin'), postVar('notes'));\r
-               if ($res != 1)\r
-                       $this->error($res);\r
-\r
-               $this->action_usermanagement();\r
-       }\r
-\r
-       /**\r
-        * Account activation\r
-        *\r
-        * @author dekarma\r
-        */\r
-       function action_activate() {\r
-\r
-               $key = getVar('key');\r
-               $this->_showActivationPage($key);\r
-       }\r
-\r
-       function _showActivationPage($key, $message = '')\r
-       {\r
-               global $manager;\r
-\r
-               // clean up old activation keys\r
-               MEMBER::cleanupActivationTable();\r
-\r
-               // get activation info\r
-               $info = MEMBER::getActivationInfo($key);\r
-\r
-               if (!$info)\r
-                       $this->error(_ERROR_ACTIVATE);\r
-\r
-               $mem = MEMBER::createFromId($info->vmember);\r
-\r
-               if (!$mem)\r
-                       $this->error(_ERROR_ACTIVATE);\r
-\r
-               $text = '';\r
-               $title = '';\r
-               $bNeedsPasswordChange = true;\r
-\r
-               switch ($info->vtype)\r
-               {\r
-                       case 'forgot':\r
-                               $title = _ACTIVATE_FORGOT_TITLE;\r
-                               $text = _ACTIVATE_FORGOT_TEXT;\r
-                               break;\r
-                       case 'register':\r
-                               $title = _ACTIVATE_REGISTER_TITLE;\r
-                               $text = _ACTIVATE_REGISTER_TEXT;\r
-                               break;\r
-                       case 'addresschange':\r
-                               $title = _ACTIVATE_CHANGE_TITLE;\r
-                               $text = _ACTIVATE_CHANGE_TEXT;\r
-                               $bNeedsPasswordChange = false;\r
-                               MEMBER::activate($key);\r
-                               break;\r
-               }\r
-\r
-               $aVars = array(\r
-                       'memberName' => htmlspecialchars($mem->getDisplayName())\r
-               );\r
-               $title = TEMPLATE::fill($title, $aVars);\r
-               $text = TEMPLATE::fill($text, $aVars);\r
-\r
-               $this->pagehead();\r
-\r
-                       echo '<h2>' , $title, '</h2>';\r
-                       echo '<p>' , $text, '</p>';\r
-\r
-                       if ($message != '')\r
-                       {\r
-                               echo '<p class="error">',$message,'</p>';\r
-                       }\r
-\r
-                       if ($bNeedsPasswordChange)\r
-                       {\r
-                               ?>\r
-                                       <div><form action="index.php" method="post">\r
-\r
-                                               <input type="hidden" name="action" value="activatesetpwd" />\r
-                                               <?php $manager->addTicketHidden() ?>\r
-                                               <input type="hidden" name="key" value="<?php echo htmlspecialchars($key) ?>" />\r
-\r
-                                               <table><tr>\r
-                                                       <td><?php echo _MEMBERS_PWD?></td>\r
-                                                       <td><input type="password" maxlength="40" size="16" name="password" /></td>\r
-                                               </tr><tr>\r
-                                                       <td><?php echo _MEMBERS_REPPWD?></td>\r
-                                                       <td><input type="password" maxlength="40" size="16" name="repeatpassword" /></td>\r
-                                               <?php\r
-\r
-                                                       global $manager;\r
-                                                       $manager->notify('FormExtra', array('type' => 'activation', 'member' => $mem));\r
-\r
-                                               ?>\r
-                                               </tr><tr>\r
-                                                       <td><?php echo _MEMBERS_SETPWD ?></td>\r
-                                                       <td><input type='submit' value='<?php echo _MEMBERS_SETPWD_BTN ?>' /></td>\r
-                                               </tr></table>\r
-\r
-\r
-                                       </form></div>\r
-\r
-                               <?php\r
-\r
-                       }\r
-\r
-               $this->pagefoot();\r
-\r
-       }\r
-\r
-       /**\r
-        * Account activation - set password part\r
-        *\r
-        * @author dekarma\r
-        */\r
-       function action_activatesetpwd() {\r
-\r
-               $key = postVar('key');\r
-\r
-               // clean up old activation keys\r
-               MEMBER::cleanupActivationTable();\r
-\r
-               // get activation info\r
-               $info = MEMBER::getActivationInfo($key);\r
-\r
-               if (!$info || ($info->type == 'addresschange'))\r
-                       return $this->_showActivationPage($key, _ERROR_ACTIVATE);\r
-\r
-               $mem = MEMBER::createFromId($info->vmember);\r
-\r
-               if (!$mem)\r
-                       return $this->_showActivationPage($key, _ERROR_ACTIVATE);\r
-\r
-               $password               = postVar('password');\r
-               $repeatpassword = postVar('repeatpassword');\r
-\r
-               if ($password != $repeatpassword)\r
-                       return $this->_showActivationPage($key, _ERROR_PASSWORDMISMATCH);\r
-\r
-               if ($password && (strlen($password) < 6))\r
-                       return $this->_showActivationPage($key, _ERROR_PASSWORDTOOSHORT);\r
-\r
-               $error = '';\r
-               global $manager;\r
-               $manager->notify('ValidateForm', array('type' => 'activation', 'member' => $mem, 'error' => &$error));\r
-               if ($error != '')\r
-                       return $this->_showActivationPage($key, $error);\r
-\r
-\r
-               // set password\r
-               $mem->setPassword($password);\r
-               $mem->write();\r
-\r
-               // do the activation\r
-               MEMBER::activate($key);\r
-\r
-               $this->pagehead();\r
-                       echo '<h2>',_ACTIVATE_SUCCESS_TITLE,'</h2>';\r
-                       echo '<p>',_ACTIVATE_SUCCESS_TEXT,'</p>';\r
-               $this->pagefoot();\r
-       }\r
-\r
-       /**\r
-         * Manage team\r
-         */\r
-       function action_manageteam() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               // check if allowed\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo "<p><a href='index.php?action=blogsettings&amp;blogid=$blogid'>(",_BACK_TO_BLOGSETTINGS,")</a></p>";\r
-\r
-               echo '<h2>' . _TEAM_TITLE . getBlogNameFromID($blogid) . '</h2>';\r
-\r
-               echo '<h3>' . _TEAM_CURRENT . '</h3>';\r
-\r
-\r
-\r
-               $query =  'SELECT tblog, tmember, mname, mrealname, memail, tadmin'\r
-                          . ' FROM '.sql_table('member').', '.sql_table('team')\r
-                          . ' WHERE tmember=mnumber and tblog=' . $blogid;\r
-\r
-               $template['content'] = 'teamlist';\r
-               $template['tabindex'] = 10;\r
-\r
-               $batch =& new BATCH('team');\r
-               $batch->showlist($query, 'table', $template);\r
-\r
-               ?>\r
-                       <h3><?php echo _TEAM_ADDNEW?></h3>\r
-\r
-                       <form method='post' action='index.php'><div>\r
-\r
-                       <input type='hidden' name='action' value='teamaddmember' />\r
-                       <input type='hidden' name='blogid' value='<?php echo  $blogid; ?>' />\r
-                       <?php $manager->addTicketHidden() ?>\r
-\r
-                       <table><tr>\r
-                               <td><?php echo _TEAM_CHOOSEMEMBER?></td>\r
-                               <td><?php                                       // TODO: try to make it so only non-team-members are listed\r
-                                       $query =  'SELECT mname as text, mnumber as value'\r
-                                                  . ' FROM '.sql_table('member');\r
-\r
-                                       $template['name'] = 'memberid';\r
-                                       $template['tabindex'] = 10000;\r
-                                       showlist($query,'select',$template);\r
-                               ?></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _TEAM_ADMIN?><?php help('teamadmin'); ?></td>\r
-                               <td><?php $this->input_yesno('admin',0,10020); ?></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _TEAM_ADD?></td>\r
-                               <td><input type='submit' value='<?php echo _TEAM_ADD_BTN?>' tabindex="10030" /></td>\r
-                       </tr></table>\r
-\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       /**\r
-         * Add member tot tram\r
-         */\r
-       function action_teamaddmember() {\r
-               global $member, $manager;\r
-\r
-               $memberid = intPostVar('memberid');\r
-               $blogid = intPostVar('blogid');\r
-               $admin = intPostVar('admin');\r
-\r
-               // check if allowed\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-               if (!$blog->addTeamMember($memberid, $admin))\r
-                       $this->error(_ERROR_ALREADYONTEAM);\r
-\r
-               $this->action_manageteam();\r
-\r
-       }\r
-\r
-       function action_teamdelete() {\r
-               global $member, $manager;\r
-\r
-               $memberid = intRequestVar('memberid');\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               // check if allowed\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $teammem = MEMBER::createFromID($memberid);\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <p><?php echo _CONFIRMTXT_TEAM1?><b><?php echo  $teammem->getDisplayName() ?></b><?php echo _CONFIRMTXT_TEAM2?><b><?php echo  htmlspecialchars(strip_tags($blog->getName())) ?></b>\r
-                       </p>\r
-\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                       <input type="hidden" name="action" value="teamdeleteconfirm" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />\r
-                       <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
-                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_teamdeleteconfirm() {\r
-               global $member;\r
-\r
-               $memberid = intRequestVar('memberid');\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $error = $this->deleteOneTeamMember($blogid, $memberid);\r
-               if ($error)\r
-                       $this->error($error);\r
-\r
-\r
-               $this->action_manageteam();\r
-       }\r
-\r
-       function deleteOneTeamMember($blogid, $memberid) {\r
-               global $member, $manager;\r
-\r
-               $blogid = intval($blogid);\r
-               $memberid = intval($memberid);\r
-\r
-               // check if allowed\r
-               if (!$member->blogAdminRights($blogid))\r
-                       return _ERROR_DISALLOWED;\r
-\r
-               // check if: - there remains at least one blog admin\r
-               //           - (there remains at least one team member)\r
-               $tmem = MEMBER::createFromID($memberid);\r
-\r
-               $manager->notify('PreDeleteTeamMember', array('member' => &$mem, 'blogid' => $blogid));\r
-\r
-               if ($tmem->isBlogAdmin($blogid)) {\r
-                       // check if there are more blog members left and at least one admin\r
-                       // (check for at least two admins before deletion)\r
-                       $query = 'SELECT * FROM '.sql_table('team') . ' WHERE tblog='.$blogid.' and tadmin=1';\r
-                       $r = sql_query($query);\r
-                       if (mysql_num_rows($r) < 2)\r
-                               return _ERROR_ATLEASTONEBLOGADMIN;\r
-               }\r
-\r
-               $query = 'DELETE FROM '.sql_table('team')." WHERE tblog=$blogid and tmember=$memberid";\r
-               sql_query($query);\r
-\r
-               $manager->notify('PostDeleteTeamMember', array('member' => &$mem, 'blogid' => $blogid));\r
-\r
-               return '';\r
-       }\r
-\r
-       function action_teamchangeadmin() {\r
-               global $member;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-               $memberid = intRequestVar('memberid');\r
-\r
-               // check if allowed\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $mem = MEMBER::createFromID($memberid);\r
-\r
-               // don't allow when there is only one admin at this moment\r
-               if ($mem->isBlogAdmin($blogid)) {\r
-                       $r = sql_query('SELECT * FROM '.sql_table('team') . " WHERE tblog=$blogid and tadmin=1");\r
-                       if (mysql_num_rows($r) == 1)\r
-                               $this->error(_ERROR_ATLEASTONEBLOGADMIN);\r
-               }\r
-\r
-               if ($mem->isBlogAdmin($blogid))\r
-                       $newval = 0;\r
-               else\r
-                       $newval = 1;\r
-\r
-               $query = 'UPDATE '.sql_table('team') ." SET tadmin=$newval WHERE tblog=$blogid and tmember=$memberid";\r
-               sql_query($query);\r
-\r
-               // only show manageteam if member did not change its own admin privileges\r
-               if ($member->isBlogAdmin($blogid))\r
-                       $this->action_manageteam();\r
-               else\r
-                       $this->action_overview(_MSG_ADMINCHANGED);\r
-       }\r
-\r
-       function action_blogsettings() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               // check if allowed\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';\r
-               $this->pagehead($extrahead);\r
-\r
-               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
-               ?>\r
-               <h2><?php echo _EBLOG_TITLE?>: '<?php echo $this->bloglink($blog)?>'</h2>\r
-\r
-               <h3><?php echo _EBLOG_TEAM_TITLE?></h3>\r
-\r
-               <p>Members currently on your team:\r
-               <?php\r
-                       $res = sql_query('SELECT mname, mrealname FROM ' . sql_table('member') . ',' . sql_table('team') . ' WHERE mnumber=tmember AND tblog=' . intval($blogid));\r
-                       $aMemberNames = array();\r
-                       while ($o = mysql_fetch_object($res))\r
-                               array_push($aMemberNames, htmlspecialchars($o->mname) . ' (' . htmlspecialchars($o->mrealname). ')');\r
-                       echo implode(',', $aMemberNames);\r
-               ?>\r
-               </p>\r
-\r
-\r
-\r
-               <p>\r
-               <a href="index.php?action=manageteam&amp;blogid=<?php echo $blogid?>"><?php echo _EBLOG_TEAM_TEXT?></a>\r
-               </p>\r
-\r
-               <h3><?php echo _EBLOG_SETTINGS_TITLE?></h3>\r
-\r
-               <form method="post" action="index.php"><div>\r
-\r
-               <input type="hidden" name="action" value="blogsettingsupdate" />\r
-               <?php $manager->addTicketHidden() ?>\r
-               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
-               <table><tr>\r
-                       <td><?php echo _EBLOG_NAME?></td>\r
-                       <td><input name="name" tabindex="10" size="40" maxlength="60" value="<?php echo  htmlspecialchars($blog->getName()) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_SHORTNAME?> <?php help('shortblogname'); ?>\r
-                               <?php echo _EBLOG_SHORTNAME_EXTRA?>\r
-                       </td>\r
-                       <td><input name="shortname" tabindex="20" maxlength="15" size="15" value="<?php echo  htmlspecialchars($blog->getShortName()) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_DESC?></td>\r
-                       <td><input name="desc" tabindex="30" maxlength="200" size="40" value="<?php echo  htmlspecialchars($blog->getDescription()) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_URL?></td>\r
-                       <td><input name="url" tabindex="40" size="40" maxlength="100" value="<?php echo  htmlspecialchars($blog->getURL()) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_DEFSKIN?>\r
-                               <?php help('blogdefaultskin'); ?>\r
-                       </td>\r
-                       <td>\r
-                               <?php\r
-                                       $query =  'SELECT sdname as text, sdnumber as value'\r
-                                                  . ' FROM '.sql_table('skin_desc');\r
-                                       $template['name'] = 'defskin';\r
-                                       $template['selected'] = $blog->getDefaultSkin();\r
-                                       $template['tabindex'] = 50;\r
-                                       showlist($query,'select',$template);\r
-                               ?>\r
-\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_LINEBREAKS?> <?php help('convertbreaks'); ?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('convertbreaks',$blog->convertBreaks(),55); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_ALLOWPASTPOSTING?> <?php help('allowpastposting'); ?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('allowpastposting',$blog->allowPastPosting(),57); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_DISABLECOMMENTS?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('comments',$blog->commentsEnabled(),60); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_ANONYMOUS?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('public',$blog->isPublic(),70); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_NOTIFY?> <?php help('blognotify'); ?></td>\r
-                       <td><input name="notify" tabindex="80" maxlength="60" size="40" value="<?php echo  htmlspecialchars($blog->getNotifyAddress()); ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_NOTIFY_ON?></td>\r
-                       <td>\r
-                               <input name="notifyComment" value="3" type="checkbox" tabindex="81" id="notifyComment"\r
-                                       <?php if  ($blog->notifyOnComment()) echo "checked='checked'" ?>\r
-                               /><label for="notifyComment"><?php echo _EBLOG_NOTIFY_COMMENT?></label>\r
-                               <br />\r
-                               <input name="notifyVote" value="5" type="checkbox" tabindex="82" id="notifyVote"\r
-                                       <?php if  ($blog->notifyOnVote()) echo "checked='checked'" ?>\r
-                               /><label for="notifyVote"><?php echo _EBLOG_NOTIFY_KARMA?></label>\r
-                               <br />\r
-                               <input name="notifyNewItem" value="7" type="checkbox" tabindex="83" id="notifyNewItem"\r
-                                       <?php if  ($blog->notifyOnNewItem()) echo "checked='checked'" ?>\r
-                               /><label for="notifyNewItem"><?php echo _EBLOG_NOTIFY_ITEM?></label>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_PING?> <?php help('pinguserland'); ?></td>\r
-                       <td><?php $this->input_yesno('pinguserland',$blog->pingUserland(),85); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_MAXCOMMENTS?> <?php help('blogmaxcomments'); ?></td>\r
-                       <td><input name="maxcomments" tabindex="90" size="3" value="<?php echo  htmlspecialchars($blog->getMaxComments()); ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_UPDATE?> <?php help('blogupdatefile'); ?></td>\r
-                       <td><input name="update" tabindex="100" size="40" maxlength="60" value="<?php echo  htmlspecialchars($blog->getUpdateFile()) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_DEFCAT?></td>\r
-                       <td>\r
-                               <?php\r
-                                       $query =  'SELECT cname as text, catid as value'\r
-                                                  . ' FROM '.sql_table('category')\r
-                                                  . ' WHERE cblog=' . $blog->getID();\r
-                                       $template['name'] = 'defcat';\r
-                                       $template['selected'] = $blog->getDefaultCategory();\r
-                                       $template['tabindex'] = 110;\r
-                                       showlist($query,'select',$template);\r
-                               ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_OFFSET?> <?php help('blogtimeoffset'); ?>\r
-                               <br /><?php echo _EBLOG_STIME?> <b><?php echo  strftime("%H:%M",time()); ?></b>\r
-                               <br /><?php echo _EBLOG_BTIME?> <b><?php echo  strftime("%H:%M",$blog->getCorrectTime()); ?></b>\r
-                               </td>\r
-                       <td><input name="timeoffset" tabindex="120" size="3" value="<?php echo  htmlspecialchars($blog->getTimeOffset()); ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_SEARCH?> <?php help('blogsearchable'); ?></td>\r
-                       <td><?php $this->input_yesno('searchable',$blog->getSearchable(),122); ?></td>\r
-               </tr>\r
-               <?php\r
-                       // plugin options\r
-                       $this->_insertPluginOptions('blog',$blogid);\r
-               ?>\r
-               <tr>\r
-                       <th colspan="2"><?php echo _EBLOG_CHANGE?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_CHANGE?></td>\r
-                       <td><input type="submit" tabindex="130" value="<?php echo _EBLOG_CHANGE_BTN?>" onclick="return checkSubmit();" /></td>\r
-               </tr></table>\r
-\r
-               </div></form>\r
-\r
-               <h3><?php echo _EBLOG_CAT_TITLE?></h3>\r
-\r
-\r
-               <?php\r
-               $query = 'SELECT * FROM '.sql_table('category').' WHERE cblog='.$blog->getID().' ORDER BY cname';\r
-               $template['content'] = 'categorylist';\r
-               $template['tabindex'] = 200;\r
-\r
-               $batch =& new BATCH('category');\r
-               $batch->showlist($query,'table',$template);\r
-\r
-               ?>\r
-\r
-\r
-               <form action="index.php" method="post"><div>\r
-               <input name="action" value="categorynew" type="hidden" />\r
-               <?php $manager->addTicketHidden() ?>\r
-               <input name="blogid" value="<?php echo $blog->getID()?>" type="hidden" />\r
-\r
-               <table><tr>\r
-                       <th colspan="2"><?php echo _EBLOG_CAT_CREATE?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_CAT_NAME?></td>\r
-                       <td><input name="cname" size="40" maxlength="40" tabindex="300" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_CAT_DESC?></td>\r
-                       <td><input name="cdesc" size="40" maxlength="200" tabindex="310" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_CAT_CREATE?></td>\r
-                       <td><input type="submit" value="<?php echo _EBLOG_CAT_CREATE?>" tabindex="320" /></td>\r
-               </tr></table>\r
-\r
-               </div></form>\r
-\r
-               <?php\r
-\r
-                       echo '<h3>',_PLUGINS_EXTRA,'</h3>';\r
-\r
-                       $manager->notify(\r
-                               'BlogSettingsFormExtras',\r
-                               array(\r
-                                       'blog' => &$blog\r
-                               )\r
-                       );\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_categorynew() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $cname = postVar('cname');\r
-               $cdesc = postVar('cdesc');\r
-\r
-               if (!isValidCategoryName($cname))\r
-                       $this->error(_ERROR_BADCATEGORYNAME);\r
-\r
-               $query = 'SELECT * FROM '.sql_table('category') . ' WHERE cname=\'' . addslashes($cname).'\' and cblog=' . intval($blogid);\r
-               $res = sql_query($query);\r
-               if (mysql_num_rows($res) > 0)\r
-                       $this->error(_ERROR_DUPCATEGORYNAME);\r
-\r
-               $blog           =& $manager->getBlog($blogid);\r
-               $newCatID       =  $blog->createNewCategory($cname, $cdesc);\r
-\r
-               $this->action_blogsettings();\r
-       }\r
-\r
-\r
-       function action_categoryedit($catid = '', $blogid = '', $desturl = '') {\r
-               global $member, $manager;\r
-\r
-               if ($blogid == '')\r
-                       $blogid = intGetVar('blogid');\r
-               else\r
-                       $blogid = intval($blogid);\r
-               if ($catid == '')\r
-                       $catid = intGetVar('catid');\r
-               else\r
-                       $catid = intval($catid);\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $res = sql_query('SELECT * FROM '.sql_table('category')." WHERE cblog=$blogid AND catid=$catid");\r
-               $obj = mysql_fetch_object($res);\r
-\r
-               $cname = $obj->cname;\r
-               $cdesc = $obj->cdesc;\r
-\r
-               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';\r
-               $this->pagehead($extrahead);\r
-\r
-               ?>\r
-               <h2><?php echo _EBLOG_CAT_UPDATE?> '<?php echo htmlspecialchars($cname)?>'</h2>\r
-               <form method='post' action='index.php'><div>\r
-               <input name="blogid" type="hidden" value="<?php echo $blogid?>" />\r
-               <input name="catid" type="hidden" value="<?php echo $catid?>" />\r
-               <input name="desturl" type="hidden" value="<?php echo htmlspecialchars($desturl) ?>" />\r
-               <input name="action" type="hidden" value="categoryupdate" />\r
-               <?php $manager->addTicketHidden(); ?>\r
-\r
-               <table><tr>\r
-                       <th colspan="2"><?php echo _EBLOG_CAT_UPDATE ?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_CAT_NAME?></td>\r
-                       <td><input type="text" name="cname" value="<?php echo htmlspecialchars($cname)?>" size="40" maxlength="40" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_CAT_DESC?></td>\r
-                       <td><input type="text" name="cdesc" value="<?php echo htmlspecialchars($cdesc)?>" size="40" maxlength="200" /></td>\r
-               </tr>\r
-               <?php\r
-                       // insert plugin options\r
-                       $this->_insertPluginOptions('category',$catid);\r
-               ?>\r
-               <tr>\r
-                       <th colspan="2"><?php echo _EBLOG_CAT_UPDATE ?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_CAT_UPDATE?></td>\r
-                       <td><input type="submit" value="<?php echo _EBLOG_CAT_UPDATE_BTN?>" /></td>\r
-               </tr></table>\r
-\r
-               </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-\r
-       function action_categoryupdate() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intPostVar('blogid');\r
-               $catid = intPostVar('catid');\r
-               $cname = postVar('cname');\r
-               $cdesc = postVar('cdesc');\r
-               $desturl = postVar('desturl');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               if (!isValidCategoryName($cname))\r
-                       $this->error(_ERROR_BADCATEGORYNAME);\r
-\r
-               $query = 'SELECT * FROM '.sql_table('category').' WHERE cname=\'' . addslashes($cname).'\' and cblog=' . intval($blogid) . " and not(catid=$catid)";\r
-               $res = sql_query($query);\r
-               if (mysql_num_rows($res) > 0)\r
-                       $this->error(_ERROR_DUPCATEGORYNAME);\r
-\r
-               $query =  'UPDATE '.sql_table('category').' SET'\r
-                          . " cname='" . addslashes($cname) . "',"\r
-                          . " cdesc='" . addslashes($cdesc) . "'"\r
-                          . " WHERE catid=" . $catid;\r
-\r
-               sql_query($query);\r
-\r
-               // store plugin options\r
-               $aOptions = requestArray('plugoption');\r
-               NucleusPlugin::_applyPluginOptions($aOptions);\r
-               $manager->notify('PostPluginOptionsUpdate',array('context' => 'category', 'catid' => $catid));\r
-\r
-\r
-               if ($desturl) {\r
-                       redirect($desturl);\r
-                       exit;\r
-               } else {\r
-                       $this->action_blogsettings();\r
-               }\r
-       }\r
-\r
-       function action_categorydelete() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-               $catid = intRequestVar('catid');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               // check if the category is valid\r
-               if (!$blog->isValidCategory($catid))\r
-                       $this->error(_ERROR_NOSUCHCATEGORY);\r
-\r
-               // don't allow deletion of default category\r
-               if ($blog->getDefaultCategory() == $catid)\r
-                       $this->error(_ERROR_DELETEDEFCATEGORY);\r
-\r
-               // check if catid is the only category left for blogid\r
-               $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid;\r
-               $res = sql_query($query);\r
-               if (mysql_num_rows($res) == 1)\r
-                       $this->error(_ERROR_DELETELASTCATEGORY);\r
-\r
-\r
-               $this->pagehead();\r
-               ?>\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <div>\r
-                       <?php echo _CONFIRMTXT_CATEGORY?><b><?php echo  $blog->getCategoryName($catid)?></b>\r
-                       </div>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                       <input type="hidden" name="action" value="categorydeleteconfirm" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="blogid" value="<?php echo $blogid?>" />\r
-                       <input type="hidden" name="catid" value="<?php echo $catid?>" />\r
-                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_categorydeleteconfirm() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-               $catid = intRequestVar('catid');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $error = $this->deleteOneCategory($catid);\r
-               if ($error)\r
-                       $this->error($error);\r
-\r
-               $this->action_blogsettings();\r
-       }\r
-\r
-       function deleteOneCategory($catid) {\r
-               global $manager, $member;\r
-\r
-               $catid = intval($catid);\r
-\r
-               $manager->notify('PreDeleteCategory', array('catid' => $catid));\r
-\r
-               $blogid = getBlogIDFromCatID($catid);\r
-\r
-               if (!$member->blogAdminRights($blogid))\r
-                       return ERROR_DISALLOWED;\r
-\r
-               // get blog\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               // check if the category is valid\r
-               if (!$blog || !$blog->isValidCategory($catid))\r
-                       return _ERROR_NOSUCHCATEGORY;\r
-\r
-               $destcatid = $blog->getDefaultCategory();\r
-\r
-               // don't allow deletion of default category\r
-               if ($blog->getDefaultCategory() == $catid)\r
-                       return _ERROR_DELETEDEFCATEGORY;\r
-\r
-               // check if catid is the only category left for blogid\r
-               $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid;\r
-               $res = sql_query($query);\r
-               if (mysql_num_rows($res) == 1)\r
-                       return _ERROR_DELETELASTCATEGORY;\r
-\r
-               // change category for all items to the default category\r
-               $query = 'UPDATE '.sql_table('item')." SET icat=$destcatid WHERE icat=$catid";\r
-               sql_query($query);\r
-\r
-               // delete all associated plugin options\r
-               NucleusPlugin::_deleteOptionValues('category', $catid);\r
-\r
-               // delete category\r
-               $query = 'DELETE FROM '.sql_table('category').' WHERE catid=' .$catid;\r
-               sql_query($query);\r
-\r
-               $manager->notify('PostDeleteCategory', array('catid' => $catid));\r
-\r
-       }\r
-\r
-       function moveOneCategory($catid, $destblogid) {\r
-               global $manager, $member;\r
-\r
-               $catid = intval($catid);\r
-               $destblogid = intval($destblogid);\r
-\r
-               $blogid = getBlogIDFromCatID($catid);\r
-\r
-               // mover should have admin rights on both blogs\r
-               if (!$member->blogAdminRights($blogid))\r
-                       return _ERROR_DISALLOWED;\r
-               if (!$member->blogAdminRights($destblogid))\r
-                       return _ERROR_DISALLOWED;\r
-\r
-               // cannot move to self\r
-               if ($blogid == $destblogid)\r
-                       return _ERROR_MOVETOSELF;\r
-\r
-               // get blogs\r
-               $blog =& $manager->getBlog($blogid);\r
-               $destblog =& $manager->getBlog($destblogid);\r
-\r
-               // check if the category is valid\r
-               if (!$blog || !$blog->isValidCategory($catid))\r
-                       return _ERROR_NOSUCHCATEGORY;\r
-\r
-               // don't allow default category to be moved\r
-               if ($blog->getDefaultCategory() == $catid)\r
-                       return _ERROR_MOVEDEFCATEGORY;\r
-\r
-               $manager->notify(\r
-                       'PreMoveCategory',\r
-                       array(\r
-                               'catid' => &$catid,\r
-                               'sourceblog' => &$blog,\r
-                               'destblog' => &$destblog\r
-                       )\r
-               );\r
-\r
-               // update comments table (cblog)\r
-               $query = 'SELECT inumber FROM '.sql_table('item').' WHERE icat='.$catid;\r
-               $items = sql_query($query);\r
-               while ($oItem = mysql_fetch_object($items)) {\r
-                       sql_query('UPDATE '.sql_table('comment').' SET cblog='.$destblogid.' WHERE citem='.$oItem->inumber);\r
-               }\r
-\r
-               // update items (iblog)\r
-               $query = 'UPDATE '.sql_table('item').' SET iblog='.$destblogid.' WHERE icat='.$catid;\r
-               sql_query($query);\r
-\r
-               // move category\r
-               $query = 'UPDATE '.sql_table('category').' SET cblog='.$destblogid.' WHERE catid='.$catid;\r
-               sql_query($query);\r
-\r
-               $manager->notify(\r
-                       'PostMoveCategory',\r
-                       array(\r
-                               'catid' => &$catid,\r
-                               'sourceblog' => &$blog,\r
-                               'destblog' => $destblog\r
-                       )\r
-               );\r
-\r
-       }\r
-\r
-       function action_blogsettingsupdate() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $notify                 = trim(postVar('notify'));\r
-               $shortname              = trim(postVar('shortname'));\r
-               $updatefile             = trim(postVar('update'));\r
-\r
-               $notifyComment  = intPostVar('notifyComment');\r
-               $notifyVote             = intPostVar('notifyVote');\r
-               $notifyNewItem  = intPostVar('notifyNewItem');\r
-\r
-               if ($notifyComment == 0)        $notifyComment = 1;\r
-               if ($notifyVote == 0)           $notifyVote = 1;\r
-               if ($notifyNewItem == 0)        $notifyNewItem = 1;\r
-\r
-               $notifyType = $notifyComment * $notifyVote * $notifyNewItem;\r
-\r
-\r
-               if ($notify) {\r
-                       $not =& new NOTIFICATION($notify);\r
-                       if (!$not->validAddresses())\r
-                               $this->error(_ERROR_BADNOTIFY);\r
-\r
-               }\r
-\r
-               if (!isValidShortName($shortname))\r
-                       $this->error(_ERROR_BADSHORTBLOGNAME);\r
-\r
-               if (($blog->getShortName() != $shortname) && $manager->existsBlog($shortname))\r
-                       $this->error(_ERROR_DUPSHORTBLOGNAME);\r
-\r
-               // check if update file is writable\r
-               if ($updatefile && !is_writeable($updatefile))\r
-                       $this->error(_ERROR_UPDATEFILE);\r
-\r
-               $blog->setName(trim(postVar('name')));\r
-               $blog->setShortName($shortname);\r
-               $blog->setNotifyAddress($notify);\r
-               $blog->setNotifyType($notifyType);\r
-               $blog->setMaxComments(postVar('maxcomments'));\r
-               $blog->setCommentsEnabled(postVar('comments'));\r
-               $blog->setTimeOffset(postVar('timeoffset'));\r
-               $blog->setUpdateFile($updatefile);\r
-               $blog->setURL(trim(postVar('url')));\r
-               $blog->setDefaultSkin(intPostVar('defskin'));\r
-               $blog->setDescription(trim(postVar('desc')));\r
-               $blog->setPublic(postVar('public'));\r
-               $blog->setPingUserland(postVar('pinguserland'));\r
-               $blog->setConvertBreaks(intPostVar('convertbreaks'));\r
-               $blog->setAllowPastPosting(intPostVar('allowpastposting'));\r
-               $blog->setDefaultCategory(intPostVar('defcat'));\r
-               $blog->setSearchable(intPostVar('searchable'));\r
-\r
-               $blog->writeSettings();\r
-\r
-               // store plugin options\r
-               $aOptions = requestArray('plugoption');\r
-               NucleusPlugin::_applyPluginOptions($aOptions);\r
-               $manager->notify('PostPluginOptionsUpdate',array('context' => 'blog', 'blogid' => $blogid, 'blog' => &$blog));\r
-\r
-\r
-               $this->action_overview(_MSG_SETTINGSCHANGED);\r
-       }\r
-\r
-       function action_deleteblog() {\r
-               global $member, $CONF, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               // check if blog is default blog\r
-               if ($CONF['DefaultBlog'] == $blogid)\r
-                       $this->error(_ERROR_DELDEFBLOG);\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <p><?php echo _WARNINGTXT_BLOGDEL?>\r
-                       </p>\r
-\r
-                       <div>\r
-                       <?php echo _CONFIRMTXT_BLOG?><b><?php echo  htmlspecialchars($blog->getName())?></b>\r
-                       </div>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                       <input type="hidden" name="action" value="deleteblogconfirm" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
-                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_deleteblogconfirm() {\r
-               global $member, $CONF, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $manager->notify('PreDeleteBlog', array('blogid' => $blogid));\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               // check if blog is default blog\r
-               if ($CONF['DefaultBlog'] == $blogid)\r
-                       $this->error(_ERROR_DELDEFBLOG);\r
-\r
-               // delete all comments\r
-               $query = 'DELETE FROM '.sql_table('comment').' WHERE cblog='.$blogid;\r
-               sql_query($query);\r
-\r
-               // delete all items\r
-               $query = 'DELETE FROM '.sql_table('item').' WHERE iblog='.$blogid;\r
-               sql_query($query);\r
-\r
-               // delete all team members\r
-               $query = 'DELETE FROM '.sql_table('team').' WHERE tblog='.$blogid;\r
-               sql_query($query);\r
-\r
-               // delete all bans\r
-               $query = 'DELETE FROM '.sql_table('ban').' WHERE blogid='.$blogid;\r
-               sql_query($query);\r
-\r
-               // delete all categories\r
-               $query = 'DELETE FROM '.sql_table('category').' WHERE cblog='.$blogid;\r
-               sql_query($query);\r
-\r
-               // delete all associated plugin options\r
-               NucleusPlugin::_deleteOptionValues('blog', $blogid);\r
-\r
-               // delete the blog itself\r
-               $query = 'DELETE FROM '.sql_table('blog').' WHERE bnumber='.$blogid;\r
-               sql_query($query);\r
-\r
-               $manager->notify('PostDeleteBlog', array('blogid' => $blogid));\r
-\r
-               $this->action_overview(_DELETED_BLOG);\r
-       }\r
-\r
-       function action_memberdelete() {\r
-               global $member, $manager;\r
-\r
-               $memberid = intRequestVar('memberid');\r
-\r
-               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();\r
-\r
-               $mem = MEMBER::createFromID($memberid);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <p><?php echo _CONFIRMTXT_MEMBER?><b><?php echo  $mem->getDisplayName() ?></b>\r
-                       </p>\r
-\r
-                       <p>\r
-                       Please note that media files will <b>NOT</b> be deleted. (At least not in this Nucleus version)\r
-                       </p>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                       <input type="hidden" name="action" value="memberdeleteconfirm" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />\r
-                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_memberdeleteconfirm() {\r
-               global $member;\r
-\r
-               $memberid = intRequestVar('memberid');\r
-\r
-               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();\r
-\r
-               $error = $this->deleteOneMember($memberid);\r
-               if ($error)\r
-                       $this->error($error);\r
-\r
-               if ($member->isAdmin())\r
-                       $this->action_usermanagement();\r
-               else\r
-                       $this->action_overview(_DELETED_MEMBER);\r
-       }\r
-\r
-       // (static)\r
-       function deleteOneMember($memberid) {\r
-               global $manager;\r
-\r
-               $memberid = intval($memberid);\r
-               $mem = MEMBER::createFromID($memberid);\r
-\r
-               if (!$mem->canBeDeleted())\r
-                       return _ERROR_DELETEMEMBER;\r
-\r
-               $manager->notify('PreDeleteMember', array('member' => &$mem));\r
-\r
-               $query = 'DELETE FROM '.sql_table('member').' WHERE mnumber='.$memberid;\r
-               sql_query($query);\r
-\r
-               $query = 'DELETE FROM '.sql_table('team').' WHERE tmember='.$memberid;\r
-               sql_query($query);\r
-\r
-               $query = 'DELETE FROM '.sql_table('activation').' WHERE vmember='.$memberid;\r
-               sql_query($query);\r
-\r
-               // delete all associated plugin options\r
-               NucleusPlugin::_deleteOptionValues('member', $memberid);\r
-\r
-               $manager->notify('PostDeleteMember', array('member' => &$mem));\r
-\r
-               return '';\r
-       }\r
-\r
-       function action_createnewlog() {\r
-               global $member, $CONF, $manager;\r
-\r
-               // Only Super-Admins can do this\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-               ?>\r
-               <h2><?php echo _EBLOG_CREATE_TITLE?></h2>\r
-\r
-               <h3>_ADMIN_NOTABILIA</h3>\r
-\r
-               <p>_ADMIN_PLEASE_READ</p>\r
-\r
-               <p>_ADMIN_HOW_TO_ACCESS</p>\r
-\r
-               <ol>\r
-                       <li>_ADMIN_SIMPLE_WAY</li>\r
-                       <li>_ADMIN_DIFFICULT_WAY</li>\r
-               </ol>\r
-\r
-               <h3>_ADMIN_HOW_TO_CREATE</h3>\r
-\r
-               <p>\r
-               <?php echo _EBLOG_CREATE_TEXT?>\r
-               </p>\r
-\r
-               <form method="post" action="index.php"><div>\r
-\r
-               <input type="hidden" name="action" value="addnewlog" />\r
-               <?php $manager->addTicketHidden() ?>\r
-\r
-\r
-               <table><tr>\r
-                       <td><?php echo _EBLOG_NAME?></td>\r
-                       <td><input name="name" tabindex="10" size="40" maxlength="60" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_SHORTNAME?>\r
-                               <?php help('shortblogname'); ?>\r
-                       </td>\r
-                       <td><input name="shortname" tabindex="20" maxlength="15" size="15" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_DESC?></td>\r
-                       <td><input name="desc" tabindex="30" maxlength="200" size="40" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_DEFSKIN?>\r
-                               <?php help('blogdefaultskin'); ?>\r
-                       </td>\r
-                       <td>\r
-                               <?php\r
-                                       $query =  'SELECT sdname as text, sdnumber as value'\r
-                                                  . ' FROM '.sql_table('skin_desc');\r
-                                       $template['name'] = 'defskin';\r
-                                       $template['tabindex'] = 50;\r
-                                       $template['selected'] = $CONF['BaseSkin'];      // set default selected skin to be globally defined base skin\r
-                                       showlist($query,'select',$template);\r
-                               ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_OFFSET?>\r
-                               <?php help('blogtimeoffset'); ?>\r
-                               <br /><?php echo _EBLOG_STIME?> <b><?php echo  strftime("%H:%M",time()); ?></b>\r
-                       </td>\r
-                       <td><input name="timeoffset" tabindex="110" size="3" value="0" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_ADMIN?>\r
-                               <?php help('blogadmin'); ?>\r
-                       </td>\r
-                       <td><?php echo _EBLOG_ADMIN_MSG?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _EBLOG_CREATE?></td>\r
-                       <td><input type="submit" tabindex="120" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
-               </tr></table>\r
-\r
-               </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_addnewlog() {\r
-               global $member, $manager, $CONF;\r
-\r
-               // Only Super-Admins can do this\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $bname                  = trim(postVar('name'));\r
-               $bshortname             = trim(postVar('shortname'));\r
-               $btimeoffset    = postVar('timeoffset');\r
-               $bdesc                  = trim(postVar('desc'));\r
-               $bdefskin               = postVar('defskin');\r
-\r
-               if (!isValidShortName($bshortname))\r
-                       $this->error(_ERROR_BADSHORTBLOGNAME);\r
-\r
-               if ($manager->existsBlog($bshortname))\r
-                       $this->error(_ERROR_DUPSHORTBLOGNAME);\r
-\r
-               $manager->notify(\r
-                       'PreAddBlog',\r
-                       array(\r
-                               'name' => &$bname,\r
-                               'shortname' => &$bshortname,\r
-                               'timeoffset' => &$btimeoffset,\r
-                               'description' => &$bdescription,\r
-                               'defaultskin' => &$bdefskin\r
-                       )\r
-               );\r
-\r
-\r
-               // add slashes for sql queries\r
-               $bname =                addslashes($bname);\r
-               $bshortname =   addslashes($bshortname);\r
-               $btimeoffset =  addslashes($btimeoffset);\r
-               $bdesc =                addslashes($bdesc);\r
-               $bdefskin =     addslashes($bdefskin);\r
-\r
-               // create blog\r
-               $query = 'INSERT INTO '.sql_table('blog')." (bname, bshortname, bdesc, btimeoffset, bdefskin) VALUES ('$bname', '$bshortname', '$bdesc', '$btimeoffset', '$bdefskin')";\r
-               sql_query($query);\r
-               $blogid = mysql_insert_id();\r
-               $blog   =& $manager->getBlog($blogid);\r
-\r
-               // create new category\r
-               sql_query('INSERT INTO '.sql_table('category')." (cblog, cname, cdesc) VALUES ($blogid, 'General','Items that do not fit in other categories')");\r
-               $catid = mysql_insert_id();\r
-\r
-               // set as default category\r
-               $blog->setDefaultCategory($catid);\r
-               $blog->writeSettings();\r
-\r
-               // create team member\r
-               $memberid = $member->getID();\r
-               $query = 'INSERT INTO '.sql_table('team')." (tmember, tblog, tadmin) VALUES ($memberid, $blogid, 1)";\r
-               sql_query($query);\r
-\r
-\r
-               $blog->additem($blog->getDefaultCategory(),'First Item','これはあなたのweblogにおける最初のアイテムです。自由に削除していただいてかまいません。','',$blogid, $memberid,$blog->getCorrectTime(),0,0,0);\r
-\r
-               $manager->notify(\r
-                       'PostAddBlog',\r
-                       array(\r
-                               'blog' => &$blog\r
-                       )\r
-               );\r
-\r
-               $manager->notify(\r
-                       'PostAddCategory',\r
-                       array(\r
-                               'catid' => $catid\r
-                       )\r
-               );\r
-\r
-               $this->pagehead();\r
-               ?>\r
-               <h2>新しいweblogが作成されました</h2>\r
-\r
-               <p>新しいweblog 「<?php echo htmlspecialchars($bname)?>」が作成されました。続けて、これにアクセスするために以下のどちらかの手順に進んでください。</p>\r
-\r
-               <ol>\r
-                       <li><a href="#index_php">簡単な方法: 下のコードを貼付けた <code><?php echo htmlspecialchars($bshortname)?>.php</code> というファイルを作成する</a></li>\r
-                       <li><a href="#skins">高度な方法: 現在使用しているスキンに新しいweblogを展開させるための記述を加える</a></li>\r
-               </ol>\r
-\r
-               <h3><a id="index_php">方法 1: <code><?php echo htmlspecialchars($bshortname)?>.php</code> というファイルを作成</a></h3>\r
-\r
-               <p><code><?php echo htmlspecialchars($bshortname)?>.php</code> というファイルを作成して、中身に以下のコードを貼り付ける:</p>\r
-<pre><code>&lt;?php\r
-\r
-$CONF['Self'] = '<b><?php echo htmlspecialchars($bshortname)?>.php</b>';\r
-\r
-include('<i>./config.php</i>');\r
-\r
-selectBlog('<b><?php echo htmlspecialchars($bshortname)?></b>');\r
-selector();\r
-\r
-?&gt;</code></pre>\r
-\r
-               <p>すでにある<code>index.php</code>と同じディレクトリにアップロードします。</p>\r
-\r
-               <p>新しいweblogの作成を完了するためには、下にこのファイルのURLを入力してください。 (すでに用意した値で合っているとは思いますが保証はしません):</p>\r
-\r
-\r
-               <form action="index.php" method="post"><div>\r
-                       <input type="hidden" name="action" value="addnewlog2" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="blogid" value="<?php echo intval($blogid)?>" />\r
-                       <table><tr>\r
-                               <td><?php echo _EBLOG_URL?></td>\r
-                               <td><input name="url" maxlength="100" size="40" value="<?php echo htmlspecialchars($CONF['IndexURL'].$bshortname.'.php')?>" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _EBLOG_CREATE?></td>\r
-                               <td><input type="submit" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
-                       </tr></table>\r
-               </div></form>\r
-\r
-               <h3><a id="skins">方法 2: 現在使用しているスキンに新しいweblogを展開する記述を加える</a></h3>\r
-\r
-               <p>新しいweblogの作成を完了するためには、下にURLを入力してください。 (大抵は既存blogと同じURL)</p>\r
-\r
-\r
-               <form action="index.php" method="post"><div>\r
-                       <input type="hidden" name="action" value="addnewlog2" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="blogid" value="<?php echo intval($blogid)?>" />\r
-                       <table><tr>\r
-                               <td><?php echo _EBLOG_URL?></td>\r
-                               <td><input name="url" maxlength="100" size="40" /></td>\r
-                       </tr><tr>\r
-                               <td><?php echo _EBLOG_CREATE?></td>\r
-                               <td><input type="submit" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
-                       </tr></table>\r
-               </div></form>\r
-\r
-               <?php           $this->pagefoot();\r
-\r
-       }\r
-\r
-       function action_addnewlog2() {\r
-               global $member, $manager;\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $burl   = requestVar('url');\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-               $blog->setURL(trim($burl));\r
-               $blog->writeSettings();\r
-\r
-               $this->action_overview(_MSG_NEWBLOG);\r
-       }\r
-\r
-       function action_skinieoverview() {\r
-               global $member, $DIR_LIBS, $manager;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-\r
-       ?>\r
-               <h2><?php echo _SKINIE_TITLE_IMPORT?></h2>\r
-\r
-                               <p><label for="skinie_import_local"><?php echo _SKINIE_LOCAL?></label>\r
-                               <?php                                   global $DIR_SKINS;\r
-\r
-                                       $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);\r
-\r
-                                       if (sizeof($candidates) > 0) {\r
-                                               ?>\r
-                                                       <form method="post" action="index.php"><div>\r
-                                                               <input type="hidden" name="action" value="skinieimport" />\r
-                                                               <?php $manager->addTicketHidden() ?>\r
-                                                               <input type="hidden" name="mode" value="file" />\r
-                                                               <select name="skinfile" id="skinie_import_local">\r
-                                                               <?php                                                                   foreach ($candidates as $skinname => $skinfile) {\r
-                                                                               $html = htmlspecialchars($skinfile);\r
-                                                                               echo '<option value="',$html,'">',$skinname,'</option>';\r
-                                                                       }\r
-                                                               ?>\r
-                                                               </select>\r
-                                                               <input type="submit" value="<?php echo _SKINIE_BTN_IMPORT?>" />\r
-                                                       </div></form>\r
-                                               <?php                                   } else {\r
-                                               echo _SKINIE_NOCANDIDATES;\r
-                                       }\r
-                               ?>\r
-                               </p>\r
-\r
-                               <p><em><?php echo _OR?></em></p>\r
-\r
-                               <form method="post" action="index.php"><p>\r
-                                       <?php $manager->addTicketHidden() ?>\r
-                                       <input type="hidden" name="action" value="skinieimport" />\r
-                                       <input type="hidden" name="mode" value="url" />\r
-                                       <label for="skinie_import_url"><?php echo _SKINIE_FROMURL?></label>\r
-                                       <input type="text" name="skinfile" id="skinie_import_url" size="60" value="http://" />\r
-                                       <input type="submit" value="<?php echo _SKINIE_BTN_IMPORT?>" />\r
-                               </p></form>\r
-\r
-\r
-               <h2><?php echo _SKINIE_TITLE_EXPORT?></h2>\r
-               <form method="post" action="index.php"><div>\r
-                       <input type="hidden" name="action" value="skinieexport" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-\r
-                       <p><?php echo _SKINIE_EXPORT_INTRO?></p>\r
-\r
-                       <table><tr>\r
-                               <th colspan="2"><?php echo _SKINIE_EXPORT_SKINS?></th>\r
-                       </tr><tr>\r
-       <?php           // show list of skins\r
-               $res = sql_query('SELECT * FROM '.sql_table('skin_desc'));\r
-               while ($skinObj = mysql_fetch_object($res)) {\r
-                       $id = 'skinexp' . $skinObj->sdnumber;\r
-                       echo '<td><input type="checkbox" name="skin[',$skinObj->sdnumber,']"  id="',$id,'" />';\r
-                       echo '<label for="',$id,'">',htmlspecialchars($skinObj->sdname),'</label></td>';\r
-                       echo '<td>',htmlspecialchars($skinObj->sddesc),'</td>';\r
-                       echo '</tr><tr>';\r
-               }\r
-\r
-               echo '<th colspan="2">',_SKINIE_EXPORT_TEMPLATES,'</th></tr><tr>';\r
-\r
-               // show list of templates\r
-               $res = sql_query('SELECT * FROM '.sql_table('template_desc'));\r
-               while ($templateObj = mysql_fetch_object($res)) {\r
-                       $id = 'templateexp' . $templateObj->tdnumber;\r
-                       echo '<td><input type="checkbox" name="template[',$templateObj->tdnumber,']" id="',$id,'" />';\r
-                       echo '<label for="',$id,'">',htmlspecialchars($templateObj->tdname),'</label></td>';\r
-                       echo '<td>',htmlspecialchars($templateObj->tddesc),'</td>';\r
-                       echo '</tr><tr>';\r
-               }\r
-\r
-       ?>\r
-                               <th colspan="2"><?php echo _SKINIE_EXPORT_EXTRA?></th>\r
-                       </tr><tr>\r
-                               <td colspan="2"><textarea cols="40" rows="5" name="info"></textarea></td>\r
-                       </tr><tr>\r
-                               <th colspan="2"><?php echo _SKINIE_TITLE_EXPORT?></th>\r
-                       </tr><tr>\r
-                               <td colspan="2"><input type="submit" value="<?php echo _SKINIE_BTN_EXPORT?>" /></td>\r
-                       </tr></table>\r
-               </div></form>\r
-\r
-       <?php\r
-               $this->pagefoot();\r
-\r
-       }\r
-\r
-       function action_skinieimport() {\r
-               global $member, $DIR_LIBS, $DIR_SKINS, $manager;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-\r
-               $skinFileRaw= postVar('skinfile');\r
-               $mode           = postVar('mode');\r
-\r
-               $importer =& new SKINIMPORT();\r
-\r
-               // get full filename\r
-               if ($mode == 'file')\r
-               {\r
-                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
-\r
-                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)\r
-                       if (!file_exists($skinFile))\r
-                               $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';\r
-               } else {\r
-                       $skinFile = $skinFileRaw;\r
-               }\r
-\r
-               // read only metadata\r
-               $error = $importer->readFile($skinFile, 1);\r
-\r
-\r
-               if ($error) $this->error($error);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=skinieoverview">(',_BACK,')</a></p>';\r
-               ?>\r
-               <h2><?php echo _SKINIE_CONFIRM_TITLE?></h2>\r
-\r
-               <ul>\r
-                       <li><p><strong><?php echo _SKINIE_INFO_GENERAL?></strong> <?php echo htmlspecialchars($importer->getInfo())?></p></li>\r
-                       <li><p><strong><?php echo _SKINIE_INFO_SKINS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getSkinNames())?></p></li>\r
-                       <li><p><strong><?php echo _SKINIE_INFO_TEMPLATES?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getTemplateNames())?></p></li>\r
-                       <li><p><strong style="color: red;"><?php echo _SKINIE_INFO_SKINCLASH?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->checkSkinNameClashes())?></p></li>\r
-                       <li><p><strong style="color: red;"><?php echo _SKINIE_INFO_TEMPLCLASH?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->checkTemplateNameClashes())?></p></li>\r
-               </ul>\r
-\r
-               <form method="post" action="index.php"><div>\r
-                       <input type="hidden" name="action" value="skiniedoimport" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="skinfile" value="<?php echo htmlspecialchars(postVar('skinfile'))?>" />\r
-                       <input type="hidden" name="mode" value="<?php echo htmlspecialchars($mode)?>" />\r
-                       <input type="submit" value="<?php echo _SKINIE_CONFIRM_IMPORT?>" />\r
-                       <br />\r
-                       <input type="checkbox" name="overwrite" value="1" id="cb_overwrite" /><label for="cb_overwrite"><?php echo _SKINIE_CONFIRM_OVERWRITE?></label>\r
-               </div></form>\r
-\r
-\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_skiniedoimport() {\r
-               global $member, $DIR_LIBS, $DIR_SKINS;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-\r
-               $skinFileRaw= postVar('skinfile');\r
-               $mode           = postVar('mode');\r
-\r
-               $allowOverwrite = intPostVar('overwrite');\r
-\r
-               // get full filename\r
-               if ($mode == 'file')\r
-               {\r
-                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
-\r
-                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)\r
-                       if (!file_exists($skinFile))\r
-                               $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';\r
-\r
-               } else {\r
-                       $skinFile = $skinFileRaw;\r
-               }\r
-\r
-               $importer =& new SKINIMPORT();\r
-\r
-               $error = $importer->readFile($skinFile);\r
-\r
-               if ($error)\r
-                       $this->error($error);\r
-\r
-               $error = $importer->writeToDatabase($allowOverwrite);\r
-\r
-               if ($error)\r
-                       $this->error($error);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-       ?>\r
-               <h2><?php echo _SKINIE_DONE?></h2>\r
-\r
-               <ul>\r
-                       <li><p><strong><?php echo _SKINIE_INFO_GENERAL?></strong> <?php echo htmlspecialchars($importer->getInfo())?></p></li>\r
-                       <li><p><strong><?php echo _SKINIE_INFO_IMPORTEDSKINS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getSkinNames())?></p></li>\r
-                       <li><p><strong><?php echo _SKINIE_INFO_IMPORTEDTEMPLS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getTemplateNames())?></p></li>\r
-               </ul>\r
-\r
-       <?php           $this->pagefoot();\r
-\r
-       }\r
-\r
-       function action_skinieexport() {\r
-               global $member, $DIR_LIBS;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // load skinie class\r
-               include_once($DIR_LIBS . 'skinie.php');\r
-\r
-               $aSkins = requestIntArray('skin');\r
-               $aTemplates = requestIntArray('template');\r
-\r
-               if (!is_array($aTemplates)) $aTemplates = array();\r
-               if (!is_array($aSkins)) $aSkins = array();\r
-\r
-               $skinList = array_keys($aSkins);\r
-               $templateList = array_keys($aTemplates);\r
-\r
-               $info = postVar('info');\r
-\r
-               $exporter =& new SKINEXPORT();\r
-               foreach ($skinList as $skinId) {\r
-                       $exporter->addSkin($skinId);\r
-               }\r
-               foreach ($templateList as $templateId) {\r
-                       $exporter->addTemplate($templateId);\r
-               }\r
-               $exporter->setInfo($info);\r
-\r
-               $exporter->export();\r
-       }\r
-\r
-       function action_templateoverview() {\r
-               global $member, $manager;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-\r
-               echo '<h2>' . _TEMPLATE_TITLE . '</h2>';\r
-               echo '<h3>' . _TEMPLATE_AVAILABLE_TITLE . '</h3>';\r
-\r
-               $query = 'SELECT * FROM '.sql_table('template_desc').' ORDER BY tdname';\r
-               $template['content'] = 'templatelist';\r
-               $template['tabindex'] = 10;\r
-               showlist($query,'table',$template);\r
-\r
-               echo '<h3>' . _TEMPLATE_NEW_TITLE . '</h3>';\r
-\r
-               ?>\r
-               <form method="post" action="index.php"><div>\r
-\r
-               <input name="action" value="templatenew" type="hidden" />\r
-               <?php $manager->addTicketHidden() ?>\r
-               <table><tr>\r
-                       <td><?php echo _TEMPLATE_NAME?> <?php help('shortnames');?></td>\r
-                       <td><input name="name" tabindex="10010" maxlength="20" size="20" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _TEMPLATE_DESC?></td>\r
-                       <td><input name="desc" tabindex="10020" maxlength="200" size="50" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _TEMPLATE_CREATE?></td>\r
-                       <td><input type="submit" tabindex="10030" value="<?php echo _TEMPLATE_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
-               </tr></table>\r
-\r
-               </div></form>\r
-\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_templateedit($msg = '') {\r
-               global $member, $manager;\r
-\r
-               $templateid = intRequestVar('templateid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $extrahead = '<script type="text/javascript" src="javascript/templateEdit.js"></script>';\r
-               $extrahead .= '<script type="text/javascript">setTemplateEditText("'.addslashes(_EDITTEMPLATE_EMPTY).'");</script>';\r
-\r
-               $this->pagehead($extrahead);\r
-\r
-               $templatename = TEMPLATE::getNameFromId($templateid);\r
-               $templatedescription = TEMPLATE::getDesc($templateid);\r
-               $template =& $manager->getTemplate($templatename);\r
-\r
-               ?>\r
-               <p>\r
-               <a href="index.php?action=templateoverview">(<?php echo _TEMPLATE_BACK?>)</a>\r
-               </p>\r
-\r
-               <h2><?php echo _TEMPLATE_EDIT_TITLE?> '<?php echo  $templatename; ?>'</h2>\r
-\r
-               <?php                                   if ($msg) echo "<p>"._MESSAGE.": $msg</p>";\r
-               ?>\r
-\r
-               <p><?php echo _TEMPLATE_EDIT_MSG?></p>\r
-\r
-               <form method="post" action="index.php">\r
-               <div>\r
-\r
-               <input type="hidden" name="action" value="templateupdate" />\r
-               <?php $manager->addTicketHidden() ?>\r
-               <input type="hidden" name="templateid" value="<?php echo  $templateid; ?>" />\r
-\r
-               <table><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_SETTINGS?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _TEMPLATE_NAME?> <?php help('shortnames');?></td>\r
-                       <td><input name="tname" tabindex="4" size="20" maxlength="20" value="<?php echo  htmlspecialchars($templatename) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _TEMPLATE_DESC?></td>\r
-                       <td><input name="tdesc" tabindex="5" size="50" maxlength="200" value="<?php echo  htmlspecialchars($templatedescription) ?>" /></td>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_UPDATE?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _TEMPLATE_UPDATE?></td>\r
-                       <td>\r
-                               <input type="submit" tabindex="6" value="<?php echo _TEMPLATE_UPDATE_BTN?>" onclick="return checkSubmit();" />\r
-                               <input type="reset" tabindex="7" value="<?php echo _TEMPLATE_RESET_BTN?>" />\r
-                       </td>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_ITEMS?> <?php help('templateitems'); ?></th>\r
-<?php  $this->_templateEditRow($template, _TEMPLATE_ITEMHEADER, 'ITEM_HEADER', '', 8);\r
-       $this->_templateEditRow($template, _TEMPLATE_ITEMBODY, 'ITEM', '', 9, 1);\r
-       $this->_templateEditRow($template, _TEMPLATE_ITEMFOOTER, 'ITEM_FOOTER', '', 10);\r
-       $this->_templateEditRow($template, _TEMPLATE_MORELINK, 'MORELINK', 'morelink', 20);\r
-       $this->_templateEditRow($template, _TEMPLATE_EDITLINK, 'EDITLINK', 'editlink', 25);\r
-       $this->_templateEditRow($template, _TEMPLATE_NEW, 'NEW', 'new', 30);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_ANY?> <?php help('templatecomments'); ?></th>\r
-<?php  $this->_templateEditRow($template, _TEMPLATE_CHEADER, 'COMMENTS_HEADER', 'commentheaders', 40);\r
-       $this->_templateEditRow($template, _TEMPLATE_CBODY, 'COMMENTS_BODY', 'commentbody', 50, 1);\r
-       $this->_templateEditRow($template, _TEMPLATE_CFOOTER, 'COMMENTS_FOOTER', 'commentheaders', 60);\r
-       $this->_templateEditRow($template, _TEMPLATE_CONE, 'COMMENTS_ONE', 'commentwords', 70);\r
-       $this->_templateEditRow($template, _TEMPLATE_CMANY, 'COMMENTS_MANY', 'commentwords', 80);\r
-       $this->_templateEditRow($template, _TEMPLATE_CMORE, 'COMMENTS_CONTINUED', 'commentcontinued', 90);\r
-       $this->_templateEditRow($template, _TEMPLATE_CMEXTRA, 'COMMENTS_AUTH', 'memberextra', 100);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_NONE?> <?php help('templatecomments'); ?></th>\r
-<?php\r
-       $this->_templateEditRow($template, _TEMPLATE_CNONE, 'COMMENTS_NONE', '', 110);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_TOOMUCH?> <?php help('templatecomments'); ?></th>\r
-<?php  $this->_templateEditRow($template, _TEMPLATE_CTOOMUCH, 'COMMENTS_TOOMUCH', '', 120);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_ARCHIVELIST?> <?php help('templatearchivelists'); ?></th>\r
-<?php  $this->_templateEditRow($template, _TEMPLATE_AHEADER, 'ARCHIVELIST_HEADER', '', 130);\r
-       $this->_templateEditRow($template, _TEMPLATE_AITEM, 'ARCHIVELIST_LISTITEM', '', 140);\r
-       $this->_templateEditRow($template, _TEMPLATE_AFOOTER, 'ARCHIVELIST_FOOTER', '', 150);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_CATEGORYLIST?> <?php help('templatecategorylists'); ?></th>\r
-<?php  $this->_templateEditRow($template, _TEMPLATE_CATHEADER, 'CATLIST_HEADER', '', 160);\r
-       $this->_templateEditRow($template, _TEMPLATE_CATITEM, 'CATLIST_LISTITEM', '', 170);\r
-       $this->_templateEditRow($template, _TEMPLATE_CATFOOTER, 'CATLIST_FOOTER', '', 180);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_DATETIME?></th>\r
-<?php  $this->_templateEditRow($template, _TEMPLATE_DHEADER, 'DATE_HEADER', 'dateheads', 190);\r
-       $this->_templateEditRow($template, _TEMPLATE_DFOOTER, 'DATE_FOOTER', 'dateheads', 200);\r
-       $this->_templateEditRow($template, _TEMPLATE_DFORMAT, 'FORMAT_DATE', 'datetime', 210);\r
-       $this->_templateEditRow($template, _TEMPLATE_TFORMAT, 'FORMAT_TIME', 'datetime', 220);\r
-       $this->_templateEditRow($template, _TEMPLATE_LOCALE, 'LOCALE', 'locale', 230);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_IMAGE?> <?php help('templatepopups'); ?></th>\r
-<?php  $this->_templateEditRow($template, _TEMPLATE_PCODE, 'POPUP_CODE', '', 240);\r
-       $this->_templateEditRow($template, _TEMPLATE_ICODE, 'IMAGE_CODE', '', 250);\r
-       $this->_templateEditRow($template, _TEMPLATE_MCODE, 'MEDIA_CODE', '', 260);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_SEARCH?></th>\r
-<?php  $this->_templateEditRow($template, _TEMPLATE_SHIGHLIGHT, 'SEARCH_HIGHLIGHT', 'highlight',270);\r
-       $this->_templateEditRow($template, _TEMPLATE_SNOTFOUND, 'SEARCH_NOTHINGFOUND', 'nothingfound',280);\r
-?>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _TEMPLATE_UPDATE?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _TEMPLATE_UPDATE?></td>\r
-                       <td>\r
-                               <input type="submit" tabindex="290" value="<?php echo _TEMPLATE_UPDATE_BTN?>" onclick="return checkSubmit();" />\r
-                               <input type="reset" tabindex="300" value="<?php echo _TEMPLATE_RESET_BTN?>" />\r
-                       </td>\r
-               </tr></table>\r
-\r
-               </div>\r
-               </form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function _templateEditRow(&$template, $description, $name, $help = '', $tabindex = 0, $big = 0) {\r
-               static $count = 1;\r
-       ?>\r
-               </tr><tr>\r
-                       <td><?php echo $description?> <?php if ($help) help('template'.$help); ?></td>\r
-                       <td id="td<?php echo $count?>"><textarea class="templateedit" name="<?php echo $name?>" tabindex="<?php echo $tabindex?>" cols="50" rows="<?php echo $big?10:5?>" id="textarea<?php echo $count?>"><?php echo  htmlspecialchars($template[$name]); ?></textarea></td>\r
-       <?php           $count++;\r
-       }\r
-\r
-       function action_templateupdate() {\r
-               global $member;\r
-\r
-               $templateid = intRequestVar('templateid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $name = postVar('tname');\r
-               $desc = postVar('tdesc');\r
-\r
-               if (!isValidTemplateName($name))\r
-                       $this->error(_ERROR_BADTEMPLATENAME);\r
-\r
-               if ((TEMPLATE::getNameFromId($templateid) != $name) && TEMPLATE::exists($name))\r
-                       $this->error(_ERROR_DUPTEMPLATENAME);\r
-\r
-\r
-               $name = addslashes($name);\r
-               $desc = addslashes($desc);\r
-\r
-               // 1. Remove all template parts\r
-               $query = 'DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid;\r
-               sql_query($query);\r
-\r
-               // 2. Update description\r
-               $query =  'UPDATE '.sql_table('template_desc').' SET'\r
-                          . " tdname='" . $name . "',"\r
-                          . " tddesc='" . $desc . "'"\r
-                          . " WHERE tdnumber=" . $templateid;\r
-               sql_query($query);\r
-\r
-               // 3. Add non-empty template parts\r
-               $this->addToTemplate($templateid, 'ITEM_HEADER', postVar('ITEM_HEADER'));\r
-               $this->addToTemplate($templateid, 'ITEM', postVar('ITEM'));\r
-               $this->addToTemplate($templateid, 'ITEM_FOOTER', postVar('ITEM_FOOTER'));\r
-               $this->addToTemplate($templateid, 'MORELINK', postVar('MORELINK'));\r
-               $this->addToTemplate($templateid, 'EDITLINK', postVar('EDITLINK'));\r
-               $this->addToTemplate($templateid, 'NEW', postVar('NEW'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_HEADER', postVar('COMMENTS_HEADER'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_BODY', postVar('COMMENTS_BODY'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_FOOTER', postVar('COMMENTS_FOOTER'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_CONTINUED', postVar('COMMENTS_CONTINUED'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_TOOMUCH', postVar('COMMENTS_TOOMUCH'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_AUTH', postVar('COMMENTS_AUTH'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_ONE', postVar('COMMENTS_ONE'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_MANY', postVar('COMMENTS_MANY'));\r
-               $this->addToTemplate($templateid, 'COMMENTS_NONE', postVar('COMMENTS_NONE'));\r
-               $this->addToTemplate($templateid, 'ARCHIVELIST_HEADER', postVar('ARCHIVELIST_HEADER'));\r
-               $this->addToTemplate($templateid, 'ARCHIVELIST_LISTITEM', postVar('ARCHIVELIST_LISTITEM'));\r
-               $this->addToTemplate($templateid, 'ARCHIVELIST_FOOTER', postVar('ARCHIVELIST_FOOTER'));\r
-               $this->addToTemplate($templateid, 'CATLIST_HEADER', postVar('CATLIST_HEADER'));\r
-               $this->addToTemplate($templateid, 'CATLIST_LISTITEM', postVar('CATLIST_LISTITEM'));\r
-               $this->addToTemplate($templateid, 'CATLIST_FOOTER', postVar('CATLIST_FOOTER'));\r
-               $this->addToTemplate($templateid, 'DATE_HEADER', postVar('DATE_HEADER'));\r
-               $this->addToTemplate($templateid, 'DATE_FOOTER', postVar('DATE_FOOTER'));\r
-               $this->addToTemplate($templateid, 'FORMAT_DATE', postVar('FORMAT_DATE'));\r
-               $this->addToTemplate($templateid, 'FORMAT_TIME', postVar('FORMAT_TIME'));\r
-               $this->addToTemplate($templateid, 'LOCALE', postVar('LOCALE'));\r
-               $this->addToTemplate($templateid, 'SEARCH_HIGHLIGHT', postVar('SEARCH_HIGHLIGHT'));\r
-               $this->addToTemplate($templateid, 'SEARCH_NOTHINGFOUND', postVar('SEARCH_NOTHINGFOUND'));\r
-               $this->addToTemplate($templateid, 'POPUP_CODE', postVar('POPUP_CODE'));\r
-               $this->addToTemplate($templateid, 'MEDIA_CODE', postVar('MEDIA_CODE'));\r
-               $this->addToTemplate($templateid, 'IMAGE_CODE', postVar('IMAGE_CODE'));\r
-\r
-\r
-               // jump back to template edit\r
-               $this->action_templateedit(_TEMPLATE_UPDATED);\r
-\r
-       }\r
-\r
-       function addToTemplate($id, $partname, $content) {\r
-               $partname = addslashes($partname);\r
-               $content = addslashes($content);\r
-\r
-               $id = intval($id);\r
-\r
-               // don't add empty parts:\r
-               if (!trim($content)) return -1;\r
-\r
-               $query = 'INSERT INTO '.sql_table('template')." (tdesc, tpartname, tcontent) "\r
-                          . "VALUES ($id, '$partname', '$content')";\r
-               mysql_query($query) or die("Query error: " . mysql_error());\r
-               return mysql_insert_id();\r
-       }\r
-\r
-       function action_templatedelete() {\r
-               global $member, $manager;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $templateid = intRequestVar('templateid');\r
-               // TODO: check if template can be deleted\r
-\r
-               $this->pagehead();\r
-\r
-               $name = TEMPLATE::getNameFromId($templateid);\r
-               $desc = TEMPLATE::getDesc($templateid);\r
-\r
-               ?>\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <p>\r
-                       <?php echo _CONFIRMTXT_TEMPLATE?><b><?php echo $name?></b> (<?php echo  htmlspecialchars($desc) ?>)\r
-                       </p>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                               <input type="hidden" name="action" value="templatedeleteconfirm" />\r
-                               <?php $manager->addTicketHidden() ?>\r
-                               <input type="hidden" name="templateid" value="<?php echo  $templateid ?>" />\r
-                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_templatedeleteconfirm() {\r
-               global $member, $manager;\r
-\r
-               $templateid = intRequestVar('templateid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $manager->notify('PreDeleteTemplate', array('templateid' => $templateid));\r
-\r
-               // 1. delete description\r
-               sql_query('DELETE FROM '.sql_table('template_desc').' WHERE tdnumber=' . $templateid);\r
-\r
-               // 2. delete parts\r
-               sql_query('DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid);\r
-\r
-               $manager->notify('PostDeleteTemplate', array('templateid' => $templateid));\r
-\r
-               $this->action_templateoverview();\r
-       }\r
-\r
-       function action_templatenew() {\r
-               global $member;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $name = postVar('name');\r
-               $desc = postVar('desc');\r
-\r
-               if (!isValidTemplateName($name))\r
-                       $this->error(_ERROR_BADTEMPLATENAME);\r
-\r
-               if (TEMPLATE::exists($name))\r
-                       $this->error(_ERROR_DUPTEMPLATENAME);\r
-\r
-               $newTemplateId = TEMPLATE::createNew($name, $desc);\r
-\r
-               $this->action_templateoverview();\r
-       }\r
-\r
-       function action_templateclone() {\r
-               global $member;\r
-\r
-               $templateid = intRequestVar('templateid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // 1. read old template\r
-               $name = TEMPLATE::getNameFromId($templateid);\r
-               $desc = TEMPLATE::getDesc($templateid);\r
-\r
-               // 2. create desc thing\r
-               $name = "cloned" . $name;\r
-\r
-               // if a template with that name already exists:\r
-               if (TEMPLATE::exists($name)) {\r
-                       $i = 1;\r
-                       while (TEMPLATE::exists($name . $i))\r
-                               $i++;\r
-                       $name .= $i;\r
-               }\r
-\r
-               $newid = TEMPLATE::createNew($name, $desc);\r
-\r
-               // 3. create clone\r
-               // go through parts of old template and add them to the new one\r
-               $res = sql_query('SELECT tpartname, tcontent FROM '.sql_table('template').' WHERE tdesc=' . $templateid);\r
-               while ($o = mysql_fetch_object($res)) {\r
-                       $this->addToTemplate($newid, $o->tpartname, $o->tcontent);\r
-               }\r
-\r
-               $this->action_templateoverview();\r
-       }\r
-\r
-       function action_skinoverview() {\r
-               global $member, $manager;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-\r
-               echo '<h2>' . _SKIN_EDIT_TITLE . '</h2>';\r
-\r
-               echo '<h3>' . _SKIN_AVAILABLE_TITLE . '</h3>';\r
-\r
-               $query = 'SELECT * FROM '.sql_table('skin_desc').' ORDER BY sdname';\r
-               $template['content'] = 'skinlist';\r
-               $template['tabindex'] = 10;\r
-               showlist($query,'table',$template);\r
-\r
-               echo '<h3>' . _SKIN_NEW_TITLE . '</h3>';\r
-\r
-               ?>\r
-               <form method="post" action="index.php">\r
-               <div>\r
-\r
-               <input name="action" value="skinnew" type="hidden" />\r
-               <?php $manager->addTicketHidden() ?>\r
-               <table><tr>\r
-                       <td><?php echo _SKIN_NAME?> <?php help('shortnames');?></td>\r
-                       <td><input name="name" tabindex="10010" maxlength="20" size="20" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SKIN_DESC?></td>\r
-                       <td><input name="desc" tabindex="10020" maxlength="200" size="50" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SKIN_CREATE?></td>\r
-                       <td><input type="submit" tabindex="10030" value="<?php echo _SKIN_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
-               </tr></table>\r
-\r
-               </div>\r
-               </form>\r
-\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_skinnew() {\r
-               global $member;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $name = trim(postVar('name'));\r
-               $desc = trim(postVar('desc'));\r
-\r
-               if (!isValidSkinName($name))\r
-                       $this->error(_ERROR_BADSKINNAME);\r
-\r
-               if (SKIN::exists($name))\r
-                       $this->error(_ERROR_DUPSKINNAME);\r
-\r
-               $newId = SKIN::createNew($name, $desc);\r
-\r
-               $this->action_skinoverview();\r
-       }\r
-\r
-       function action_skinedit() {\r
-               global $member, $manager;\r
-\r
-               $skinid = intRequestVar('skinid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $skin =& new SKIN($skinid);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-               <p>\r
-                       <a href="index.php?action=skinoverview">(<?php echo _SKIN_BACK?>)</a>\r
-               </p>\r
-               <h2><?php echo _SKIN_EDITONE_TITLE?> '<?php echo  $skin->getName() ?>'</h2>\r
-\r
-               <h3><?php echo _SKIN_PARTS_TITLE?></h3>\r
-               <?php echo _SKIN_PARTS_MSG?>\r
-               <ul>\r
-                       <li><a tabindex="10" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=index"><?php echo _SKIN_PART_MAIN?></a> <?php help('skinpartindex')?></li>\r
-                       <li><a tabindex="20" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=item"><?php echo _SKIN_PART_ITEM?></a> <?php help('skinpartitem')?></li>\r
-                       <li><a tabindex="30" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=archivelist"><?php echo _SKIN_PART_ALIST?></a> <?php help('skinpartarchivelist')?></li>\r
-                       <li><a tabindex="40" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=archive"><?php echo _SKIN_PART_ARCHIVE?></a> <?php help('skinpartarchive')?></li>\r
-                       <li><a tabindex="50" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=search"><?php echo _SKIN_PART_SEARCH?></a> <?php help('skinpartsearch')?></li>\r
-                       <li><a tabindex="60" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=error"><?php echo _SKIN_PART_ERROR?></a> <?php help('skinparterror')?></li>\r
-                       <li><a tabindex="70" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=member"><?php echo _SKIN_PART_MEMBER?></a> <?php help('skinpartmember')?></li>\r
-                       <li><a tabindex="75" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=imagepopup"><?php echo _SKIN_PART_POPUP?></a> <?php help('skinpartimagepopup')?></li>\r
-               </ul>\r
-\r
-               <h3><?php echo _SKIN_GENSETTINGS_TITLE?></h3>\r
-               <form method="post" action="index.php">\r
-               <div>\r
-\r
-               <input type="hidden" name="action" value="skineditgeneral" />\r
-               <?php $manager->addTicketHidden() ?>\r
-               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />\r
-               <table><tr>\r
-                       <td><?php echo _SKIN_NAME?> <?php help('shortnames');?></td>\r
-                       <td><input name="name" tabindex="90" value="<?php echo  htmlspecialchars($skin->getName()) ?>" maxlength="20" size="20" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SKIN_DESC?></td>\r
-                       <td><input name="desc" tabindex="100" value="<?php echo  htmlspecialchars($skin->getDescription()) ?>" maxlength="200" size="50" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SKIN_TYPE?></td>\r
-                       <td><input name="type" tabindex="110" value="<?php echo  htmlspecialchars($skin->getContentType()) ?>" maxlength="40" size="20" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SKIN_INCLUDE_MODE?> <?php help('includemode')?></td>\r
-                       <td><?php $this->input_yesno('inc_mode',$skin->getIncludeMode(),120,'skindir','normal',_PARSER_INCMODE_SKINDIR,_PARSER_INCMODE_NORMAL);?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SKIN_INCLUDE_PREFIX?> <?php help('includeprefix')?></td>\r
-                       <td><input name="inc_prefix" tabindex="130" value="<?php echo  htmlspecialchars($skin->getIncludePrefix()) ?>" maxlength="40" size="20" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SKIN_CHANGE?></td>\r
-                       <td><input type="submit" tabindex="140" value="<?php echo _SKIN_CHANGE_BTN?>" onclick="return checkSubmit();" /></td>\r
-               </tr></table>\r
-\r
-               </div>\r
-               </form>\r
-\r
-\r
-               <?php           $this->pagefoot();\r
-       }\r
-\r
-       function action_skineditgeneral() {\r
-               global $member;\r
-\r
-               $skinid = intRequestVar('skinid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $name = postVar('name');\r
-               $desc = postVar('desc');\r
-               $type = postVar('type');\r
-               $inc_mode = postVar('inc_mode');\r
-               $inc_prefix = postVar('inc_prefix');\r
-\r
-               $skin =& new SKIN($skinid);\r
-\r
-               // 1. Some checks\r
-               if (!isValidSkinName($name))\r
-                       $this->error(_ERROR_BADSKINNAME);\r
-\r
-               if (($skin->getName() != $name) && SKIN::exists($name))\r
-                       $this->error(_ERROR_DUPSKINNAME);\r
-\r
-               if (!$type) $type = 'text/html';\r
-               if (!$inc_mode) $inc_mode = 'normal';\r
-\r
-               // 2. Update description\r
-               $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);\r
-\r
-               $this->action_skinedit();\r
-\r
-       }\r
-\r
-       function action_skinedittype($msg = '') {\r
-               global $member, $manager;\r
-\r
-               $skinid = intRequestVar('skinid');\r
-               $type = requestVar('type');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $skin =& new SKIN($skinid);\r
-\r
-               $friendlyNames = SKIN::getFriendlyNames();\r
-\r
-               $this->pagehead();\r
-               ?>\r
-               <p>(<a href="index.php?action=skinoverview"><?php echo _SKIN_GOBACK?></a>)</p>\r
-\r
-               <h2><?php echo _SKIN_EDITPART_TITLE?> '<?php echo  $skin->getName() ?>': <?php echo  $friendlyNames[$type] ?></h2>\r
-\r
-               <?php                   if ($msg) echo "<p>"._MESSAGE.": $msg</p>";\r
-               ?>\r
-\r
-\r
-               <form method="post" action="index.php">\r
-               <div>\r
-\r
-               <input type="hidden" name="action" value="skinupdate" />\r
-               <?php $manager->addTicketHidden() ?>\r
-               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />\r
-               <input type="hidden" name="type" value="<?php echo  $type ?>" />\r
-\r
-               <input type="submit" value="<?php echo _SKIN_UPDATE_BTN?>" onclick="return checkSubmit();" />\r
-               <input type="reset" value="<?php echo _SKIN_RESET_BTN?>" />\r
-               (skin type: <?php echo  $friendlyNames[$type] ?>)\r
-               <?php help('skinpart' . $type);?>\r
-               <br />\r
-\r
-               <textarea class="skinedit" tabindex="10" rows="20" cols="80" name="content"><?php echo  htmlspecialchars($skin->getContent($type)) ?></textarea>\r
-\r
-               <br />\r
-               <input type="submit" tabindex="20" value="<?php echo _SKIN_UPDATE_BTN?>" onclick="return checkSubmit();" />\r
-               <input type="reset" value="<?php echo _SKIN_RESET_BTN?>" />\r
-               (skin type: <?php echo  $friendlyNames[$type] ?>)\r
-\r
-               <br /><br />\r
-               <?php echo _SKIN_ALLOWEDVARS?>\r
-               <?php                   $actions = SKIN::getAllowedActionsForType($type);\r
-\r
-                       sort($actions);\r
-\r
-                       while ($current = array_shift($actions)) {\r
-                               // skip deprecated vars\r
-                               if ($current == 'ifcat') continue;\r
-                               if ($current == 'imagetext') continue;\r
-                               if ($current == 'vars') continue;\r
-\r
-                               echo helplink('skinvar-' . $current) . "$current</a>";\r
-                               if (count($actions) != 0) echo ", ";\r
-                       }\r
-               ?>\r
-               <br /><br />\r
-               Short blog names:\r
-               <?php                   $query = 'SELECT bshortname, bname FROM '.sql_table('blog');\r
-                       showlist($query,'table',array('content'=>'shortblognames'));\r
-               ?>\r
-\r
-               <br />\r
-               Template names:\r
-               <?php                   $query = 'SELECT tdname as name, tddesc as description FROM '.sql_table('template_desc');\r
-                       showlist($query,'table',array('content'=>'shortnames'));\r
-               ?>\r
-\r
-\r
-               </div>\r
-               </form>\r
-\r
-\r
-               <?php           $this->pagefoot();\r
-       }\r
-\r
-       function action_skinupdate() {\r
-               global $member;\r
-\r
-               $skinid = intRequestVar('skinid');\r
-               $content = trim(postVar('content'));\r
-               $type = postVar('type');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $skin =& new SKIN($skinid);\r
-               $skin->update($type, $content);\r
-\r
-               $this->action_skinedittype(_SKIN_UPDATED);\r
-       }\r
-\r
-       function action_skindelete() {\r
-               global $member, $manager, $CONF;\r
-\r
-               $skinid = intRequestVar('skinid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // don't allow default skin to be deleted\r
-               if ($skinid == $CONF['BaseSkin'])\r
-                       $this->error(_ERROR_DEFAULTSKIN);\r
-\r
-               // don't allow deletion of default skins for blogs\r
-               $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid;\r
-               $r = sql_query($query);\r
-               if ($o = mysql_fetch_object($r))\r
-                       $this->error(_ERROR_SKINDEFDELETE . $o->bname);\r
-\r
-               $this->pagehead();\r
-\r
-               $skin =& new SKIN($skinid);\r
-               $name = $skin->getName();\r
-               $desc = $skin->getDescription();\r
-\r
-               ?>\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <p>\r
-                               <?php echo _CONFIRMTXT_SKIN?><b><?php echo  $name ?></b> (<?php echo  htmlspecialchars($desc)?>)\r
-                       </p>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                               <input type="hidden" name="action" value="skindeleteconfirm" />\r
-                               <?php $manager->addTicketHidden() ?>\r
-                               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />\r
-                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div></form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_skindeleteconfirm() {\r
-               global $member, $CONF, $manager;\r
-\r
-               $skinid = intRequestVar('skinid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // don't allow default skin to be deleted\r
-               if ($skinid == $CONF['BaseSkin'])\r
-                       $this->error(_ERROR_DEFAULTSKIN);\r
-\r
-               // don't allow deletion of default skins for blogs\r
-               $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid;\r
-               $r = sql_query($query);\r
-               if ($o = mysql_fetch_object($r))\r
-                       $this->error(_ERROR_SKINDEFDELETE .$o->bname);\r
-\r
-               $manager->notify('PreDeleteSkin', array('skinid' => $skinid));\r
-\r
-               // 1. delete description\r
-               sql_query('DELETE FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $skinid);\r
-\r
-               // 2. delete parts\r
-               sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc=' . $skinid);\r
-\r
-               $manager->notify('PostDeleteSkin', array('skinid' => $skinid));\r
-\r
-               $this->action_skinoverview();\r
-       }\r
-\r
-       function action_skinclone() {\r
-               global $member;\r
-\r
-               $skinid = intRequestVar('skinid');\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // 1. read skin to clone\r
-               $skin =& new SKIN($skinid);\r
-\r
-               $name = "clone_" . $skin->getName();\r
-\r
-               // if a skin with that name already exists:\r
-               if (SKIN::exists($name)) {\r
-                       $i = 1;\r
-                       while (SKIN::exists($name . $i))\r
-                               $i++;\r
-                       $name .= $i;\r
-               }\r
-\r
-               // 2. create skin desc\r
-               $newid = SKIN::createNew(\r
-                       $name,\r
-                       $skin->getDescription(),\r
-                       $skin->getContentType(),\r
-                       $skin->getIncludeMode(),\r
-                       $skin->getIncludePrefix()\r
-               );\r
-\r
-\r
-               // 3. clone\r
-               $this->skinclonetype($skin, $newid, 'index');\r
-               $this->skinclonetype($skin, $newid, 'item');\r
-               $this->skinclonetype($skin, $newid, 'archivelist');\r
-               $this->skinclonetype($skin, $newid, 'archive');\r
-               $this->skinclonetype($skin, $newid, 'search');\r
-               $this->skinclonetype($skin, $newid, 'error');\r
-               $this->skinclonetype($skin, $newid, 'member');\r
-               $this->skinclonetype($skin, $newid, 'imagepopup');\r
-\r
-               $this->action_skinoverview();\r
-\r
-       }\r
-\r
-       function skinclonetype($skin, $newid, $type) {\r
-               $newid = intval($newid);\r
-               $content = $skin->getContent($type);\r
-               if ($content) {\r
-                       $query = 'INSERT INTO '.sql_table('skin')." (sdesc, scontent, stype) VALUES ($newid,'". addslashes($content)."', '". addslashes($type)."')";\r
-                       sql_query($query);\r
-               }\r
-       }\r
-\r
-       function action_settingsedit() {\r
-               global $member, $manager, $CONF, $DIR_NUCLEUS, $DIR_MEDIA;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-               ?>\r
-\r
-               <h2><?php echo _SETTINGS_TITLE?></h2>\r
-\r
-               <form action="index.php" method="post">\r
-               <div>\r
-\r
-               <input type="hidden" name="action" value="settingsupdate" />\r
-               <?php $manager->addTicketHidden() ?>\r
-\r
-               <table><tr>\r
-                       <th colspan="2"><?php echo _SETTINGS_SUB_GENERAL?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_DEFBLOG?> <?php help('defaultblog'); ?></td>\r
-                       <td>\r
-                               <?php\r
-                                       $query =  'SELECT bname as text, bnumber as value'\r
-                                                  . ' FROM '.sql_table('blog');\r
-                                       $template['name'] = 'DefaultBlog';\r
-                                       $template['selected'] = $CONF['DefaultBlog'];\r
-                                       $template['tabindex'] = 10;\r
-                                       showlist($query,'select',$template);\r
-                               ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_BASESKIN?> <?php help('baseskin'); ?></td>\r
-                       <td>\r
-                               <?php\r
-                                       $query =  'SELECT sdname as text, sdnumber as value'\r
-                                                  . ' FROM '.sql_table('skin_desc');\r
-                                       $template['name'] = 'BaseSkin';\r
-                                       $template['selected'] = $CONF['BaseSkin'];\r
-                                       $template['tabindex'] = 1;\r
-                                       showlist($query,'select',$template);\r
-                               ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_ADMINMAIL?></td>\r
-                       <td><input name="AdminEmail" tabindex="10010" size="40" value="<?php echo  htmlspecialchars($CONF['AdminEmail']) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_SITENAME?></td>\r
-                       <td><input name="SiteName" tabindex="10020" size="40" value="<?php echo  htmlspecialchars($CONF['SiteName']) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_SITEURL?></td>\r
-                       <td><input name="IndexURL" tabindex="10030" size="40" value="<?php echo  htmlspecialchars($CONF['IndexURL']) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_ADMINURL?></td>\r
-                       <td><input name="AdminURL" tabindex="10040" size="40" value="<?php echo  htmlspecialchars($CONF['AdminURL']) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_PLUGINURL?> <?php help('pluginurl');?></td>\r
-                       <td><input name="PluginURL" tabindex="10045" size="40" value="<?php echo  htmlspecialchars($CONF['PluginURL']) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_SKINSURL?> <?php help('skinsurl');?></td>\r
-                       <td><input name="SkinsURL" tabindex="10046" size="40" value="<?php echo  htmlspecialchars($CONF['SkinsURL']) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_ACTIONSURL?> <?php help('actionurl');?></td>\r
-                       <td><input name="ActionURL" tabindex="10047" size="40" value="<?php echo  htmlspecialchars($CONF['ActionURL']) ?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_LANGUAGE?> <?php help('language'); ?>\r
-                       </td>\r
-                       <td>\r
-\r
-                               <select name="Language" tabindex="10050">\r
-                               <?php                           // show a dropdown list of all available languages\r
-                               global $DIR_LANG;\r
-                               $dirhandle = opendir($DIR_LANG);\r
-                               while ($filename = readdir($dirhandle)) {\r
-                                       if (ereg("^(.*)\.php$",$filename,$matches)) {\r
-                                               $name = $matches[1];\r
-                                               echo "<option value='$name'";\r
-                                               if ($name == $CONF['Language'])\r
-                                                       echo " selected='selected'";\r
-                                               echo ">$name</option>";\r
-                                       }\r
-                               }\r
-                               closedir($dirhandle);\r
-\r
-                               ?>\r
-                               </select>\r
-\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_DISABLESITE?> <?php help('disablesite'); ?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('DisableSite',$CONF['DisableSite'],10060); ?>\r
-                                       <br />\r
-                               URL: <input name="DisableSiteURL" tabindex="10070" size="40" value="<?php echo  htmlspecialchars($CONF['DisableSiteURL'])?>" />\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_DIRS?></td>\r
-                       <td><?php echo  htmlspecialchars($DIR_NUCLEUS) ?>\r
-                               <i><?php echo _SETTINGS_SEECONFIGPHP?></i></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_DBLOGIN?></td>\r
-                       <td><i><?php echo _SETTINGS_SEECONFIGPHP?></i></td>\r
-               </tr><tr>\r
-                       <td>\r
-                       <?php\r
-                               echo _SETTINGS_JSTOOLBAR\r
-                               /* =_SETTINGS_DISABLEJS\r
-\r
-                                       I temporary changed the meaning of DisableJsTools, until I can find a good\r
-                                       way to select the javascript version to use\r
-\r
-                                       now, its:\r
-                                               0 : IE\r
-                                               1 : all javascript disabled\r
-                                               2 : 'simpler' javascript (for mozilla/opera/mac)\r
-                               */\r
-                          ?>\r
-                       </td>\r
-                       <td><?php /* $this->input_yesno('DisableJsTools',$CONF['DisableJsTools'],10075); */?>\r
-                               <select name="DisableJsTools" tabindex="10075">\r
-                       <?php                                   $extra = ($CONF['DisableJsTools'] == 1) ? 'selected="selected"' : '';\r
-                                       echo "<option $extra value='1'>",_SETTINGS_JSTOOLBAR_NONE,"</option>";\r
-                                       $extra = ($CONF['DisableJsTools'] == 2) ? 'selected="selected"' : '';\r
-                                       echo "<option $extra value='2'>",_SETTINGS_JSTOOLBAR_SIMPLE,"</option>";\r
-                                       $extra = ($CONF['DisableJsTools'] == 0) ? 'selected="selected"' : '';\r
-                                       echo "<option $extra value='0'>",_SETTINGS_JSTOOLBAR_FULL,"</option>";\r
-                       ?>\r
-                               </select>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_URLMODE?> <?php help('urlmode');?></td>\r
-                                          <td><?php\r
-\r
-                                          $this->input_yesno('URLMode',$CONF['URLMode'],10077,\r
-                                                         'normal','pathinfo',_SETTINGS_URLMODE_NORMAL,_SETTINGS_URLMODE_PATHINFO);\r
-\r
-                                          echo ' ', _SETTINGS_URLMODE_HELP;\r
-\r
-                                                        ?>\r
-\r
-                                          </td>\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _SETTINGS_MEDIA?> <?php help('media'); ?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_MEDIADIR?></td>\r
-                       <td><?php echo  htmlspecialchars($DIR_MEDIA) ?>\r
-                               <i><?php echo _SETTINGS_SEECONFIGPHP?></i>\r
-                               <?php                           if (!is_dir($DIR_MEDIA))\r
-                                               echo "<br /><b>" . _WARNING_NOTADIR . "</b>";\r
-                                       if (!is_readable($DIR_MEDIA))\r
-                                               echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>";\r
-                                       if (!is_writeable($DIR_MEDIA))\r
-                                               echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>";\r
-                               ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_MEDIAURL?></td>\r
-                       <td>\r
-                               <input name="MediaURL" tabindex="10080" size="40" value="<?php echo  htmlspecialchars($CONF['MediaURL']) ?>" />\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_ALLOWUPLOAD?></td>\r
-                       <td><?php $this->input_yesno('AllowUpload',$CONF['AllowUpload'],10090); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_ALLOWUPLOADTYPES?></td>\r
-                       <td>\r
-                               <input name="AllowedTypes" tabindex="10100" size="40" value="<?php echo  htmlspecialchars($CONF['AllowedTypes']) ?>" />\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_MAXUPLOADSIZE?></td>\r
-                       <td>\r
-                               <input name="MaxUploadSize" tabindex="10105" size="40" value="<?php echo  htmlspecialchars($CONF['MaxUploadSize']) ?>" />\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_MEDIAPREFIX?></td>\r
-                       <td><?php $this->input_yesno('MediaPrefix',$CONF['MediaPrefix'],10110); ?></td>\r
-\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _SETTINGS_MEMBERS?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_CHANGELOGIN?></td>\r
-                       <td><?php $this->input_yesno('AllowLoginEdit',$CONF['AllowLoginEdit'],10120); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_ALLOWCREATE?>\r
-                               <?php help('allowaccountcreation'); ?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('AllowMemberCreate',$CONF['AllowMemberCreate'],10130); ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_NEWLOGIN?> <?php help('allownewmemberlogin'); ?>\r
-                               <br /><?php echo _SETTINGS_NEWLOGIN2?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('NewMemberCanLogon',$CONF['NewMemberCanLogon'],10140); ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_MEMBERMSGS?>\r
-                               <?php help('messageservice'); ?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('AllowMemberMail',$CONF['AllowMemberMail'],10150); ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_NONMEMBERMSGS?>\r
-                               <?php help('messageservice'); ?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('NonmemberMail',$CONF['NonmemberMail'],10155); ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_PROTECTMEMNAMES?>\r
-                               <?php help('protectmemnames'); ?>\r
-                       </td>\r
-                       <td><?php $this->input_yesno('ProtectMemNames',$CONF['ProtectMemNames'],10156); ?>\r
-                       </td>\r
-\r
-\r
-\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _SETTINGS_COOKIES_TITLE?> <?php help('cookies'); ?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_COOKIEPREFIX?></td>\r
-                       <td><input name="CookiePrefix" tabindex="10159" size="40" value="<?php echo  htmlspecialchars($CONF['CookiePrefix'])?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_COOKIEDOMAIN?></td>\r
-                       <td><input name="CookieDomain" tabindex="10160" size="40" value="<?php echo  htmlspecialchars($CONF['CookieDomain'])?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_COOKIEPATH?></td>\r
-                       <td><input name="CookiePath" tabindex="10170" size="40" value="<?php echo  htmlspecialchars($CONF['CookiePath'])?>" /></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_COOKIESECURE?></td>\r
-                       <td><?php $this->input_yesno('CookieSecure',$CONF['CookieSecure'],10180); ?></td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_COOKIELIFE?></td>\r
-                       <td><?php $this->input_yesno('SessionCookie',$CONF['SessionCookie'],10190,\r
-                                                         1,0,_SETTINGS_COOKIESESSION,_SETTINGS_COOKIEMONTH); ?>\r
-                       </td>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_LASTVISIT?></td>\r
-                       <td><?php $this->input_yesno('LastVisit',$CONF['LastVisit'],10200); ?></td>\r
-\r
-\r
-\r
-               </tr><tr>\r
-                       <th colspan="2"><?php echo _SETTINGS_UPDATE?></th>\r
-               </tr><tr>\r
-                       <td><?php echo _SETTINGS_UPDATE?></td>\r
-                       <td><input type="submit" tabindex="10210" value="<?php echo _SETTINGS_UPDATE_BTN?>" onclick="return checkSubmit();" /></td>\r
-               </tr></table>\r
-\r
-               </div>\r
-               </form>\r
-\r
-               <?php\r
-                       echo '<h2>',_PLUGINS_EXTRA,'</h2>';\r
-\r
-                       $manager->notify(\r
-                               'GeneralSettingsFormExtras',\r
-                               array()\r
-                       );\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_settingsupdate() {\r
-               global $member, $CONF;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // check if email address for admin is valid\r
-               if (!isValidMailAddress(postVar('AdminEmail')))\r
-                       $this->error(_ERROR_BADMAILADDRESS);\r
-\r
-\r
-               // save settings\r
-               $this->updateConfig('DefaultBlog',              postVar('DefaultBlog'));\r
-               $this->updateConfig('BaseSkin',                 postVar('BaseSkin'));\r
-               $this->updateConfig('IndexURL',                 postVar('IndexURL'));\r
-               $this->updateConfig('AdminURL',                 postVar('AdminURL'));\r
-               $this->updateConfig('PluginURL',                postVar('PluginURL'));\r
-               $this->updateConfig('SkinsURL',                 postVar('SkinsURL'));\r
-               $this->updateConfig('ActionURL',                postVar('ActionURL'));\r
-               $this->updateConfig('Language',                 postVar('Language'));\r
-               $this->updateConfig('AdminEmail',               postVar('AdminEmail'));\r
-               $this->updateConfig('SessionCookie',    postVar('SessionCookie'));\r
-               $this->updateConfig('AllowMemberCreate',postVar('AllowMemberCreate'));\r
-               $this->updateConfig('AllowMemberMail',  postVar('AllowMemberMail'));\r
-               $this->updateConfig('NonmemberMail',    postVar('NonmemberMail'));\r
-               $this->updateConfig('ProtectMemNames',  postVar('ProtectMemNames'));\r
-               $this->updateConfig('SiteName',                 postVar('SiteName'));\r
-               $this->updateConfig('NewMemberCanLogon',postVar('NewMemberCanLogon'));\r
-               $this->updateConfig('DisableSite',              postVar('DisableSite'));\r
-               $this->updateConfig('DisableSiteURL',   postVar('DisableSiteURL'));\r
-               $this->updateConfig('LastVisit',                postVar('LastVisit'));\r
-               $this->updateConfig('MediaURL',                 postVar('MediaURL'));\r
-               $this->updateConfig('AllowedTypes',             postVar('AllowedTypes'));\r
-               $this->updateConfig('AllowUpload',              postVar('AllowUpload'));\r
-               $this->updateConfig('MaxUploadSize',    postVar('MaxUploadSize'));\r
-               $this->updateConfig('MediaPrefix',              postVar('MediaPrefix'));\r
-               $this->updateConfig('AllowLoginEdit',   postVar('AllowLoginEdit'));\r
-               $this->updateConfig('DisableJsTools',   postVar('DisableJsTools'));\r
-               $this->updateConfig('CookieDomain',             postVar('CookieDomain'));\r
-               $this->updateConfig('CookiePath',               postVar('CookiePath'));\r
-               $this->updateConfig('CookieSecure',             postVar('CookieSecure'));\r
-               $this->updateConfig('URLMode',                  postVar('URLMode'));\r
-               $this->updateConfig('CookiePrefix',             postVar('CookiePrefix'));\r
-\r
-               // load new config and redirect (this way, the new language will be used is necessary)\r
-               // note that when changing cookie settings, this redirect might cause the user\r
-               // to have to log in again.\r
-               getConfig();\r
-               redirect($CONF['AdminURL'] . '?action=manage');\r
-               exit;\r
-\r
-       }\r
-\r
-\r
-       function updateConfig($name, $val) {\r
-               $name = addslashes($name);\r
-               $val = trim(addslashes($val));\r
-\r
-               $query = 'UPDATE '.sql_table('config')\r
-                          . " SET value='$val'"\r
-                          . " WHERE name='$name'";\r
-\r
-               mysql_query($query) or die("Query error: " . mysql_error());\r
-               return mysql_insert_id();\r
-       }\r
-\r
-       /**\r
-         * Error message\r
-         */\r
-       function error($msg) {\r
-               $this->pagehead();\r
-               ?>\r
-               <h2>Error!</h2>\r
-               <?php           echo $msg;\r
-               echo "<br />";\r
-               echo "<a href='index.php' onclick='history.back()'>"._BACK."</a>";\r
-               $this->pagefoot();\r
-               exit;\r
-       }\r
-\r
-       function disallow() {\r
-               ACTIONLOG::add(WARNING, _ACTIONLOG_DISALLOWED . serverVar('REQUEST_URI'));\r
-\r
-               $this->error(_ERROR_DISALLOWED);\r
-       }\r
-\r
-\r
-       function pagehead($extrahead = '') {\r
-               global $member, $nucleus, $CONF, $manager;\r
-\r
-               $manager->notify(\r
-                       'AdminPrePageHead',\r
-                       array(\r
-                               'extrahead' => &$extrahead,\r
-                               'action' => $this->action\r
-                       )\r
-               );\r
-\r
-               $baseUrl = htmlspecialchars($CONF['AdminURL']);\r
-\r
-               ?>\r
-               <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-               <html xmlns="http://www.w3.org/1999/xhtml">\r
-               <head>\r
-                       <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />\r
-                       <title><?php echo htmlspecialchars($CONF['SiteName'])?> - Admin</title>\r
-                       <link rel="stylesheet" title="Nucleus Admin Default" type="text/css" href="<?php echo $baseUrl?>styles/admin.css" />\r
-                       <link rel="stylesheet" title="Nucleus Admin Default" type="text/css"\r
-                       href="<?php echo $baseUrl?>styles/addedit.css" />\r
-\r
-                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/edit.js"></script>\r
-                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/admin.js"></script>\r
-                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/compatibility.js"></script>\r
-\r
-         <meta http-equiv='Pragma' content='no-cache' />\r
-         <meta http-equiv='Cache-Control' content='no-cache, must-revalidate' />\r
-         <meta http-equiv='Expires' content='-1' />\r
-\r
-                       <?php echo $extrahead?>\r
-               </head>\r
-               <body>\r
-               <div class="header">\r
-               <h1><?php echo htmlspecialchars($CONF['SiteName'])?></h1>\r
-               </div>\r
-               <div id="container">\r
-               <div id="content">\r
-               <div class="loginname">\r
-               <?php                   if ($member->isLoggedIn())\r
-                               echo _LOGGEDINAS . ' ' . $member->getDisplayName()\r
-                                       ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a>"\r
-                                       . "<br /><a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";\r
-                       else\r
-                               echo '<a href="index.php?action=showlogin" title="Log in">' , _NOTLOGGEDIN , '</a> <br />';\r
-\r
-                       echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a>";\r
-\r
-                       echo '<br />(';\r
-\r
-                       if ($member->isLoggedIn() && $member->isAdmin())\r
-                               echo '<a href="http://nucleuscms.org/version.php?v=',getNucleusVersion(),'&amp;pl=',getNucleusPatchLevel(),'" title="Check for upgrade">Nucleus CMS ', $nucleus['version'], '</a>';\r
-                       else\r
-                               echo 'Nucleus CMS ' , $nucleus['version'];\r
-                       echo ')';\r
-               echo '</div>';\r
-       }\r
-\r
-       function pagefoot() {\r
-               global $action, $member, $manager;\r
-\r
-               $manager->notify(\r
-                       'AdminPrePageFoot',\r
-                       array(\r
-                               'action' => $this->action\r
-                       )\r
-               );\r
-\r
-               if ($member->isLoggedIn() && ($action != 'showlogin')) {\r
-                       ?>\r
-                       <h2><?php echo  _LOGOUT ?></h2>\r
-                       <ul>\r
-                               <li><a href="index.php?action=overview"><?php echo  _BACKHOME?></a></li>\r
-                               <li><a href='index.php?action=logout'><?php echo  _LOGOUT?></a></li>\r
-                       </ul>\r
-                       <?php           }\r
-               ?>\r
-                       <div class="foot">\r
-                               <a href="http://nucleuscms.org/">Nucleus CMS</a> &copy; 2002-2005 The Nucleus Group\r
-                               -\r
-                               <a href="http://nucleuscms.org/donate.php">Donate!</a>\r
-                       </div>\r
-\r
-                       </div><!-- content -->\r
-\r
-                       <div id="quickmenu">\r
-\r
-                               <?php                           // ---- user settings ----\r
-                               if (($action != 'showlogin') && ($member->isLoggedIn())) {\r
-                                       echo '<ul>';\r
-                                       echo '<li><a href="index.php?action=overview">',_QMENU_HOME,'</a></li>';\r
-                                       echo '</ul>';\r
-\r
-                                       echo '<h2>',_QMENU_ADD,'</h2>';\r
-                                       echo '<form method="get" action="index.php"><div>';\r
-                                       echo '<input type="hidden" name="action" value="createitem" />';\r
-\r
-                                               $showAll = requestVar('showall');\r
-                                               if (($member->isAdmin()) && ($showAll == 'yes')) {\r
-                                                       // Super-Admins have access to all blogs! (no add item support though)\r
-                                                       $query =  'SELECT bnumber as value, bname as text'\r
-                                                                  . ' FROM ' . sql_table('blog')\r
-                                                                  . ' ORDER BY bname';\r
-                                               } else {\r
-                                                       $query =  'SELECT bnumber as value, bname as text'\r
-                                                                  . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')\r
-                                                                  . ' WHERE tblog=bnumber and tmember=' . $member->getID()\r
-                                                                  . ' ORDER BY bname';\r
-                                               }\r
-                                               $template['name'] = 'blogid';\r
-                                               $template['tabindex'] = 15000;\r
-                                               $template['extra'] = _QMENU_ADD_SELECT;\r
-                                               $template['selected'] = -1;\r
-                                               $template['shorten'] = 10;\r
-                                               $template['shortenel'] = '';\r
-                                               $template['javascript'] = 'onchange="return form.submit()"';\r
-                                               showlist($query,'select',$template);\r
-\r
-                                       echo '</div></form>';\r
-\r
-                                       echo '<h2>' . $member->getDisplayName(). '</h2>';\r
-                                       echo '<ul>';\r
-                                       echo '<li><a href="index.php?action=editmembersettings">',_QMENU_USER_SETTINGS,'</a></li>';\r
-                                       echo '<li><a href="index.php?action=browseownitems">',_QMENU_USER_ITEMS,'</a></li>';\r
-                                       echo '<li><a href="index.php?action=browseowncomments">',_QMENU_USER_COMMENTS,'</a></li>';\r
-                                       echo '</ul>';\r
-\r
-\r
-\r
-\r
-                                       // ---- general settings ----\r
-                                       if ($member->isAdmin()) {\r
-\r
-                                               echo '<h2>',_QMENU_MANAGE,'</h2>';\r
-\r
-                                               echo '<ul>';\r
-                                               echo '<li><a href="index.php?action=actionlog">',_QMENU_MANAGE_LOG,'</a></li>';\r
-                                               echo '<li><a href="index.php?action=settingsedit">',_QMENU_MANAGE_SETTINGS,'</a></li>';\r
-                                               echo '<li><a href="index.php?action=usermanagement">',_QMENU_MANAGE_MEMBERS,'</a></li>';\r
-                                               echo '<li><a href="index.php?action=createnewlog">',_QMENU_MANAGE_NEWBLOG,'</a></li>';\r
-                                               echo '<li><a href="index.php?action=backupoverview">',_QMENU_MANAGE_BACKUPS,'</a></li>';\r
-                                               echo '<li><a href="index.php?action=pluginlist">',_QMENU_MANAGE_PLUGINS,'</a></li>';\r
-                                               echo '</ul>';\r
-\r
-                                               echo '<h2>',_QMENU_LAYOUT,'</h2>';\r
-                                               echo '<ul>';\r
-                                               echo '<li><a href="index.php?action=skinoverview">',_QMENU_LAYOUT_SKINS,'</a></li>';\r
-                                               echo '<li><a href="index.php?action=templateoverview">',_QMENU_LAYOUT_TEMPL,'</a></li>';\r
-                                               echo '<li><a href="index.php?action=skinieoverview">',_QMENU_LAYOUT_IEXPORT,'</a></li>';\r
-                                               echo '</ul>';\r
-\r
-                                       }\r
-\r
-                                       $aPluginExtras = array();\r
-                                       $manager->notify(\r
-                                               'QuickMenu',\r
-                                               array(\r
-                                                       'options' => &$aPluginExtras\r
-                                               )\r
-                                       );\r
-                                       if (count($aPluginExtras) > 0)\r
-                                       {\r
-                                               echo '<h2>', _QMENU_PLUGINS, '</h2>';\r
-                                               echo '<ul>';\r
-                                               foreach ($aPluginExtras as $aInfo)\r
-                                               {\r
-                                                       echo '<li><a href="'.htmlspecialchars($aInfo['url']).'" title="'.htmlspecialchars($aInfo['tooltip']).'">'.htmlspecialchars($aInfo['title']).'</a></li>';\r
-                                               }\r
-                                               echo '</ul>';\r
-                                       }\r
-\r
-                               } else if (($action == 'activate') || ($action == 'activatesetpwd')) {\r
-\r
-                                       echo '<h2>', _QMENU_ACTIVATE, '</h2>', _QMENU_ACTIVATE_TEXT;\r
-                               } else {\r
-                                       // introduction text on login screen\r
-                                       echo '<h2>', _QMENU_INTRO, '</h2>', _QMENU_INTRO_TEXT;\r
-                               }\r
-                               ?>\r
-                       </div>\r
-\r
-                       <!-- content / quickmenu container -->\r
-                       </div>\r
-\r
-\r
-                       </body>\r
-                       </html>\r
-               <?php   }\r
-\r
-\r
-       function action_regfile() {\r
-               global $member, $CONF;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $member->teamRights($blogid) or $this->disallow();\r
-\r
-               // header-code stolen from phpMyAdmin\r
-               // REGEDIT and bookmarklet code stolen from GreyMatter\r
-\r
-               $sjisBlogName = getBlogNameFromID($blogid);\r
-               $sjisBlogName = mb_convert_encoding($sjisBlogName, "SJIS", "auto");\r
-\r
-               header('Content-Type: application/octetstream');\r
-               header('Content-Disposition: filename="nucleus.reg"');\r
-               header('Pragma: no-cache');\r
-               header('Expires: 0');\r
-\r
-               echo "REGEDIT4\n";\r
-               echo "[HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\MenuExt\\Post To &Nucleus (".$sjisBlogName.")]\n";\r
-               echo '@="' . $CONF['AdminURL'] . "bookmarklet.php?action=contextmenucode&blogid=".intval($blogid)."\"\n";\r
-               echo '"contexts"=hex:31';\r
-       }\r
-\r
-       function action_bookmarklet() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $member->teamRights($blogid) or $this->disallow();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-               $bm = getBookmarklet($blogid);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
-\r
-               ?>\r
-\r
-               <h2>Bookmarklet<!-- and Right Click Menu --></h2>\r
-\r
-               <p>\r
-               Bookmarklet とは、クリック1回で記事の投稿ができるシステムです。 この Bookmarklet をインストールすると、ブラウザのツールバーの'add to weblog'ボタンが利用可能となり、Nucleusの新規アイテムの追加ウィンドウがポップアップします。任意のWebページを開いた状態でこのボタンを押せば、そのWebページのタイトルと、そのページへのリンクタグがすでに埋め込まれた状態でアイテム追加ウィンドウが開き、さらに、そのページ内に引用したい文を選択した状態であればその引用文も自動的に引用します。\r
-               </p>\r
-\r
-               <h3>Bookmarklet</h3>\r
-               <p>\r
-                       下のリンク部分を「お気に入り」もしくはツールバーにドラッグできます。<small>(その前にテストしてみたい場合は単純に下のリンクをクリックしてみてください)</small>\r
-                       <br />\r
-                       <br />\r
-                       <a href="<?php echo htmlspecialchars($bm)?>">Add to <?php echo $blog->getShortName()?></a> (ほとんどのブラウザで動作します)\r
-               </p>\r
-\r
-               <h3>右クリックメニューにインストール (WindowsでIE使用時)</h3>\r
-               <p>\r
-                       <?php\r
-                               $url = 'index.php?action=regfile&blogid=' . intval($blogid);\r
-                               $url = $manager->addTicketToUrl($url);\r
-                       ?>\r
-                       あるいは<a href="<?php echo htmlspecialchars($url) ?>">右クリックメニュー</a>にインストールすることもできます (「開く」を選択すれば直接レジストリに登録します)\r
-               </p>\r
-\r
-               <p>\r
-                       このインストールした右クリックメニューを表示するためにはIEの再起動が必要です。\r
-               </p>\r
-\r
-               <h3>アンインストール</h3>\r
-               <p>\r
-                       「お気に入り」もしくはツールバーから消すには、単に削除するだけです。\r
-               </p>\r
-               \r
-               <p>\r
-                       右クリックメニューから消したい時は、以下の手順を踏んでください:\r
-               </p>\r
-\r
-               <ol>\r
-                       <li>スタートメニューから「ファイルを指定して実行...」を選択</li>\r
-                       <li>"regedit" と入力</li>\r
-                       <li>"OK" ボタンを押す</li>\r
-                       <li>"\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt" をツリーの中から検索</li>\r
-                       <li>"add to weblog" エントリを削除</li>                          \r
-               </ol>\r
-\r
-               <?php\r
-               $this->pagefoot();\r
-\r
-       }\r
-\r
-\r
-       function action_actionlog() {\r
-               global $member, $manager;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-\r
-               $url = $manager->addTicketToUrl('index.php?action=clearactionlog');\r
-\r
-               ?>\r
-                       <h2><?php echo _ACTIONLOG_CLEAR_TITLE?></h2>\r
-                       <p><a href="<?php echo htmlspecialchars($url)?>"><?php echo _ACTIONLOG_CLEAR_TEXT?></a></p>\r
-               <?php\r
-               echo '<h2>' . _ACTIONLOG_TITLE . '</h2>';\r
-\r
-               $query =  'SELECT * FROM '.sql_table('actionlog').' ORDER BY timestamp DESC';\r
-               $template['content'] = 'actionlist';\r
-               $amount = showlist($query,'table',$template);\r
-\r
-               $this->pagefoot();\r
-\r
-       }\r
-\r
-\r
-       function action_banlist() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
-\r
-               echo '<h2>' . _BAN_TITLE . " '". $this->bloglink($blog) ."'</h2>";\r
-\r
-               $query =  'SELECT * FROM '.sql_table('ban').' WHERE blogid='.$blogid.' ORDER BY iprange';\r
-               $template['content'] = 'banlist';\r
-               $amount = showlist($query,'table',$template);\r
-\r
-               if ($amount == 0)\r
-                       echo _BAN_NONE;\r
-\r
-               echo '<h2>'._BAN_NEW_TITLE.'</h2>';\r
-               echo "<p><a href='index.php?action=banlistnew&amp;blogid=$blogid'>"._BAN_NEW_TEXT."</a></p>";\r
-\r
-\r
-               $this->pagefoot();\r
-\r
-       }\r
-\r
-\r
-       function action_banlistdelete() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intRequestVar('blogid');\r
-               $iprange = requestVar('iprange');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-                       <h2><?php echo _BAN_REMOVE_TITLE?></h2>\r
-\r
-                       <form method="post" action="index.php">\r
-\r
-                       <h3><?php echo _BAN_IPRANGE?></h3>\r
-\r
-                       <p>\r
-                               <?php echo _CONFIRMTXT_BAN?> <?php echo htmlspecialchars($iprange) ?>\r
-                               <input name="iprange" type="hidden" value="<?php echo htmlspecialchars($iprange)?>" />\r
-                       </p>\r
-\r
-                       <h3><?php echo _BAN_BLOGS?></h3>\r
-\r
-                       <div>\r
-                               <input type="hidden" name="blogid" value="<?php echo $blogid?>" />\r
-                               <input name="allblogs" type="radio" value="0" id="allblogs_one" /><label for="allblogs_one">Only blog '<?php echo htmlspecialchars($blog->getName())?>'</label>\r
-                               <br />\r
-                               <input name="allblogs" type="radio" value="1" checked="checked" id="allblogs_all" /><label for="allblogs_all"><?php echo _BAN_ALLBLOGS?></label>\r
-                       </div>\r
-\r
-                       <h3><?php echo _BAN_DELETE_TITLE?></h3>\r
-\r
-                       <div>\r
-                               <?php $manager->addTicketHidden() ?>\r
-                               <input type="hidden" name="action" value="banlistdeleteconfirm" />\r
-                               <input type="submit" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div>\r
-\r
-                       </form>\r
-               <?php\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_banlistdeleteconfirm() {\r
-               global $member, $manager;\r
-\r
-               $blogid = intPostVar('blogid');\r
-               $allblogs = postVar('allblogs');\r
-               $iprange = postVar('iprange');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $deleted = array();\r
-\r
-               if (!$allblogs) {\r
-                       if (BAN::removeBan($blogid, $iprange))\r
-                               array_push($deleted, $blogid);\r
-               } else {\r
-                       // get blogs fot which member has admin rights\r
-                       $adminblogs = $member->getAdminBlogs();\r
-                       foreach ($adminblogs as $blogje) {\r
-                               if (BAN::removeBan($blogje, $iprange))\r
-                                       array_push($deleted, $blogje);\r
-                       }\r
-               }\r
-\r
-               if (sizeof($deleted) == 0)\r
-                       $this->error(_ERROR_DELETEBAN);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<a href="index.php?action=banlist&amp;blogid=',$blogid,'">(',_BACK,')</a>';\r
-               echo '<h2>'._BAN_REMOVED_TITLE.'</h2>';\r
-               echo "<p>"._BAN_REMOVED_TEXT."</p>";\r
-\r
-               echo "<ul>";\r
-               foreach ($deleted as $delblog) {\r
-                       $b =& $manager->getBlog($delblog);\r
-                       echo "<li>" . htmlspecialchars($b->getName()). "</li>";\r
-               }\r
-               echo "</ul>";\r
-\r
-               $this->pagefoot();\r
-\r
-       }\r
-\r
-       function action_banlistnewfromitem() {\r
-               $this->action_banlistnew(getBlogIDFromItemID(intRequestVar('itemid')));\r
-       }\r
-\r
-       function action_banlistnew($blogid = '') {\r
-               global $member, $manager;\r
-\r
-               if ($blogid == '')\r
-                       $blogid = intRequestVar('blogid');\r
-\r
-               $ip = requestVar('ip');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               $blog =& $manager->getBlog($blogid);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-               <h2><?php echo _BAN_ADD_TITLE?></h2>\r
-\r
-\r
-               <form method="post" action="index.php">\r
-\r
-               <h3><?php echo _BAN_IPRANGE?></h3>\r
-\r
-               <p><?php echo _BAN_IPRANGE_TEXT?></p>\r
-\r
-               <div class="note">\r
-               <b>An example</b>: "134.58.253.193" will only block one computer, while "134.58.253" will block 256 IP addresses, including the one from the first example.\r
-               </div>\r
-\r
-               <div>\r
-               <?php                   if ($ip) {\r
-               ?>\r
-                       <input name="iprange" type="radio" value="<?php echo htmlspecialchars($ip)?>" checked="checked" id="ip_fixed" /><label for="ip_fixed"><?php echo htmlspecialchars($ip)?></label>\r
-                       <br />\r
-                       <input name="iprange" type="radio" value="custom" id="ip_custom" /><label for="ip_custom">Custom: </label><input name='customiprange' value='<?php echo htmlspecialchars($ip)?>' maxlength='15' size='15' />\r
-               <?php   } else {\r
-                               echo "<input name='iprange' value='custom' type='hidden' />";\r
-                               echo "<input name='customiprange' value='' maxlength='15' size='15' />";\r
-                       }\r
-               ?>\r
-               </div>\r
-\r
-               <h3><?php echo _BAN_BLOGS?></h3>\r
-\r
-               <p><?php echo _BAN_BLOGS_TEXT?></p>\r
-\r
-               <div>\r
-                       <input type="hidden" name="blogid" value="<?php echo $blogid?>" />\r
-                       <input name="allblogs" type="radio" value="0" id="allblogs_one" /><label for="allblogs_one">'<?php echo htmlspecialchars($blog->getName())?>'</label>\r
-                       <br />\r
-                       <input name="allblogs" type="radio" value="1" checked="checked" id="allblogs_all" /><label for="allblogs_all"><?php echo _BAN_ALLBLOGS?></label>\r
-               </div>\r
-\r
-               <h3><?php echo _BAN_REASON_TITLE?></h3>\r
-\r
-               <p><?php echo _BAN_REASON_TEXT?></p>\r
-\r
-               <div><textarea name="reason" cols="40" rows="5"></textarea></div>\r
-\r
-               <h3><?php echo _BAN_ADD_TITLE?></h3>\r
-\r
-               <div>\r
-                       <input name="action" type="hidden" value="banlistadd" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="submit" value="<?php echo _BAN_ADD_BTN?>" />\r
-               </div>\r
-\r
-               </form>\r
-\r
-               <?php           $this->pagefoot();\r
-       }\r
-\r
-       function action_banlistadd() {\r
-               global $member;\r
-\r
-               $blogid =               intPostVar('blogid');\r
-               $allblogs =     postVar('allblogs');\r
-               $iprange =              postVar('iprange');\r
-               if ($iprange == "custom")\r
-                       $iprange = postVar('customiprange');\r
-               $reason =               postVar('reason');\r
-\r
-               $member->blogAdminRights($blogid) or $this->disallow();\r
-\r
-               // TODO: check IP range validity\r
-\r
-               if (!$allblogs) {\r
-                       if (!BAN::addBan($blogid, $iprange, $reason))\r
-                               $this->error(_ERROR_ADDBAN);\r
-               } else {\r
-                       // get blogs fot which member has admin rights\r
-                       $adminblogs = $member->getAdminBlogs();\r
-                       $failed = 0;\r
-                       foreach ($adminblogs as $blogje) {\r
-                               if (!BAN::addBan($blogje, $iprange, $reason))\r
-                                       $failed = 1;\r
-                       }\r
-                       if ($failed)\r
-                               $this->error(_ERROR_ADDBAN);\r
-               }\r
-\r
-               $this->action_banlist();\r
-\r
-       }\r
-\r
-       function action_clearactionlog() {\r
-               global $member;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               ACTIONLOG::clear();\r
-\r
-               $this->action_manage(_MSG_ACTIONLOGCLEARED);\r
-       }\r
-\r
-       function action_backupoverview() {\r
-               global $member, $manager;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-               ?>\r
-               <h2><?php echo _BACKUPS_TITLE?></h2>\r
-\r
-               <h3><?php echo _BACKUP_TITLE?></h3>\r
-\r
-               <p><?php echo _BACKUP_INTRO?></p>\r
-\r
-               <form method="post" action="index.php"><p>\r
-               <input type="hidden" name="action" value="backupcreate" />\r
-               <?php $manager->addTicketHidden() ?>\r
-\r
-               <input type="radio" name="gzip" value="1" checked="checked" id="gzip_yes" tabindex="10" /><label for="gzip_yes"><?php echo _BACKUP_ZIP_YES?></label>\r
-               <br />\r
-               <input type="radio" name="gzip" value="0" id="gzip_no" tabindex="10" /><label for="gzip_no" ><?php echo _BACKUP_ZIP_NO?></label>\r
-               <br /><br />\r
-               <input type="submit" value="<?php echo _BACKUP_BTN?>" tabindex="20" />\r
-\r
-               </p></form>\r
-\r
-               <div class="note"><?php echo _BACKUP_NOTE?></div>\r
-\r
-\r
-               <h3><?php echo _RESTORE_TITLE?></h3>\r
-\r
-               <div class="note"><?php echo _RESTORE_NOTE?></div>\r
-\r
-               <p><?php echo _RESTORE_INTRO?></p>\r
-\r
-               <form method="post" action="index.php" enctype="multipart/form-data"><p>\r
-                       <input type="hidden" name="action" value="backuprestore" />\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input name="backup_file" type="file" tabindex="30" />\r
-                       <br /><br />\r
-                       <input type="submit" value="<?php echo _RESTORE_BTN?>" tabindex="40" />\r
-                       <br /><input type="checkbox" name="letsgo" value="1" id="letsgo" tabindex="50" /><label for="letsgo"><?php echo _RESTORE_IMSURE?></label>\r
-                       <br /><?php echo _RESTORE_WARNING?>\r
-               </p></form>\r
-\r
-               <?php           $this->pagefoot();\r
-       }\r
-\r
-       function action_backupcreate() {\r
-               global $member, $DIR_LIBS;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // use compression ?\r
-               $useGzip = intval(postVar('gzip'));\r
-\r
-               include($DIR_LIBS . 'backup.php');\r
-\r
-               // try to extend time limit\r
-               // (creating/restoring dumps might take a while)\r
-               @set_time_limit(1200);\r
-\r
-               do_backup($useGzip);\r
-               exit;\r
-       }\r
-\r
-\r
-       function action_backuprestore() {\r
-               global $member, $DIR_LIBS;\r
-\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               if (intPostVar('letsgo') != 1)\r
-                       $this->error(_ERROR_BACKUP_NOTSURE);\r
-\r
-               include($DIR_LIBS . 'backup.php');\r
-\r
-               // try to extend time limit\r
-               // (creating/restoring dumps might take a while)\r
-               @set_time_limit(1200);\r
-\r
-               $message = do_restore();\r
-               if ($message != '')\r
-                       $this->error($message);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-               <h2><?php echo _RESTORE_COMPLETE?></h2>\r
-               <?php           $this->pagefoot();\r
-\r
-       }\r
-\r
-\r
-       function action_pluginlist() {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
-\r
-               echo '<h2>' , _PLUGS_TITLE_MANAGE , ' ', help('plugins'), '</h2>';\r
-\r
-               echo '<h3>' , _PLUGS_TITLE_INSTALLED , '</h3>';\r
-\r
-\r
-               $query =  'SELECT * FROM '.sql_table('plugin').' ORDER BY porder ASC';\r
-\r
-               $template['content'] = 'pluginlist';\r
-               $template['tabindex'] = 10;\r
-               showlist($query, 'table', $template);\r
-\r
-               ?>\r
-                       <h3><?php echo _PLUGS_TITLE_UPDATE?></h3>\r
-\r
-                       <p><?php echo _PLUGS_TEXT_UPDATE?></p>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                               <input type="hidden" name="action" value="pluginupdate" />\r
-                               <?php $manager->addTicketHidden() ?>\r
-                               <input type="submit" value="<?php echo _PLUGS_BTN_UPDATE ?>" tabindex="20" />\r
-                       </div></form>\r
-\r
-                       <h3><?php echo _PLUGS_TITLE_NEW?></h3>\r
-\r
-                       <?php                           // find a list of possibly non-installed plugins\r
-                               $candidates = array();\r
-                               global $DIR_PLUGINS;\r
-                               $dirhandle = opendir($DIR_PLUGINS);\r
-                               while ($filename = readdir($dirhandle)) {\r
-                                       if (ereg('^NP_(.*)\.php$',$filename,$matches)) {\r
-                                               $name = $matches[1];\r
-                                               // only show in list when not yet installed\r
-                                               if (mysql_num_rows(sql_query('SELECT * FROM '.sql_table('plugin').' WHERE pfile="NP_'.addslashes($name).'"')) == 0)\r
-                                                       array_push($candidates,$name);\r
-                                       }\r
-                               }\r
-                               closedir($dirhandle);\r
-\r
-                               if (sizeof($candidates) > 0) {\r
-                       ?>\r
-\r
-                       <p><?php echo _PLUGS_ADD_TEXT?></p>\r
-\r
-\r
-                       <form method='post' action='index.php'><div>\r
-                               <input type='hidden' name='action' value='pluginadd' />\r
-                               <?php $manager->addTicketHidden() ?>\r
-                               <select name="filename" tabindex="30">\r
-                               <?php                                   foreach($candidates as $name)\r
-                                               echo '<option value="NP_',$name,'">',htmlspecialchars($name),'</option>';\r
-                               ?>\r
-                               </select>\r
-                               <input type='submit' tabindex="40" value='<?php echo _PLUGS_BTN_INSTALL?>' />\r
-                       </div></form>\r
-\r
-               <?php                   } else {        // sizeof(candidates) == 0\r
-                               echo '<p>',_PLUGS_NOCANDIDATES,'</p>';\r
-                       }\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-       function action_pluginhelp() {\r
-               global $member, $manager, $DIR_PLUGINS, $CONF;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $plugid = intGetVar('plugid');\r
-\r
-               if (!$manager->pidInstalled($plugid))\r
-                       $this->error(_ERROR_NOSUCHPLUGIN);\r
-\r
-               $plugName = getPluginNameFromPid($plugid);\r
-\r
-               $this->pagehead();\r
-\r
-               echo '<p><a href="index.php?action=pluginlist">(',_PLUGS_BACK,')</a></p>';\r
-\r
-               echo '<h2>',_PLUGS_HELP_TITLE,': ',htmlspecialchars($plugName),'</h2>';\r
-\r
-               $plug =& $manager->getPlugin($plugName);\r
-               $helpFile = $DIR_PLUGINS.$plug->getShortName().'/help.html';\r
-\r
-               if (($plug->supportsFeature('HelpPage') > 0) && (@file_exists($helpFile))) {\r
-                       @readfile($helpFile);\r
-               } else {\r
-                       echo '<p>Error: ', _ERROR_PLUGNOHELPFILE,'</p>';\r
-                       echo '<p><a href="index.php?action=pluginlist">(',_BACK,')</a></p>';\r
-               }\r
-\r
-\r
-               $this->pagefoot();\r
-       }\r
-\r
-\r
-       function action_pluginadd() {\r
-               global $member, $manager, $DIR_PLUGINS;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $name = postVar('filename');\r
-\r
-               if ($manager->pluginInstalled($name))\r
-                       $this->error(_ERROR_DUPPLUGIN);\r
-               if (!checkPlugin($name))\r
-                       $this->error(_ERROR_PLUGFILEERROR . ' (' . $name . ')');\r
-\r
-               // check if the plugin dependency is met\r
-               $plugin =& $manager->getPlugin($name);\r
-               $pluginList = $plugin->getPluginDep();\r
-               foreach ($pluginList as $pluginName)\r
-               {\r
-\r
-                       $res = sql_query('SELECT * FROM '.sql_table('plugin') . ' WHERE pfile="' . $pluginName . '"');\r
-                       if (mysql_num_rows($res) == 0)\r
-                       {\r
-                               // uninstall plugin again...\r
-                               $this->deleteOnePlugin($plugin->getID());\r
-\r
-                               $this->error(_ERROR_INSREQPLUGIN . $pluginName);\r
-                       }\r
-               }\r
-\r
-               // get number of currently installed plugins\r
-               $numCurrent = mysql_num_rows(sql_query('SELECT * FROM '.sql_table('plugin')));\r
-\r
-               // plugin will be added as last one in the list\r
-               $newOrder = $numCurrent + 1;\r
-\r
-               $manager->notify(\r
-                       'PreAddPlugin',\r
-                       array(\r
-                               'file' => &$name\r
-                       )\r
-               );\r
-\r
-               // do this before calling getPlugin (in case the plugin id is used there)\r
-               $query = 'INSERT INTO '.sql_table('plugin').' (porder, pfile) VALUES ('.$newOrder.',"'.addslashes($name).'")';\r
-               sql_query($query);\r
-               $iPid = mysql_insert_id();\r
-\r
-               // need to update the plugin object's pid since we didn't have it above when it's first create....\r
-               $plugin->plugid = $iPid;\r
-\r
-               $manager->clearCachedInfo('installedPlugins');\r
-\r
-               // call the install method of the plugin\r
-               if (!$plugin)\r
-               {\r
-                       sql_query('DELETE FROM ' . sql_table('plugin') . ' WHERE pid='. intval($iPid));\r
-                       $manager->clearCachedInfo('installedPlugins');\r
-                       $this->error('Plugin could not be loaded, or does not support certain features that are required for it to run on your Nucleus installation (you might want to check the <a href="?action=actionlog">actionlog</a> for more info)');\r
-               }\r
-\r
-               // check if plugin needs a newer Nucleus version\r
-               if (getNucleusVersion() < $plugin->getMinNucleusVersion())\r
-               {\r
-                       // uninstall plugin again...\r
-                       $this->deleteOnePlugin($plugin->getID());\r
-\r
-                       // ...and show error\r
-                       $this->error(_ERROR_NUCLEUSVERSIONREQ . $plugin->getMinNucleusVersion());\r
-               }\r
-\r
-               // check if plugin needs a newer Nucleus version\r
-               if ((getNucleusVersion() == $plugin->getMinNucleusVersion()) && (getNucleusPatchLevel() < $plugin->getMinNucleusPatchLevel()))\r
-               {\r
-                       // uninstall plugin again...\r
-                       $this->deleteOnePlugin($plugin->getID());\r
-\r
-                       // ...and show error\r
-                       $this->error(_ERROR_NUCLEUSVERSIONREQ . $plugin->getMinNucleusVersion() . ' patch ' . $plugin->getMinNucleusPatchLevel());\r
-               }\r
-\r
-               $plugin->install();\r
-\r
-               $manager->notify(\r
-                       'PostAddPlugin',\r
-                       array(\r
-                               'plugin' => &$plugin\r
-                       )\r
-               );\r
-\r
-               // update all events\r
-               $this->action_pluginupdate();\r
-       }\r
-\r
-       function action_pluginupdate() {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               // delete everything from plugin_events\r
-               sql_query('DELETE FROM '.sql_table('plugin_event'));\r
-\r
-               // loop over all installed plugins\r
-               $res = sql_query('SELECT pid, pfile FROM '.sql_table('plugin'));\r
-               while($o = mysql_fetch_object($res)) {\r
-                       $pid = $o->pid;\r
-                       $plug =& $manager->getPlugin($o->pfile);\r
-                       if ($plug)\r
-                       {\r
-                               $eventList = $plug->getEventList();\r
-                               foreach ($eventList as $eventName)\r
-                                       sql_query('INSERT INTO '.sql_table('plugin_event').' (pid, event) VALUES ('.$pid.', \''.addslashes($eventName).'\')');\r
-                       }\r
-               }\r
-\r
-               $this->action_pluginlist();\r
-       }\r
-\r
-       function action_plugindelete() {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $pid = intGetVar('plugid');\r
-\r
-               if (!$manager->pidInstalled($pid))\r
-                       $this->error(_ERROR_NOSUCHPLUGIN);\r
-\r
-               $this->pagehead();\r
-               ?>\r
-                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
-\r
-                       <p><?php echo _CONFIRMTXT_PLUGIN?> <strong><?php echo getPluginNameFromPid($pid)?></strong>?</p>\r
-\r
-                       <form method="post" action="index.php"><div>\r
-                       <?php $manager->addTicketHidden() ?>\r
-                       <input type="hidden" name="action" value="plugindeleteconfirm" />\r
-                       <input type="hidden" name="plugid" value="<?php echo $pid; ?>" />\r
-                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
-                       </div></form>\r
-               <?php           $this->pagefoot();\r
-       }\r
-\r
-       function action_plugindeleteconfirm() {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $pid = intPostVar('plugid');\r
-\r
-               $error = $this->deleteOnePlugin($pid, 1);\r
-               if ($error) {\r
-                       $this->error($error);\r
-               }\r
-\r
-               $this->action_pluginlist();\r
-       }\r
-\r
-       function deleteOnePlugin($pid, $callUninstall = 0) {\r
-               global $manager;\r
-\r
-               $pid = intval($pid);\r
-\r
-               if (!$manager->pidInstalled($pid))\r
-                       return _ERROR_NOSUCHPLUGIN;\r
-\r
-               $name = quickQuery('SELECT pfile as result FROM '.sql_table('plugin').' WHERE pid='.$pid);\r
-\r
-               // call the unInstall method of the plugin\r
-               if ($callUninstall) {\r
-                       $plugin =& $manager->getPlugin($name);\r
-                       if ($plugin) $plugin->unInstall();\r
-               }\r
-\r
-               // check dependency before delete\r
-               $res = sql_query('SELECT pfile FROM '.sql_table('plugin'));\r
-               while($o = mysql_fetch_object($res)) {\r
-                       $plug =& $manager->getPlugin($o->pfile);\r
-                       if ($plug)\r
-                       {\r
-                               $depList = $plug->getPluginDep();\r
-                               foreach ($depList as $depName)\r
-                               {\r
-                                       if ($name == $depName)\r
-                                       {\r
-                                               return _ERROR_DELREQPLUGIN . $o->pfile;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-\r
-               $manager->notify('PreDeletePlugin', array('plugid' => $pid));\r
-\r
-               // delete all subscriptions\r
-               sql_query('DELETE FROM '.sql_table('plugin_event').' WHERE pid=' . $pid);\r
-\r
-               // delete all options\r
-               // get OIDs from plugin_option_desc\r
-               $res = sql_query('SELECT oid FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . $pid);\r
-               $aOIDs = array();\r
-               while ($o = mysql_fetch_object($res)) {\r
-                       array_push($aOIDs, $o->oid);\r
-               }\r
-\r
-               // delete from plugin_option and plugin_option_desc\r
-               sql_query('DELETE FROM '.sql_table('plugin_option_desc').' WHERE opid=' . $pid);\r
-               if (count($aOIDs) > 0)\r
-                       sql_query('DELETE FROM '.sql_table('plugin_option').' WHERE oid in ('.implode(',',$aOIDs).')');\r
-\r
-               // update order numbers\r
-               $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid=' . $pid));\r
-               sql_query('UPDATE '.sql_table('plugin').' SET porder=(porder - 1) WHERE porder>'.$o->porder);\r
-\r
-               // delete row\r
-               sql_query('DELETE FROM '.sql_table('plugin').' WHERE pid='.$pid);\r
-\r
-               $manager->clearCachedInfo('installedPlugins');\r
-               $manager->notify('PostDeletePlugin', array('plugid' => $pid));\r
-\r
-               return '';\r
-       }\r
-\r
-       function action_pluginup() {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $plugid = intGetVar('plugid');\r
-\r
-               if (!$manager->pidInstalled($plugid))\r
-                       $this->error(_ERROR_NOSUCHPLUGIN);\r
-\r
-               // 1. get old order number\r
-               $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid='.$plugid));\r
-               $oldOrder = $o->porder;\r
-\r
-               // 2. calculate new order number\r
-               $newOrder = ($oldOrder > 1) ? ($oldOrder - 1) : 1;\r
-\r
-               // 3. update plug numbers\r
-               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$oldOrder.' WHERE porder='.$newOrder);\r
-               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$newOrder.' WHERE pid='.$plugid);\r
-\r
-               $this->action_pluginlist();\r
-       }\r
-\r
-       function action_plugindown() {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $plugid = intGetVar('plugid');\r
-               if (!$manager->pidInstalled($plugid))\r
-                       $this->error(_ERROR_NOSUCHPLUGIN);\r
-\r
-               // 1. get old order number\r
-               $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid='.$plugid));\r
-               $oldOrder = $o->porder;\r
-\r
-               $maxOrder = mysql_num_rows(sql_query('SELECT * FROM '.sql_table('plugin')));\r
-\r
-               // 2. calculate new order number\r
-               $newOrder = ($oldOrder < $maxOrder) ? ($oldOrder + 1) : $maxOrder;\r
-\r
-               // 3. update plug numbers\r
-               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$oldOrder.' WHERE porder='.$newOrder);\r
-               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$newOrder.' WHERE pid='.$plugid);\r
-\r
-               $this->action_pluginlist();\r
-       }\r
-\r
-       function action_pluginoptions($message = '') {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $pid = intRequestVar('plugid');\r
-               if (!$manager->pidInstalled($pid))\r
-                       $this->error(_ERROR_NOSUCHPLUGIN);\r
-\r
-               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';\r
-               $this->pagehead($extrahead);\r
-\r
-               ?>\r
-                       <p><a href="index.php?action=pluginlist">(<?php echo _PLUGS_BACK?>)</a></p>\r
-\r
-                       <h2>Options for <?php echo htmlspecialchars(getPluginNameFromPid($pid))?></h2>\r
-\r
-                       <?php if  ($message) echo $message?>\r
-\r
-                       <form action="index.php" method="post">\r
-                       <div>\r
-                               <input type="hidden" name="action" value="pluginoptionsupdate" />\r
-                               <input type="hidden" name="plugid" value="<?php echo $pid?>" />\r
-\r
-               <?php\r
-\r
-               $manager->addTicketHidden();\r
-\r
-               $aOptions = array();\r
-               $aOIDs = array();\r
-               $query = 'SELECT * FROM ' . sql_table('plugin_option_desc') . ' WHERE ocontext=\'global\' and opid=' . $pid . ' ORDER BY oid ASC';\r
-               $r = sql_query($query);\r
-               while ($o = mysql_fetch_object($r)) {\r
-                       array_push($aOIDs, $o->oid);\r
-                       $aOptions[$o->oid] = array(\r
-                                               'oid' => $o->oid,\r
-                                               'value' => $o->odef,\r
-                                               'name' => $o->oname,\r
-                                               'description' => $o->odesc,\r
-                                               'type' => $o->otype,\r
-                                               'typeinfo' => $o->oextra,\r
-                                               'contextid' => 0\r
-                       );\r
-               }\r
-               // fill out actual values\r
-               if (count($aOIDs) > 0) {\r
-                       $r = sql_query('SELECT oid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid in ('.implode(',',$aOIDs).')');\r
-                       while ($o = mysql_fetch_object($r))\r
-                               $aOptions[$o->oid]['value'] = $o->ovalue;\r
-               }\r
-\r
-               // call plugins\r
-               $manager->notify('PrePluginOptionsEdit',array('context' => 'global', 'plugid' => $pid, 'options'=>&$aOptions));\r
-\r
-               $template['content'] = 'plugoptionlist';\r
-               $amount = showlist($aOptions,'table',$template);\r
-               if ($amount == 0)\r
-                       echo '<p>',_ERROR_NOPLUGOPTIONS,'</p>';\r
-\r
-               ?>\r
-                       </div>\r
-                       </form>\r
-               <?php           $this->pagefoot();\r
-\r
-\r
-\r
-       }\r
-\r
-       function action_pluginoptionsupdate() {\r
-               global $member, $manager;\r
-\r
-               // check if allowed\r
-               $member->isAdmin() or $this->disallow();\r
-\r
-               $pid = intRequestVar('plugid');\r
-               if (!$manager->pidInstalled($pid))\r
-                       $this->error(_ERROR_NOSUCHPLUGIN);\r
-\r
-               $aOptions = requestArray('plugoption');\r
-               NucleusPlugin::_applyPluginOptions($aOptions);\r
-\r
-               $manager->notify('PostPluginOptionsUpdate',array('context' => 'global', 'plugid' => $pid));\r
-\r
-               $this->action_pluginoptions(_PLUGS_OPTIONS_UPDATED);\r
-       }\r
-\r
-       /**\r
-         * @static\r
-         */\r
-       function _insertPluginOptions($context, $contextid = 0) {\r
-               // get all current values for this contextid\r
-               // (note: this might contain doubles for overlapping contextids)\r
-               $aIdToValue = array();\r
-               $res = sql_query('SELECT oid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE ocontextid=' . intval($contextid));\r
-               while ($o = mysql_fetch_object($res)) {\r
-                       $aIdToValue[$o->oid] = $o->ovalue;\r
-               }\r
-\r
-               // get list of oids per pid\r
-               $query = 'SELECT * FROM ' . sql_table('plugin_option_desc') . ',' . sql_table('plugin')\r
-                          . ' WHERE opid=pid and ocontext=\''.addslashes($context).'\' ORDER BY porder, oid ASC';\r
-               $res = sql_query($query);\r
-               $aOptions = array();\r
-               while ($o = mysql_fetch_object($res)) {\r
-                       if (in_array($o->oid, array_keys($aIdToValue)))\r
-                               $value = $aIdToValue[$o->oid];\r
-                       else\r
-                               $value = $o->odef;\r
-\r
-                       array_push($aOptions, array(\r
-                               'pid' => $o->pid,\r
-                               'pfile' => $o->pfile,\r
-                               'oid' => $o->oid,\r
-                               'value' => $value,\r
-                               'name' => $o->oname,\r
-                               'description' => $o->odesc,\r
-                               'type' => $o->otype,\r
-                               'typeinfo' => $o->oextra,\r
-                               'contextid' => $contextid,\r
-                               'extra' => ''\r
-                       ));\r
-               }\r
-\r
-               global $manager;\r
-               $manager->notify('PrePluginOptionsEdit',array('context' => $context, 'contextid' => $contextid, 'options'=>&$aOptions));\r
-\r
-\r
-               $iPrevPid = -1;\r
-               foreach ($aOptions as $aOption) {\r
-\r
-                       // new plugin?\r
-                       if ($iPrevPid != $aOption['pid']) {\r
-                               $iPrevPid = $aOption['pid'];\r
-\r
-                               echo '<tr><th colspan="2">Options for ', htmlspecialchars($aOption['pfile']),'</th></tr>';\r
-                       }\r
-\r
-                       echo '<tr>';\r
-                       listplug_plugOptionRow($aOption);\r
-                       echo '</tr>';\r
-\r
-               }\r
-\r
-\r
-       }\r
-\r
-       /* helper functions to create option forms etc. */\r
-       function input_yesno($name, $checkedval,$tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO) {\r
-               $id = htmlspecialchars($name);\r
-               $id = str_replace('[','-',$id);\r
-               $id = str_replace(']','-',$id);\r
-               $id1 = $id . htmlspecialchars($value1);\r
-               $id2 = $id . htmlspecialchars($value2);\r
-\r
-               echo '<input type="radio" name="', htmlspecialchars($name),'" value="', htmlspecialchars($value1),'" ';\r
-                       if ($checkedval == $value1)\r
-                               echo "tabindex='$tabindex' checked='checked'";\r
-                       echo ' id="'.$id1.'" /><label for="'.$id1.'">' . $yesval . '</label>';\r
-               echo ' ';\r
-               echo '<input type="radio" name="', htmlspecialchars($name),'" value="', htmlspecialchars($value2),'" ';\r
-                       if ($checkedval != $value1)\r
-                               echo "tabindex='$tabindex' checked='checked'";\r
-                       echo ' id="'.$id2.'" /><label for="'.$id2.'">' . $noval . '</label>';\r
-       }\r
-\r
-\r
-\r
-} // class ADMIN\r
-\r
-class ENCAPSULATE {\r
-       /**\r
-         * Uses $call to call a function using parameters $params\r
-         * This function should return the amount of entries shown.\r
-         * When entries are show, batch operation handlers are shown too.\r
-         * When no entries were shown, $errormsg is used to display an error\r
-         *\r
-         * Passes on the amount of results found (for further encapsulation)\r
-         */\r
-       function doEncapsulate($call, $params, $errorMessage = 'No entries') {\r
-               // start output buffering\r
-               ob_start();\r
-\r
-               $nbOfRows = call_user_func_array($call, $params);\r
-\r
-               // get list contents and stop buffering\r
-               $list = ob_get_contents();\r
-               ob_end_clean();\r
-\r
-               if ($nbOfRows > 0) {\r
-                       $this->showHead();\r
-                       echo $list;\r
-                       $this->showFoot();\r
-               } else {\r
-                       echo $errorMessage;\r
-               }\r
-\r
-               return $nbOfRows;\r
-       }\r
-}\r
-\r
-\r
-/**\r
-  * A class used to encapsulate a list of some sort inside next/prev buttons\r
-  */\r
-class NAVLIST extends ENCAPSULATE {\r
-\r
-       function NAVLIST($action, $start, $amount, $minamount, $maxamount, $blogid, $search, $itemid) {\r
-               $this->action = $action;\r
-               $this->start = $start;\r
-               $this->amount = $amount;\r
-               $this->minamount = $minamount;\r
-               $this->maxamount = $maxamount;\r
-               $this->blogid = $blogid;\r
-               $this->search = $search;\r
-               $this->itemid = $itemid;\r
-       }\r
-\r
-       function showBatchList($batchtype, $query, $type, $template, $errorMessage = _LISTS_NOMORE) {\r
-               $batch =& new BATCH($batchtype);\r
-\r
-               $this->doEncapsulate(\r
-                               array(&$batch, 'showlist'),\r
-                               array(&$query, $type, $template),\r
-                               $errorMessage\r
-               );\r
-\r
-       }\r
-\r
-\r
-       function showHead() {\r
-               $this->showNavigation();\r
-       }\r
-       function showFoot() {\r
-               $this->showNavigation();\r
-       }\r
-\r
-       /**\r
-         * Displays a next/prev bar for long tables\r
-         */\r
-       function showNavigation() {\r
-               $action = $this->action;\r
-               $start = $this->start;\r
-               $amount = $this->amount;\r
-               $minamount = $this->minamount;\r
-               $maxamount = $this->maxamount;\r
-               $blogid = $this->blogid;\r
-               $search = $this->search;\r
-               $itemid = $this->itemid;\r
-\r
-               $prev = $start - $amount;\r
-               if ($prev < $minamount) $prev=$minamount;\r
-\r
-               // maxamount not used yet\r
-       //      if ($start + $amount <= $maxamount)\r
-                       $next = $start + $amount;\r
-       //      else\r
-       //              $next = $start;\r
-\r
-       ?>\r
-       <table class="navigation">\r
-       <tr><td>\r
-               <form method="post" action="index.php"><div>\r
-               <input type="submit" value="&lt;&lt; <?php echo  _LISTS_PREV?>" />\r
-               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
-               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />\r
-               <input type="hidden" name="action" value="<?php echo  $action; ?>" />\r
-               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />\r
-               <input type="hidden" name="search" value="<?php echo  $search; ?>" />\r
-               <input type="hidden" name="start" value="<?php echo  $prev; ?>" />\r
-               </div></form>\r
-       </td><td>\r
-               <form method="post" action="index.php"><div>\r
-               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
-               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />\r
-               <input type="hidden" name="action" value="<?php echo  $action; ?>" />\r
-               <input name="amount" size="3" value="<?php echo  $amount; ?>" /> <?php echo _LISTS_PERPAGE?>\r
-               <input type="hidden" name="start" value="<?php echo  $start; ?>" />\r
-               <input type="hidden" name="search" value="<?php echo  $search; ?>" />\r
-               <input type="submit" value="&gt; <?php echo _LISTS_CHANGE?>" />\r
-               </div></form>\r
-       </td><td>\r
-               <form method="post" action="index.php"><div>\r
-               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
-               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />\r
-               <input type="hidden" name="action" value="<?php echo  $action; ?>" />\r
-               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />\r
-               <input type="hidden" name="start" value="0" />\r
-               <input type="text" name="search" value="<?php echo  $search; ?>" size="7" />\r
-               <input type="submit" value="&gt; <?php echo  _LISTS_SEARCH?>" />\r
-               </div></form>\r
-       </td><td>\r
-               <form method="post" action="index.php"><div>\r
-               <input type="submit" value="<?php echo _LISTS_NEXT?> &gt; &gt;" />\r
-               <input type="hidden" name="search" value="<?php echo  $search; ?>" />\r
-               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
-               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />\r
-               <input type="hidden" name="action" value="<?php echo  $action; ?>" />\r
-               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />\r
-               <input type="hidden" name="start" value="<?php echo  $next; ?>" />\r
-               </div></form>\r
-       </td></tr>\r
-       </table>\r
-       <?php   }\r
-\r
-\r
-}\r
-\r
-/**\r
- * A class used to encapsulate a list of some sort in a batch selection\r
- */\r
-class BATCH extends ENCAPSULATE {\r
-       function BATCH($type) {\r
-               $this->type = $type;\r
-       }\r
-\r
-       function showHead() {\r
-               ?>\r
-                       <form method="post" action="index.php">\r
-               <?php\r
-// TODO: get a list op operations above the list too\r
-// (be careful not to use the same names for the select...)\r
-//             $this->showOperationList();\r
-       }\r
-\r
-       function showFoot() {\r
-               $this->showOperationList();\r
-               ?>\r
-                       </form>\r
-               <?php   }\r
-\r
-       function showOperationList() {\r
-               global $manager;\r
-               ?>\r
-               <div class="batchoperations">\r
-                       <?php echo _BATCH_WITH_SEL ?>\r
-                       <select name="batchaction">\r
-                       <?php                           $options = array();\r
-                               switch($this->type) {\r
-                                       case 'item':\r
-                                               $options = array(\r
-                                                       'delete'        => _BATCH_ITEM_DELETE,\r
-                                                       'move'          => _BATCH_ITEM_MOVE\r
-                                               );\r
-                                               break;\r
-                                       case 'member':\r
-                                               $options = array(\r
-                                                       'delete'        => _BATCH_MEMBER_DELETE,\r
-                                                       'setadmin'      => _BATCH_MEMBER_SET_ADM,\r
-                                                       'unsetadmin' => _BATCH_MEMBER_UNSET_ADM\r
-                                               );\r
-                                               break;\r
-                                       case 'team':\r
-                                               $options = array(\r
-                                                       'delete'        => _BATCH_TEAM_DELETE,\r
-                                                       'setadmin'      => _BATCH_TEAM_SET_ADM,\r
-                                                       'unsetadmin' => _BATCH_TEAM_UNSET_ADM,\r
-                                               );\r
-                                               break;\r
-                                       case 'category':\r
-                                               $options = array(\r
-                                                       'delete'        => _BATCH_CAT_DELETE,\r
-                                                       'move'          => _BATCH_CAT_MOVE,\r
-                                               );\r
-                                               break;\r
-                                       case 'comment':\r
-                                               $options = array(\r
-                                                       'delete'        => _BATCH_COMMENT_DELETE,\r
-                                               );\r
-                                       break;\r
-                               }\r
-                               foreach ($options as $option => $label) {\r
-                                       echo '<option value="',$option,'">',$label,'</option>';\r
-                               }\r
-                       ?>\r
-                       </select>\r
-                       <input type="hidden" name="action" value="batch<?php echo $this->type?>" />\r
-                       <?php\r
-                               $manager->addTicketHidden();\r
-\r
-                               // add hidden fields for 'team' and 'comment' batchlists\r
-                               if ($this->type == 'team')\r
-                               {\r
-                                       echo '<input type="hidden" name="blogid" value="',intRequestVar('blogid'),'" />';\r
-                               }\r
-                               if ($this->type == 'comment')\r
-                               {\r
-                                       echo '<input type="hidden" name="itemid" value="',intRequestVar('itemid'),'" />';\r
-                               }\r
-\r
-                               echo '<input type="submit" value="',_BATCH_EXEC,'" />';\r
-                       ?>(\r
-                        <a href="" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return batchSelectAll(1); "><?php echo _BATCH_SELECTALL?></a> -\r
-                        <a href="" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return batchSelectAll(0); "><?php echo _BATCH_DESELECTALL?></a>\r
-                       )\r
-               </div>\r
-               <?php   }\r
-\r
-       // shortcut :)\r
-       function showList($query, $type, $template, $errorMessage = _LISTS_NOMORE) {\r
-               return $this->doEncapsulate(    'showlist',\r
-                                                                       array($query, $type, $template),\r
-                                                                       $errorMessage\r
-                                                               );\r
-       }\r
-\r
-}\r
-\r
-\r
-\r
-// can take either an array of objects, or an SQL query\r
-function showlist($query, $type, $template) {\r
-\r
-       if (is_array($query)) {\r
-               if (sizeof($query) == 0)\r
-                       return 0;\r
-\r
-               call_user_func('listplug_' . $type, $template, 'HEAD');\r
-\r
-               foreach ($query as $currentObj) {\r
-                       $template['current'] = $currentObj;\r
-                       call_user_func('listplug_' . $type, $template, 'BODY');\r
-               }\r
-\r
-               call_user_func('listplug_' . $type, $template, 'FOOT');\r
-\r
-               return sizeof($query);\r
-\r
-       } else {\r
-               $res = sql_query($query);\r
-\r
-               // don't do anything if there are no results\r
-               $numrows = mysql_num_rows($res);\r
-               if ($numrows == 0)\r
-                       return 0;\r
-\r
-               call_user_func('listplug_' . $type, $template, 'HEAD');\r
-\r
-               while($template['current'] = mysql_fetch_object($res))\r
-                       call_user_func('listplug_' . $type, $template, 'BODY');\r
-\r
-               call_user_func('listplug_' . $type, $template, 'FOOT');\r
-\r
-               mysql_free_result($res);\r
-\r
-               // return amount of results\r
-               return $numrows;\r
-       }\r
-}\r
-\r
-function listplug_select($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo '<select name="'.$template['name'].'" tabindex="'.$template['tabindex'].'" '.$template['javascript'].'>';\r
-\r
-                       // add extra row if needed\r
-                       if ($template['extra']) {\r
-                               echo '<option value="',$template['extraval'],'">',$template['extra'],'</option>';\r
-                       }\r
-\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<option value="' . htmlspecialchars($current->value) . '"';\r
-                       if ($template['selected'] == $current->value)\r
-                               echo ' selected="selected" ';\r
-                       if ($template['shorten'] > 0) {\r
-                               echo ' title="'. htmlspecialchars($current->text).'"';\r
-                               $current->text = shorten($current->text, $template['shorten'], $template['shortenel']);\r
-                       }\r
-                       echo '>' . htmlspecialchars($current->text) . '</option>';\r
-                       break;\r
-               case 'FOOT':\r
-                       echo '</select>';\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<table>";\r
-                       echo "<thead><tr>";\r
-                       // print head\r
-                       call_user_func("listplug_table_" . $template['content'] , $template, 'HEAD');\r
-                       echo "</tr></thead><tbody>";\r
-                       break;\r
-               case 'BODY':\r
-                       // print tabletype specific thingies\r
-                       echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>";\r
-                       call_user_func("listplug_table_" . $template['content'] , $template,  'BODY');\r
-                       echo "</tr>";\r
-                       break;\r
-               case 'FOOT':\r
-                       call_user_func("listplug_table_" . $template['content'] , $template,  'FOOT');\r
-                       echo "</tbody></table>";\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table_memberlist($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo '<th>' . _LIST_MEMBER_NAME . '</th><th>' . _LIST_MEMBER_RNAME . '</th><th>' . _LIST_MEMBER_URL . '</th><th>' . _LIST_MEMBER_ADMIN;\r
-                       help('superadmin');\r
-                       echo "</th><th>" . _LIST_MEMBER_LOGIN;\r
-                       help('canlogin');\r
-                       echo "</th><th colspan='2'>" . _LISTS_ACTIONS. "</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>';\r
-                       $id = listplug_nextBatchId();\r
-                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->mnumber,'" />';\r
-                       echo '<label for="batch',$id,'">';\r
-                       echo "<a href='mailto:", htmlspecialchars($current->memail), "' tabindex='".$template['tabindex']."'>", htmlspecialchars($current->mname), "</a>";\r
-                       echo '</label>';\r
-                       echo '</td>';\r
-                       echo '<td>', htmlspecialchars($current->mrealname), '</td>';\r
-                       echo "<td><a href='$current->murl' tabindex='".$template['tabindex']."'>$current->murl</a></td>";\r
-                       echo '<td>', ($current->madmin ? _YES : _NO),'</td>';\r
-                       echo '<td>', ($current->mcanlogin ? _YES : _NO), '</td>';\r
-                       echo "<td><a href='index.php?action=memberedit&amp;memberid=$current->mnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";\r
-                       echo "<td><a href='index.php?action=memberdelete&amp;memberid=$current->mnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table_teamlist($template, $type) {\r
-       global $manager;\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>"._LIST_MEMBER_NAME."</th><th>"._LIST_MEMBER_RNAME."</th><th>"._LIST_TEAM_ADMIN;\r
-                       help('teamadmin');\r
-                       echo "</th><th colspan='2'>"._LISTS_ACTIONS."</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>';\r
-                       $id = listplug_nextBatchId();\r
-                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->tmember,'" />';\r
-                       echo '<label for="batch',$id,'">';\r
-                       echo "<a href='mailto:", htmlspecialchars($current->memail), "' tabindex='".$template['tabindex']."'>", htmlspecialchars($current->mname), "</a>";\r
-                       echo '</label>';\r
-                       echo '</td>';\r
-                       echo '<td>', htmlspecialchars($current->mrealname), '</td>';\r
-                       echo '<td>', ($current->tadmin ? _YES : _NO) , '</td>';\r
-                       echo "<td><a href='index.php?action=teamdelete&amp;memberid=$current->tmember&amp;blogid=$current->tblog' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";\r
-\r
-                       $url = 'index.php?action=teamchangeadmin&memberid=' . intval($current->tmember) . '&blogid=' . intval($current->tblog);\r
-                       $url = $manager->addTicketToUrl($url);\r
-                       echo "<td><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LIST_TEAM_CHADMIN."</a></td>";\r
-                       break;\r
-       }\r
-}\r
-\r
-function encode_desc(&$data)\r
-    {   //_$to_entities = get_html_translation_table(HTML_ENTITIES);\r
-        $to_entities = get_html_translation_table(HTML_SPECIALCHARS);\r
-        $from_entities = array_flip($to_entities);\r
-        $data = str_replace('<br />','\n',$data); //hack\r
-        $data = strtr($data,$from_entities);\r
-        $data = strtr($data,$to_entities);\r
-        $data = str_replace('\n','<br />',$data); //hack\r
-        return $data;\r
-    }\r
-\r
-function listplug_table_pluginlist($template, $type) {\r
-       global $manager;\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo '<th>'._LISTS_INFO.'</th><th>'._LISTS_DESC.'</th>';\r
-                       echo '<th style="white-space:nowrap">'._LISTS_ACTIONS.'</th>';\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       $plug =& $manager->getPlugin($current->pfile);\r
-                       if ($plug) {\r
-                               echo '<td>';\r
-                                       echo '<strong>' , htmlspecialchars($plug->getName()) , '</strong><br />';\r
-                                       echo _LIST_PLUGS_AUTHOR, ' ' , htmlspecialchars($plug->getAuthor()) , '<br />';\r
-                                       echo _LIST_PLUGS_VER, ' ' , htmlspecialchars($plug->getVersion()) , '<br />';\r
-                                       if ($plug->getURL())\r
-                                       echo '<a href="',htmlspecialchars($plug->getURL()),'" tabindex="'.$template['tabindex'].'">',_LIST_PLUGS_SITE,'</a><br />';\r
-                               echo '</td>';\r
-                               echo '<td>';\r
-                                       echo _LIST_PLUGS_DESC .'<br/>'. encode_desc($plug->getDescription());\r
-                                       if (sizeof($plug->getEventList()) > 0) {\r
-                                               echo '<br /><br />',_LIST_PLUGS_SUBS,'<br />',htmlspecialchars(implode($plug->getEventList(),', '));\r
-                                               // check the database to see if it is up-to-date and notice the user if not\r
-                                       }\r
-                                       if (!$plug->subscribtionListIsUptodate()) {\r
-                                               echo '<br /><br /><strong>',_LIST_PLUG_SUBS_NEEDUPDATE,'</strong>';\r
-                                       }\r
-                                       if (sizeof($plug->getPluginDep()) > 0)\r
-                                               echo '<br /><br />',_LIST_PLUGS_DEP,'<br />',htmlspecialchars(implode($plug->getPluginDep(),', '));\r
-                               echo '</td>';\r
-                       } else {\r
-                               echo '<td colspan="2">Error: plugin file <b>',htmlspecialchars($current->pfile),'.php</b> could not be loaded, or it has been set inactive because it does not support some features (check the <a href="?action=actionlog">actionlog</a> for more info)</td>';\r
-                       }\r
-                       echo '<td>';\r
-\r
-                               $baseUrl = 'index.php?plugid=' . intval($current->pid) . '&action=';\r
-                               $url = $manager->addTicketToUrl($baseUrl . 'pluginup');\r
-                               echo "<a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_UP,"</a>";\r
-                               $url = $manager->addTicketToUrl($baseUrl . 'plugindown');\r
-                               echo "<br /><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_DOWN,"</a>";\r
-                               echo "<br /><a href='index.php?action=plugindelete&amp;plugid=$current->pid' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_UNINSTALL,"</a>";\r
-                               if ($plug && ($plug->hasAdminArea() > 0))\r
-                                       echo "<br /><a href='".htmlspecialchars($plug->getAdminURL())."'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_ADMIN,"</a>";\r
-                               if ($plug && ($plug->supportsFeature('HelpPage') > 0))\r
-                                       echo "<br /><a href='index.php?action=pluginhelp&amp;plugid=$current->pid'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_HELP,"</a>";\r
-                               if (quickQuery('SELECT COUNT(*) AS result FROM '.sql_table('plugin_option_desc').' WHERE ocontext=\'global\' and opid='.$current->pid) > 0)\r
-                                       echo "<br /><a href='index.php?action=pluginoptions&amp;plugid=$current->pid'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_OPTIONS,"</a>";\r
-                       echo '</td>';\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table_plugoptionlist($template, $type) {\r
-       global $manager;\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo '<th>'._LISTS_INFO.'</th><th>'._LISTS_VALUE.'</th>';\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-                       listplug_plugOptionRow($current);\r
-                       break;\r
-               case 'FOOT':\r
-                       ?>\r
-                       <tr>\r
-                               <th colspan="2"><?php echo _PLUGS_SAVE?></th>\r
-                       </tr><tr>\r
-                               <td><?php echo _PLUGS_SAVE?></td>\r
-                               <td><input type="submit" value="<?php echo _PLUGS_SAVE?>" /></td>\r
-                       </tr>\r
-                       <?php                   break;\r
-       }\r
-}\r
-\r
-function listplug_plugOptionRow($current) {\r
-       $varname = 'plugoption['.$current['oid'].']['.$current['contextid'].']';\r
-       // retreive the optionmeta\r
-       $meta = NucleusPlugin::getOptionMeta($current['typeinfo']);\r
-\r
-       // only if it is not a hidden option write the controls to the page\r
-       if ($meta['access'] != 'hidden') {\r
-               echo '<td>',htmlspecialchars($current['description']?$current['description']:$current['name']),'</td>';\r
-               echo '<td>';\r
-               switch($current['type']) {\r
-                       case 'yesno':\r
-                               ADMIN::input_yesno($varname, $current['value'], 0, 'yes', 'no');\r
-                               break;\r
-                       case 'password':\r
-                               echo '<input type="password" size="40" maxlength="128" name="',htmlspecialchars($varname),'" value="',htmlspecialchars($current['value']),'" />';\r
-                               break;\r
-                       case 'select':\r
-                               echo '<select name="'.htmlspecialchars($varname).'">';\r
-                               $aOptions = NucleusPlugin::getOptionSelectValues($current['typeinfo']);\r
-                               $aOptions = explode('|', $aOptions);\r
-                               for ($i=0; $i<(count($aOptions)-1); $i+=2) {\r
-                                       echo '<option value="'.htmlspecialchars($aOptions[$i+1]).'"';\r
-                                       if ($aOptions[$i+1] == $current['value'])\r
-                                               echo ' selected="selected"';\r
-                                       echo '>'.htmlspecialchars($aOptions[$i]).'</option>';\r
-                               }\r
-                               echo '</select>';\r
-                               break;\r
-                       case 'textarea':\r
-                               //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']);\r
-                               echo '<textarea class="pluginoption" cols="30" rows="5" name="',htmlspecialchars($varname),'"';\r
-                               if ($meta['access'] == 'readonly') {\r
-                                       echo ' readonly="readonly"';\r
-                               }\r
-                               echo '>',htmlspecialchars($current['value']),'</textarea>';\r
-                               break;\r
-                       case 'text':\r
-                       default:\r
-                               //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']);\r
-\r
-                               echo '<input type="text" size="40" maxlength="128" name="',htmlspecialchars($varname),'" value="',htmlspecialchars($current['value']),'"';\r
-                               if ($meta['datatype'] == 'numerical') {\r
-                                       echo ' onkeyup="checkNumeric(this)" onblur="checkNumeric(this)"';\r
-                               }\r
-                               if ($meta['access'] == 'readonly') {\r
-                                       echo ' readonly="readonly"';\r
-                               }\r
-                               echo ' />';\r
-               }\r
-               echo $current['extra'];\r
-               echo '</td>';\r
-       }\r
-}\r
-\r
-function listplug_table_itemlist($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>"._LIST_ITEM_INFO."</th><th>"._LIST_ITEM_CONTENT."</th><th style=\"white-space:nowrap\" colspan='1'>"._LISTS_ACTIONS."</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-                       $current->itime = strtotime($current->itime);   // string -> unix timestamp\r
-\r
-                       if ($current->idraft == 1)\r
-                               $cssclass = "class='draft'";\r
-\r
-                       // (can't use offset time since offsets might vary between blogs)\r
-                       if ($current->itime > $template['now'])\r
-                               $cssclass = "class='future'";\r
-\r
-                       echo "<td $cssclass>",_LIST_ITEM_BLOG,' ', htmlspecialchars($current->bshortname);\r
-                       echo "    <br />",_LIST_ITEM_CAT,' ', htmlspecialchars($current->cname);\r
-                       echo "    <br />",_LIST_ITEM_AUTHOR, ' ', htmlspecialchars($current->mname);\r
-                       echo "    <br />",_LIST_ITEM_DATE," " . date("Y-m-d",$current->itime);\r
-                       echo "<br />",_LIST_ITEM_TIME," " . date("H:i",$current->itime);\r
-                       echo "</td>";\r
-                       echo "<td $cssclass>";\r
-\r
-                       $id = listplug_nextBatchId();\r
-\r
-                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->inumber,'" />';\r
-                       echo '<label for="batch',$id,'">';\r
-                       echo "<b>" . htmlspecialchars(strip_tags($current->ititle)) . "</b>";\r
-                       echo '</label>';\r
-                       echo "<br />";\r
-\r
-\r
-                       $current->ibody = strip_tags($current->ibody);\r
-                       $current->ibody = htmlspecialchars(shorten($current->ibody,300,'...'));\r
-\r
-                       echo "$current->ibody</td>";\r
-                       echo "<td style=\"white-space:nowrap\" $cssclass>";\r
-                       echo    "<a href='index.php?action=itemedit&amp;itemid=$current->inumber'>"._LISTS_EDIT."</a>";\r
-                       echo    "<br /><a href='index.php?action=itemcommentlist&amp;itemid=$current->inumber'>"._LISTS_COMMENTS."</a>";\r
-                       echo    "<br /><a href='index.php?action=itemmove&amp;itemid=$current->inumber'>"._LISTS_MOVE."</a>";\r
-                       echo    "<br /><a href='index.php?action=itemdelete&amp;itemid=$current->inumber'>"._LISTS_DELETE."</a>";\r
-                       echo "</td>";\r
-                       break;\r
-       }\r
-}\r
-\r
-// for batch operations: generates the index numbers for checkboxes\r
-function listplug_nextBatchId() {\r
-       static $id = 0;\r
-       return $id++;\r
-}\r
-\r
-function listplug_table_commentlist($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>"._LISTS_INFO."</th><th>"._LIST_COMMENT."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-                       $current->ctime = strtotime($current->ctime);   // string -> unix timestamp\r
-\r
-                       echo '<td>';\r
-                       echo date("Y-m-d@H:i",$current->ctime);\r
-                       echo '<br />';\r
-                       if ($current->mname)\r
-                               echo htmlspecialchars($current->mname) ,' ', _LIST_COMMENTS_MEMBER;\r
-                       else\r
-                               echo htmlspecialchars($current->cuser);\r
-                       echo '</td>';\r
-\r
-\r
-                       $current->cbody = strip_tags($current->cbody);\r
-                       $current->cbody = htmlspecialchars(shorten($current->cbody, 300, '...'));\r
-\r
-                       echo '<td>';\r
-                       $id = listplug_nextBatchId();\r
-                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->cnumber,'" />';\r
-                       echo '<label for="batch',$id,'">';\r
-                       echo $current->cbody;\r
-                       echo '</label>';\r
-                       echo '</td>';\r
-\r
-                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=commentedit&amp;commentid=$current->cnumber'>"._LISTS_EDIT."</a></td>";\r
-                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=commentdelete&amp;commentid=$current->cnumber'>"._LISTS_DELETE."</a></td>";\r
-                       if ($template['canAddBan'])\r
-                               echo "<td style=\"white-space:nowrap\"><a href='index.php?action=banlistnewfromitem&amp;itemid=$current->citem&amp;ip=", htmlspecialchars($current->cip), "' title='", htmlspecialchars($current->chost), "'>"._LIST_COMMENT_BANIP."</a></td>";\r
-                       break;\r
-       }\r
-}\r
-\r
-\r
-function listplug_table_bloglist($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>" . _NAME . "</th><th colspan='7'>" ._LISTS_ACTIONS. "</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo "<td title='blogid:$current->bnumber shortname:$current->bshortname'><a href='$current->burl'><img src='images/globe.gif' width='13' height='13' alt='". _BLOGLIST_TT_VISIT."' /></a> " . htmlspecialchars($current->bname) . "</td>";\r
-                       echo "<td><a href='index.php?action=createitem&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_ADD ."'>" . _BLOGLIST_ADD . "</a></td>";\r
-                       echo "<td><a href='index.php?action=itemlist&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_EDIT."'>". _BLOGLIST_EDIT."</a></td>";\r
-                       echo "<td><a href='index.php?action=blogcommentlist&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_COMMENTS."'>". _BLOGLIST_COMMENTS."</a></td>";\r
-                       echo "<td><a href='index.php?action=bookmarklet&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_BMLET."'>". _BLOGLIST_BMLET . "</a></td>";\r
-\r
-                       if ($current->tadmin == 1) {\r
-                               echo "<td><a href='index.php?action=blogsettings&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_SETTINGS . "'>" ._BLOGLIST_SETTINGS. "</a></td>";\r
-                               echo "<td><a href='index.php?action=banlist&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_BANS. "'>". _BLOGLIST_BANS."</a></td>";\r
-                       }\r
-\r
-                       if ($template['superadmin']) {\r
-                               echo "<td><a href='index.php?action=deleteblog&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_DELETE."'>" ._BLOGLIST_DELETE. "</a></td>";\r
-                       }\r
-\r
-\r
-\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table_shortblognames($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>" . _NAME . "</th><th>" . _NAME. "</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>' , htmlspecialchars($current->bshortname) , '</td>';\r
-                       echo '<td>' , htmlspecialchars($current->bname) , '</td>';\r
-\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table_shortnames($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>" . _NAME . "</th><th>" . _LISTS_DESC. "</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>' , htmlspecialchars($current->name) , '</td>';\r
-                       echo '<td>' , htmlspecialchars($current->description) , '</td>';\r
-\r
-                       break;\r
-       }\r
-}\r
-\r
-\r
-function listplug_table_categorylist($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='2'>"._LISTS_ACTIONS."</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>';\r
-                       $id = listplug_nextBatchId();\r
-                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->catid,'" />';\r
-                       echo '<label for="batch',$id,'">';\r
-                       echo htmlspecialchars($current->cname);\r
-                       echo '</label>';\r
-                       echo '</td>';\r
-\r
-                       echo '<td>', htmlspecialchars($current->cdesc), '</td>';\r
-                       echo "<td><a href='index.php?action=categorydelete&amp;blogid=$current->cblog&amp;catid=$current->catid' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";\r
-                       echo "<td><a href='index.php?action=categoryedit&amp;blogid=$current->cblog&amp;catid=$current->catid' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";\r
-\r
-                       break;\r
-       }\r
-}\r
-\r
-\r
-function listplug_table_templatelist($template, $type) {\r
-       global $manager;\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo "<td>" , htmlspecialchars($current->tdname), "</td>";\r
-                       echo "<td>" , htmlspecialchars($current->tddesc), "</td>";\r
-                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=templateedit&amp;templateid=$current->tdnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";\r
-\r
-                       $url = $manager->addTicketToUrl('index.php?action=templateclone&templateid=' . intval($current->tdnumber));\r
-                       echo "<td style=\"white-space:nowrap\"><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LISTS_CLONE."</a></td>";\r
-                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=templatedelete&amp;templateid=$current->tdnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";\r
-\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table_skinlist($template, $type) {\r
-       global $CONF, $DIR_SKINS, $manager;\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>';\r
-\r
-                       // use a special style for the default skin\r
-                       if ($current->sdnumber == $CONF['BaseSkin']) {\r
-                               echo '<strong>',htmlspecialchars($current->sdname),'</strong>';\r
-                       } else {\r
-                               echo htmlspecialchars($current->sdname);\r
-                       }\r
-\r
-                       echo '<br /><br />';\r
-                       echo _LISTS_TYPE ,': ' , htmlspecialchars($current->sdtype);\r
-                       echo '<br />', _LIST_SKINS_INCMODE , ' ' , (($current->sdincmode=='skindir') ?_PARSER_INCMODE_SKINDIR:_PARSER_INCMODE_NORMAL);\r
-                       if ($current->sdincpref) echo '<br />' , _LIST_SKINS_INCPREFIX , ' ', htmlspecialchars($current->sdincpref);\r
-\r
-                       // add preview image when present\r
-                       if ($current->sdincpref && @file_exists($DIR_SKINS . $current->sdincpref . 'preview.png'))\r
-                       {\r
-                               echo '<br /><br />';\r
-\r
-                               $hasEnlargement = @file_exists($DIR_SKINS . $current->sdincpref . 'preview-large.png');\r
-                               if ($hasEnlargement)\r
-                                       echo '<a href="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'preview-large.png" title="View larger">';\r
-\r
-                               echo '<img class="skinpreview" src="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'preview.png" width="100" height="75" alt="Preview for \'',htmlspecialchars($current->sdname),'\' skin" />';\r
-\r
-                               if ($hasEnlargement)\r
-                                       echo '</a>';\r
-\r
-                               if (@file_exists($DIR_SKINS . $current->sdincpref . 'readme.html'))\r
-                               {\r
-                                       echo '<br /><a href="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'readme.html" title="More info on the \'',htmlspecialchars($current->sdname),'\' skin">Readme</a>';\r
-                               }\r
-\r
-\r
-                       }\r
-\r
-                       echo "</td>";\r
-\r
-\r
-                       echo "<td>" , htmlspecialchars($current->sddesc);\r
-                               // show list of defined parts\r
-                               $r = sql_query('SELECT stype FROM '.sql_table('skin').' WHERE sdesc='.$current->sdnumber . ' ORDER BY stype');\r
-                               $types = array();\r
-                               while ($o = mysql_fetch_object($r))\r
-                                       array_push($types,$o->stype);\r
-                               if (sizeof($types) > 0) {\r
-                                       $friendlyNames = SKIN::getFriendlyNames();\r
-                                       for ($i=0;$i<sizeof($types);$i++) {\r
-                                               $type = $types[$i];\r
-                                               $types[$i] = '<li>' . helpHtml('skinpart'.$type) . ' <a href="index.php?action=skinedittype&amp;skinid='.$current->sdnumber.'&amp;type='.$type.'" tabindex="'.$template['tabindex'].'">' . htmlspecialchars($friendlyNames[$type]) . "</a></li>";\r
-                                       }\r
-                                       echo '<br /><br />',_LIST_SKINS_DEFINED,' <ul>',implode($types,'') ,'</ul>';\r
-                               }\r
-                       echo "</td>";\r
-                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=skinedit&amp;skinid=$current->sdnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";\r
-\r
-                       $url = $manager->addTicketToUrl('index.php?action=skinclone&skinid=' . intval($current->sdnumber));\r
-                       echo "<td style=\"white-space:nowrap\"><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LISTS_CLONE."</a></td>";\r
-                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=skindelete&amp;skinid=$current->sdnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";\r
-\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table_draftlist($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo "<th>"._LISTS_BLOG."</th><th>"._LISTS_TITLE."</th><th colspan='2'>"._LISTS_ACTIONS."</th>";\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>', htmlspecialchars($current->bshortname) , '</td>';\r
-                       echo '<td>', htmlspecialchars(strip_tags($current->ititle)) , '</td>';\r
-                       echo "<td><a href='index.php?action=itemedit&amp;itemid=$current->inumber'>"._LISTS_EDIT."</a></td>";\r
-                       echo "<td><a href='index.php?action=itemdelete&amp;itemid=$current->inumber'>"._LISTS_DELETE."</a></td>";\r
-\r
-                       break;\r
-       }\r
-}\r
-\r
-\r
-function listplug_table_actionlist($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo '<th>'._LISTS_TIME.'</th><th>'._LIST_ACTION_MSG.'</th>';\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>' , htmlspecialchars($current->timestamp), '</td>';\r
-                       echo '<td>' , htmlspecialchars($current->message), '</td>';\r
-\r
-                       break;\r
-       }\r
-}\r
-\r
-function listplug_table_banlist($template, $type) {\r
-       switch($type) {\r
-               case 'HEAD':\r
-                       echo '<th>'._LIST_BAN_IPRANGE.'</th><th>'. _LIST_BAN_REASON.'</th><th>'._LISTS_ACTIONS.'</th>';\r
-                       break;\r
-               case 'BODY':\r
-                       $current = $template['current'];\r
-\r
-                       echo '<td>' , htmlspecialchars($current->iprange) , '</td>';\r
-                       echo '<td>' , htmlspecialchars($current->reason) , '</td>';\r
-                       echo "<td><a href='index.php?action=banlistdelete&amp;blogid=", intval($current->blogid) , "&amp;iprange=" , htmlspecialchars($current->iprange) , "'>",_LISTS_DELETE,"</a></td>";\r
-                       break;\r
-       }\r
-}\r
-\r
-/**\r
- * Returns the Javascript code for a bookmarklet that works on most modern browsers\r
- *\r
- * @param blogid\r
- */\r
-function getBookmarklet($blogid) {\r
-       global $CONF;\r
-\r
-       // normal\r
-       $document = 'document';\r
-       $bookmarkletline = "javascript:Q='';x=".$document.";y=window;if(x.selection){Q=x.selection.createRange().text;}else if(y.getSelection){Q=y.getSelection();}else if(x.getSelection){Q=x.getSelection();}wingm=window.open('";\r
-       $bookmarkletline .= $CONF['AdminURL'] . "bookmarklet.php?blogid=$blogid";\r
-       $bookmarkletline .="&logtext='+escape(Q)+'&loglink='+escape(x.location.href)+'&loglinktitle='+escape(x.title),'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');wingm.focus();";\r
-\r
-       return $bookmarkletline;\r
-}\r
-\r
-\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * The code for the Nucleus admin area
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: ADMIN.php,v 1.7 2006-07-12 07:11:47 kimitake Exp $
+ */
+
+class ADMIN {
+
+       // action currently being executed ($action=xxxx -> action_xxxx method)
+       var $action;
+
+       function ADMIN() {
+
+       }
+
+       /**
+         * Executes an action
+         *
+         * @param $action
+         *             action to be performed
+         */
+       function action($action) {
+               global $CONF, $manager;
+
+               // list of action aliases
+               $alias = array(
+                       'login' => 'overview',
+                       '' => 'overview'
+               );
+
+               if ($alias[$action])
+                       $action = $alias[$action];
+
+               $methodName = 'action_' . $action;
+
+               $this->action = strtolower($action);
+
+               // check ticket. All actions need a ticket, unless they are considered to be safe (a safe action
+               // is an action that requires user interaction before something is actually done)
+               // all safe actions are in this array:
+               $aActionsNotToCheck = array('showlogin', 'login', 'overview', 'itemlist', 'blogcommentlist', 'bookmarklet', 'blogsettings', 'banlist', 'deleteblog', 'editmembersettings', 'browseownitems', 'browseowncomments', 'createitem', 'itemedit', 'itemmove', 'categoryedit', 'categorydelete', 'manage', 'actionlog', 'settingsedit', 'backupoverview', 'pluginlist', 'createnewlog', 'usermanagement', 'skinoverview', 'templateoverview', 'skinieoverview', 'itemcommentlist', 'commentedit', 'commentdelete', 'banlistnewfromitem', 'banlistdelete', 'itemdelete', 'manageteam', 'teamdelete', 'banlistnew', 'memberedit', 'memberdelete', 'pluginhelp', 'pluginoptions', 'plugindelete', 'skinedittype', 'skindelete', 'skinedit', 'templateedit', 'templatedelete', 'activate');
+/*
+               // the rest of the actions needs to be checked
+               $aActionsToCheck = array('additem', 'itemupdate', 'itemmoveto', 'categoryupdate', 'categorydeleteconfirm', 'itemdeleteconfirm', 'commentdeleteconfirm', 'teamdeleteconfirm', 'memberdeleteconfirm', 'templatedeleteconfirm', 'skindeleteconfirm', 'banlistdeleteconfirm', 'plugindeleteconfirm', 'batchitem', 'batchcomment', 'batchmember', 'batchcategory', 'batchteam', 'regfile', 'commentupdate', 'banlistadd', 'changemembersettings', 'clearactionlog', 'settingsupdate', 'blogsettingsupdate', 'categorynew', 'teamchangeadmin', 'teamaddmember', 'memberadd', 'addnewlog', 'addnewlog2', 'backupcreate', 'backuprestore', 'pluginup', 'plugindown', 'pluginupdate', 'pluginadd', 'pluginoptionsupdate', 'skinupdate', 'skinclone', 'skineditgeneral', 'templateclone', 'templatenew', 'templateupdate', 'skinieimport', 'skinieexport', 'skiniedoimport', 'skinnew', 'deleteblogconfirm', 'sendping', 'rawping', 'activatesetpwd');
+*/
+               if (!in_array($this->action, $aActionsNotToCheck))
+               {
+                       if (!$manager->checkTicket())
+                               $this->error(_ERROR_BADTICKET);
+               }
+
+               if (method_exists($this, $methodName))
+                       call_user_func(array(&$this, $methodName));
+               else
+                       $this->error(_BADACTION . " ($action)");
+
+       }
+
+
+       function action_showlogin() {
+               global $error;
+               $this->action_login($error);
+       }
+
+       function action_login($msg = '', $passvars = 1) {
+               global $member;
+
+               // skip to overview when allowed
+               if ($member->isLoggedIn() && $member->canLogin()) {
+                       $this->action_overview();
+                       exit;
+               }
+
+               $this->pagehead();
+
+               echo '<h2>', _LOGIN ,'</h2>';
+               if ($msg) echo _MESSAGE , ': ', htmlspecialchars($msg);
+               ?>
+
+               <form action="index.php" method="post"><p>
+               <?php echo _LOGIN_NAME?>: <br /><input name="login"  tabindex="10" />
+               <br />
+               <?php echo _LOGIN_PASSWORD?>: <br /><input name="password"  tabindex="20" type="password" />
+               <br />
+               <input name="action" value="login" type="hidden" />
+               <br />
+               <input type="submit" value="<?php echo _LOGIN?>" tabindex="30" />
+               <br />
+               <small>
+                       <input type="checkbox" value="1" name="shared" tabindex="40" id="shared" /><label for="shared"><?php echo _LOGIN_SHARED?></label>
+                       <br /><a href="forgotpassword.html"><?php echo _LOGIN_FORGOT?></a>
+               </small>
+               <?php                   // pass through vars
+
+                       $oldaction = postVar('oldaction');
+                       if (  ($oldaction != 'logout')  && ($oldaction != 'login')  && $passvars ) {
+                               passRequestVars();
+                       }
+
+
+               ?>
+               </p></form>
+               <?php           $this->pagefoot();
+       }
+
+
+       /**
+         * provides a screen with the overview of the actions available
+         */
+       function action_overview($msg = '') {
+               global $member;
+
+               $this->pagehead();
+
+               if ($msg)
+                       echo _MESSAGE , ': ', $msg;
+
+               /* ---- add items ---- */
+               echo '<h2>' . _OVERVIEW_YRBLOGS . '</h2>';
+
+               $showAll = requestVar('showall');
+
+               if (($member->isAdmin()) && ($showAll == 'yes')) {
+                       // Super-Admins have access to all blogs! (no add item support though)
+                       $query =  'SELECT bnumber, bname, 1 as tadmin, burl, bshortname'
+                                  . ' FROM ' . sql_table('blog')
+                                  . ' ORDER BY bname';
+               } else {
+                       $query =  'SELECT bnumber, bname, tadmin, burl, bshortname'
+                                  . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
+                                  . ' WHERE tblog=bnumber and tmember=' . $member->getID()
+                                  . ' ORDER BY bname';
+               }
+               $template['content'] = 'bloglist';
+               $template['superadmin'] = $member->isAdmin();
+               $amount = showlist($query,'table',$template);
+
+               if (($showAll != 'yes') && ($member->isAdmin())) {
+                       $total = quickQuery('SELECT COUNT(*) as result FROM ' . sql_table('blog'));
+                       if ($total > $amount)
+                               echo '<p><a href="index.php?action=overview&amp;showall=yes">Show all blogs</a></p>';
+               }
+
+               if ($amount == 0)
+                       echo _OVERVIEW_NOBLOGS;
+
+               if ($amount != 0) {
+                       echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
+                       $query =  'SELECT ititle, inumber, bshortname'
+                                  . ' FROM ' . sql_table('item'). ', ' . sql_table('blog')
+                                  . ' WHERE iauthor='.$member->getID().' and iblog=bnumber and idraft=1';
+                       $template['content'] = 'draftlist';
+                       $amountdrafts = showlist($query, 'table', $template);
+                       if ($amountdrafts == 0)
+                               echo _OVERVIEW_NODRAFTS;
+               }
+
+               /* ---- user settings ---- */
+               echo '<h2>' . _OVERVIEW_YRSETTINGS . '</h2>';
+               echo '<ul>';
+               echo '<li><a href="index.php?action=editmembersettings">' . _OVERVIEW_EDITSETTINGS. '</a></li>';
+               echo '<li><a href="index.php?action=browseownitems">' . _OVERVIEW_BROWSEITEMS.'</a></li>';
+               echo '<li><a href="index.php?action=browseowncomments">'._OVERVIEW_BROWSECOMM.'</a></li>';
+               echo '</ul>';
+
+               /* ---- general settings ---- */
+               if ($member->isAdmin()) {
+                       echo '<h2>' . _OVERVIEW_MANAGEMENT. '</h2>';
+                       echo '<ul>';
+                       echo '<li><a href="index.php?action=manage">',_OVERVIEW_MANAGE,'</a></li>';
+                       echo '</ul>';
+               }
+
+
+               $this->pagefoot();
+       }
+
+       // returns a link to a weblog (takes BLOG object as parameter)
+       function bloglink(&$blog) {
+               return '<a href="'.htmlspecialchars($blog->getURL()).'" title="'._BLOGLIST_TT_VISIT.'">'.$blog->getName() .'</a>';
+       }
+
+       function action_manage($msg = '') {
+               global $member;
+
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';
+
+               if ($msg)
+                       echo '<p>' , _MESSAGE , ': ', $msg , '</p>';
+
+
+               echo '<h2>' . _MANAGE_GENERAL. '</h2>';
+
+               echo '<ul>';
+               echo '<li><a href="index.php?action=createnewlog">'._OVERVIEW_NEWLOG.'</a></li>';
+               echo '<li><a href="index.php?action=settingsedit">'._OVERVIEW_SETTINGS.'</a></li>';
+               echo '<li><a href="index.php?action=usermanagement">'._OVERVIEW_MEMBERS.'</a></li>';
+               echo '<li><a href="index.php?action=actionlog">'._OVERVIEW_VIEWLOG.'</a></li>';
+               echo '</ul>';
+
+               echo '<h2>' . _MANAGE_SKINS . '</h2>';
+               echo '<ul>';
+               echo '<li><a href="index.php?action=skinoverview">'._OVERVIEW_SKINS.'</a></li>';
+               echo '<li><a href="index.php?action=templateoverview">'._OVERVIEW_TEMPLATES.'</a></li>';
+               echo '<li><a href="index.php?action=skinieoverview">'._OVERVIEW_SKINIMPORT.'</a></li>';
+               echo '</ul>';
+
+               echo '<h2>' . _MANAGE_EXTRA . '</h2>';
+               echo '<ul>';
+               echo '<li><a href="index.php?action=backupoverview">'._OVERVIEW_BACKUP.'</a></li>';
+               echo '<li><a href="index.php?action=pluginlist">'._OVERVIEW_PLUGINS.'</a></li>';
+               echo '</ul>';
+
+               $this->pagefoot();
+       }
+
+       function action_itemlist($blogid = '') {
+               global $member, $manager;
+
+               if ($blogid == '')
+                       $blogid = intRequestVar('blogid');
+
+               $member->teamRights($blogid) or $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+               $blog =& $manager->getBlog($blogid);
+
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';
+               echo '<h2>' . _ITEMLIST_BLOG . ' ' . $this->bloglink($blog) . '</h2>';
+
+               // start index
+               if (postVar('start'))
+                       $start = intPostVar('start');
+               else
+                       $start = 0;
+
+               if ($start == 0)
+                       echo '<p><a href="index.php?action=createitem&amp;blogid='.$blogid.'">',_ITEMLIST_ADDNEW,'</a></p>';
+
+               // amount of items to show
+               if (postVar('amount'))
+                       $amount = intPostVar('amount');
+               else
+                       $amount = 10;
+
+               $search = postVar('search');    // search through items
+
+               $query =  'SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime'
+                          . ' FROM ' . sql_table('item') . ', ' . sql_table('blog') . ', ' . sql_table('member') . ', ' . sql_table('category')
+                          . ' WHERE iblog=bnumber and iauthor=mnumber and icat=catid and iblog=' . $blogid;
+
+               if ($search)
+                       $query .= ' and ((ititle LIKE "%' . addslashes($search) . '%") or (ibody LIKE "%' . addslashes($search) . '%") or (imore LIKE "%' . addslashes($search) . '%"))';
+
+               // non-blog-admins can only edit/delete their own items
+               if (!$member->blogAdminRights($blogid))
+                       $query .= ' and iauthor=' . $member->getID();
+
+
+               $query .= ' ORDER BY itime DESC'
+                               . " LIMIT $start,$amount";
+
+               $template['content'] = 'itemlist';
+               $template['now'] = $blog->getCorrectTime(time());
+
+
+               $navList =& new NAVLIST('itemlist', $start, $amount, 0, 1000, $blogid, $search, 0);
+               $navList->showBatchList('item',$query,'table',$template);
+
+
+               $this->pagefoot();
+       }
+
+
+       function action_batchitem() {
+               global $member, $manager;
+
+               // check if logged in
+               $member->isLoggedIn() or $this->disallow();
+
+               // more precise check will be done for each performed operation
+
+               // get array of itemids from request
+               $selected = requestIntArray('batch');
+               $action = requestVar('batchaction');
+
+               // Show error when no items were selected
+               if (!is_array($selected) || sizeof($selected) == 0)
+                       $this->error(_BATCH_NOSELECTION);
+
+               // On move: when no destination blog/category chosen, show choice now
+               $destCatid = intRequestVar('destcatid');
+               if (($action == 'move') && (!$manager->existsCategory($destCatid)))
+                       $this->batchMoveSelectDestination('item',$selected);
+
+               // On delete: check if confirmation has been given
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))
+                       $this->batchAskDeleteConfirmation('item',$selected);
+
+               $this->pagehead();
+
+               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';
+               echo '<h2>',_BATCH_ITEMS,'</h2>';
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';
+               echo '<ul>';
+
+
+               // walk over all itemids and perform action
+               foreach ($selected as $itemid) {
+                       $itemid = intval($itemid);
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONITEM,' <b>', $itemid, '</b>...';
+
+                       // perform action, display errors if needed
+                       switch($action) {
+                               case 'delete':
+                                       $error = $this->deleteOneItem($itemid);
+                                       break;
+                               case 'move':
+                                       $error = $this->moveOneItem($itemid, $destCatid);
+                                       break;
+                               default:
+                                       $error = _BATCH_UNKNOWN . $action;
+                       }
+
+                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';
+                       echo '</li>';
+               }
+
+               echo '</ul>';
+               echo '<b>',_BATCH_DONE,'</b>';
+
+               $this->pagefoot();
+
+
+       }
+
+       function action_batchcomment() {
+               global $member;
+
+               // check if logged in
+               $member->isLoggedIn() or $this->disallow();
+
+               // more precise check will be done for each performed operation
+
+               // get array of itemids from request
+               $selected = requestIntArray('batch');
+               $action = requestVar('batchaction');
+
+               // Show error when no items were selected
+               if (!is_array($selected) || sizeof($selected) == 0)
+                       $this->error(_BATCH_NOSELECTION);
+
+               // On delete: check if confirmation has been given
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))
+                       $this->batchAskDeleteConfirmation('comment',$selected);
+
+               $this->pagehead();
+
+               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';
+               echo '<h2>',_BATCH_COMMENTS,'</h2>';
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';
+               echo '<ul>';
+
+               // walk over all itemids and perform action
+               foreach ($selected as $commentid) {
+                       $commentid = intval($commentid);
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONCOMMENT,' <b>', $commentid, '</b>...';
+
+                       // perform action, display errors if needed
+                       switch($action) {
+                               case 'delete':
+                                       $error = $this->deleteOneComment($commentid);
+                                       break;
+                               default:
+                                       $error = _BATCH_UNKNOWN . $action;
+                       }
+
+                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';
+                       echo '</li>';
+               }
+
+               echo '</ul>';
+               echo '<b>',_BATCH_DONE,'</b>';
+
+               $this->pagefoot();
+
+
+       }
+
+       function action_batchmember() {
+               global $member;
+
+               // check if logged in and admin
+               ($member->isLoggedIn() && $member->isAdmin()) or $this->disallow();
+
+               // get array of itemids from request
+               $selected = requestIntArray('batch');
+               $action = requestVar('batchaction');
+
+               // Show error when no members selected
+               if (!is_array($selected) || sizeof($selected) == 0)
+                       $this->error(_BATCH_NOSELECTION);
+
+               // On delete: check if confirmation has been given
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))
+                       $this->batchAskDeleteConfirmation('member',$selected);
+
+               $this->pagehead();
+
+               echo '<a href="index.php?action=usermanagement">(',_MEMBERS_BACKTOOVERVIEW,')</a>';
+               echo '<h2>',_BATCH_MEMBERS,'</h2>';
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';
+               echo '<ul>';
+
+               // walk over all itemids and perform action
+               foreach ($selected as $memberid) {
+                       $memberid = intval($memberid);
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONMEMBER,' <b>', $memberid, '</b>...';
+
+                       // perform action, display errors if needed
+                       switch($action) {
+                               case 'delete':
+                                       $error = $this->deleteOneMember($memberid);
+                                       break;
+                               case 'setadmin':
+                                       // always succeeds
+                                       sql_query('UPDATE ' . sql_table('member') . ' SET madmin=1 WHERE mnumber='.$memberid);
+                                       $error = '';
+                                       break;
+                               case 'unsetadmin':
+                                       // there should always remain at least one super-admin
+                                       $r = sql_query('SELECT * FROM '.sql_table('member'). ' WHERE madmin=1 and mcanlogin=1');
+                                       if (mysql_num_rows($r) < 2)
+                                               $error = _ERROR_ATLEASTONEADMIN;
+                                       else
+                                               sql_query('UPDATE ' . sql_table('member') .' SET madmin=0 WHERE mnumber='.$memberid);
+                                       break;
+                               default:
+                                       $error = _BATCH_UNKNOWN . $action;
+                       }
+
+                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';
+                       echo '</li>';
+               }
+
+               echo '</ul>';
+               echo '<b>',_BATCH_DONE,'</b>';
+
+               $this->pagefoot();
+
+
+       }
+
+
+       function action_batchteam() {
+               global $member;
+
+               $blogid = intRequestVar('blogid');
+
+               // check if logged in and admin
+               ($member->isLoggedIn() && $member->blogAdminRights($blogid)) or $this->disallow();
+
+               // get array of itemids from request
+               $selected = requestIntArray('batch');
+               $action = requestVar('batchaction');
+
+               // Show error when no members selected
+               if (!is_array($selected) || sizeof($selected) == 0)
+                       $this->error(_BATCH_NOSELECTION);
+
+               // On delete: check if confirmation has been given
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))
+                       $this->batchAskDeleteConfirmation('team',$selected);
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manageteam&amp;blogid=',$blogid,'">(',_BACK,')</a></p>';
+
+               echo '<h2>',_BATCH_TEAM,'</h2>';
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';
+               echo '<ul>';
+
+               // walk over all itemids and perform action
+               foreach ($selected as $memberid) {
+                       $memberid = intval($memberid);
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONTEAM,' <b>', $memberid, '</b>...';
+
+                       // perform action, display errors if needed
+                       switch($action) {
+                               case 'delete':
+                                       $error = $this->deleteOneTeamMember($blogid, $memberid);
+                                       break;
+                               case 'setadmin':
+                                       // always succeeds
+                                       sql_query('UPDATE '.sql_table('team').' SET tadmin=1 WHERE tblog='.$blogid.' and tmember='.$memberid);
+                                       $error = '';
+                                       break;
+                               case 'unsetadmin':
+                                       // there should always remain at least one admin
+                                       $r = sql_query('SELECT * FROM '.sql_table('team').' WHERE tadmin=1 and tblog='.$blogid);
+                                       if (mysql_num_rows($r) < 2)
+                                               $error = _ERROR_ATLEASTONEBLOGADMIN;
+                                       else
+                                               sql_query('UPDATE '.sql_table('team').' SET tadmin=0 WHERE tblog='.$blogid.' and tmember='.$memberid);
+                                       break;
+                               default:
+                                       $error = _BATCH_UNKNOWN . $action;
+                       }
+
+                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';
+                       echo '</li>';
+               }
+
+               echo '</ul>';
+               echo '<b>',_BATCH_DONE,'</b>';
+
+               $this->pagefoot();
+
+
+       }
+
+
+
+       function action_batchcategory() {
+               global $member, $manager;
+
+               // check if logged in
+               $member->isLoggedIn() or $this->disallow();
+
+               // more precise check will be done for each performed operation
+
+               // get array of itemids from request
+               $selected = requestIntArray('batch');
+               $action = requestVar('batchaction');
+
+               // Show error when no items were selected
+               if (!is_array($selected) || sizeof($selected) == 0)
+                       $this->error(_BATCH_NOSELECTION);
+
+               // On move: when no destination blog chosen, show choice now
+               $destBlogId = intRequestVar('destblogid');
+               if (($action == 'move') && (!$manager->existsBlogID($destBlogId)))
+                       $this->batchMoveCategorySelectDestination('category',$selected);
+
+               // On delete: check if confirmation has been given
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))
+                       $this->batchAskDeleteConfirmation('category',$selected);
+
+               $this->pagehead();
+
+               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';
+               echo '<h2>',BATCH_CATEGORIES,'</h2>';
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';
+               echo '<ul>';
+
+               // walk over all itemids and perform action
+               foreach ($selected as $catid) {
+                       $catid = intval($catid);
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONCATEGORY,' <b>', $catid, '</b>...';
+
+                       // perform action, display errors if needed
+                       switch($action) {
+                               case 'delete':
+                                       $error = $this->deleteOneCategory($catid);
+                                       break;
+                               case 'move':
+                                       $error = $this->moveOneCategory($catid, $destBlogId);
+                                       break;
+                               default:
+                                       $error = _BATCH_UNKNOWN . $action;
+                       }
+
+                       echo '<b>',($error ? 'Error: '.$error : _BATCH_SUCCESS),'</b>';
+                       echo '</li>';
+               }
+
+               echo '</ul>';
+               echo '<b>',_BATCH_DONE,'</b>';
+
+               $this->pagefoot();
+
+       }
+
+       function batchMoveSelectDestination($type, $ids) {
+               global $manager;
+               $this->pagehead();
+               ?>
+               <h2><?php echo _MOVE_TITLE?></h2>
+               <form method="post" action="index.php"><div>
+
+                       <input type="hidden" name="action" value="batch<?php echo $type?>" />
+                       <input type="hidden" name="batchaction" value="move" />
+                       <?php
+                               $manager->addTicketHidden();
+
+                               // insert selected item numbers
+                               $idx = 0;
+                               foreach ($ids as $id)
+                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';
+
+                               // show blog/category selection list
+                               $this->selectBlogCategory('destcatid');
+
+                       ?>
+
+
+                       <input type="submit" value="<?php echo _MOVE_BTN?>" onclick="return checkSubmit();" />
+
+               </div></form>
+               <?php           $this->pagefoot();
+               exit;
+       }
+
+       function batchMoveCategorySelectDestination($type, $ids) {
+               global $manager;
+               $this->pagehead();
+               ?>
+               <h2><?php echo _MOVECAT_TITLE?></h2>
+               <form method="post" action="index.php"><div>
+
+                       <input type="hidden" name="action" value="batch<?php echo $type?>" />
+                       <input type="hidden" name="batchaction" value="move" />
+                       <?php
+                               $manager->addTicketHidden();
+
+                               // insert selected item numbers
+                               $idx = 0;
+                               foreach ($ids as $id)
+                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';
+
+                               // show blog/category selection list
+                               $this->selectBlog('destblogid');
+
+                       ?>
+
+
+                       <input type="submit" value="<?php echo _MOVECAT_BTN?>" onclick="return checkSubmit();" />
+
+               </div></form>
+               <?php           $this->pagefoot();
+               exit;
+       }
+
+       function batchAskDeleteConfirmation($type, $ids) {
+               global $manager;
+
+               $this->pagehead();
+               ?>
+               <h2><?php echo _BATCH_DELETE_CONFIRM?></h2>
+               <form method="post" action="index.php"><div>
+
+                       <input type="hidden" name="action" value="batch<?php echo $type?>" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="batchaction" value="delete" />
+                       <input type="hidden" name="confirmation" value="yes" />
+                       <?php                           // insert selected item numbers
+                               $idx = 0;
+                               foreach ($ids as $id)
+                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';
+
+                               // add hidden vars for team & comment
+                               if ($type == 'team')
+                               {
+                                       echo '<input type="hidden" name="blogid" value="',intRequestVar('blogid'),'" />';
+                               }
+                               if ($type == 'comment')
+                               {
+                                       echo '<input type="hidden" name="itemid" value="',intRequestVar('itemid'),'" />';
+                               }
+
+                       ?>
+
+                       <input type="submit" value="<?php echo _BATCH_DELETE_CONFIRM_BTN?>" onclick="return checkSubmit();" />
+
+               </div></form>
+               <?php           $this->pagefoot();
+               exit;
+       }
+
+
+       /**
+         * Inserts a HTML select element with choices for all categories to which the current
+         * member has access
+         */
+       function selectBlogCategory($name, $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1) {
+               ADMIN::selectBlog($name, 'category', $selected, $tabindex, $showNewCat, $iForcedBlogInclude);
+       }
+
+       /**
+         * Inserts a HTML select element with choices for all blogs to which the user has access
+         *             mode = 'blog' => shows blognames and values are blogids
+         *             mode = 'category' => show category names and values are catids
+         *
+         * @param $iForcedBlogInclude
+         *             ID of a blog that always needs to be included, without checking if the member is on the blog team (-1 = none)
+         */
+       function selectBlog($name, $mode='blog', $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1) {
+               global $member, $CONF;
+
+               // 0. get IDs of blogs to which member can post items (+ forced blog)
+               $aBlogIds = array();
+               if ($iForcedBlogInclude != -1)
+                       $aBlogIds[] = intval($iForcedBlogInclude);
+
+               if (($member->isAdmin()) && ($CONF['ShowAllBlogs']))
+                       $queryBlogs =  'SELECT bnumber FROM '.sql_table('blog').' ORDER BY bname';
+               else
+                       $queryBlogs =  'SELECT bnumber FROM '.sql_table('blog').', '.sql_table('team').' WHERE tblog=bnumber and tmember=' . $member->getID();
+               $rblogids = sql_query($queryBlogs);
+               while ($o = mysql_fetch_object($rblogids))
+                       if ($o->bnumber != $iForcedBlogInclude)
+                               $aBlogIds[] = intval($o->bnumber);
+
+               if (count($aBlogIds) == 0)
+                       return;
+
+               echo '<select name="',$name,'" tabindex="',$tabindex,'">';
+
+               // 1. select blogs (we'll create optiongroups)
+               // (only select those blogs that have the user on the team)
+               $queryBlogs =  'SELECT bnumber, bname FROM '.sql_table('blog').' WHERE bnumber in ('.implode(',',$aBlogIds).') ORDER BY bname';
+               $blogs = sql_query($queryBlogs);
+               if ($mode == 'category') {
+                       if (mysql_num_rows($blogs) > 1)
+                               $multipleBlogs = 1;
+
+                       while ($oBlog = mysql_fetch_object($blogs)) {
+                               if ($multipleBlogs)
+                                       echo '<optgroup label="',htmlspecialchars($oBlog->bname),'">';
+
+                               // show selection to create new category when allowed/wanted
+                               if ($showNewCat) {
+                                       // check if allowed to do so
+                                       if ($member->blogAdminRights($oBlog->bnumber))
+                                               echo '<option value="newcat-',$oBlog->bnumber,'">',_ADD_NEWCAT,'</option>';
+                               }
+
+                               // 2. for each category in that blog
+                               $categories = sql_query('SELECT cname, catid FROM '.sql_table('category').' WHERE cblog=' . $oBlog->bnumber . ' ORDER BY cname ASC');
+                               while ($oCat = mysql_fetch_object($categories)) {
+                                       if ($oCat->catid == $selected)
+                                               $selectText = ' selected="selected" ';
+                                       else
+                                               $selectText = '';
+                                       echo '<option value="',$oCat->catid,'" ', $selectText,'>',htmlspecialchars($oCat->cname),'</option>';
+                               }
+
+                               if ($multipleBlogs)
+                                       echo '</optgroup>';
+                       }
+               } else {
+                       // blog mode
+                       while ($oBlog = mysql_fetch_object($blogs)) {
+                               echo '<option value="',$oBlog->bnumber,'"';
+                               if ($oBlog->bnumber == $selected)
+                                       echo ' selected="selected"';
+                               echo'>',htmlspecialchars($oBlog->bname),'</option>';
+                       }
+               }
+               echo '</select>';
+
+       }
+
+       function action_browseownitems() {
+               global $member;
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';
+               echo '<h2>' . _ITEMLIST_YOUR. '</h2>';
+
+               // start index
+               if (postVar('start'))
+                       $start = postVar('start');
+               else
+                       $start = 0;
+
+               // amount of items to show
+               if (postVar('amount'))
+                       $amount = postVar('amount');
+               else
+                       $amount = 10;
+
+               $search = postVar('search');    // search through items
+
+               $query =  'SELECT bshortname, cname, mname, ititle, ibody, idraft, inumber, itime'
+                          . ' FROM '.sql_table('item').', '.sql_table('blog') . ', '.sql_table('member') . ', '.sql_table('category')
+                          . ' WHERE iauthor='. $member->getID() .' and iauthor=mnumber and iblog=bnumber and icat=catid';
+
+               if ($search)
+                       $query .= ' and ((ititle LIKE "%' . addslashes($search) . '%") or (ibody LIKE "%' . addslashes($search) . '%") or (imore LIKE "%' . addslashes($search) . '%"))';
+
+               $query .= ' ORDER BY itime DESC'
+                               . " LIMIT $start,$amount";
+
+               $template['content'] = 'itemlist';
+               $template['now'] = time();
+
+               $navList =& new NAVLIST('browseownitems', $start, $amount, 0, 1000, $blogid, $search, 0);
+               $navList->showBatchList('item',$query,'table',$template);
+
+               $this->pagefoot();
+
+       }
+
+       /**
+         * Show all the comments for a given item
+         */
+       function action_itemcommentlist($itemid = '') {
+               global $member;
+
+               if ($itemid == '')
+                       $itemid = intRequestVar('itemid');
+
+               // only allow if user is allowed to alter item
+               $member->canAlterItem($itemid) or $this->disallow();
+
+               $blogid = getBlogIdFromItemId($itemid);
+
+               $this->pagehead();
+
+               // start index
+               if (postVar('start'))
+                       $start = postVar('start');
+               else
+                       $start = 0;
+
+               // amount of items to show
+               if (postVar('amount'))
+                       $amount = postVar('amount');
+               else
+                       $amount = 10;
+
+               $search = postVar('search');
+
+               echo '<p>(<a href="index.php?action=itemlist&amp;blogid=',$blogid,'">',_BACKTOOVERVIEW,'</a>)</p>';
+               echo '<h2>',_COMMENTS,'</h2>';
+
+               $query =  'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE citem=' . $itemid;
+
+               if ($search)
+                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';
+
+               $query .= ' ORDER BY ctime ASC'
+                               . " LIMIT $start,$amount";
+
+               $template['content'] = 'commentlist';
+               $template['canAddBan'] = $member->blogAdminRights(getBlogIDFromItemID($itemid));
+
+               $navList =& new NAVLIST('itemcommentlist', $start, $amount, 0, 1000, 0, $search, $itemid);
+               $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS);
+
+               $this->pagefoot();
+       }
+
+       /**
+         * Browse own comments
+         */
+       function action_browseowncomments() {
+               global $member;
+
+               // start index
+               if (postVar('start'))
+                       $start = postVar('start');
+               else
+                       $start = 0;
+
+               // amount of items to show
+               if (postVar('amount'))
+                       $amount = postVar('amount');
+               else
+                       $amount = 10;
+
+               $search = postVar('search');
+
+
+               $query =  'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cmember=' . $member->getID();
+
+               if ($search)
+                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';
+
+               $query .= ' ORDER BY ctime DESC'
+                               . " LIMIT $start,$amount";
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';
+               echo '<h2>', _COMMENTS_YOUR ,'</h2>';
+
+               $template['content'] = 'commentlist';
+               $template['canAddBan'] = 0;     // doesn't make sense to allow banning yourself
+
+               $navList =& new NAVLIST('browseowncomments', $start, $amount, 0, 1000, 0, $search, 0);
+               $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS_YOUR);
+
+               $this->pagefoot();
+       }
+
+       /**
+         * Browse all comments for a weblog
+         */
+       function action_blogcommentlist($blogid = '')
+       {
+               global $member, $manager;
+
+               if ($blogid == '')
+                       $blogid = intRequestVar('blogid');
+               else
+                       $blogid = intval($blogid);
+
+               $member->teamRights($blogid) or $member->isAdmin() or $this->disallow();
+
+               // start index
+               if (postVar('start'))
+                       $start = postVar('start');
+               else
+                       $start = 0;
+
+               // amount of items to show
+               if (postVar('amount'))
+                       $amount = postVar('amount');
+               else
+                       $amount = 10;
+
+               $search = postVar('search');            // search through comments
+
+
+               $query =  'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cblog=' . intval($blogid);
+
+               if ($search != '')
+                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';
+
+
+               $query .= ' ORDER BY ctime DESC'
+                               . " LIMIT $start,$amount";
+
+
+               $blog =& $manager->getBlog($blogid);
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';
+               echo '<h2>', _COMMENTS_BLOG , ' ' , $this->bloglink($blog), '</h2>';
+
+               $template['content'] = 'commentlist';
+               $template['canAddBan'] = $member->blogAdminRights($blogid);
+
+               $navList =& new NAVLIST('blogcommentlist', $start, $amount, 0, 1000, $blogid, $search, 0);
+               $navList->showBatchList('comment',$query,'table',$template, _NOCOMMENTS_BLOG);
+
+               $this->pagefoot();
+       }
+
+       /**
+         * Provide a page to item a new item to the given blog
+         */
+       function action_createitem() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               // check if allowed
+               $member->teamRights($blogid) or $this->disallow();
+
+               $memberid = $member->getID();
+
+               $blog =& $manager->getBlog($blogid);
+
+               $this->pagehead();
+
+               // generate the add-item form
+               $formfactory =& new PAGEFACTORY($blogid);
+               $formfactory->createAddForm('admin');
+
+               $this->pagefoot();
+       }
+
+       function action_itemedit() {
+               global $member, $manager;
+
+               $itemid = intRequestVar('itemid');
+
+               // only allow if user is allowed to alter item
+               $member->canAlterItem($itemid) or $this->disallow();
+
+               $item =& $manager->getItem($itemid,1,1);
+               $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));
+
+               $manager->notify('PrepareItemForEdit', array('item' => &$item));
+
+               if ($blog->convertBreaks()) {
+                       $item['body'] = removeBreaks($item['body']);
+                       $item['more'] = removeBreaks($item['more']);
+               }
+
+               // form to edit blog items
+               $this->pagehead();
+               $formfactory =& new PAGEFACTORY($blog->getID());
+               $formfactory->createEditForm('admin',$item);
+               $this->pagefoot();
+       }
+
+       function action_itemupdate() {
+               global $member, $manager, $CONF;
+
+               $itemid = intRequestVar('itemid');
+               $catid = postVar('catid');
+
+               // only allow if user is allowed to alter item
+               $member->canUpdateItem($itemid, $catid) or $this->disallow();
+
+               $actiontype = postVar('actiontype');
+
+               // delete actions are handled by itemdelete (which has confirmation)
+               if ($actiontype == 'delete') {
+                       $this->action_itemdelete();
+                       return;
+               }
+
+               $body   = postVar('body');
+               $title  = postVar('title');
+               $more   = postVar('more');
+               $closed = intPostVar('closed');
+
+               // default action = add now
+               if (!$actiontype)
+                       $actiontype='addnow';
+
+               // create new category if needed
+               if (strstr($catid,'newcat')) {
+                       // get blogid
+                       list($blogid) = sscanf($catid,"newcat-%d");
+
+                       // create
+                       $blog =& $manager->getBlog($blogid);
+                       $catid = $blog->createNewCategory();
+
+                       // show error when sth goes wrong
+                       if (!$catid)
+                               $this->doError(_ERROR_CATCREATEFAIL);
+               }
+
+               /*
+                       set some variables based on actiontype
+
+                       actiontypes:
+                               draft items -> addnow, addfuture, adddraft, delete
+                               non-draft items -> edit, changedate, delete
+
+                       variables set:
+                               $timestamp: set to a nonzero value for future dates or date changes
+                               $wasdraft: set to 1 when the item used to be a draft item
+                               $publish: set to 1 when the edited item is not a draft
+               */
+               switch ($actiontype) {
+                       case 'adddraft':
+                               $publish = 0;
+                               $wasdraft = 1;
+                               $timestamp = 0;
+                               break;
+                       case 'addfuture':
+                               $wasdraft = 1;
+                               $publish = 1;
+                               $timestamp = mktime(postVar('hour'), postVar('minutes'), 0, postVar('month'), postVar('day'), postVar('year'));
+                               break;
+                       case 'addnow':
+                               $wasdraft = 1;
+                               $publish = 1;
+                               $timestamp = 0;
+                               break;
+                       case 'changedate':
+                               $timestamp = mktime(postVar('hour'), postVar('minutes'), 0, postVar('month'), postVar('day'), postVar('year'));
+                               $publish = 1;
+                               $wasdraft = 0;
+                               break;
+                       case 'edit':
+                       default:
+                               $publish = 1;
+                               $wasdraft = 0;
+                               $timestamp = 0;
+               }
+
+               // edit the item for real
+               ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);
+
+               $blogid = getBlogIDFromItemID($itemid);
+               $blog =& $manager->getBlog($blogid);
+               if (!$closed && $publish && $wasdraft && $blog->pingUserland()) {
+                       $this->action_sendping($blogid);
+                       return;
+               }
+
+               // show category edit window when we created a new category
+               // ($catid will then be a new category ID, while postVar('catid') will be 'newcat-x')
+               if ($catid != intPostVar('catid')) {
+                       $this->action_categoryedit(
+                               $catid,
+                               $blog->getID(),
+                               $CONF['AdminURL'] . 'index.php?action=itemlist&blogid=' . getBlogIDFromItemID($itemid)
+                       );
+               } else {
+                       // TODO: set start item correctly for itemlist
+                       $this->action_itemlist(getBlogIDFromItemID($itemid));
+               }
+       }
+
+       function action_itemdelete() {
+               global $member, $manager;
+
+               $itemid = intRequestVar('itemid');
+
+               // only allow if user is allowed to alter item
+               $member->canAlterItem($itemid) or $this->disallow();
+
+               if (!$manager->existsItem($itemid,1,1))
+                       $this->error(_ERROR_NOSUCHITEM);
+
+               $item =& $manager->getItem($itemid,1,1);
+               $title = htmlspecialchars(strip_tags($item['title']));
+               $body = strip_tags($item['body']);
+               $body = htmlspecialchars(shorten($body,300,'...'));
+
+               $this->pagehead();
+               ?>
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <p><?php echo _CONFIRMTXT_ITEM?></p>
+
+                       <div class="note">
+                               <b>"<?php echo  $title ?>"</b>
+                               <br />
+                               <?php echo $body?>
+                       </div>
+
+                       <form method="post" action="index.php"><div>
+                               <input type="hidden" name="action" value="itemdeleteconfirm" />
+                               <?php $manager->addTicketHidden() ?>
+                               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+                               <input type="submit" value="<?php echo _DELETE_CONFIRM_BTN?>"  tabindex="10" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_itemdeleteconfirm() {
+               global $member;
+
+               $itemid = intRequestVar('itemid');
+
+               // only allow if user is allowed to alter item
+               $member->canAlterItem($itemid) or $this->disallow();
+
+               // get blogid first
+               $blogid = getBlogIdFromItemId($itemid);
+
+               // delete item (note: some checks will be performed twice)
+               $this->deleteOneItem($itemid);
+
+               $this->action_itemlist($blogid);
+       }
+
+       // deletes one item and returns error if something goes wrong
+       function deleteOneItem($itemid) {
+               global $member, $manager;
+
+               // only allow if user is allowed to alter item (also checks if itemid exists)
+               if (!$member->canAlterItem($itemid))
+                       return _ERROR_DISALLOWED;
+
+               $manager->loadClass('ITEM');
+               ITEM::delete($itemid);
+       }
+
+       function action_itemmove() {
+               global $member, $manager;
+
+               $itemid = intRequestVar('itemid');
+
+               // only allow if user is allowed to alter item
+               $member->canAlterItem($itemid) or $this->disallow();
+
+               $item =& $manager->getItem($itemid,1,1);
+
+               $this->pagehead();
+               ?>
+                       <h2><?php echo _MOVE_TITLE?></h2>
+                       <form method="post" action="index.php"><div>
+                               <input type="hidden" name="action" value="itemmoveto" />
+                               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+
+                               <?php
+
+                                       $manager->addTicketHidden();
+                                       $this->selectBlogCategory('catid',$item['catid'],10,1);
+                               ?>
+
+                               <input type="submit" value="<?php echo _MOVE_BTN?>" tabindex="10000" onclick="return checkSubmit();" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_itemmoveto() {
+               global $member, $manager;
+
+               $itemid = intRequestVar('itemid');
+               $catid = requestVar('catid');
+
+               // create new category if needed
+               if (strstr($catid,'newcat')) {
+                       // get blogid
+                       list($blogid) = sscanf($catid,'newcat-%d');
+
+                       // create
+                       $blog =& $manager->getBlog($blogid);
+                       $catid = $blog->createNewCategory();
+
+                       // show error when sth goes wrong
+                       if (!$catid)
+                               $this->doError(_ERROR_CATCREATEFAIL);
+               }
+
+               // only allow if user is allowed to alter item
+               $member->canUpdateItem($itemid, $catid) or $this->disallow();
+
+               ITEM::move($itemid, $catid);
+
+               if ($catid != intRequestVar('catid'))
+                       $this->action_categoryedit($catid, $blog->getID());
+               else
+                       $this->action_itemlist(getBlogIDFromCatID($catid));
+       }
+
+       /**
+         * Moves one item to a given category (category existance should be checked by caller)
+         * errors are returned
+         */
+       function moveOneItem($itemid, $destCatid) {
+               global $member;
+
+               // only allow if user is allowed to move item
+               if (!$member->canUpdateItem($itemid, $destCatid))
+                       return _ERROR_DISALLOWED;
+
+               ITEM::move($itemid, $destCatid);
+       }
+
+       /**
+         * Adds a item to the chosen blog
+         */
+       function action_additem() {
+               global $member, $manager, $CONF;
+
+               $manager->loadClass('ITEM');
+
+               $result = ITEM::createFromRequest();
+
+               if ($result['status'] == 'error')
+                       $this->error($result['message']);
+
+               $blogid = getBlogIDFromItemID($result['itemid']);
+               $blog =& $manager->getBlog($blogid);
+
+               $pingUrl = $manager->addTicketToUrl($CONF['AdminURL'] . 'index.php?action=sendping&blogid=' . intval($blogid));
+
+               if ($result['status'] == 'newcategory')
+                       $this->action_categoryedit(
+                               $result['catid'],
+                               $blogid,
+                               $blog->pingUserland() ? $pingUrl : ''
+                       );
+               elseif ((postVar('actiontype') == 'addnow') && $blog->pingUserland())
+                       $this->action_sendping($blogid);
+               else
+                       $this->action_itemlist($blogid);
+       }
+
+       /**
+         * Shows a window that says we're about to ping weblogs.com.
+         * immediately refresh to the real pinging page, which will
+         * show an error, or redirect to the blog.
+         *
+         * @param $blogid ID of blog for which ping needs to be sent out
+         */
+       function action_sendping($blogid = -1) {
+               global $member, $manager;
+
+               if ($blogid == -1)
+                       $blogid = intRequestVar('blogid');
+
+               $member->isLoggedIn() or $this->disallow();
+
+               $rawPingUrl = $manager->addTicketToUrl('index.php?action=rawping&blogid=' . intval($blogid));
+
+               $this->pagehead('<meta http-equiv="refresh" content="1; url='.htmlspecialchars($rawPingUrl).'" />');
+               ?>
+               <h2>Site Updated, Now pinging weblogs.com</h2>
+
+               <p>
+                       Pinging weblogs.com! This can a while...
+                       <br />
+                       When the ping is complete (and successfull), your weblog will show up in the weblogs.com updates list.
+               </p>
+
+               <p>
+                       If you aren't automatically passed through, <a href="index.php?action=rawping&amp;blogid=<?php echo $blogid?>">try again</a>
+               </p>
+               <?php           $this->pagefoot();
+       }
+
+       // ping to Weblogs.com
+       // sends the real ping (can take up to 10 seconds!)
+       function action_rawping() {
+               global $manager;
+               // TODO: checks?
+
+               $blogid = intRequestVar('blogid');
+               $blog =& $manager->getBlog($blogid);
+
+               $result = $blog->sendUserlandPing();
+
+               $this->pagehead();
+
+               ?>
+
+               <h2>Ping Results</h2>
+
+               <p>The following message was returned by weblogs.com:</p>
+
+               <div class='note'><?php echo  $result ?></div>
+
+               <ul>
+                       <li><a href="index.php?action=itemlist&amp;blogid=<?php echo $blog->getID()?>">View list of recent items for <?php echo htmlspecialchars($blog->getName())?></a></li>
+                       <li><a href="<?php echo $blog->getURL()?>">Visit your own site</a></li>
+               </ul>
+
+               <?php           $this->pagefoot();
+       }
+
+       /**
+         * Allows to edit previously made comments
+         */
+       function action_commentedit() {
+               global $member, $manager;
+
+               $commentid = intRequestVar('commentid');
+
+               $member->canAlterComment($commentid) or $this->disallow();
+
+               $comment = COMMENT::getComment($commentid);
+
+               $manager->notify('PrepareCommentForEdit',array('comment' => &$comment));
+
+               // change <br /> to \n
+               $comment['body'] = str_replace('<br />','',$comment['body']);
+
+               $comment['body'] = eregi_replace("<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>","\\1",$comment['body']);
+
+               $this->pagehead();
+
+               ?>
+               <h2><?php echo _EDITC_TITLE?></h2>
+
+               <form action="index.php" method="post"><div>
+
+               <input type="hidden" name="action" value="commentupdate" />
+               <?php $manager->addTicketHidden(); ?>
+               <input type="hidden" name="commentid" value="<?php echo  $commentid; ?>" />
+               <table><tr>
+                       <th colspan="2"><?php echo _EDITC_TITLE?></th>
+               </tr><tr>
+                       <td><?php echo _EDITC_WHO?></td>
+                       <td>
+                       <?php                           if ($comment['member'])
+                                       echo $comment['member'] . " (" . _EDITC_MEMBER . ")";
+                               else
+                                       echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";
+                       ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _EDITC_WHEN?></td>
+                       <td><?php echo  date("Y-m-d @ H:i",$comment['timestamp']); ?></td>
+               </tr><tr>
+                       <td><?php echo _EDITC_HOST?></td>
+                       <td><?php echo  $comment['host']; ?></td>
+               </tr><tr>
+                       <td><?php echo _EDITC_TEXT?></td>
+                       <td>
+                               <textarea name="body" tabindex="10" rows="10" cols="50"><?php                                   // htmlspecialchars not needed (things should be escaped already)
+                                       echo $comment['body'];
+                               ?></textarea>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _EDITC_EDIT?></td>
+                       <td><input type="submit"  tabindex="20" value="<?php echo _EDITC_EDIT?>" onclick="return checkSubmit();" /></td>
+               </tr></table>
+
+               </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_commentupdate() {
+               global $member, $manager;
+
+               $commentid = intRequestVar('commentid');
+
+               $member->canAlterComment($commentid) or $this->disallow();
+
+               $body = postVar('body');
+
+               // intercept words that are too long
+               if (eregi("[a-zA-Z0-9|\.,;:!\?=\/\\]{90,90}",$body) != false)
+                       $this->error(_ERROR_COMMENT_LONGWORD);
+
+               // check length
+               if (strlen($body)<3)
+                       $this->error(_ERROR_COMMENT_NOCOMMENT);
+               if (strlen($body)>5000)
+                       $this->error(_ERROR_COMMENT_TOOLONG);
+
+
+               // prepare body
+               $body = COMMENT::prepareBody($body);
+
+               // call plugins
+               $manager->notify('PreUpdateComment',array('body' => &$body));
+
+               $query =  'UPDATE '.sql_table('comment')
+                          . " SET cbody='" .addslashes($body). "'"
+                          . " WHERE cnumber=" . $commentid;
+               sql_query($query);
+
+               // get itemid
+               $res = sql_query('SELECT citem FROM '.sql_table('comment').' WHERE cnumber=' . $commentid);
+               $o = mysql_fetch_object($res);
+               $itemid = $o->citem;
+
+               if ($member->canAlterItem($itemid))
+                       $this->action_itemcommentlist($itemid);
+               else
+                       $this->action_browseowncomments();
+
+       }
+
+       function action_commentdelete() {
+               global $member, $manager;
+
+               $commentid = intRequestVar('commentid');
+
+               $member->canAlterComment($commentid) or $this->disallow();
+
+               $comment = COMMENT::getComment($commentid);
+
+               $body = strip_tags($comment['body']);
+               $body = htmlspecialchars(shorten($body, 300, '...'));
+
+               if ($comment['member'])
+                       $author = $comment['member'];
+               else
+                       $author = $comment['user'];
+
+               $this->pagehead();
+               ?>
+
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <p><?php echo _CONFIRMTXT_COMMENT?></p>
+
+                       <div class="note">
+                       <b><?php echo _EDITC_WHO?>:</b> <?php echo  $author ?>
+                       <br />
+                       <b><?php echo _EDITC_TEXT?>:</b> <?php echo  $body ?>
+                       </div>
+
+                       <form method="post" action="index.php"><div>
+                               <input type="hidden" name="action" value="commentdeleteconfirm" />
+                               <?php $manager->addTicketHidden() ?>
+                               <input type="hidden" name="commentid" value="<?php echo  $commentid; ?>" />
+                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_commentdeleteconfirm() {
+               global $member;
+
+               $commentid = intRequestVar('commentid');
+
+               // get item id first
+               $res = sql_query('SELECT citem FROM '.sql_table('comment') .' WHERE cnumber=' . $commentid);
+               $o = mysql_fetch_object($res);
+               $itemid = $o->citem;
+
+               $error = $this->deleteOneComment($commentid);
+               if ($error)
+                       $this->doError($error);
+
+               if ($member->canAlterItem($itemid))
+                       $this->action_itemcommentlist($itemid);
+               else
+                       $this->action_browseowncomments();
+       }
+
+       function deleteOneComment($commentid) {
+               global $member, $manager;
+
+               $commentid = intval($commentid);
+
+               if (!$member->canAlterComment($commentid))
+                       return _ERROR_DISALLOWED;
+
+               $manager->notify('PreDeleteComment', array('commentid' => $commentid));
+
+               // delete the comments associated with the item
+               $query = 'DELETE FROM '.sql_table('comment').' WHERE cnumber=' . $commentid;
+               sql_query($query);
+
+               $manager->notify('PostDeleteComment', array('commentid' => $commentid));
+
+               return '';
+       }
+
+       /**
+         * Usermanagement main
+         */
+       function action_usermanagement() {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+
+               echo '<h2>' . _MEMBERS_TITLE .'</h2>';
+
+               echo '<h3>' . _MEMBERS_CURRENT .'</h3>';
+
+               // show list of members with actions
+               $query =  'SELECT *'
+                          . ' FROM '.sql_table('member');
+               $template['content'] = 'memberlist';
+               $template['tabindex'] = 10;
+
+               $batch =& new BATCH('member');
+               $batch->showlist($query,'table',$template);
+
+               echo '<h3>' . _MEMBERS_NEW .'</h3>';
+               ?>
+                       <form method="post" action="index.php"><div>
+
+                       <input type="hidden" name="action" value="memberadd" />
+                       <?php $manager->addTicketHidden() ?>
+
+                       <table>
+                       <tr>
+                               <th colspan="2"><?php echo _MEMBERS_NEW?></th>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_DISPLAY?> <?php help('shortnames');?>
+                                       <br /><small>(This is the name used to logon)</small>
+                               </td>
+                               <td><input tabindex="10010" name="name" size="16" maxlength="16" /></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_REALNAME?></td>
+                               <td><input name="realname" tabindex="10020" size="40" maxlength="60" /></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_PWD?></td>
+                               <td><input name="password" tabindex="10030" size="16" maxlength="40" type="password" /></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_REPPWD?></td>
+                               <td><input name="repeatpassword" tabindex="10035" size="16" maxlength="40" type="password" /></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_EMAIL?></td>
+                               <td><input name="email" tabindex="10040" size="40" maxlength="60" /></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_URL?></td>
+                               <td><input name="url" tabindex="10050" size="40" maxlength="100" /></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_SUPERADMIN?> <?php help('superadmin'); ?></td>
+                               <td><?php $this->input_yesno('admin',0,10060); ?> </td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_CANLOGIN?> <?php help('canlogin'); ?></td>
+                               <td><?php $this->input_yesno('canlogin',1,10070); ?></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_NOTES?></td>
+                               <td><input name="notes" maxlength="100" size="40" tabindex="10080" /></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_NEW?></td>
+                               <td><input type="submit" value="<?php echo _MEMBERS_NEW_BTN?>" tabindex="10090" onclick="return checkSubmit();" /></td>
+                       </tr></table>
+
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       /**
+         * Edit member settings
+         */
+       function action_memberedit() {
+               $this->action_editmembersettings(intRequestVar('memberid'));
+       }
+       function action_editmembersettings($memberid = '') {
+               global $member, $manager, $CONF;
+
+               if ($memberid == '')
+                       $memberid = $member->getID();
+
+               // check if allowed
+               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();
+
+               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';
+               $this->pagehead($extrahead);
+
+               // show message to go back to member overview (only for admins)
+               if ($member->isAdmin())
+                       echo '<a href="index.php?action=usermanagement">(' ._MEMBERS_BACKTOOVERVIEW. ')</a>';
+               else
+                       echo '<a href="index.php?action=overview">(' ._BACKHOME. ')</a>';
+
+               echo '<h2>' . _MEMBERS_EDIT . '</h2>';
+
+               $mem = MEMBER::createFromID($memberid);
+
+               ?>
+               <form method="post" action="index.php"><div>
+
+               <input type="hidden" name="action" value="changemembersettings" />
+               <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />
+               <?php $manager->addTicketHidden() ?>
+
+               <table><tr>
+                       <th colspan="2"><?php echo _MEMBERS_EDIT?></th>
+               </tr><tr>
+                       <td><?php echo _MEMBERS_DISPLAY?> <?php help('shortnames');?>
+                               <br /><small><?php echo _MEMBERS_DISPLAY_INFO?></small>
+                       </td>
+                       <td>
+                       <?php if ($CONF['AllowLoginEdit'] || $member->isAdmin()) { ?>
+                               <input name="name" tabindex="10" maxlength="16" size="16" value="<?php echo  htmlspecialchars($mem->getDisplayName()); ?>" />
+                       <?php } else {
+                               echo htmlspecialchars($member->getDisplayName());
+                          }
+                       ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _MEMBERS_REALNAME?></td>
+                       <td><input name="realname" tabindex="20" maxlength="60" size="40" value="<?php echo  htmlspecialchars($mem->getRealName()); ?>" /></td>
+               </tr><tr>
+               <?php if ($CONF['AllowLoginEdit'] || $member->isAdmin()) { ?>
+                       <td><?php echo _MEMBERS_PWD?></td>
+                       <td><input type="password" tabindex="30" maxlength="40" size="16" name="password" /></td>
+               </tr><tr>
+                       <td><?php echo _MEMBERS_REPPWD?></td>
+                       <td><input type="password" tabindex="35" maxlength="40" size="16" name="repeatpassword" /></td>
+               <?php } ?>
+               </tr><tr>
+                       <td><?php echo _MEMBERS_EMAIL?>
+                               <br /><small><?php echo _MEMBERS_EMAIL_EDIT?></small>
+                       </td>
+                       <td><input name="email" tabindex="40" size="40" maxlength="60" value="<?php echo  htmlspecialchars($mem->getEmail()); ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _MEMBERS_URL?></td>
+                       <td><input name="url" tabindex="50" size="40" maxlength="100" value="<?php echo  htmlspecialchars($mem->getURL()); ?>" /></td>
+               <?php // only allow to change this by super-admins
+                  // we don't want normal users to 'upgrade' themselves to super-admins, do we? ;-)
+                  if ($member->isAdmin()) {
+               ?>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_SUPERADMIN?> <?php help('superadmin'); ?></td>
+                               <td><?php $this->input_yesno('admin',$mem->isAdmin(),60); ?></td>
+                       </tr><tr>
+                               <td><?php echo _MEMBERS_CANLOGIN?> <?php help('canlogin'); ?></td>
+                               <td><?php $this->input_yesno('canlogin',$mem->canLogin(),70); ?></td>
+               <?php } ?>
+               </tr><tr>
+                       <td><?php echo _MEMBERS_NOTES?></td>
+                       <td><input name="notes" tabindex="80" size="40" maxlength="100" value="<?php echo  htmlspecialchars($mem->getNotes()); ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _MEMBERS_DEFLANG?> <?php help('language'); ?>
+                       </td>
+                       <td>
+
+                               <select name="deflang" tabindex="85">
+                                       <option value=""><?php echo _MEMBERS_USESITELANG?></option>
+                               <?php                           // show a dropdown list of all available languages
+                               global $DIR_LANG;
+                               $dirhandle = opendir($DIR_LANG);
+                               while ($filename = readdir($dirhandle)) {
+                                       if (ereg("^(.*)\.php$",$filename,$matches)) {
+                                               $name = $matches[1];
+                                               echo "<option value='$name'";
+                                               if ($name == $mem->getLanguage())
+                                                       echo " selected='selected'";
+                                               echo ">$name</option>";
+                                       }
+                               }
+                               closedir($dirhandle);
+
+                               ?>
+                               </select>
+
+                       </td>
+               </tr>
+               <?php
+                       // plugin options
+                       $this->_insertPluginOptions('member',$memberid);
+               ?>
+               <tr>
+                       <th colspan="2"><?php echo _MEMBERS_EDIT ?></th>
+               </tr><tr>
+                       <td><?php echo _MEMBERS_EDIT?></td>
+                       <td><input type="submit" tabindex="90" value="<?php echo _MEMBERS_EDIT_BTN?>" onclick="return checkSubmit();" /></td>
+               </tr></table>
+
+               </div></form>
+
+               <?php
+                       echo '<h3>',_PLUGINS_EXTRA,'</h3>';
+
+                       $manager->notify(
+                               'MemberSettingsFormExtras',
+                               array(
+                                       'member' => &$mem
+                               )
+                       );
+
+               $this->pagefoot();
+       }
+
+
+       function action_changemembersettings() {
+               global $member, $CONF, $manager;
+
+               $memberid = intRequestVar('memberid');
+
+               // check if allowed
+               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();
+
+               $name                   = trim(postVar('name'));
+               $realname               = trim(postVar('realname'));
+               $password               = postVar('password');
+               $repeatpassword = postVar('repeatpassword');
+               $email                  = postVar('email');
+               $url                    = postVar('url');
+
+               // Sometimes user didn't prefix the URL with http://, this cause a malformed URL. Let's fix it.
+               if (!eregi("^https?://", $url))
+                       $url = "http://".$url;
+
+               $admin                  = postVar('admin');
+               $canlogin               = postVar('canlogin');
+               $notes                  = postVar('notes');
+               $deflang                = postVar('deflang');
+
+               $mem = MEMBER::createFromID($memberid);
+
+               if ($CONF['AllowLoginEdit'] || $member->isAdmin()) {
+
+                       if (!isValidDisplayName($name))
+                               $this->error(_ERROR_BADNAME);
+
+                       if (($name != $mem->getDisplayName()) && MEMBER::exists($name))
+                               $this->error(_ERROR_NICKNAMEINUSE);
+
+                       if ($password != $repeatpassword)
+                               $this->error(_ERROR_PASSWORDMISMATCH);
+
+                       if ($password && (strlen($password) < 6))
+                               $this->error(_ERROR_PASSWORDTOOSHORT);
+               }
+
+               if (!isValidMailAddress($email))
+                       $this->error(_ERROR_BADMAILADDRESS);
+
+
+               if (!$realname)
+                       $this->error(_ERROR_REALNAMEMISSING);
+
+               if (($deflang != '') && (!checkLanguage($deflang)))
+                       $this->error(_ERROR_NOSUCHLANGUAGE);
+
+               // check if there will remain at least one site member with both the logon and admin rights
+               // (check occurs when taking away one of these rights from such a member)
+               if (    (!$admin && $mem->isAdmin() && $mem->canLogin())
+                        || (!$canlogin && $mem->isAdmin() && $mem->canLogin())
+                  )
+               {
+                       $r = sql_query('SELECT * FROM '.sql_table('member').' WHERE madmin=1 and mcanlogin=1');
+                       if (mysql_num_rows($r) < 2)
+                               $this->error(_ERROR_ATLEASTONEADMIN);
+               }
+
+               if ($CONF['AllowLoginEdit'] || $member->isAdmin()) {
+                       $mem->setDisplayName($name);
+                       if ($password)
+                               $mem->setPassword($password);
+               }
+
+               if ($newpass)
+                       $mem->setPassword($password);
+
+               $oldEmail = $mem->getEmail();
+
+               $mem->setRealName($realname);
+               $mem->setEmail($email);
+               $mem->setURL($url);
+               $mem->setNotes($notes);
+               $mem->setLanguage($deflang);
+
+
+               // only allow super-admins to make changes to the admin status
+               if ($member->isAdmin()) {
+                       $mem->setAdmin($admin);
+                       $mem->setCanLogin($canlogin);
+               }
+
+
+               $mem->write();
+
+               // if email changed, generate new password
+               if ($oldEmail != $mem->getEmail())
+               {
+                       $mem->sendActivationLink('addresschange', $oldEmail);
+                       // logout member
+                       $mem->newCookieKey();
+                       $member->logout();
+                       $this->action_login(_MSG_ACTIVATION_SENT, 0);
+                       return;
+               }
+
+
+               // store plugin options
+               $aOptions = requestArray('plugoption');
+               NucleusPlugin::_applyPluginOptions($aOptions);
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'member', 'memberid' => $memberid, 'member' => &$mem));
+
+               if (  ( $mem->getID() == $member->getID() )
+                  && ( $newpass || ( $mem->getDisplayName() != $member->getDisplayName() ) )
+                  ) {
+                       $mem->newCookieKey();
+                       $member->logout();
+                       $this->action_login(_MSG_LOGINAGAIN, 0);
+               } else {
+                       $this->action_overview(_MSG_SETTINGSCHANGED);
+               }
+       }
+
+       function action_memberadd() {
+               global $member;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               if (postVar('password') != postVar('repeatpassword'))
+                       $this->error(_ERROR_PASSWORDMISMATCH);
+               if (strlen(postVar('password')) < 6)
+                       $this->error(_ERROR_PASSWORDTOOSHORT);
+
+               $res = MEMBER::create(postVar('name'), postVar('realname'), postVar('password'), postVar('email'), postVar('url'), postVar('admin'), postVar('canlogin'), postVar('notes'));
+               if ($res != 1)
+                       $this->error($res);
+
+               $this->action_usermanagement();
+       }
+
+       /**
+        * Account activation
+        *
+        * @author dekarma
+        */
+       function action_activate() {
+
+               $key = getVar('key');
+               $this->_showActivationPage($key);
+       }
+
+       function _showActivationPage($key, $message = '')
+       {
+               global $manager;
+
+               // clean up old activation keys
+               MEMBER::cleanupActivationTable();
+
+               // get activation info
+               $info = MEMBER::getActivationInfo($key);
+
+               if (!$info)
+                       $this->error(_ERROR_ACTIVATE);
+
+               $mem = MEMBER::createFromId($info->vmember);
+
+               if (!$mem)
+                       $this->error(_ERROR_ACTIVATE);
+
+               $text = '';
+               $title = '';
+               $bNeedsPasswordChange = true;
+
+               switch ($info->vtype)
+               {
+                       case 'forgot':
+                               $title = _ACTIVATE_FORGOT_TITLE;
+                               $text = _ACTIVATE_FORGOT_TEXT;
+                               break;
+                       case 'register':
+                               $title = _ACTIVATE_REGISTER_TITLE;
+                               $text = _ACTIVATE_REGISTER_TEXT;
+                               break;
+                       case 'addresschange':
+                               $title = _ACTIVATE_CHANGE_TITLE;
+                               $text = _ACTIVATE_CHANGE_TEXT;
+                               $bNeedsPasswordChange = false;
+                               MEMBER::activate($key);
+                               break;
+               }
+
+               $aVars = array(
+                       'memberName' => htmlspecialchars($mem->getDisplayName())
+               );
+               $title = TEMPLATE::fill($title, $aVars);
+               $text = TEMPLATE::fill($text, $aVars);
+
+               $this->pagehead();
+
+                       echo '<h2>' , $title, '</h2>';
+                       echo '<p>' , $text, '</p>';
+
+                       if ($message != '')
+                       {
+                               echo '<p class="error">',$message,'</p>';
+                       }
+
+                       if ($bNeedsPasswordChange)
+                       {
+                               ?>
+                                       <div><form action="index.php" method="post">
+
+                                               <input type="hidden" name="action" value="activatesetpwd" />
+                                               <?php $manager->addTicketHidden() ?>
+                                               <input type="hidden" name="key" value="<?php echo htmlspecialchars($key) ?>" />
+
+                                               <table><tr>
+                                                       <td><?php echo _MEMBERS_PWD?></td>
+                                                       <td><input type="password" maxlength="40" size="16" name="password" /></td>
+                                               </tr><tr>
+                                                       <td><?php echo _MEMBERS_REPPWD?></td>
+                                                       <td><input type="password" maxlength="40" size="16" name="repeatpassword" /></td>
+                                               <?php
+
+                                                       global $manager;
+                                                       $manager->notify('FormExtra', array('type' => 'activation', 'member' => $mem));
+
+                                               ?>
+                                               </tr><tr>
+                                                       <td><?php echo _MEMBERS_SETPWD ?></td>
+                                                       <td><input type='submit' value='<?php echo _MEMBERS_SETPWD_BTN ?>' /></td>
+                                               </tr></table>
+
+
+                                       </form></div>
+
+                               <?php
+
+                       }
+
+               $this->pagefoot();
+
+       }
+
+       /**
+        * Account activation - set password part
+        *
+        * @author dekarma
+        */
+       function action_activatesetpwd() {
+
+               $key = postVar('key');
+
+               // clean up old activation keys
+               MEMBER::cleanupActivationTable();
+
+               // get activation info
+               $info = MEMBER::getActivationInfo($key);
+
+               if (!$info || ($info->type == 'addresschange'))
+                       return $this->_showActivationPage($key, _ERROR_ACTIVATE);
+
+               $mem = MEMBER::createFromId($info->vmember);
+
+               if (!$mem)
+                       return $this->_showActivationPage($key, _ERROR_ACTIVATE);
+
+               $password               = postVar('password');
+               $repeatpassword = postVar('repeatpassword');
+
+               if ($password != $repeatpassword)
+                       return $this->_showActivationPage($key, _ERROR_PASSWORDMISMATCH);
+
+               if ($password && (strlen($password) < 6))
+                       return $this->_showActivationPage($key, _ERROR_PASSWORDTOOSHORT);
+
+               $error = '';
+               global $manager;
+               $manager->notify('ValidateForm', array('type' => 'activation', 'member' => $mem, 'error' => &$error));
+               if ($error != '')
+                       return $this->_showActivationPage($key, $error);
+
+
+               // set password
+               $mem->setPassword($password);
+               $mem->write();
+
+               // do the activation
+               MEMBER::activate($key);
+
+               $this->pagehead();
+                       echo '<h2>',_ACTIVATE_SUCCESS_TITLE,'</h2>';
+                       echo '<p>',_ACTIVATE_SUCCESS_TEXT,'</p>';
+               $this->pagefoot();
+       }
+
+       /**
+         * Manage team
+         */
+       function action_manageteam() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               // check if allowed
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $this->pagehead();
+
+               echo "<p><a href='index.php?action=blogsettings&amp;blogid=$blogid'>(",_BACK_TO_BLOGSETTINGS,")</a></p>";
+
+               echo '<h2>' . _TEAM_TITLE . getBlogNameFromID($blogid) . '</h2>';
+
+               echo '<h3>' . _TEAM_CURRENT . '</h3>';
+
+
+
+               $query =  'SELECT tblog, tmember, mname, mrealname, memail, tadmin'
+                          . ' FROM '.sql_table('member').', '.sql_table('team')
+                          . ' WHERE tmember=mnumber and tblog=' . $blogid;
+
+               $template['content'] = 'teamlist';
+               $template['tabindex'] = 10;
+
+               $batch =& new BATCH('team');
+               $batch->showlist($query, 'table', $template);
+
+               ?>
+                       <h3><?php echo _TEAM_ADDNEW?></h3>
+
+                       <form method='post' action='index.php'><div>
+
+                       <input type='hidden' name='action' value='teamaddmember' />
+                       <input type='hidden' name='blogid' value='<?php echo  $blogid; ?>' />
+                       <?php $manager->addTicketHidden() ?>
+
+                       <table><tr>
+                               <td><?php echo _TEAM_CHOOSEMEMBER?></td>
+                               <td><?php                                       // TODO: try to make it so only non-team-members are listed
+                                       $query =  'SELECT mname as text, mnumber as value'
+                                                  . ' FROM '.sql_table('member');
+
+                                       $template['name'] = 'memberid';
+                                       $template['tabindex'] = 10000;
+                                       showlist($query,'select',$template);
+                               ?></td>
+                       </tr><tr>
+                               <td><?php echo _TEAM_ADMIN?><?php help('teamadmin'); ?></td>
+                               <td><?php $this->input_yesno('admin',0,10020); ?></td>
+                       </tr><tr>
+                               <td><?php echo _TEAM_ADD?></td>
+                               <td><input type='submit' value='<?php echo _TEAM_ADD_BTN?>' tabindex="10030" /></td>
+                       </tr></table>
+
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       /**
+         * Add member tot tram
+         */
+       function action_teamaddmember() {
+               global $member, $manager;
+
+               $memberid = intPostVar('memberid');
+               $blogid = intPostVar('blogid');
+               $admin = intPostVar('admin');
+
+               // check if allowed
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $blog =& $manager->getBlog($blogid);
+               if (!$blog->addTeamMember($memberid, $admin))
+                       $this->error(_ERROR_ALREADYONTEAM);
+
+               $this->action_manageteam();
+
+       }
+
+       function action_teamdelete() {
+               global $member, $manager;
+
+               $memberid = intRequestVar('memberid');
+               $blogid = intRequestVar('blogid');
+
+               // check if allowed
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $teammem = MEMBER::createFromID($memberid);
+               $blog =& $manager->getBlog($blogid);
+
+               $this->pagehead();
+               ?>
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <p><?php echo _CONFIRMTXT_TEAM1?><b><?php echo  $teammem->getDisplayName() ?></b><?php echo _CONFIRMTXT_TEAM2?><b><?php echo  htmlspecialchars(strip_tags($blog->getName())) ?></b>
+                       </p>
+
+
+                       <form method="post" action="index.php"><div>
+                       <input type="hidden" name="action" value="teamdeleteconfirm" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />
+                       <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_teamdeleteconfirm() {
+               global $member;
+
+               $memberid = intRequestVar('memberid');
+               $blogid = intRequestVar('blogid');
+
+               $error = $this->deleteOneTeamMember($blogid, $memberid);
+               if ($error)
+                       $this->error($error);
+
+
+               $this->action_manageteam();
+       }
+
+       function deleteOneTeamMember($blogid, $memberid) {
+               global $member, $manager;
+
+               $blogid = intval($blogid);
+               $memberid = intval($memberid);
+
+               // check if allowed
+               if (!$member->blogAdminRights($blogid))
+                       return _ERROR_DISALLOWED;
+
+               // check if: - there remains at least one blog admin
+               //           - (there remains at least one team member)
+               $tmem = MEMBER::createFromID($memberid);
+
+               $manager->notify('PreDeleteTeamMember', array('member' => &$mem, 'blogid' => $blogid));
+
+               if ($tmem->isBlogAdmin($blogid)) {
+                       // check if there are more blog members left and at least one admin
+                       // (check for at least two admins before deletion)
+                       $query = 'SELECT * FROM '.sql_table('team') . ' WHERE tblog='.$blogid.' and tadmin=1';
+                       $r = sql_query($query);
+                       if (mysql_num_rows($r) < 2)
+                               return _ERROR_ATLEASTONEBLOGADMIN;
+               }
+
+               $query = 'DELETE FROM '.sql_table('team')." WHERE tblog=$blogid and tmember=$memberid";
+               sql_query($query);
+
+               $manager->notify('PostDeleteTeamMember', array('member' => &$mem, 'blogid' => $blogid));
+
+               return '';
+       }
+
+       function action_teamchangeadmin() {
+               global $member;
+
+               $blogid = intRequestVar('blogid');
+               $memberid = intRequestVar('memberid');
+
+               // check if allowed
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $mem = MEMBER::createFromID($memberid);
+
+               // don't allow when there is only one admin at this moment
+               if ($mem->isBlogAdmin($blogid)) {
+                       $r = sql_query('SELECT * FROM '.sql_table('team') . " WHERE tblog=$blogid and tadmin=1");
+                       if (mysql_num_rows($r) == 1)
+                               $this->error(_ERROR_ATLEASTONEBLOGADMIN);
+               }
+
+               if ($mem->isBlogAdmin($blogid))
+                       $newval = 0;
+               else
+                       $newval = 1;
+
+               $query = 'UPDATE '.sql_table('team') ." SET tadmin=$newval WHERE tblog=$blogid and tmember=$memberid";
+               sql_query($query);
+
+               // only show manageteam if member did not change its own admin privileges
+               if ($member->isBlogAdmin($blogid))
+                       $this->action_manageteam();
+               else
+                       $this->action_overview(_MSG_ADMINCHANGED);
+       }
+
+       function action_blogsettings() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               // check if allowed
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $blog =& $manager->getBlog($blogid);
+
+               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';
+               $this->pagehead($extrahead);
+
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';
+               ?>
+               <h2><?php echo _EBLOG_TITLE?>: '<?php echo $this->bloglink($blog)?>'</h2>
+
+               <h3><?php echo _EBLOG_TEAM_TITLE?></h3>
+
+               <p>Members currently on your team:
+               <?php
+                       $res = sql_query('SELECT mname, mrealname FROM ' . sql_table('member') . ',' . sql_table('team') . ' WHERE mnumber=tmember AND tblog=' . intval($blogid));
+                       $aMemberNames = array();
+                       while ($o = mysql_fetch_object($res))
+                               array_push($aMemberNames, htmlspecialchars($o->mname) . ' (' . htmlspecialchars($o->mrealname). ')');
+                       echo implode(',', $aMemberNames);
+               ?>
+               </p>
+
+
+
+               <p>
+               <a href="index.php?action=manageteam&amp;blogid=<?php echo $blogid?>"><?php echo _EBLOG_TEAM_TEXT?></a>
+               </p>
+
+               <h3><?php echo _EBLOG_SETTINGS_TITLE?></h3>
+
+               <form method="post" action="index.php"><div>
+
+               <input type="hidden" name="action" value="blogsettingsupdate" />
+               <?php $manager->addTicketHidden() ?>
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <table><tr>
+                       <td><?php echo _EBLOG_NAME?></td>
+                       <td><input name="name" tabindex="10" size="40" maxlength="60" value="<?php echo  htmlspecialchars($blog->getName()) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_SHORTNAME?> <?php help('shortblogname'); ?>
+                               <?php echo _EBLOG_SHORTNAME_EXTRA?>
+                       </td>
+                       <td><input name="shortname" tabindex="20" maxlength="15" size="15" value="<?php echo  htmlspecialchars($blog->getShortName()) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_DESC?></td>
+                       <td><input name="desc" tabindex="30" maxlength="200" size="40" value="<?php echo  htmlspecialchars($blog->getDescription()) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_URL?></td>
+                       <td><input name="url" tabindex="40" size="40" maxlength="100" value="<?php echo  htmlspecialchars($blog->getURL()) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_DEFSKIN?>
+                               <?php help('blogdefaultskin'); ?>
+                       </td>
+                       <td>
+                               <?php
+                                       $query =  'SELECT sdname as text, sdnumber as value'
+                                                  . ' FROM '.sql_table('skin_desc');
+                                       $template['name'] = 'defskin';
+                                       $template['selected'] = $blog->getDefaultSkin();
+                                       $template['tabindex'] = 50;
+                                       showlist($query,'select',$template);
+                               ?>
+
+                       </td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_LINEBREAKS?> <?php help('convertbreaks'); ?>
+                       </td>
+                       <td><?php $this->input_yesno('convertbreaks',$blog->convertBreaks(),55); ?></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_ALLOWPASTPOSTING?> <?php help('allowpastposting'); ?>
+                       </td>
+                       <td><?php $this->input_yesno('allowpastposting',$blog->allowPastPosting(),57); ?></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_DISABLECOMMENTS?>
+                       </td>
+                       <td><?php $this->input_yesno('comments',$blog->commentsEnabled(),60); ?></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_ANONYMOUS?>
+                       </td>
+                       <td><?php $this->input_yesno('public',$blog->isPublic(),70); ?></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_NOTIFY?> <?php help('blognotify'); ?></td>
+                       <td><input name="notify" tabindex="80" maxlength="60" size="40" value="<?php echo  htmlspecialchars($blog->getNotifyAddress()); ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_NOTIFY_ON?></td>
+                       <td>
+                               <input name="notifyComment" value="3" type="checkbox" tabindex="81" id="notifyComment"
+                                       <?php if  ($blog->notifyOnComment()) echo "checked='checked'" ?>
+                               /><label for="notifyComment"><?php echo _EBLOG_NOTIFY_COMMENT?></label>
+                               <br />
+                               <input name="notifyVote" value="5" type="checkbox" tabindex="82" id="notifyVote"
+                                       <?php if  ($blog->notifyOnVote()) echo "checked='checked'" ?>
+                               /><label for="notifyVote"><?php echo _EBLOG_NOTIFY_KARMA?></label>
+                               <br />
+                               <input name="notifyNewItem" value="7" type="checkbox" tabindex="83" id="notifyNewItem"
+                                       <?php if  ($blog->notifyOnNewItem()) echo "checked='checked'" ?>
+                               /><label for="notifyNewItem"><?php echo _EBLOG_NOTIFY_ITEM?></label>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_PING?> <?php help('pinguserland'); ?></td>
+                       <td><?php $this->input_yesno('pinguserland',$blog->pingUserland(),85); ?></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_MAXCOMMENTS?> <?php help('blogmaxcomments'); ?></td>
+                       <td><input name="maxcomments" tabindex="90" size="3" value="<?php echo  htmlspecialchars($blog->getMaxComments()); ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_UPDATE?> <?php help('blogupdatefile'); ?></td>
+                       <td><input name="update" tabindex="100" size="40" maxlength="60" value="<?php echo  htmlspecialchars($blog->getUpdateFile()) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_DEFCAT?></td>
+                       <td>
+                               <?php
+                                       $query =  'SELECT cname as text, catid as value'
+                                                  . ' FROM '.sql_table('category')
+                                                  . ' WHERE cblog=' . $blog->getID();
+                                       $template['name'] = 'defcat';
+                                       $template['selected'] = $blog->getDefaultCategory();
+                                       $template['tabindex'] = 110;
+                                       showlist($query,'select',$template);
+                               ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_OFFSET?> <?php help('blogtimeoffset'); ?>
+                               <br /><?php echo _EBLOG_STIME?> <b><?php echo  strftime("%H:%M",time()); ?></b>
+                               <br /><?php echo _EBLOG_BTIME?> <b><?php echo  strftime("%H:%M",$blog->getCorrectTime()); ?></b>
+                               </td>
+                       <td><input name="timeoffset" tabindex="120" size="3" value="<?php echo  htmlspecialchars($blog->getTimeOffset()); ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_SEARCH?> <?php help('blogsearchable'); ?></td>
+                       <td><?php $this->input_yesno('searchable',$blog->getSearchable(),122); ?></td>
+               </tr>
+               <?php
+                       // plugin options
+                       $this->_insertPluginOptions('blog',$blogid);
+               ?>
+               <tr>
+                       <th colspan="2"><?php echo _EBLOG_CHANGE?></th>
+               </tr><tr>
+                       <td><?php echo _EBLOG_CHANGE?></td>
+                       <td><input type="submit" tabindex="130" value="<?php echo _EBLOG_CHANGE_BTN?>" onclick="return checkSubmit();" /></td>
+               </tr></table>
+
+               </div></form>
+
+               <h3><?php echo _EBLOG_CAT_TITLE?></h3>
+
+
+               <?php
+               $query = 'SELECT * FROM '.sql_table('category').' WHERE cblog='.$blog->getID().' ORDER BY cname';
+               $template['content'] = 'categorylist';
+               $template['tabindex'] = 200;
+
+               $batch =& new BATCH('category');
+               $batch->showlist($query,'table',$template);
+
+               ?>
+
+
+               <form action="index.php" method="post"><div>
+               <input name="action" value="categorynew" type="hidden" />
+               <?php $manager->addTicketHidden() ?>
+               <input name="blogid" value="<?php echo $blog->getID()?>" type="hidden" />
+
+               <table><tr>
+                       <th colspan="2"><?php echo _EBLOG_CAT_CREATE?></th>
+               </tr><tr>
+                       <td><?php echo _EBLOG_CAT_NAME?></td>
+                       <td><input name="cname" size="40" maxlength="40" tabindex="300" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_CAT_DESC?></td>
+                       <td><input name="cdesc" size="40" maxlength="200" tabindex="310" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_CAT_CREATE?></td>
+                       <td><input type="submit" value="<?php echo _EBLOG_CAT_CREATE?>" tabindex="320" /></td>
+               </tr></table>
+
+               </div></form>
+
+               <?php
+
+                       echo '<h3>',_PLUGINS_EXTRA,'</h3>';
+
+                       $manager->notify(
+                               'BlogSettingsFormExtras',
+                               array(
+                                       'blog' => &$blog
+                               )
+                       );
+
+               $this->pagefoot();
+       }
+
+       function action_categorynew() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $cname = postVar('cname');
+               $cdesc = postVar('cdesc');
+
+               if (!isValidCategoryName($cname))
+                       $this->error(_ERROR_BADCATEGORYNAME);
+
+               $query = 'SELECT * FROM '.sql_table('category') . ' WHERE cname=\'' . addslashes($cname).'\' and cblog=' . intval($blogid);
+               $res = sql_query($query);
+               if (mysql_num_rows($res) > 0)
+                       $this->error(_ERROR_DUPCATEGORYNAME);
+
+               $blog           =& $manager->getBlog($blogid);
+               $newCatID       =  $blog->createNewCategory($cname, $cdesc);
+
+               $this->action_blogsettings();
+       }
+
+
+       function action_categoryedit($catid = '', $blogid = '', $desturl = '') {
+               global $member, $manager;
+
+               if ($blogid == '')
+                       $blogid = intGetVar('blogid');
+               else
+                       $blogid = intval($blogid);
+               if ($catid == '')
+                       $catid = intGetVar('catid');
+               else
+                       $catid = intval($catid);
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $res = sql_query('SELECT * FROM '.sql_table('category')." WHERE cblog=$blogid AND catid=$catid");
+               $obj = mysql_fetch_object($res);
+
+               $cname = $obj->cname;
+               $cdesc = $obj->cdesc;
+
+               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';
+               $this->pagehead($extrahead);
+
+               ?>
+               <h2><?php echo _EBLOG_CAT_UPDATE?> '<?php echo htmlspecialchars($cname)?>'</h2>
+               <form method='post' action='index.php'><div>
+               <input name="blogid" type="hidden" value="<?php echo $blogid?>" />
+               <input name="catid" type="hidden" value="<?php echo $catid?>" />
+               <input name="desturl" type="hidden" value="<?php echo htmlspecialchars($desturl) ?>" />
+               <input name="action" type="hidden" value="categoryupdate" />
+               <?php $manager->addTicketHidden(); ?>
+
+               <table><tr>
+                       <th colspan="2"><?php echo _EBLOG_CAT_UPDATE ?></th>
+               </tr><tr>
+                       <td><?php echo _EBLOG_CAT_NAME?></td>
+                       <td><input type="text" name="cname" value="<?php echo htmlspecialchars($cname)?>" size="40" maxlength="40" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_CAT_DESC?></td>
+                       <td><input type="text" name="cdesc" value="<?php echo htmlspecialchars($cdesc)?>" size="40" maxlength="200" /></td>
+               </tr>
+               <?php
+                       // insert plugin options
+                       $this->_insertPluginOptions('category',$catid);
+               ?>
+               <tr>
+                       <th colspan="2"><?php echo _EBLOG_CAT_UPDATE ?></th>
+               </tr><tr>
+                       <td><?php echo _EBLOG_CAT_UPDATE?></td>
+                       <td><input type="submit" value="<?php echo _EBLOG_CAT_UPDATE_BTN?>" /></td>
+               </tr></table>
+
+               </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+
+       function action_categoryupdate() {
+               global $member, $manager;
+
+               $blogid = intPostVar('blogid');
+               $catid = intPostVar('catid');
+               $cname = postVar('cname');
+               $cdesc = postVar('cdesc');
+               $desturl = postVar('desturl');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               if (!isValidCategoryName($cname))
+                       $this->error(_ERROR_BADCATEGORYNAME);
+
+               $query = 'SELECT * FROM '.sql_table('category').' WHERE cname=\'' . addslashes($cname).'\' and cblog=' . intval($blogid) . " and not(catid=$catid)";
+               $res = sql_query($query);
+               if (mysql_num_rows($res) > 0)
+                       $this->error(_ERROR_DUPCATEGORYNAME);
+
+               $query =  'UPDATE '.sql_table('category').' SET'
+                          . " cname='" . addslashes($cname) . "',"
+                          . " cdesc='" . addslashes($cdesc) . "'"
+                          . " WHERE catid=" . $catid;
+
+               sql_query($query);
+
+               // store plugin options
+               $aOptions = requestArray('plugoption');
+               NucleusPlugin::_applyPluginOptions($aOptions);
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'category', 'catid' => $catid));
+
+
+               if ($desturl) {
+                       redirect($desturl);
+                       exit;
+               } else {
+                       $this->action_blogsettings();
+               }
+       }
+
+       function action_categorydelete() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+               $catid = intRequestVar('catid');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $blog =& $manager->getBlog($blogid);
+
+               // check if the category is valid
+               if (!$blog->isValidCategory($catid))
+                       $this->error(_ERROR_NOSUCHCATEGORY);
+
+               // don't allow deletion of default category
+               if ($blog->getDefaultCategory() == $catid)
+                       $this->error(_ERROR_DELETEDEFCATEGORY);
+
+               // check if catid is the only category left for blogid
+               $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid;
+               $res = sql_query($query);
+               if (mysql_num_rows($res) == 1)
+                       $this->error(_ERROR_DELETELASTCATEGORY);
+
+
+               $this->pagehead();
+               ?>
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <div>
+                       <?php echo _CONFIRMTXT_CATEGORY?><b><?php echo  $blog->getCategoryName($catid)?></b>
+                       </div>
+
+                       <form method="post" action="index.php"><div>
+                       <input type="hidden" name="action" value="categorydeleteconfirm" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="blogid" value="<?php echo $blogid?>" />
+                       <input type="hidden" name="catid" value="<?php echo $catid?>" />
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_categorydeleteconfirm() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+               $catid = intRequestVar('catid');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $error = $this->deleteOneCategory($catid);
+               if ($error)
+                       $this->error($error);
+
+               $this->action_blogsettings();
+       }
+
+       function deleteOneCategory($catid) {
+               global $manager, $member;
+
+               $catid = intval($catid);
+
+               $manager->notify('PreDeleteCategory', array('catid' => $catid));
+
+               $blogid = getBlogIDFromCatID($catid);
+
+               if (!$member->blogAdminRights($blogid))
+                       return ERROR_DISALLOWED;
+
+               // get blog
+               $blog =& $manager->getBlog($blogid);
+
+               // check if the category is valid
+               if (!$blog || !$blog->isValidCategory($catid))
+                       return _ERROR_NOSUCHCATEGORY;
+
+               $destcatid = $blog->getDefaultCategory();
+
+               // don't allow deletion of default category
+               if ($blog->getDefaultCategory() == $catid)
+                       return _ERROR_DELETEDEFCATEGORY;
+
+               // check if catid is the only category left for blogid
+               $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid;
+               $res = sql_query($query);
+               if (mysql_num_rows($res) == 1)
+                       return _ERROR_DELETELASTCATEGORY;
+
+               // change category for all items to the default category
+               $query = 'UPDATE '.sql_table('item')." SET icat=$destcatid WHERE icat=$catid";
+               sql_query($query);
+
+               // delete all associated plugin options
+               NucleusPlugin::_deleteOptionValues('category', $catid);
+
+               // delete category
+               $query = 'DELETE FROM '.sql_table('category').' WHERE catid=' .$catid;
+               sql_query($query);
+
+               $manager->notify('PostDeleteCategory', array('catid' => $catid));
+
+       }
+
+       function moveOneCategory($catid, $destblogid) {
+               global $manager, $member;
+
+               $catid = intval($catid);
+               $destblogid = intval($destblogid);
+
+               $blogid = getBlogIDFromCatID($catid);
+
+               // mover should have admin rights on both blogs
+               if (!$member->blogAdminRights($blogid))
+                       return _ERROR_DISALLOWED;
+               if (!$member->blogAdminRights($destblogid))
+                       return _ERROR_DISALLOWED;
+
+               // cannot move to self
+               if ($blogid == $destblogid)
+                       return _ERROR_MOVETOSELF;
+
+               // get blogs
+               $blog =& $manager->getBlog($blogid);
+               $destblog =& $manager->getBlog($destblogid);
+
+               // check if the category is valid
+               if (!$blog || !$blog->isValidCategory($catid))
+                       return _ERROR_NOSUCHCATEGORY;
+
+               // don't allow default category to be moved
+               if ($blog->getDefaultCategory() == $catid)
+                       return _ERROR_MOVEDEFCATEGORY;
+
+               $manager->notify(
+                       'PreMoveCategory',
+                       array(
+                               'catid' => &$catid,
+                               'sourceblog' => &$blog,
+                               'destblog' => &$destblog
+                       )
+               );
+
+               // update comments table (cblog)
+               $query = 'SELECT inumber FROM '.sql_table('item').' WHERE icat='.$catid;
+               $items = sql_query($query);
+               while ($oItem = mysql_fetch_object($items)) {
+                       sql_query('UPDATE '.sql_table('comment').' SET cblog='.$destblogid.' WHERE citem='.$oItem->inumber);
+               }
+
+               // update items (iblog)
+               $query = 'UPDATE '.sql_table('item').' SET iblog='.$destblogid.' WHERE icat='.$catid;
+               sql_query($query);
+
+               // move category
+               $query = 'UPDATE '.sql_table('category').' SET cblog='.$destblogid.' WHERE catid='.$catid;
+               sql_query($query);
+
+               $manager->notify(
+                       'PostMoveCategory',
+                       array(
+                               'catid' => &$catid,
+                               'sourceblog' => &$blog,
+                               'destblog' => $destblog
+                       )
+               );
+
+       }
+
+       function action_blogsettingsupdate() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $blog =& $manager->getBlog($blogid);
+
+               $notify                 = trim(postVar('notify'));
+               $shortname              = trim(postVar('shortname'));
+               $updatefile             = trim(postVar('update'));
+
+               $notifyComment  = intPostVar('notifyComment');
+               $notifyVote             = intPostVar('notifyVote');
+               $notifyNewItem  = intPostVar('notifyNewItem');
+
+               if ($notifyComment == 0)        $notifyComment = 1;
+               if ($notifyVote == 0)           $notifyVote = 1;
+               if ($notifyNewItem == 0)        $notifyNewItem = 1;
+
+               $notifyType = $notifyComment * $notifyVote * $notifyNewItem;
+
+
+               if ($notify) {
+                       $not =& new NOTIFICATION($notify);
+                       if (!$not->validAddresses())
+                               $this->error(_ERROR_BADNOTIFY);
+
+               }
+
+               if (!isValidShortName($shortname))
+                       $this->error(_ERROR_BADSHORTBLOGNAME);
+
+               if (($blog->getShortName() != $shortname) && $manager->existsBlog($shortname))
+                       $this->error(_ERROR_DUPSHORTBLOGNAME);
+
+               // check if update file is writable
+               if ($updatefile && !is_writeable($updatefile))
+                       $this->error(_ERROR_UPDATEFILE);
+
+               $blog->setName(trim(postVar('name')));
+               $blog->setShortName($shortname);
+               $blog->setNotifyAddress($notify);
+               $blog->setNotifyType($notifyType);
+               $blog->setMaxComments(postVar('maxcomments'));
+               $blog->setCommentsEnabled(postVar('comments'));
+               $blog->setTimeOffset(postVar('timeoffset'));
+               $blog->setUpdateFile($updatefile);
+               $blog->setURL(trim(postVar('url')));
+               $blog->setDefaultSkin(intPostVar('defskin'));
+               $blog->setDescription(trim(postVar('desc')));
+               $blog->setPublic(postVar('public'));
+               $blog->setPingUserland(postVar('pinguserland'));
+               $blog->setConvertBreaks(intPostVar('convertbreaks'));
+               $blog->setAllowPastPosting(intPostVar('allowpastposting'));
+               $blog->setDefaultCategory(intPostVar('defcat'));
+               $blog->setSearchable(intPostVar('searchable'));
+
+               $blog->writeSettings();
+
+               // store plugin options
+               $aOptions = requestArray('plugoption');
+               NucleusPlugin::_applyPluginOptions($aOptions);
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'blog', 'blogid' => $blogid, 'blog' => &$blog));
+
+
+               $this->action_overview(_MSG_SETTINGSCHANGED);
+       }
+
+       function action_deleteblog() {
+               global $member, $CONF, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               // check if blog is default blog
+               if ($CONF['DefaultBlog'] == $blogid)
+                       $this->error(_ERROR_DELDEFBLOG);
+
+               $blog =& $manager->getBlog($blogid);
+
+               $this->pagehead();
+               ?>
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <p><?php echo _WARNINGTXT_BLOGDEL?>
+                       </p>
+
+                       <div>
+                       <?php echo _CONFIRMTXT_BLOG?><b><?php echo  htmlspecialchars($blog->getName())?></b>
+                       </div>
+
+                       <form method="post" action="index.php"><div>
+                       <input type="hidden" name="action" value="deleteblogconfirm" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_deleteblogconfirm() {
+               global $member, $CONF, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               $manager->notify('PreDeleteBlog', array('blogid' => $blogid));
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               // check if blog is default blog
+               if ($CONF['DefaultBlog'] == $blogid)
+                       $this->error(_ERROR_DELDEFBLOG);
+
+               // delete all comments
+               $query = 'DELETE FROM '.sql_table('comment').' WHERE cblog='.$blogid;
+               sql_query($query);
+
+               // delete all items
+               $query = 'DELETE FROM '.sql_table('item').' WHERE iblog='.$blogid;
+               sql_query($query);
+
+               // delete all team members
+               $query = 'DELETE FROM '.sql_table('team').' WHERE tblog='.$blogid;
+               sql_query($query);
+
+               // delete all bans
+               $query = 'DELETE FROM '.sql_table('ban').' WHERE blogid='.$blogid;
+               sql_query($query);
+
+               // delete all categories
+               $query = 'DELETE FROM '.sql_table('category').' WHERE cblog='.$blogid;
+               sql_query($query);
+
+               // delete all associated plugin options
+               NucleusPlugin::_deleteOptionValues('blog', $blogid);
+
+               // delete the blog itself
+               $query = 'DELETE FROM '.sql_table('blog').' WHERE bnumber='.$blogid;
+               sql_query($query);
+
+               $manager->notify('PostDeleteBlog', array('blogid' => $blogid));
+
+               $this->action_overview(_DELETED_BLOG);
+       }
+
+       function action_memberdelete() {
+               global $member, $manager;
+
+               $memberid = intRequestVar('memberid');
+
+               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();
+
+               $mem = MEMBER::createFromID($memberid);
+
+               $this->pagehead();
+               ?>
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <p><?php echo _CONFIRMTXT_MEMBER?><b><?php echo  $mem->getDisplayName() ?></b>
+                       </p>
+
+                       <p>
+                       Please note that media files will <b>NOT</b> be deleted. (At least not in this Nucleus version)
+                       </p>
+
+                       <form method="post" action="index.php"><div>
+                       <input type="hidden" name="action" value="memberdeleteconfirm" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_memberdeleteconfirm() {
+               global $member;
+
+               $memberid = intRequestVar('memberid');
+
+               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();
+
+               $error = $this->deleteOneMember($memberid);
+               if ($error)
+                       $this->error($error);
+
+               if ($member->isAdmin())
+                       $this->action_usermanagement();
+               else
+                       $this->action_overview(_DELETED_MEMBER);
+       }
+
+       // (static)
+       function deleteOneMember($memberid) {
+               global $manager;
+
+               $memberid = intval($memberid);
+               $mem = MEMBER::createFromID($memberid);
+
+               if (!$mem->canBeDeleted())
+                       return _ERROR_DELETEMEMBER;
+
+               $manager->notify('PreDeleteMember', array('member' => &$mem));
+
+               $query = 'DELETE FROM '.sql_table('member').' WHERE mnumber='.$memberid;
+               sql_query($query);
+
+               $query = 'DELETE FROM '.sql_table('team').' WHERE tmember='.$memberid;
+               sql_query($query);
+
+               $query = 'DELETE FROM '.sql_table('activation').' WHERE vmember='.$memberid;
+               sql_query($query);
+
+               // delete all associated plugin options
+               NucleusPlugin::_deleteOptionValues('member', $memberid);
+
+               $manager->notify('PostDeleteMember', array('member' => &$mem));
+
+               return '';
+       }
+
+       function action_createnewlog() {
+               global $member, $CONF, $manager;
+
+               // Only Super-Admins can do this
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+               ?>
+               <h2><?php echo _EBLOG_CREATE_TITLE?></h2>
+
+               <h3>_ADMIN_NOTABILIA</h3>
+
+               <p>_ADMIN_PLEASE_READ</p>
+
+               <p>_ADMIN_HOW_TO_ACCESS</p>
+
+               <ol>
+                       <li>_ADMIN_SIMPLE_WAY</li>
+                       <li>_ADMIN_DIFFICULT_WAY</li>
+               </ol>
+
+               <h3>_ADMIN_HOW_TO_CREATE</h3>
+
+               <p>
+               <?php echo _EBLOG_CREATE_TEXT?>
+               </p>
+
+               <form method="post" action="index.php"><div>
+
+               <input type="hidden" name="action" value="addnewlog" />
+               <?php $manager->addTicketHidden() ?>
+
+
+               <table><tr>
+                       <td><?php echo _EBLOG_NAME?></td>
+                       <td><input name="name" tabindex="10" size="40" maxlength="60" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_SHORTNAME?>
+                               <?php help('shortblogname'); ?>
+                       </td>
+                       <td><input name="shortname" tabindex="20" maxlength="15" size="15" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_DESC?></td>
+                       <td><input name="desc" tabindex="30" maxlength="200" size="40" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_DEFSKIN?>
+                               <?php help('blogdefaultskin'); ?>
+                       </td>
+                       <td>
+                               <?php
+                                       $query =  'SELECT sdname as text, sdnumber as value'
+                                                  . ' FROM '.sql_table('skin_desc');
+                                       $template['name'] = 'defskin';
+                                       $template['tabindex'] = 50;
+                                       $template['selected'] = $CONF['BaseSkin'];      // set default selected skin to be globally defined base skin
+                                       showlist($query,'select',$template);
+                               ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_OFFSET?>
+                               <?php help('blogtimeoffset'); ?>
+                               <br /><?php echo _EBLOG_STIME?> <b><?php echo  strftime("%H:%M",time()); ?></b>
+                       </td>
+                       <td><input name="timeoffset" tabindex="110" size="3" value="0" /></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_ADMIN?>
+                               <?php help('blogadmin'); ?>
+                       </td>
+                       <td><?php echo _EBLOG_ADMIN_MSG?></td>
+               </tr><tr>
+                       <td><?php echo _EBLOG_CREATE?></td>
+                       <td><input type="submit" tabindex="120" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>
+               </tr></table>
+
+               </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_addnewlog() {
+               global $member, $manager, $CONF;
+
+               // Only Super-Admins can do this
+               $member->isAdmin() or $this->disallow();
+
+               $bname                  = trim(postVar('name'));
+               $bshortname             = trim(postVar('shortname'));
+               $btimeoffset    = postVar('timeoffset');
+               $bdesc                  = trim(postVar('desc'));
+               $bdefskin               = postVar('defskin');
+
+               if (!isValidShortName($bshortname))
+                       $this->error(_ERROR_BADSHORTBLOGNAME);
+
+               if ($manager->existsBlog($bshortname))
+                       $this->error(_ERROR_DUPSHORTBLOGNAME);
+
+               $manager->notify(
+                       'PreAddBlog',
+                       array(
+                               'name' => &$bname,
+                               'shortname' => &$bshortname,
+                               'timeoffset' => &$btimeoffset,
+                               'description' => &$bdescription,
+                               'defaultskin' => &$bdefskin
+                       )
+               );
+
+
+               // add slashes for sql queries
+               $bname =                addslashes($bname);
+               $bshortname =   addslashes($bshortname);
+               $btimeoffset =  addslashes($btimeoffset);
+               $bdesc =                addslashes($bdesc);
+               $bdefskin =     addslashes($bdefskin);
+
+               // create blog
+               $query = 'INSERT INTO '.sql_table('blog')." (bname, bshortname, bdesc, btimeoffset, bdefskin) VALUES ('$bname', '$bshortname', '$bdesc', '$btimeoffset', '$bdefskin')";
+               sql_query($query);
+               $blogid = mysql_insert_id();
+               $blog   =& $manager->getBlog($blogid);
+
+               // create new category
+               sql_query('INSERT INTO '.sql_table('category')." (cblog, cname, cdesc) VALUES ($blogid, 'General','Items that do not fit in other categories')");
+               $catid = mysql_insert_id();
+
+               // set as default category
+               $blog->setDefaultCategory($catid);
+               $blog->writeSettings();
+
+               // create team member
+               $memberid = $member->getID();
+               $query = 'INSERT INTO '.sql_table('team')." (tmember, tblog, tadmin) VALUES ($memberid, $blogid, 1)";
+               sql_query($query);
+
+
+               $blog->additem($blog->getDefaultCategory(),'First Item','ã\81\93ã\82\8cã\81¯ã\81\82ã\81ªã\81\9fã\81Eweblogã\81«ã\81\8aã\81\91ã\82\8bæ\9c\80å\88\9dã\81\82¢ã\82¤ã\83\81E\83 ã\81§ã\81\99ã\80\82è\81\94±ã\81«å\89\8aé\99¤ã\81\97ã\81¦ã\81\81E\81\9fã\81 ã\81\81E\81¦ã\81\8bã\81¾ã\81\81E\81¾ã\81\9bã\82\93ã\80\81E,'',$blogid, $memberid,$blog->getCorrectTime(),0,0,0);
+
+               $manager->notify(
+                       'PostAddBlog',
+                       array(
+                               'blog' => &$blog
+                       )
+               );
+
+               $manager->notify(
+                       'PostAddCategory',
+                       array(
+                               'catid' => $catid
+                       )
+               );
+
+               $this->pagehead();
+               ?>
+               <h2>æ\96°ã\81\97ã\81\84weblogã\81\8cä½\9cæ\81\81\95ã\82\8cã\81¾ã\81\97ã\81\9f</h2>
+
+               <p>æ\96°ã\81\97ã\81\84weblog ã\80\81E?php echo htmlspecialchars($bname)?>ã\80\8dã\81\8cä½\9cæ\81\81\95ã\82\8cã\81¾ã\81\97ã\81\9fã\80\82ç¶\9aã\81\91ã\81¦ã\80\81ã\81\93ã\82\8cã\81«ã\82¢ã\82¯ã\82»ã\82¹ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ä»¥ä¸\8bã\81\81©ã\81¡ã\82\89ã\81\8bã\81®æ\89\8bé \81E\81«é\80²ã\82\93ã\81§ã\81\8fã\81 ã\81\95ã\81\84ã\80\81E/p>
+
+               <ol>
+                       <li><a href="#index_php">ç°¡å\8d\98ã\81ªæ\96¹æ³\81E ä¸\8bã\81\82³ã\83¼ã\83\89ã\82\92è²¼ä»\98ã\81\91ã\81\81E<code><?php echo htmlspecialchars($bshortname)?>.php</code> ã\81¨ã\81\81E\81\86ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä½\9cæ\81\81\99ã\82\8b</a></li>
+                       <li><a href="#skins">é«\98度ã\81ªæ\96¹æ³\81E ç\8f¾å\9c¨ä½¿ç\94¨ã\81\97ã\81¦ã\81\81E\82\8bã\82¹ã\82­ã\83³ã\81«æ\96°ã\81\97ã\81\84weblogã\82\92å±\95é\96\8bã\81\95ã\81\9bã\82\8bã\81\9fã\82\81ã\81Eè¨\98è¿°ã\82\92å\8a ã\81\88ã\82\8b</a></li>
+               </ol>
+
+               <h3><a id="index_php">æ\96¹æ³\81E1: <code><?php echo htmlspecialchars($bshortname)?>.php</code> ã\81¨ã\81\81E\81\86ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä½\9cæ\81E</a></h3>
+
+               <p><code><?php echo htmlspecialchars($bshortname)?>.php</code> ã\81¨ã\81\81E\81\86ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä½\9cæ\81\81\97ã\81¦ã\80\81中身ã\81«ä»¥ä¸\8bã\81\82³ã\83¼ã\83\89ã\82\92è²¼ã\82\8aä»\98ã\81\91ã\82\81E</p>
+<pre><code>&lt;?php
+
+$CONF['Self'] = '<b><?php echo htmlspecialchars($bshortname)?>.php</b>';
+
+include('<i>./config.php</i>');
+
+selectBlog('<b><?php echo htmlspecialchars($bshortname)?></b>');
+selector();
+
+?&gt;</code></pre>
+
+               <p>ã\81\99ã\81§ã\81«ã\81\82ã\82\8b<code>index.php</code>ã\81¨å\90\8cã\81\98ã\83\81E\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ã\82¢ã\83\81E\81\83­ã\83¼ã\83\89ã\81\97ã\81¾ã\81\99ã\80\81E/p>
+
+               <p>æ\96°ã\81\97ã\81\84weblogã\81®ä½\9cæ\81\82\92å®\8cäº\81E\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯ã\80\81ä¸\8bã\81«ã\81\93ã\81\83\95ã\82¡ã\82¤ã\83«ã\81®URLã\82\92å\81\8a\9bã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\81E(ã\81\99ã\81§ã\81«ç\94¨æ\84\8fã\81\97ã\81\9få\80¤ã\81§å\90\88ã\81£ã\81¦ã\81\81E\82\8bã\81¨ã\81¯æ\80\9dã\81\84ã\81¾ã\81\99ã\81\8cä¿\9d証ã\81¯ã\81\97ã\81¾ã\81\9bã\82\93):</p>
+
+
+               <form action="index.php" method="post"><div>
+                       <input type="hidden" name="action" value="addnewlog2" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="blogid" value="<?php echo intval($blogid)?>" />
+                       <table><tr>
+                               <td><?php echo _EBLOG_URL?></td>
+                               <td><input name="url" maxlength="100" size="40" value="<?php echo htmlspecialchars($CONF['IndexURL'].$bshortname.'.php')?>" /></td>
+                       </tr><tr>
+                               <td><?php echo _EBLOG_CREATE?></td>
+                               <td><input type="submit" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>
+                       </tr></table>
+               </div></form>
+
+               <h3><a id="skins">æ\96¹æ³\81E2: ç\8f¾å\9c¨ä½¿ç\94¨ã\81\97ã\81¦ã\81\81E\82\8bã\82¹ã\82­ã\83³ã\81«æ\96°ã\81\97ã\81\84weblogã\82\92å±\95é\96\8bã\81\99ã\82\8bè¨\98è¿°ã\82\92å\8a ã\81\88ã\82\8b</a></h3>
+
+               <p>æ\96°ã\81\97ã\81\84weblogã\81®ä½\9cæ\81\82\92å®\8cäº\81E\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯ã\80\81ä¸\8bã\81«URLã\82\92å\81\8a\9bã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\81E(大æ\8aµã\81¯æ\97¢å­\98blogã\81¨å\90\8cã\81\98URL)</p>
+
+
+               <form action="index.php" method="post"><div>
+                       <input type="hidden" name="action" value="addnewlog2" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="blogid" value="<?php echo intval($blogid)?>" />
+                       <table><tr>
+                               <td><?php echo _EBLOG_URL?></td>
+                               <td><input name="url" maxlength="100" size="40" /></td>
+                       </tr><tr>
+                               <td><?php echo _EBLOG_CREATE?></td>
+                               <td><input type="submit" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>
+                       </tr></table>
+               </div></form>
+
+               <?php           $this->pagefoot();
+
+       }
+
+       function action_addnewlog2() {
+               global $member, $manager;
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $burl   = requestVar('url');
+               $blogid = intRequestVar('blogid');
+
+               $blog =& $manager->getBlog($blogid);
+               $blog->setURL(trim($burl));
+               $blog->writeSettings();
+
+               $this->action_overview(_MSG_NEWBLOG);
+       }
+
+       function action_skinieoverview() {
+               global $member, $DIR_LIBS, $manager;
+
+               $member->isAdmin() or $this->disallow();
+
+               // load skinie class
+               include_once($DIR_LIBS . 'skinie.php');
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+
+       ?>
+               <h2><?php echo _SKINIE_TITLE_IMPORT?></h2>
+
+                               <p><label for="skinie_import_local"><?php echo _SKINIE_LOCAL?></label>
+                               <?php                                   global $DIR_SKINS;
+
+                                       $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);
+
+                                       if (sizeof($candidates) > 0) {
+                                               ?>
+                                                       <form method="post" action="index.php"><div>
+                                                               <input type="hidden" name="action" value="skinieimport" />
+                                                               <?php $manager->addTicketHidden() ?>
+                                                               <input type="hidden" name="mode" value="file" />
+                                                               <select name="skinfile" id="skinie_import_local">
+                                                               <?php                                                                   foreach ($candidates as $skinname => $skinfile) {
+                                                                               $html = htmlspecialchars($skinfile);
+                                                                               echo '<option value="',$html,'">',$skinname,'</option>';
+                                                                       }
+                                                               ?>
+                                                               </select>
+                                                               <input type="submit" value="<?php echo _SKINIE_BTN_IMPORT?>" />
+                                                       </div></form>
+                                               <?php                                   } else {
+                                               echo _SKINIE_NOCANDIDATES;
+                                       }
+                               ?>
+                               </p>
+
+                               <p><em><?php echo _OR?></em></p>
+
+                               <form method="post" action="index.php"><p>
+                                       <?php $manager->addTicketHidden() ?>
+                                       <input type="hidden" name="action" value="skinieimport" />
+                                       <input type="hidden" name="mode" value="url" />
+                                       <label for="skinie_import_url"><?php echo _SKINIE_FROMURL?></label>
+                                       <input type="text" name="skinfile" id="skinie_import_url" size="60" value="http://" />
+                                       <input type="submit" value="<?php echo _SKINIE_BTN_IMPORT?>" />
+                               </p></form>
+
+
+               <h2><?php echo _SKINIE_TITLE_EXPORT?></h2>
+               <form method="post" action="index.php"><div>
+                       <input type="hidden" name="action" value="skinieexport" />
+                       <?php $manager->addTicketHidden() ?>
+
+                       <p><?php echo _SKINIE_EXPORT_INTRO?></p>
+
+                       <table><tr>
+                               <th colspan="2"><?php echo _SKINIE_EXPORT_SKINS?></th>
+                       </tr><tr>
+       <?php           // show list of skins
+               $res = sql_query('SELECT * FROM '.sql_table('skin_desc'));
+               while ($skinObj = mysql_fetch_object($res)) {
+                       $id = 'skinexp' . $skinObj->sdnumber;
+                       echo '<td><input type="checkbox" name="skin[',$skinObj->sdnumber,']"  id="',$id,'" />';
+                       echo '<label for="',$id,'">',htmlspecialchars($skinObj->sdname),'</label></td>';
+                       echo '<td>',htmlspecialchars($skinObj->sddesc),'</td>';
+                       echo '</tr><tr>';
+               }
+
+               echo '<th colspan="2">',_SKINIE_EXPORT_TEMPLATES,'</th></tr><tr>';
+
+               // show list of templates
+               $res = sql_query('SELECT * FROM '.sql_table('template_desc'));
+               while ($templateObj = mysql_fetch_object($res)) {
+                       $id = 'templateexp' . $templateObj->tdnumber;
+                       echo '<td><input type="checkbox" name="template[',$templateObj->tdnumber,']" id="',$id,'" />';
+                       echo '<label for="',$id,'">',htmlspecialchars($templateObj->tdname),'</label></td>';
+                       echo '<td>',htmlspecialchars($templateObj->tddesc),'</td>';
+                       echo '</tr><tr>';
+               }
+
+       ?>
+                               <th colspan="2"><?php echo _SKINIE_EXPORT_EXTRA?></th>
+                       </tr><tr>
+                               <td colspan="2"><textarea cols="40" rows="5" name="info"></textarea></td>
+                       </tr><tr>
+                               <th colspan="2"><?php echo _SKINIE_TITLE_EXPORT?></th>
+                       </tr><tr>
+                               <td colspan="2"><input type="submit" value="<?php echo _SKINIE_BTN_EXPORT?>" /></td>
+                       </tr></table>
+               </div></form>
+
+       <?php
+               $this->pagefoot();
+
+       }
+
+       function action_skinieimport() {
+               global $member, $DIR_LIBS, $DIR_SKINS, $manager;
+
+               $member->isAdmin() or $this->disallow();
+
+               // load skinie class
+               include_once($DIR_LIBS . 'skinie.php');
+
+               $skinFileRaw= postVar('skinfile');
+               $mode           = postVar('mode');
+
+               $importer =& new SKINIMPORT();
+
+               // get full filename
+               if ($mode == 'file')
+               {
+                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';
+
+                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)
+                       if (!file_exists($skinFile))
+                               $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';
+               } else {
+                       $skinFile = $skinFileRaw;
+               }
+
+               // read only metadata
+               $error = $importer->readFile($skinFile, 1);
+
+
+               if ($error) $this->error($error);
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=skinieoverview">(',_BACK,')</a></p>';
+               ?>
+               <h2><?php echo _SKINIE_CONFIRM_TITLE?></h2>
+
+               <ul>
+                       <li><p><strong><?php echo _SKINIE_INFO_GENERAL?></strong> <?php echo htmlspecialchars($importer->getInfo())?></p></li>
+                       <li><p><strong><?php echo _SKINIE_INFO_SKINS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getSkinNames())?></p></li>
+                       <li><p><strong><?php echo _SKINIE_INFO_TEMPLATES?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getTemplateNames())?></p></li>
+                       <li><p><strong style="color: red;"><?php echo _SKINIE_INFO_SKINCLASH?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->checkSkinNameClashes())?></p></li>
+                       <li><p><strong style="color: red;"><?php echo _SKINIE_INFO_TEMPLCLASH?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->checkTemplateNameClashes())?></p></li>
+               </ul>
+
+               <form method="post" action="index.php"><div>
+                       <input type="hidden" name="action" value="skiniedoimport" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="skinfile" value="<?php echo htmlspecialchars(postVar('skinfile'))?>" />
+                       <input type="hidden" name="mode" value="<?php echo htmlspecialchars($mode)?>" />
+                       <input type="submit" value="<?php echo _SKINIE_CONFIRM_IMPORT?>" />
+                       <br />
+                       <input type="checkbox" name="overwrite" value="1" id="cb_overwrite" /><label for="cb_overwrite"><?php echo _SKINIE_CONFIRM_OVERWRITE?></label>
+               </div></form>
+
+
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_skiniedoimport() {
+               global $member, $DIR_LIBS, $DIR_SKINS;
+
+               $member->isAdmin() or $this->disallow();
+
+               // load skinie class
+               include_once($DIR_LIBS . 'skinie.php');
+
+               $skinFileRaw= postVar('skinfile');
+               $mode           = postVar('mode');
+
+               $allowOverwrite = intPostVar('overwrite');
+
+               // get full filename
+               if ($mode == 'file')
+               {
+                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';
+
+                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)
+                       if (!file_exists($skinFile))
+                               $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';
+
+               } else {
+                       $skinFile = $skinFileRaw;
+               }
+
+               $importer =& new SKINIMPORT();
+
+               $error = $importer->readFile($skinFile);
+
+               if ($error)
+                       $this->error($error);
+
+               $error = $importer->writeToDatabase($allowOverwrite);
+
+               if ($error)
+                       $this->error($error);
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+       ?>
+               <h2><?php echo _SKINIE_DONE?></h2>
+
+               <ul>
+                       <li><p><strong><?php echo _SKINIE_INFO_GENERAL?></strong> <?php echo htmlspecialchars($importer->getInfo())?></p></li>
+                       <li><p><strong><?php echo _SKINIE_INFO_IMPORTEDSKINS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getSkinNames())?></p></li>
+                       <li><p><strong><?php echo _SKINIE_INFO_IMPORTEDTEMPLS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getTemplateNames())?></p></li>
+               </ul>
+
+       <?php           $this->pagefoot();
+
+       }
+
+       function action_skinieexport() {
+               global $member, $DIR_LIBS;
+
+               $member->isAdmin() or $this->disallow();
+
+               // load skinie class
+               include_once($DIR_LIBS . 'skinie.php');
+
+               $aSkins = requestIntArray('skin');
+               $aTemplates = requestIntArray('template');
+
+               if (!is_array($aTemplates)) $aTemplates = array();
+               if (!is_array($aSkins)) $aSkins = array();
+
+               $skinList = array_keys($aSkins);
+               $templateList = array_keys($aTemplates);
+
+               $info = postVar('info');
+
+               $exporter =& new SKINEXPORT();
+               foreach ($skinList as $skinId) {
+                       $exporter->addSkin($skinId);
+               }
+               foreach ($templateList as $templateId) {
+                       $exporter->addTemplate($templateId);
+               }
+               $exporter->setInfo($info);
+
+               $exporter->export();
+       }
+
+       function action_templateoverview() {
+               global $member, $manager;
+
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+
+               echo '<h2>' . _TEMPLATE_TITLE . '</h2>';
+               echo '<h3>' . _TEMPLATE_AVAILABLE_TITLE . '</h3>';
+
+               $query = 'SELECT * FROM '.sql_table('template_desc').' ORDER BY tdname';
+               $template['content'] = 'templatelist';
+               $template['tabindex'] = 10;
+               showlist($query,'table',$template);
+
+               echo '<h3>' . _TEMPLATE_NEW_TITLE . '</h3>';
+
+               ?>
+               <form method="post" action="index.php"><div>
+
+               <input name="action" value="templatenew" type="hidden" />
+               <?php $manager->addTicketHidden() ?>
+               <table><tr>
+                       <td><?php echo _TEMPLATE_NAME?> <?php help('shortnames');?></td>
+                       <td><input name="name" tabindex="10010" maxlength="20" size="20" /></td>
+               </tr><tr>
+                       <td><?php echo _TEMPLATE_DESC?></td>
+                       <td><input name="desc" tabindex="10020" maxlength="200" size="50" /></td>
+               </tr><tr>
+                       <td><?php echo _TEMPLATE_CREATE?></td>
+                       <td><input type="submit" tabindex="10030" value="<?php echo _TEMPLATE_CREATE_BTN?>" onclick="return checkSubmit();" /></td>
+               </tr></table>
+
+               </div></form>
+
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_templateedit($msg = '') {
+               global $member, $manager;
+
+               $templateid = intRequestVar('templateid');
+
+               $member->isAdmin() or $this->disallow();
+
+               $extrahead = '<script type="text/javascript" src="javascript/templateEdit.js"></script>';
+               $extrahead .= '<script type="text/javascript">setTemplateEditText("'.addslashes(_EDITTEMPLATE_EMPTY).'");</script>';
+
+               $this->pagehead($extrahead);
+
+               $templatename = TEMPLATE::getNameFromId($templateid);
+               $templatedescription = TEMPLATE::getDesc($templateid);
+               $template =& $manager->getTemplate($templatename);
+
+               ?>
+               <p>
+               <a href="index.php?action=templateoverview">(<?php echo _TEMPLATE_BACK?>)</a>
+               </p>
+
+               <h2><?php echo _TEMPLATE_EDIT_TITLE?> '<?php echo  $templatename; ?>'</h2>
+
+               <?php                                   if ($msg) echo "<p>"._MESSAGE.": $msg</p>";
+               ?>
+
+               <p><?php echo _TEMPLATE_EDIT_MSG?></p>
+
+               <form method="post" action="index.php">
+               <div>
+
+               <input type="hidden" name="action" value="templateupdate" />
+               <?php $manager->addTicketHidden() ?>
+               <input type="hidden" name="templateid" value="<?php echo  $templateid; ?>" />
+
+               <table><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_SETTINGS?></th>
+               </tr><tr>
+                       <td><?php echo _TEMPLATE_NAME?> <?php help('shortnames');?></td>
+                       <td><input name="tname" tabindex="4" size="20" maxlength="20" value="<?php echo  htmlspecialchars($templatename) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _TEMPLATE_DESC?></td>
+                       <td><input name="tdesc" tabindex="5" size="50" maxlength="200" value="<?php echo  htmlspecialchars($templatedescription) ?>" /></td>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_UPDATE?></th>
+               </tr><tr>
+                       <td><?php echo _TEMPLATE_UPDATE?></td>
+                       <td>
+                               <input type="submit" tabindex="6" value="<?php echo _TEMPLATE_UPDATE_BTN?>" onclick="return checkSubmit();" />
+                               <input type="reset" tabindex="7" value="<?php echo _TEMPLATE_RESET_BTN?>" />
+                       </td>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_ITEMS?> <?php help('templateitems'); ?></th>
+<?php  $this->_templateEditRow($template, _TEMPLATE_ITEMHEADER, 'ITEM_HEADER', '', 8);
+       $this->_templateEditRow($template, _TEMPLATE_ITEMBODY, 'ITEM', '', 9, 1);
+       $this->_templateEditRow($template, _TEMPLATE_ITEMFOOTER, 'ITEM_FOOTER', '', 10);
+       $this->_templateEditRow($template, _TEMPLATE_MORELINK, 'MORELINK', 'morelink', 20);
+       $this->_templateEditRow($template, _TEMPLATE_EDITLINK, 'EDITLINK', 'editlink', 25);
+       $this->_templateEditRow($template, _TEMPLATE_NEW, 'NEW', 'new', 30);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_ANY?> <?php help('templatecomments'); ?></th>
+<?php  $this->_templateEditRow($template, _TEMPLATE_CHEADER, 'COMMENTS_HEADER', 'commentheaders', 40);
+       $this->_templateEditRow($template, _TEMPLATE_CBODY, 'COMMENTS_BODY', 'commentbody', 50, 1);
+       $this->_templateEditRow($template, _TEMPLATE_CFOOTER, 'COMMENTS_FOOTER', 'commentheaders', 60);
+       $this->_templateEditRow($template, _TEMPLATE_CONE, 'COMMENTS_ONE', 'commentwords', 70);
+       $this->_templateEditRow($template, _TEMPLATE_CMANY, 'COMMENTS_MANY', 'commentwords', 80);
+       $this->_templateEditRow($template, _TEMPLATE_CMORE, 'COMMENTS_CONTINUED', 'commentcontinued', 90);
+       $this->_templateEditRow($template, _TEMPLATE_CMEXTRA, 'COMMENTS_AUTH', 'memberextra', 100);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_NONE?> <?php help('templatecomments'); ?></th>
+<?php
+       $this->_templateEditRow($template, _TEMPLATE_CNONE, 'COMMENTS_NONE', '', 110);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_TOOMUCH?> <?php help('templatecomments'); ?></th>
+<?php  $this->_templateEditRow($template, _TEMPLATE_CTOOMUCH, 'COMMENTS_TOOMUCH', '', 120);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_ARCHIVELIST?> <?php help('templatearchivelists'); ?></th>
+<?php  $this->_templateEditRow($template, _TEMPLATE_AHEADER, 'ARCHIVELIST_HEADER', '', 130);
+       $this->_templateEditRow($template, _TEMPLATE_AITEM, 'ARCHIVELIST_LISTITEM', '', 140);
+       $this->_templateEditRow($template, _TEMPLATE_AFOOTER, 'ARCHIVELIST_FOOTER', '', 150);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_CATEGORYLIST?> <?php help('templatecategorylists'); ?></th>
+<?php  $this->_templateEditRow($template, _TEMPLATE_CATHEADER, 'CATLIST_HEADER', '', 160);
+       $this->_templateEditRow($template, _TEMPLATE_CATITEM, 'CATLIST_LISTITEM', '', 170);
+       $this->_templateEditRow($template, _TEMPLATE_CATFOOTER, 'CATLIST_FOOTER', '', 180);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_DATETIME?></th>
+<?php  $this->_templateEditRow($template, _TEMPLATE_DHEADER, 'DATE_HEADER', 'dateheads', 190);
+       $this->_templateEditRow($template, _TEMPLATE_DFOOTER, 'DATE_FOOTER', 'dateheads', 200);
+       $this->_templateEditRow($template, _TEMPLATE_DFORMAT, 'FORMAT_DATE', 'datetime', 210);
+       $this->_templateEditRow($template, _TEMPLATE_TFORMAT, 'FORMAT_TIME', 'datetime', 220);
+       $this->_templateEditRow($template, _TEMPLATE_LOCALE, 'LOCALE', 'locale', 230);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_IMAGE?> <?php help('templatepopups'); ?></th>
+<?php  $this->_templateEditRow($template, _TEMPLATE_PCODE, 'POPUP_CODE', '', 240);
+       $this->_templateEditRow($template, _TEMPLATE_ICODE, 'IMAGE_CODE', '', 250);
+       $this->_templateEditRow($template, _TEMPLATE_MCODE, 'MEDIA_CODE', '', 260);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_SEARCH?></th>
+<?php  $this->_templateEditRow($template, _TEMPLATE_SHIGHLIGHT, 'SEARCH_HIGHLIGHT', 'highlight',270);
+       $this->_templateEditRow($template, _TEMPLATE_SNOTFOUND, 'SEARCH_NOTHINGFOUND', 'nothingfound',280);
+?>
+               </tr><tr>
+                       <th colspan="2"><?php echo _TEMPLATE_UPDATE?></th>
+               </tr><tr>
+                       <td><?php echo _TEMPLATE_UPDATE?></td>
+                       <td>
+                               <input type="submit" tabindex="290" value="<?php echo _TEMPLATE_UPDATE_BTN?>" onclick="return checkSubmit();" />
+                               <input type="reset" tabindex="300" value="<?php echo _TEMPLATE_RESET_BTN?>" />
+                       </td>
+               </tr></table>
+
+               </div>
+               </form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function _templateEditRow(&$template, $description, $name, $help = '', $tabindex = 0, $big = 0) {
+               static $count = 1;
+       ?>
+               </tr><tr>
+                       <td><?php echo $description?> <?php if ($help) help('template'.$help); ?></td>
+                       <td id="td<?php echo $count?>"><textarea class="templateedit" name="<?php echo $name?>" tabindex="<?php echo $tabindex?>" cols="50" rows="<?php echo $big?10:5?>" id="textarea<?php echo $count?>"><?php echo  htmlspecialchars($template[$name]); ?></textarea></td>
+       <?php           $count++;
+       }
+
+       function action_templateupdate() {
+               global $member;
+
+               $templateid = intRequestVar('templateid');
+
+               $member->isAdmin() or $this->disallow();
+
+               $name = postVar('tname');
+               $desc = postVar('tdesc');
+
+               if (!isValidTemplateName($name))
+                       $this->error(_ERROR_BADTEMPLATENAME);
+
+               if ((TEMPLATE::getNameFromId($templateid) != $name) && TEMPLATE::exists($name))
+                       $this->error(_ERROR_DUPTEMPLATENAME);
+
+
+               $name = addslashes($name);
+               $desc = addslashes($desc);
+
+               // 1. Remove all template parts
+               $query = 'DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid;
+               sql_query($query);
+
+               // 2. Update description
+               $query =  'UPDATE '.sql_table('template_desc').' SET'
+                          . " tdname='" . $name . "',"
+                          . " tddesc='" . $desc . "'"
+                          . " WHERE tdnumber=" . $templateid;
+               sql_query($query);
+
+               // 3. Add non-empty template parts
+               $this->addToTemplate($templateid, 'ITEM_HEADER', postVar('ITEM_HEADER'));
+               $this->addToTemplate($templateid, 'ITEM', postVar('ITEM'));
+               $this->addToTemplate($templateid, 'ITEM_FOOTER', postVar('ITEM_FOOTER'));
+               $this->addToTemplate($templateid, 'MORELINK', postVar('MORELINK'));
+               $this->addToTemplate($templateid, 'EDITLINK', postVar('EDITLINK'));
+               $this->addToTemplate($templateid, 'NEW', postVar('NEW'));
+               $this->addToTemplate($templateid, 'COMMENTS_HEADER', postVar('COMMENTS_HEADER'));
+               $this->addToTemplate($templateid, 'COMMENTS_BODY', postVar('COMMENTS_BODY'));
+               $this->addToTemplate($templateid, 'COMMENTS_FOOTER', postVar('COMMENTS_FOOTER'));
+               $this->addToTemplate($templateid, 'COMMENTS_CONTINUED', postVar('COMMENTS_CONTINUED'));
+               $this->addToTemplate($templateid, 'COMMENTS_TOOMUCH', postVar('COMMENTS_TOOMUCH'));
+               $this->addToTemplate($templateid, 'COMMENTS_AUTH', postVar('COMMENTS_AUTH'));
+               $this->addToTemplate($templateid, 'COMMENTS_ONE', postVar('COMMENTS_ONE'));
+               $this->addToTemplate($templateid, 'COMMENTS_MANY', postVar('COMMENTS_MANY'));
+               $this->addToTemplate($templateid, 'COMMENTS_NONE', postVar('COMMENTS_NONE'));
+               $this->addToTemplate($templateid, 'ARCHIVELIST_HEADER', postVar('ARCHIVELIST_HEADER'));
+               $this->addToTemplate($templateid, 'ARCHIVELIST_LISTITEM', postVar('ARCHIVELIST_LISTITEM'));
+               $this->addToTemplate($templateid, 'ARCHIVELIST_FOOTER', postVar('ARCHIVELIST_FOOTER'));
+               $this->addToTemplate($templateid, 'CATLIST_HEADER', postVar('CATLIST_HEADER'));
+               $this->addToTemplate($templateid, 'CATLIST_LISTITEM', postVar('CATLIST_LISTITEM'));
+               $this->addToTemplate($templateid, 'CATLIST_FOOTER', postVar('CATLIST_FOOTER'));
+               $this->addToTemplate($templateid, 'DATE_HEADER', postVar('DATE_HEADER'));
+               $this->addToTemplate($templateid, 'DATE_FOOTER', postVar('DATE_FOOTER'));
+               $this->addToTemplate($templateid, 'FORMAT_DATE', postVar('FORMAT_DATE'));
+               $this->addToTemplate($templateid, 'FORMAT_TIME', postVar('FORMAT_TIME'));
+               $this->addToTemplate($templateid, 'LOCALE', postVar('LOCALE'));
+               $this->addToTemplate($templateid, 'SEARCH_HIGHLIGHT', postVar('SEARCH_HIGHLIGHT'));
+               $this->addToTemplate($templateid, 'SEARCH_NOTHINGFOUND', postVar('SEARCH_NOTHINGFOUND'));
+               $this->addToTemplate($templateid, 'POPUP_CODE', postVar('POPUP_CODE'));
+               $this->addToTemplate($templateid, 'MEDIA_CODE', postVar('MEDIA_CODE'));
+               $this->addToTemplate($templateid, 'IMAGE_CODE', postVar('IMAGE_CODE'));
+
+
+               // jump back to template edit
+               $this->action_templateedit(_TEMPLATE_UPDATED);
+
+       }
+
+       function addToTemplate($id, $partname, $content) {
+               $partname = addslashes($partname);
+               $content = addslashes($content);
+
+               $id = intval($id);
+
+               // don't add empty parts:
+               if (!trim($content)) return -1;
+
+               $query = 'INSERT INTO '.sql_table('template')." (tdesc, tpartname, tcontent) "
+                          . "VALUES ($id, '$partname', '$content')";
+               mysql_query($query) or die("Query error: " . mysql_error());
+               return mysql_insert_id();
+       }
+
+       function action_templatedelete() {
+               global $member, $manager;
+
+               $member->isAdmin() or $this->disallow();
+
+               $templateid = intRequestVar('templateid');
+               // TODO: check if template can be deleted
+
+               $this->pagehead();
+
+               $name = TEMPLATE::getNameFromId($templateid);
+               $desc = TEMPLATE::getDesc($templateid);
+
+               ?>
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <p>
+                       <?php echo _CONFIRMTXT_TEMPLATE?><b><?php echo $name?></b> (<?php echo  htmlspecialchars($desc) ?>)
+                       </p>
+
+                       <form method="post" action="index.php"><div>
+                               <input type="hidden" name="action" value="templatedeleteconfirm" />
+                               <?php $manager->addTicketHidden() ?>
+                               <input type="hidden" name="templateid" value="<?php echo  $templateid ?>" />
+                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_templatedeleteconfirm() {
+               global $member, $manager;
+
+               $templateid = intRequestVar('templateid');
+
+               $member->isAdmin() or $this->disallow();
+
+               $manager->notify('PreDeleteTemplate', array('templateid' => $templateid));
+
+               // 1. delete description
+               sql_query('DELETE FROM '.sql_table('template_desc').' WHERE tdnumber=' . $templateid);
+
+               // 2. delete parts
+               sql_query('DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid);
+
+               $manager->notify('PostDeleteTemplate', array('templateid' => $templateid));
+
+               $this->action_templateoverview();
+       }
+
+       function action_templatenew() {
+               global $member;
+
+               $member->isAdmin() or $this->disallow();
+
+               $name = postVar('name');
+               $desc = postVar('desc');
+
+               if (!isValidTemplateName($name))
+                       $this->error(_ERROR_BADTEMPLATENAME);
+
+               if (TEMPLATE::exists($name))
+                       $this->error(_ERROR_DUPTEMPLATENAME);
+
+               $newTemplateId = TEMPLATE::createNew($name, $desc);
+
+               $this->action_templateoverview();
+       }
+
+       function action_templateclone() {
+               global $member;
+
+               $templateid = intRequestVar('templateid');
+
+               $member->isAdmin() or $this->disallow();
+
+               // 1. read old template
+               $name = TEMPLATE::getNameFromId($templateid);
+               $desc = TEMPLATE::getDesc($templateid);
+
+               // 2. create desc thing
+               $name = "cloned" . $name;
+
+               // if a template with that name already exists:
+               if (TEMPLATE::exists($name)) {
+                       $i = 1;
+                       while (TEMPLATE::exists($name . $i))
+                               $i++;
+                       $name .= $i;
+               }
+
+               $newid = TEMPLATE::createNew($name, $desc);
+
+               // 3. create clone
+               // go through parts of old template and add them to the new one
+               $res = sql_query('SELECT tpartname, tcontent FROM '.sql_table('template').' WHERE tdesc=' . $templateid);
+               while ($o = mysql_fetch_object($res)) {
+                       $this->addToTemplate($newid, $o->tpartname, $o->tcontent);
+               }
+
+               $this->action_templateoverview();
+       }
+
+       function action_skinoverview() {
+               global $member, $manager;
+
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+
+               echo '<h2>' . _SKIN_EDIT_TITLE . '</h2>';
+
+               echo '<h3>' . _SKIN_AVAILABLE_TITLE . '</h3>';
+
+               $query = 'SELECT * FROM '.sql_table('skin_desc').' ORDER BY sdname';
+               $template['content'] = 'skinlist';
+               $template['tabindex'] = 10;
+               showlist($query,'table',$template);
+
+               echo '<h3>' . _SKIN_NEW_TITLE . '</h3>';
+
+               ?>
+               <form method="post" action="index.php">
+               <div>
+
+               <input name="action" value="skinnew" type="hidden" />
+               <?php $manager->addTicketHidden() ?>
+               <table><tr>
+                       <td><?php echo _SKIN_NAME?> <?php help('shortnames');?></td>
+                       <td><input name="name" tabindex="10010" maxlength="20" size="20" /></td>
+               </tr><tr>
+                       <td><?php echo _SKIN_DESC?></td>
+                       <td><input name="desc" tabindex="10020" maxlength="200" size="50" /></td>
+               </tr><tr>
+                       <td><?php echo _SKIN_CREATE?></td>
+                       <td><input type="submit" tabindex="10030" value="<?php echo _SKIN_CREATE_BTN?>" onclick="return checkSubmit();" /></td>
+               </tr></table>
+
+               </div>
+               </form>
+
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_skinnew() {
+               global $member;
+
+               $member->isAdmin() or $this->disallow();
+
+               $name = trim(postVar('name'));
+               $desc = trim(postVar('desc'));
+
+               if (!isValidSkinName($name))
+                       $this->error(_ERROR_BADSKINNAME);
+
+               if (SKIN::exists($name))
+                       $this->error(_ERROR_DUPSKINNAME);
+
+               $newId = SKIN::createNew($name, $desc);
+
+               $this->action_skinoverview();
+       }
+
+       function action_skinedit() {
+               global $member, $manager;
+
+               $skinid = intRequestVar('skinid');
+
+               $member->isAdmin() or $this->disallow();
+
+               $skin =& new SKIN($skinid);
+
+               $this->pagehead();
+               ?>
+               <p>
+                       <a href="index.php?action=skinoverview">(<?php echo _SKIN_BACK?>)</a>
+               </p>
+               <h2><?php echo _SKIN_EDITONE_TITLE?> '<?php echo  $skin->getName() ?>'</h2>
+
+               <h3><?php echo _SKIN_PARTS_TITLE?></h3>
+               <?php echo _SKIN_PARTS_MSG?>
+               <ul>
+                       <li><a tabindex="10" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=index"><?php echo _SKIN_PART_MAIN?></a> <?php help('skinpartindex')?></li>
+                       <li><a tabindex="20" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=item"><?php echo _SKIN_PART_ITEM?></a> <?php help('skinpartitem')?></li>
+                       <li><a tabindex="30" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=archivelist"><?php echo _SKIN_PART_ALIST?></a> <?php help('skinpartarchivelist')?></li>
+                       <li><a tabindex="40" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=archive"><?php echo _SKIN_PART_ARCHIVE?></a> <?php help('skinpartarchive')?></li>
+                       <li><a tabindex="50" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=search"><?php echo _SKIN_PART_SEARCH?></a> <?php help('skinpartsearch')?></li>
+                       <li><a tabindex="60" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=error"><?php echo _SKIN_PART_ERROR?></a> <?php help('skinparterror')?></li>
+                       <li><a tabindex="70" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=member"><?php echo _SKIN_PART_MEMBER?></a> <?php help('skinpartmember')?></li>
+                       <li><a tabindex="75" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=imagepopup"><?php echo _SKIN_PART_POPUP?></a> <?php help('skinpartimagepopup')?></li>
+               </ul>
+
+               <h3><?php echo _SKIN_GENSETTINGS_TITLE?></h3>
+               <form method="post" action="index.php">
+               <div>
+
+               <input type="hidden" name="action" value="skineditgeneral" />
+               <?php $manager->addTicketHidden() ?>
+               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />
+               <table><tr>
+                       <td><?php echo _SKIN_NAME?> <?php help('shortnames');?></td>
+                       <td><input name="name" tabindex="90" value="<?php echo  htmlspecialchars($skin->getName()) ?>" maxlength="20" size="20" /></td>
+               </tr><tr>
+                       <td><?php echo _SKIN_DESC?></td>
+                       <td><input name="desc" tabindex="100" value="<?php echo  htmlspecialchars($skin->getDescription()) ?>" maxlength="200" size="50" /></td>
+               </tr><tr>
+                       <td><?php echo _SKIN_TYPE?></td>
+                       <td><input name="type" tabindex="110" value="<?php echo  htmlspecialchars($skin->getContentType()) ?>" maxlength="40" size="20" /></td>
+               </tr><tr>
+                       <td><?php echo _SKIN_INCLUDE_MODE?> <?php help('includemode')?></td>
+                       <td><?php $this->input_yesno('inc_mode',$skin->getIncludeMode(),120,'skindir','normal',_PARSER_INCMODE_SKINDIR,_PARSER_INCMODE_NORMAL);?></td>
+               </tr><tr>
+                       <td><?php echo _SKIN_INCLUDE_PREFIX?> <?php help('includeprefix')?></td>
+                       <td><input name="inc_prefix" tabindex="130" value="<?php echo  htmlspecialchars($skin->getIncludePrefix()) ?>" maxlength="40" size="20" /></td>
+               </tr><tr>
+                       <td><?php echo _SKIN_CHANGE?></td>
+                       <td><input type="submit" tabindex="140" value="<?php echo _SKIN_CHANGE_BTN?>" onclick="return checkSubmit();" /></td>
+               </tr></table>
+
+               </div>
+               </form>
+
+
+               <?php           $this->pagefoot();
+       }
+
+       function action_skineditgeneral() {
+               global $member;
+
+               $skinid = intRequestVar('skinid');
+
+               $member->isAdmin() or $this->disallow();
+
+               $name = postVar('name');
+               $desc = postVar('desc');
+               $type = postVar('type');
+               $inc_mode = postVar('inc_mode');
+               $inc_prefix = postVar('inc_prefix');
+
+               $skin =& new SKIN($skinid);
+
+               // 1. Some checks
+               if (!isValidSkinName($name))
+                       $this->error(_ERROR_BADSKINNAME);
+
+               if (($skin->getName() != $name) && SKIN::exists($name))
+                       $this->error(_ERROR_DUPSKINNAME);
+
+               if (!$type) $type = 'text/html';
+               if (!$inc_mode) $inc_mode = 'normal';
+
+               // 2. Update description
+               $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);
+
+               $this->action_skinedit();
+
+       }
+
+       function action_skinedittype($msg = '') {
+               global $member, $manager;
+
+               $skinid = intRequestVar('skinid');
+               $type = requestVar('type');
+
+               $member->isAdmin() or $this->disallow();
+
+               $skin =& new SKIN($skinid);
+
+               $friendlyNames = SKIN::getFriendlyNames();
+
+               $this->pagehead();
+               ?>
+               <p>(<a href="index.php?action=skinoverview"><?php echo _SKIN_GOBACK?></a>)</p>
+
+               <h2><?php echo _SKIN_EDITPART_TITLE?> '<?php echo  $skin->getName() ?>': <?php echo  $friendlyNames[$type] ?></h2>
+
+               <?php                   if ($msg) echo "<p>"._MESSAGE.": $msg</p>";
+               ?>
+
+
+               <form method="post" action="index.php">
+               <div>
+
+               <input type="hidden" name="action" value="skinupdate" />
+               <?php $manager->addTicketHidden() ?>
+               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />
+               <input type="hidden" name="type" value="<?php echo  $type ?>" />
+
+               <input type="submit" value="<?php echo _SKIN_UPDATE_BTN?>" onclick="return checkSubmit();" />
+               <input type="reset" value="<?php echo _SKIN_RESET_BTN?>" />
+               (skin type: <?php echo  $friendlyNames[$type] ?>)
+               <?php help('skinpart' . $type);?>
+               <br />
+
+               <textarea class="skinedit" tabindex="10" rows="20" cols="80" name="content"><?php echo  htmlspecialchars($skin->getContent($type)) ?></textarea>
+
+               <br />
+               <input type="submit" tabindex="20" value="<?php echo _SKIN_UPDATE_BTN?>" onclick="return checkSubmit();" />
+               <input type="reset" value="<?php echo _SKIN_RESET_BTN?>" />
+               (skin type: <?php echo  $friendlyNames[$type] ?>)
+
+               <br /><br />
+               <?php echo _SKIN_ALLOWEDVARS?>
+               <?php                   $actions = SKIN::getAllowedActionsForType($type);
+
+                       sort($actions);
+
+                       while ($current = array_shift($actions)) {
+                               // skip deprecated vars
+                               if ($current == 'ifcat') continue;
+                               if ($current == 'imagetext') continue;
+                               if ($current == 'vars') continue;
+
+                               echo helplink('skinvar-' . $current) . "$current</a>";
+                               if (count($actions) != 0) echo ", ";
+                       }
+               ?>
+               <br /><br />
+               Short blog names:
+               <?php                   $query = 'SELECT bshortname, bname FROM '.sql_table('blog');
+                       showlist($query,'table',array('content'=>'shortblognames'));
+               ?>
+
+               <br />
+               Template names:
+               <?php                   $query = 'SELECT tdname as name, tddesc as description FROM '.sql_table('template_desc');
+                       showlist($query,'table',array('content'=>'shortnames'));
+               ?>
+
+
+               </div>
+               </form>
+
+
+               <?php           $this->pagefoot();
+       }
+
+       function action_skinupdate() {
+               global $member;
+
+               $skinid = intRequestVar('skinid');
+               $content = trim(postVar('content'));
+               $type = postVar('type');
+
+               $member->isAdmin() or $this->disallow();
+
+               $skin =& new SKIN($skinid);
+               $skin->update($type, $content);
+
+               $this->action_skinedittype(_SKIN_UPDATED);
+       }
+
+       function action_skindelete() {
+               global $member, $manager, $CONF;
+
+               $skinid = intRequestVar('skinid');
+
+               $member->isAdmin() or $this->disallow();
+
+               // don't allow default skin to be deleted
+               if ($skinid == $CONF['BaseSkin'])
+                       $this->error(_ERROR_DEFAULTSKIN);
+
+               // don't allow deletion of default skins for blogs
+               $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid;
+               $r = sql_query($query);
+               if ($o = mysql_fetch_object($r))
+                       $this->error(_ERROR_SKINDEFDELETE . $o->bname);
+
+               $this->pagehead();
+
+               $skin =& new SKIN($skinid);
+               $name = $skin->getName();
+               $desc = $skin->getDescription();
+
+               ?>
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <p>
+                               <?php echo _CONFIRMTXT_SKIN?><b><?php echo  $name ?></b> (<?php echo  htmlspecialchars($desc)?>)
+                       </p>
+
+                       <form method="post" action="index.php"><div>
+                               <input type="hidden" name="action" value="skindeleteconfirm" />
+                               <?php $manager->addTicketHidden() ?>
+                               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />
+                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div></form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_skindeleteconfirm() {
+               global $member, $CONF, $manager;
+
+               $skinid = intRequestVar('skinid');
+
+               $member->isAdmin() or $this->disallow();
+
+               // don't allow default skin to be deleted
+               if ($skinid == $CONF['BaseSkin'])
+                       $this->error(_ERROR_DEFAULTSKIN);
+
+               // don't allow deletion of default skins for blogs
+               $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid;
+               $r = sql_query($query);
+               if ($o = mysql_fetch_object($r))
+                       $this->error(_ERROR_SKINDEFDELETE .$o->bname);
+
+               $manager->notify('PreDeleteSkin', array('skinid' => $skinid));
+
+               // 1. delete description
+               sql_query('DELETE FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $skinid);
+
+               // 2. delete parts
+               sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc=' . $skinid);
+
+               $manager->notify('PostDeleteSkin', array('skinid' => $skinid));
+
+               $this->action_skinoverview();
+       }
+
+       function action_skinclone() {
+               global $member;
+
+               $skinid = intRequestVar('skinid');
+
+               $member->isAdmin() or $this->disallow();
+
+               // 1. read skin to clone
+               $skin =& new SKIN($skinid);
+
+               $name = "clone_" . $skin->getName();
+
+               // if a skin with that name already exists:
+               if (SKIN::exists($name)) {
+                       $i = 1;
+                       while (SKIN::exists($name . $i))
+                               $i++;
+                       $name .= $i;
+               }
+
+               // 2. create skin desc
+               $newid = SKIN::createNew(
+                       $name,
+                       $skin->getDescription(),
+                       $skin->getContentType(),
+                       $skin->getIncludeMode(),
+                       $skin->getIncludePrefix()
+               );
+
+
+               // 3. clone
+               $this->skinclonetype($skin, $newid, 'index');
+               $this->skinclonetype($skin, $newid, 'item');
+               $this->skinclonetype($skin, $newid, 'archivelist');
+               $this->skinclonetype($skin, $newid, 'archive');
+               $this->skinclonetype($skin, $newid, 'search');
+               $this->skinclonetype($skin, $newid, 'error');
+               $this->skinclonetype($skin, $newid, 'member');
+               $this->skinclonetype($skin, $newid, 'imagepopup');
+
+               $this->action_skinoverview();
+
+       }
+
+       function skinclonetype($skin, $newid, $type) {
+               $newid = intval($newid);
+               $content = $skin->getContent($type);
+               if ($content) {
+                       $query = 'INSERT INTO '.sql_table('skin')." (sdesc, scontent, stype) VALUES ($newid,'". addslashes($content)."', '". addslashes($type)."')";
+                       sql_query($query);
+               }
+       }
+
+       function action_settingsedit() {
+               global $member, $manager, $CONF, $DIR_NUCLEUS, $DIR_MEDIA;
+
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+               ?>
+
+               <h2><?php echo _SETTINGS_TITLE?></h2>
+
+               <form action="index.php" method="post">
+               <div>
+
+               <input type="hidden" name="action" value="settingsupdate" />
+               <?php $manager->addTicketHidden() ?>
+
+               <table><tr>
+                       <th colspan="2"><?php echo _SETTINGS_SUB_GENERAL?></th>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_DEFBLOG?> <?php help('defaultblog'); ?></td>
+                       <td>
+                               <?php
+                                       $query =  'SELECT bname as text, bnumber as value'
+                                                  . ' FROM '.sql_table('blog');
+                                       $template['name'] = 'DefaultBlog';
+                                       $template['selected'] = $CONF['DefaultBlog'];
+                                       $template['tabindex'] = 10;
+                                       showlist($query,'select',$template);
+                               ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_BASESKIN?> <?php help('baseskin'); ?></td>
+                       <td>
+                               <?php
+                                       $query =  'SELECT sdname as text, sdnumber as value'
+                                                  . ' FROM '.sql_table('skin_desc');
+                                       $template['name'] = 'BaseSkin';
+                                       $template['selected'] = $CONF['BaseSkin'];
+                                       $template['tabindex'] = 1;
+                                       showlist($query,'select',$template);
+                               ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_ADMINMAIL?></td>
+                       <td><input name="AdminEmail" tabindex="10010" size="40" value="<?php echo  htmlspecialchars($CONF['AdminEmail']) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_SITENAME?></td>
+                       <td><input name="SiteName" tabindex="10020" size="40" value="<?php echo  htmlspecialchars($CONF['SiteName']) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_SITEURL?></td>
+                       <td><input name="IndexURL" tabindex="10030" size="40" value="<?php echo  htmlspecialchars($CONF['IndexURL']) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_ADMINURL?></td>
+                       <td><input name="AdminURL" tabindex="10040" size="40" value="<?php echo  htmlspecialchars($CONF['AdminURL']) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_PLUGINURL?> <?php help('pluginurl');?></td>
+                       <td><input name="PluginURL" tabindex="10045" size="40" value="<?php echo  htmlspecialchars($CONF['PluginURL']) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_SKINSURL?> <?php help('skinsurl');?></td>
+                       <td><input name="SkinsURL" tabindex="10046" size="40" value="<?php echo  htmlspecialchars($CONF['SkinsURL']) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_ACTIONSURL?> <?php help('actionurl');?></td>
+                       <td><input name="ActionURL" tabindex="10047" size="40" value="<?php echo  htmlspecialchars($CONF['ActionURL']) ?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_LANGUAGE?> <?php help('language'); ?>
+                       </td>
+                       <td>
+
+                               <select name="Language" tabindex="10050">
+                               <?php                           // show a dropdown list of all available languages
+                               global $DIR_LANG;
+                               $dirhandle = opendir($DIR_LANG);
+                               while ($filename = readdir($dirhandle)) {
+                                       if (ereg("^(.*)\.php$",$filename,$matches)) {
+                                               $name = $matches[1];
+                                               echo "<option value='$name'";
+                                               if ($name == $CONF['Language'])
+                                                       echo " selected='selected'";
+                                               echo ">$name</option>";
+                                       }
+                               }
+                               closedir($dirhandle);
+
+                               ?>
+                               </select>
+
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_DISABLESITE?> <?php help('disablesite'); ?>
+                       </td>
+                       <td><?php $this->input_yesno('DisableSite',$CONF['DisableSite'],10060); ?>
+                                       <br />
+                               URL: <input name="DisableSiteURL" tabindex="10070" size="40" value="<?php echo  htmlspecialchars($CONF['DisableSiteURL'])?>" />
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_DIRS?></td>
+                       <td><?php echo  htmlspecialchars($DIR_NUCLEUS) ?>
+                               <i><?php echo _SETTINGS_SEECONFIGPHP?></i></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_DBLOGIN?></td>
+                       <td><i><?php echo _SETTINGS_SEECONFIGPHP?></i></td>
+               </tr><tr>
+                       <td>
+                       <?php
+                               echo _SETTINGS_JSTOOLBAR
+                               /* =_SETTINGS_DISABLEJS
+
+                                       I temporary changed the meaning of DisableJsTools, until I can find a good
+                                       way to select the javascript version to use
+
+                                       now, its:
+                                               0 : IE
+                                               1 : all javascript disabled
+                                               2 : 'simpler' javascript (for mozilla/opera/mac)
+                               */
+                          ?>
+                       </td>
+                       <td><?php /* $this->input_yesno('DisableJsTools',$CONF['DisableJsTools'],10075); */?>
+                               <select name="DisableJsTools" tabindex="10075">
+                       <?php                                   $extra = ($CONF['DisableJsTools'] == 1) ? 'selected="selected"' : '';
+                                       echo "<option $extra value='1'>",_SETTINGS_JSTOOLBAR_NONE,"</option>";
+                                       $extra = ($CONF['DisableJsTools'] == 2) ? 'selected="selected"' : '';
+                                       echo "<option $extra value='2'>",_SETTINGS_JSTOOLBAR_SIMPLE,"</option>";
+                                       $extra = ($CONF['DisableJsTools'] == 0) ? 'selected="selected"' : '';
+                                       echo "<option $extra value='0'>",_SETTINGS_JSTOOLBAR_FULL,"</option>";
+                       ?>
+                               </select>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_URLMODE?> <?php help('urlmode');?></td>
+                                          <td><?php
+
+                                          $this->input_yesno('URLMode',$CONF['URLMode'],10077,
+                                                         'normal','pathinfo',_SETTINGS_URLMODE_NORMAL,_SETTINGS_URLMODE_PATHINFO);
+
+                                          echo ' ', _SETTINGS_URLMODE_HELP;
+
+                                                        ?>
+
+                                          </td>
+               </tr><tr>
+                       <th colspan="2"><?php echo _SETTINGS_MEDIA?> <?php help('media'); ?></th>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_MEDIADIR?></td>
+                       <td><?php echo  htmlspecialchars($DIR_MEDIA) ?>
+                               <i><?php echo _SETTINGS_SEECONFIGPHP?></i>
+                               <?php                           if (!is_dir($DIR_MEDIA))
+                                               echo "<br /><b>" . _WARNING_NOTADIR . "</b>";
+                                       if (!is_readable($DIR_MEDIA))
+                                               echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>";
+                                       if (!is_writeable($DIR_MEDIA))
+                                               echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>";
+                               ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_MEDIAURL?></td>
+                       <td>
+                               <input name="MediaURL" tabindex="10080" size="40" value="<?php echo  htmlspecialchars($CONF['MediaURL']) ?>" />
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_ALLOWUPLOAD?></td>
+                       <td><?php $this->input_yesno('AllowUpload',$CONF['AllowUpload'],10090); ?></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_ALLOWUPLOADTYPES?></td>
+                       <td>
+                               <input name="AllowedTypes" tabindex="10100" size="40" value="<?php echo  htmlspecialchars($CONF['AllowedTypes']) ?>" />
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_MAXUPLOADSIZE?></td>
+                       <td>
+                               <input name="MaxUploadSize" tabindex="10105" size="40" value="<?php echo  htmlspecialchars($CONF['MaxUploadSize']) ?>" />
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_MEDIAPREFIX?></td>
+                       <td><?php $this->input_yesno('MediaPrefix',$CONF['MediaPrefix'],10110); ?></td>
+
+               </tr><tr>
+                       <th colspan="2"><?php echo _SETTINGS_MEMBERS?></th>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_CHANGELOGIN?></td>
+                       <td><?php $this->input_yesno('AllowLoginEdit',$CONF['AllowLoginEdit'],10120); ?></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_ALLOWCREATE?>
+                               <?php help('allowaccountcreation'); ?>
+                       </td>
+                       <td><?php $this->input_yesno('AllowMemberCreate',$CONF['AllowMemberCreate'],10130); ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_NEWLOGIN?> <?php help('allownewmemberlogin'); ?>
+                               <br /><?php echo _SETTINGS_NEWLOGIN2?>
+                       </td>
+                       <td><?php $this->input_yesno('NewMemberCanLogon',$CONF['NewMemberCanLogon'],10140); ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_MEMBERMSGS?>
+                               <?php help('messageservice'); ?>
+                       </td>
+                       <td><?php $this->input_yesno('AllowMemberMail',$CONF['AllowMemberMail'],10150); ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_NONMEMBERMSGS?>
+                               <?php help('messageservice'); ?>
+                       </td>
+                       <td><?php $this->input_yesno('NonmemberMail',$CONF['NonmemberMail'],10155); ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_PROTECTMEMNAMES?>
+                               <?php help('protectmemnames'); ?>
+                       </td>
+                       <td><?php $this->input_yesno('ProtectMemNames',$CONF['ProtectMemNames'],10156); ?>
+                       </td>
+
+
+
+               </tr><tr>
+                       <th colspan="2"><?php echo _SETTINGS_COOKIES_TITLE?> <?php help('cookies'); ?></th>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_COOKIEPREFIX?></td>
+                       <td><input name="CookiePrefix" tabindex="10159" size="40" value="<?php echo  htmlspecialchars($CONF['CookiePrefix'])?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_COOKIEDOMAIN?></td>
+                       <td><input name="CookieDomain" tabindex="10160" size="40" value="<?php echo  htmlspecialchars($CONF['CookieDomain'])?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_COOKIEPATH?></td>
+                       <td><input name="CookiePath" tabindex="10170" size="40" value="<?php echo  htmlspecialchars($CONF['CookiePath'])?>" /></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_COOKIESECURE?></td>
+                       <td><?php $this->input_yesno('CookieSecure',$CONF['CookieSecure'],10180); ?></td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_COOKIELIFE?></td>
+                       <td><?php $this->input_yesno('SessionCookie',$CONF['SessionCookie'],10190,
+                                                         1,0,_SETTINGS_COOKIESESSION,_SETTINGS_COOKIEMONTH); ?>
+                       </td>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_LASTVISIT?></td>
+                       <td><?php $this->input_yesno('LastVisit',$CONF['LastVisit'],10200); ?></td>
+
+
+
+               </tr><tr>
+                       <th colspan="2"><?php echo _SETTINGS_UPDATE?></th>
+               </tr><tr>
+                       <td><?php echo _SETTINGS_UPDATE?></td>
+                       <td><input type="submit" tabindex="10210" value="<?php echo _SETTINGS_UPDATE_BTN?>" onclick="return checkSubmit();" /></td>
+               </tr></table>
+
+               </div>
+               </form>
+
+               <?php
+                       echo '<h2>',_PLUGINS_EXTRA,'</h2>';
+
+                       $manager->notify(
+                               'GeneralSettingsFormExtras',
+                               array()
+                       );
+
+               $this->pagefoot();
+       }
+
+       function action_settingsupdate() {
+               global $member, $CONF;
+
+               $member->isAdmin() or $this->disallow();
+
+               // check if email address for admin is valid
+               if (!isValidMailAddress(postVar('AdminEmail')))
+                       $this->error(_ERROR_BADMAILADDRESS);
+
+
+               // save settings
+               $this->updateConfig('DefaultBlog',              postVar('DefaultBlog'));
+               $this->updateConfig('BaseSkin',                 postVar('BaseSkin'));
+               $this->updateConfig('IndexURL',                 postVar('IndexURL'));
+               $this->updateConfig('AdminURL',                 postVar('AdminURL'));
+               $this->updateConfig('PluginURL',                postVar('PluginURL'));
+               $this->updateConfig('SkinsURL',                 postVar('SkinsURL'));
+               $this->updateConfig('ActionURL',                postVar('ActionURL'));
+               $this->updateConfig('Language',                 postVar('Language'));
+               $this->updateConfig('AdminEmail',               postVar('AdminEmail'));
+               $this->updateConfig('SessionCookie',    postVar('SessionCookie'));
+               $this->updateConfig('AllowMemberCreate',postVar('AllowMemberCreate'));
+               $this->updateConfig('AllowMemberMail',  postVar('AllowMemberMail'));
+               $this->updateConfig('NonmemberMail',    postVar('NonmemberMail'));
+               $this->updateConfig('ProtectMemNames',  postVar('ProtectMemNames'));
+               $this->updateConfig('SiteName',                 postVar('SiteName'));
+               $this->updateConfig('NewMemberCanLogon',postVar('NewMemberCanLogon'));
+               $this->updateConfig('DisableSite',              postVar('DisableSite'));
+               $this->updateConfig('DisableSiteURL',   postVar('DisableSiteURL'));
+               $this->updateConfig('LastVisit',                postVar('LastVisit'));
+               $this->updateConfig('MediaURL',                 postVar('MediaURL'));
+               $this->updateConfig('AllowedTypes',             postVar('AllowedTypes'));
+               $this->updateConfig('AllowUpload',              postVar('AllowUpload'));
+               $this->updateConfig('MaxUploadSize',    postVar('MaxUploadSize'));
+               $this->updateConfig('MediaPrefix',              postVar('MediaPrefix'));
+               $this->updateConfig('AllowLoginEdit',   postVar('AllowLoginEdit'));
+               $this->updateConfig('DisableJsTools',   postVar('DisableJsTools'));
+               $this->updateConfig('CookieDomain',             postVar('CookieDomain'));
+               $this->updateConfig('CookiePath',               postVar('CookiePath'));
+               $this->updateConfig('CookieSecure',             postVar('CookieSecure'));
+               $this->updateConfig('URLMode',                  postVar('URLMode'));
+               $this->updateConfig('CookiePrefix',             postVar('CookiePrefix'));
+
+               // load new config and redirect (this way, the new language will be used is necessary)
+               // note that when changing cookie settings, this redirect might cause the user
+               // to have to log in again.
+               getConfig();
+               redirect($CONF['AdminURL'] . '?action=manage');
+               exit;
+
+       }
+
+
+       function updateConfig($name, $val) {
+               $name = addslashes($name);
+               $val = trim(addslashes($val));
+
+               $query = 'UPDATE '.sql_table('config')
+                          . " SET value='$val'"
+                          . " WHERE name='$name'";
+
+               mysql_query($query) or die("Query error: " . mysql_error());
+               return mysql_insert_id();
+       }
+
+       /**
+         * Error message
+         */
+       function error($msg) {
+               $this->pagehead();
+               ?>
+               <h2>Error!</h2>
+               <?php           echo $msg;
+               echo "<br />";
+               echo "<a href='index.php' onclick='history.back()'>"._BACK."</a>";
+               $this->pagefoot();
+               exit;
+       }
+
+       function disallow() {
+               ACTIONLOG::add(WARNING, _ACTIONLOG_DISALLOWED . serverVar('REQUEST_URI'));
+
+               $this->error(_ERROR_DISALLOWED);
+       }
+
+
+       function pagehead($extrahead = '') {
+               global $member, $nucleus, $CONF, $manager;
+
+               $manager->notify(
+                       'AdminPrePageHead',
+                       array(
+                               'extrahead' => &$extrahead,
+                               'action' => $this->action
+                       )
+               );
+
+               $baseUrl = htmlspecialchars($CONF['AdminURL']);
+
+               ?>
+               <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+               <html xmlns="http://www.w3.org/1999/xhtml">
+               <head>
+                       <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
+                       <title><?php echo htmlspecialchars($CONF['SiteName'])?> - Admin</title>
+                       <link rel="stylesheet" title="Nucleus Admin Default" type="text/css" href="<?php echo $baseUrl?>styles/admin.css" />
+                       <link rel="stylesheet" title="Nucleus Admin Default" type="text/css"
+                       href="<?php echo $baseUrl?>styles/addedit.css" />
+
+                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/edit.js"></script>
+                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/admin.js"></script>
+                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/compatibility.js"></script>
+
+         <meta http-equiv='Pragma' content='no-cache' />
+         <meta http-equiv='Cache-Control' content='no-cache, must-revalidate' />
+         <meta http-equiv='Expires' content='-1' />
+
+                       <?php echo $extrahead?>
+               </head>
+               <body>
+               <div class="header">
+               <h1><?php echo htmlspecialchars($CONF['SiteName'])?></h1>
+               </div>
+               <div id="container">
+               <div id="content">
+               <div class="loginname">
+               <?php                   if ($member->isLoggedIn())
+                               echo _LOGGEDINAS . ' ' . $member->getDisplayName()
+                                       ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a>"
+                                       . "<br /><a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";
+                       else
+                               echo '<a href="index.php?action=showlogin" title="Log in">' , _NOTLOGGEDIN , '</a> <br />';
+
+                       echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a>";
+
+                       echo '<br />(';
+
+                       if ($member->isLoggedIn() && $member->isAdmin())
+                               echo '<a href="http://nucleuscms.org/version.php?v=',getNucleusVersion(),'&amp;pl=',getNucleusPatchLevel(),'" title="Check for upgrade">Nucleus CMS ', $nucleus['version'], '</a>';
+                       else
+                               echo 'Nucleus CMS ' , $nucleus['version'];
+                       echo ')';
+               echo '</div>';
+       }
+
+       function pagefoot() {
+               global $action, $member, $manager;
+
+               $manager->notify(
+                       'AdminPrePageFoot',
+                       array(
+                               'action' => $this->action
+                       )
+               );
+
+               if ($member->isLoggedIn() && ($action != 'showlogin')) {
+                       ?>
+                       <h2><?php echo  _LOGOUT ?></h2>
+                       <ul>
+                               <li><a href="index.php?action=overview"><?php echo  _BACKHOME?></a></li>
+                               <li><a href='index.php?action=logout'><?php echo  _LOGOUT?></a></li>
+                       </ul>
+                       <?php           }
+               ?>
+                       <div class="foot">
+                               <a href="http://nucleuscms.org/">Nucleus CMS</a> &copy; 2002-2005 The Nucleus Group
+                               -
+                               <a href="http://nucleuscms.org/donate.php">Donate!</a>
+                       </div>
+
+                       </div><!-- content -->
+
+                       <div id="quickmenu">
+
+                               <?php                           // ---- user settings ----
+                               if (($action != 'showlogin') && ($member->isLoggedIn())) {
+                                       echo '<ul>';
+                                       echo '<li><a href="index.php?action=overview">',_QMENU_HOME,'</a></li>';
+                                       echo '</ul>';
+
+                                       echo '<h2>',_QMENU_ADD,'</h2>';
+                                       echo '<form method="get" action="index.php"><div>';
+                                       echo '<input type="hidden" name="action" value="createitem" />';
+
+                                               $showAll = requestVar('showall');
+                                               if (($member->isAdmin()) && ($showAll == 'yes')) {
+                                                       // Super-Admins have access to all blogs! (no add item support though)
+                                                       $query =  'SELECT bnumber as value, bname as text'
+                                                                  . ' FROM ' . sql_table('blog')
+                                                                  . ' ORDER BY bname';
+                                               } else {
+                                                       $query =  'SELECT bnumber as value, bname as text'
+                                                                  . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')
+                                                                  . ' WHERE tblog=bnumber and tmember=' . $member->getID()
+                                                                  . ' ORDER BY bname';
+                                               }
+                                               $template['name'] = 'blogid';
+                                               $template['tabindex'] = 15000;
+                                               $template['extra'] = _QMENU_ADD_SELECT;
+                                               $template['selected'] = -1;
+                                               $template['shorten'] = 10;
+                                               $template['shortenel'] = '';
+                                               $template['javascript'] = 'onchange="return form.submit()"';
+                                               showlist($query,'select',$template);
+
+                                       echo '</div></form>';
+
+                                       echo '<h2>' . $member->getDisplayName(). '</h2>';
+                                       echo '<ul>';
+                                       echo '<li><a href="index.php?action=editmembersettings">',_QMENU_USER_SETTINGS,'</a></li>';
+                                       echo '<li><a href="index.php?action=browseownitems">',_QMENU_USER_ITEMS,'</a></li>';
+                                       echo '<li><a href="index.php?action=browseowncomments">',_QMENU_USER_COMMENTS,'</a></li>';
+                                       echo '</ul>';
+
+
+
+
+                                       // ---- general settings ----
+                                       if ($member->isAdmin()) {
+
+                                               echo '<h2>',_QMENU_MANAGE,'</h2>';
+
+                                               echo '<ul>';
+                                               echo '<li><a href="index.php?action=actionlog">',_QMENU_MANAGE_LOG,'</a></li>';
+                                               echo '<li><a href="index.php?action=settingsedit">',_QMENU_MANAGE_SETTINGS,'</a></li>';
+                                               echo '<li><a href="index.php?action=usermanagement">',_QMENU_MANAGE_MEMBERS,'</a></li>';
+                                               echo '<li><a href="index.php?action=createnewlog">',_QMENU_MANAGE_NEWBLOG,'</a></li>';
+                                               echo '<li><a href="index.php?action=backupoverview">',_QMENU_MANAGE_BACKUPS,'</a></li>';
+                                               echo '<li><a href="index.php?action=pluginlist">',_QMENU_MANAGE_PLUGINS,'</a></li>';
+                                               echo '</ul>';
+
+                                               echo '<h2>',_QMENU_LAYOUT,'</h2>';
+                                               echo '<ul>';
+                                               echo '<li><a href="index.php?action=skinoverview">',_QMENU_LAYOUT_SKINS,'</a></li>';
+                                               echo '<li><a href="index.php?action=templateoverview">',_QMENU_LAYOUT_TEMPL,'</a></li>';
+                                               echo '<li><a href="index.php?action=skinieoverview">',_QMENU_LAYOUT_IEXPORT,'</a></li>';
+                                               echo '</ul>';
+
+                                       }
+
+                                       $aPluginExtras = array();
+                                       $manager->notify(
+                                               'QuickMenu',
+                                               array(
+                                                       'options' => &$aPluginExtras
+                                               )
+                                       );
+                                       if (count($aPluginExtras) > 0)
+                                       {
+                                               echo '<h2>', _QMENU_PLUGINS, '</h2>';
+                                               echo '<ul>';
+                                               foreach ($aPluginExtras as $aInfo)
+                                               {
+                                                       echo '<li><a href="'.htmlspecialchars($aInfo['url']).'" title="'.htmlspecialchars($aInfo['tooltip']).'">'.htmlspecialchars($aInfo['title']).'</a></li>';
+                                               }
+                                               echo '</ul>';
+                                       }
+
+                               } else if (($action == 'activate') || ($action == 'activatesetpwd')) {
+
+                                       echo '<h2>', _QMENU_ACTIVATE, '</h2>', _QMENU_ACTIVATE_TEXT;
+                               } else {
+                                       // introduction text on login screen
+                                       echo '<h2>', _QMENU_INTRO, '</h2>', _QMENU_INTRO_TEXT;
+                               }
+                               ?>
+                       </div>
+
+                       <!-- content / quickmenu container -->
+                       </div>
+
+
+                       </body>
+                       </html>
+               <?php   }
+
+
+       function action_regfile() {
+               global $member, $CONF;
+
+               $blogid = intRequestVar('blogid');
+
+               $member->teamRights($blogid) or $this->disallow();
+
+               // header-code stolen from phpMyAdmin
+               // REGEDIT and bookmarklet code stolen from GreyMatter
+
+               $sjisBlogName = getBlogNameFromID($blogid);
+               $sjisBlogName = mb_convert_encoding($sjisBlogName, "SJIS", "auto");
+
+               header('Content-Type: application/octetstream');
+               header('Content-Disposition: filename="nucleus.reg"');
+               header('Pragma: no-cache');
+               header('Expires: 0');
+
+               echo "REGEDIT4\n";
+               echo "[HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\MenuExt\\Post To &Nucleus (".$sjisBlogName.")]\n";
+               echo '@="' . $CONF['AdminURL'] . "bookmarklet.php?action=contextmenucode&blogid=".intval($blogid)."\"\n";
+               echo '"contexts"=hex:31';
+       }
+
+       function action_bookmarklet() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               $member->teamRights($blogid) or $this->disallow();
+
+               $blog =& $manager->getBlog($blogid);
+               $bm = getBookmarklet($blogid);
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';
+
+               ?>
+
+               <h2>Bookmarklet<!-- and Right Click Menu --></h2>
+
+               <p>
+               Bookmarklet ã\81¨ã\81¯ã\80\81ã\82¯ã\83ªã\83\81E\82¯1å\9b\9eã\81§è¨\98äº\8bã\81\8a\95稿ã\81\8cã\81§ã\81\8dã\82\8bã\82·ã\82¹ã\83\81E\83 ã\81§ã\81\99ã\80\81\81\93ã\81E Bookmarklet ã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\81\83«ã\81\99ã\82\8bã\81¨ã\80\81ã\83\96ã\83©ã\82¦ã\82¶ã\81®ã\83\81E\81\83«ã\83\90ã\81\81®'add to weblog'ã\83\9cã\82¿ã\83³ã\81\8cå\88©ç\94¨å\8f¯è\83½ã\81¨ã\81ªã\82\8aã\80\81Nucleusã\81®æ\96°è¦\8fã\82¢ã\82¤ã\83\81E\83 ã\81®è¿½å\8a ã\82¦ã\82£ã\83³ã\83\89ã\82¦ã\81\8cã\81\83\81E\81\82¢ã\83\81E\81\81\97ã\81¾ã\81\99ã\80\82ä»»æ\84\8fã\81EWebã\83\9aã\81\82¸ã\82\92é\96\8bã\81\81E\81\9fç\8a¶æ\85\8bã\81§ã\81\93ã\81\83\9cã\82¿ã\83³ã\82\92æ\8a¼ã\81\9bã\81\80\81ã\81\9dã\81®Webã\83\9aã\81\82¸ã\81®ã\82¿ã\82¤ã\83\88ã\83«ã\81¨ã\80\81ã\81\9dã\81®ã\83\9aã\81\82¸ã\81¸ã\81®ã\83ªã\83³ã\82¯ã\82¿ã\82°ã\81\8cã\81\99ã\81§ã\81«å\9f\8bã\82\81è¾¼ã\81¾ã\82\8cã\81\9fç\8a¶æ\85\8bã\81§ã\82¢ã\82¤ã\83\81E\83 è¿½å\8a ã\82¦ã\82£ã\83³ã\83\89ã\82¦ã\81\8cé\96\8bã\81\8dã\80\81ã\81\95ã\82\89ã\81«ã\80\81ã\81\9dã\81®ã\83\9aã\81\82¸å\86\81E\81«å¼\95ç\94¨ã\81\97ã\81\9fã\81\81E\96\87ã\82\92é\81¸æ\8a\9eã\81\97ã\81\9fç\8a¶æ\85\8bã\81§ã\81\82ã\82\8cã\81°ã\81\9dã\81Eå¼\95ç\94¨æ\96\81E\82\82è\87ªå\8b\95ç\9a\84ã\81«å¼\95ç\94¨ã\81\97ã\81¾ã\81\99ã\80
+               </p>
+
+               <h3>Bookmarklet</h3>
+               <p>
+                       ä¸\8bã\81\83ªã\83³ã\82¯é\83¨å\88\81E\82\92ã\80\8cã\81\8aæ°\97ã\81«å\85¥ã\82\8aã\80\8dã\82\82ã\81\97ã\81\8fã\81¯ã\83\81E\81\83«ã\83\90ã\81\81«ã\83\89ã\83©ã\83\81E\82°ã\81§ã\81\8dã\81¾ã\81\99ã\80\81Esmall>(ã\81\9dã\81\89\8dã\81«ã\83\81E\82¹ã\83\88ã\81\97ã\81¦ã\81¿ã\81\9fã\81\84å ´å\90\88ã\81\8d\98ç´\94ã\81«ä¸\8bã\81\83ªã\83³ã\82¯ã\82\92ã\82¯ã\83ªã\83\81E\82¯ã\81\97ã\81¦ã\81¿ã\81¦ã\81\8fã\81 ã\81\95ã\81\84)</small>
+                       <br />
+                       <br />
+                       <a href="<?php echo htmlspecialchars($bm)?>">Add to <?php echo $blog->getShortName()?></a> (ほとんどのブラウザで動作しまぁE
+               </p>
+
+               <h3>å\8f³ã\82¯ã\83ªã\83\81E\82¯ã\83¡ã\83\8bã\83¥ã\83¼ã\81«ã\82¤ã\83³ã\82¹ã\83\88ã\81\83« (Windowsã\81§IE使ç\94¨æ\99\81E</h3>
+               <p>
+                       <?php
+                               $url = 'index.php?action=regfile&blogid=' . intval($blogid);
+                               $url = $manager->addTicketToUrl($url);
+                       ?>
+                       ã\81\82ã\82\8bã\81\81E\81E<a href="<?php echo htmlspecialchars($url) ?>">å\8f³ã\82¯ã\83ªã\83\81E\82¯ã\83¡ã\83\8bã\83¥ã\83¼</a>ã\81«ã\82¤ã\83³ã\82¹ã\83\88ã\81\83«ã\81\99ã\82\8bã\81\93ã\81¨ã\82\82ã\81§ã\81\8dã\81¾ã\81\81E(ã\80\8cé\96\8bã\81\8fã\80\8dã\82\92é\81¸æ\8a\9eã\81\99ã\82\8cã\81\9b´æ\8e¥ã\83¬ã\82¸ã\82¹ã\83\88ã\83ªã\81«ç\99»é\8c²ã\81\97ã\81¾ã\81\81E
+               </p>
+
+               <p>
+                       ã\81\93ã\81\82¤ã\83³ã\82¹ã\83\88ã\81\83«ã\81\97ã\81\9få\8f³ã\82¯ã\83ªã\83\81E\82¯ã\83¡ã\83\8bã\83¥ã\83¼ã\82\92表示ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯IEã\81®å\86\8dèµ·å\8b\95ã\81\8cå¿\81\81ã\81§ã\81\99ã\80
+               </p>
+
+               <h3>ã\82¢ã\83³ã\82¤ã\83³ã\82¹ã\83\88ã\81\83«</h3>
+               <p>
+                       ã\80\8cã\81\8aæ°\97ã\81«å\85¥ã\82\8aã\80\8dã\82\82ã\81\97ã\81\8fã\81¯ã\83\81E\81\83«ã\83\90ã\81\81\8bã\82\89æ¶\88ã\81\99ã\81«ã\81¯ã\80\81å\8d\98ã\81«å\89\8aé\99¤ã\81\99ã\82\8bã\81 ã\81\91ã\81§ã\81\99ã\80
+               </p>
+               
+               <p>
+                       å\8f³ã\82¯ã\83ªã\83\81E\82¯ã\83¡ã\83\8bã\83¥ã\83¼ã\81\8bã\82\89æ¶\88ã\81\97ã\81\9fã\81\84æ\99\82ã\81\80\81以ä¸\8bã\81\89\8bé \81E\82\92è¸\8fã\82\93ã\81§ã\81\8fã\81 ã\81\95ã\81\84:
+               </p>
+
+               <ol>
+                       <li>スタートメニューから「ファイルを指定して実衁E..」を選抁E/li>
+                       <li>"regedit" と入劁E/li>
+                       <li>"OK" ボタンを押ぁE/li>
+                       <li>"\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt" をツリーの中から検索</li>
+                       <li>"add to weblog" エントリを削除</li>                          
+               </ol>
+
+               <?php
+               $this->pagefoot();
+
+       }
+
+
+       function action_actionlog() {
+               global $member, $manager;
+
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+
+               $url = $manager->addTicketToUrl('index.php?action=clearactionlog');
+
+               ?>
+                       <h2><?php echo _ACTIONLOG_CLEAR_TITLE?></h2>
+                       <p><a href="<?php echo htmlspecialchars($url)?>"><?php echo _ACTIONLOG_CLEAR_TEXT?></a></p>
+               <?php
+               echo '<h2>' . _ACTIONLOG_TITLE . '</h2>';
+
+               $query =  'SELECT * FROM '.sql_table('actionlog').' ORDER BY timestamp DESC';
+               $template['content'] = 'actionlist';
+               $amount = showlist($query,'table',$template);
+
+               $this->pagefoot();
+
+       }
+
+
+       function action_banlist() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $blog =& $manager->getBlog($blogid);
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';
+
+               echo '<h2>' . _BAN_TITLE . " '". $this->bloglink($blog) ."'</h2>";
+
+               $query =  'SELECT * FROM '.sql_table('ban').' WHERE blogid='.$blogid.' ORDER BY iprange';
+               $template['content'] = 'banlist';
+               $amount = showlist($query,'table',$template);
+
+               if ($amount == 0)
+                       echo _BAN_NONE;
+
+               echo '<h2>'._BAN_NEW_TITLE.'</h2>';
+               echo "<p><a href='index.php?action=banlistnew&amp;blogid=$blogid'>"._BAN_NEW_TEXT."</a></p>";
+
+
+               $this->pagefoot();
+
+       }
+
+
+       function action_banlistdelete() {
+               global $member, $manager;
+
+               $blogid = intRequestVar('blogid');
+               $iprange = requestVar('iprange');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $blog =& $manager->getBlog($blogid);
+
+               $this->pagehead();
+               ?>
+                       <h2><?php echo _BAN_REMOVE_TITLE?></h2>
+
+                       <form method="post" action="index.php">
+
+                       <h3><?php echo _BAN_IPRANGE?></h3>
+
+                       <p>
+                               <?php echo _CONFIRMTXT_BAN?> <?php echo htmlspecialchars($iprange) ?>
+                               <input name="iprange" type="hidden" value="<?php echo htmlspecialchars($iprange)?>" />
+                       </p>
+
+                       <h3><?php echo _BAN_BLOGS?></h3>
+
+                       <div>
+                               <input type="hidden" name="blogid" value="<?php echo $blogid?>" />
+                               <input name="allblogs" type="radio" value="0" id="allblogs_one" /><label for="allblogs_one">Only blog '<?php echo htmlspecialchars($blog->getName())?>'</label>
+                               <br />
+                               <input name="allblogs" type="radio" value="1" checked="checked" id="allblogs_all" /><label for="allblogs_all"><?php echo _BAN_ALLBLOGS?></label>
+                       </div>
+
+                       <h3><?php echo _BAN_DELETE_TITLE?></h3>
+
+                       <div>
+                               <?php $manager->addTicketHidden() ?>
+                               <input type="hidden" name="action" value="banlistdeleteconfirm" />
+                               <input type="submit" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div>
+
+                       </form>
+               <?php
+               $this->pagefoot();
+       }
+
+       function action_banlistdeleteconfirm() {
+               global $member, $manager;
+
+               $blogid = intPostVar('blogid');
+               $allblogs = postVar('allblogs');
+               $iprange = postVar('iprange');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $deleted = array();
+
+               if (!$allblogs) {
+                       if (BAN::removeBan($blogid, $iprange))
+                               array_push($deleted, $blogid);
+               } else {
+                       // get blogs fot which member has admin rights
+                       $adminblogs = $member->getAdminBlogs();
+                       foreach ($adminblogs as $blogje) {
+                               if (BAN::removeBan($blogje, $iprange))
+                                       array_push($deleted, $blogje);
+                       }
+               }
+
+               if (sizeof($deleted) == 0)
+                       $this->error(_ERROR_DELETEBAN);
+
+               $this->pagehead();
+
+               echo '<a href="index.php?action=banlist&amp;blogid=',$blogid,'">(',_BACK,')</a>';
+               echo '<h2>'._BAN_REMOVED_TITLE.'</h2>';
+               echo "<p>"._BAN_REMOVED_TEXT."</p>";
+
+               echo "<ul>";
+               foreach ($deleted as $delblog) {
+                       $b =& $manager->getBlog($delblog);
+                       echo "<li>" . htmlspecialchars($b->getName()). "</li>";
+               }
+               echo "</ul>";
+
+               $this->pagefoot();
+
+       }
+
+       function action_banlistnewfromitem() {
+               $this->action_banlistnew(getBlogIDFromItemID(intRequestVar('itemid')));
+       }
+
+       function action_banlistnew($blogid = '') {
+               global $member, $manager;
+
+               if ($blogid == '')
+                       $blogid = intRequestVar('blogid');
+
+               $ip = requestVar('ip');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               $blog =& $manager->getBlog($blogid);
+
+               $this->pagehead();
+               ?>
+               <h2><?php echo _BAN_ADD_TITLE?></h2>
+
+
+               <form method="post" action="index.php">
+
+               <h3><?php echo _BAN_IPRANGE?></h3>
+
+               <p><?php echo _BAN_IPRANGE_TEXT?></p>
+
+               <div class="note">
+               <b>An example</b>: "134.58.253.193" will only block one computer, while "134.58.253" will block 256 IP addresses, including the one from the first example.
+               </div>
+
+               <div>
+               <?php                   if ($ip) {
+               ?>
+                       <input name="iprange" type="radio" value="<?php echo htmlspecialchars($ip)?>" checked="checked" id="ip_fixed" /><label for="ip_fixed"><?php echo htmlspecialchars($ip)?></label>
+                       <br />
+                       <input name="iprange" type="radio" value="custom" id="ip_custom" /><label for="ip_custom">Custom: </label><input name='customiprange' value='<?php echo htmlspecialchars($ip)?>' maxlength='15' size='15' />
+               <?php   } else {
+                               echo "<input name='iprange' value='custom' type='hidden' />";
+                               echo "<input name='customiprange' value='' maxlength='15' size='15' />";
+                       }
+               ?>
+               </div>
+
+               <h3><?php echo _BAN_BLOGS?></h3>
+
+               <p><?php echo _BAN_BLOGS_TEXT?></p>
+
+               <div>
+                       <input type="hidden" name="blogid" value="<?php echo $blogid?>" />
+                       <input name="allblogs" type="radio" value="0" id="allblogs_one" /><label for="allblogs_one">'<?php echo htmlspecialchars($blog->getName())?>'</label>
+                       <br />
+                       <input name="allblogs" type="radio" value="1" checked="checked" id="allblogs_all" /><label for="allblogs_all"><?php echo _BAN_ALLBLOGS?></label>
+               </div>
+
+               <h3><?php echo _BAN_REASON_TITLE?></h3>
+
+               <p><?php echo _BAN_REASON_TEXT?></p>
+
+               <div><textarea name="reason" cols="40" rows="5"></textarea></div>
+
+               <h3><?php echo _BAN_ADD_TITLE?></h3>
+
+               <div>
+                       <input name="action" type="hidden" value="banlistadd" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="submit" value="<?php echo _BAN_ADD_BTN?>" />
+               </div>
+
+               </form>
+
+               <?php           $this->pagefoot();
+       }
+
+       function action_banlistadd() {
+               global $member;
+
+               $blogid =               intPostVar('blogid');
+               $allblogs =     postVar('allblogs');
+               $iprange =              postVar('iprange');
+               if ($iprange == "custom")
+                       $iprange = postVar('customiprange');
+               $reason =               postVar('reason');
+
+               $member->blogAdminRights($blogid) or $this->disallow();
+
+               // TODO: check IP range validity
+
+               if (!$allblogs) {
+                       if (!BAN::addBan($blogid, $iprange, $reason))
+                               $this->error(_ERROR_ADDBAN);
+               } else {
+                       // get blogs fot which member has admin rights
+                       $adminblogs = $member->getAdminBlogs();
+                       $failed = 0;
+                       foreach ($adminblogs as $blogje) {
+                               if (!BAN::addBan($blogje, $iprange, $reason))
+                                       $failed = 1;
+                       }
+                       if ($failed)
+                               $this->error(_ERROR_ADDBAN);
+               }
+
+               $this->action_banlist();
+
+       }
+
+       function action_clearactionlog() {
+               global $member;
+
+               $member->isAdmin() or $this->disallow();
+
+               ACTIONLOG::clear();
+
+               $this->action_manage(_MSG_ACTIONLOGCLEARED);
+       }
+
+       function action_backupoverview() {
+               global $member, $manager;
+
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+               ?>
+               <h2><?php echo _BACKUPS_TITLE?></h2>
+
+               <h3><?php echo _BACKUP_TITLE?></h3>
+
+               <p><?php echo _BACKUP_INTRO?></p>
+
+               <form method="post" action="index.php"><p>
+               <input type="hidden" name="action" value="backupcreate" />
+               <?php $manager->addTicketHidden() ?>
+
+               <input type="radio" name="gzip" value="1" checked="checked" id="gzip_yes" tabindex="10" /><label for="gzip_yes"><?php echo _BACKUP_ZIP_YES?></label>
+               <br />
+               <input type="radio" name="gzip" value="0" id="gzip_no" tabindex="10" /><label for="gzip_no" ><?php echo _BACKUP_ZIP_NO?></label>
+               <br /><br />
+               <input type="submit" value="<?php echo _BACKUP_BTN?>" tabindex="20" />
+
+               </p></form>
+
+               <div class="note"><?php echo _BACKUP_NOTE?></div>
+
+
+               <h3><?php echo _RESTORE_TITLE?></h3>
+
+               <div class="note"><?php echo _RESTORE_NOTE?></div>
+
+               <p><?php echo _RESTORE_INTRO?></p>
+
+               <form method="post" action="index.php" enctype="multipart/form-data"><p>
+                       <input type="hidden" name="action" value="backuprestore" />
+                       <?php $manager->addTicketHidden() ?>
+                       <input name="backup_file" type="file" tabindex="30" />
+                       <br /><br />
+                       <input type="submit" value="<?php echo _RESTORE_BTN?>" tabindex="40" />
+                       <br /><input type="checkbox" name="letsgo" value="1" id="letsgo" tabindex="50" /><label for="letsgo"><?php echo _RESTORE_IMSURE?></label>
+                       <br /><?php echo _RESTORE_WARNING?>
+               </p></form>
+
+               <?php           $this->pagefoot();
+       }
+
+       function action_backupcreate() {
+               global $member, $DIR_LIBS;
+
+               $member->isAdmin() or $this->disallow();
+
+               // use compression ?
+               $useGzip = intval(postVar('gzip'));
+
+               include($DIR_LIBS . 'backup.php');
+
+               // try to extend time limit
+               // (creating/restoring dumps might take a while)
+               @set_time_limit(1200);
+
+               do_backup($useGzip);
+               exit;
+       }
+
+
+       function action_backuprestore() {
+               global $member, $DIR_LIBS;
+
+               $member->isAdmin() or $this->disallow();
+
+               if (intPostVar('letsgo') != 1)
+                       $this->error(_ERROR_BACKUP_NOTSURE);
+
+               include($DIR_LIBS . 'backup.php');
+
+               // try to extend time limit
+               // (creating/restoring dumps might take a while)
+               @set_time_limit(1200);
+
+               $message = do_restore();
+               if ($message != '')
+                       $this->error($message);
+
+               $this->pagehead();
+               ?>
+               <h2><?php echo _RESTORE_COMPLETE?></h2>
+               <?php           $this->pagefoot();
+
+       }
+
+
+       function action_pluginlist() {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';
+
+               echo '<h2>' , _PLUGS_TITLE_MANAGE , ' ', help('plugins'), '</h2>';
+
+               echo '<h3>' , _PLUGS_TITLE_INSTALLED , '</h3>';
+
+
+               $query =  'SELECT * FROM '.sql_table('plugin').' ORDER BY porder ASC';
+
+               $template['content'] = 'pluginlist';
+               $template['tabindex'] = 10;
+               showlist($query, 'table', $template);
+
+               ?>
+                       <h3><?php echo _PLUGS_TITLE_UPDATE?></h3>
+
+                       <p><?php echo _PLUGS_TEXT_UPDATE?></p>
+
+                       <form method="post" action="index.php"><div>
+                               <input type="hidden" name="action" value="pluginupdate" />
+                               <?php $manager->addTicketHidden() ?>
+                               <input type="submit" value="<?php echo _PLUGS_BTN_UPDATE ?>" tabindex="20" />
+                       </div></form>
+
+                       <h3><?php echo _PLUGS_TITLE_NEW?></h3>
+
+                       <?php                           // find a list of possibly non-installed plugins
+                               $candidates = array();
+                               global $DIR_PLUGINS;
+                               $dirhandle = opendir($DIR_PLUGINS);
+                               while ($filename = readdir($dirhandle)) {
+                                       if (ereg('^NP_(.*)\.php$',$filename,$matches)) {
+                                               $name = $matches[1];
+                                               // only show in list when not yet installed
+                                               if (mysql_num_rows(sql_query('SELECT * FROM '.sql_table('plugin').' WHERE pfile="NP_'.addslashes($name).'"')) == 0)
+                                                       array_push($candidates,$name);
+                                       }
+                               }
+                               closedir($dirhandle);
+
+                               if (sizeof($candidates) > 0) {
+                       ?>
+
+                       <p><?php echo _PLUGS_ADD_TEXT?></p>
+
+
+                       <form method='post' action='index.php'><div>
+                               <input type='hidden' name='action' value='pluginadd' />
+                               <?php $manager->addTicketHidden() ?>
+                               <select name="filename" tabindex="30">
+                               <?php                                   foreach($candidates as $name)
+                                               echo '<option value="NP_',$name,'">',htmlspecialchars($name),'</option>';
+                               ?>
+                               </select>
+                               <input type='submit' tabindex="40" value='<?php echo _PLUGS_BTN_INSTALL?>' />
+                       </div></form>
+
+               <?php                   } else {        // sizeof(candidates) == 0
+                               echo '<p>',_PLUGS_NOCANDIDATES,'</p>';
+                       }
+
+               $this->pagefoot();
+       }
+
+       function action_pluginhelp() {
+               global $member, $manager, $DIR_PLUGINS, $CONF;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $plugid = intGetVar('plugid');
+
+               if (!$manager->pidInstalled($plugid))
+                       $this->error(_ERROR_NOSUCHPLUGIN);
+
+               $plugName = getPluginNameFromPid($plugid);
+
+               $this->pagehead();
+
+               echo '<p><a href="index.php?action=pluginlist">(',_PLUGS_BACK,')</a></p>';
+
+               echo '<h2>',_PLUGS_HELP_TITLE,': ',htmlspecialchars($plugName),'</h2>';
+
+               $plug =& $manager->getPlugin($plugName);
+               $helpFile = $DIR_PLUGINS.$plug->getShortName().'/help.html';
+
+               if (($plug->supportsFeature('HelpPage') > 0) && (@file_exists($helpFile))) {
+                       @readfile($helpFile);
+               } else {
+                       echo '<p>Error: ', _ERROR_PLUGNOHELPFILE,'</p>';
+                       echo '<p><a href="index.php?action=pluginlist">(',_BACK,')</a></p>';
+               }
+
+
+               $this->pagefoot();
+       }
+
+
+       function action_pluginadd() {
+               global $member, $manager, $DIR_PLUGINS;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $name = postVar('filename');
+
+               if ($manager->pluginInstalled($name))
+                       $this->error(_ERROR_DUPPLUGIN);
+               if (!checkPlugin($name))
+                       $this->error(_ERROR_PLUGFILEERROR . ' (' . $name . ')');
+
+               // check if the plugin dependency is met
+               $plugin =& $manager->getPlugin($name);
+               $pluginList = $plugin->getPluginDep();
+               foreach ($pluginList as $pluginName)
+               {
+
+                       $res = sql_query('SELECT * FROM '.sql_table('plugin') . ' WHERE pfile="' . $pluginName . '"');
+                       if (mysql_num_rows($res) == 0)
+                       {
+                               // uninstall plugin again...
+                               $this->deleteOnePlugin($plugin->getID());
+
+                               $this->error(_ERROR_INSREQPLUGIN . $pluginName);
+                       }
+               }
+
+               // get number of currently installed plugins
+               $numCurrent = mysql_num_rows(sql_query('SELECT * FROM '.sql_table('plugin')));
+
+               // plugin will be added as last one in the list
+               $newOrder = $numCurrent + 1;
+
+               $manager->notify(
+                       'PreAddPlugin',
+                       array(
+                               'file' => &$name
+                       )
+               );
+
+               // do this before calling getPlugin (in case the plugin id is used there)
+               $query = 'INSERT INTO '.sql_table('plugin').' (porder, pfile) VALUES ('.$newOrder.',"'.addslashes($name).'")';
+               sql_query($query);
+               $iPid = mysql_insert_id();
+
+               // need to update the plugin object's pid since we didn't have it above when it's first create....
+               $plugin->plugid = $iPid;
+
+               $manager->clearCachedInfo('installedPlugins');
+
+               // call the install method of the plugin
+               if (!$plugin)
+               {
+                       sql_query('DELETE FROM ' . sql_table('plugin') . ' WHERE pid='. intval($iPid));
+                       $manager->clearCachedInfo('installedPlugins');
+                       $this->error('Plugin could not be loaded, or does not support certain features that are required for it to run on your Nucleus installation (you might want to check the <a href="?action=actionlog">actionlog</a> for more info)');
+               }
+
+               // check if plugin needs a newer Nucleus version
+               if (getNucleusVersion() < $plugin->getMinNucleusVersion())
+               {
+                       // uninstall plugin again...
+                       $this->deleteOnePlugin($plugin->getID());
+
+                       // ...and show error
+                       $this->error(_ERROR_NUCLEUSVERSIONREQ . $plugin->getMinNucleusVersion());
+               }
+
+               // check if plugin needs a newer Nucleus version
+               if ((getNucleusVersion() == $plugin->getMinNucleusVersion()) && (getNucleusPatchLevel() < $plugin->getMinNucleusPatchLevel()))
+               {
+                       // uninstall plugin again...
+                       $this->deleteOnePlugin($plugin->getID());
+
+                       // ...and show error
+                       $this->error(_ERROR_NUCLEUSVERSIONREQ . $plugin->getMinNucleusVersion() . ' patch ' . $plugin->getMinNucleusPatchLevel());
+               }
+
+               $plugin->install();
+
+               $manager->notify(
+                       'PostAddPlugin',
+                       array(
+                               'plugin' => &$plugin
+                       )
+               );
+
+               // update all events
+               $this->action_pluginupdate();
+       }
+
+       function action_pluginupdate() {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               // delete everything from plugin_events
+               sql_query('DELETE FROM '.sql_table('plugin_event'));
+
+               // loop over all installed plugins
+               $res = sql_query('SELECT pid, pfile FROM '.sql_table('plugin'));
+               while($o = mysql_fetch_object($res)) {
+                       $pid = $o->pid;
+                       $plug =& $manager->getPlugin($o->pfile);
+                       if ($plug)
+                       {
+                               $eventList = $plug->getEventList();
+                               foreach ($eventList as $eventName)
+                                       sql_query('INSERT INTO '.sql_table('plugin_event').' (pid, event) VALUES ('.$pid.', \''.addslashes($eventName).'\')');
+                       }
+               }
+
+               $this->action_pluginlist();
+       }
+
+       function action_plugindelete() {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $pid = intGetVar('plugid');
+
+               if (!$manager->pidInstalled($pid))
+                       $this->error(_ERROR_NOSUCHPLUGIN);
+
+               $this->pagehead();
+               ?>
+                       <h2><?php echo _DELETE_CONFIRM?></h2>
+
+                       <p><?php echo _CONFIRMTXT_PLUGIN?> <strong><?php echo getPluginNameFromPid($pid)?></strong>?</p>
+
+                       <form method="post" action="index.php"><div>
+                       <?php $manager->addTicketHidden() ?>
+                       <input type="hidden" name="action" value="plugindeleteconfirm" />
+                       <input type="hidden" name="plugid" value="<?php echo $pid; ?>" />
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />
+                       </div></form>
+               <?php           $this->pagefoot();
+       }
+
+       function action_plugindeleteconfirm() {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $pid = intPostVar('plugid');
+
+               $error = $this->deleteOnePlugin($pid, 1);
+               if ($error) {
+                       $this->error($error);
+               }
+
+               $this->action_pluginlist();
+       }
+
+       function deleteOnePlugin($pid, $callUninstall = 0) {
+               global $manager;
+
+               $pid = intval($pid);
+
+               if (!$manager->pidInstalled($pid))
+                       return _ERROR_NOSUCHPLUGIN;
+
+               $name = quickQuery('SELECT pfile as result FROM '.sql_table('plugin').' WHERE pid='.$pid);
+
+               // call the unInstall method of the plugin
+               if ($callUninstall) {
+                       $plugin =& $manager->getPlugin($name);
+                       if ($plugin) $plugin->unInstall();
+               }
+
+               // check dependency before delete
+               $res = sql_query('SELECT pfile FROM '.sql_table('plugin'));
+               while($o = mysql_fetch_object($res)) {
+                       $plug =& $manager->getPlugin($o->pfile);
+                       if ($plug)
+                       {
+                               $depList = $plug->getPluginDep();
+                               foreach ($depList as $depName)
+                               {
+                                       if ($name == $depName)
+                                       {
+                                               return _ERROR_DELREQPLUGIN . $o->pfile;
+                                       }
+                               }
+                       }
+               }
+
+               $manager->notify('PreDeletePlugin', array('plugid' => $pid));
+
+               // delete all subscriptions
+               sql_query('DELETE FROM '.sql_table('plugin_event').' WHERE pid=' . $pid);
+
+               // delete all options
+               // get OIDs from plugin_option_desc
+               $res = sql_query('SELECT oid FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . $pid);
+               $aOIDs = array();
+               while ($o = mysql_fetch_object($res)) {
+                       array_push($aOIDs, $o->oid);
+               }
+
+               // delete from plugin_option and plugin_option_desc
+               sql_query('DELETE FROM '.sql_table('plugin_option_desc').' WHERE opid=' . $pid);
+               if (count($aOIDs) > 0)
+                       sql_query('DELETE FROM '.sql_table('plugin_option').' WHERE oid in ('.implode(',',$aOIDs).')');
+
+               // update order numbers
+               $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid=' . $pid));
+               sql_query('UPDATE '.sql_table('plugin').' SET porder=(porder - 1) WHERE porder>'.$o->porder);
+
+               // delete row
+               sql_query('DELETE FROM '.sql_table('plugin').' WHERE pid='.$pid);
+
+               $manager->clearCachedInfo('installedPlugins');
+               $manager->notify('PostDeletePlugin', array('plugid' => $pid));
+
+               return '';
+       }
+
+       function action_pluginup() {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $plugid = intGetVar('plugid');
+
+               if (!$manager->pidInstalled($plugid))
+                       $this->error(_ERROR_NOSUCHPLUGIN);
+
+               // 1. get old order number
+               $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid='.$plugid));
+               $oldOrder = $o->porder;
+
+               // 2. calculate new order number
+               $newOrder = ($oldOrder > 1) ? ($oldOrder - 1) : 1;
+
+               // 3. update plug numbers
+               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$oldOrder.' WHERE porder='.$newOrder);
+               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$newOrder.' WHERE pid='.$plugid);
+
+               $this->action_pluginlist();
+       }
+
+       function action_plugindown() {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $plugid = intGetVar('plugid');
+               if (!$manager->pidInstalled($plugid))
+                       $this->error(_ERROR_NOSUCHPLUGIN);
+
+               // 1. get old order number
+               $o = mysql_fetch_object(sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid='.$plugid));
+               $oldOrder = $o->porder;
+
+               $maxOrder = mysql_num_rows(sql_query('SELECT * FROM '.sql_table('plugin')));
+
+               // 2. calculate new order number
+               $newOrder = ($oldOrder < $maxOrder) ? ($oldOrder + 1) : $maxOrder;
+
+               // 3. update plug numbers
+               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$oldOrder.' WHERE porder='.$newOrder);
+               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$newOrder.' WHERE pid='.$plugid);
+
+               $this->action_pluginlist();
+       }
+
+       function action_pluginoptions($message = '') {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $pid = intRequestVar('plugid');
+               if (!$manager->pidInstalled($pid))
+                       $this->error(_ERROR_NOSUCHPLUGIN);
+
+               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';
+               $this->pagehead($extrahead);
+
+               ?>
+                       <p><a href="index.php?action=pluginlist">(<?php echo _PLUGS_BACK?>)</a></p>
+
+                       <h2>Options for <?php echo htmlspecialchars(getPluginNameFromPid($pid))?></h2>
+
+                       <?php if  ($message) echo $message?>
+
+                       <form action="index.php" method="post">
+                       <div>
+                               <input type="hidden" name="action" value="pluginoptionsupdate" />
+                               <input type="hidden" name="plugid" value="<?php echo $pid?>" />
+
+               <?php
+
+               $manager->addTicketHidden();
+
+               $aOptions = array();
+               $aOIDs = array();
+               $query = 'SELECT * FROM ' . sql_table('plugin_option_desc') . ' WHERE ocontext=\'global\' and opid=' . $pid . ' ORDER BY oid ASC';
+               $r = sql_query($query);
+               while ($o = mysql_fetch_object($r)) {
+                       array_push($aOIDs, $o->oid);
+                       $aOptions[$o->oid] = array(
+                                               'oid' => $o->oid,
+                                               'value' => $o->odef,
+                                               'name' => $o->oname,
+                                               'description' => $o->odesc,
+                                               'type' => $o->otype,
+                                               'typeinfo' => $o->oextra,
+                                               'contextid' => 0
+                       );
+               }
+               // fill out actual values
+               if (count($aOIDs) > 0) {
+                       $r = sql_query('SELECT oid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid in ('.implode(',',$aOIDs).')');
+                       while ($o = mysql_fetch_object($r))
+                               $aOptions[$o->oid]['value'] = $o->ovalue;
+               }
+
+               // call plugins
+               $manager->notify('PrePluginOptionsEdit',array('context' => 'global', 'plugid' => $pid, 'options'=>&$aOptions));
+
+               $template['content'] = 'plugoptionlist';
+               $amount = showlist($aOptions,'table',$template);
+               if ($amount == 0)
+                       echo '<p>',_ERROR_NOPLUGOPTIONS,'</p>';
+
+               ?>
+                       </div>
+                       </form>
+               <?php           $this->pagefoot();
+
+
+
+       }
+
+       function action_pluginoptionsupdate() {
+               global $member, $manager;
+
+               // check if allowed
+               $member->isAdmin() or $this->disallow();
+
+               $pid = intRequestVar('plugid');
+               if (!$manager->pidInstalled($pid))
+                       $this->error(_ERROR_NOSUCHPLUGIN);
+
+               $aOptions = requestArray('plugoption');
+               NucleusPlugin::_applyPluginOptions($aOptions);
+
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'global', 'plugid' => $pid));
+
+               $this->action_pluginoptions(_PLUGS_OPTIONS_UPDATED);
+       }
+
+       /**
+         * @static
+         */
+       function _insertPluginOptions($context, $contextid = 0) {
+               // get all current values for this contextid
+               // (note: this might contain doubles for overlapping contextids)
+               $aIdToValue = array();
+               $res = sql_query('SELECT oid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE ocontextid=' . intval($contextid));
+               while ($o = mysql_fetch_object($res)) {
+                       $aIdToValue[$o->oid] = $o->ovalue;
+               }
+
+               // get list of oids per pid
+               $query = 'SELECT * FROM ' . sql_table('plugin_option_desc') . ',' . sql_table('plugin')
+                          . ' WHERE opid=pid and ocontext=\''.addslashes($context).'\' ORDER BY porder, oid ASC';
+               $res = sql_query($query);
+               $aOptions = array();
+               while ($o = mysql_fetch_object($res)) {
+                       if (in_array($o->oid, array_keys($aIdToValue)))
+                               $value = $aIdToValue[$o->oid];
+                       else
+                               $value = $o->odef;
+
+                       array_push($aOptions, array(
+                               'pid' => $o->pid,
+                               'pfile' => $o->pfile,
+                               'oid' => $o->oid,
+                               'value' => $value,
+                               'name' => $o->oname,
+                               'description' => $o->odesc,
+                               'type' => $o->otype,
+                               'typeinfo' => $o->oextra,
+                               'contextid' => $contextid,
+                               'extra' => ''
+                       ));
+               }
+
+               global $manager;
+               $manager->notify('PrePluginOptionsEdit',array('context' => $context, 'contextid' => $contextid, 'options'=>&$aOptions));
+
+
+               $iPrevPid = -1;
+               foreach ($aOptions as $aOption) {
+
+                       // new plugin?
+                       if ($iPrevPid != $aOption['pid']) {
+                               $iPrevPid = $aOption['pid'];
+
+                               echo '<tr><th colspan="2">Options for ', htmlspecialchars($aOption['pfile']),'</th></tr>';
+                       }
+
+                       echo '<tr>';
+                       listplug_plugOptionRow($aOption);
+                       echo '</tr>';
+
+               }
+
+
+       }
+
+       /* helper functions to create option forms etc. */
+       function input_yesno($name, $checkedval,$tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO) {
+               $id = htmlspecialchars($name);
+               $id = str_replace('[','-',$id);
+               $id = str_replace(']','-',$id);
+               $id1 = $id . htmlspecialchars($value1);
+               $id2 = $id . htmlspecialchars($value2);
+
+               echo '<input type="radio" name="', htmlspecialchars($name),'" value="', htmlspecialchars($value1),'" ';
+                       if ($checkedval == $value1)
+                               echo "tabindex='$tabindex' checked='checked'";
+                       echo ' id="'.$id1.'" /><label for="'.$id1.'">' . $yesval . '</label>';
+               echo ' ';
+               echo '<input type="radio" name="', htmlspecialchars($name),'" value="', htmlspecialchars($value2),'" ';
+                       if ($checkedval != $value1)
+                               echo "tabindex='$tabindex' checked='checked'";
+                       echo ' id="'.$id2.'" /><label for="'.$id2.'">' . $noval . '</label>';
+       }
+
+
+
+} // class ADMIN
+
+class ENCAPSULATE {
+       /**
+         * Uses $call to call a function using parameters $params
+         * This function should return the amount of entries shown.
+         * When entries are show, batch operation handlers are shown too.
+         * When no entries were shown, $errormsg is used to display an error
+         *
+         * Passes on the amount of results found (for further encapsulation)
+         */
+       function doEncapsulate($call, $params, $errorMessage = 'No entries') {
+               // start output buffering
+               ob_start();
+
+               $nbOfRows = call_user_func_array($call, $params);
+
+               // get list contents and stop buffering
+               $list = ob_get_contents();
+               ob_end_clean();
+
+               if ($nbOfRows > 0) {
+                       $this->showHead();
+                       echo $list;
+                       $this->showFoot();
+               } else {
+                       echo $errorMessage;
+               }
+
+               return $nbOfRows;
+       }
+}
+
+
+/**
+  * A class used to encapsulate a list of some sort inside next/prev buttons
+  */
+class NAVLIST extends ENCAPSULATE {
+
+       function NAVLIST($action, $start, $amount, $minamount, $maxamount, $blogid, $search, $itemid) {
+               $this->action = $action;
+               $this->start = $start;
+               $this->amount = $amount;
+               $this->minamount = $minamount;
+               $this->maxamount = $maxamount;
+               $this->blogid = $blogid;
+               $this->search = $search;
+               $this->itemid = $itemid;
+       }
+
+       function showBatchList($batchtype, $query, $type, $template, $errorMessage = _LISTS_NOMORE) {
+               $batch =& new BATCH($batchtype);
+
+               $this->doEncapsulate(
+                               array(&$batch, 'showlist'),
+                               array(&$query, $type, $template),
+                               $errorMessage
+               );
+
+       }
+
+
+       function showHead() {
+               $this->showNavigation();
+       }
+       function showFoot() {
+               $this->showNavigation();
+       }
+
+       /**
+         * Displays a next/prev bar for long tables
+         */
+       function showNavigation() {
+               $action = $this->action;
+               $start = $this->start;
+               $amount = $this->amount;
+               $minamount = $this->minamount;
+               $maxamount = $this->maxamount;
+               $blogid = $this->blogid;
+               $search = $this->search;
+               $itemid = $this->itemid;
+
+               $prev = $start - $amount;
+               if ($prev < $minamount) $prev=$minamount;
+
+               // maxamount not used yet
+       //      if ($start + $amount <= $maxamount)
+                       $next = $start + $amount;
+       //      else
+       //              $next = $start;
+
+       ?>
+       <table class="navigation">
+       <tr><td>
+               <form method="post" action="index.php"><div>
+               <input type="submit" value="&lt;&lt; <?php echo  _LISTS_PREV?>" />
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="hidden" name="start" value="<?php echo  $prev; ?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input name="amount" size="3" value="<?php echo  $amount; ?>" /> <?php echo _LISTS_PERPAGE?>
+               <input type="hidden" name="start" value="<?php echo  $start; ?>" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="submit" value="&gt; <?php echo _LISTS_CHANGE?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="start" value="0" />
+               <input type="text" name="search" value="<?php echo  $search; ?>" size="7" />
+               <input type="submit" value="&gt; <?php echo  _LISTS_SEARCH?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="submit" value="<?php echo _LISTS_NEXT?> &gt; &gt;" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="start" value="<?php echo  $next; ?>" />
+               </div></form>
+       </td></tr>
+       </table>
+       <?php   }
+
+
+}
+
+/**
+ * A class used to encapsulate a list of some sort in a batch selection
+ */
+class BATCH extends ENCAPSULATE {
+       function BATCH($type) {
+               $this->type = $type;
+       }
+
+       function showHead() {
+               ?>
+                       <form method="post" action="index.php">
+               <?php
+// TODO: get a list op operations above the list too
+// (be careful not to use the same names for the select...)
+//             $this->showOperationList();
+       }
+
+       function showFoot() {
+               $this->showOperationList();
+               ?>
+                       </form>
+               <?php   }
+
+       function showOperationList() {
+               global $manager;
+               ?>
+               <div class="batchoperations">
+                       <?php echo _BATCH_WITH_SEL ?>
+                       <select name="batchaction">
+                       <?php                           $options = array();
+                               switch($this->type) {
+                                       case 'item':
+                                               $options = array(
+                                                       'delete'        => _BATCH_ITEM_DELETE,
+                                                       'move'          => _BATCH_ITEM_MOVE
+                                               );
+                                               break;
+                                       case 'member':
+                                               $options = array(
+                                                       'delete'        => _BATCH_MEMBER_DELETE,
+                                                       'setadmin'      => _BATCH_MEMBER_SET_ADM,
+                                                       'unsetadmin' => _BATCH_MEMBER_UNSET_ADM
+                                               );
+                                               break;
+                                       case 'team':
+                                               $options = array(
+                                                       'delete'        => _BATCH_TEAM_DELETE,
+                                                       'setadmin'      => _BATCH_TEAM_SET_ADM,
+                                                       'unsetadmin' => _BATCH_TEAM_UNSET_ADM,
+                                               );
+                                               break;
+                                       case 'category':
+                                               $options = array(
+                                                       'delete'        => _BATCH_CAT_DELETE,
+                                                       'move'          => _BATCH_CAT_MOVE,
+                                               );
+                                               break;
+                                       case 'comment':
+                                               $options = array(
+                                                       'delete'        => _BATCH_COMMENT_DELETE,
+                                               );
+                                       break;
+                               }
+                               foreach ($options as $option => $label) {
+                                       echo '<option value="',$option,'">',$label,'</option>';
+                               }
+                       ?>
+                       </select>
+                       <input type="hidden" name="action" value="batch<?php echo $this->type?>" />
+                       <?php
+                               $manager->addTicketHidden();
+
+                               // add hidden fields for 'team' and 'comment' batchlists
+                               if ($this->type == 'team')
+                               {
+                                       echo '<input type="hidden" name="blogid" value="',intRequestVar('blogid'),'" />';
+                               }
+                               if ($this->type == 'comment')
+                               {
+                                       echo '<input type="hidden" name="itemid" value="',intRequestVar('itemid'),'" />';
+                               }
+
+                               echo '<input type="submit" value="',_BATCH_EXEC,'" />';
+                       ?>(
+                        <a href="" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return batchSelectAll(1); "><?php echo _BATCH_SELECTALL?></a> -
+                        <a href="" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return batchSelectAll(0); "><?php echo _BATCH_DESELECTALL?></a>
+                       )
+               </div>
+               <?php   }
+
+       // shortcut :)
+       function showList($query, $type, $template, $errorMessage = _LISTS_NOMORE) {
+               return $this->doEncapsulate(    'showlist',
+                                                                       array($query, $type, $template),
+                                                                       $errorMessage
+                                                               );
+       }
+
+}
+
+
+
+// can take either an array of objects, or an SQL query
+function showlist($query, $type, $template) {
+
+       if (is_array($query)) {
+               if (sizeof($query) == 0)
+                       return 0;
+
+               call_user_func('listplug_' . $type, $template, 'HEAD');
+
+               foreach ($query as $currentObj) {
+                       $template['current'] = $currentObj;
+                       call_user_func('listplug_' . $type, $template, 'BODY');
+               }
+
+               call_user_func('listplug_' . $type, $template, 'FOOT');
+
+               return sizeof($query);
+
+       } else {
+               $res = sql_query($query);
+
+               // don't do anything if there are no results
+               $numrows = mysql_num_rows($res);
+               if ($numrows == 0)
+                       return 0;
+
+               call_user_func('listplug_' . $type, $template, 'HEAD');
+
+               while($template['current'] = mysql_fetch_object($res))
+                       call_user_func('listplug_' . $type, $template, 'BODY');
+
+               call_user_func('listplug_' . $type, $template, 'FOOT');
+
+               mysql_free_result($res);
+
+               // return amount of results
+               return $numrows;
+       }
+}
+
+function listplug_select($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<select name="'.$template['name'].'" tabindex="'.$template['tabindex'].'" '.$template['javascript'].'>';
+
+                       // add extra row if needed
+                       if ($template['extra']) {
+                               echo '<option value="',$template['extraval'],'">',$template['extra'],'</option>';
+                       }
+
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<option value="' . htmlspecialchars($current->value) . '"';
+                       if ($template['selected'] == $current->value)
+                               echo ' selected="selected" ';
+                       if ($template['shorten'] > 0) {
+                               echo ' title="'. htmlspecialchars($current->text).'"';
+                               $current->text = shorten($current->text, $template['shorten'], $template['shortenel']);
+                       }
+                       echo '>' . htmlspecialchars($current->text) . '</option>';
+                       break;
+               case 'FOOT':
+                       echo '</select>';
+                       break;
+       }
+}
+
+function listplug_table($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<table>";
+                       echo "<thead><tr>";
+                       // print head
+                       call_user_func("listplug_table_" . $template['content'] , $template, 'HEAD');
+                       echo "</tr></thead><tbody>";
+                       break;
+               case 'BODY':
+                       // print tabletype specific thingies
+                       echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>";
+                       call_user_func("listplug_table_" . $template['content'] , $template,  'BODY');
+                       echo "</tr>";
+                       break;
+               case 'FOOT':
+                       call_user_func("listplug_table_" . $template['content'] , $template,  'FOOT');
+                       echo "</tbody></table>";
+                       break;
+       }
+}
+
+function listplug_table_memberlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>' . _LIST_MEMBER_NAME . '</th><th>' . _LIST_MEMBER_RNAME . '</th><th>' . _LIST_MEMBER_URL . '</th><th>' . _LIST_MEMBER_ADMIN;
+                       help('superadmin');
+                       echo "</th><th>" . _LIST_MEMBER_LOGIN;
+                       help('canlogin');
+                       echo "</th><th colspan='2'>" . _LISTS_ACTIONS. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->mnumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<a href='mailto:", htmlspecialchars($current->memail), "' tabindex='".$template['tabindex']."'>", htmlspecialchars($current->mname), "</a>";
+                       echo '</label>';
+                       echo '</td>';
+                       echo '<td>', htmlspecialchars($current->mrealname), '</td>';
+                       echo "<td><a href='$current->murl' tabindex='".$template['tabindex']."'>$current->murl</a></td>";
+                       echo '<td>', ($current->madmin ? _YES : _NO),'</td>';
+                       echo '<td>', ($current->mcanlogin ? _YES : _NO), '</td>';
+                       echo "<td><a href='index.php?action=memberedit&amp;memberid=$current->mnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=memberdelete&amp;memberid=$current->mnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+                       break;
+       }
+}
+
+function listplug_table_teamlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LIST_MEMBER_NAME."</th><th>"._LIST_MEMBER_RNAME."</th><th>"._LIST_TEAM_ADMIN;
+                       help('teamadmin');
+                       echo "</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->tmember,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<a href='mailto:", htmlspecialchars($current->memail), "' tabindex='".$template['tabindex']."'>", htmlspecialchars($current->mname), "</a>";
+                       echo '</label>';
+                       echo '</td>';
+                       echo '<td>', htmlspecialchars($current->mrealname), '</td>';
+                       echo '<td>', ($current->tadmin ? _YES : _NO) , '</td>';
+                       echo "<td><a href='index.php?action=teamdelete&amp;memberid=$current->tmember&amp;blogid=$current->tblog' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       $url = 'index.php?action=teamchangeadmin&memberid=' . intval($current->tmember) . '&blogid=' . intval($current->tblog);
+                       $url = $manager->addTicketToUrl($url);
+                       echo "<td><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LIST_TEAM_CHADMIN."</a></td>";
+                       break;
+       }
+}
+
+function encode_desc(&$data)
+    {   //_$to_entities = get_html_translation_table(HTML_ENTITIES);
+        $to_entities = get_html_translation_table(HTML_SPECIALCHARS);
+        $from_entities = array_flip($to_entities);
+        $data = str_replace('<br />','\n',$data); //hack
+        $data = strtr($data,$from_entities);
+        $data = strtr($data,$to_entities);
+        $data = str_replace('\n','<br />',$data); //hack
+        return $data;
+    }
+
+function listplug_table_pluginlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_INFO.'</th><th>'._LISTS_DESC.'</th>';
+                       echo '<th style="white-space:nowrap">'._LISTS_ACTIONS.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       $plug =& $manager->getPlugin($current->pfile);
+                       if ($plug) {
+                               echo '<td>';
+                                       echo '<strong>' , htmlspecialchars($plug->getName()) , '</strong><br />';
+                                       echo _LIST_PLUGS_AUTHOR, ' ' , htmlspecialchars($plug->getAuthor()) , '<br />';
+                                       echo _LIST_PLUGS_VER, ' ' , htmlspecialchars($plug->getVersion()) , '<br />';
+                                       if ($plug->getURL())
+                                       echo '<a href="',htmlspecialchars($plug->getURL()),'" tabindex="'.$template['tabindex'].'">',_LIST_PLUGS_SITE,'</a><br />';
+                               echo '</td>';
+                               echo '<td>';
+                                       echo _LIST_PLUGS_DESC .'<br/>'. encode_desc($plug->getDescription());
+                                       if (sizeof($plug->getEventList()) > 0) {
+                                               echo '<br /><br />',_LIST_PLUGS_SUBS,'<br />',htmlspecialchars(implode($plug->getEventList(),', '));
+                                               // check the database to see if it is up-to-date and notice the user if not
+                                       }
+                                       if (!$plug->subscribtionListIsUptodate()) {
+                                               echo '<br /><br /><strong>',_LIST_PLUG_SUBS_NEEDUPDATE,'</strong>';
+                                       }
+                                       if (sizeof($plug->getPluginDep()) > 0)
+                                               echo '<br /><br />',_LIST_PLUGS_DEP,'<br />',htmlspecialchars(implode($plug->getPluginDep(),', '));
+                               echo '</td>';
+                       } else {
+                               echo '<td colspan="2">Error: plugin file <b>',htmlspecialchars($current->pfile),'.php</b> could not be loaded, or it has been set inactive because it does not support some features (check the <a href="?action=actionlog">actionlog</a> for more info)</td>';
+                       }
+                       echo '<td>';
+
+                               $baseUrl = 'index.php?plugid=' . intval($current->pid) . '&action=';
+                               $url = $manager->addTicketToUrl($baseUrl . 'pluginup');
+                               echo "<a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_UP,"</a>";
+                               $url = $manager->addTicketToUrl($baseUrl . 'plugindown');
+                               echo "<br /><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_DOWN,"</a>";
+                               echo "<br /><a href='index.php?action=plugindelete&amp;plugid=$current->pid' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_UNINSTALL,"</a>";
+                               if ($plug && ($plug->hasAdminArea() > 0))
+                                       echo "<br /><a href='".htmlspecialchars($plug->getAdminURL())."'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_ADMIN,"</a>";
+                               if ($plug && ($plug->supportsFeature('HelpPage') > 0))
+                                       echo "<br /><a href='index.php?action=pluginhelp&amp;plugid=$current->pid'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_HELP,"</a>";
+                               if (quickQuery('SELECT COUNT(*) AS result FROM '.sql_table('plugin_option_desc').' WHERE ocontext=\'global\' and opid='.$current->pid) > 0)
+                                       echo "<br /><a href='index.php?action=pluginoptions&amp;plugid=$current->pid'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_OPTIONS,"</a>";
+                       echo '</td>';
+                       break;
+       }
+}
+
+function listplug_table_plugoptionlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_INFO.'</th><th>'._LISTS_VALUE.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       listplug_plugOptionRow($current);
+                       break;
+               case 'FOOT':
+                       ?>
+                       <tr>
+                               <th colspan="2"><?php echo _PLUGS_SAVE?></th>
+                       </tr><tr>
+                               <td><?php echo _PLUGS_SAVE?></td>
+                               <td><input type="submit" value="<?php echo _PLUGS_SAVE?>" /></td>
+                       </tr>
+                       <?php                   break;
+       }
+}
+
+function listplug_plugOptionRow($current) {
+       $varname = 'plugoption['.$current['oid'].']['.$current['contextid'].']';
+       // retreive the optionmeta
+       $meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+
+       // only if it is not a hidden option write the controls to the page
+       if ($meta['access'] != 'hidden') {
+               echo '<td>',htmlspecialchars($current['description']?$current['description']:$current['name']),'</td>';
+               echo '<td>';
+               switch($current['type']) {
+                       case 'yesno':
+                               ADMIN::input_yesno($varname, $current['value'], 0, 'yes', 'no');
+                               break;
+                       case 'password':
+                               echo '<input type="password" size="40" maxlength="128" name="',htmlspecialchars($varname),'" value="',htmlspecialchars($current['value']),'" />';
+                               break;
+                       case 'select':
+                               echo '<select name="'.htmlspecialchars($varname).'">';
+                               $aOptions = NucleusPlugin::getOptionSelectValues($current['typeinfo']);
+                               $aOptions = explode('|', $aOptions);
+                               for ($i=0; $i<(count($aOptions)-1); $i+=2) {
+                                       echo '<option value="'.htmlspecialchars($aOptions[$i+1]).'"';
+                                       if ($aOptions[$i+1] == $current['value'])
+                                               echo ' selected="selected"';
+                                       echo '>'.htmlspecialchars($aOptions[$i]).'</option>';
+                               }
+                               echo '</select>';
+                               break;
+                       case 'textarea':
+                               //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+                               echo '<textarea class="pluginoption" cols="30" rows="5" name="',htmlspecialchars($varname),'"';
+                               if ($meta['access'] == 'readonly') {
+                                       echo ' readonly="readonly"';
+                               }
+                               echo '>',htmlspecialchars($current['value']),'</textarea>';
+                               break;
+                       case 'text':
+                       default:
+                               //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+
+                               echo '<input type="text" size="40" maxlength="128" name="',htmlspecialchars($varname),'" value="',htmlspecialchars($current['value']),'"';
+                               if ($meta['datatype'] == 'numerical') {
+                                       echo ' onkeyup="checkNumeric(this)" onblur="checkNumeric(this)"';
+                               }
+                               if ($meta['access'] == 'readonly') {
+                                       echo ' readonly="readonly"';
+                               }
+                               echo ' />';
+               }
+               echo $current['extra'];
+               echo '</td>';
+       }
+}
+
+function listplug_table_itemlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LIST_ITEM_INFO."</th><th>"._LIST_ITEM_CONTENT."</th><th style=\"white-space:nowrap\" colspan='1'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       $current->itime = strtotime($current->itime);   // string -> unix timestamp
+
+                       if ($current->idraft == 1)
+                               $cssclass = "class='draft'";
+
+                       // (can't use offset time since offsets might vary between blogs)
+                       if ($current->itime > $template['now'])
+                               $cssclass = "class='future'";
+
+                       echo "<td $cssclass>",_LIST_ITEM_BLOG,' ', htmlspecialchars($current->bshortname);
+                       echo "    <br />",_LIST_ITEM_CAT,' ', htmlspecialchars($current->cname);
+                       echo "    <br />",_LIST_ITEM_AUTHOR, ' ', htmlspecialchars($current->mname);
+                       echo "    <br />",_LIST_ITEM_DATE," " . date("Y-m-d",$current->itime);
+                       echo "<br />",_LIST_ITEM_TIME," " . date("H:i",$current->itime);
+                       echo "</td>";
+                       echo "<td $cssclass>";
+
+                       $id = listplug_nextBatchId();
+
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->inumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<b>" . htmlspecialchars(strip_tags($current->ititle)) . "</b>";
+                       echo '</label>';
+                       echo "<br />";
+
+
+                       $current->ibody = strip_tags($current->ibody);
+                       $current->ibody = htmlspecialchars(shorten($current->ibody,300,'...'));
+
+                       echo "$current->ibody</td>";
+                       echo "<td style=\"white-space:nowrap\" $cssclass>";
+                       echo    "<a href='index.php?action=itemedit&amp;itemid=$current->inumber'>"._LISTS_EDIT."</a>";
+                       echo    "<br /><a href='index.php?action=itemcommentlist&amp;itemid=$current->inumber'>"._LISTS_COMMENTS."</a>";
+                       echo    "<br /><a href='index.php?action=itemmove&amp;itemid=$current->inumber'>"._LISTS_MOVE."</a>";
+                       echo    "<br /><a href='index.php?action=itemdelete&amp;itemid=$current->inumber'>"._LISTS_DELETE."</a>";
+                       echo "</td>";
+                       break;
+       }
+}
+
+// for batch operations: generates the index numbers for checkboxes
+function listplug_nextBatchId() {
+       static $id = 0;
+       return $id++;
+}
+
+function listplug_table_commentlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_INFO."</th><th>"._LIST_COMMENT."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       $current->ctime = strtotime($current->ctime);   // string -> unix timestamp
+
+                       echo '<td>';
+                       echo date("Y-m-d@H:i",$current->ctime);
+                       echo '<br />';
+                       if ($current->mname)
+                               echo htmlspecialchars($current->mname) ,' ', _LIST_COMMENTS_MEMBER;
+                       else
+                               echo htmlspecialchars($current->cuser);
+                       echo '</td>';
+
+
+                       $current->cbody = strip_tags($current->cbody);
+                       $current->cbody = htmlspecialchars(shorten($current->cbody, 300, '...'));
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->cnumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo $current->cbody;
+                       echo '</label>';
+                       echo '</td>';
+
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=commentedit&amp;commentid=$current->cnumber'>"._LISTS_EDIT."</a></td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=commentdelete&amp;commentid=$current->cnumber'>"._LISTS_DELETE."</a></td>";
+                       if ($template['canAddBan'])
+                               echo "<td style=\"white-space:nowrap\"><a href='index.php?action=banlistnewfromitem&amp;itemid=$current->citem&amp;ip=", htmlspecialchars($current->cip), "' title='", htmlspecialchars($current->chost), "'>"._LIST_COMMENT_BANIP."</a></td>";
+                       break;
+       }
+}
+
+
+function listplug_table_bloglist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _NAME . "</th><th colspan='7'>" ._LISTS_ACTIONS. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo "<td title='blogid:$current->bnumber shortname:$current->bshortname'><a href='$current->burl'><img src='images/globe.gif' width='13' height='13' alt='". _BLOGLIST_TT_VISIT."' /></a> " . htmlspecialchars($current->bname) . "</td>";
+                       echo "<td><a href='index.php?action=createitem&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_ADD ."'>" . _BLOGLIST_ADD . "</a></td>";
+                       echo "<td><a href='index.php?action=itemlist&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_EDIT."'>". _BLOGLIST_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=blogcommentlist&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_COMMENTS."'>". _BLOGLIST_COMMENTS."</a></td>";
+                       echo "<td><a href='index.php?action=bookmarklet&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_BMLET."'>". _BLOGLIST_BMLET . "</a></td>";
+
+                       if ($current->tadmin == 1) {
+                               echo "<td><a href='index.php?action=blogsettings&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_SETTINGS . "'>" ._BLOGLIST_SETTINGS. "</a></td>";
+                               echo "<td><a href='index.php?action=banlist&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_BANS. "'>". _BLOGLIST_BANS."</a></td>";
+                       }
+
+                       if ($template['superadmin']) {
+                               echo "<td><a href='index.php?action=deleteblog&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_DELETE."'>" ._BLOGLIST_DELETE. "</a></td>";
+                       }
+
+
+
+                       break;
+       }
+}
+
+function listplug_table_shortblognames($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _NAME . "</th><th>" . _NAME. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->bshortname) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->bname) , '</td>';
+
+                       break;
+       }
+}
+
+function listplug_table_shortnames($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _NAME . "</th><th>" . _LISTS_DESC. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->name) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->description) , '</td>';
+
+                       break;
+       }
+}
+
+
+function listplug_table_categorylist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->catid,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo htmlspecialchars($current->cname);
+                       echo '</label>';
+                       echo '</td>';
+
+                       echo '<td>', htmlspecialchars($current->cdesc), '</td>';
+                       echo "<td><a href='index.php?action=categorydelete&amp;blogid=$current->cblog&amp;catid=$current->catid' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+                       echo "<td><a href='index.php?action=categoryedit&amp;blogid=$current->cblog&amp;catid=$current->catid' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       break;
+       }
+}
+
+
+function listplug_table_templatelist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo "<td>" , htmlspecialchars($current->tdname), "</td>";
+                       echo "<td>" , htmlspecialchars($current->tddesc), "</td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=templateedit&amp;templateid=$current->tdnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       $url = $manager->addTicketToUrl('index.php?action=templateclone&templateid=' . intval($current->tdnumber));
+                       echo "<td style=\"white-space:nowrap\"><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LISTS_CLONE."</a></td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=templatedelete&amp;templateid=$current->tdnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+function listplug_table_skinlist($template, $type) {
+       global $CONF, $DIR_SKINS, $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+
+                       // use a special style for the default skin
+                       if ($current->sdnumber == $CONF['BaseSkin']) {
+                               echo '<strong>',htmlspecialchars($current->sdname),'</strong>';
+                       } else {
+                               echo htmlspecialchars($current->sdname);
+                       }
+
+                       echo '<br /><br />';
+                       echo _LISTS_TYPE ,': ' , htmlspecialchars($current->sdtype);
+                       echo '<br />', _LIST_SKINS_INCMODE , ' ' , (($current->sdincmode=='skindir') ?_PARSER_INCMODE_SKINDIR:_PARSER_INCMODE_NORMAL);
+                       if ($current->sdincpref) echo '<br />' , _LIST_SKINS_INCPREFIX , ' ', htmlspecialchars($current->sdincpref);
+
+                       // add preview image when present
+                       if ($current->sdincpref && @file_exists($DIR_SKINS . $current->sdincpref . 'preview.png'))
+                       {
+                               echo '<br /><br />';
+
+                               $hasEnlargement = @file_exists($DIR_SKINS . $current->sdincpref . 'preview-large.png');
+                               if ($hasEnlargement)
+                                       echo '<a href="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'preview-large.png" title="View larger">';
+
+                               echo '<img class="skinpreview" src="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'preview.png" width="100" height="75" alt="Preview for \'',htmlspecialchars($current->sdname),'\' skin" />';
+
+                               if ($hasEnlargement)
+                                       echo '</a>';
+
+                               if (@file_exists($DIR_SKINS . $current->sdincpref . 'readme.html'))
+                               {
+                                       echo '<br /><a href="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'readme.html" title="More info on the \'',htmlspecialchars($current->sdname),'\' skin">Readme</a>';
+                               }
+
+
+                       }
+
+                       echo "</td>";
+
+
+                       echo "<td>" , htmlspecialchars($current->sddesc);
+                               // show list of defined parts
+                               $r = sql_query('SELECT stype FROM '.sql_table('skin').' WHERE sdesc='.$current->sdnumber . ' ORDER BY stype');
+                               $types = array();
+                               while ($o = mysql_fetch_object($r))
+                                       array_push($types,$o->stype);
+                               if (sizeof($types) > 0) {
+                                       $friendlyNames = SKIN::getFriendlyNames();
+                                       for ($i=0;$i<sizeof($types);$i++) {
+                                               $type = $types[$i];
+                                               $types[$i] = '<li>' . helpHtml('skinpart'.$type) . ' <a href="index.php?action=skinedittype&amp;skinid='.$current->sdnumber.'&amp;type='.$type.'" tabindex="'.$template['tabindex'].'">' . htmlspecialchars($friendlyNames[$type]) . "</a></li>";
+                                       }
+                                       echo '<br /><br />',_LIST_SKINS_DEFINED,' <ul>',implode($types,'') ,'</ul>';
+                               }
+                       echo "</td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=skinedit&amp;skinid=$current->sdnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       $url = $manager->addTicketToUrl('index.php?action=skinclone&skinid=' . intval($current->sdnumber));
+                       echo "<td style=\"white-space:nowrap\"><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LISTS_CLONE."</a></td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=skindelete&amp;skinid=$current->sdnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+function listplug_table_draftlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_BLOG."</th><th>"._LISTS_TITLE."</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>', htmlspecialchars($current->bshortname) , '</td>';
+                       echo '<td>', htmlspecialchars(strip_tags($current->ititle)) , '</td>';
+                       echo "<td><a href='index.php?action=itemedit&amp;itemid=$current->inumber'>"._LISTS_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=itemdelete&amp;itemid=$current->inumber'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+
+function listplug_table_actionlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_TIME.'</th><th>'._LIST_ACTION_MSG.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->timestamp), '</td>';
+                       echo '<td>' , htmlspecialchars($current->message), '</td>';
+
+                       break;
+       }
+}
+
+function listplug_table_banlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LIST_BAN_IPRANGE.'</th><th>'. _LIST_BAN_REASON.'</th><th>'._LISTS_ACTIONS.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->iprange) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->reason) , '</td>';
+                       echo "<td><a href='index.php?action=banlistdelete&amp;blogid=", intval($current->blogid) , "&amp;iprange=" , htmlspecialchars($current->iprange) , "'>",_LISTS_DELETE,"</a></td>";
+                       break;
+       }
+}
+
+/**
+ * Returns the Javascript code for a bookmarklet that works on most modern browsers
+ *
+ * @param blogid
+ */
+function getBookmarklet($blogid) {
+       global $CONF;
+
+       // normal
+       $document = 'document';
+       $bookmarkletline = "javascript:Q='';x=".$document.";y=window;if(x.selection){Q=x.selection.createRange().text;}else if(y.getSelection){Q=y.getSelection();}else if(x.getSelection){Q=x.getSelection();}wingm=window.open('";
+       $bookmarkletline .= $CONF['AdminURL'] . "bookmarklet.php?blogid=$blogid";
+       $bookmarkletline .="&logtext='+escape(Q)+'&loglink='+escape(x.location.href)+'&loglinktitle='+escape(x.title),'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');wingm.focus();";
+
+       return $bookmarkletline;
+}
+
+
+?>
diff --git a/nucleus/libs/BODYACTIONS.php b/nucleus/libs/BODYACTIONS.php
new file mode 100644 (file)
index 0000000..99e7d1d
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * A class to parses plugin calls inside items
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $ $
+ */
+class BODYACTIONS extends ITEMACTIONS {
+
+       function getDefinedActions() {
+               return array('image','media','popup','plugin');
+       }
+
+       function parse_plugin($pluginName) {
+               global $manager;
+
+               // only continue when the plugin is really installed
+               if (!$manager->pluginInstalled('NP_' . $pluginName)) {
+                       return;
+               }
+
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);
+               if (!$plugin) return;
+
+               // get arguments
+               $params = func_get_args();
+
+               // remove plugin name
+               array_shift($params);
+
+               // add item reference (array_unshift didn't work)
+               $params = array_merge(array(&$this->currentItem),$params);
+
+               call_user_func_array(array(&$plugin,'doItemVar'), $params);
+       }
+}
+?>
diff --git a/nucleus/libs/BaseActions.php b/nucleus/libs/BaseActions.php
new file mode 100644 (file)
index 0000000..1244c97
--- /dev/null
@@ -0,0 +1,309 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * This class contains parse actions that are available in all ACTION classes
+ * e.g. include, phpinclude, parsedinclude, skinfile, ...
+ *
+ * It should never be used on it's own
+ */
+class BaseActions {
+
+       // depth level for includes (max. level is 3)
+       var $level;
+
+       // array of evaluated conditions (true/false). The element at the end is the one for the most nested
+       // if block.
+       var $if_conditions;
+
+       // in the "elseif" / "elseifnot" sequences, if one of the conditions become "true" remained conditions should not
+       // be tested. this variable (actually a stack) holds this information.
+       var $if_execute;
+
+       // at all times, can be evaluated to either true if the current block needs to be displayed. This
+       // variable is used to decide to skip skinvars in parts that will never be outputted.
+       var $if_currentlevel;
+
+       // contains a search string with keywords that need to be highlighted. These get parsed into $aHighlight
+       var $strHighlight;
+
+       // array of keywords that need to be highlighted in search results (see the highlight()
+       // and parseHighlight() methods)
+       var $aHighlight;
+
+       // reference to the parser object that is using this object as actions-handler
+       var $parser;
+
+       function BaseActions() {
+               $this->level = 0;
+
+               // if nesting level
+               $this->if_conditions = array(); // array on which condition values are pushed/popped
+               $this->if_execute = array();    // array on which condition values are pushed/popped
+               $this->if_currentlevel = 1;             // 1 = current level is displayed; 0 = current level not displayed
+
+               // highlights
+               $this->strHighlight = '';                       // full highlight
+               $this->aHighlight = array();            // parsed highlight
+
+       }
+
+       // include file (no parsing of php)
+       function parse_include($filename) {
+               @readfile($this->getIncludeFileName($filename));
+       }
+
+       // php-include file
+       function parse_phpinclude($filename) {
+               includephp($this->getIncludeFileName($filename));
+       }
+
+       // parsed include
+       function parse_parsedinclude($filename) {
+               // check current level
+               if ($this->level > 3) return;   // max. depth reached (avoid endless loop)
+               $filename = $this->getIncludeFileName($filename);
+               if (!file_exists($filename)) return '';
+
+               $fsize = filesize($filename);
+
+               // nothing to include
+               if ($fsize <= 0)
+                       return;
+
+               $this->level = $this->level + 1;
+
+               // read file
+               $fd = fopen ($filename, 'r');
+               $contents = fread ($fd, $fsize);
+               fclose ($fd);
+
+               // parse file contents
+               $this->parser->parse($contents);
+
+               $this->level = $this->level - 1;
+       }
+
+       /**
+        * Returns the correct location of the file to be included, according to
+        * parser properties
+        *
+        * IF IncludeMode = 'skindir' => use skindir
+        */
+       function getIncludeFileName($filename) {
+               // leave absolute filenames and http urls as they are
+               if (
+                               (substr($filename,0,1) == '/')
+                       ||      (substr($filename,0,7) == 'http://')
+                       ||      (substr($filename,0,6) == 'ftp://')
+                       )
+                       return $filename;
+
+               $filename = PARSER::getProperty('IncludePrefix') . $filename;
+               if (PARSER::getProperty('IncludeMode') == 'skindir') {
+                       global $DIR_SKINS;
+                       return $DIR_SKINS . $filename;
+               } else {
+                       return $filename;
+               }
+       }
+
+       /**
+        * Inserts an url relative to the skindir (useful when doing import/export)
+        *
+        * e.g. <skinfile(default/myfile.sth)>
+        */
+       function parse_skinfile($filename) {
+               global $CONF;
+
+               echo $CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix') . $filename;
+       }
+
+       /**
+        * Sets a property for the parser
+        */
+       function parse_set($property, $value) {
+               PARSER::setProperty($property, $value);
+       }
+
+       /**
+        * Helper function: add if condition
+        */
+       function _addIfCondition($condition) {
+
+               array_push($this->if_conditions,$condition);
+
+               $this->_updateTopIfCondition();
+
+               ob_start();
+       }
+
+       function _updateTopIfCondition() {
+               if (sizeof($this->if_conditions) == 0)
+                       $this->if_currentlevel = 1;
+               else
+                       $this->if_currentlevel = $this->if_conditions[sizeof($this->if_conditions) - 1];
+       }
+
+       /**
+        * Helper function for elseif / elseifnot
+        */
+       function _addIfExecute() {
+               array_push($this->if_execute, 0);
+       }
+
+       /**
+        * Helper function for elseif / elseifnot
+        * @param string condition to be fullfilled
+        */
+       function _updateIfExecute($condition) {
+               $index = sizeof($this->if_execute) - 1;
+               $this->if_execute[$index] = $this->if_execute[$index] || $condition;
+       }
+
+       /**
+        * returns the currently top if condition
+        */
+       function _getTopIfCondition() {
+               return $this->if_currentlevel;
+       }
+
+       /**
+        * Sets the search terms to be highlighted
+        *
+        * @param $highlight
+        *              A series of search terms
+        */
+       function setHighlight($highlight) {
+               $this->strHighlight = $highlight;
+               if ($highlight) {
+                       $this->aHighlight = parseHighlight($highlight);
+               }
+       }
+
+       /**
+        * Applies the highlight to the given piece of text
+        *
+        * @param &$data
+        *              Data that needs to be highlighted
+        * @see setHighlight
+        */
+       function highlight(&$data) {
+               if ($this->aHighlight)
+                       return highlight($data,$this->aHighlight,$this->template['SEARCH_HIGHLIGHT']);
+               else
+                       return $data;
+       }
+
+       /**
+        * Parses <%if%> statements
+        */
+       function parse_if() {
+               $this->_addIfExecute();
+
+               $args = func_get_args();
+               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+               $this->_addIfCondition($condition);
+       }
+
+       /**
+        * Parses <%else%> statements
+        */
+       function parse_else() {
+               if (sizeof($this->if_conditions) == 0) return;
+               array_pop($this->if_conditions);
+               if ($this->if_currentlevel) {
+                       ob_end_flush();
+                       $this->_updateIfExecute(1);
+                       $this->_addIfCondition(0);
+               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {
+                       ob_end_clean();
+                       $this->_addIfCondition(0);
+               } else {
+                       ob_end_clean();
+                       $this->_addIfCondition(1);
+               }
+       }
+
+       /**
+        * Parses <%elseif%> statements
+        */
+       function parse_elseif() {
+               if (sizeof($this->if_conditions) == 0) return;
+               array_pop($this->if_conditions);
+               if ($this->if_currentlevel) {
+                       ob_end_flush();
+                       $this->_updateIfExecute(1);
+                       $this->_addIfCondition(0);
+               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {
+                       ob_end_clean();
+                       $this->_addIfCondition(0);
+               } else {
+                       ob_end_clean();
+                       $args = func_get_args();
+                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+                       $this->_addIfCondition($condition);
+               }
+       }
+
+       /**
+        * Parses <%ifnot%> statements
+        */
+       function parse_ifnot() {
+               $this->_addIfExecute();
+
+               $args = func_get_args();
+               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+               $this->_addIfCondition(!$condition);
+       }
+
+       /**
+        * Parses <%elseifnot%> statements
+        */
+       function parse_elseifnot() {
+               if (sizeof($this->if_conditions) == 0) return;
+               array_pop($this->if_conditions);
+               if ($this->if_currentlevel) {
+                       ob_end_flush();
+                       $this->_updateIfExecute(1);
+                       $this->_addIfCondition(0);
+               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {
+                       ob_end_clean();
+                       $this->_addIfCondition(0);
+               } else {
+                       ob_end_clean();
+                       $args = func_get_args();
+                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+                       $this->_addIfCondition(!$condition);
+               }
+       }
+
+       /**
+        * Ends a conditional if-block
+        * see e.g. ifcat (BLOG), ifblogsetting (PAGEFACTORY)
+        */
+       function parse_endif() {
+               // we can only close what has been opened
+               if (sizeof($this->if_conditions) == 0) return;
+
+               if ($this->if_currentlevel) {
+                       ob_end_flush();
+               } else {
+                       ob_end_clean();
+               }
+               array_pop($this->if_conditions);
+               array_pop($this->if_execute);
+
+               $this->_updateTopIfCondition();
+       }
+}
+?>
diff --git a/nucleus/libs/ENCAPSULATE.php b/nucleus/libs/ENCAPSULATE.php
new file mode 100644 (file)
index 0000000..78b609b
--- /dev/null
@@ -0,0 +1,258 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * Part of the code for the Nucleus admin area
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: ENCAPSULATE.php,v 1.1 2006-07-12 07:13:31 kimitake Exp $
+ */
+
+class ENCAPSULATE {
+       /**
+         * Uses $call to call a function using parameters $params
+         * This function should return the amount of entries shown.
+         * When entries are show, batch operation handlers are shown too.
+         * When no entries were shown, $errormsg is used to display an error
+         *
+         * Passes on the amount of results found (for further encapsulation)
+         */
+       function doEncapsulate($call, $params, $errorMessage = 'No entries') {
+               // start output buffering
+               ob_start();
+
+               $nbOfRows = call_user_func_array($call, $params);
+
+               // get list contents and stop buffering
+               $list = ob_get_contents();
+               ob_end_clean();
+
+               if ($nbOfRows > 0) {
+                       $this->showHead();
+                       echo $list;
+                       $this->showFoot();
+               } else {
+                       echo $errorMessage;
+               }
+
+               return $nbOfRows;
+       }
+}
+
+/**
+  * A class used to encapsulate a list of some sort inside next/prev buttons
+  */
+class NAVLIST extends ENCAPSULATE {
+
+       function NAVLIST($action, $start, $amount, $minamount, $maxamount, $blogid, $search, $itemid) {
+               $this->action = $action;
+               $this->start = $start;
+               $this->amount = $amount;
+               $this->minamount = $minamount;
+               $this->maxamount = $maxamount;
+               $this->blogid = $blogid;
+               $this->search = $search;
+               $this->itemid = $itemid;
+       }
+
+       function showBatchList($batchtype, $query, $type, $template, $errorMessage = _LISTS_NOMORE) {
+               $batch =& new BATCH($batchtype);
+
+               $this->doEncapsulate(
+                               array(&$batch, 'showlist'),
+                               array(&$query, $type, $template),
+                               $errorMessage
+               );
+
+       }
+
+
+       function showHead() {
+               $this->showNavigation();
+       }
+       function showFoot() {
+               $this->showNavigation();
+       }
+
+       /**
+         * Displays a next/prev bar for long tables
+         */
+       function showNavigation() {
+               $action = $this->action;
+               $start = $this->start;
+               $amount = $this->amount;
+               $minamount = $this->minamount;
+               $maxamount = $this->maxamount;
+               $blogid = $this->blogid;
+               $search = $this->search;
+               $itemid = $this->itemid;
+
+               $prev = $start - $amount;
+               if ($prev < $minamount) $prev=$minamount;
+
+               // maxamount not used yet
+       //      if ($start + $amount <= $maxamount)
+                       $next = $start + $amount;
+       //      else
+       //              $next = $start;
+
+       ?>
+       <table class="navigation">
+       <tr><td>
+               <form method="post" action="index.php"><div>
+               <input type="submit" value="&lt;&lt; <?php echo  _LISTS_PREV?>" />
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="hidden" name="start" value="<?php echo  $prev; ?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input name="amount" size="3" value="<?php echo  $amount; ?>" /> <?php echo _LISTS_PERPAGE?>
+               <input type="hidden" name="start" value="<?php echo  $start; ?>" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="submit" value="&gt; <?php echo _LISTS_CHANGE?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="start" value="0" />
+               <input type="text" name="search" value="<?php echo  $search; ?>" size="7" />
+               <input type="submit" value="&gt; <?php echo  _LISTS_SEARCH?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="submit" value="<?php echo _LISTS_NEXT?> &gt; &gt;" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="start" value="<?php echo  $next; ?>" />
+               </div></form>
+       </td></tr>
+       </table>
+       <?php   }
+
+
+}
+
+
+/**
+ * A class used to encapsulate a list of some sort in a batch selection
+ */
+class BATCH extends ENCAPSULATE {
+       function BATCH($type) {
+               $this->type = $type;
+       }
+
+       function showHead() {
+               ?>
+                       <form method="post" action="index.php">
+               <?php
+// TODO: get a list op operations above the list too
+// (be careful not to use the same names for the select...)
+//             $this->showOperationList();
+       }
+
+       function showFoot() {
+               $this->showOperationList();
+               ?>
+                       </form>
+               <?php   }
+
+       function showOperationList() {
+               global $manager;
+               ?>
+               <div class="batchoperations">
+                       <?php echo _BATCH_WITH_SEL ?>
+                       <select name="batchaction">
+                       <?php                           $options = array();
+                               switch($this->type) {
+                                       case 'item':
+                                               $options = array(
+                                                       'delete'        => _BATCH_ITEM_DELETE,
+                                                       'move'          => _BATCH_ITEM_MOVE
+                                               );
+                                               break;
+                                       case 'member':
+                                               $options = array(
+                                                       'delete'        => _BATCH_MEMBER_DELETE,
+                                                       'setadmin'      => _BATCH_MEMBER_SET_ADM,
+                                                       'unsetadmin' => _BATCH_MEMBER_UNSET_ADM
+                                               );
+                                               break;
+                                       case 'team':
+                                               $options = array(
+                                                       'delete'        => _BATCH_TEAM_DELETE,
+                                                       'setadmin'      => _BATCH_TEAM_SET_ADM,
+                                                       'unsetadmin' => _BATCH_TEAM_UNSET_ADM,
+                                               );
+                                               break;
+                                       case 'category':
+                                               $options = array(
+                                                       'delete'        => _BATCH_CAT_DELETE,
+                                                       'move'          => _BATCH_CAT_MOVE,
+                                               );
+                                               break;
+                                       case 'comment':
+                                               $options = array(
+                                                       'delete'        => _BATCH_COMMENT_DELETE,
+                                               );
+                                       break;
+                               }
+                               foreach ($options as $option => $label) {
+                                       echo '<option value="',$option,'">',$label,'</option>';
+                               }
+                       ?>
+                       </select>
+                       <input type="hidden" name="action" value="batch<?php echo $this->type?>" />
+                       <?php
+                               $manager->addTicketHidden();
+
+                               // add hidden fields for 'team' and 'comment' batchlists
+                               if ($this->type == 'team')
+                               {
+                                       echo '<input type="hidden" name="blogid" value="',intRequestVar('blogid'),'" />';
+                               }
+                               if ($this->type == 'comment')
+                               {
+                                       echo '<input type="hidden" name="itemid" value="',intRequestVar('itemid'),'" />';
+                               }
+
+                               echo '<input type="submit" value="',_BATCH_EXEC,'" />';
+                       ?>(
+                        <a href="" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return batchSelectAll(1); "><?php echo _BATCH_SELECTALL?></a> -
+                        <a href="" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return batchSelectAll(0); "><?php echo _BATCH_DESELECTALL?></a>
+                       )
+               </div>
+               <?php   }
+
+       // shortcut :)
+       function showList($query, $type, $template, $errorMessage = _LISTS_NOMORE) {
+               return $this->doEncapsulate(    'showlist',
+                                                                       array($query, $type, $template),
+                                                                       $errorMessage
+                                                               );
+       }
+
+}
+?>
diff --git a/nucleus/libs/ITEMACTIONS.php b/nucleus/libs/ITEMACTIONS.php
new file mode 100644 (file)
index 0000000..a76ab3e
--- /dev/null
@@ -0,0 +1,490 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This class to parse item templates
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: ITEMACTIONS.php,v 1.1 2006-07-12 07:13:31 kimitake Exp $
+ */
+class ITEMACTIONS extends BaseActions {
+
+       // contains an assoc array with parameters that need to be included when
+       // generating links to items/archives/... (e.g. catid)
+       var $linkparams;
+
+       // true when the current user is a blog admin (and thus allowed to edit all items)
+       var $allowEditAll;
+
+       // timestamp of last visit
+       var $lastVisit;
+
+       // item currently being handled (mysql result object, see BLOG::showUsingQuery)
+       var $currentItem;
+
+       // reference to the blog currently being displayed
+       var $blog;
+
+       // associative array with template info (part name => contents)
+       var $template;
+
+       // true when comments need to be displayed
+       var $showComments;
+
+       function ITEMACTIONS(&$blog) {
+               // call constructor of superclass first
+               $this->BaseActions();
+
+               // extra parameters for created links
+               global $catid;
+               if ($catid)
+                       $this->linkparams = array('catid' => $catid);
+
+               // check if member is blog admin (and thus allowed to edit all items)
+               global $member;
+               $this->allowEditAll = ($member->isLoggedIn() && $member->blogAdminRights($blog->getID()));
+               $this->setBlog($blog);
+       }
+
+       function getDefinedActions() {
+               return array(
+                       'blogid',
+                       'title',
+                       'body',
+                       'more',
+                       'smartbody',
+                       'itemid',
+                       'morelink',
+                       'category',
+                       'categorylink',
+                       'author',
+                       'authorid',
+                       'authorlink',
+                       'catid',
+                       'karma',
+                       'date',
+                       'time',
+                       'query',
+                       'itemlink',
+                       'blogurl',
+                       'closed',
+                       'syndicate_title',
+                       'syndicate_description',
+                       'karmaposlink',
+                       'karmaneglink',
+                       'new',
+                       'image',
+                       'popup',
+                       'media',
+                       'daylink',
+                       'query',
+                       'include',
+                       'phpinclude',
+                       'parsedinclude',
+                       'skinfile',
+                       'set',
+                       'plugin',
+                       'edit',
+                       'editlink',
+                       'editpopupcode',
+                       'comments',
+                       'relevance'/*,
+                       'if',
+                       'else',
+                       'endif',
+                       'elseif',
+                       'ifnot',
+                       'elseifnot'*/
+               );
+       }
+
+
+
+       function setLastVisit($lastVisit) {             $this->lastVisit = $lastVisit; }
+       function setParser(&$parser) {                  $this->parser =& $parser; }
+       function setCurrentItem(&$item) {               $this->currentItem =& $item; }
+       function setBlog(&$blog) {                              $this->blog =& $blog; }
+       function setTemplate($template) {               $this->template =& $template; }
+       function setShowComments($val) {                $this->showComments = $val; }
+
+       // methods used by parser to insert content
+
+       function parse_blogid() {               echo $this->blog->getID();      }
+       function parse_body() {                 $this->highlightAndParse($this->currentItem->body); }
+       function parse_more() {                 $this->highlightAndParse($this->currentItem->more); }
+       function parse_itemid() {               echo $this->currentItem->itemid; }
+       function parse_category() {             echo $this->currentItem->category; }
+       function parse_categorylink() { echo createLink('category', array('catid' => $this->currentItem->catid, 'name' => $this->currentItem->category)); }
+       function parse_catid() {                echo $this->currentItem->catid; }
+       function parse_authorid() {             echo $this->currentItem->authorid; }
+       function parse_authorlink() {
+               echo createLink(
+                       'member',
+                       array(
+                               'memberid' => $this->currentItem->authorid,
+                               'name' => $this->currentItem->author,
+                               'extra' => $this->linkparams
+                       )
+               );
+       }
+       function parse_query() {                echo $this->strHighlight; }
+       function parse_itemlink() {
+               echo createLink(
+                       'item',
+                       array(
+                               'itemid' => $this->currentItem->itemid,
+                               'title' => $this->currentItem->title,
+                               'timestamp' => $this->currentItem->timestamp,
+                               'extra' => $this->linkparams
+                       )
+               );
+       }
+       function parse_blogurl() {              echo $this->blog->getURL(); }
+       function parse_closed() {               echo $this->currentItem->closed; }
+       function parse_relevance() {    echo round($this->currentItem->score,2);}
+
+       function parse_title($format = '') {
+               switch ($format) {
+                       case 'xml':
+                               echo stringToXML ($this->currentItem->title);
+                               break;
+                       case 'attribute':
+                               echo stringToAttribute ($this->currentItem->title);
+                               break;
+                       case 'raw':
+                               echo $this->currentItem->title;
+                               break;
+                       default:
+                               $this->highlightAndParse($this->currentItem->title);
+                               break;
+               }
+       }
+
+       function parse_karma($type = 'totalscore') {
+               global $manager;
+
+               // get karma object
+               $karma =& $manager->getKarma($this->currentItem->itemid);
+
+               switch($type) {
+                       case 'pos':
+                               echo $karma->getNbPosVotes();
+                               break;
+                       case 'neg':
+                               echo $karma->getNbNegVotes();
+                               break;
+                       case 'votes':
+                               echo $karma->getNbOfVotes();
+                               break;
+                       case 'posp':
+                               $percentage = $karma->getNbOfVotes() ? 100 * ($karma->getNbPosVotes() / $karma->getNbOfVotes()) : 50;
+                               echo number_format($percentage,2), '%';
+                               break;
+                       case 'negp':
+                               $percentage = $karma->getNbOfVotes() ? 100 * ($karma->getNbNegVotes() / $karma->getNbOfVotes()) : 50;
+                               echo number_format($percentage,2), '%';
+                               break;
+                       case 'totalscore':
+                       default:
+                               echo $karma->getTotalScore();
+                               break;
+               }
+
+       }
+
+       function parse_author($which = '') {
+               switch($which)
+               {
+                       case 'realname':
+                               echo $this->currentItem->authorname;
+                               break;
+                       case 'id':
+                               echo $this->currentItem->authorid;
+                               break;
+                       case 'email':
+                               echo $this->currentItem->authormail;
+                               break;
+                       case 'url':
+                               echo $this->currentItem->authorurl;
+                               break;
+                       case 'name':
+                       default:
+                               echo $this->currentItem->author;
+               }
+       }
+
+       function parse_smartbody() {
+               if (!$this->currentItem->more) {
+                       $this->highlightAndParse($this->currentItem->body);
+               } else {
+                       $this->highlightAndParse($this->currentItem->more);
+               }
+       }
+
+       function parse_morelink() {
+               if ($this->currentItem->more)
+                       $this->parser->parse($this->template['MORELINK']);
+       }
+
+       function parse_date($format = '') {
+               echo formatDate($format, $this->currentItem->timestamp, $this->template['FORMAT_DATE'], $this->blog);
+       }
+
+       /**
+         * @param format optional strftime format
+         */
+       function parse_time($format = '') {
+               echo strftime($format ? $format : $this->template['FORMAT_TIME'],$this->currentItem->timestamp);
+       }
+
+       /**
+         * @param maxLength optional maximum length
+         */
+       function parse_syndicate_title($maxLength = 100) {
+               $syndicated = strip_tags($this->currentItem->title);
+               echo htmlspecialchars(shorten($syndicated,$maxLength,'...'));
+       }
+
+       /**
+         * @param maxLength optional maximum length
+         */
+       function parse_syndicate_description($maxLength = 250, $addHighlight = 0) {
+               $syndicated = strip_tags($this->currentItem->body);
+               if ($addHighlight) {
+                       $tmp_highlight = htmlspecialchars(shorten($syndicated,$maxLength,'...'));
+                       echo $this->highlightAndParse($tmp_highlight);
+               } else {
+                       echo htmlspecialchars(shorten($syndicated,$maxLength,'...'));
+               }
+       }
+
+       function parse_karmaposlink($text = '') {
+               global $CONF;
+               $link = $CONF['ActionURL'] . '?action=votepositive&amp;itemid='.$this->currentItem->itemid;
+               echo $text ? '<a href="'.$link.'">'.$text.'</a>' : $link;
+       }
+
+       function parse_karmaneglink($text = '') {
+               global $CONF;
+               $link = $CONF['ActionURL'] . '?action=votenegative&amp;itemid='.$this->currentItem->itemid;
+               echo $text ? '<a href="'.$link.'">'.$text.'</a>' : $link;
+       }
+
+       function parse_new() {
+               if (($this->lastVisit != 0) && ($this->currentItem->timestamp > $this->lastVisit))
+                       echo $this->template['NEW'];
+       }
+
+       function parse_image() {
+               // image/popup calls have arguments separated by |
+               $args = func_get_args();
+               $args = explode('|',implode($args,', '));
+               call_user_func_array(array(&$this,'createImageCode'),$args);
+       }
+       function parse_popup() {
+               // image/popup calls have arguments separated by |
+               $args = func_get_args();
+               $args = explode('|',implode($args,', '));
+               call_user_func_array(array(&$this,'createPopupCode'),$args);
+       }
+       function parse_media() {
+               // image/popup calls have arguments separated by |
+               $args = func_get_args();
+               $args = explode('|',implode($args,', '));
+               call_user_func_array(array(&$this,'createMediaCode'),$args);
+       }
+
+       function parse_daylink() {
+               echo createArchiveLink($this->blog->getID(), strftime('%Y-%m-%d',$this->currentItem->timestamp), $this->linkparams);
+       }
+
+       function parse_comments($maxToShow = 0) {
+               if ($maxToShow == 0)
+                       $maxToShow = $this->blog->getMaxComments();
+
+               // add comments
+               if ($this->showComments && $this->blog->commentsEnabled()) {
+                       $comments =& new COMMENTS($this->currentItem->itemid);
+                       $comments->setItemActions($this);
+                       $comments->showComments($this->template, $maxToShow, $this->currentItem->closed ? 0 : 1, $this->strHighlight);
+               }
+       }
+
+       /**
+         * Executes a plugin templatevar
+         *
+         * @param pluginName name of plugin (without the NP_)
+         *
+         * extra parameters can be added
+         */
+       function parse_plugin($pluginName) {
+               global $manager;
+
+               // only continue when the plugin is really installed
+               if (!$manager->pluginInstalled('NP_' . $pluginName))
+                       return;
+
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);
+               if (!$plugin) return;
+
+               // get arguments
+               $params = func_get_args();
+
+               // remove plugin name
+               array_shift($params);
+
+               // add item reference (array_unshift didn't work)
+               $params = array_merge(array(&$this->currentItem),$params);
+
+               call_user_func_array(array(&$plugin,'doTemplateVar'), $params);
+       }
+
+       function parse_edit() {
+               global $member, $CONF;
+               if ($this->allowEditAll || ($member->isLoggedIn() && ($member->getID() == $this->currentItem->authorid)) ) {
+                       $this->parser->parse($this->template['EDITLINK']);
+               }
+       }
+
+       function parse_editlink() {
+               global $CONF;
+               echo $CONF['AdminURL'],'bookmarklet.php?action=edit&amp;itemid=',$this->currentItem->itemid;
+       }
+
+       function parse_editpopupcode() {
+               echo "if (event &amp;&amp; event.preventDefault) event.preventDefault();winbm=window.open(this.href,'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');winbm.focus();return false;";
+       }
+
+       // helper functions
+
+       /**
+        * Parses highlighted text, with limited actions only (to prevent not fully trusted team members
+        * from hacking your weblog.
+        * 'plugin variables in items' implementation by Andy
+        */
+       function highlightAndParse(&$data) {
+               $actions =& new BODYACTIONS($this->blog);
+               $parser =& new PARSER($actions->getDefinedActions(), $actions);
+               $actions->setTemplate($this->template);
+               $actions->setHighlight($this->strHighlight);
+               $actions->setCurrentItem($this->currentItem);
+               $actions->setParser($parser);
+               $parser->parse($actions->highlight($data));
+       }
+
+       /*
+       // this is the function previous to the 'plugin variables in items' implementation by Andy
+       function highlightAndParse(&$data) {
+               // allow only a limited subset of actions (do not allow includes etc, they might be evil)
+               $this->parser->actions = array('image','media','popup');
+               $tmp_highlight = $this->highlight($data);
+               $this->parser->parse($tmp_highlight);
+               $this->parser->actions = $this->getDefinedActions();
+       }
+       */
+
+       function createPopupCode($filename, $width, $height, $text = '') {
+               global $CONF;
+
+               // select private collection when no collection given
+               if (!strstr($filename,'/')) {
+                       $filename = $this->currentItem->authorid . '/' . $filename;
+               }
+
+               $windowwidth = $width;
+               $windowheight = $height;
+
+               $vars['rawpopuplink']   = $CONF['Self'] . "?imagepopup=" . htmlspecialchars($filename) . "&amp;width=$width&amp;height=$height&amp;imagetext=" . urlencode(htmlspecialchars($text));
+               $vars['popupcode']              = "window.open(this.href,'imagepopup','status=no,toolbar=no,scrollbars=no,resizable=yes,width=$windowwidth,height=$windowheight');return false;";
+               $vars['popuptext']              = htmlspecialchars($text);
+               $vars['popuplink']              = '<a href="' . $vars['rawpopuplink']. '" onclick="'. $vars['popupcode'].'" >' . $vars['popuptext'] . '</a>';
+               $vars['width']                  = $width;
+               $vars['height']                 = $height;
+               $vars['text']                   = $text;
+               $vars['link']                   = htmlspecialchars($CONF['MediaURL'] . $filename);
+               $vars['media']                  = '<a href="' . $vars['link'] . '">' . $vars['popuptext'] . '</a>';
+
+               echo TEMPLATE::fill($this->template['POPUP_CODE'],$vars);
+       }
+
+       function createImageCode($filename, $width, $height, $text = '') {
+               global $CONF;
+
+               // select private collection when no collection given
+               if (!strstr($filename,'/')) {
+                       $filename = $this->currentItem->authorid . '/' . $filename;
+               }
+
+               $windowwidth = $width;
+               $windowheight = $height;
+
+               $vars['link']                   = htmlspecialchars($CONF['MediaURL']. $filename);
+               $vars['text']                   = htmlspecialchars($text);
+               $vars['image'] = '<img src="' . $vars['link'] . '" width="' . $width . '" height="' . $height . '" alt="' . $vars['text'] . '" title="' . $vars['text'] . '" />';
+               $vars['width']                  = $width;
+               $vars['height']                 = $height;
+               $vars['media']                  = '<a href="' . $vars['link'] . '">' . $vars['text'] . '</a>';
+
+
+               echo TEMPLATE::fill($this->template['IMAGE_CODE'],$vars);;
+
+       }
+
+       function createMediaCode($filename, $text = '') {
+               global $CONF;
+
+               // select private collection when no collection given
+               if (!strstr($filename,'/')) {
+                       $filename = $this->currentItem->authorid . '/' . $filename;
+               }
+
+               $vars['link']                   = htmlspecialchars($CONF['MediaURL'] . $filename);
+               $vars['text']                   = htmlspecialchars($text);
+               $vars['media']                  = '<a href="' . $vars['link'] . '">' . $vars['text'] . '</a>';
+
+               echo TEMPLATE::fill($this->template['MEDIA_CODE'],$vars);;
+       }
+}
+
+/**
+ * A class to parse plugin calls inside items
+ */
+class BODYACTIONS extends ITEMACTIONS {
+
+       function getDefinedActions() {
+               return array('image','media','popup','plugin');
+       }
+
+       function parse_plugin($pluginName) {
+               global $manager;
+
+               // only continue when the plugin is really installed
+               if (!$manager->pluginInstalled('NP_' . $pluginName)) {
+                       return;
+               }
+
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);
+               if (!$plugin) return;
+
+               // get arguments
+               $params = func_get_args();
+
+               // remove plugin name
+               array_shift($params);
+
+               // add item reference (array_unshift didn't work)
+               $params = array_merge(array(&$this->currentItem),$params);
+
+               call_user_func_array(array(&$plugin,'doItemVar'), $params);
+       }
+}
+?>
index 7359c66..18d98e3 100755 (executable)
@@ -1,69 +1,69 @@
-<?php\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * Class used to represent a collection of e-mail addresses, to which a\r
- * message can be sent (e.g. comment or karma vote notification).\r
- *\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: NOTIFICATION.php,v 1.4 2005-08-13 07:33:02 kimitake Exp $\r
- * $NucleusJP: NOTIFICATION.php,v 1.3 2005/03/12 06:19:05 kimitake Exp $\r
- */\r
-class NOTIFICATION {\r
-\r
-       // array of addresses that need to get a notification\r
-       var $addresses = array();\r
-\r
-       /**\r
-         * takes one string as argument, containing multiple e-mail addresses\r
-         * separated by semicolons\r
-         * eg: site@demuynck.org;nucleus@demuynck.org;foo@bar.com\r
-         */\r
-       function NOTIFICATION($addresses) {\r
-               $this->addresses = explode(';' , $addresses);\r
-       }\r
-\r
-       /**\r
-         * returns true if all addresses are valid\r
-         */\r
-       function validAddresses() {\r
-               foreach ( $this->addresses as $address ) {\r
-                       if (!isValidMailAddress(trim($address))) \r
-                               return 0;\r
-               }\r
-               return 1;\r
-       }\r
-       \r
-       /**\r
-         * Sends email messages to all the email addresses\r
-         */\r
-       function notify($title, $message, $from) {\r
-               global $member;\r
-                       \r
-               foreach ( $this->addresses as $address ) {\r
-                       $address = trim($address);\r
-                       \r
-                       if (!$address)\r
-                               continue;\r
-                       \r
-                       // don't send messages to yourself\r
-                       if ($member->isLoggedIn() && ($member->getEmail() == $address))\r
-                               continue;\r
-               \r
-                       @mb_language('ja');\r
-                       @mb_internal_encoding(_CHARSET);\r
-                       @mb_send_mail($address, $title, $message, "From: ". $from);\r
-               }\r
-       }\r
-}\r
-\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Class used to represent a collection of e-mail addresses, to which a
+ * message can be sent (e.g. comment or karma vote notification).
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: NOTIFICATION.php,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: NOTIFICATION.php,v 1.4 2005/08/13 07:33:02 kimitake Exp $
+ */
+class NOTIFICATION {
+
+       // array of addresses that need to get a notification
+       var $addresses = array();
+
+       /**
+         * takes one string as argument, containing multiple e-mail addresses
+         * separated by semicolons
+         * eg: site@demuynck.org;nucleus@demuynck.org;foo@bar.com
+         */
+       function NOTIFICATION($addresses) {
+               $this->addresses = explode(';' , $addresses);
+       }
+
+       /**
+         * returns true if all addresses are valid
+         */
+       function validAddresses() {
+               foreach ( $this->addresses as $address ) {
+                       if (!isValidMailAddress(trim($address)))
+                               return 0;
+               }
+               return 1;
+       }
+
+       /**
+         * Sends email messages to all the email addresses
+         */
+       function notify($title, $message, $from) {
+               global $member;
+
+               foreach ( $this->addresses as $address ) {
+                       $address = trim($address);
+
+                       if (!$address)
+                               continue;
+
+                       // don't send messages to yourself
+                       if ($member->isLoggedIn() && ($member->getEmail() == $address))
+                               continue;
+               
+                       @mb_language('ja');
+                       @mb_internal_encoding(_CHARSET);
+                       @mb_send_mail($address, $title, $message, "From: ". $from);
+               }
+       }
+}
+
+?>
\ No newline at end of file
index df88fe8..ad65b06 100755 (executable)
-<?php\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: PAGEFACTORY.php,v 1.5 2005-08-13 07:33:02 kimitake Exp $\r
- * $NucleusJP: PAGEFACTORY.php,v 1.4 2005/03/16 07:53:18 kimitake Exp $\r
- */\r
-\r
-/**\r
- * The formfactory class can be used to insert add/edit item forms into\r
- * admin area, bookmarklet, skins or any other places where such a form\r
- * might be needed\r
- */\r
-class PAGEFACTORY extends BaseActions {\r
-\r
-       // ref to the blog object for which an add:edit form is created\r
-       var $blog;\r
-       \r
-       // allowed actions (for parser)\r
-       var $actions;\r
-       \r
-       // allowed types of forms (bookmarklet/admin)\r
-       var $allowedTypes;\r
-       var $type;              // one of the types in $allowedTypes\r
-       \r
-       // 'add' or 'edit'\r
-       var $method;\r
-       \r
-       // info to fill out in the form (e.g. catid, itemid, ...)\r
-       var $variables;\r
-\r
-       /**\r
-        * creates a new PAGEFACTORY object\r
-        */\r
-       function PAGEFACTORY($blogid) {\r
-               // call constructor of superclass first\r
-               $this->BaseActions();                   \r
-               \r
-               global $manager;\r
-               $this->blog =& $manager->getBlog($blogid);\r
-               \r
-               // TODO: move the definition of actions to the createXForm \r
-               // methods\r
-               $this->actions = Array(\r
-                       'actionurl', \r
-                       'title',\r
-                       'body',\r
-                       'more',\r
-                       'blogid',\r
-                       'bloglink',\r
-                       'blogname',\r
-                       'authorname',\r
-                       'checkedonval',\r
-                       'helplink',\r
-                       'currenttime',\r
-                       'itemtime',\r
-                       'init',\r
-                       'text',\r
-                       'jsinput',\r
-                       'jsbuttonbar',\r
-                       'categories',\r
-                       'contents',\r
-                       'ifblogsetting',\r
-                       'ifitemproperty',\r
-                       'else',\r
-                       'endif',\r
-                       'pluginextras',\r
-                       'itemoptions',\r
-                       'extrahead',\r
-                       'ticket'\r
-               );\r
-               \r
-               // TODO: maybe add 'skin' later on?\r
-               // TODO: maybe add other pages from admin area\r
-               $this->allowedTypes = Array('bookmarklet','admin');     \r
-       }\r
-\r
-       /**\r
-        * creates a "add item" form for a given type of page\r
-        *\r
-        * @param type\r
-        *              'admin' or 'bookmarklet' \r
-        */\r
-       function createAddForm($type, $contents = array()) {\r
-               if (!in_array($type, $this->allowedTypes))\r
-                       return;\r
-               $this->type = $type;\r
-               $this->method = 'add';\r
-               \r
-               global $manager;\r
-               $manager->notify('PreAddItemForm', array('contents' => &$contents, 'blog' => &$this->blog));\r
-               \r
-               $this->createForm($contents);\r
-       }\r
-       \r
-       /**\r
-        * creates a "add item" form for a given type of page\r
-        *\r
-        * @param type\r
-        *              'admin' or 'bookmarklet' \r
-        * @param contents\r
-        *              An associative array\r
-        *                      'author' => author\r
-        *                      '' => \r
-        */\r
-       function createEditForm($type, $contents) {\r
-               if (!in_array($type, $this->allowedTypes))\r
-                       return;\r
-               $this->type = $type;\r
-               $this->method = 'edit';\r
-               $this->createForm($contents);\r
-       }\r
-       \r
-       /**\r
-        * (private) creates a form for a given type of page\r
-        */\r
-       function createForm($contents) {\r
-               // save contents\r
-               $this->variables = $contents;\r
-               \r
-               // get template to use\r
-               $template = $this->getTemplateFor($this->type);\r
-               \r
-               // use the PARSER engine to parse that template\r
-               $parser =& new PARSER($this->actions, $this);\r
-               $parser->parse($template);\r
-       }\r
-       \r
-       /**\r
-        * returns an appropriate template\r
-        */\r
-       function getTemplateFor($type) {\r
-               global $DIR_LIBS;\r
-               \r
-               $filename = $DIR_LIBS . 'include/' . $this->type . '-' . $this->method . '.template';\r
-               \r
-               if (!file_exists($filename)) \r
-                       return '';\r
-\r
-               $fsize = filesize($filename);\r
-               if ($fsize <= 0)\r
-                       return '';\r
-                       \r
-               // read file and return it\r
-               $fd = fopen ($filename, 'r');\r
-               $contents = fread ($fd, $fsize);\r
-               fclose ($fd);\r
-               \r
-               return $contents;\r
-               \r
-       }\r
-       \r
-       // create category dropdown box\r
-       function parse_categories($startidx = 0) {\r
-                       if ($this->variables['catid']) \r
-                               $catid = $this->variables['catid'];                             // on edit item\r
-                       else\r
-                               $catid = $this->blog->getDefaultCategory();             // on add item\r
-                       \r
-                       ADMIN::selectBlogCategory('catid',$catid,$startidx,1,$this->blog->getID());\r
-       }\r
-       \r
-       function parse_blogid() {\r
-               echo $this->blog->getID();\r
-       }\r
-       \r
-       function parse_blogname() {\r
-               echo $this->blog->getName();\r
-       }\r
-       \r
-       function parse_bloglink() {\r
-               echo '<a href="'.htmlspecialchars($this->blog->getURL()).'">'.$this->blog->getName().'</a>';\r
-       }\r
-       \r
-       function parse_authorname() {\r
-               // don't use on add item?\r
-               global $member;\r
-               echo $member->getDisplayName();\r
-       }\r
-\r
-       function parse_title() {\r
-               echo $this->contents['title'];\r
-       }\r
-\r
-       /**\r
-        * Indicates the start of a conditional block of data. It will be added to\r
-        * the output only if the blogsetting with the given name equals the \r
-        * given value (default for value = 1 = true)\r
-        *\r
-        * the name of the blogsetting is the column name in the nucleus_blog table\r
-        *\r
-        * the conditional block ends with an <endif> var\r
-        */\r
-       function parse_ifblogsetting($name,$value=1) {\r
-               $this->_addIfCondition(($this->blog->getSetting($name) == $value));\r
-       }\r
-       \r
-       function parse_ifitemproperty($name,$value=1) {\r
-               $this->_addIfCondition(($this->variables[$name] == $value));\r
-       }\r
-       \r
-       function parse_helplink($topic) {\r
-               help($topic);\r
-       }\r
-       \r
-       // for future items\r
-       function parse_currenttime($what) {\r
-               $nu = getdate($this->blog->getCorrectTime());\r
-               echo $nu[$what];\r
-       }\r
-       \r
-       // date change on edit item\r
-       function parse_itemtime($what) {\r
-               $itemtime = getdate($this->variables['timestamp']);\r
-               echo $itemtime[$what];\r
-       }\r
-       \r
-       // some init stuff for all forms\r
-       function parse_init() {\r
-               $authorid = ($this->method == 'edit') ? $this->variables['authorid'] : '';\r
-               $this->blog->insertJavaScriptInfo($authorid);           \r
-       }\r
-       \r
-       // on bookmarklets only: insert extra html header information (by plugins)\r
-       function parse_extrahead() {\r
-               global $manager;\r
-               \r
-               $extrahead = '';\r
-               \r
-               $manager->notify(\r
-                       'BookmarkletExtraHead',\r
-                       array(\r
-                               'extrahead' => &$extrahead\r
-                       )\r
-               );\r
-               \r
-               echo $extrahead;\r
-       }\r
-       \r
-       // inserts some localized text\r
-       function parse_text($which) {\r
-               // constant($which) only available from 4.0.4 :(\r
-               if (defined($which)) {  \r
-                       eval("echo $which;");\r
-               } else {\r
-                       echo $which;    // this way we see where definitions are missing\r
-               }\r
-               \r
-       }\r
-       \r
-       function parse_contents($which) {\r
-               echo htmlspecialchars($this->variables[$which]);\r
-       }\r
-       \r
-       function parse_checkedonval($value, $name) {\r
-               if ($this->variables[$name] == $value)\r
-                       echo "checked='checked'";\r
-       }\r
-       \r
-       // extra javascript for input and textarea fields\r
-       function parse_jsinput($which) {\r
-               global $CONF;\r
-       ?>\r
-                       name="<?php echo $which?>" \r
-                       id="input<?php echo $which?>" \r
-       <?php\r
-               if ($CONF['DisableJsTools'] != 1) {\r
-       ?>\r
-                       onkeyup="storeCaret(this); updPreview('<?php echo $which?>');"\r
-                       onclick="storeCaret(this);"\r
-                       onselect="storeCaret(this);" \r
-\r
-       <?php           \r
-               } \r
-               \r
-               if ($CONF['DisableJsTools'] == 0) {\r
-       ?>\r
-                   onkeypress="shortCuts();"                   \r
-       <?php           }\r
-       }\r
-       \r
-       // shows the javascript button bar\r
-       function parse_jsbuttonbar($extrabuttons = "") {\r
-               global $CONF;\r
-               switch($CONF['DisableJsTools']) {\r
-\r
-                       case "0":       \r
-                               echo '<div class="jsbuttonbar">';\r
-\r
-                                       $this->_jsbutton('cut','cutThis()',_ADD_CUT_TT . " (Ctrl + X)");\r
-                                       $this->_jsbutton('copy','copyThis()',_ADD_COPY_TT . " (Ctrl + C)");\r
-                                       $this->_jsbutton('paste','pasteThis()',_ADD_PASTE_TT . " (Ctrl + V)");\r
-                                       $this->_jsbuttonspacer();\r
-                                       $this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT ." (Ctrl + Shift + B)");\r
-                                       $this->_jsbutton('italic',"italicThis()",_ADD_ITALIC_TT ." (Ctrl + Shift + I)");\r
-                                       $this->_jsbutton('link',"ahrefThis()",_ADD_HREF_TT ." (Ctrl + Shift + A)");\r
-                                       $this->_jsbuttonspacer();                                       \r
-                                       $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);\r
-                                       $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT);\r
-                                       $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT);\r
-                                       $this->_jsbuttonspacer();                                       \r
-                                       $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT);\r
-                                       $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT);\r
-\r
-                               \r
-                                       if ($extrabuttons) {\r
-                                               $btns = explode('+',$extrabuttons);\r
-                                               $this->_jsbuttonspacer();\r
-                                               foreach ($btns as $button) {\r
-                                                       switch($button) {\r
-                                                               case "media":\r
-                                                                       $this->_jsbutton('media',"addMedia()",_ADD_MEDIA_TT .   " (Ctrl + Shift + M)");                                                 \r
-                                                                       break;\r
-                                                               case "preview":\r
-                                                                       $this->_jsbutton('preview',"showedit()",_ADD_PREVIEW_TT);\r
-                                                                       break;\r
-                                                       }\r
-                                               }\r
-                                       } \r
-                                       \r
-                               echo '</div>';\r
-                               \r
-                               break;\r
-                       case "2":\r
-                               echo '<div class="jsbuttonbar">';\r
-\r
-                                       $this->_jsbutton('bold',"boldThis()",'');\r
-                                       $this->_jsbutton('italic',"italicThis()",'');\r
-                                       $this->_jsbutton('link',"ahrefThis()",'');\r
-                                       $this->_jsbuttonspacer();                                                                               \r
-                                       $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);\r
-                                       $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT);\r
-                                       $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT);\r
-                                       $this->_jsbuttonspacer();                                       \r
-                                       $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT);\r
-                                       $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT);\r
-                                       \r
-\r
-                                       if ($extrabuttons) {\r
-                                               $btns = explode('+',$extrabuttons);\r
-                                               $this->_jsbuttonspacer();\r
-                                               foreach ($btns as $button) {\r
-                                                       switch($button) {\r
-                                                               case "media":\r
-                                                                       $this->_jsbutton('media',"addMedia()",'');                                                      \r
-                                                                       break;\r
-                                                       }\r
-                                               }\r
-                                       } \r
-                                       \r
-                               echo '</div>';\r
-                               \r
-                               break;                  \r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Allows plugins to add their own custom fields\r
-        */\r
-       function parse_pluginextras() {\r
-               global $manager;\r
-                       \r
-               switch ($this->method) {\r
-                       case 'add':\r
-                               $manager->notify('AddItemFormExtras', \r
-                                               array(\r
-                                                       'blog' => &$this->blog\r
-                                               )\r
-                               );\r
-                               break;\r
-                       case 'edit':\r
-                               $manager->notify('EditItemFormExtras', \r
-                                               array(\r
-                                                       'variables' => $this->variables,\r
-                                                       'blog' => &$this->blog,\r
-                                                       'itemid' => $this->variables['itemid']\r
-                                               )\r
-                               );\r
-                               break;\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Adds the itemOptions of a plugin to a page\r
-        * @author TeRanEX\r
-        */\r
-    function parse_itemoptions() {\r
-               global $itemid;\r
-               ADMIN::_insertPluginOptions('item', $itemid);\r
-    }\r
-    \r
-    function parse_ticket() {\r
-       global $manager;\r
-       $manager->addTicketHidden();\r
-    }\r
-       \r
-       /**\r
-        * convenience method\r
-        */\r
-       function _jsbutton($type, $code ,$tooltip) {\r
-       ?>\r
-                       <span class="jsbutton"\r
-                               onmouseover="BtnHighlight(this);" \r
-                               onmouseout="BtnNormal(this);" \r
-                               onclick="<?php echo $code?>" >                  \r
-                               <img src="images/button-<?php echo $type?>.gif" alt="<?php echo $tooltip?>" width="16" height="16"/>\r
-                       </span>                         \r
-       <?php   }\r
-       \r
-       function _jsbuttonspacer() {\r
-               echo '<span class="jsbuttonspacer"></span>';\r
-       }\r
-       \r
-}\r
\r
- ?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: PAGEFACTORY.php,v 1.6 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: PAGEFACTORY.php,v 1.5 2005/08/13 07:33:02 kimitake Exp $
+ */
+
+/**
+ * The formfactory class can be used to insert add/edit item forms into
+ * admin area, bookmarklet, skins or any other places where such a form
+ * might be needed
+ */
+class PAGEFACTORY extends BaseActions {
+
+       // ref to the blog object for which an add:edit form is created
+       var $blog;
+
+       // allowed actions (for parser)
+       var $actions;
+
+       // allowed types of forms (bookmarklet/admin)
+       var $allowedTypes;
+       var $type;              // one of the types in $allowedTypes
+
+       // 'add' or 'edit'
+       var $method;
+
+       // info to fill out in the form (e.g. catid, itemid, ...)
+       var $variables;
+
+       /**
+        * creates a new PAGEFACTORY object
+        */
+       function PAGEFACTORY($blogid) {
+               // call constructor of superclass first
+               $this->BaseActions();
+
+               global $manager;
+               $this->blog =& $manager->getBlog($blogid);
+
+               // TODO: move the definition of actions to the createXForm
+               // methods
+               $this->actions = Array(
+                       'actionurl',
+                       'title',
+                       'body',
+                       'more',
+                       'blogid',
+                       'bloglink',
+                       'blogname',
+                       'authorname',
+                       'checkedonval',
+                       'helplink',
+                       'currenttime',
+                       'itemtime',
+                       'init',
+                       'text',
+                       'jsinput',
+                       'jsbuttonbar',
+                       'categories',
+                       'contents',
+                       'ifblogsetting',
+                       'ifitemproperty',
+                       'else',
+                       'endif',
+                       'pluginextras',
+                       'itemoptions',
+                       'extrahead',
+                       'ticket'
+               );
+
+               // TODO: maybe add 'skin' later on?
+               // TODO: maybe add other pages from admin area
+               $this->allowedTypes = Array('bookmarklet','admin');
+       }
+
+       /**
+        * creates a "add item" form for a given type of page
+        *
+        * @param type
+        *              'admin' or 'bookmarklet'
+        */
+       function createAddForm($type, $contents = array()) {
+               if (!in_array($type, $this->allowedTypes))
+                       return;
+               $this->type = $type;
+               $this->method = 'add';
+
+               global $manager;
+               $manager->notify('PreAddItemForm', array('contents' => &$contents, 'blog' => &$this->blog));
+
+               $this->createForm($contents);
+       }
+
+       /**
+        * creates a "add item" form for a given type of page
+        *
+        * @param type
+        *              'admin' or 'bookmarklet'
+        * @param contents
+        *              An associative array
+        *                      'author' => author
+        *                      '' =>
+        */
+       function createEditForm($type, $contents) {
+               if (!in_array($type, $this->allowedTypes))
+                       return;
+               $this->type = $type;
+               $this->method = 'edit';
+               $this->createForm($contents);
+       }
+
+       /**
+        * (private) creates a form for a given type of page
+        */
+       function createForm($contents) {
+               // save contents
+               $this->variables = $contents;
+
+               // get template to use
+               $template = $this->getTemplateFor($this->type);
+
+               // use the PARSER engine to parse that template
+               $parser =& new PARSER($this->actions, $this);
+               $parser->parse($template);
+       }
+
+       /**
+        * returns an appropriate template
+        */
+       function getTemplateFor($type) {
+               global $DIR_LIBS;
+
+               $filename = $DIR_LIBS . 'include/' . $this->type . '-' . $this->method . '.template';
+
+               if (!file_exists($filename))
+                       return '';
+
+               $fsize = filesize($filename);
+               if ($fsize <= 0)
+                       return '';
+
+               // read file and return it
+               $fd = fopen ($filename, 'r');
+               $contents = fread ($fd, $fsize);
+               fclose ($fd);
+
+               return $contents;
+
+       }
+
+       // create category dropdown box
+       function parse_categories($startidx = 0) {
+                       if ($this->variables['catid'])
+                               $catid = $this->variables['catid'];                             // on edit item
+                       else
+                               $catid = $this->blog->getDefaultCategory();             // on add item
+
+                       ADMIN::selectBlogCategory('catid',$catid,$startidx,1,$this->blog->getID());
+       }
+
+       function parse_blogid() {
+               echo $this->blog->getID();
+       }
+
+       function parse_blogname() {
+               echo $this->blog->getName();
+       }
+
+       function parse_bloglink() {
+               echo '<a href="'.htmlspecialchars($this->blog->getURL()).'">'.$this->blog->getName().'</a>';
+       }
+
+       function parse_authorname() {
+               // don't use on add item?
+               global $member;
+               echo $member->getDisplayName();
+       }
+
+       function parse_title() {
+               echo $this->contents['title'];
+       }
+
+       /**
+        * Indicates the start of a conditional block of data. It will be added to
+        * the output only if the blogsetting with the given name equals the
+        * given value (default for value = 1 = true)
+        *
+        * the name of the blogsetting is the column name in the nucleus_blog table
+        *
+        * the conditional block ends with an <endif> var
+        */
+       function parse_ifblogsetting($name,$value=1) {
+               $this->_addIfCondition(($this->blog->getSetting($name) == $value));
+       }
+
+       function parse_ifitemproperty($name,$value=1) {
+               $this->_addIfCondition(($this->variables[$name] == $value));
+       }
+
+       function parse_helplink($topic) {
+               help($topic);
+       }
+
+       // for future items
+       function parse_currenttime($what) {
+               $nu = getdate($this->blog->getCorrectTime());
+               echo $nu[$what];
+       }
+
+       // date change on edit item
+       function parse_itemtime($what) {
+               $itemtime = getdate($this->variables['timestamp']);
+               echo $itemtime[$what];
+       }
+
+       // some init stuff for all forms
+       function parse_init() {
+               $authorid = ($this->method == 'edit') ? $this->variables['authorid'] : '';
+               $this->blog->insertJavaScriptInfo($authorid);
+       }
+
+       // on bookmarklets only: insert extra html header information (by plugins)
+       function parse_extrahead() {
+               global $manager;
+
+               $extrahead = '';
+
+               $manager->notify(
+                       'BookmarkletExtraHead',
+                       array(
+                               'extrahead' => &$extrahead
+                       )
+               );
+
+               echo $extrahead;
+       }
+
+       // inserts some localized text
+       function parse_text($which) {
+               // constant($which) only available from 4.0.4 :(
+               if (defined($which)) {
+                       eval("echo $which;");
+               } else {
+                       echo $which;    // this way we see where definitions are missing
+               }
+
+       }
+
+       function parse_contents($which) {
+               echo htmlspecialchars($this->variables[$which]);
+       }
+
+       function parse_checkedonval($value, $name) {
+               if ($this->variables[$name] == $value)
+                       echo "checked='checked'";
+       }
+
+       // extra javascript for input and textarea fields
+       function parse_jsinput($which) {
+               global $CONF;
+       ?>
+                       name="<?php echo $which?>"
+                       id="input<?php echo $which?>"
+       <?php
+               if ($CONF['DisableJsTools'] != 1) {
+       ?>
+                       onkeyup="storeCaret(this); updPreview('<?php echo $which?>'); doMonitor();"
+                       onclick="storeCaret(this);"
+                       onselect="storeCaret(this);"
+
+       <?php
+               }
+               else if ($CONF['DisableJsTools'] == 0) {
+       ?>
+                       onkeyup="doMonitor();"
+                       onkeypress="shortCuts();"
+       <?php
+               }
+               else {
+       ?>
+                       onkeyup="doMonitor();"
+       <?php
+               }
+       }
+
+       // shows the javascript button bar
+       function parse_jsbuttonbar($extrabuttons = "") {
+               global $CONF;
+               switch($CONF['DisableJsTools']) {
+
+                       case "0":
+                               echo '<div class="jsbuttonbar">';
+
+                                       $this->_jsbutton('cut','cutThis()',_ADD_CUT_TT . " (Ctrl + X)");
+                                       $this->_jsbutton('copy','copyThis()',_ADD_COPY_TT . " (Ctrl + C)");
+                                       $this->_jsbutton('paste','pasteThis()',_ADD_PASTE_TT . " (Ctrl + V)");
+                                       $this->_jsbuttonspacer();
+                                       $this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT ." (Ctrl + Shift + B)");
+                                       $this->_jsbutton('italic',"italicThis()",_ADD_ITALIC_TT ." (Ctrl + Shift + I)");
+                                       $this->_jsbutton('link',"ahrefThis()",_ADD_HREF_TT ." (Ctrl + Shift + A)");
+                                       $this->_jsbuttonspacer();
+                                       $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);
+                                       $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT);
+                                       $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT);
+                                       $this->_jsbuttonspacer();
+                                       $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT);
+                                       $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT);
+
+
+                                       if ($extrabuttons) {
+                                               $btns = explode('+',$extrabuttons);
+                                               $this->_jsbuttonspacer();
+                                               foreach ($btns as $button) {
+                                                       switch($button) {
+                                                               case "media":
+                                                                       $this->_jsbutton('media',"addMedia()",_ADD_MEDIA_TT .   " (Ctrl + Shift + M)");
+                                                                       break;
+                                                               case "preview":
+                                                                       $this->_jsbutton('preview',"showedit()",_ADD_PREVIEW_TT);
+                                                                       break;
+                                                       }
+                                               }
+                                       }
+
+                               echo '</div>';
+
+                               break;
+                       case "2":
+                               echo '<div class="jsbuttonbar">';
+
+                                       $this->_jsbutton('bold',"boldThis()",'');
+                                       $this->_jsbutton('italic',"italicThis()",'');
+                                       $this->_jsbutton('link',"ahrefThis()",'');
+                                       $this->_jsbuttonspacer();
+                                       $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);
+                                       $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT);
+                                       $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT);
+                                       $this->_jsbuttonspacer();
+                                       $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT);
+                                       $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT);
+
+
+                                       if ($extrabuttons) {
+                                               $btns = explode('+',$extrabuttons);
+                                               $this->_jsbuttonspacer();
+                                               foreach ($btns as $button) {
+                                                       switch($button) {
+                                                               case "media":
+                                                                       $this->_jsbutton('media',"addMedia()",'');
+                                                                       break;
+                                                       }
+                                               }
+                                       }
+
+                               echo '</div>';
+
+                               break;
+               }
+       }
+
+       /**
+        * Allows plugins to add their own custom fields
+        */
+       function parse_pluginextras() {
+               global $manager;
+
+               switch ($this->method) {
+                       case 'add':
+                               $manager->notify('AddItemFormExtras',
+                                               array(
+                                                       'blog' => &$this->blog
+                                               )
+                               );
+                               break;
+                       case 'edit':
+                               $manager->notify('EditItemFormExtras',
+                                               array(
+                                                       'variables' => $this->variables,
+                                                       'blog' => &$this->blog,
+                                                       'itemid' => $this->variables['itemid']
+                                               )
+                               );
+                               break;
+               }
+       }
+
+       /**
+        * Adds the itemOptions of a plugin to a page
+        * @author TeRanEX
+        */
+       function parse_itemoptions() {
+               global $itemid;
+               ADMIN::_insertPluginOptions('item', $itemid);
+       }
+
+       function parse_ticket() {
+               global $manager;
+               $manager->addTicketHidden();
+       }
+
+       /**
+        * convenience method
+        */
+       function _jsbutton($type, $code ,$tooltip) {
+       ?>
+                       <span class="jsbutton"
+                               onmouseover="BtnHighlight(this);"
+                               onmouseout="BtnNormal(this);"
+                               onclick="<?php echo $code?>" >
+                               <img src="images/button-<?php echo $type?>.gif" alt="<?php echo $tooltip?>" width="16" height="16"/>
+                       </span>
+       <?php   }
+
+       function _jsbuttonspacer() {
+               echo '<span class="jsbuttonspacer"></span>';
+       }
+
+}
+
+ ?>
\ No newline at end of file
index 29a5864..d4b4415 100755 (executable)
-<?php\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: PARSER.php,v 1.4 2005-08-13 07:33:02 kimitake Exp $\r
- * $NucleusJP: PARSER.php,v 1.3 2005/03/12 06:19:05 kimitake Exp $\r
- */\r
\r
-/**\r
- * This is the parser class of Nucleus. It is used for various things (skin parsing,\r
- * form generation, ...)\r
- */\r
-class PARSER {\r
-\r
-       // array with the names of all allowed actions\r
-       var $actions;\r
-       \r
-       // reference to actions handler\r
-       var $handler;\r
-       \r
-       // delimiters that can be used for skin/templatevars\r
-       var $delim;\r
-       \r
-       // parameter delimiter (to separate skinvar params)\r
-       var $pdelim;\r
-       \r
-       // usually set to 0. When set to 1, all skinvars are allowed regardless of $actions\r
-       var $norestrictions;\r
-       \r
-       /**\r
-        * Creates a new parser object with the given allowed actions \r
-        * and the given handler\r
-        *\r
-        * @param $allowedActions array\r
-        * @param $handler class object with functions for each action (reference)\r
-        * @param $delim optional delimiter\r
-        * @param $paramdelim optional parameterdelimiter        \r
-        */\r
-       function PARSER($allowedActions, &$handler, $delim = '(<%|%>)', $pdelim = ',') {\r
-               $this->actions = $allowedActions;\r
-               $this->handler =& $handler;\r
-               $this->delim = $delim;\r
-               $this->pdelim = $pdelim;\r
-               $this->norestrictions = 0;      // set this to 1 to disable checking for allowedActions\r
-       }\r
-       \r
-       /**\r
-        * Parses the given contents and outputs it\r
-        */\r
-       function parse(&$contents) {\r
-       \r
-               $pieces = preg_split('/'.$this->delim.'/',$contents);\r
-               \r
-               $maxidx = sizeof($pieces);\r
-               for ($idx = 0;$idx<$maxidx;$idx++) {\r
-                       echo $pieces[$idx];             \r
-                       $idx++;\r
-                       $this->doAction($pieces[$idx]);\r
-               }\r
-       }\r
-       \r
-\r
-       /**\r
-         * handle an action \r
-         */\r
-       function doAction($action) {\r
-               global $manager;\r
-\r
-               if (!$action) return;\r
-               \r
-               // split into action name + arguments\r
-               if (strstr($action,'(')) {\r
-                       $paramStartPos = strpos($action, '(');\r
-                       $params = substr($action, $paramStartPos + 1, strlen($action) - $paramStartPos - 2);\r
-                       $action = substr($action, 0, $paramStartPos);\r
-                       $params = explode ($this->pdelim, $params);\r
-                       \r
-                       // trim parameters \r
-                       // for PHP versions lower than 4.0.6:\r
-                       //   - add // before '$params = ...' \r
-                       //   - remove // before 'foreach'\r
-                       $params = array_map('trim',$params);\r
-                       // foreach ($params as $key => $value) { $params[$key] = trim($value); }                        \r
-               } else {\r
-                       // no parameters\r
-                       $params = array();\r
-               }\r
-       \r
-               $actionlc = strtolower($action);\r
-               \r
-               // skip execution of skinvars while inside an if condition which hides this part of the page\r
-               if (!$this->handler->if_currentlevel && ($actionlc != 'else') && ($actionlc != 'endif') && (substr($actionlc,0,2) != 'if'))\r
-                       return;\r
-       \r
-               if (in_array($actionlc, $this->actions) || $this->norestrictions ) {\r
-                       // when using PHP versions lower than 4.0.5, uncomment the line before\r
-                       // and comment the call_user_func_array call\r
-                       //$this->call_using_array($action, $this->handler, $params);\r
-                       call_user_func_array(array(&$this->handler,'parse_' . $actionlc), $params);\r
-               } else {\r
-                       // redirect to plugin action if possible\r
-                       if (in_array('plugin', $this->actions) && $manager->pluginInstalled('NP_'.$action))\r
-                               $this->doAction('plugin('.$action.$this->pdelim.implode($this->pdelim,$params).')');\r
-                       else\r
-                               echo '<b>DISALLOWED (' , $action , ')</b>';\r
-               }\r
-               \r
-       }\r
-       \r
-       /**\r
-         * Calls a method using an array of parameters (for use with PHP versions lower than 4.0.5)\r
-         * ( = call_user_func_array() function )\r
-         */\r
-       function call_using_array($methodname, &$handler, $paramarray) {\r
-\r
-               $methodname = 'parse_' . $methodname;\r
-               \r
-               if (!method_exists($handler, $methodname)) {\r
-                       return;\r
-               }\r
-\r
-               $command = 'call_user_func(array(&$handler,$methodname)';\r
-               for ($i = 0; $i<count($paramarray); $i++)\r
-                       $command .= ',$paramarray[' . $i . ']';\r
-               $command .= ');';\r
-               eval($command); // execute the correct method\r
-       }\r
-       \r
-       function setProperty($property, $value) {\r
-               global $manager;\r
-               $manager->setParserProperty($property, $value);\r
-       }\r
-       \r
-       function getProperty($name) {\r
-               global $manager;\r
-               return $manager->getParserProperty($name);\r
-       }\r
-       \r
-       \r
-}\r
-\r
-/**\r
- * This class contains parse actions that are available in all ACTION classes\r
- * e.g. include, phpinclude, parsedinclude, skinfile, ...\r
- *\r
- * It should never be used on it's own\r
- */\r
-class BaseActions {\r
-       \r
-       // depth level for includes (max. level is 3)\r
-       var $level;\r
-       \r
-       // array of evaluated conditions (true/false). The element at the end is the one for the most nested\r
-       // if block.\r
-       var $if_conditions;\r
-       \r
-       // at all times, can be evaluated to either true if the current block needs to be displayed. This \r
-       // variable is used to decide to skip skinvars in parts that will never be outputted.\r
-       var $if_currentlevel;\r
-       \r
-       // contains a search string with keywords that need to be highlighted. These get parsed into $aHighlight\r
-       var $strHighlight;\r
-       \r
-       // array of keywords that need to be highlighted in search results (see the highlight() \r
-       // and parseHighlight() methods)\r
-       var $aHighlight;\r
-       \r
-\r
-       // reference to the parser object that is using this object as actions-handler\r
-\r
-       var $parser;\r
-       \r
-\r
-       function BaseActions() {\r
-               $this->level = 0; \r
-               \r
-               // if nesting level\r
-               $this->if_conditions = array(); // array on which condition values are pushed/popped\r
-               $this->if_currentlevel = 1;             // 1 = current level is displayed; 0 = current level not displayed\r
-\r
-               // highlights           \r
-               $this->strHighlight = '';                       // full highlight\r
-               $this->aHighlight = array();            // parsed highlight\r
-               \r
-       }\r
-\r
-       // include file (no parsing of php)\r
-       function parse_include($filename) {\r
-               @readfile($this->getIncludeFileName($filename));\r
-       }\r
-       \r
-       // php-include file \r
-       function parse_phpinclude($filename) {\r
-               includephp($this->getIncludeFileName($filename));\r
-       }       \r
-       // parsed include\r
-       function parse_parsedinclude($filename) {\r
-               // check current level\r
-               if ($this->level > 3) return;   // max. depth reached (avoid endless loop)\r
-               $filename = $this->getIncludeFileName($filename);\r
-               if (!file_exists($filename)) return '';\r
-               \r
-               $fsize = filesize($filename);\r
-               \r
-               // nothing to include\r
-               if ($fsize <= 0)\r
-                       return;\r
-               \r
-               $this->level = $this->level + 1;\r
-               \r
-               // read file \r
-               $fd = fopen ($filename, 'r');\r
-               $contents = fread ($fd, $fsize);\r
-               fclose ($fd);           \r
-               \r
-               // parse file contents\r
-               $this->parser->parse($contents);\r
-               \r
-               $this->level = $this->level - 1;                \r
-       }\r
-       \r
-       /**\r
-        * Returns the correct location of the file to be included, according to\r
-        * parser properties\r
-        *\r
-        * IF IncludeMode = 'skindir' => use skindir\r
-        */\r
-       function getIncludeFileName($filename) {\r
-               // leave absolute filenames and http urls as they are\r
-               if (\r
-                               (substr($filename,0,1) == '/')\r
-                       ||      (substr($filename,0,7) == 'http://')\r
-                       ||      (substr($filename,0,6) == 'ftp://')                     \r
-                       )\r
-                       return $filename;\r
-       \r
-               $filename = PARSER::getProperty('IncludePrefix') . $filename;\r
-               if (PARSER::getProperty('IncludeMode') == 'skindir') {\r
-                       global $DIR_SKINS;\r
-                       return $DIR_SKINS . $filename;\r
-               } else {\r
-                       return $filename;\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Inserts an url relative to the skindir (useful when doing import/export)\r
-        *\r
-        * e.g. <skinfile(default/myfile.sth)>\r
-        */\r
-       function parse_skinfile($filename) {\r
-               global $CONF;\r
-               \r
-               echo $CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix') . $filename;\r
-       }\r
-       \r
-       /**\r
-        * Sets a property for the parser\r
-        */\r
-       function parse_set($property, $value) {\r
-               PARSER::setProperty($property, $value);\r
-       }\r
-       \r
-       /**\r
-        * Helper function: add if condition\r
-        */\r
-       function _addIfCondition($condition) {\r
-       \r
-               array_push($this->if_conditions,$condition);\r
-       \r
-               $this->_updateTopIfCondition();\r
-                       \r
-               ob_start();             \r
-       }\r
-       \r
-       function _updateTopIfCondition() {\r
-               if (sizeof($this->if_conditions) == 0) \r
-                       $this->if_currentlevel = 1;\r
-               else\r
-                       $this->if_currentlevel = $this->if_conditions[sizeof($this->if_conditions) - 1];\r
-       }\r
-       \r
-       /**\r
-        * returns the currently top if condition\r
-        */\r
-       function _getTopIfCondition() {\r
-               return $this->if_currentlevel;\r
-       }\r
-       \r
-       /**\r
-        * else\r
-        */\r
-       function parse_else() {\r
-               if (sizeof($this->if_conditions) == 0) return;\r
-               $old = $this->if_currentlevel;\r
-               if (array_pop($this->if_conditions)) {\r
-                       ob_end_flush();\r
-                       $this->_addIfCondition(0);\r
-               } else {\r
-                       ob_end_clean();\r
-                       $this->_addIfCondition(1);\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Ends a conditional if-block \r
-        * see e.g. ifcat (BLOG), ifblogsetting (PAGEFACTORY)\r
-        */\r
-       function parse_endif() {\r
-               // we can only close what has been opened\r
-               if (sizeof($this->if_conditions) == 0) return;\r
-               \r
-               if (array_pop($this->if_conditions)) {\r
-                       ob_end_flush();\r
-               } else {\r
-                       ob_end_clean();\r
-               }\r
-               \r
-               $this->_updateTopIfCondition();\r
-       }\r
-       \r
-       \r
-       /** \r
-        * Sets the search terms to be highlighted\r
-        *\r
-        * @param $highlight\r
-        *              A series of search terms\r
-        */\r
-       function setHighlight($highlight) {     \r
-               $this->strHighlight = $highlight;\r
-               if ($highlight) {\r
-                       $this->aHighlight = parseHighlight($highlight); \r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Applies the highlight to the given piece of text\r
-        *\r
-        * @param &$data\r
-        *              Data that needs to be highlighted\r
-        * @see setHighlight\r
-        */\r
-       function highlight(&$data) {\r
-               if ($this->aHighlight)\r
-                       return highlight($data,$this->aHighlight,$this->template['SEARCH_HIGHLIGHT']);\r
-               else\r
-                       return $data;\r
-       }\r
-       \r
-       \r
-\r
-}\r
\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: PARSER.php,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: PARSER.php,v 1.4 2005/08/13 07:33:02 kimitake Exp $
+ */
+
+// temporary: dirt way to separe class BaseActions from PARSER
+require_once $DIR_LIBS . 'BaseActions.php';
+/**
+ * This is the parser class of Nucleus. It is used for various things (skin parsing,
+ * form generation, ...)
+ */
+class PARSER {
+
+       // array with the names of all allowed actions
+       var $actions;
+
+       // reference to actions handler
+       var $handler;
+
+       // delimiters that can be used for skin/templatevars
+       var $delim;
+
+       // parameter delimiter (to separate skinvar params)
+       var $pdelim;
+
+       // usually set to 0. When set to 1, all skinvars are allowed regardless of $actions
+       var $norestrictions;
+
+       /**
+        * Creates a new parser object with the given allowed actions
+        * and the given handler
+        *
+        * @param $allowedActions array
+        * @param $handler class object with functions for each action (reference)
+        * @param $delim optional delimiter
+        * @param $paramdelim optional parameterdelimiter
+        */
+       function PARSER($allowedActions, &$handler, $delim = '(<%|%>)', $pdelim = ',') {
+               $this->actions = $allowedActions;
+               $this->handler =& $handler;
+               $this->delim = $delim;
+               $this->pdelim = $pdelim;
+               $this->norestrictions = 0;      // set this to 1 to disable checking for allowedActions
+       }
+
+       /**
+        * Parses the given contents and outputs it
+        */
+       function parse(&$contents) {
+
+               $pieces = preg_split('/'.$this->delim.'/',$contents);
+
+               $maxidx = sizeof($pieces);
+               for ($idx = 0; $idx < $maxidx; $idx++) {
+                       echo $pieces[$idx];
+                       $idx++;
+                       if ($idx < $maxidx) {
+                               $this->doAction($pieces[$idx]);
+                       }
+               }
+       }
+
+
+       /**
+         * handle an action
+         */
+       function doAction($action) {
+               global $manager;
+
+               if (!$action) return;
+
+               // split into action name + arguments
+               if (strstr($action,'(')) {
+                       $paramStartPos = strpos($action, '(');
+                       $params = substr($action, $paramStartPos + 1, strlen($action) - $paramStartPos - 2);
+                       $action = substr($action, 0, $paramStartPos);
+                       $params = explode ($this->pdelim, $params);
+
+                       // trim parameters
+                       // for PHP versions lower than 4.0.6:
+                       //   - add // before '$params = ...'
+                       //   - remove // before 'foreach'
+                       $params = array_map('trim',$params);
+                       // foreach ($params as $key => $value) { $params[$key] = trim($value); }
+               } else {
+                       // no parameters
+                       $params = array();
+               }
+
+               $actionlc = strtolower($action);
+
+               // skip execution of skinvars while inside an if condition which hides this part of the page
+               if (!$this->handler->if_currentlevel && ($actionlc != 'else') && ($actionlc != 'elseif') && ($actionlc != 'endif') && ($actionlc != 'ifnot') && ($actionlc != 'elseifnot') && (substr($actionlc,0,2) != 'if'))
+                       return;
+
+               if (in_array($actionlc, $this->actions) || $this->norestrictions ) {
+                       // when using PHP versions lower than 4.0.5, uncomment the line before
+                       // and comment the call_user_func_array call
+                       //$this->call_using_array($action, $this->handler, $params);
+                       call_user_func_array(array(&$this->handler,'parse_' . $actionlc), $params);
+               } else {
+                       // redirect to plugin action if possible
+                       if (in_array('plugin', $this->actions) && $manager->pluginInstalled('NP_'.$action))
+                               $this->doAction('plugin('.$action.$this->pdelim.implode($this->pdelim,$params).')');
+                       else
+                               echo '&lt;%' , $action , '(', implode($this->pdelim, $params), ')%&gt;';
+               }
+
+       }
+
+       /**
+         * Calls a method using an array of parameters (for use with PHP versions lower than 4.0.5)
+         * ( = call_user_func_array() function )
+         */
+       function call_using_array($methodname, &$handler, $paramarray) {
+
+               $methodname = 'parse_' . $methodname;
+
+               if (!method_exists($handler, $methodname)) {
+                       return;
+               }
+
+               $command = 'call_user_func(array(&$handler,$methodname)';
+               for ($i = 0; $i<count($paramarray); $i++)
+                       $command .= ',$paramarray[' . $i . ']';
+               $command .= ');';
+               eval($command); // execute the correct method
+       }
+
+       function setProperty($property, $value) {
+               global $manager;
+               $manager->setParserProperty($property, $value);
+       }
+
+       function getProperty($name) {
+               global $manager;
+               return $manager->getParserProperty($name);
+       }
+
+
+}
+
+?>
\ No newline at end of file
index c087e67..0511ebf 100755 (executable)
-<?php\r
-       /*\r
-        * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
-        * Copyright (C) 2002-2005 The Nucleus Group\r
-        *\r
-        * This program is free software; you can redistribute it and/or\r
-        * modify it under the terms of the GNU General Public License\r
-        * as published by the Free Software Foundation; either version 2\r
-        * of the License, or (at your option) any later version.\r
-        * (see nucleus/documentation/index.html#license for more info)\r
-        */\r
-       /**\r
-        * This is an (abstract) class of which all Nucleus Plugins must inherit\r
-        *\r
-        * for more information on plugins and how to write your own, see the\r
-        * plugins.html file that is included with the Nucleus documenation\r
-        *\r
-        * @license http://nucleuscms.org/license.txt GNU General Public License\r
-        * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
-        * @version $Id: PLUGIN.php,v 1.4 2005-08-13 07:33:02 kimitake Exp $\r
-        * $NucleusJP: PLUGIN.php,v 1.3 2005/03/12 06:19:05 kimitake Exp $\r
-        */\r
-       class NucleusPlugin {\r
-\r
-               // these functions _have_ to be redefined in your plugin\r
-\r
-               function getName() { return 'Undefined'; }\r
-               function getAuthor()  { return 'Undefined'; }\r
-               function getURL()  { return 'Undefined'; }\r
-               function getVersion() { return '0.0'; }\r
-               function getDescription() { return 'Undefined';}\r
-\r
-               // these function _may_ be redefined in your plugin\r
-\r
-               function getMinNucleusVersion() { return 150; }\r
-               function getMinNucleusPatchLevel() { return 0; }\r
-               function getEventList() { return array(); }\r
-               function getTableList() { return array(); }\r
-               function hasAdminArea() { return 0; }\r
-\r
-               function install() {}\r
-               function unInstall() {}\r
-\r
-               function init() {}\r
-\r
-               function doSkinVar($skinType) {}\r
-               function doTemplateVar(&$item) {\r
-                       $args = func_get_args();\r
-                       array_shift($args);\r
-                       array_unshift($args, 'template');\r
-                       call_user_func_array(array(&$this,'doSkinVar'),$args);\r
-               }\r
-               function doTemplateCommentsVar(&$item, &$comment) {\r
-                       $args = func_get_args();\r
-                       array_shift($args);\r
-                       array_shift($args);\r
-                       array_unshift($args, 'template');\r
-                       call_user_func_array(array(&$this,'doSkinVar'),$args);\r
-               }\r
-               function doAction($type) { return 'No Such Action'; }\r
-\r
-               /**\r
-                * Checks if a plugin supports a certain feature.\r
-                *\r
-                * @returns 1 if the feature is reported, 0 if not\r
-                * @param $feature\r
-                *              Name of the feature. See plugin documentation for more info\r
-                *                      'SqlTablePrefix' -> if the plugin uses the sql_table() method to get table names\r
-                *                      'HelpPage' -> if the plugin provides a helppage\r
-                */\r
-               function supportsFeature($feature) {\r
-                       return 0;\r
-               }\r
-\r
-               /**\r
-                * Report a list of plugin that is required to function\r
-                * \r
-                * @returns an array of names of plugin, an empty array indicates no dependency\r
-                */\r
-               function getPluginDep() { return array(); }\r
-\r
-               // these helper functions should not be redefined in your plugin\r
-\r
-               /**\r
-                 * Creates a new option for this plugin\r
-                 *\r
-                 * @param name\r
-                 *             A string uniquely identifying your option. (max. length is 20 characters)\r
-                 * @param description\r
-                 *             A description that will show up in the nucleus admin area (max. length: 255 characters)\r
-                 * @param type\r
-                 *             Either 'text', 'yesno' or 'password'\r
-                 *             This info is used when showing 'edit plugin options' screens\r
-                 * @param value\r
-                 *             Initial value for the option (max. value length is 128 characters)\r
-                 */\r
-               function createOption($name, $desc, $type, $defValue = '', $typeExtras = '') {\r
-                       return $this->_createOption('global', $name, $desc, $type, $defValue, $typeExtras);\r
-               }\r
-               function createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '') {\r
-                       return $this->_createOption('blog', $name, $desc, $type, $defValue, $typeExtras);\r
-               }\r
-               function createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '') {\r
-                       return $this->_createOption('member', $name, $desc, $type, $defValue, $typeExtras);\r
-               }\r
-               function createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '') {\r
-                       return $this->_createOption('category', $name, $desc, $type, $defValue, $typeExtras);\r
-               }\r
-        function createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '') {\r
-                       return $this->_createOption('item', $name, $desc, $type, $defValue, $typeExtras);\r
-               }\r
-\r
-               /**\r
-                 * Removes the option from the database\r
-                 *\r
-                 * Note: Options get erased automatically on plugin uninstall\r
-                 */\r
-               function deleteOption($name) {\r
-                       return $this->_deleteOption('global', $name);\r
-               }\r
-               function deleteBlogOption($name) {\r
-                       return $this->_deleteOption('blog', $name);\r
-               }\r
-               function deleteMemberOption($name) {\r
-                       return $this->_deleteOption('member', $name);\r
-               }\r
-               function deleteCategoryOption($name) {\r
-                       return $this->_deleteOption('category', $name);\r
-               }\r
-        function deleteItemOption($name) {\r
-                       return $this->_deleteOption('item', $name);\r
-               }\r
-\r
-               /**\r
-                 * Sets the value of an option to something new\r
-                 */\r
-               function setOption($name, $value) {\r
-                       return $this->_setOption('global', 0, $name, $value);\r
-               }\r
-               function setBlogOption($blogid, $name, $value) {\r
-                       return $this->_setOption('blog', $blogid, $name, $value);\r
-               }\r
-               function setMemberOption($memberid, $name, $value) {\r
-                       return $this->_setOption('member', $memberid, $name, $value);\r
-               }\r
-               function setCategoryOption($catid, $name, $value) {\r
-                       return $this->_setOption('category', $catid, $name, $value);\r
-               }\r
-        function setItemOption($itemid, $name, $value) {\r
-                       return $this->_setOption('item', $itemid, $name, $value);\r
-               }\r
-\r
-               /**\r
-                 * Retrieves the current value for an option\r
-                 */\r
-               function getOption($name)\r
-               {\r
-                       // only request the options the very first time. On subsequent requests\r
-                       // the static collection is used to save SQL queries.\r
-                       if ($this->plugin_options == 0)\r
-                       {\r
-                               $this->plugin_options = array();        \r
-                               $query = mysql_query(\r
-                                        'SELECT d.oname as name, o.ovalue as value '.\r
-                                        'FROM '.\r
-                                        sql_table('plugin_option').' o, '.\r
-                                        sql_table('plugin_option_desc').' d '.\r
-                                        'WHERE d.opid='. intval($this->getID()).' AND d.oid=o.oid'\r
-                               );\r
-                               while ($row = mysql_fetch_object($query))\r
-                                       $this->plugin_options[strtolower($row->name)] = $row->value;\r
-                 }\r
-                 if (isset($this->plugin_options[strtolower($name)]))\r
-                               return $this->plugin_options[strtolower($name)];\r
-                 else\r
-                               return $this->_getOption('global', 0, $name);\r
-               }                 \r
-\r
-               function getBlogOption($blogid, $name) {\r
-                       return $this->_getOption('blog', $blogid, $name);\r
-               }\r
-               function getMemberOption($memberid, $name) {\r
-                       return $this->_getOption('member', $memberid, $name);\r
-               }\r
-               function getCategoryOption($catid, $name) {\r
-                       return $this->_getOption('category', $catid, $name);\r
-               }\r
-        function getItemOption($itemid, $name) {\r
-                       return $this->_getOption('item', $itemid, $name);\r
-               }\r
-\r
-               /**\r
-                * Retrieves an associative array with the option value for each\r
-                * context id\r
-                */\r
-               function getAllBlogOptions($name) {\r
-                       return $this->_getAllOptions('blog', $name);\r
-               }\r
-               function getAllMemberOptions($name) {\r
-                       return $this->_getAllOptions('member', $name);\r
-               }\r
-               function getAllCategoryOptions($name) {\r
-                       return $this->_getAllOptions('category', $name);\r
-               }\r
-        function getAllItemOptions($name) {\r
-                       return $this->_getAllOptions('item', $name);\r
-               }\r
-               \r
-               /**\r
-         * Retrieves an indexed array with the top (or bottom) of an option\r
-                * (delegates to _getOptionTop())\r
-         */\r
-               function getBlogOptionTop($name, $amount = 10, $sort = 'desc') {\r
-                       return $this->_getOptionTop('blog', $name, $amount, $sort);\r
-               }\r
-               function getMemberOptionTop($name, $amount = 10, $sort = 'desc') {\r
-                       return $this->_getOptionTop('member', $name, $amount, $sort);\r
-               }\r
-               function getCategoryOptionTop($name, $amount = 10, $sort = 'desc') {\r
-                       return $this->_getOptionTop('category', $name, $amount, $sort);\r
-               }\r
-               function getItemOptionTop($name, $amount = 10, $sort = 'desc') {\r
-                       return $this->_getOptionTop('item', $name, $amount, $sort);\r
-               }\r
-               \r
-               /**\r
-                * Retrieves an array of the top (or bottom) of an option from a plugin.\r
-                * @author TeRanEX\r
-                * @param  string $context the context for the option: item, blog, member,...\r
-                * @param  string $name    the name of the option\r
-                * @param  int    $amount  how many rows must be returned\r
-                * @param  string $sort    desc or asc\r
-                * @return array           array with both values and contextid's\r
-                * @access private\r
-                */\r
-        function _getOptionTop($context, $name, $amount = 10, $sort = 'desc') {\r
-                       if (($sort != 'desc') && ($sort != 'asc')) {\r
-                               $sort= 'desc';\r
-                       }\r
-\r
-                       $oid = $this->_getOID($context, $name);\r
-\r
-                       // retrieve the data and return\r
-                       $q = 'SELECT otype, oextra FROM '.sql_table('plugin_option_desc').' WHERE oid = '.$oid;\r
-                       $query = mysql_query($q);\r
-\r
-                       $o = mysql_fetch_array($query);\r
-\r
-                       if (($this->optionCanBeNumeric($o['otype'])) && ($o['oextra'] == 'number' )) {\r
-                               $orderby = 'CAST(ovalue AS SIGNED)';\r
-                       } else {\r
-                               $orderby = 'ovalue';\r
-                       }\r
-                       $q = 'SELECT ovalue value, ocontextid id FROM '.sql_table('plugin_option').' WHERE oid = '.$oid.' ORDER BY '.$orderby.' '.$sort.' LIMIT 0,'.$amount;\r
-                       $query = mysql_query($q);\r
-                       \r
-                       // create the array\r
-                       $i = 0;\r
-                       $top = array();\r
-                       while($row = mysql_fetch_array($query)) {\r
-                               $top[$i++] = $row;\r
-                       }\r
-                       \r
-                       // return the array (duh!)\r
-                       return $top;\r
-               }\r
-\r
-               /**\r
-                 * Returns the plugin ID\r
-                 */\r
-               function getID() {\r
-                       return $this->plugid;\r
-               }\r
-\r
-               /**\r
-                 * returns the URL of the admin area for this plugin (in case there's\r
-                 * no such area, the returned information is invalid)\r
-                 */\r
-               function getAdminURL() {\r
-                       global $CONF;\r
-                       return $CONF['PluginURL'] . $this->getShortName() . '/';\r
-               }\r
-\r
-               /**\r
-                 * Returns the directory where the admin directory is located and\r
-                 * where the plugin can maintain his extra files\r
-                 */\r
-               function getDirectory() {\r
-                       global $DIR_PLUGINS;\r
-                       return $DIR_PLUGINS . $this->getShortName() . '/';\r
-               }\r
-\r
-               /**\r
-                 * Derives the short name for the plugin from the classname (all lowercase)\r
-                 */\r
-               function getShortName() {\r
-                       return str_replace('np_','',strtolower(get_class($this)));\r
-               }\r
-\r
-               var $_aOptionValues;    // oid_contextid => value\r
-               var $_aOptionToInfo;    // context_name => array('oid' => ..., 'default' => ...)\r
-               var $plugin_options;    // see getOption()\r
-               var $plugid;                    // plugin id\r
-\r
-\r
-               // constructor. Initializes some internal data\r
-               function NucleusPlugin() {\r
-                       $this->_aOptionValues = array();        // oid_contextid => value\r
-                       $this->_aOptionToInfo = array();        // context_name => array('oid' => ..., 'default' => ...)\r
-                       $this->plugin_options = 0;\r
-               }\r
-\r
-               // private\r
-               function _createOption($context, $name, $desc, $type, $defValue, $typeExtras = '') {\r
-                       // create in plugin_option_desc\r
-                       $query = 'INSERT INTO ' . sql_table('plugin_option_desc')\r
-                              .' (opid, oname, ocontext, odesc, otype, odef, oextra)'\r
-                              .' VALUES ('.intval($this->plugid)\r
-                             .', \''.addslashes($name).'\''\r
-                             .', \''.addslashes($context).'\''\r
-                             .', \''.addslashes($desc).'\''\r
-                             .', \''.addslashes($type).'\''\r
-                             .', \''.addslashes($defValue).'\''\r
-                                        .', \''.addslashes($typeExtras).'\')';\r
-                       sql_query($query);\r
-                       $oid = mysql_insert_id();\r
-\r
-                       $key = $context . '_' . $name;\r
-                       $this->_aOptionToInfo[$key] = array('oid' => $oid, 'default' => $defValue);\r
-                       return 1;\r
-               }\r
-\r
-\r
-               // private\r
-               function _deleteOption($context, $name) {\r
-                       $oid = $this->_getOID($context, $name);\r
-                       if (!$oid) return 0; // no such option\r
-\r
-                       // delete all things from plugin_option\r
-                       sql_query('DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid=' . $oid);\r
-\r
-                       // delete entry from plugin_option_desc\r
-                       sql_query('DELETE FROM ' . sql_table('plugin_option_desc') . ' WHERE oid=' . $oid);\r
-\r
-                       // clear from cache\r
-                       unset($this->_aOptionToInfo[$context . '_' . $name]);\r
-                       $this->_aOptionValues = array();\r
-                       return 1;\r
-               }\r
-\r
-               /**\r
-                * private\r
-                * returns: 1 on success, 0 on failure\r
-                */\r
-               function _setOption($context, $contextid, $name, $value) {\r
-                       global $manager;\r
-\r
-                       $oid = $this->_getOID($context, $name);\r
-                       if (!$oid) return 0;\r
-\r
-                       // check if context id exists\r
-                       switch ($context) {\r
-                               case 'member':\r
-                                       if (!MEMBER::existsID($contextid)) return 0;\r
-                                       break;\r
-                               case 'blog':\r
-                                       if (!$manager->existsBlogID($contextid)) return 0;\r
-                                       break;\r
-                               case 'category':\r
-                                       if (!$manager->existsCategory($contextid)) return 0;\r
-                                       break;\r
-                case 'item':\r
-                    if (!$manager->existsItem($contextid, true, true)) return 0;\r
-                                       break;\r
-                               case 'global':\r
-                                       if ($contextid != 0) return 0;\r
-                                       break;\r
-                       }\r
-\r
-\r
-                       // update plugin_option\r
-                       sql_query('DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid='.intval($oid) . ' and ocontextid='. intval($contextid));\r
-                       sql_query('INSERT INTO ' . sql_table('plugin_option') . ' (ovalue, oid, ocontextid) VALUES (\''.addslashes($value).'\', '. intval($oid) . ', ' . intval($contextid) . ')');\r
-\r
-                       // update cache\r
-                       $this->_aOptionValues[$oid . '_' . $contextid] = $value;\r
-\r
-                       return 1;\r
-               }\r
-\r
-               // private\r
-               function _getOption($context, $contextid, $name) {\r
-                       $oid = $this->_getOID($context, $name);\r
-                       if (!$oid) return '';\r
-\r
-\r
-                       $key = $oid . '_' . $contextid;\r
-\r
-                       if (isset($this->_aOptionValues[$key]))\r
-                               return $this->_aOptionValues[$key];\r
-\r
-                       // get from DB\r
-                       $res = sql_query('SELECT ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid='.intval($oid).' and ocontextid=' . intval($contextid));\r
-\r
-                       if (!$res || (mysql_num_rows($res) == 0)) {\r
-                               $defVal = $this->_getDefVal($context, $name);\r
-                               $this->_aOptionValues[$key] = $defVal;\r
-\r
-                               // fill DB with default value\r
-                               $query = 'INSERT INTO ' . sql_table('plugin_option') . ' (oid,ocontextid,ovalue)'\r
-                                      .' VALUES ('.intval($oid).', '.intval($contextid).', \''.addslashes($defVal).'\')';\r
-                               sql_query($query);\r
-                       }\r
-                       else {\r
-                               $o = mysql_fetch_object($res);\r
-                               $this->_aOptionValues[$key] = $o->ovalue;\r
-                       }\r
-\r
-                       return $this->_aOptionValues[$key];\r
-               }\r
-\r
-               /**\r
-                * Returns assoc array with all values for a given option (one option per\r
-                * possible context id)\r
-                */\r
-               function _getAllOptions($context, $name) {\r
-                       $oid = $this->_getOID($context, $name);\r
-                       if (!$oid) return array();\r
-                       $defVal = $this->_getDefVal($context, $name);\r
-\r
-                       $aOptions = array();\r
-                       switch ($context) {\r
-                               case 'blog':\r
-                                       $r = sql_query('SELECT bnumber as contextid FROM ' . sql_table('blog'));\r
-                                       break;\r
-                               case 'category':\r
-                                       $r = sql_query('SELECT catid as contextid FROM ' . sql_table('category'));\r
-                                       break;\r
-                               case 'member':\r
-                                       $r = sql_query('SELECT mnumber as contextid FROM ' . sql_table('member'));\r
-                                       break;\r
-                       }\r
-                       if ($r) {\r
-                               while ($o = mysql_fetch_object($r))\r
-                                       $aOptions[$o->contextid] = $defVal;\r
-                       }\r
-\r
-                       $res = sql_query('SELECT ocontextid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid=' . $oid);\r
-                       while ($o = mysql_fetch_object($res))\r
-                               $aOptions[$o->ocontextid] = $o->ovalue;\r
-\r
-                       return $aOptions;\r
-               }\r
-\r
-               /**\r
-                * Gets the 'option identifier' that corresponds to a given option name.\r
-                * When this method is called for the first time, all the OIDs for the plugin\r
-                * are loaded into memory, to avoid re-doing the same query all over.\r
-                */\r
-               function _getOID($context, $name) {\r
-                       $key = $context . '_' . $name;\r
-                       $info = $this->_aOptionToInfo[$key];\r
-                       if (is_array($info)) return $info['oid'];\r
-\r
-                       // load all OIDs for this plugin from the database\r
-                       $this->_aOptionToInfo = array();\r
-                       $query = 'SELECT oid, oname, ocontext, odef FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . intval($this->plugid);\r
-                       $res = sql_query($query);\r
-                       while ($o = mysql_fetch_object($res)) {\r
-                               $k = $o->ocontext . '_' . $o->oname;\r
-                               $this->_aOptionToInfo[$k] = array('oid' => $o->oid, 'default' => $o->odef);\r
-                       }\r
-                       mysql_free_result($res);\r
-\r
-                       return $this->_aOptionToInfo[$key]['oid'];\r
-               }\r
-               function _getDefVal($context, $name) {\r
-                       $key = $context . '_' . $name;\r
-                       $info = $this->_aOptionToInfo[$key];\r
-                       if (is_array($info)) return $info['default'];\r
-               }\r
-\r
-\r
-               /**\r
-                * Deletes all option values for a given context and contextid\r
-                * (used when e.g. a blog, member or category is deleted)\r
-                *\r
-                * (static method)\r
-                */\r
-               function _deleteOptionValues($context, $contextid) {\r
-                       // delete all associated plugin options\r
-                       $aOIDs = array();\r
-                               // find ids\r
-                       $query = 'SELECT oid FROM '.sql_table('plugin_option_desc') . ' WHERE ocontext=\''.addslashes($context).'\'';\r
-                       $res = sql_query($query);\r
-                       while ($o = mysql_fetch_object($res))\r
-                               array_push($aOIDs, $o->oid);\r
-                       mysql_free_result($res);\r
-                               // delete those options. go go go\r
-                       if (count($aOIDs) > 0) {\r
-                               $query = 'DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid in ('.implode(',',$aOIDs).') and ocontextid=' . intval($contextid);\r
-                               sql_query($query);\r
-                       }\r
-               }\r
-\r
-               /**\r
-                * splits the option's typeextra field (at ;'s) to split the meta collection\r
-                * @param string $typeExtra the value of the typeExtra field of an option\r
-                * @return array array of the meta-key/value-pairs\r
-                * @author TeRanEX\r
-                * @static\r
-                */\r
-               function getOptionMeta($typeExtra) {\r
-                       $tmpMeta = explode(';', $typeExtra);\r
-                       $meta = array();\r
-                       for ($i = 0; $i < count($tmpMeta); $i++) {\r
-                               if (($i == 0) && (!strstr($tmpMeta[0], '='))) {\r
-                                       // we have the select-list\r
-                                       $meta['select'] = $tmpMeta[0];\r
-                               } else {\r
-                                       $tmp = explode('=', $tmpMeta[$i]);\r
-                                       $meta[$tmp[0]] = $tmp[1];\r
-                               }\r
-                       }\r
-                       return $meta;\r
-               }\r
-\r
-               /**\r
-                * filters the selectlists out of the meta collection\r
-                * @param string $typeExtra the value of the typeExtra field of an option\r
-                * @return string the selectlist\r
-                * @author TeRanEX\r
-                */\r
-               function getOptionSelectValues($typeExtra) {\r
-                       $meta = NucleusPlugin::getOptionMeta($typeExtra);\r
-                       //the select list must always be the first part\r
-                       return $meta['select'];\r
-               }\r
-               \r
-               /**\r
-                * checks if the eventlist in the database is up-to-date\r
-                * @return bool if it is up-to-date it return true, else false\r
-                * @author TeRanEX\r
-                */\r
-               function subscribtionListIsUptodate() {\r
-                       $res = sql_query('SELECT event FROM '.sql_table('plugin_event').' WHERE pid = '.$this->getID());\r
-                       $ev = array();\r
-                       while($a = mysql_fetch_array($res)) {\r
-                               array_push($ev, $a['event']);\r
-                       }\r
-                       if (count($ev) != count($this->getEventList())) {\r
-                               return false;\r
-                       }\r
-                       $d = array_diff($ev, $this->getEventList());\r
-                       if (count($d) > 0) {\r
-                               // there are differences so the db is not up-to-date\r
-                               return false;\r
-                       }\r
-                       return true;\r
-               }\r
-               \r
-               /**\r
-                * @param $aOptions: array ( 'oid' => array( 'contextid' => 'value'))\r
-                *        (taken from request using requestVar())\r
-                * @param $newContextid: integer (accepts a contextid when it is for a new \r
-                *        contextid there was no id available at the moment of writing the\r
-                *        formcontrols into the page (by ex: itemOptions for new item)\r
-                * @static \r
-                */\r
-               function _applyPluginOptions(&$aOptions, $newContextid = 0) {\r
-                       global $manager;\r
-                       if (!is_array($aOptions)) return;\r
-\r
-                       foreach ($aOptions as $oid => $values) {\r
-\r
-                               // get option type info\r
-                               $query = 'SELECT opid, oname, ocontext, otype, oextra, odef FROM ' . sql_table('plugin_option_desc') . ' WHERE oid=' . intval($oid);\r
-                               $res = sql_query($query);\r
-                               if ($o = mysql_fetch_object($res))\r
-                               {\r
-                                       foreach ($values as $contextid => $value) {\r
-                                               // retreive any metadata\r
-                                               $meta = NucleusPlugin::getOptionMeta($o->oextra);\r
-                                               \r
-                                               // if the option is readonly or hidden it may not be saved\r
-                                               if (($meta['access'] != 'readonly') && ($meta['access'] != 'hidden')) {\r
-                                                       \r
-                                                       $value = undoMagic($value);     // value comes from request\r
-       \r
-                                                       switch($o->otype) {\r
-                                                               case 'yesno':\r
-                                                                       if (($value != 'yes') && ($value != 'no')) $value = 'no';\r
-                                                                       break;\r
-                                                               default:\r
-                                                                       break;\r
-                                                       }\r
-                                                       \r
-                                                       // check the validity of numerical options\r
-                                                       if (($meta['datatype'] == 'numerical') && (!is_numeric($value))) { \r
-                                                               //the option must be numeric, but the it isn't\r
-                                                               //use the default for this option\r
-                                                               $value = $o->odef;\r
-                                                       }\r
-       \r
-                                                       // decide wether we are using the contextid of newContextid\r
-                                                       if ($newContextid != 0) {\r
-                                                               $contextid = $newContextid;\r
-                                                       }\r
-                                                       \r
-                                                       //trigger event PrePluginOptionsUpdate to give the plugin the\r
-                                                       //possibility to change/validate the new value for the option\r
-                                                       $manager->notify('PrePluginOptionsUpdate',array('context' => $o->ocontext, 'plugid' => $o->opid, 'optionname' => $o->oname, 'contextid' => $contextid, 'value' => &$value));\r
-                                                       \r
-                                                       // delete the old value for the option\r
-                                                       sql_query('DELETE FROM '.sql_table('plugin_option').' WHERE oid='.intval($oid).' AND ocontextid='.intval($contextid));\r
-                                                       sql_query('INSERT INTO '.sql_table('plugin_option')." (oid, ocontextid, ovalue) VALUES (".intval($oid).",".intval($contextid).",'" . addslashes($value) . "')");\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               \r
-       }\r
-?>\r
+<?php
+       /*
+        * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+        * Copyright (C) 2002-2006 The Nucleus Group
+        *
+        * This program is free software; you can redistribute it and/or
+        * modify it under the terms of the GNU General Public License
+        * as published by the Free Software Foundation; either version 2
+        * of the License, or (at your option) any later version.
+        * (see nucleus/documentation/index.html#license for more info)
+        */
+       /**
+        * This is an (abstract) class of which all Nucleus Plugins must inherit
+        *
+        * for more information on plugins and how to write your own, see the
+        * plugins.html file that is included with the Nucleus documenation
+        *
+        * @license http://nucleuscms.org/license.txt GNU General Public License
+        * @copyright Copyright (C) 2002-2006 The Nucleus Group
+        * @version $Id: PLUGIN.php,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+        * $NucleusJP: PLUGIN.php,v 1.4 2005/08/13 07:33:02 kimitake Exp $
+        */
+       class NucleusPlugin {
+
+               // these functions _have_ to be redefined in your plugin
+
+               function getName() { return 'Undefined'; }
+               function getAuthor()  { return 'Undefined'; }
+               function getURL()  { return 'Undefined'; }
+               function getVersion() { return '0.0'; }
+               function getDescription() { return 'Undefined';}
+
+               // these function _may_ be redefined in your plugin
+
+               function getMinNucleusVersion() { return 150; }
+               function getMinNucleusPatchLevel() { return 0; }
+               function getEventList() { return array(); }
+               function getTableList() { return array(); }
+               function hasAdminArea() { return 0; }
+
+               function install() {}
+               function unInstall() {}
+
+               function init() {}
+
+               function doSkinVar($skinType) {}
+               function doTemplateVar(&$item) {
+                       $args = func_get_args();
+                       array_shift($args);
+                       array_unshift($args, 'template');
+                       call_user_func_array(array(&$this,'doSkinVar'),$args);
+               }
+               function doTemplateCommentsVar(&$item, &$comment) {
+                       $args = func_get_args();
+                       array_shift($args);
+                       array_shift($args);
+                       array_unshift($args, 'template');
+                       call_user_func_array(array(&$this,'doSkinVar'),$args);
+               }
+               function doAction($type) { return 'No Such Action'; }
+               function doIf($key,$value) { return false; }
+
+               /**
+                * Checks if a plugin supports a certain feature.
+                *
+                * @returns 1 if the feature is reported, 0 if not
+                * @param $feature
+                *              Name of the feature. See plugin documentation for more info
+                *                      'SqlTablePrefix' -> if the plugin uses the sql_table() method to get table names
+                *                      'HelpPage' -> if the plugin provides a helppage
+                */
+               function supportsFeature($feature) {
+                       return 0;
+               }
+
+               /**
+                * Report a list of plugin that is required to function
+                *
+                * @returns an array of names of plugin, an empty array indicates no dependency
+                */
+               function getPluginDep() { return array(); }
+
+               // these helper functions should not be redefined in your plugin
+
+               /**
+                 * Creates a new option for this plugin
+                 *
+                 * @param name
+                 *             A string uniquely identifying your option. (max. length is 20 characters)
+                 * @param description
+                 *             A description that will show up in the nucleus admin area (max. length: 255 characters)
+                 * @param type
+                 *             Either 'text', 'yesno' or 'password'
+                 *             This info is used when showing 'edit plugin options' screens
+                 * @param value
+                 *             Initial value for the option (max. value length is 128 characters)
+                 */
+               function createOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('global', $name, $desc, $type, $defValue, $typeExtras);
+               }
+               function createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('blog', $name, $desc, $type, $defValue, $typeExtras);
+               }
+               function createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('member', $name, $desc, $type, $defValue, $typeExtras);
+               }
+               function createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('category', $name, $desc, $type, $defValue, $typeExtras);
+               }
+               function createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('item', $name, $desc, $type, $defValue, $typeExtras);
+               }
+
+               /**
+                 * Removes the option from the database
+                 *
+                 * Note: Options get erased automatically on plugin uninstall
+                 */
+               function deleteOption($name) {
+                       return $this->_deleteOption('global', $name);
+               }
+               function deleteBlogOption($name) {
+                       return $this->_deleteOption('blog', $name);
+               }
+               function deleteMemberOption($name) {
+                       return $this->_deleteOption('member', $name);
+               }
+               function deleteCategoryOption($name) {
+                       return $this->_deleteOption('category', $name);
+               }
+               function deleteItemOption($name) {
+                       return $this->_deleteOption('item', $name);
+               }
+
+               /**
+                 * Sets the value of an option to something new
+                 */
+               function setOption($name, $value) {
+                       return $this->_setOption('global', 0, $name, $value);
+               }
+               function setBlogOption($blogid, $name, $value) {
+                       return $this->_setOption('blog', $blogid, $name, $value);
+               }
+               function setMemberOption($memberid, $name, $value) {
+                       return $this->_setOption('member', $memberid, $name, $value);
+               }
+               function setCategoryOption($catid, $name, $value) {
+                       return $this->_setOption('category', $catid, $name, $value);
+               }
+               function setItemOption($itemid, $name, $value) {
+                       return $this->_setOption('item', $itemid, $name, $value);
+               }
+
+               /**
+                 * Retrieves the current value for an option
+                 */
+               function getOption($name)
+               {
+                       // only request the options the very first time. On subsequent requests
+                       // the static collection is used to save SQL queries.
+                       if ($this->plugin_options == 0)
+                       {
+                               $this->plugin_options = array();
+                               $query = mysql_query(
+                                        'SELECT d.oname as name, o.ovalue as value '.
+                                        'FROM '.
+                                        sql_table('plugin_option').' o, '.
+                                        sql_table('plugin_option_desc').' d '.
+                                        'WHERE d.opid='. intval($this->getID()).' AND d.oid=o.oid'
+                               );
+                               while ($row = mysql_fetch_object($query))
+                                       $this->plugin_options[strtolower($row->name)] = $row->value;
+                 }
+                 if (isset($this->plugin_options[strtolower($name)]))
+                               return $this->plugin_options[strtolower($name)];
+                 else
+                               return $this->_getOption('global', 0, $name);
+               }
+
+               function getBlogOption($blogid, $name) {
+                       return $this->_getOption('blog', $blogid, $name);
+               }
+               function getMemberOption($memberid, $name) {
+                       return $this->_getOption('member', $memberid, $name);
+               }
+               function getCategoryOption($catid, $name) {
+                       return $this->_getOption('category', $catid, $name);
+               }
+               function getItemOption($itemid, $name) {
+                       return $this->_getOption('item', $itemid, $name);
+               }
+
+               /**
+                * Retrieves an associative array with the option value for each
+                * context id
+                */
+               function getAllBlogOptions($name) {
+                       return $this->_getAllOptions('blog', $name);
+               }
+               function getAllMemberOptions($name) {
+                       return $this->_getAllOptions('member', $name);
+               }
+               function getAllCategoryOptions($name) {
+                       return $this->_getAllOptions('category', $name);
+               }
+               function getAllItemOptions($name) {
+                       return $this->_getAllOptions('item', $name);
+               }
+
+               /**
+                * Retrieves an indexed array with the top (or bottom) of an option
+                * (delegates to _getOptionTop())
+                */
+               function getBlogOptionTop($name, $amount = 10, $sort = 'desc') {
+                       return $this->_getOptionTop('blog', $name, $amount, $sort);
+               }
+               function getMemberOptionTop($name, $amount = 10, $sort = 'desc') {
+                       return $this->_getOptionTop('member', $name, $amount, $sort);
+               }
+               function getCategoryOptionTop($name, $amount = 10, $sort = 'desc') {
+                       return $this->_getOptionTop('category', $name, $amount, $sort);
+               }
+               function getItemOptionTop($name, $amount = 10, $sort = 'desc') {
+                       return $this->_getOptionTop('item', $name, $amount, $sort);
+               }
+
+               /**
+                * Retrieves an array of the top (or bottom) of an option from a plugin.
+                * @author TeRanEX
+                * @param  string $context the context for the option: item, blog, member,...
+                * @param  string $name    the name of the option
+                * @param  int    $amount  how many rows must be returned
+                * @param  string $sort    desc or asc
+                * @return array           array with both values and contextid's
+                * @access private
+                */
+               function _getOptionTop($context, $name, $amount = 10, $sort = 'desc') {
+                       if (($sort != 'desc') && ($sort != 'asc')) {
+                               $sort= 'desc';
+                       }
+
+                       $oid = $this->_getOID($context, $name);
+
+                       // retrieve the data and return
+                       $q = 'SELECT otype, oextra FROM '.sql_table('plugin_option_desc').' WHERE oid = '.$oid;
+                       $query = mysql_query($q);
+
+                       $o = mysql_fetch_array($query);
+
+                       if (($this->optionCanBeNumeric($o['otype'])) && ($o['oextra'] == 'number' )) {
+                               $orderby = 'CAST(ovalue AS SIGNED)';
+                       } else {
+                               $orderby = 'ovalue';
+                       }
+                       $q = 'SELECT ovalue value, ocontextid id FROM '.sql_table('plugin_option').' WHERE oid = '.$oid.' ORDER BY '.$orderby.' '.$sort.' LIMIT 0,'.$amount;
+                       $query = mysql_query($q);
+
+                       // create the array
+                       $i = 0;
+                       $top = array();
+                       while($row = mysql_fetch_array($query)) {
+                               $top[$i++] = $row;
+                       }
+
+                       // return the array (duh!)
+                       return $top;
+               }
+
+               /**
+                 * Returns the plugin ID
+                 */
+               function getID() {
+                       return $this->plugid;
+               }
+
+               /**
+                 * returns the URL of the admin area for this plugin (in case there's
+                 * no such area, the returned information is invalid)
+                 */
+               function getAdminURL() {
+                       global $CONF;
+                       return $CONF['PluginURL'] . $this->getShortName() . '/';
+               }
+
+               /**
+                 * Returns the directory where the admin directory is located and
+                 * where the plugin can maintain his extra files
+                 */
+               function getDirectory() {
+                       global $DIR_PLUGINS;
+                       return $DIR_PLUGINS . $this->getShortName() . '/';
+               }
+
+               /**
+                 * Derives the short name for the plugin from the classname (all lowercase)
+                 */
+               function getShortName() {
+                       return str_replace('np_','',strtolower(get_class($this)));
+               }
+
+               var $_aOptionValues;    // oid_contextid => value
+               var $_aOptionToInfo;    // context_name => array('oid' => ..., 'default' => ...)
+               var $plugin_options;    // see getOption()
+               var $plugid;                    // plugin id
+
+
+               // constructor. Initializes some internal data
+               function NucleusPlugin() {
+                       $this->_aOptionValues = array();        // oid_contextid => value
+                       $this->_aOptionToInfo = array();        // context_name => array('oid' => ..., 'default' => ...)
+                       $this->plugin_options = 0;
+               }
+
+               // private
+               function _createOption($context, $name, $desc, $type, $defValue, $typeExtras = '') {
+                       // create in plugin_option_desc
+                       $query = 'INSERT INTO ' . sql_table('plugin_option_desc')
+                                  .' (opid, oname, ocontext, odesc, otype, odef, oextra)'
+                                  .' VALUES ('.intval($this->plugid)
+                                                        .', \''.addslashes($name).'\''
+                                                        .', \''.addslashes($context).'\''
+                                                        .', \''.addslashes($desc).'\''
+                                                        .', \''.addslashes($type).'\''
+                                                        .', \''.addslashes($defValue).'\''
+                                                        .', \''.addslashes($typeExtras).'\')';
+                       sql_query($query);
+                       $oid = mysql_insert_id();
+
+                       $key = $context . '_' . $name;
+                       $this->_aOptionToInfo[$key] = array('oid' => $oid, 'default' => $defValue);
+                       return 1;
+               }
+
+
+               // private
+               function _deleteOption($context, $name) {
+                       $oid = $this->_getOID($context, $name);
+                       if (!$oid) return 0; // no such option
+
+                       // delete all things from plugin_option
+                       sql_query('DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid=' . $oid);
+
+                       // delete entry from plugin_option_desc
+                       sql_query('DELETE FROM ' . sql_table('plugin_option_desc') . ' WHERE oid=' . $oid);
+
+                       // clear from cache
+                       unset($this->_aOptionToInfo[$context . '_' . $name]);
+                       $this->_aOptionValues = array();
+                       return 1;
+               }
+
+               /**
+                * private
+                * returns: 1 on success, 0 on failure
+                */
+               function _setOption($context, $contextid, $name, $value) {
+                       global $manager;
+
+                       $oid = $this->_getOID($context, $name);
+                       if (!$oid) return 0;
+
+                       // check if context id exists
+                       switch ($context) {
+                               case 'member':
+                                       if (!MEMBER::existsID($contextid)) return 0;
+                                       break;
+                               case 'blog':
+                                       if (!$manager->existsBlogID($contextid)) return 0;
+                                       break;
+                               case 'category':
+                                       if (!$manager->existsCategory($contextid)) return 0;
+                                       break;
+                               case 'item':
+                                       if (!$manager->existsItem($contextid, true, true)) return 0;
+                                       break;
+                               case 'global':
+                                       if ($contextid != 0) return 0;
+                                       break;
+                       }
+
+
+                       // update plugin_option
+                       sql_query('DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid='.intval($oid) . ' and ocontextid='. intval($contextid));
+                       sql_query('INSERT INTO ' . sql_table('plugin_option') . ' (ovalue, oid, ocontextid) VALUES (\''.addslashes($value).'\', '. intval($oid) . ', ' . intval($contextid) . ')');
+
+                       // update cache
+                       $this->_aOptionValues[$oid . '_' . $contextid] = $value;
+
+                       return 1;
+               }
+
+               // private
+               function _getOption($context, $contextid, $name) {
+                       $oid = $this->_getOID($context, $name);
+                       if (!$oid) return '';
+
+
+                       $key = $oid . '_' . $contextid;
+
+                       if (isset($this->_aOptionValues[$key]))
+                               return $this->_aOptionValues[$key];
+
+                       // get from DB
+                       $res = sql_query('SELECT ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid='.intval($oid).' and ocontextid=' . intval($contextid));
+
+                       if (!$res || (mysql_num_rows($res) == 0)) {
+                               $defVal = $this->_getDefVal($context, $name);
+                               $this->_aOptionValues[$key] = $defVal;
+
+                               // fill DB with default value
+                               $query = 'INSERT INTO ' . sql_table('plugin_option') . ' (oid,ocontextid,ovalue)'
+                                          .' VALUES ('.intval($oid).', '.intval($contextid).', \''.addslashes($defVal).'\')';
+                               sql_query($query);
+                       }
+                       else {
+                               $o = mysql_fetch_object($res);
+                               $this->_aOptionValues[$key] = $o->ovalue;
+                       }
+
+                       return $this->_aOptionValues[$key];
+               }
+
+               /**
+                * Returns assoc array with all values for a given option (one option per
+                * possible context id)
+                */
+               function _getAllOptions($context, $name) {
+                       $oid = $this->_getOID($context, $name);
+                       if (!$oid) return array();
+                       $defVal = $this->_getDefVal($context, $name);
+
+                       $aOptions = array();
+                       switch ($context) {
+                               case 'blog':
+                                       $r = sql_query('SELECT bnumber as contextid FROM ' . sql_table('blog'));
+                                       break;
+                               case 'category':
+                                       $r = sql_query('SELECT catid as contextid FROM ' . sql_table('category'));
+                                       break;
+                               case 'member':
+                                       $r = sql_query('SELECT mnumber as contextid FROM ' . sql_table('member'));
+                                       break;
+                       }
+                       if ($r) {
+                               while ($o = mysql_fetch_object($r))
+                                       $aOptions[$o->contextid] = $defVal;
+                       }
+
+                       $res = sql_query('SELECT ocontextid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid=' . $oid);
+                       while ($o = mysql_fetch_object($res))
+                               $aOptions[$o->ocontextid] = $o->ovalue;
+
+                       return $aOptions;
+               }
+
+               /**
+                * Gets the 'option identifier' that corresponds to a given option name.
+                * When this method is called for the first time, all the OIDs for the plugin
+                * are loaded into memory, to avoid re-doing the same query all over.
+                */
+               function _getOID($context, $name) {
+                       $key = $context . '_' . $name;
+                       $info = $this->_aOptionToInfo[$key];
+                       if (is_array($info)) return $info['oid'];
+
+                       // load all OIDs for this plugin from the database
+                       $this->_aOptionToInfo = array();
+                       $query = 'SELECT oid, oname, ocontext, odef FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . intval($this->plugid);
+                       $res = sql_query($query);
+                       while ($o = mysql_fetch_object($res)) {
+                               $k = $o->ocontext . '_' . $o->oname;
+                               $this->_aOptionToInfo[$k] = array('oid' => $o->oid, 'default' => $o->odef);
+                       }
+                       mysql_free_result($res);
+
+                       return $this->_aOptionToInfo[$key]['oid'];
+               }
+               function _getDefVal($context, $name) {
+                       $key = $context . '_' . $name;
+                       $info = $this->_aOptionToInfo[$key];
+                       if (is_array($info)) return $info['default'];
+               }
+
+
+               /**
+                * Deletes all option values for a given context and contextid
+                * (used when e.g. a blog, member or category is deleted)
+                *
+                * (static method)
+                */
+               function _deleteOptionValues($context, $contextid) {
+                       // delete all associated plugin options
+                       $aOIDs = array();
+                               // find ids
+                       $query = 'SELECT oid FROM '.sql_table('plugin_option_desc') . ' WHERE ocontext=\''.addslashes($context).'\'';
+                       $res = sql_query($query);
+                       while ($o = mysql_fetch_object($res))
+                               array_push($aOIDs, $o->oid);
+                       mysql_free_result($res);
+                               // delete those options. go go go
+                       if (count($aOIDs) > 0) {
+                               $query = 'DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid in ('.implode(',',$aOIDs).') and ocontextid=' . intval($contextid);
+                               sql_query($query);
+                       }
+               }
+
+               /**
+                * splits the option's typeextra field (at ;'s) to split the meta collection
+                * @param string $typeExtra the value of the typeExtra field of an option
+                * @return array array of the meta-key/value-pairs
+                * @author TeRanEX
+                * @static
+                */
+               function getOptionMeta($typeExtra) {
+                       $tmpMeta = explode(';', $typeExtra);
+                       $meta = array();
+                       for ($i = 0; $i < count($tmpMeta); $i++) {
+                               if (($i == 0) && (!strstr($tmpMeta[0], '='))) {
+                                       // we have the select-list
+                                       $meta['select'] = $tmpMeta[0];
+                               } else {
+                                       $tmp = explode('=', $tmpMeta[$i]);
+                                       $meta[$tmp[0]] = $tmp[1];
+                               }
+                       }
+                       return $meta;
+               }
+
+               /**
+                * filters the selectlists out of the meta collection
+                * @param string $typeExtra the value of the typeExtra field of an option
+                * @return string the selectlist
+                * @author TeRanEX
+                */
+               function getOptionSelectValues($typeExtra) {
+                       $meta = NucleusPlugin::getOptionMeta($typeExtra);
+                       //the select list must always be the first part
+                       return $meta['select'];
+               }
+
+               /**
+                * checks if the eventlist in the database is up-to-date
+                * @return bool if it is up-to-date it return true, else false
+                * @author TeRanEX
+                */
+               function subscribtionListIsUptodate() {
+                       $res = sql_query('SELECT event FROM '.sql_table('plugin_event').' WHERE pid = '.$this->getID());
+                       $ev = array();
+                       while($a = mysql_fetch_array($res)) {
+                               array_push($ev, $a['event']);
+                       }
+                       if (count($ev) != count($this->getEventList())) {
+                               return false;
+                       }
+                       $d = array_diff($ev, $this->getEventList());
+                       if (count($d) > 0) {
+                               // there are differences so the db is not up-to-date
+                               return false;
+                       }
+                       return true;
+               }
+
+               /**
+                * @param $aOptions: array ( 'oid' => array( 'contextid' => 'value'))
+                *        (taken from request using requestVar())
+                * @param $newContextid: integer (accepts a contextid when it is for a new
+                *        contextid there was no id available at the moment of writing the
+                *        formcontrols into the page (by ex: itemOptions for new item)
+                * @static
+                */
+               function _applyPluginOptions(&$aOptions, $newContextid = 0) {
+                       global $manager;
+                       if (!is_array($aOptions)) return;
+
+                       foreach ($aOptions as $oid => $values) {
+
+                               // get option type info
+                               $query = 'SELECT opid, oname, ocontext, otype, oextra, odef FROM ' . sql_table('plugin_option_desc') . ' WHERE oid=' . intval($oid);
+                               $res = sql_query($query);
+                               if ($o = mysql_fetch_object($res))
+                               {
+                                       foreach ($values as $contextid => $value) {
+                                               // retreive any metadata
+                                               $meta = NucleusPlugin::getOptionMeta($o->oextra);
+
+                                               // if the option is readonly or hidden it may not be saved
+                                               if (($meta['access'] != 'readonly') && ($meta['access'] != 'hidden')) {
+
+                                                       $value = undoMagic($value);     // value comes from request
+
+                                                       switch($o->otype) {
+                                                               case 'yesno':
+                                                                       if (($value != 'yes') && ($value != 'no')) $value = 'no';
+                                                                       break;
+                                                               default:
+                                                                       break;
+                                                       }
+
+                                                       // check the validity of numerical options
+                                                       if (($meta['datatype'] == 'numerical') && (!is_numeric($value))) {
+                                                               //the option must be numeric, but the it isn't
+                                                               //use the default for this option
+                                                               $value = $o->odef;
+                                                       }
+
+                                                       // decide wether we are using the contextid of newContextid
+                                                       if ($newContextid != 0) {
+                                                               $contextid = $newContextid;
+                                                       }
+
+                                                       //trigger event PrePluginOptionsUpdate to give the plugin the
+                                                       //possibility to change/validate the new value for the option
+                                                       $manager->notify('PrePluginOptionsUpdate',array('context' => $o->ocontext, 'plugid' => $o->opid, 'optionname' => $o->oname, 'contextid' => $contextid, 'value' => &$value));
+
+                                                       // delete the old value for the option
+                                                       sql_query('DELETE FROM '.sql_table('plugin_option').' WHERE oid='.intval($oid).' AND ocontextid='.intval($contextid));
+                                                       sql_query('INSERT INTO '.sql_table('plugin_option')." (oid, ocontextid, ovalue) VALUES (".intval($oid).",".intval($contextid).",'" . addslashes($value) . "')");
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+       }
+?>
index e161ac3..28659c8 100755 (executable)
-<?php\r
-\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * code to make it easier to create plugin admin areas\r
- *\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: PLUGINADMIN.php,v 1.4 2005-08-13 07:33:02 kimitake Exp $\r
- * $NucleusJP: PLUGINADMIN.php,v 1.3 2005/03/12 06:19:05 kimitake Exp $\r
- */\r
-\r
-global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_ENV_VARS, $HTTP_POST_FILES, $HTTP_SESSION_VARS;\r
-$aVarsToCheck = array('DIR_LIBS');\r
-foreach ($aVarsToCheck as $varName)\r
-{\r
-       if (phpversion() >= '4.1.0')\r
-       {\r
-               if (   isset($_GET[$varName]) \r
-                       || isset($_POST[$varName]) \r
-                       || isset($_COOKIE[$varName])\r
-                       || isset($_ENV[$varName])\r
-                       || isset($_SESSION[$varName])\r
-                       || isset($_FILES[$varName])\r
-               ){\r
-                       die('Sorry. An error occurred.');\r
-               }\r
-       } else {\r
-               if (   isset($HTTP_GET_VARS[$varName]) \r
-                       || isset($HTTP_POST_VARS[$varName]) \r
-                       || isset($HTTP_COOKIE_VARS[$varName])\r
-                       || isset($HTTP_ENV_VARS[$varName])\r
-                       || isset($HTTP_SESSION_VARS[$varName])\r
-                       || isset($HTTP_POST_FILES[$varName])\r
-               ){\r
-                       die('Sorry. An error occurred.');\r
-               }               \r
-       }\r
-}\r
-\r
-\r
-include($DIR_LIBS . 'ADMIN.php');\r
-\r
-class PluginAdmin {\r
-       \r
-       var $strFullName;               // NP_SomeThing\r
-       var $plugin;                    // ref. to plugin object\r
-       var $bValid;                    // evaluates to true when object is considered valid\r
-       var $admin;                             // ref to an admin object\r
-       \r
-       function PluginAdmin($pluginName)\r
-       {\r
-               global $manager;\r
-               \r
-               $this->strFullName = 'NP_' . $pluginName;\r
-               \r
-               // check if plugin exists and is installed\r
-               if (!$manager->pluginInstalled($this->strFullName))\r
-                       doError('Invalid plugin');\r
-               \r
-               $this->plugin =& $manager->getPlugin($this->strFullName);\r
-               $this->bValid = $this->plugin;\r
-       \r
-               if (!$this->bValid)\r
-                       doError('Invalid plugin');\r
-               \r
-               $this->admin = new ADMIN();\r
-               $this->admin->action = 'plugin_' . $pluginName;\r
-       }\r
-       \r
-       function start($extraHead = '')\r
-       {\r
-               global $CONF;\r
-               $strBaseHref  = '<base href="' . htmlspecialchars($CONF['AdminURL']) . '" />';  \r
-               $extraHead .= $strBaseHref;\r
-               \r
-               $this->admin->pagehead($extraHead);\r
-       }\r
-       \r
-       function end()\r
-       {\r
-               $this->admin->pagefoot();\r
-       }       \r
-}\r
-\r
-\r
-\r
-?>\r
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * code to make it easier to create plugin admin areas
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: PLUGINADMIN.php,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: PLUGINADMIN.php,v 1.4 2005/08/13 07:33:02 kimitake Exp $
+ */
+
+global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_ENV_VARS, $HTTP_POST_FILES, $HTTP_SESSION_VARS;
+$aVarsToCheck = array('HTTP_GET_VARS', 'HTTP_POST_VARS', 'HTTP_COOKIE_VARS', 'HTTP_ENV_VARS', 'HTTP_SESSION_VARS', 'HTTP_POST_FILES', 'HTTP_SERVER_VARS', 'GLOBALS', 'argv', 'argc', '_GET', '_POST', '_COOKIE', '_ENV', '_SESSION', '_SERVER', '_FILES', 'DIR_LIBS');
+
+foreach ($aVarsToCheck as $varName)
+{
+       if (phpversion() >= '4.1.0')
+       {
+               if (   isset($_GET[$varName])
+                       || isset($_POST[$varName])
+                       || isset($_COOKIE[$varName])
+                       || isset($_ENV[$varName])
+                       || isset($_SESSION[$varName])
+                       || isset($_FILES[$varName])
+               ){
+                       die('Sorry. An error occurred.');
+               }
+       } else {
+               if (   isset($HTTP_GET_VARS[$varName])
+                       || isset($HTTP_POST_VARS[$varName])
+                       || isset($HTTP_COOKIE_VARS[$varName])
+                       || isset($HTTP_ENV_VARS[$varName])
+                       || isset($HTTP_SESSION_VARS[$varName])
+                       || isset($HTTP_POST_FILES[$varName])
+               ){
+                       die('Sorry. An error occurred.');
+               }
+       }
+}
+
+if (!isset($DIR_LIBS)) {
+       die('Sorry.');
+}
+
+include($DIR_LIBS . 'ADMIN.php');
+
+class PluginAdmin {
+
+       var $strFullName;               // NP_SomeThing
+       var $plugin;                    // ref. to plugin object
+       var $bValid;                    // evaluates to true when object is considered valid
+       var $admin;                             // ref to an admin object
+
+       function PluginAdmin($pluginName)
+       {
+               global $manager;
+
+               $this->strFullName = 'NP_' . $pluginName;
+
+               // check if plugin exists and is installed
+               if (!$manager->pluginInstalled($this->strFullName))
+                       doError('Invalid plugin');
+
+               $this->plugin =& $manager->getPlugin($this->strFullName);
+               $this->bValid = $this->plugin;
+
+               if (!$this->bValid)
+                       doError('Invalid plugin');
+
+               $this->admin = new ADMIN();
+               $this->admin->action = 'plugin_' . $pluginName;
+       }
+
+       function start($extraHead = '')
+       {
+               global $CONF;
+               $strBaseHref  = '<base href="' . htmlspecialchars($CONF['AdminURL']) . '" />';
+               $extraHead .= $strBaseHref;
+
+               $this->admin->pagehead($extraHead);
+       }
+
+       function end()
+       {
+               $this->admin->pagefoot();
+       }
+}
+
+
+
+?>
\ No newline at end of file
index 56bd67e..21356c4 100755 (executable)
-<?php\r
-\r
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2003-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  * SEARCH(querystring) offers different functionality to create an\r
-  * SQL query to find certain items. (and comments)\r
-  *\r
-  * based on code by David Altherr:\r
-  * http://www.evolt.org/article/Boolean_Fulltext_Searching_with_PHP_and_MySQL/18/15665/\r
-  * http://davidaltherr.net/web/php_functions/boolean/funcs.mysql.boolean.txt\r
-  * \r
-  *\r
-  * $Id: SEARCH.php,v 1.4 2005-03-12 06:19:05 kimitake Exp $\r
-  $ $NucleusJP$\r
-  */\r
-\r
-\r
-class SEARCH {\r
-       \r
-       var $querystring;\r
-       var $marked;\r
-       var $inclusive;\r
-       var $blogs;\r
-\r
-\r
-    function SEARCH($text) {\r
-        global $blogid;\r
-\r
-//       $text = preg_replace ("/[<,>,=,?,!,#,^,(,),[,\],:,;,\\\,%]/","",$text);\r
-\r
-     /* * * for jp * * * * * * * * * * */\r
-        $text = str_replace ("\xE3\x80\x80",' ',$text);\r
-        $text = preg_replace ("/[<>=?!#^()[\]:;\\%]/","",$text);\r
-\r
-        $this->ascii = '[\x00-\x7F]';\r
-        $this->two = '[\xC0-\xDF][\x80-\xBF]';\r
-        $this->three = '[\xE0-\xEF][\x80-\xBF][\x80-\xBF]';\r
-\r
-        $this->jpmarked      = $this->boolean_mark_atoms_jp($text);\r
-     /* * * * * * * * * * * * * * * * */\r
-\r
-        $this->querystring     = $text;\r
-//        $this->marked                = $this->boolean_mark_atoms($text);\r
-        $this->inclusive       = $this->boolean_inclusive_atoms($text);\r
-        $this->blogs           = array();\r
-\r
-        // get all public searchable blogs, no matter what, include the current blog allways.\r
-               $res = sql_query('SELECT bnumber FROM '.sql_table('blog').' WHERE bincludesearch=1 ');\r
-               while ($obj = mysql_fetch_object($res)) \r
-                   $this->blogs[] = intval($obj->bnumber);\r
-        }\r
-\r
-    function  boolean_sql_select($match){\r
-//        $string = $this->inclusive;\r
-//        if (strlen($string) > 0) {\r
-          /* build sql for determining score for each record */\r
-/*\r
-              preg_match_all(\r
-                                  "([A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_]{0,})",\r
-                              $string,\r
-                              $result);\r
-           $result = $result[0];\r
-                for($cth=0;$cth<count($result);$cth++){\r
-             if(strlen($result[$cth])>=4){\r
-                   $stringsum_long .=  " $result[$cth] ";\r
-                    }else{\r
-                      $stringsum_a[] = ' '.$this->boolean_sql_select_short($result[$cth],$match).' ';\r
-                    }\r
-                }\r
-            if(strlen($stringsum_long)>0){\r
-                               $stringsum_long = addslashes($stringsum_long);\r
-                       $stringsum_a[] = " match ($match) against ('$stringsum_long') ";\r
-            }\r
-                $stringsum .= implode("+",$stringsum_a);\r
-            return $stringsum;\r
-           }\r
-*/\r
-    }\r
-\r
-    \r
-\r
-    function boolean_inclusive_atoms($string){\r
-       $result=trim($string);\r
-       $result=preg_replace("/([[:space:]]{2,})/",' ',$result);\r
-\r
-       /* convert normal boolean operators to shortened syntax */\r
-       $result=eregi_replace(' not ',' -',$result);\r
-       $result=eregi_replace(' and ',' ',$result);\r
-       $result=eregi_replace(' or ',',',$result);\r
-\r
-       /* drop unnecessary spaces */\r
-       $result=str_replace(' ,',',',$result);\r
-       $result=str_replace(', ',',',$result);\r
-       $result=str_replace('- ','-',$result);\r
-       $result=str_replace('+','',$result);\r
-\r
-       /* strip exlusive atoms */\r
-       $result=preg_replace(\r
-//             "(\-\([A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_\,]{0,}\))",\r
-               "(\-\(([A-Za-z0-9]|$this->two|$this->three){1,}([A-Za-z0-9\-\.\_\,]|$this->two|$this->three){0,}\))",\r
-               '',\r
-               $result);\r
-\r
-       $result=preg_replace(\r
-//             "(\-[A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_]{0,})",\r
-               "(\-([A-Za-z0-9]|$this->two|$this->three){1,}([A-Za-z0-9\-\.\_\,]|$this->two|$this->three){0,})",\r
-               '',\r
-               $result);\r
-\r
-       $result=str_replace('(',' ',$result);\r
-       $result=str_replace(')',' ',$result);\r
-       $result=str_replace(',',' ',$result);\r
-\r
-       return $result;\r
-    }\r
-\r
-    function boolean_sql_where($match){\r
-/*\r
-        $result = $this->marked;\r
-       $result = preg_replace(\r
-               "/foo\[\(\'([^\)]{4,})\'\)\]bar/e",\r
-               " 'match ('.\$match.') against (\''.\$this->copyvalue(\"$1\").'\') > 0 ' ",\r
-               $result);\r
-\r
-       $result = preg_replace(                 \r
-            "/foo\[\(\'([^\)]{1,3})\'\)\]bar/e",\r
-            " '('.\$this->boolean_sql_where_short(\"$1\",\"$match\").')' ",                    \r
-            $result);\r
-*/\r
-      $result = $this->jpmarked; /* for jp */\r
-       $result = $this->boolean_sql_where_jp_short($result,$match);/* for jp */\r
-       return $result;\r
-    }\r
-\r
-    // there must be a simple way to simply copy a value with backslashes in it through\r
-    // the preg_replace, but I cannot currently find it (karma 2003-12-30)\r
-    function copyvalue($foo) {\r
-       return $foo;\r
-    }\r
-\r
-/***********************************************\r
-  Make "WHERE" (jp)\r
-***********************************************/\r
-\r
-    function boolean_mark_atoms_jp($string){\r
-\r
-       $result=trim($string);\r
-       $result=preg_replace("/([[:space:]]{2,})/",' ',$result);\r
-       \r
-       /* convert normal boolean operators to shortened syntax */\r
-       $result=eregi_replace(' not ',' -',$result);\r
-       $result=eregi_replace(' and ',' ',$result);\r
-       $result=eregi_replace(' or ',',',$result);\r
-\r
-       /* strip excessive whitespace */\r
-       $result=str_replace(', ',',',$result);\r
-       $result=str_replace(' ,',',',$result);\r
-       $result=str_replace('- ','-',$result);\r
-       $result=str_replace('+','',$result);\r
-       \r
-       $result=str_replace(',',' ,',$result);\r
-\r
-       return $result;\r
-    }\r
-    \r
-\r
-    function boolean_sql_where_jp_short($string,$match){\r
-       $match_a = explode(',',$match);\r
-                       $key_a = explode(' ',$string);\r
-                       \r
-       for($ith=0;$ith<count($match_a);$ith++){\r
-               $temp_a[$ith] = "(i.$match_a[$ith] LIKE '%" . addslashes($key_a[0]) . "%') ";\r
-       }\r
-       $like = '('.implode(' or ',$temp_a).')';\r
-\r
-                       for($kn=1; $kn<count($key_a); $kn++){\r
-               if(substr($key_a[$kn],0,1) == ","){\r
-                       for($ith=0;$ith<count($match_a);$ith++){\r
-                               $temp_a[$ith] = " (i.$match_a[$ith] LIKE '%" . addslashes(substr($key_a[$kn],1)) . "%') ";\r
-                       }\r
-                       $like .=' OR ('. implode(' or ',$temp_a).')';\r
-               }elseif(substr($key_a[$kn],0,1) != '-'){\r
-                       for($ith=0;$ith<count($match_a);$ith++){\r
-                               $temp_a[$ith] = " (i.$match_a[$ith] LIKE '%" . addslashes($key_a[$kn]) . "%') ";\r
-                       }\r
-                       $like .=' AND ('. implode(' or ',$temp_a).')';\r
-               }else{\r
-                       for($ith=0;$ith<count($match_a);$ith++){\r
-                               $temp_a[$ith] = " NOT(i.$match_a[$ith] LIKE '%" . addslashes(substr($key_a[$kn],1)) . "%') ";\r
-                       }\r
-                       $like .=' AND ('. implode(' and ',$temp_a).')';\r
-               }\r
-       }\r
-       \r
-       $like = '('.$like.')';\r
-       return $like;\r
-    }\r
-\r
-/***********************************************/\r
-\r
-\r
-/*\r
-    function boolean_mark_atoms($string){\r
-       $result=trim($string);\r
-       $result=preg_replace("/([[:space:]]{2,})/",' ',$result);\r
-\r
-       //convert normal boolean operators to shortened syntax\r
-       $result=eregi_replace(' not ',' -',$result);\r
-       $result=eregi_replace(' and ',' ',$result);\r
-       $result=eregi_replace(' or ',',',$result);\r
-\r
-\r
-       //strip excessive whitespace\r
-       $result=str_replace('( ','(',$result);\r
-       $result=str_replace(' )',')',$result);\r
-       $result=str_replace(', ',',',$result);\r
-       $result=str_replace(' ,',',',$result);\r
-       $result=str_replace('- ','-',$result);\r
-       $result=str_replace('+','',$result);\r
-\r
-       // remove double spaces (we might have introduced some new ones above)\r
-       $result=trim($result);\r
-       $result=preg_replace("/([[:space:]]{2,})/",' ',$result);\r
-\r
-       // apply arbitrary function to all 'word' atoms\r
-\r
-        $result_a = explode(" ",$result);\r
-        for($word=0;$word<count($result_a);$word++){\r
-            $result_a[$word] = "foo[('".$result_a[$word]."')]bar";\r
-        }\r
-        $result = implode(" ",$result_a);\r
-        \r
-       // dispatch ' ' to ' AND '\r
-       $result=str_replace(' ',' AND ',$result);\r
-\r
-       // dispatch ',' to ' OR '\r
-       $result=str_replace(',',' OR ',$result);\r
-\r
-       // dispatch '-' to ' NOT '\r
-       $result=str_replace(' -',' NOT ',$result);\r
-       return $result;\r
-    }\r
-    \r
-    function boolean_sql_where_short($string,$match){\r
-       $match_a = explode(',',$match);\r
-       for($ith=0;$ith<count($match_a);$ith++){\r
-               $like_a[$ith] = " $match_a[$ith] LIKE '% $string %' ";\r
-       }\r
-       $like = implode(" OR ",$like_a);\r
-\r
-       return $like;\r
-    }\r
-    function boolean_sql_select_short($string,$match){\r
-        $match_a = explode(',',$match);\r
-        $score_unit_weight = .2;\r
-        for($ith=0;$ith<count($match_a);$ith++){\r
-            $score_a[$ith] =\r
-                           " $score_unit_weight*(\r
-                           LENGTH(" . addslashes($match_a[$ith]) . ") -\r
-                           LENGTH(REPLACE(LOWER(" . addslashes($match_a[$ith]) . "),LOWER('" . addslashes($string) . "'),'')))\r
-                                      /LENGTH('" . addslashes($string) . "') ";\r
-        }\r
-           $score = implode(" + ",$score_a);\r
-\r
-        return $score;\r
-    }\r
-*/\r
-\r
-}\r
-?>\r
+<?php
+
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2003-2005 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  * SEARCH(querystring) offers different functionality to create an
+  * SQL query to find certain items. (and comments)
+  *
+  * based on code by David Altherr:
+  * http://www.evolt.org/article/Boolean_Fulltext_Searching_with_PHP_and_MySQL/18/15665/
+  * http://davidaltherr.net/web/php_functions/boolean/funcs.mysql.boolean.txt
+  * 
+  *
+  * $Id: SEARCH.php,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+  $ $NucleusJP: SEARCH.php,v 1.4 2005/03/12 06:19:05 kimitake Exp $
+  */
+
+
+class SEARCH {
+       
+       var $querystring;
+       var $marked;
+       var $inclusive;
+       var $blogs;
+
+
+    function SEARCH($text) {
+        global $blogid;
+
+//       $text = preg_replace ("/[<,>,=,?,!,#,^,(,),[,\],:,;,\\\,%]/","",$text);
+
+     /* * * for jp * * * * * * * * * * */
+        $text = str_replace ("\xE3\x80\x80",' ',$text);
+        $text = preg_replace ("/[<>=?!#^()[\]:;\\%]/","",$text);
+
+        $this->ascii = '[\x00-\x7F]';
+        $this->two = '[\xC0-\xDF][\x80-\xBF]';
+        $this->three = '[\xE0-\xEF][\x80-\xBF][\x80-\xBF]';
+
+        $this->jpmarked      = $this->boolean_mark_atoms_jp($text);
+     /* * * * * * * * * * * * * * * * */
+
+        $this->querystring     = $text;
+//        $this->marked                = $this->boolean_mark_atoms($text);
+        $this->inclusive       = $this->boolean_inclusive_atoms($text);
+        $this->blogs           = array();
+
+        // get all public searchable blogs, no matter what, include the current blog allways.
+               $res = sql_query('SELECT bnumber FROM '.sql_table('blog').' WHERE bincludesearch=1 ');
+               while ($obj = mysql_fetch_object($res)) 
+                   $this->blogs[] = intval($obj->bnumber);
+        }
+
+    function  boolean_sql_select($match){
+//        $string = $this->inclusive;
+//        if (strlen($string) > 0) {
+          /* build sql for determining score for each record */
+/*
+              preg_match_all(
+                                  "([A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_]{0,})",
+                              $string,
+                              $result);
+           $result = $result[0];
+                for($cth=0;$cth<count($result);$cth++){
+             if(strlen($result[$cth])>=4){
+                   $stringsum_long .=  " $result[$cth] ";
+                    }else{
+                      $stringsum_a[] = ' '.$this->boolean_sql_select_short($result[$cth],$match).' ';
+                    }
+                }
+            if(strlen($stringsum_long)>0){
+                               $stringsum_long = addslashes($stringsum_long);
+                       $stringsum_a[] = " match ($match) against ('$stringsum_long') ";
+            }
+                $stringsum .= implode("+",$stringsum_a);
+            return $stringsum;
+           }
+*/
+    }
+
+    
+
+    function boolean_inclusive_atoms($string){
+       $result=trim($string);
+       $result=preg_replace("/([[:space:]]{2,})/",' ',$result);
+
+       /* convert normal boolean operators to shortened syntax */
+       $result=eregi_replace(' not ',' -',$result);
+       $result=eregi_replace(' and ',' ',$result);
+       $result=eregi_replace(' or ',',',$result);
+
+       /* drop unnecessary spaces */
+       $result=str_replace(' ,',',',$result);
+       $result=str_replace(', ',',',$result);
+       $result=str_replace('- ','-',$result);
+       $result=str_replace('+','',$result);
+
+       /* strip exlusive atoms */
+       $result=preg_replace(
+//             "(\-\([A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_\,]{0,}\))",
+               "(\-\(([A-Za-z0-9]|$this->two|$this->three){1,}([A-Za-z0-9\-\.\_\,]|$this->two|$this->three){0,}\))",
+               '',
+               $result);
+
+       $result=preg_replace(
+//             "(\-[A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_]{0,})",
+               "(\-([A-Za-z0-9]|$this->two|$this->three){1,}([A-Za-z0-9\-\.\_\,]|$this->two|$this->three){0,})",
+               '',
+               $result);
+
+       $result=str_replace('(',' ',$result);
+       $result=str_replace(')',' ',$result);
+       $result=str_replace(',',' ',$result);
+
+       return $result;
+    }
+
+    function boolean_sql_where($match){
+/*
+        $result = $this->marked;
+       $result = preg_replace(
+               "/foo\[\(\'([^\)]{4,})\'\)\]bar/e",
+               " 'match ('.\$match.') against (\''.\$this->copyvalue(\"$1\").'\') > 0 ' ",
+               $result);
+
+       $result = preg_replace(                 
+            "/foo\[\(\'([^\)]{1,3})\'\)\]bar/e",
+            " '('.\$this->boolean_sql_where_short(\"$1\",\"$match\").')' ",                    
+            $result);
+*/
+      $result = $this->jpmarked; /* for jp */
+       $result = $this->boolean_sql_where_jp_short($result,$match);/* for jp */
+       return $result;
+    }
+
+    // there must be a simple way to simply copy a value with backslashes in it through
+    // the preg_replace, but I cannot currently find it (karma 2003-12-30)
+    function copyvalue($foo) {
+       return $foo;
+    }
+
+/***********************************************
+  Make "WHERE" (jp)
+***********************************************/
+
+    function boolean_mark_atoms_jp($string){
+
+       $result=trim($string);
+       $result=preg_replace("/([[:space:]]{2,})/",' ',$result);
+       
+       /* convert normal boolean operators to shortened syntax */
+       $result=eregi_replace(' not ',' -',$result);
+       $result=eregi_replace(' and ',' ',$result);
+       $result=eregi_replace(' or ',',',$result);
+
+       /* strip excessive whitespace */
+       $result=str_replace(', ',',',$result);
+       $result=str_replace(' ,',',',$result);
+       $result=str_replace('- ','-',$result);
+       $result=str_replace('+','',$result);
+       
+       $result=str_replace(',',' ,',$result);
+
+       return $result;
+    }
+    
+
+    function boolean_sql_where_jp_short($string,$match){
+       $match_a = explode(',',$match);
+                       $key_a = explode(' ',$string);
+                       
+       for($ith=0;$ith<count($match_a);$ith++){
+               $temp_a[$ith] = "(i.$match_a[$ith] LIKE '%" . addslashes($key_a[0]) . "%') ";
+       }
+       $like = '('.implode(' or ',$temp_a).')';
+
+                       for($kn=1; $kn<count($key_a); $kn++){
+               if(substr($key_a[$kn],0,1) == ","){
+                       for($ith=0;$ith<count($match_a);$ith++){
+                               $temp_a[$ith] = " (i.$match_a[$ith] LIKE '%" . addslashes(substr($key_a[$kn],1)) . "%') ";
+                       }
+                       $like .=' OR ('. implode(' or ',$temp_a).')';
+               }elseif(substr($key_a[$kn],0,1) != '-'){
+                       for($ith=0;$ith<count($match_a);$ith++){
+                               $temp_a[$ith] = " (i.$match_a[$ith] LIKE '%" . addslashes($key_a[$kn]) . "%') ";
+                       }
+                       $like .=' AND ('. implode(' or ',$temp_a).')';
+               }else{
+                       for($ith=0;$ith<count($match_a);$ith++){
+                               $temp_a[$ith] = " NOT(i.$match_a[$ith] LIKE '%" . addslashes(substr($key_a[$kn],1)) . "%') ";
+                       }
+                       $like .=' AND ('. implode(' and ',$temp_a).')';
+               }
+       }
+       
+       $like = '('.$like.')';
+       return $like;
+    }
+
+/***********************************************/
+
+
+/*
+    function boolean_mark_atoms($string){
+       $result=trim($string);
+       $result=preg_replace("/([[:space:]]{2,})/",' ',$result);
+
+       //convert normal boolean operators to shortened syntax
+       $result=eregi_replace(' not ',' -',$result);
+       $result=eregi_replace(' and ',' ',$result);
+       $result=eregi_replace(' or ',',',$result);
+
+
+       //strip excessive whitespace
+       $result=str_replace('( ','(',$result);
+       $result=str_replace(' )',')',$result);
+       $result=str_replace(', ',',',$result);
+       $result=str_replace(' ,',',',$result);
+       $result=str_replace('- ','-',$result);
+       $result=str_replace('+','',$result);
+
+       // remove double spaces (we might have introduced some new ones above)
+       $result=trim($result);
+       $result=preg_replace("/([[:space:]]{2,})/",' ',$result);
+
+       // apply arbitrary function to all 'word' atoms
+
+        $result_a = explode(" ",$result);
+        for($word=0;$word<count($result_a);$word++){
+            $result_a[$word] = "foo[('".$result_a[$word]."')]bar";
+        }
+        $result = implode(" ",$result_a);
+        
+       // dispatch ' ' to ' AND '
+       $result=str_replace(' ',' AND ',$result);
+
+       // dispatch ',' to ' OR '
+       $result=str_replace(',',' OR ',$result);
+
+       // dispatch '-' to ' NOT '
+       $result=str_replace(' -',' NOT ',$result);
+       return $result;
+    }
+    
+    function boolean_sql_where_short($string,$match){
+       $match_a = explode(',',$match);
+       for($ith=0;$ith<count($match_a);$ith++){
+               $like_a[$ith] = " $match_a[$ith] LIKE '% $string %' ";
+       }
+       $like = implode(" OR ",$like_a);
+
+       return $like;
+    }
+    function boolean_sql_select_short($string,$match){
+        $match_a = explode(',',$match);
+        $score_unit_weight = .2;
+        for($ith=0;$ith<count($match_a);$ith++){
+            $score_a[$ith] =
+                           " $score_unit_weight*(
+                           LENGTH(" . addslashes($match_a[$ith]) . ") -
+                           LENGTH(REPLACE(LOWER(" . addslashes($match_a[$ith]) . "),LOWER('" . addslashes($string) . "'),'')))
+                                      /LENGTH('" . addslashes($string) . "') ";
+        }
+           $score = implode(" + ",$score_a);
+
+        return $score;
+    }
+*/
+
+}
+?>
index c31a9f3..0728b43 100755 (executable)
-<?php\r
-\r
-\r
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  * Class representing a skin\r
-  *\r
-  * $Id: SKIN.php,v 1.4 2005-03-12 06:19:05 kimitake Exp $\r
-  * $NucleusJP$\r
-  */\r
-class SKIN {\r
-\r
-       // after creating a SKIN object, evaluates to true when the skin exists\r
-       var $isValid;\r
-       \r
-       // skin characteristics. Use the getXXX methods rather than accessing directly\r
-       var $id;\r
-       var $description;\r
-       var $contentType;\r
-       var $includeMode;               // either 'normal' or 'skindir'\r
-       var $includePrefix;\r
-       var $name;\r
-       \r
-       function SKIN($id) {\r
-               $this->id = intval($id);\r
-\r
-               // read skin name/description/content type\r
-               $res = sql_query('SELECT * FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $this->id);\r
-               $obj = mysql_fetch_object($res);\r
-               $this->isValid = (mysql_num_rows($res) > 0);\r
-               if (!$this->isValid)\r
-                       return;\r
-                       \r
-               $this->name = $obj->sdname;\r
-               $this->description = $obj->sddesc;\r
-               $this->contentType = $obj->sdtype;\r
-               $this->includeMode = $obj->sdincmode;\r
-               $this->includePrefix = $obj->sdincpref;\r
-\r
-       }\r
-       \r
-       function getID() {                              return $this->id; }\r
-       function getName() {                    return $this->name; }\r
-       function getDescription() {     return $this->description; }\r
-       function getContentType() {     return $this->contentType; }\r
-       function getIncludeMode() {     return $this->includeMode; }\r
-       function getIncludePrefix() {   return $this->includePrefix; }\r
-       \r
-       // returns true if there is a skin with the given shortname (static)\r
-       function exists($name) {\r
-               return quickQuery('select count(*) as result FROM '.sql_table('skin_desc').' WHERE sdname="'.addslashes($name).'"') > 0;\r
-       }\r
-\r
-       // returns true if there is a skin with the given ID (static)\r
-       function existsID($id) {\r
-               return quickQuery('select COUNT(*) as result FROM '.sql_table('skin_desc').' WHERE sdnumber='.intval($id)) > 0;\r
-       }       \r
-       \r
-       // (static)\r
-       function createFromName($name) {\r
-               return new SKIN(SKIN::getIdFromName($name));\r
-       }       \r
-       \r
-       // (static)\r
-       function getIdFromName($name) {\r
-               $query =  'SELECT sdnumber'\r
-                      . ' FROM '.sql_table('skin_desc')\r
-                      . ' WHERE sdname="'.addslashes($name).'"';\r
-               $res = sql_query($query);\r
-               $obj = mysql_fetch_object($res);\r
-               return $obj->sdnumber;  \r
-       }\r
-       \r
-       // (static)\r
-       function getNameFromId($id) {\r
-               return quickQuery('SELECT sdname as result FROM '.sql_table('skin_desc').' WHERE sdnumber=' . intval($id));\r
-       }\r
-       \r
-       /**\r
-        * Creates a new skin, with the given characteristics.\r
-        *\r
-        * (static)\r
-        */\r
-       function createNew($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {\r
-               global $manager;\r
-               \r
-               $manager->notify(\r
-                       'PreAddSkin',\r
-                       array(\r
-                               'name' => &$name,\r
-                               'description' => &$desc,\r
-                               'type' => &$type,\r
-                               'includeMode' => &$includeMode,\r
-                               'includePrefix' => &$includePrefix\r
-                       )\r
-               );\r
-\r
-               sql_query('INSERT INTO '.sql_table('skin_desc')." (sdname, sddesc, sdtype, sdincmode, sdincpref) VALUES ('" . addslashes($name) . "','" . addslashes($desc) . "','".addslashes($type)."','".addslashes($includeMode)."','".addslashes($includePrefix)."')");\r
-               $newid = mysql_insert_id();\r
-               \r
-               $manager->notify(\r
-                       'PostAddSkin',\r
-                       array(\r
-                               'skinid' => $newid,\r
-                               'name' => $name,\r
-                               'description' => $desc,\r
-                               'type' => $type,\r
-                               'includeMode' => $includeMode,\r
-                               'includePrefix' => $includePrefix\r
-                       )\r
-               );\r
-               \r
-               return $newid;\r
-       }\r
-       \r
-       function parse($type) {\r
-               global $manager, $CONF;\r
-\r
-               // set output type\r
-               sendContentType($this->getContentType(), 'skin', _CHARSET);\r
-\r
-               // set skin name as global var (so plugins can access it)\r
-               global $currentSkinName;\r
-               $currentSkinName = $this->getName();\r
-\r
-               $contents = $this->getContent($type);\r
-\r
-               if (!$contents) {\r
-                       // use base skin if this skin does not have contents\r
-                       $defskin =& new SKIN($CONF['BaseSkin']);\r
-                       $contents = $defskin->getContent($type);\r
-                       if (!$contents) {\r
-                               echo _ERROR_SKIN;\r
-                               return;\r
-                       }\r
-               }\r
-\r
-               $actions = $this->getAllowedActionsForType($type);\r
-\r
-               $manager->notify('PreSkinParse',array('skin' => &$this, 'type' => $type));\r
-\r
-               // set IncludeMode properties of parser\r
-               PARSER::setProperty('IncludeMode',$this->getIncludeMode());\r
-               PARSER::setProperty('IncludePrefix',$this->getIncludePrefix());\r
-\r
-               $handler =& new ACTIONS($type, $this);\r
-               $parser =& new PARSER($actions, $handler);\r
-               $handler->setParser($parser);\r
-               $handler->setSkin($this);\r
-               $parser->parse($contents);\r
-\r
-               $manager->notify('PostSkinParse',array('skin' => &$this, 'type' => $type));\r
-\r
-\r
-       }\r
-\r
-       function getContent($type) {\r
-               $query = 'SELECT scontent FROM '.sql_table('skin')." WHERE sdesc=$this->id and stype='". addslashes($type) ."'";\r
-               $res = sql_query($query);\r
-\r
-               if (mysql_num_rows($res) == 0)\r
-                       return '';\r
-               else\r
-                       return mysql_result($res, 0, 0);\r
-       }\r
-\r
-       /**\r
-        * Updates the contents of one part of the skin\r
-        */\r
-       function update($type, $content) {\r
-               $skinid = $this->id;\r
-\r
-               // delete old thingie\r
-               sql_query('DELETE FROM '.sql_table('skin')." WHERE stype='".addslashes($type)."' and sdesc=" . intval($skinid));\r
-\r
-               // write new thingie\r
-               if ($content) {\r
-                       sql_query('INSERT INTO '.sql_table('skin')." SET scontent='" . addslashes($content) . "', stype='" . addslashes($type) . "', sdesc=" . intval($skinid));\r
-               }       \r
-       }\r
-       \r
-       /**\r
-        * Deletes all skin parts from the database\r
-        */\r
-       function deleteAllParts() {\r
-               sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc='.$this->getID());\r
-       }\r
-       \r
-       /**\r
-        * Updates the general information about the skin\r
-        */\r
-       function updateGeneralInfo($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {\r
-               $query =  'UPDATE '.sql_table('skin_desc').' SET'\r
-                      . " sdname='" . addslashes($name) . "',"\r
-                      . " sddesc='" . addslashes($desc) . "',"\r
-                      . " sdtype='" . addslashes($type) . "',"\r
-                          . " sdincmode='" . addslashes($includeMode) . "',"\r
-                          . " sdincpref='" . addslashes($includePrefix) . "'"                 \r
-                      . " WHERE sdnumber=" . $this->getID();\r
-               sql_query($query);              \r
-       }\r
-       \r
-       /**\r
-        * static: returns an array of friendly names\r
-        */\r
-       function getFriendlyNames() {\r
-               return array(\r
-                       'index' => _SKIN_PART_MAIN,\r
-                       'item' => _SKIN_PART_ITEM,\r
-                       'archivelist' => _SKIN_PART_ALIST,\r
-                       'archive' => _SKIN_PART_ARCHIVE,\r
-                       'search' => _SKIN_PART_SEARCH,\r
-                       'error' => _SKIN_PART_ERROR,\r
-                       'member' => _SKIN_PART_MEMBER,\r
-                       'imagepopup' => _SKIN_PART_POPUP\r
-               );      \r
-       }\r
-       \r
-       function getAllowedActionsForType($type) {\r
-               // some actions that can be performed at any time, from anywhere\r
-               $defaultActions = array('otherblog',\r
-                                                               'plugin',\r
-                                                               'version',\r
-                                                               'nucleusbutton',\r
-                                                               'include',\r
-                                                               'phpinclude',\r
-                                                               'parsedinclude',\r
-                                                               'loginform',\r
-                                                               'sitevar',\r
-                                                               'otherarchivelist',\r
-                                                               'otherarchivedaylist',\r
-                                                               'self',\r
-                                                               'adminurl',\r
-                                                               'todaylink',\r
-                                                               'archivelink',\r
-                                                               'member',\r
-                                                               'ifcat',                                        // deprecated (Nucleus v2.0)\r
-                                                               'category',\r
-                                                               'searchform',\r
-                                                               'referer',\r
-                                                               'skinname',\r
-                                                               'skinfile',\r
-                                                               'set',\r
-                                                               'if',\r
-                                                               'else',\r
-                                                               'endif'\r
-                                                               );\r
-               \r
-               // extra actions specific for a certain skin type\r
-               $extraActions = array();\r
-\r
-               switch ($type) {\r
-                       case 'index':\r
-                               $extraActions = array('blog', \r
-                                                   'blogsetting',\r
-                                                   'preview',\r
-                                                   'additemform',\r
-                                                               'categorylist',                                             \r
-                                                   'archivelist',\r
-                                                   'archivedaylist',\r
-                                                   'nextlink',\r
-                                                   'prevlink'\r
-                                                   );                          \r
-                               break;\r
-                       case 'archive':\r
-                               $extraActions = array('blog',\r
-                                                               'archive',\r
-                                                               'otherarchive',\r
-                                                               'categorylist',                                                         \r
-                                                               'archivelist',\r
-                                                   'archivedaylist',                                                           \r
-                                                               'blogsetting',\r
-                                                               'archivedate',\r
-                                                           'nextarchive',\r
-                                                           'prevarchive',\r
-                                                           'nextlink',\r
-                                                           'prevlink',\r
-                                                           'archivetype'\r
-                               );\r
-                               break;\r
-                       case 'archivelist':\r
-                               $extraActions = array('blog',\r
-                                                           'archivelist',\r
-                                                               'archivedaylist',\r
-                                                               'categorylist',\r
-                                                           'blogsetting',\r
-                                                          );\r
-                               break;\r
-                       case 'search':\r
-                               $extraActions = array('blog',\r
-                                                               'archivelist',\r
-                                                   'archivedaylist',\r
-                                                               'categorylist',\r
-                                                               'searchresults',\r
-                                                               'othersearchresults',\r
-                                                               'blogsetting',\r
-                                                               'query',\r
-                                                               'nextlink',\r
-                                                               'prevlink'\r
-                                                               );\r
-                               break;\r
-                       case 'imagepopup':\r
-                               $extraActions = array('image',\r
-                                                               'imagetext',                            // deprecated (Nucleus v2.0)\r
-                                                               );\r
-                               break;\r
-                       case 'member':\r
-                               $extraActions = array(\r
-                                                               'membermailform',\r
-                                                               'blogsetting',\r
-                                                               'nucleusbutton'\r
-                               );\r
-                               break;\r
-                       case 'item':\r
-                               $extraActions = array('blog',\r
-                                                           'item',\r
-                                                           'comments',\r
-                                                           'commentform',\r
-                                                           'vars',\r
-                                                           'blogsetting',\r
-                                                           'nextitem',\r
-                                                           'previtem',\r
-                                                           'nextlink',\r
-                                                           'prevlink',\r
-                                                           'nextitemtitle',\r
-                                                           'previtemtitle',\r
-                                                               'categorylist',                                                     \r
-                                                           'archivelist',\r
-                                                   'archivedaylist',                                                       \r
-                                                           'itemtitle',\r
-                                                           'itemid',\r
-                                                           'itemlink',\r
-                                                           );\r
-                               break;\r
-                       case 'error':\r
-                               $extraActions = array(\r
-                                                               'errormessage'\r
-                               );\r
-                               break;\r
-               }\r
-               return array_merge($defaultActions, $extraActions);\r
-       }\r
-       \r
-}\r
-\r
-\r
-/*\r
- * This class contains the functions that get called by using\r
- * the special tags in the skins\r
- *\r
- * The allowed tags for a type of skinpart are defined by the \r
- * SKIN::getAllowedActionsForType($type) method\r
- */\r
-class ACTIONS extends BaseActions {\r
-\r
-       // part of the skin currently being parsed ('index', 'item', 'archive',\r
-       // 'archivelist', 'member', 'search', 'error', 'imagepopup')\r
-       var $skintype;\r
-       \r
-       // contains an assoc array with parameters that need to be included when\r
-       // generating links to items/archives/... (e.g. catid)  \r
-       var $linkparams;\r
-       \r
-       // reference to the skin object for which a part is being parsed\r
-       var $skin;\r
-       \r
-\r
-       // used when including templated forms from the include/ dir. The $formdata var \r
-       // contains the values to fill out in there (assoc array name -> value)\r
-       var $formdata;\r
-       \r
-\r
-       // filled out with the number of displayed items after calling one of the \r
-\r
-       // (other)blog/(other)searchresults skinvars.\r
-\r
-       var $amountfound;\r
-\r
-       function ACTIONS($type) {\r
-               // call constructor of superclass first\r
-               $this->BaseActions();\r
-\r
-               $this->skintype = $type;\r
-\r
-               global $catid;\r
-               if ($catid) \r
-                       $this->linkparams = array('catid' => $catid);\r
-       }\r
-\r
-       function setSkin(&$skin) {\r
-               $this->skin =& $skin;\r
-       }\r
-       \r
-       function setParser(&$parser) {\r
-               $this->parser =& $parser;\r
-       }\r
-       \r
-       /*\r
-               Forms get parsedincluded now, using an extra <formdata> skinvar\r
-       */\r
-       function doForm($filename) {\r
-               global $DIR_NUCLEUS;\r
-               array_push($this->parser->actions,'formdata','text','callback','errordiv');\r
-               $oldIncludeMode = PARSER::getProperty('IncludeMode');\r
-               $oldIncludePrefix = PARSER::getProperty('IncludePrefix');\r
-               PARSER::setProperty('IncludeMode','normal');\r
-               PARSER::setProperty('IncludePrefix','');\r
-               $this->parse_parsedinclude($DIR_NUCLEUS . 'forms/' . $filename . '.template');\r
-               PARSER::setProperty('IncludeMode',$oldIncludeMode);\r
-               PARSER::setProperty('IncludePrefix',$oldIncludePrefix);\r
-               array_pop($this->parser->actions);              // errordiv\r
-               array_pop($this->parser->actions);              // callback\r
-               array_pop($this->parser->actions);              // text\r
-               array_pop($this->parser->actions);              // formdata\r
-       }\r
-       function parse_formdata($what) {\r
-               echo $this->formdata[$what];\r
-       }\r
-       function parse_text($which) {\r
-               // constant($which) only available from 4.0.4 :(\r
-               if (defined($which)) {  \r
-                       eval("echo $which;");\r
-               }\r
-       }\r
-       function parse_callback($eventName, $type)\r
-       {\r
-               global $manager;\r
-               $manager->notify($eventName, array('type' => $type));\r
-       }\r
-       function parse_errordiv() {\r
-               global $errormessage;\r
-               if ($errormessage)\r
-                       echo '<div class="error">', htmlspecialchars($errormessage),'</div>';\r
-       }\r
-       \r
-       function parse_skinname() {\r
-               echo $this->skin->getName();\r
-       }\r
-       \r
-       function parse_if($field, $name='', $value = '') {\r
-               global $catid, $blog, $member, $itemidnext, $itemidprev, $manager;\r
-\r
-               $condition = 0;\r
-               switch($field) {\r
-                       case 'category':\r
-                               $condition = ($blog && $this->_ifCategory($name,$value));\r
-                               break;\r
-                       case 'blogsetting':\r
-                               if ($name == 'trackback' && $manager->pluginInstalled('NP_TrackBack')) {\r
-                                       $plugin =& $manager->getPlugin('NP_TrackBack');\r
-                                       if ($plugin != NULL && $blog){\r
-                                               $bid = $blog->getID();\r
-                                               if ($value === '1') $value = 'yes';\r
-                                               if ($value === '0') $value = 'no';\r
-                                               if ($plugin->getOption('AcceptPing') == 'no' ) {\r
-                                                       $condition = ($value == 'no');\r
-                                                       } else {\r
-                                                       $tb_option = $plugin->getBlogOption($bid,'AllowTrackBack');\r
-                                                       if (!$tb_option) {\r
-                                                               $condition = ($value == 'yes');\r
-                                                       } else {\r
-                                                               $condition = ($tb_option == $value);\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                                       break;\r
-                               }\r
-                               $condition = ($blog && ($blog->getSetting($name) == $value));\r
-                               break;\r
-                       case 'loggedin':\r
-                               $condition = $member->isLoggedIn();\r
-                               break;\r
-                       case 'onteam':\r
-                               $condition = $member->isLoggedIn() && $this->_ifOnTeam($name);\r
-                               break;\r
-                       case 'admin':\r
-                               $condition = $member->isLoggedIn() && $this->_ifAdmin($name);\r
-                               break;                          \r
-                       case 'nextitem':\r
-                               $condition = ($itemidnext != '');\r
-                               break;\r
-                       case 'previtem':\r
-                               $condition = ($itemidprev != ''); \r
-                               break;\r
-                       case 'skintype':\r
-                               $condition = ($name == $this->skintype);\r
-                               break;\r
-                       /*\r
-                               hasplugin,PlugName\r
-                                       -> checks if plugin exists\r
-                               hasplugin,PlugName,OptionName\r
-                                       -> checks if the option OptionName from plugin PlugName is not set to 'no'\r
-                               hasplugin,PlugName,OptionName=value\r
-                                       -> checks if the option OptionName from plugin PlugName is set to value\r
-                       */\r
-                       case 'hasplugin':\r
-                $condition = false;\r
-                // (pluginInstalled method won't write a message in the actionlog on failure)\r
-                if ($manager->pluginInstalled('NP_'.$name)) \r
-                {\r
-                                       $plugin =& $manager->getPlugin('NP_' . $name);\r
-                                       if ($plugin != NULL){\r
-                                               if ($value == "") {\r
-                                                       $condition = true;\r
-                                               } else {\r
-                                                       list($name2, $value2) = explode('=', $value, 2);\r
-                                                       if ($value2 == "" && $plugin->getOption($name2) != 'no') {\r
-                                                               $condition = true;\r
-                                                       } else if ($plugin->getOption($name2) == $value2) {\r
-                                                               $condition = true;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                }\r
-                break;                         \r
-                       default:        \r
-                               return;\r
-               }\r
-               $this->_addIfCondition($condition);\r
-       }\r
-       \r
-       function _ifCategory($name = '', $value='') {\r
-               global $blog, $catid;\r
-\r
-               // when no parameter is defined, just check if a category is selected\r
-               if (($name != 'catname' && $name != 'catid') || ($value == ''))\r
-                       return $blog->isValidCategory($catid);\r
-\r
-               // check category name\r
-               if ($name == 'catname') {\r
-                       $value = $blog->getCategoryIdFromName($value);\r
-                       if ($value == $catid)\r
-                               return $blog->isValidCategory($catid);\r
-               }\r
-\r
-               // check category id\r
-               if (($name == 'catid') && ($value == $catid))\r
-                       return $blog->isValidCategory($catid);\r
-               \r
-               return false;\r
-       }\r
-   \r
-       function _ifOnTeam($blogName = '') {\r
-               global $blog, $member, $manager;\r
-               \r
-               // when no blog found\r
-               if (($blogName == '') && (!is_object($blog)))\r
-                       return 0;\r
-               \r
-               // explicit blog selection\r
-               if ($blogName != '') \r
-                       $blogid = getBlogIDFromName($blogName); \r
-               \r
-               if (($blogName == '') || !$manager->existsBlogID($blogid))\r
-                       // use current blog\r
-                       $blogid = $blog->getID();\r
-                       \r
-               return $member->teamRights($blogid);\r
-       }\r
-       \r
-       function _ifAdmin($blogName = '') {\r
-               global $blog, $member, $manager;\r
-\r
-               // when no blog found\r
-               if (($blogName == '') && (!is_object($blog)))\r
-                       return 0;\r
-\r
-               // explicit blog selection\r
-               if ($blogName != '')\r
-                       $blogid = getBlogIDFromName($blogName);\r
-\r
-               if (($blogName == '') || !$manager->existsBlogID($blogid))\r
-                       // use current blog\r
-                       $blogid = $blog->getID();\r
-\r
-               return $member->isBlogAdmin($blogid);\r
-       }       \r
-       \r
-       function parse_ifcat($text = '') {\r
-               if ($text == '') {\r
-                       // new behaviour\r
-                       $this->parse_if('category');\r
-               } else {\r
-                       // old behaviour\r
-                       global $catid, $blog;\r
-                       if ($blog->isValidCategory($catid))\r
-                               echo $text;\r
-               }\r
-       }\r
-       \r
-       // a link to the today page (depending on selected blog, etc...)\r
-       function parse_todaylink($linktext = '') {\r
-               global $blog, $CONF;\r
-               if ($blog)\r
-                       echo $this->_link(createBlogidLink($blog->getID(),$this->linkparams), $linktext);\r
-               else\r
-                       echo $this->_link($CONF['SiteUrl'], $linktext);\r
-       }\r
-       \r
-       // a link to the archives for the current blog (or for default blog)\r
-       function parse_archivelink($linktext = '') {\r
-               global $blog, $CONF;\r
-               if ($blog)\r
-                       echo $this->_link(createArchiveListLink($blog->getID(),$this->linkparams), $linktext);\r
-               else\r
-                       echo $this->_link(createArchiveListLink(), $linktext);\r
-       }\r
-\r
-       // include itemid of prev item\r
-       function parse_previtem() {\r
-               global $itemidprev;\r
-               echo $itemidprev;\r
-       }\r
-\r
-       // include itemtitle of prev item\r
-       function parse_previtemtitle() {\r
-               global $itemtitleprev;\r
-               echo htmlspecialchars($itemtitleprev);\r
-       }\r
-\r
-       // include itemid of next item\r
-       function parse_nextitem() {\r
-               global $itemidnext;\r
-               echo $itemidnext;\r
-       }\r
-\r
-       // include itemtitle of next item\r
-       function parse_nextitemtitle() {\r
-               global $itemtitlenext;\r
-               echo htmlspecialchars($itemtitlenext);\r
-       }\r
-\r
-       function parse_prevarchive() {\r
-               global $archiveprev;\r
-               echo $archiveprev;\r
-       }\r
-\r
-       function parse_nextarchive() {\r
-               global $archivenext;\r
-               echo $archivenext;\r
-       }\r
-\r
-       function parse_archivetype() {\r
-               global $archivetype;\r
-               echo $archivetype;\r
-       }\r
-\r
-       function parse_prevlink($linktext = '', $amount = 10) {\r
-               global $itemidprev, $archiveprev, $startpos;\r
-\r
-               if ($this->skintype == 'item')\r
-                       $this->_itemlink($itemidprev, $linktext);\r
-           else if ($this->skintype == 'search' || $this->skintype == 'index')\r
-               $this->_searchlink($amount, $startpos, 'prev', $linktext);\r
-               else\r
-                       $this->_archivelink($archiveprev, $linktext);\r
-       }\r
-       \r
-       function parse_nextlink($linktext = '', $amount = 10) {\r
-               global $itemidnext, $archivenext, $startpos;\r
-               if ($this->skintype == 'item')\r
-                       $this->_itemlink($itemidnext, $linktext);\r
-           else if ($this->skintype == 'search' || $this->skintype == 'index')\r
-               $this->_searchlink($amount, $startpos, 'next', $linktext);\r
-               else\r
-                       $this->_archivelink($archivenext, $linktext);\r
-       }\r
-       \r
-       /**\r
-        * returns either\r
-        *              - a raw link (html/xml encoded) when no linktext is provided\r
-        *              - a (x)html <a href... link when a text is present (text htmlencoded)\r
-        */\r
-       function _link($url, $linktext = '')\r
-       {\r
-               $u = htmlspecialchars($url);\r
-               $u = preg_replace("/&amp;amp;/",'&amp;',$u); // fix URLs that already had encoded ampersands\r
-               if ($linktext != '')\r
-                       $l = '<a href="' . $u .'">'.htmlspecialchars($linktext).'</a>';\r
-               else\r
-                       $l = $u;\r
-               return $l;      \r
-       }\r
-\r
-       /**\r
-        * Outputs a next/prev link\r
-        *\r
-        * @param $maxresults\r
-        *              The maximum amount of items shown per page (e.g. 10)\r
-        * @param $startpos\r
-        *              Current start position (requestVar('startpos'))\r
-        * @param $direction\r
-        *              either 'prev' or 'next'\r
-        * @param $linktext\r
-        *              When present, the output will be a full <a href...> link. When empty,\r
-        *              only a raw link will be outputted\r
-        */\r
-    function _searchlink($maxresults, $startpos, $direction, $linktext = '') {\r
-        global $CONF, $blog, $query, $amount;\r
-        // TODO: Move request uri to linkparams. this is ugly. sorry for that.\r
-        $startpos      = intval($startpos);            // will be 0 when empty. \r
-        $parsed                = parse_url(serverVar('REQUEST_URI'));\r
-        $parsed                = $parsed['query'];\r
-               $url            = '';\r
-        \r
-        switch ($direction) {\r
-            case 'prev':\r
-                if ( intval($startpos) - intval($maxresults) >= 0) {\r
-                    $startpos  = intval($startpos) - intval($maxresults);\r
-                    $url               = $CONF['SearchURL'].'?'.alterQueryStr($parsed,'startpos',$startpos);\r
-                }\r
-                break;\r
-            case 'next':\r
-                $iAmountOnPage = $this->amountfound;\r
-                if ($iAmountOnPage == 0)\r
-                {\r
-                       // [%nextlink%] or [%prevlink%] probably called before [%blog%] or [%searchresults%]\r
-                       // try a count query\r
-                       switch ($this->skintype)\r
-                       {\r
-                               case 'index':\r
-                                       $sqlquery = $blog->getSqlBlog('', 'count');\r
-                                       break;\r
-                               case 'search':\r
-                                       $sqlquery = $blog->getSqlSearch($query, $amount, $unused_highlight, 'count');\r
-                                       break;\r
-                       }\r
-                       if ($sqlquery) \r
-                               $iAmountOnPage = intval(quickQuery($sqlquery)) - intval($startpos);\r
-                }\r
-                if (intval($iAmountOnPage) >= intval($maxresults)) {\r
-                       $startpos       = intval($startpos) + intval($maxresults);                \r
-                       $url            = $CONF['SearchURL'].'?'.alterQueryStr($parsed,'startpos',$startpos);\r
-                }\r
-                break;\r
-            default:\r
-                break;\r
-        } // switch($direction)\r
-\r
-               if ($url != '')\r
-                       echo $this->_link($url, $linktext);        \r
-    }\r
-\r
-       function _itemlink($id, $linktext = '') {\r
-               global $CONF;\r
-               if ($id)\r
-                       echo $this->_link(createItemLink($id, $this->linkparams), $linktext);\r
-               else\r
-                       $this->parse_todaylink($linktext);\r
-       }\r
-\r
-       function _archivelink($id, $linktext = '') {\r
-               global $CONF, $blog;\r
-               if ($id)\r
-                       echo $this->_link(createArchiveLink($blog->getID(), $id, $this->linkparams), $linktext);\r
-               else\r
-                       $this->parse_todaylink($linktext);\r
-       }\r
-       \r
-       \r
-       function parse_itemlink($linktext = '') {       \r
-               $this->_itemlink($itemid, $linktext);\r
-       }\r
-       \r
-       /**\r
-         * %archivedate(locale,date format)%\r
-         */\r
-       function parse_archivedate($locale = '-def-') {\r
-               global $archive;\r
-               \r
-               if ($locale == '-def-')\r
-                       setlocale(LC_TIME,$template['LOCALE']);\r
-               else\r
-                       setlocale(LC_TIME,$locale);\r
-               \r
-               // get archive date\r
-               sscanf($archive,'%d-%d-%d',$y,$m,$d);\r
-\r
-               // get format           \r
-               $args = func_get_args();\r
-               // format can be spread over multiple parameters\r
-               if (sizeof($args) > 1) {\r
-                       // take away locale\r
-                       array_shift($args);\r
-                       // implode\r
-                       $format=implode(',',$args);\r
-               } elseif ($d == 0) {\r
-                       $format = '%B %Y';      \r
-               } else {\r
-                       $format = '%d %B %Y';   \r
-               }\r
-               \r
-               echo strftime($format,mktime(0,0,0,$m,$d?$d:1,$y));             \r
-       }\r
-       \r
-       function parse_blog($template, $amount = 10, $category = '') {\r
-               global $blog, $startpos;\r
-               \r
-               list($limit, $offset) = sscanf($amount, '%d(%d)');\r
-               $this->_setBlogCategory($blog, $category);\r
-               $this->_preBlogContent('blog',$blog);\r
-               $this->amountfound = $blog->readLog($template, $limit, $offset, $startpos);\r
-               $this->_postBlogContent('blog',$blog);\r
-       }\r
-\r
-       function parse_otherblog($blogname, $template, $amount = 10, $category = '') {\r
-               global $manager;\r
-\r
-               list($limit, $offset) = sscanf($amount, '%d(%d)');\r
-\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->_setBlogCategory($b, $category);\r
-               $this->_preBlogContent('otherblog',$b);\r
-               $this->amountfound = $b->readLog($template, $limit, $offset);\r
-               $this->_postBlogContent('otherblog',$b);\r
-       }\r
-\r
-       // include one item (no comments)\r
-       function parse_item($template) {\r
-               global $blog, $itemid, $highlight;\r
-               $this->_setBlogCategory($blog, '');     // need this to select default category\r
-               $this->_preBlogContent('item',$blog);\r
-               $r = $blog->showOneitem($itemid, $template, $highlight);\r
-               if ($r == 0)\r
-                       echo _ERROR_NOSUCHITEM;\r
-               $this->_postBlogContent('item',$blog);\r
-       }\r
-\r
-       function parse_itemid() {\r
-               global $itemid;\r
-               echo $itemid;\r
-       }\r
-\r
-\r
-       // include comments for one item\r
-       function parse_comments($template) {\r
-               global $itemid, $manager, $blog, $highlight;\r
-               $template =& $manager->getTemplate($template);\r
-\r
-               // create parser object & action handler\r
-               $actions =& new ITEMACTIONS($blog);\r
-               $parser =& new PARSER($actions->getDefinedActions(),$actions);\r
-               $actions->setTemplate($template);\r
-               $actions->setParser($parser);\r
-               $item = ITEM::getitem($itemid, 0, 0);\r
-               $actions->setCurrentItem($item);\r
-\r
-               $comments =& new COMMENTS($itemid);\r
-               $comments->setItemActions($actions);\r
-               $comments->showComments($template, -1, 1, $highlight);  // shows ALL comments\r
-       }\r
-\r
-       function parse_archive($template, $category = '') {\r
-               global $blog, $archive;\r
-               // can be used with either yyyy-mm or yyyy-mm-dd\r
-               sscanf($archive,'%d-%d-%d',$y,$m,$d);\r
-               $this->_setBlogCategory($blog, $category);\r
-               $this->_preBlogContent('achive',$blog);\r
-               $blog->showArchive($template, $y, $m, $d);\r
-               $this->_postBlogContent('achive',$blog);\r
-\r
-       }\r
-\r
-       function parse_otherarchive($blogname, $template, $category = '') {\r
-               global $archive, $manager;\r
-               sscanf($archive,'%d-%d-%d',$y,$m,$d);\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->_setBlogCategory($b, $category);\r
-               $this->_preBlogContent('otherachive',$b);\r
-               $b->showArchive($template, $y, $m, $d);\r
-               $this->_postBlogContent('otherachive',$b);\r
-       }\r
-\r
-       function parse_archivelist($template, $category = 'all', $limit = 0) {\r
-               global $blog;\r
-               if ($category == 'all') $category = '';\r
-               $this->_preBlogContent('archivelist',$blog);\r
-               $this->_setBlogCategory($blog, $category);\r
-               $blog->showArchiveList($template, 'month', $limit);\r
-               $this->_postBlogContent('archivelist',$blog);\r
-       }\r
-\r
-       function parse_archivedaylist($template, $category = 'all', $limit = 0) {\r
-               global $blog;\r
-               if ($category == 'all') $category = '';\r
-               $this->_preBlogContent('archivelist',$blog);\r
-               $this->_setBlogCategory($blog, $category);\r
-               $blog->showArchiveList($template, 'day', $limit);\r
-               $this->_postBlogContent('archivelist',$blog);\r
-       }\r
-\r
-\r
-       function parse_itemtitle() {\r
-               global $manager, $itemid;\r
-               $item =& $manager->getItem($itemid,0,0);\r
-               echo htmlspecialchars(strip_tags($item['title']));\r
-       }\r
-\r
-       function parse_categorylist($template, $blogname = '') {\r
-               global $blog, $manager;\r
-\r
-               if ($blogname == '') {\r
-                       $this->_preBlogContent('categorylist',$blog);\r
-                       $blog->showCategoryList($template);\r
-                       $this->_postBlogContent('categorylist',$blog);\r
-               } else {\r
-                       $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-                       $this->_preBlogContent('categorylist',$b);\r
-                       $b->showCategoryList($template);\r
-                       $this->_postBlogContent('categorylist',$b);\r
-               }\r
-       }\r
-\r
-       function parse_category($type = 'name') {\r
-               global $catid, $blog;\r
-               if (!$blog->isValidCategory($catid))\r
-                       return;\r
-\r
-               switch($type) {\r
-                       case 'name':\r
-                               echo $blog->getCategoryName($catid);\r
-                               break;\r
-                       case 'desc':\r
-                               echo $blog->getCategoryDesc($catid);\r
-                               break;\r
-                       case 'id':\r
-                               echo $catid;\r
-                               break;\r
-               }\r
-       }\r
-\r
-       function parse_otherarchivelist($blogname, $template, $category = 'all', $limit = 0) {\r
-               global $manager;\r
-               if ($category == 'all') $category = '';\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->_setBlogCategory($b, $category);\r
-               $this->_preBlogContent('otherarchivelist',$b);\r
-               $b->showArchiveList($template, 'month', $limit);\r
-               $this->_postBlogContent('otherarchivelist',$b);\r
-       }\r
-\r
-       function parse_otherarchivedaylist($blogname, $template, $category = 'all', $limit = 0) {\r
-               global $manager;\r
-               if ($category == 'all') $category = '';\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->_setBlogCategory($b, $category);\r
-               $this->_preBlogContent('otherarchivelist',$b);\r
-               $b->showArchiveList($template, 'day', $limit);\r
-               $this->_postBlogContent('otherarchivelist',$b);\r
-       }\r
-\r
-       function parse_searchresults($template, $maxresults = 50 ) {\r
-               global $blog, $query, $amount, $startpos;\r
-\r
-               $this->_setBlogCategory($blog, '');     // need this to select default category\r
-               $this->_preBlogContent('searchresults',$blog);\r
-               $this->amountfound = $blog->search($query, $template, $amount, $maxresults, $startpos);\r
-               $this->_postBlogContent('searchresults',$blog);\r
-       }\r
-\r
-       function parse_othersearchresults($blogname, $template, $maxresults = 50) {\r
-               global $query, $amount, $manager, $startpos;\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->_setBlogCategory($b, '');        // need this to select default category\r
-               $this->_preBlogContent('othersearchresults',$b);\r
-               $b->search($query, $template, $amount, $maxresults, $startpos);\r
-               $this->_postBlogContent('othersearchresults',$b);\r
-       }\r
-\r
-       // includes the search query\r
-       function parse_query() {\r
-               global $query;\r
-               echo htmlspecialchars($query);\r
-       }\r
-                       \r
-       // include nucleus versionnumber\r
-       function parse_version() {\r
-               global $nucleus;\r
-               echo 'Nucleus CMS ' . $nucleus['version'];\r
-       }\r
-       \r
-\r
-       function parse_errormessage() {\r
-               global $errormessage;\r
-               echo $errormessage;\r
-       }\r
-\r
-\r
-       function parse_imagetext() {                    \r
-               echo htmlspecialchars(requestVar('imagetext'));\r
-       }\r
-       \r
-       function parse_image($what = 'imgtag') {\r
-               global $CONF;\r
-\r
-               $imagetext      = htmlspecialchars(requestVar('imagetext'));\r
-               $imagepopup = requestVar('imagepopup');\r
-               $width          = intRequestVar('width');\r
-               $height         = intRequestVar('height');\r
-               $fullurl        = htmlspecialchars($CONF['MediaURL'] . $imagepopup);\r
-               \r
-               switch($what)\r
-               {\r
-                       case 'url':\r
-                               echo $fullurl;\r
-                               break;\r
-                       case 'width':\r
-                               echo $width;\r
-                               break;\r
-                       case 'height':\r
-                               echo $height;\r
-                               break;\r
-                       case 'caption':\r
-                       case 'text':                    \r
-                               echo $imagetext;\r
-                               break;\r
-                       case 'imgtag':\r
-                       default:\r
-                               echo "<img src=\"$fullurl\" width=\"$width\" height=\"$height\" alt=\"$imagetext\" title=\"$imagetext\" />";\r
-                               break;\r
-               }\r
-       }\r
-       \r
-       // When commentform is not used, to include a hidden field with itemid\r
-       function parse_vars() {\r
-               global $itemid;\r
-               echo '<input type="hidden" name="itemid" value="'.$itemid.'" />';\r
-       }\r
-       \r
-       // include a sitevar\r
-       function parse_sitevar($which) {\r
-               global $CONF;\r
-               switch($which) {\r
-                       case 'url':\r
-                               echo $CONF['IndexURL'];\r
-                               break;\r
-                       case 'name':\r
-                               echo $CONF['SiteName'];\r
-                               break;\r
-                       case 'admin':\r
-                               echo $CONF['AdminEmail'];\r
-                               break;\r
-                       case 'adminurl':\r
-                               echo $CONF['AdminURL'];\r
-               }                       \r
-       }\r
-       \r
-       // shortcut for admin url\r
-       function parse_adminurl() { $this->parse_sitevar('adminurl'); }\r
-       \r
-       function parse_blogsetting($which) {\r
-               global $blog;\r
-               switch($which) {\r
-                       case 'id':\r
-                               echo $blog->getID();\r
-                               break;\r
-                       case 'url':\r
-                               echo $blog->getURL();\r
-                               break;\r
-                       case 'name':\r
-                               echo $blog->getName();\r
-                               break;\r
-                       case 'desc':\r
-                               echo $blog->getDescription();\r
-                               break;\r
-                       case 'short':\r
-                               echo $blog->getShortName();\r
-                               break;                          \r
-               }       \r
-       }\r
-       \r
-       // includes a member info thingie\r
-       function parse_member($what) {\r
-               global $memberinfo, $member;\r
-               \r
-               // 1. only allow the member-details-page specific variables on member pages\r
-               if ($this->skintype == 'member') {\r
-\r
-                       switch($what) {\r
-                               case 'name':\r
-                                       echo $memberinfo->getDisplayName();\r
-                                       break;\r
-                               case 'realname':\r
-                                       echo $memberinfo->getRealName();\r
-                                       break;\r
-                               case 'notes':\r
-                                       echo $memberinfo->getNotes();\r
-                                       break;\r
-                               case 'url':\r
-                                       echo $memberinfo->getURL();\r
-                                       break;\r
-                               case 'email':\r
-                                       echo $memberinfo->getEmail();\r
-                                       break;\r
-                               case 'id':\r
-                                       echo $memberinfo->getID();\r
-                                       break;                                  \r
-                       }       \r
-               }\r
-               \r
-               // 2. the next bunch of options is available everywhere, as long as the user is logged in\r
-               if ($member->isLoggedIn())\r
-               {\r
-                       switch($what) {\r
-                               case 'yourname':\r
-                                       echo $member->getDisplayName();\r
-                                       break;\r
-                               case 'yourrealname':\r
-                                       echo $member->getRealName();\r
-                                       break;\r
-                               case 'yournotes':\r
-                                       echo $member->getNotes();\r
-                                       break;\r
-                               case 'yoururl':\r
-                                       echo $member->getURL();\r
-                                       break;\r
-                               case 'youremail':\r
-                                       echo $member->getEmail();\r
-                                       break;\r
-                               case 'yourid':\r
-                                       echo $member->getID();\r
-                                       break;                                                                  \r
-                       }       \r
-               }\r
-\r
-       }\r
-       \r
-       function parse_preview($template) {\r
-               global $blog, $CONF, $manager;\r
-               \r
-               $template =& $manager->getTemplate($template);\r
-               $row['body'] = '<span id="prevbody"></span>';\r
-               $row['title'] = '<span id="prevtitle"></span>';\r
-               $row['more'] = '<span id="prevmore"></span>';\r
-               $row['itemlink'] = '';\r
-               $row['itemid'] = 0; $row['blogid'] = $blog->getID();\r
-               echo TEMPLATE::fill($template['ITEM_HEADER'],$row);\r
-               echo TEMPLATE::fill($template['ITEM'],$row);\r
-               echo TEMPLATE::fill($template['ITEM_FOOTER'],$row);\r
-       }\r
-       \r
-       function parse_additemform() {\r
-               global $blog, $CONF;\r
-               $this->formdata = array(\r
-                       'adminurl' => htmlspecialchars($CONF['AdminURL']),\r
-                       'catid' => $blog->getDefaultCategory()\r
-               );\r
-               $blog->InsertJavaScriptInfo(); \r
-               $this->doForm('additemform');\r
-       }\r
-\r
-       /**\r
-         * Executes a plugin skinvar\r
-         *\r
-         * @param pluginName name of plugin (without the NP_)\r
-         * \r
-         * extra parameters can be added\r
-         */\r
-       function parse_plugin($pluginName) {\r
-               global $manager;\r
-               \r
-               // only continue when the plugin is really installed\r
-               if (!$manager->pluginInstalled('NP_' . $pluginName))\r
-                       return;\r
-               \r
-               $plugin =& $manager->getPlugin('NP_' . $pluginName);\r
-               if (!$plugin) return;\r
-\r
-               // get arguments\r
-               $params = func_get_args();\r
-               \r
-               // remove plugin name \r
-               array_shift($params);\r
-               \r
-               // add skin type on front\r
-               array_unshift($params, $this->skintype);\r
-               \r
-               call_user_func_array(array(&$plugin,'doSkinVar'), $params);\r
-       }\r
-\r
-                       \r
-       function parse_commentform($destinationurl = '') {\r
-               global $blog, $itemid, $member, $CONF, $manager, $DIR_LIBS, $errormessage;\r
-               \r
-               // warn when trying to provide a actionurl (used to be a parameter in Nucleus <2.0)\r
-               if (stristr($destinationurl, 'action.php')) {\r
-                       $args = func_get_args();\r
-                       $destinationurl = $args[1];\r
-                       ACTIONLOG::add(WARNING,'actionurl is not longer a parameter on commentform skinvars. Moved to be a global setting instead.');\r
-               }\r
-               \r
-               $actionurl = $CONF['ActionURL'];\r
-               \r
-               // if item is closed, show message and do nothing\r
-               $item =& $manager->getItem($itemid,0,0);\r
-               if ($item['closed'] || !$blog->commentsEnabled()) {\r
-                       $this->doForm('commentform-closed');\r
-                       return;\r
-               }\r
-               \r
-               if (!$destinationurl)\r
-                       $destinationurl = createItemLink($itemid, $this->linkparams);\r
-\r
-               // values to prefill\r
-               $user = cookieVar($CONF['CookiePrefix'] .'comment_user');\r
-               if (!$user) $user = postVar('user');\r
-               $userid = cookieVar($CONF['CookiePrefix'] .'comment_userid');\r
-               if (!$userid) $userid = postVar('userid');\r
-               $body = postVar('body');\r
-               \r
-               $this->formdata = array(\r
-                       'destinationurl' => htmlspecialchars($destinationurl),\r
-                       'actionurl' => htmlspecialchars($actionurl),\r
-                       'itemid' => $itemid,\r
-                       'user' => htmlspecialchars($user),\r
-                       'userid' => htmlspecialchars($userid),                  \r
-                       'body' => htmlspecialchars($body),                      \r
-                       'membername' => $member->getDisplayName(),\r
-                       'rememberchecked' => cookieVar($CONF['CookiePrefix'] .'comment_user')?'checked="checked"':''\r
-               );\r
-               \r
-               if (!$member->isLoggedIn()) {\r
-                       $this->doForm('commentform-notloggedin');\r
-               } else {\r
-                       $this->doForm('commentform-loggedin');          \r
-               }\r
-       }\r
-\r
-       function parse_loginform() {\r
-               global $member, $CONF;\r
-               if (!$member->isLoggedIn()) {\r
-                       $filename = 'loginform-notloggedin';\r
-                       $this->formdata = array();\r
-               } else {\r
-                       $filename = 'loginform-loggedin';\r
-                       $this->formdata = array(\r
-                               'membername' => $member->getDisplayName(),\r
-                       );\r
-               }\r
-               $this->doForm($filename);\r
-       }       \r
-       \r
-       \r
-       function parse_membermailform($rows = 10, $cols = 40, $desturl = '') {\r
-               global $member, $CONF, $memberid;\r
-               \r
-               if ($desturl == '') {\r
-                       if ($CONF['URLMode'] == 'pathinfo')\r
-                               $desturl = createMemberLink($memberid);\r
-                       else\r
-                               $desturl = $CONF['IndexURL'] . createMemberLink($memberid);                             \r
-               }\r
-                       \r
-               $message = postVar('message');\r
-               $frommail = postVar('frommail');\r
-               \r
-               $this->formdata = array(\r
-                       'url' => htmlspecialchars($desturl),\r
-                       'actionurl' => htmlspecialchars($CONF['ActionURL']),\r
-                       'memberid' => $memberid,\r
-                       'rows' => $rows,\r
-                       'cols' => $cols,\r
-                       'message' => htmlspecialchars($message),\r
-                       'frommail' => htmlspecialchars($frommail)\r
-               );\r
-               if ($member->isLoggedIn()) {\r
-                       $this->doForm('membermailform-loggedin');\r
-               } else if ($CONF['NonmemberMail']) {\r
-                       $this->doForm('membermailform-notloggedin');            \r
-               } else {\r
-                       $this->doForm('membermailform-disallowed');             \r
-               }\r
-\r
-       }\r
-\r
-       function parse_searchform($blogname = '') {\r
-               global $CONF, $manager, $maxresults;\r
-               if ($blogname) {\r
-                       $blog =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               } else {\r
-                       global $blog;\r
-               }\r
-               // use default blog when no blog is selected\r
-               $this->formdata = array(\r
-                       'id' => $blog?$blog->getID():$CONF['DefaultBlog'],\r
-                       'query' => htmlspecialchars(getVar('query')),\r
-               );\r
-               $this->doForm('searchform');\r
-       }\r
-\r
-       function parse_nucleusbutton($imgurl = '',\r
-                                                            $imgwidth = '85',\r
-                                                            $imgheight = '31') {\r
-               global $CONF;\r
-               if ($imgurl == '') {\r
-                       $imgurl = $CONF['AdminURL'] . 'nucleus.gif';\r
-               } else if (PARSER::getProperty('IncludeMode') == 'skindir'){\r
-                       // when skindit IncludeMode is used: start from skindir\r
-                       $imgurl = $CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix') . $imgurl;\r
-               }\r
-\r
-               $this->formdata = array(\r
-                       'imgurl' => $imgurl,\r
-                       'imgwidth' => $imgwidth,\r
-                       'imgheight' => $imgheight,\r
-               );\r
-               $this->doForm('nucleusbutton');\r
-       }\r
-       \r
-       function parse_self() {\r
-               global $CONF;\r
-               echo $CONF['Self'];\r
-       }\r
-       \r
-       function parse_referer() {\r
-               echo htmlspecialchars(serverVar('HTTP_REFERER'));\r
-       }\r
-       \r
-       /**\r
-         * Helper function that sets the category that a blog will need to use \r
-         *\r
-         * @param $blog\r
-         *             An object of the blog class, passed by reference (we want to make changes to it)\r
-         * @param $catname\r
-         *             The name of the category to use\r
-         */\r
-       function _setBlogCategory(&$blog, $catname) {\r
-               global $catid;\r
-               if ($catname != '')\r
-                       $blog->setSelectedCategoryByName($catname);\r
-               else\r
-                       $blog->setSelectedCategory($catid);\r
-       }\r
-       \r
-       function _preBlogContent($type, &$blog) {\r
-               global $manager;\r
-               $manager->notify('PreBlogContent',array('blog' => &$blog, 'type' => $type));\r
-       }\r
-\r
-       function _postBlogContent($type, &$blog) {\r
-               global $manager;\r
-               $manager->notify('PostBlogContent',array('blog' => &$blog, 'type' => $type));\r
-       }\r
-\r
-}\r
-\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+// temporary: dirt way to separe class ACTIONS from SKIN
+require_once $DIR_LIBS . 'ACTIONS.php';
+
+/**
+ * Class representing a skin
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: SKIN.php,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: SKIN.php,v 1.4 2005/03/12 06:19:05 kimitake Exp $
+ */
+class SKIN {
+
+       // after creating a SKIN object, evaluates to true when the skin exists
+       var $isValid;
+
+       // skin characteristics. Use the getXXX methods rather than accessing directly
+       var $id;
+       var $description;
+       var $contentType;
+       var $includeMode;               // either 'normal' or 'skindir'
+       var $includePrefix;
+       var $name;
+
+       function SKIN($id) {
+               $this->id = intval($id);
+
+               // read skin name/description/content type
+               $res = sql_query('SELECT * FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $this->id);
+               $obj = mysql_fetch_object($res);
+               $this->isValid = (mysql_num_rows($res) > 0);
+               if (!$this->isValid)
+                       return;
+
+               $this->name = $obj->sdname;
+               $this->description = $obj->sddesc;
+               $this->contentType = $obj->sdtype;
+               $this->includeMode = $obj->sdincmode;
+               $this->includePrefix = $obj->sdincpref;
+
+       }
+
+       function getID() {                              return $this->id; }
+       function getName() {                    return $this->name; }
+       function getDescription() {     return $this->description; }
+       function getContentType() {     return $this->contentType; }
+       function getIncludeMode() {     return $this->includeMode; }
+       function getIncludePrefix() {   return $this->includePrefix; }
+
+       /**
+        * Checks if a skin with a given shortname exists
+        * @param string $name Skin short name
+        * @return int number of skins with the given ID
+        * @static
+        */
+       function exists($name) {
+               return quickQuery('select count(*) as result FROM '.sql_table('skin_desc').' WHERE sdname="'.addslashes($name).'"') > 0;
+       }
+
+       /**
+        * Checks if a skin with a given ID exists
+        * @param string $id Skin ID
+        * @return int number of skins with the given ID
+        * @static
+        */
+       function existsID($id) {
+               return quickQuery('select COUNT(*) as result FROM '.sql_table('skin_desc').' WHERE sdnumber='.intval($id)) > 0;
+       }
+
+       /**
+        * Returns a skin given its shortname
+        * @param string $name Skin shortname
+        * @return object SKIN
+        * @static
+        */
+       function createFromName($name) {
+               return new SKIN(SKIN::getIdFromName($name));
+       }
+
+       /**
+        * Returns a skin ID given its shortname
+        * @param string $name Skin shortname
+        * @return int Skin ID
+        * @static
+        */
+       function getIdFromName($name) {
+               $query =  'SELECT sdnumber'
+                          . ' FROM '.sql_table('skin_desc')
+                          . ' WHERE sdname="'.addslashes($name).'"';
+               $res = sql_query($query);
+               $obj = mysql_fetch_object($res);
+               return $obj->sdnumber;
+       }
+
+       /**
+        * Returns a skin shortname given its ID
+        * @param string $name
+        * @return string Skin short name
+        * @static
+        */
+       function getNameFromId($id) {
+               return quickQuery('SELECT sdname as result FROM '.sql_table('skin_desc').' WHERE sdnumber=' . intval($id));
+       }
+
+       /**
+        * Creates a new skin, with the given characteristics.
+        *
+        * @static
+        */
+       function createNew($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {
+               global $manager;
+
+               $manager->notify(
+                       'PreAddSkin',
+                       array(
+                               'name' => &$name,
+                               'description' => &$desc,
+                               'type' => &$type,
+                               'includeMode' => &$includeMode,
+                               'includePrefix' => &$includePrefix
+                       )
+               );
+
+               sql_query('INSERT INTO '.sql_table('skin_desc')." (sdname, sddesc, sdtype, sdincmode, sdincpref) VALUES ('" . addslashes($name) . "','" . addslashes($desc) . "','".addslashes($type)."','".addslashes($includeMode)."','".addslashes($includePrefix)."')");
+               $newid = mysql_insert_id();
+
+               $manager->notify(
+                       'PostAddSkin',
+                       array(
+                               'skinid' => $newid,
+                               'name' => $name,
+                               'description' => $desc,
+                               'type' => $type,
+                               'includeMode' => $includeMode,
+                               'includePrefix' => $includePrefix
+                       )
+               );
+
+               return $newid;
+       }
+
+       function parse($type) {
+               global $manager, $CONF;
+
+               $manager->notify('InitSkinParse',array('skin' => &$this, 'type' => $type));
+
+               // set output type
+               sendContentType($this->getContentType(), 'skin', _CHARSET);
+
+               // set skin name as global var (so plugins can access it)
+               global $currentSkinName;
+               $currentSkinName = $this->getName();
+
+               $contents = $this->getContent($type);
+
+               if (!$contents) {
+                       // use base skin if this skin does not have contents
+                       $defskin =& new SKIN($CONF['BaseSkin']);
+                       $contents = $defskin->getContent($type);
+                       if (!$contents) {
+                               echo _ERROR_SKIN;
+                               return;
+                       }
+               }
+
+               $actions = $this->getAllowedActionsForType($type);
+
+               $manager->notify('PreSkinParse',array('skin' => &$this, 'type' => $type, 'contents' => &$contents));
+
+               // set IncludeMode properties of parser
+               PARSER::setProperty('IncludeMode',$this->getIncludeMode());
+               PARSER::setProperty('IncludePrefix',$this->getIncludePrefix());
+
+               $handler =& new ACTIONS($type, $this);
+               $parser =& new PARSER($actions, $handler);
+               $handler->setParser($parser);
+               $handler->setSkin($this);
+               $parser->parse($contents);
+
+               $manager->notify('PostSkinParse',array('skin' => &$this, 'type' => $type));
+
+
+       }
+
+       function getContent($type) {
+               $query = 'SELECT scontent FROM '.sql_table('skin')." WHERE sdesc=$this->id and stype='". addslashes($type) ."'";
+               $res = sql_query($query);
+
+               if (mysql_num_rows($res) == 0)
+                       return '';
+               else
+                       return mysql_result($res, 0, 0);
+       }
+
+       /**
+        * Updates the contents of one part of the skin
+        */
+       function update($type, $content) {
+               $skinid = $this->id;
+
+               // delete old thingie
+               sql_query('DELETE FROM '.sql_table('skin')." WHERE stype='".addslashes($type)."' and sdesc=" . intval($skinid));
+
+               // write new thingie
+               if ($content) {
+                       sql_query('INSERT INTO '.sql_table('skin')." SET scontent='" . addslashes($content) . "', stype='" . addslashes($type) . "', sdesc=" . intval($skinid));
+               }
+       }
+
+       /**
+        * Deletes all skin parts from the database
+        */
+       function deleteAllParts() {
+               sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc='.$this->getID());
+       }
+
+       /**
+        * Updates the general information about the skin
+        */
+       function updateGeneralInfo($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {
+               $query =  'UPDATE '.sql_table('skin_desc').' SET'
+                          . " sdname='" . addslashes($name) . "',"
+                          . " sddesc='" . addslashes($desc) . "',"
+                          . " sdtype='" . addslashes($type) . "',"
+                          . " sdincmode='" . addslashes($includeMode) . "',"
+                          . " sdincpref='" . addslashes($includePrefix) . "'"
+                          . " WHERE sdnumber=" . $this->getID();
+               sql_query($query);
+       }
+
+       /**
+        * static: returns an array of friendly names
+        */
+       function getFriendlyNames() {
+               $skintypes = array(
+                       'index' => _SKIN_PART_MAIN,
+                       'item' => _SKIN_PART_ITEM,
+                       'archivelist' => _SKIN_PART_ALIST,
+                       'archive' => _SKIN_PART_ARCHIVE,
+                       'search' => _SKIN_PART_SEARCH,
+                       'error' => _SKIN_PART_ERROR,
+                       'member' => _SKIN_PART_MEMBER,
+                       'imagepopup' => _SKIN_PART_POPUP
+               );
+
+               $query = "SELECT stype FROM " . sql_table('skin') . " WHERE stype NOT IN ('index', 'item', 'error', 'search', 'archive', 'archivelist', 'imagepopup', 'member')";
+               $res = sql_query($query);
+               while ($row = mysql_fetch_array($res)) {
+                       $skintypes[strtolower($row['stype'])] = ucfirst($row['stype']);
+               }
+
+               return $skintypes;
+       }
+
+       function getAllowedActionsForType($type) {
+               global $blogid;
+
+               // some actions that can be performed at any time, from anywhere
+               $defaultActions = array('otherblog',
+                                                               'plugin',
+                                                               'version',
+                                                               'nucleusbutton',
+                                                               'include',
+                                                               'phpinclude',
+                                                               'parsedinclude',
+                                                               'loginform',
+                                                               'sitevar',
+                                                               'otherarchivelist',
+                                                               'otherarchivedaylist',
+                                                               'self',
+                                                               'adminurl',
+                                                               'todaylink',
+                                                               'archivelink',
+                                                               'member',
+                                                               'ifcat',                                        // deprecated (Nucleus v2.0)
+                                                               'category',
+                                                               'searchform',
+                                                               'referer',
+                                                               'skinname',
+                                                               'skinfile',
+                                                               'set',
+                                                               'if',
+                                                               'else',
+                                                               'endif',
+                                                               'elseif',
+                                                               'ifnot',
+                                                               'elseifnot',
+                                                               'charset'
+                                                               );
+
+               // extra actions specific for a certain skin type
+               $extraActions = array();
+
+               switch ($type) {
+                       case 'index':
+                               $extraActions = array('blog',
+                                                               'blogsetting',
+                                                               'preview',
+                                                               'additemform',
+                                                               'categorylist',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'nextlink',
+                                                               'prevlink'
+                                                               );
+                               break;
+                       case 'archive':
+                               $extraActions = array('blog',
+                                                               'archive',
+                                                               'otherarchive',
+                                                               'categorylist',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'blogsetting',
+                                                               'archivedate',
+                                                               'nextarchive',
+                                                               'prevarchive',
+                                                               'nextlink',
+                                                               'prevlink',
+                                                               'archivetype'
+                               );
+                               break;
+                       case 'archivelist':
+                               $extraActions = array('blog',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'categorylist',
+                                                               'blogsetting',
+                                                          );
+                               break;
+                       case 'search':
+                               $extraActions = array('blog',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'categorylist',
+                                                               'searchresults',
+                                                               'othersearchresults',
+                                                               'blogsetting',
+                                                               'query',
+                                                               'nextlink',
+                                                               'prevlink'
+                                                               );
+                               break;
+                       case 'imagepopup':
+                               $extraActions = array('image',
+                                                               'imagetext',                            // deprecated (Nucleus v2.0)
+                                                               );
+                               break;
+                       case 'member':
+                               $extraActions = array(
+                                                               'membermailform',
+                                                               'blogsetting',
+                                                               'nucleusbutton'
+                               );
+                               break;
+                       case 'item':
+                               $extraActions = array('blog',
+                                                               'item',
+                                                               'comments',
+                                                               'commentform',
+                                                               'vars',
+                                                               'blogsetting',
+                                                               'nextitem',
+                                                               'previtem',
+                                                               'nextlink',
+                                                               'prevlink',
+                                                               'nextitemtitle',
+                                                               'previtemtitle',
+                                                               'categorylist',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'itemtitle',
+                                                               'itemid',
+                                                               'itemlink',
+                                                               );
+                               break;
+                       case 'error':
+                               $extraActions = array(
+                                                               'errormessage'
+                               );
+                               break;
+                       default:
+                               if ($blogid && $blogid > 0) {
+                                       $extraActions = array(
+                                               'blog',
+                                               'blogsetting',
+                                               'preview',
+                                               'additemform',
+                                               'categorylist',
+                                               'archivelist',
+                                               'archivedaylist',
+                                               'nextlink',
+                                               'archivelist',
+                                               'archivedaylist',
+                                               'prevlink',
+                                               'membermailform',
+                                               'nucleusbutton'
+                                       );
+                               }
+                               break;
+               }
+
+               return array_merge($defaultActions, $extraActions);
+       }
+
+}
+
+?>
index 0b4f5d1..8736eb4 100755 (executable)
-<?php\r
-\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * A class representing a template\r
- *\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: TEMPLATE.php,v 1.4 2005-08-13 07:33:02 kimitake Exp $\r
- * $NucleusJP: TEMPLATE.php,v 1.3 2005/03/12 06:19:05 kimitake Exp $\r
- */\r
-class TEMPLATE {\r
-\r
-       var $id;\r
-       \r
-       function TEMPLATE($templateid) {\r
-               $this->id = intval($templateid);\r
-       }\r
-       \r
-       function getID() {\r
-               return intval($this->id);\r
-       }\r
-       \r
-       // (static)\r
-       function createFromName($name) {\r
-               return new TEMPLATE(TEMPLATE::getIdFromName($name));\r
-       }\r
-       \r
-       // (static)\r
-       function getIdFromName($name) {\r
-               $query =  'SELECT tdnumber'\r
-                      . ' FROM '.sql_table('template_desc')\r
-                      . ' WHERE tdname="'.addslashes($name).'"';\r
-               $res = sql_query($query);\r
-               $obj = mysql_fetch_object($res);\r
-               return $obj->tdnumber;  \r
-       }\r
-\r
-       /**\r
-        * Updates the general information about the template\r
-        */\r
-       function updateGeneralInfo($name, $desc) {\r
-               $query =  'UPDATE '.sql_table('template_desc').' SET'\r
-                      . " tdname='" . addslashes($name) . "',"\r
-                      . " tddesc='" . addslashes($desc) . "'"\r
-                      . " WHERE tdnumber=" . $this->getID();\r
-               sql_query($query);              \r
-       }\r
-       \r
-       /**\r
-        * Updates the contents of one part of the template\r
-        */\r
-       function update($type, $content) {\r
-               $id = $this->getID();\r
-       \r
-               // delete old thingie\r
-               sql_query('DELETE FROM '.sql_table('template')." WHERE tpartname='". addslashes($type) ."' and tdesc=" . intval($id));\r
-               \r
-               // write new thingie\r
-               if ($content) {\r
-                       sql_query('INSERT INTO '.sql_table('template')." SET tcontent='" . addslashes($content) . "', tpartname='" . addslashes($type) . "', tdesc=" . intval($id));\r
-               }       \r
-       }\r
-               \r
-\r
-       /**\r
-        * Deletes all template parts from the database\r
-        */\r
-       function deleteAllParts() {\r
-               sql_query('DELETE FROM '.sql_table('template').' WHERE tdesc='.$this->getID());\r
-       }\r
-\r
-       /**\r
-        * Creates a new template\r
-        *\r
-        * (static)\r
-        */\r
-       function createNew($name, $desc) {\r
-               global $manager;\r
-               \r
-               $manager->notify(\r
-                       'PreAddTemplate',\r
-                       array(\r
-                               'name' => &$name,\r
-                               'description' => &$desc\r
-                       )\r
-               );\r
-               \r
-               sql_query('INSERT INTO '.sql_table('template_desc')." (tdname, tddesc) VALUES ('" . addslashes($name) . "','" . addslashes($desc) . "')");\r
-               $newId = mysql_insert_id();\r
-               \r
-               $manager->notify(\r
-                       'PostAddTemplate',\r
-                       array(\r
-                               'templateid' => $newId,\r
-                               'name' => $name,\r
-                               'description' => $desc\r
-                       )\r
-               );              \r
-               \r
-               return $newId;\r
-       }\r
-\r
-       \r
-\r
-       /**\r
-        * Reads a template and returns an array with the parts.\r
-        * (static)\r
-        *\r
-        * @param $name name of the template file\r
-        */\r
-       function read($name) {\r
-               $query = 'SELECT tpartname, tcontent'\r
-                      . ' FROM '.sql_table('template_desc').', '.sql_table('template')\r
-                      . ' WHERE tdesc=tdnumber and tdname="' . addslashes($name) . '"';\r
-               $res = sql_query($query);\r
-               while ($obj = mysql_fetch_object($res)) \r
-                       $template[$obj->tpartname] = $obj->tcontent;\r
-               \r
-               // set locale according to template:\r
-               if ($template['LOCALE'])\r
-                       setlocale(LC_TIME,$template['LOCALE']);\r
-               else\r
-                       setlocale(LC_TIME,'');  \r
-                       \r
-               return $template;\r
-       }\r
-       \r
-       /**\r
-         * fills a template with values\r
-         * (static)\r
-         *\r
-         * @param $template \r
-         *             Template to be used\r
-         * @param $values\r
-         *             Array of all the values \r
-         */\r
-       function fill($template, $values) {\r
-\r
-               if (sizeof($values) != 0) {\r
-                       // go through all the values\r
-                       for(reset($values); $key = key($values); next($values)) {\r
-                               $template = str_replace("<%$key%>",$values[$key],$template);\r
-                       }\r
-               }\r
-\r
-               // remove non matched template-tags\r
-               return preg_replace('/<%[a-zA-Z]+%>/','',$template);\r
-       }       \r
-       \r
-       // returns true if there is a template with the given shortname\r
-       // (static)\r
-       function exists($name) {\r
-               $r = sql_query('select * FROM '.sql_table('template_desc').' WHERE tdname="'.addslashes($name).'"');\r
-               return (mysql_num_rows($r) != 0);\r
-       }\r
-       \r
-       // returns true if there is a template with the given ID\r
-       // (static)\r
-       function existsID($id) {\r
-               $r = sql_query('select * FROM '.sql_table('template_desc').' WHERE tdnumber='.intval($id));\r
-               return (mysql_num_rows($r) != 0);\r
-       }\r
-       \r
-       // (static)\r
-       function getNameFromId($id) {\r
-               return quickQuery('SELECT tdname as result FROM '.sql_table('template_desc').' WHERE tdnumber=' . intval($id));\r
-       }\r
-       \r
-       // (static)\r
-       function getDesc($id) {\r
-               $query = 'SELECT tddesc FROM '.sql_table('template_desc').' WHERE tdnumber='. intval($id);\r
-               $obj = mysql_fetch_object(sql_query($query));\r
-               return $obj->tddesc;\r
-       }\r
-       \r
-\r
-       \r
-}\r
-\r
-?>\r
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * A class representing a template
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: TEMPLATE.php,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: TEMPLATE.php,v 1.4 2005/08/13 07:33:02 kimitake Exp $
+ */
+class TEMPLATE {
+
+       var $id;
+
+       function TEMPLATE($templateid) {
+               $this->id = intval($templateid);
+       }
+
+       function getID() {
+               return intval($this->id);
+       }
+
+       // (static)
+       function createFromName($name) {
+               return new TEMPLATE(TEMPLATE::getIdFromName($name));
+       }
+
+       // (static)
+       function getIdFromName($name) {
+               $query =  'SELECT tdnumber'
+                          . ' FROM '.sql_table('template_desc')
+                          . ' WHERE tdname="'.addslashes($name).'"';
+               $res = sql_query($query);
+               $obj = mysql_fetch_object($res);
+               return $obj->tdnumber;
+       }
+
+       /**
+        * Updates the general information about the template
+        */
+       function updateGeneralInfo($name, $desc) {
+               $query =  'UPDATE '.sql_table('template_desc').' SET'
+                          . " tdname='" . addslashes($name) . "',"
+                          . " tddesc='" . addslashes($desc) . "'"
+                          . " WHERE tdnumber=" . $this->getID();
+               sql_query($query);
+       }
+
+       /**
+        * Updates the contents of one part of the template
+        */
+       function update($type, $content) {
+               $id = $this->getID();
+
+               // delete old thingie
+               sql_query('DELETE FROM '.sql_table('template')." WHERE tpartname='". addslashes($type) ."' and tdesc=" . intval($id));
+
+               // write new thingie
+               if ($content) {
+                       sql_query('INSERT INTO '.sql_table('template')." SET tcontent='" . addslashes($content) . "', tpartname='" . addslashes($type) . "', tdesc=" . intval($id));
+               }
+       }
+
+
+       /**
+        * Deletes all template parts from the database
+        */
+       function deleteAllParts() {
+               sql_query('DELETE FROM '.sql_table('template').' WHERE tdesc='.$this->getID());
+       }
+
+       /**
+        * Creates a new template
+        *
+        * (static)
+        */
+       function createNew($name, $desc) {
+               global $manager;
+
+               $manager->notify(
+                       'PreAddTemplate',
+                       array(
+                               'name' => &$name,
+                               'description' => &$desc
+                       )
+               );
+
+               sql_query('INSERT INTO '.sql_table('template_desc')." (tdname, tddesc) VALUES ('" . addslashes($name) . "','" . addslashes($desc) . "')");
+               $newId = mysql_insert_id();
+
+               $manager->notify(
+                       'PostAddTemplate',
+                       array(
+                               'templateid' => $newId,
+                               'name' => $name,
+                               'description' => $desc
+                       )
+               );
+
+               return $newId;
+       }
+
+
+
+       /**
+        * Reads a template and returns an array with the parts.
+        * (static)
+        *
+        * @param $name name of the template file
+        */
+       function read($name) {
+               $query = 'SELECT tpartname, tcontent'
+                          . ' FROM '.sql_table('template_desc').', '.sql_table('template')
+                          . ' WHERE tdesc=tdnumber and tdname="' . addslashes($name) . '"';
+               $res = sql_query($query);
+               while ($obj = mysql_fetch_object($res))
+                       $template[$obj->tpartname] = $obj->tcontent;
+
+               // set locale according to template:
+               if ($template['LOCALE'])
+                       setlocale(LC_TIME,$template['LOCALE']);
+               else
+                       setlocale(LC_TIME,'');
+
+               return $template;
+       }
+
+       /**
+         * fills a template with values
+         * (static)
+         *
+         * @param $template
+         *             Template to be used
+         * @param $values
+         *             Array of all the values
+         */
+       function fill($template, $values) {
+
+               if (sizeof($values) != 0) {
+                       // go through all the values
+                       for(reset($values); $key = key($values); next($values)) {
+                               $template = str_replace("<%$key%>",$values[$key],$template);
+                       }
+               }
+
+               // remove non matched template-tags
+               return preg_replace('/<%[a-zA-Z]+%>/','',$template);
+       }
+
+       // returns true if there is a template with the given shortname
+       // (static)
+       function exists($name) {
+               $r = sql_query('select * FROM '.sql_table('template_desc').' WHERE tdname="'.addslashes($name).'"');
+               return (mysql_num_rows($r) != 0);
+       }
+
+       // returns true if there is a template with the given ID
+       // (static)
+       function existsID($id) {
+               $r = sql_query('select * FROM '.sql_table('template_desc').' WHERE tdnumber='.intval($id));
+               return (mysql_num_rows($r) != 0);
+       }
+
+       // (static)
+       function getNameFromId($id) {
+               return quickQuery('SELECT tdname as result FROM '.sql_table('template_desc').' WHERE tdnumber=' . intval($id));
+       }
+
+       // (static)
+       function getDesc($id) {
+               $query = 'SELECT tddesc FROM '.sql_table('template_desc').' WHERE tdnumber='. intval($id);
+               $res = sql_query($query);
+               $obj = mysql_fetch_object($res);
+               return $obj->tddesc;
+       }
+
+
+
+}
+
+?>
\ No newline at end of file
diff --git a/nucleus/libs/entity.php b/nucleus/libs/entity.php
new file mode 100644 (file)
index 0000000..3411d7b
--- /dev/null
@@ -0,0 +1,186 @@
+<?php
+
+class entity {
+
+       function named_to_numeric ($string) {
+               $string = preg_replace('/(&[0-9A-Za-z]+)(;?\=?|([^A-Za-z0-9\;\:\.\-\_]))/e', "entity::_named('\\1', '\\2') . '\\3'", $string);
+               return $string; 
+       }
+       
+       function normalize_numeric ($string) {
+               global $_entities;
+               $string = preg_replace('/&#([0-9]+)(;)?/e', "'&#x'.dechex('\\1').';'", $string);
+               $string = preg_replace('/&#[Xx](0)*([0-9A-Fa-f]+)(;?|([^A-Za-z0-9\;\:\.\-\_]))/e', "'&#x' . strtoupper('\\2') . ';\\4'", $string);
+               $string = strtr($string, $_entities['cp1251']);
+               return $string;
+       }
+       function numeric_to_utf8 ($string) {
+               $string = preg_replace('/&#([0-9]+)(;)?/e', "'&#x'.dechex('\\1').';'", $string);
+               $string = preg_replace('/&#[Xx](0)*([0-9A-Fa-f]+)(;?|([^A-Za-z0-9\;\:\.\-\_]))/e', "'&#x' . strtoupper('\\2') . ';\\4'", $string);
+               $string = preg_replace('/&#x([0-9A-Fa-f]+);/e', "entity::_hex_to_utf8('\\1')", $string);                
+               return $string;         
+       }
+
+       function numeric_to_named ($string) {
+               global $_entities;
+               $string = preg_replace('/&#[Xx]([0-9A-Fa-f]+)/e', "'&#'.hexdec('\\1')", $string);
+               $string = strtr($string, array_flip($_entities['named']));
+               return $string; 
+       }
+       
+       function specialchars ($string, $type = 'xml') {
+               $apos = $type == 'xml' ? '&apos;' : '&#39;';
+               $specialchars = array (
+                       '&quot;'        => '&quot;',            '&amp;'         => '&amp;',             
+                       '&apos;'        => $apos,                       '&lt;'          => '&lt;',              
+                       '&gt;'          => '&gt;',                      '"'                     => '&quot;',
+                       '&'                     => '&amp;',                     "'"                     => $apos,
+                       '<'                     => '&lt;',                      '>'                     => '&gt;'
+               );
+       
+               $string = preg_replace('/&(#?[Xx]?[0-9A-Za-z]+);/', "[[[ENTITY:\\1]]]", $string);               
+               $string = strtr($string, $specialchars);
+               $string = preg_replace('/\[\[\[ENTITY\:([^\]]+)\]\]\]/', "&\\1;", $string);             
+               return $string;
+       }
+       
+
+       function _hex_to_utf8($s)
+       {
+               $c = hexdec($s);
+       
+               if ($c < 0x80) {
+                       $str = chr($c);
+               }
+               else if ($c < 0x800) {
+                       $str = chr(0xC0 | $c>>6) . chr(0x80 | $c & 0x3F);
+               }
+               else if ($c < 0x10000) {
+                       $str = chr(0xE0 | $c>>12) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F);
+               }
+               else if ($c < 0x200000) {
+                       $str = chr(0xF0 | $c>>18) . chr(0x80 | $c>>12 & 0x3F) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F);
+               }
+                               
+               return $str;
+       }               
+
+       function _named($entity, $extra) {
+               global $_entities;
+               
+               if ($extra == '=') return $entity . '=';
+               
+               $length = strlen($entity);
+
+               while ($length > 0) {
+                       $check = substr($entity, 0, $length);
+                       if (isset($_entities['named'][$check])) return $_entities['named'][$check] . ';' . substr($entity, $length);
+                       $length--;
+               }
+               
+               return $entity . ($extra == ';' ? ';' : '');
+       }
+}
+
+
+$_entities['cp1251'] = array (
+       '&#x80;'                => '&#x20AC;',  '&#x82;'                => '&#x201A;',  '&#x83;'                => '&#x192;',   
+       '&#x84;'                => '&#x201E;',  '&#x85;'                => '&#x2026;',  '&#x86;'                => '&#x2020;',  
+       '&#x87;'                => '&#x2021;',  '&#x88;'                => '&#x2C6;',   '&#x89;'                => '&#x2030;',  
+       '&#x8A;'                => '&#x160;',   '&#x8B;'                => '&#x2039;',  '&#x8C;'                => '&#x152;',   
+       '&#x8E;'                => '&#x17D;',   '&#x91;'                => '&#x2018;',  '&#x92;'                => '&#x2019;',  
+       '&#x93;'                => '&#x201C;',  '&#x94;'                => '&#x201D;',  '&#x95;'                => '&#x2022;',  
+       '&#x96;'                => '&#x2013;',  '&#x97;'                => '&#x2014;',  '&#x98;'                => '&#x2DC;',   
+       '&#x99;'                => '&#x2122;',  '&#x9A;'                => '&#x161;',   '&#x9B;'                => '&#x203A;',  
+       '&#x9C;'                => '&#x153;',   '&#x9E;'                => '&#x17E;',   '&#x9F;'                => '&#x178;',   
+);
+       
+$_entities['named'] = array (
+       '&nbsp'                 => '&#160',             '&iexcl'                => '&#161',             '&cent'                 => '&#162',     
+       '&pound'                => '&#163',             '&curren'               => '&#164',             '&yen'                  => '&#165',     
+       '&brvbar'               => '&#166',     '&sect'                 => '&#167',             '&uml'                  => '&#168',     
+       '&copy'                 => '&#169',             '&ordf'                 => '&#170',             '&laquo'                => '&#171',     
+       '&not'                  => '&#172',             '&shy'                  => '&#173',             '&reg'                  => '&#174',     
+       '&macr'                 => '&#175',             '&deg'                  => '&#176',             '&plusmn'               => '&#177',     
+       '&sup2'                 => '&#178',             '&sup3'                 => '&#179',     '&acute'                => '&#180',     
+       '&micro'                => '&#181',     '&para'                 => '&#182',             '&middot'               => '&#183',     
+       '&cedil'                => '&#184',     '&sup1'                 => '&#185',             '&ordm'                 => '&#186',     
+       '&raquo'                => '&#187',             '&frac14'               => '&#188',             '&frac12'               => '&#189',     
+       '&frac34'               => '&#190',             '&iquest'               => '&#191',             '&Agrave'               => '&#192',     
+       '&Aacute'               => '&#193',             '&Acirc'                => '&#194',             '&Atilde'               => '&#195',     
+       '&Auml'                 => '&#196',             '&Aring'                => '&#197',             '&AElig'                => '&#198',     
+       '&Ccedil'               => '&#199',     '&Egrave'               => '&#200',             '&Eacute'               => '&#201',     
+       '&Ecirc'                => '&#202',             '&Euml'                 => '&#203',             '&Igrave'               => '&#204',     
+       '&Iacute'               => '&#205',             '&Icirc'                => '&#206',             '&Iuml'                 => '&#207',     
+       '&ETH'                  => '&#208',             '&Ntilde'               => '&#209',             '&Ograve'               => '&#210',     
+       '&Oacute'               => '&#211',             '&Ocirc'                => '&#212',             '&Otilde'               => '&#213',     
+       '&Ouml'                 => '&#214',             '&times'                => '&#215',             '&Oslash'               => '&#216',     
+       '&Ugrave'               => '&#217',             '&Uacute'               => '&#218',             '&Ucirc'                => '&#219',     
+       '&Uuml'                 => '&#220',             '&Yacute'               => '&#221',             '&THORN'                => '&#222',     
+       '&szlig'                => '&#223',             '&agrave'               => '&#224',             '&aacute'               => '&#225',     
+       '&acirc'                => '&#226',             '&atilde'               => '&#227',             '&auml'                 => '&#228',     
+       '&aring'                => '&#229',             '&aelig'                => '&#230',             '&ccedil'               => '&#231',     
+       '&egrave'               => '&#232',             '&eacute'               => '&#233',             '&ecirc'                => '&#234',     
+       '&euml'                 => '&#235',             '&igrave'               => '&#236',             '&iacute'               => '&#237',     
+       '&icirc'                => '&#238',             '&iuml'                 => '&#239',             '&eth'                  => '&#240',     
+       '&ntilde'               => '&#241',             '&ograve'               => '&#242',             '&oacute'               => '&#243',     
+       '&ocirc'                => '&#244',             '&otilde'               => '&#245',             '&ouml'                 => '&#246',     
+       '&divide'               => '&#247',             '&oslash'               => '&#248',             '&ugrave'               => '&#249',     
+       '&uacute'               => '&#250',             '&ucirc'                => '&#251',             '&uuml'                 => '&#252',     
+       '&yacute'               => '&#253',             '&thorn'                => '&#254',             '&yuml'                 => '&#255',     
+       '&OElig'                => '&#338',             '&oelig'                => '&#229',             '&Scaron'               => '&#352',     
+       '&scaron'               => '&#353',             '&Yuml'                 => '&#376',             '&circ'                 => '&#710',     
+       '&tilde'                => '&#732',     '&esnp'                 => '&#8194',    '&emsp'                 => '&#8195',    
+       '&thinsp'               => '&#8201',    '&zwnj'                 => '&#8204',    '&zwj'                  => '&#8205',    
+       '&lrm'                  => '&#8206',    '&rlm'                  => '&#8207',    '&ndash'                => '&#8211',    
+       '&mdash'                => '&#8212',    '&lsquo'                => '&#8216',    '&rsquo'                => '&#8217',    
+       '&sbquo'                => '&#8218',    '&ldquo'                => '&#8220',    '&rdquo'                => '&#8221',    
+       '&bdquo'                => '&#8222',    '&dagger'               => '&#8224',    '&Dagger'               => '&#8225',    
+       '&permil'               => '&#8240',    '&lsaquo'               => '&#8249',    '&rsaquo'               => '&#8250',
+       '&euro'                 => '&#8364',    '&fnof'                 => '&#402',             '&Alpha'                => '&#913',     
+       '&Beta'                 => '&#914',             '&Gamma'                => '&#915',             '&Delta'                => '&#916',     
+       '&Epsilon'              => '&#917',             '&Zeta'                 => '&#918',             '&Eta'                  => '&#919',     
+       '&Theta'                => '&#920',             '&Iota'                 => '&#921',             '&Kappa'                => '&#922',     
+       '&Lambda'               => '&#923',             '&Mu'                   => '&#924',             '&Nu'                   => '&#925',     
+       '&Xi'                   => '&#926',             '&Omicron'              => '&#927',             '&Pi'                   => '&#928',     
+       '&Rho'                  => '&#929',             '&Sigma'                => '&#931',             '&Tau'                  => '&#932',     
+       '&Upsilon'              => '&#933',     '&Phi'                  => '&#934',             '&Chi'                  => '&#935',     
+       '&Psi'                  => '&#936',             '&Omega'                => '&#937',             '&alpha'                => '&#945',     
+       '&beta'                 => '&#946',             '&gamma'                => '&#947',             '&delta'                => '&#948',     
+       '&epsilon'              => '&#949',             '&zeta'                 => '&#950',             '&eta'                  => '&#951',     
+       '&theta'                => '&#952',             '&iota'                 => '&#953',             '&kappa'                => '&#954',     
+       '&lambda'               => '&#955',             '&mu'                   => '&#956',             '&nu'                   => '&#957',     
+       '&xi'                   => '&#958',             '&omicron'              => '&#959',             '&pi'                   => '&#960',     
+       '&rho'                  => '&#961',             '&sigmaf'               => '&#962',             '&sigma'                => '&#963',     
+       '&tau'                  => '&#964',             '&upsilon'              => '&#965',     '&phi'                  => '&#966',     
+       '&chi'                  => '&#967',             '&psi'                  => '&#968',             '&omega'                => '&#969',     
+       '&thetasym'             => '&#977',             '&upsih'                => '&#978',             '&piv'                  => '&#982',     
+       '&bull'                 => '&#8226',    '&hellip'               => '&#8230',    '&prime'                => '&#8242',    
+       '&Prime'                => '&#8243',    '&oline'                => '&#8254',    '&frasl'                => '&#8260',    
+       '&weierp'               => '&#8472',    '&image'                => '&#8465',    '&real'                 => '&#8476',    
+       '&trade'                => '&#8482',    '&alefsym'              => '&#8501',    '&larr'                 => '&#8592',    
+       '&uarr'                 => '&#8593',    '&rarr'                 => '&#8594',    '&darr'                 => '&#8595',    
+       '&harr'                 => '&#8596',    '&crarr'                => '&#8629',    '&lArr'                 => '&#8656',    
+       '&uArr'                 => '&#8657',    '&rArr'                 => '&#8658',    '&dArr'                 => '&#8659',    
+       '&hArr'                 => '&#8660',    '&forall'               => '&#8704',    '&part'                 => '&#8706',    
+       '&exist'                => '&#8707',    '&empty'                => '&#8709',    '&nabla'                => '&#8711',    
+       '&isin'                 => '&#8712',    '&notin'                => '&#8713',    '&ni'                   => '&#8715',    
+       '&prod'                 => '&#8719',    '&sum'                  => '&#8721',    '&minus'                => '&#8722',    
+       '&lowast'               => '&#8727',    '&radic'                => '&#8730',    '&prop'                 => '&#8733',    
+       '&infin'                => '&#8734',    '&ang'                  => '&#8736',    '&and'                  => '&#8743',    
+       '&or'                   => '&#8744',    '&cap'                  => '&#8745',    '&cup'                  => '&#8746',    
+       '&int'                  => '&#8747',    '&there4'               => '&#8756',    '&sim'                  => '&#8764',    
+       '&cong'                 => '&#8773',    '&asymp'                => '&#8776',    '&ne'                   => '&#8800',    
+       '&equiv'                => '&#8801',    '&le'                   => '&#8804',    '&ge'                   => '&#8805',    
+       '&sub'                  => '&#8834',    '&sup'                  => '&#8835',    '&nsub'                 => '&#8836',    
+       '&sube'                 => '&#8838',    '&supe'                 => '&#8839',    '&oplus'                => '&#8853',    
+       '&otimes'               => '&#8855',    '&perp'                 => '&#8869',    '&sdot'                 => '&#8901',    
+       '&lceil'                => '&#8968',    '&rceil'                => '&#8969',    '&lfloor'               => '&#8970',    
+       '&rfloor'               => '&#8971',    '&lang'                 => '&#9001',    '&rang'                 => '&#9002',    
+       '&loz'                  => '&#9674',    '&spades'               => '&#9824',    '&clubs'                => '&#9827',    
+       '&hearts'               => '&#9829',    '&diams'                => '&#9830',    
+);
+
+
+?>
\ No newline at end of file
index f8b6fe6..edd1d80 100755 (executable)
-<h2><%text(_ADD_ADDTO)%> '<%bloglink%>'</h2>\r
-\r
-<%init%>\r
-<script type="text/javascript" src="javascript/numbercheck.js"></script>\r
-\r
-<form method="post" action="index.php" >\r
-\r
-<div>\r
-\r
-<input type="hidden" name="action" value="additem" />\r
-<input name="blogid" value="<%blogid%>" type="hidden" />\r
-<%ticket%>\r
-\r
-<table>\r
-       <tr>\r
-               <th colspan="2"><%text(_ADD_CREATENEW)%></th>\r
-       </tr><tr>\r
-               <td><%text(_ADD_TITLE)%></td>\r
-               <td><input \r
-                       <%jsinput(title)%>\r
-                       tabindex="10"\r
-                       size="60" \r
-                       maxlength="160" \r
-                       value="<%contents(title)%>"\r
-                       /></td>\r
-       </tr><tr>\r
-               <td>\r
-                       <%text(_ADD_BODY)%> <%helplink(additem)%>\r
-               </td>\r
-               <td>\r
-                       <%jsbuttonbar(media+preview)%>\r
-                       <textarea\r
-                               <%jsinput(body)%>\r
-                               tabindex="20"\r
-                               cols="60"\r
-                               rows="20"><%contents(body)%></textarea>\r
-               </td>\r
-       </tr><tr id="edit" style="display:none;">\r
-               <td><%text(_ADD_PREVIEW)%></td>\r
-               <td><b><span id="prevtitle"></span></b><br />\r
-                       <span id="prevbody"></span><br />\r
-                       <span id="prevmore"></span><br />\r
-               </td>\r
-       </tr><tr>\r
-       \r
-<%ifblogsetting(bcomments)%>\r
-               <td><%text(_ADD_DISABLE_COMMENTS)%></td>\r
-               <td>\r
-                       <input name="closed" type="radio" tabindex="30" value="1" id="closed_yes" /><label for="closed_yes"><%text(_YES)%></label>\r
-                       <input name="closed" type="radio" tabindex="30" value="0" checked="checked" id="closed_no" /><label for="closed_no"><%text(_NO)%></label>\r
-               </td>\r
-       </tr><tr>\r
-<%endif%>\r
-\r
-\r
-               <td><%text(_ADD_CATEGORY)%></td>\r
-               <td><%categories(40)%></td>\r
-       </tr><tr>\r
-               <td><%text(_SUBMIT)%></td>\r
-               <td>\r
-                       <input tabindex="60" type="submit" value="<%text(_ADD_ADDITEM)%>" \r
-                               onclick="return checkSubmit();" />\r
-\r
-                       <br /><br />\r
-\r
-                       <input name="actiontype" value="addnow" type="radio" checked='checked' id="act_now" tabindex="61" /><label for="act_now"><%text(_ADD_ADDNOW)%></label>\r
-                       <br />\r
-                       <input name="actiontype" value="addfuture" type="radio" id="act_future" tabindex="61" /><label for="act_future" ><%text(_ADD_ADDLATER)%></label> <%helplink(future)%>\r
-                       <div class="indent">\r
-                               <%text(_ADD_PLACE_ON)%>\r
-                               <input id="inputyear" name="year" tabindex="63" size="4" value="<%currenttime(year)%>" />年\r
-                               <input id="inputmonth" name="month" tabindex="64" size="2" value="<%currenttime(mon)%>" />月\r
-                               <input id="inputday" name="day" tabindex="65" size="2" value="<%currenttime(mday)%>" />日\r
-                                \r
-                               <input id="inputhour" name="hour" tabindex="66" size="2" value="<%currenttime(hours)%>" />時\r
-                               <input id="inputminutes" name="minutes" tabindex="67" size="2" value="<%currenttime(minutes)%>" />分\r
-                               <br />\r
-                               フォーマット:(yyyy)年(mm)月(dd)日 (hh)時(mm)分\r
-                               \r
-                               <%ifblogsetting(ballowpast,0)%>\r
-                                       <br />\r
-                                       <%text(_ADD_NOPASTDATES)%>\r
-                               <%endif%>\r
-                       </div>\r
-                       <input name="actiontype" tabindex="61" value="adddraft" type="radio" id="act_draft" /><label for="act_draft"><%text(_ADD_ADDDRAFT)%></label> <%helplink(draft)%>\r
-               </td>\r
-       </tr><tr>\r
-               <td><%text(_ADD_PLUGIN_EXTRAS)%></td>\r
-               <td>\r
-                       <%pluginextras%>\r
-               </td>\r
-       </tr>\r
-                       <%itemoptions%> \r
-    <tr>\r
-       <th colspan="2"><%text(_ADD_MORE)%></th>\r
-       </tr><tr>\r
-               <td><%text(_ADD_MORE)%>\r
-                       <br /><%helplink(extended)%>\r
-               </td>\r
-               <td>\r
-                       <%jsbuttonbar(media+preview)%>          \r
-                       <textarea \r
-                               <%jsinput(more)%>                       \r
-                               tabindex="70"\r
-                               cols="60"\r
-                               rows="20"\r
-                               ><%contents(more)%></textarea>\r
-               </td>\r
-       </tr><tr>\r
-               <td><%text(_SUBMIT)%></td>\r
-               <td>\r
-                       <input tabindex="60" type="submit" value="<%text(_ADD_ADDITEM)%>" \r
-                               onclick="return checkSubmit();" />\r
-               </td>\r
-       </tr>\r
-</table>\r
-\r
-</div>\r
-</form>        \r
+<h2><%text(_ADD_ADDTO)%> '<%bloglink%>'</h2>
+
+<%init%>
+<script type="text/javascript" src="javascript/numbercheck.js"></script>
+
+<form method="post" action="index.php" >
+
+<div>
+
+<input type="hidden" name="action" value="additem" />
+<input name="blogid" value="<%blogid%>" type="hidden" />
+<%ticket%>
+
+<table>
+       <tr>
+               <th colspan="2"><%text(_ADD_CREATENEW)%></th>
+       </tr><tr>
+               <td><%text(_ADD_TITLE)%></td>
+               <td><input 
+                       <%jsinput(title)%>
+                       tabindex="10"
+                       size="60" 
+                       maxlength="160" 
+                       value="<%contents(title)%>"
+                       /></td>
+       </tr><tr>
+               <td>
+                       <%text(_ADD_BODY)%> <%helplink(additem)%>
+               </td>
+               <td>
+                       <%jsbuttonbar(media+preview)%>
+                       <textarea
+                               <%jsinput(body)%>
+                               tabindex="20"
+                               cols="60"
+                               rows="20"><%contents(body)%></textarea>
+               </td>
+       </tr><tr id="edit" style="display:none;">
+               <td><%text(_ADD_PREVIEW)%></td>
+               <td><b><span id="prevtitle"></span></b><br />
+                       <span id="prevbody"></span><br />
+                       <span id="prevmore"></span><br />
+               </td>
+       </tr><tr>
+       
+<%ifblogsetting(bcomments)%>
+               <td><%text(_ADD_DISABLE_COMMENTS)%></td>
+               <td>
+                       <input name="closed" type="radio" tabindex="30" value="1" id="closed_yes" /><label for="closed_yes"><%text(_YES)%></label>
+                       <input name="closed" type="radio" tabindex="30" value="0" checked="checked" id="closed_no" /><label for="closed_no"><%text(_NO)%></label>
+               </td>
+       </tr><tr>
+<%endif%>
+
+
+               <td><%text(_ADD_CATEGORY)%></td>
+               <td><%categories(40)%></td>
+       </tr><tr>
+               <td><%text(_SUBMIT)%></td>
+               <td>
+                       <input tabindex="60" type="submit" value="<%text(_ADD_ADDITEM)%>" 
+                               onclick="return checkSubmit();" />
+
+                       <br /><br />
+
+                       <input name="actiontype" value="addnow" type="radio" checked='checked' id="act_now" tabindex="61" /><label for="act_now"><%text(_ADD_ADDNOW)%></label>
+                       <br />
+                       <input name="actiontype" value="addfuture" type="radio" id="act_future" tabindex="61" /><label for="act_future" ><%text(_ADD_ADDLATER)%></label> <%helplink(future)%>
+                       <div class="indent">
+                               <%text(_ADD_PLACE_ON)%>
+                               <input id="inputyear" name="year" tabindex="63" size="4" value="<%currenttime(year)%>" />年
+                               <input id="inputmonth" name="month" tabindex="64" size="2" value="<%currenttime(mon)%>" />月
+                               <input id="inputday" name="day" tabindex="65" size="2" value="<%currenttime(mday)%>" />日
+                                
+                               <input id="inputhour" name="hour" tabindex="66" size="2" value="<%currenttime(hours)%>" />時
+                               <input id="inputminutes" name="minutes" tabindex="67" size="2" value="<%currenttime(minutes)%>" />分
+                               <br />
+                               フォーマット:(yyyy)年(mm)月(dd)日 (hh)時(mm)分
+                               
+                               <%ifblogsetting(ballowpast,0)%>
+                                       <br />
+                                       <%text(_ADD_NOPASTDATES)%>
+                               <%endif%>
+                       </div>
+                       <input name="actiontype" tabindex="61" value="adddraft" type="radio" id="act_draft" /><label for="act_draft"><%text(_ADD_ADDDRAFT)%></label> <%helplink(draft)%>
+               </td>
+       </tr><tr>
+               <td><%text(_ADD_PLUGIN_EXTRAS)%></td>
+               <td>
+                       <%pluginextras%>
+               </td>
+       </tr>
+                       <%itemoptions%> 
+    <tr>
+       <th colspan="2"><%text(_ADD_MORE)%></th>
+       </tr><tr>
+               <td><%text(_ADD_MORE)%>
+                       <br /><%helplink(extended)%>
+               </td>
+               <td>
+                       <%jsbuttonbar(media+preview)%>          
+                       <textarea 
+                               <%jsinput(more)%>                       
+                               tabindex="70"
+                               cols="60"
+                               rows="20"
+                               ><%contents(more)%></textarea>
+               </td>
+       </tr><tr>
+               <td><%text(_SUBMIT)%></td>
+               <td>
+                       <input tabindex="60" type="submit" value="<%text(_ADD_ADDITEM)%>" 
+                               onclick="return checkSubmit();" />
+               </td>
+       </tr>
+</table>
+
+</div>
+</form>        
index b186b89..d56ede3 100755 (executable)
-<h2><%text(_EDIT_ITEM)%></h2>\r
-\r
-<%init%>\r
-<script type="text/javascript" src="javascript/numbercheck.js"></script>\r
-\r
-<form method="post" action="index.php">\r
-<div>\r
-\r
-<input type="hidden" name="action" value="itemupdate" />\r
-<input name="itemid" value="<%contents(itemid)%>" type="hidden" />\r
-<%ticket%>\r
-\r
-<table><tr>\r
-       <th colspan="2"><%text(_EDIT_ITEM)%></th>\r
-</tr><tr>\r
-       <td><%text(_EDIT_ORIG_AUTHOR)%></td>\r
-       <td><%contents(author)%></td>\r
-</tr><tr>\r
-       <td><%text(_ADD_TITLE)%></td>\r
-       <td><input \r
-                       <%jsinput(title)%>\r
-                       tabindex="10" \r
-                       size="60" \r
-                       maxlength="160" \r
-                       value="<%contents(title)%>" />\r
-       </td>\r
-</tr><tr>\r
-       <td>\r
-               <%text(_ADD_BODY)%>\r
-       </td>\r
-       <td>\r
-               <%jsbuttonbar(media+preview)%>  \r
-               <textarea \r
-                       <%jsinput(body)%>\r
-                       tabindex="20"\r
-                       cols="60"\r
-                       rows="20"><%contents(body)%></textarea>\r
-       </td>\r
-</tr><tr id="edit" style="display:none;">\r
-       <td><%text(_ADD_PREVIEW)%></td>\r
-       <td><b><span id="prevtitle"></span></b><br />\r
-               <span id="prevbody"></span><br />\r
-               <span id="prevmore"></span><br />\r
-       </td>\r
-</tr><tr>\r
-\r
-<%ifblogsetting(bcomments)%>\r
-               <td>\r
-                       <%text(_ADD_DISABLE_COMMENTS)%>\r
-               </td>\r
-               <td> \r
-                       <input type="radio" name="closed" value="1" <%checkedonval(1,closed)%> tabindex="30" id="closed_yes" /><label for="closed_yes"><%text(_YES)%></label>\r
-                       <input type="radio" name="closed" value="0" <%checkedonval(0,closed)%> tabindex="30" id="closed_no" /><label for="closed_no"><%text(_NO)%></label>\r
-                       <br />\r
-                       <small><%text(_EDIT_COMMENTSNOTE)%></small>     \r
-               </td>\r
-       </tr><tr>                               \r
-<%endif%>\r
-\r
-       <td><%text(_ADD_CATEGORY)%></td>\r
-       <td><%categories(40)%></td>\r
-</tr><tr>\r
-       <td><%text(_EDIT_SUBMIT)%></td>\r
-       <td>\r
-\r
-               <input type="submit" tabindex="60" value="<%text(_EDIT_SUBMIT)%>" onclick="return checkSubmit();" />\r
-\r
-<%ifitemproperty(draft)%>\r
-               <br /><br />\r
-               <input name="actiontype" value="addnow" type="radio" id="act_now" /><label for="act_now" tabindex="61"><%text(_ADD_ADDNOW)%></label>\r
-               <br />\r
-               <input name="actiontype" value="addfuture" type="radio" id="act_future" tabindex="61" /><label for="act_future"><%text(_ADD_ADDLATER)%></label> <%helplink(future)%>\r
-               <div class="indent">\r
-                       <%text(_ADD_PLACE_ON)%>\r
-                       <input id="inputday" name="day" tabindex="71" size="2" value="<%currenttime(mday)%>" />/\r
-                       <input id="inputmonth" name="month" tabindex="72" size="2" value="<%currenttime(mon)%>" />/\r
-                       <input id="inputyear" name="year" tabindex="73" size="4" value="<%currenttime(year)%>" />\r
-                       at\r
-                       <input id="inputhour" name="hour" tabindex="74" size="2" value="<%currenttime(hours)%>" />:\r
-                       <input id="inputminutes" name="minutes" tabindex="75" size="2" value="<%currenttime(minutes)%>" />\r
-                       (dd/mm/yyyy hh:mm)\r
-                       <%ifblogsetting(ballowpast,0)%>\r
-                               <br />\r
-                               <%text(_ADD_NOPASTDATES)%>\r
-                       <%endif%>\r
-               </div>\r
-               <input name="actiontype" value="adddraft" type="radio" checked='checked' id="act_draft" tabindex="61" /><label for="act_draft"><%text(_EDIT_BACKTODRAFTS)%></label> <%helplink(draft)%>\r
-               <br />\r
-               <input name="actiontype" value="delete" type="radio" id="act_delete" tabindex="61" /><label for="act_delete"><%text(_BMLET_DELETE)%></label>\r
-<%endif%>\r
-\r
-<%ifitemproperty(draft,0)%>\r
-       <br /><br />\r
-       <input name="actiontype" value="edit" type="radio" checked="checked" id="act_edit" tabindex="61" /><label for="act_edit"><%text(_BMLET_EDIT)%></label>\r
-       <%ifblogsetting(ballowpast)%>\r
-               <br />\r
-               <input name="actiontype" value="changedate" type="radio" id="act_changedate" tabindex="70" /><label for="act_changedate"><%text(_ADD_CHANGEDATE)%></label> <%helplink(changedate)%>\r
-                       <div class="indent">\r
-                               <input id="inputyear" name="year" tabindex="71" size="4" value="<%itemtime(year)%>" />年\r
-                               <input id="inputmonth" name="month" tabindex="72" size="2" value="<%itemtime(mon)%>" />月\r
-                               <input id="inputday" name="day" tabindex="73" size="2" value="<%itemtime(mday)%>" />日\r
-                                \r
-                               <input id="inputhour" name="hour" tabindex="74" size="2" value="<%itemtime(hours)%>" />時\r
-                               <input id="inputminutes" name="minutes" tabindex="75" size="2" value="<%itemtime(minutes)%>" />分\r
-                               <br />\r
-                               フォーマット:(yyyy)年(mm)月(dd)日 (hh)時(mm)分\r
-                       </div>\r
-       <%endif%>       \r
-       <br />\r
-       <input name="actiontype" value="delete" type="radio" id="act_delete" tabindex="61" /><label for="act_delete"><%text(_BMLET_DELETE)%></label>\r
-<%endif%>\r
-\r
-       </td>\r
-</tr><tr>\r
-       <td><%text(_ADD_PLUGIN_EXTRAS)%></td>\r
-       <td>\r
-               <%pluginextras%>\r
-       </td>   \r
-</tr>\r
-                       <%itemoptions%> \r
-<tr>\r
-       <th colspan="2"><%text(_ADD_MORE)%></th>\r
-</tr>\r
-<tr>\r
-       <td><%text(_ADD_MORE)%>\r
-               <br /><%helplink(extended)%>\r
-       </td>\r
-       <td>\r
-               <%jsbuttonbar(media+preview)%>\r
-               <textarea \r
-                       <%jsinput(more)%>\r
-                       tabindex="90" \r
-                       cols="60" \r
-                       rows="20"><%contents(more)%></textarea>\r
-       </td>\r
-</tr><tr>\r
-               <td><%text(_SUBMIT)%></td>\r
-               <td>\r
-                       <input tabindex="60" type="submit" value="<%text(_EDIT_SUBMIT)%>" \r
-                               onclick="return checkSubmit();" />\r
-               </td>\r
-       \r
-</tr></table>\r
-\r
-</div>\r
-</form>                \r
+<h2><%text(_EDIT_ITEM)%></h2>
+
+<%init%>
+<script type="text/javascript" src="javascript/numbercheck.js"></script>
+
+<form method="post" action="index.php">
+<div>
+
+<input type="hidden" name="action" value="itemupdate" />
+<input name="itemid" value="<%contents(itemid)%>" type="hidden" />
+<%ticket%>
+
+<table><tr>
+       <th colspan="2"><%text(_EDIT_ITEM)%></th>
+</tr><tr>
+       <td><%text(_EDIT_ORIG_AUTHOR)%></td>
+       <td><%contents(author)%></td>
+</tr><tr>
+       <td><%text(_ADD_TITLE)%></td>
+       <td><input 
+                       <%jsinput(title)%>
+                       tabindex="10" 
+                       size="60" 
+                       maxlength="160" 
+                       value="<%contents(title)%>" />
+       </td>
+</tr><tr>
+       <td>
+               <%text(_ADD_BODY)%>
+       </td>
+       <td>
+               <%jsbuttonbar(media+preview)%>  
+               <textarea 
+                       <%jsinput(body)%>
+                       tabindex="20"
+                       cols="60"
+                       rows="20"><%contents(body)%></textarea>
+       </td>
+</tr><tr id="edit" style="display:none;">
+       <td><%text(_ADD_PREVIEW)%></td>
+       <td><b><span id="prevtitle"></span></b><br />
+               <span id="prevbody"></span><br />
+               <span id="prevmore"></span><br />
+       </td>
+</tr><tr>
+
+<%ifblogsetting(bcomments)%>
+               <td>
+                       <%text(_ADD_DISABLE_COMMENTS)%>
+               </td>
+               <td> 
+                       <input type="radio" name="closed" value="1" <%checkedonval(1,closed)%> tabindex="30" id="closed_yes" /><label for="closed_yes"><%text(_YES)%></label>
+                       <input type="radio" name="closed" value="0" <%checkedonval(0,closed)%> tabindex="30" id="closed_no" /><label for="closed_no"><%text(_NO)%></label>
+                       <br />
+                       <small><%text(_EDIT_COMMENTSNOTE)%></small>     
+               </td>
+       </tr><tr>                               
+<%endif%>
+
+       <td><%text(_ADD_CATEGORY)%></td>
+       <td><%categories(40)%></td>
+</tr><tr>
+       <td><%text(_EDIT_SUBMIT)%></td>
+       <td>
+
+               <input type="submit" tabindex="60" value="<%text(_EDIT_SUBMIT)%>" onclick="return checkSubmit();" />
+
+<%ifitemproperty(draft)%>
+               <br /><br />
+               <input name="actiontype" value="addnow" type="radio" id="act_now" /><label for="act_now" tabindex="61"><%text(_ADD_ADDNOW)%></label>
+               <br />
+               <input name="actiontype" value="addfuture" type="radio" id="act_future" tabindex="61" /><label for="act_future"><%text(_ADD_ADDLATER)%></label> <%helplink(future)%>
+               <div class="indent">
+                       <%text(_ADD_PLACE_ON)%>
+                       <input id="inputday" name="day" tabindex="71" size="2" value="<%currenttime(mday)%>" />/
+                       <input id="inputmonth" name="month" tabindex="72" size="2" value="<%currenttime(mon)%>" />/
+                       <input id="inputyear" name="year" tabindex="73" size="4" value="<%currenttime(year)%>" />
+                       at
+                       <input id="inputhour" name="hour" tabindex="74" size="2" value="<%currenttime(hours)%>" />:
+                       <input id="inputminutes" name="minutes" tabindex="75" size="2" value="<%currenttime(minutes)%>" />
+                       (dd/mm/yyyy hh:mm)
+                       <%ifblogsetting(ballowpast,0)%>
+                               <br />
+                               <%text(_ADD_NOPASTDATES)%>
+                       <%endif%>
+               </div>
+               <input name="actiontype" value="adddraft" type="radio" checked='checked' id="act_draft" tabindex="61" /><label for="act_draft"><%text(_EDIT_BACKTODRAFTS)%></label> <%helplink(draft)%>
+               <br />
+               <input name="actiontype" value="delete" type="radio" id="act_delete" tabindex="61" /><label for="act_delete"><%text(_BMLET_DELETE)%></label>
+<%endif%>
+
+<%ifitemproperty(draft,0)%>
+       <br /><br />
+       <input name="actiontype" value="edit" type="radio" checked="checked" id="act_edit" tabindex="61" /><label for="act_edit"><%text(_BMLET_EDIT)%></label>
+       <%ifblogsetting(ballowpast)%>
+               <br />
+               <input name="actiontype" value="changedate" type="radio" id="act_changedate" tabindex="70" /><label for="act_changedate"><%text(_ADD_CHANGEDATE)%></label> <%helplink(changedate)%>
+                       <div class="indent">
+                               <input id="inputyear" name="year" tabindex="71" size="4" value="<%itemtime(year)%>" />年
+                               <input id="inputmonth" name="month" tabindex="72" size="2" value="<%itemtime(mon)%>" />月
+                               <input id="inputday" name="day" tabindex="73" size="2" value="<%itemtime(mday)%>" />日
+                                
+                               <input id="inputhour" name="hour" tabindex="74" size="2" value="<%itemtime(hours)%>" />時
+                               <input id="inputminutes" name="minutes" tabindex="75" size="2" value="<%itemtime(minutes)%>" />分
+                               <br />
+                               フォーマット:(yyyy)年(mm)月(dd)日 (hh)時(mm)分
+                       </div>
+       <%endif%>       
+       <br />
+       <input name="actiontype" value="delete" type="radio" id="act_delete" tabindex="61" /><label for="act_delete"><%text(_BMLET_DELETE)%></label>
+<%endif%>
+
+       </td>
+</tr><tr>
+       <td><%text(_ADD_PLUGIN_EXTRAS)%></td>
+       <td>
+               <%pluginextras%>
+       </td>   
+</tr>
+                       <%itemoptions%> 
+<tr>
+       <th colspan="2"><%text(_ADD_MORE)%></th>
+</tr>
+<tr>
+       <td><%text(_ADD_MORE)%>
+               <br /><%helplink(extended)%>
+       </td>
+       <td>
+               <%jsbuttonbar(media+preview)%>
+               <textarea 
+                       <%jsinput(more)%>
+                       tabindex="90" 
+                       cols="60" 
+                       rows="20"><%contents(more)%></textarea>
+       </td>
+</tr><tr>
+               <td><%text(_SUBMIT)%></td>
+               <td>
+                       <input tabindex="60" type="submit" value="<%text(_EDIT_SUBMIT)%>" 
+                               onclick="return checkSubmit();" />
+               </td>
+       
+</tr></table>
+
+</div>
+</form>                
index 6eefc0b..0cf248e 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-       <html xmlns="http://www.w3.org/1999/xhtml">\r
-       <head>\r
-               <title><%text(_ADD_ADDTO)%> '<%blogname%>'</title>\r
-               <link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" /> \r
-               <link rel="stylesheet" type="text/css" href="styles/addedit.css" />             \r
-               <script type="text/javascript" src="javascript/bookmarklet.js"></script>\r
-               <script type="text/javascript" src="javascript/edit.js"></script>\r
-               <script type="text/javascript" src="javascript/numbercheck.js"></script>\r
-               <%init%>\r
-               <%extrahead%>\r
-               <script type="text/javascript">\r
-                       var nucleus_initbm_oldonload = window.onload;\r
-                       function nucleus_initbm()\r
-                       {\r
-                               initStyles(); \r
-                               updAllPreviews();\r
-\r
-                               if (nucleus_initbm_oldonload)\r
-                                       nucleus_initbm_oldonload();\r
-                       }\r
-                       window.onload = nucleus_initbm;\r
-               </script>\r
-       </head>\r
-       <body>\r
-               <h1><%text(_ADD_ADDTO)%> '<%bloglink%>'</h1>\r
-               <form method="post" action="bookmarklet.php" ><div>\r
-                       \r
-                       <input name="action" type="hidden" value="additem" />\r
-                       <input name="blogid" type="hidden" value="<%blogid%>" />\r
-                       <%ticket%>\r
-                       \r
-                       <div id="submit" class="buttonbar">\r
-                               <input type="submit" value="<%text(_BMLET_ADD)%>" onclick="return checkSubmit();" />\r
-                               <div id="switchbuttons">\r
-                                       <input type="button" onclick="flipBlock('body');" value="<%text(_BMLET_BODY)%> &gt;&gt;" />\r
-                                       <input type="button" onclick="flipBlock('more');" value="<%text(_BMLET_MORE)%> &gt;&gt;" />\r
-                                       <input type="button" onclick="flipBlock('options');" value="<%text(_BMLET_OPTIONS)%> &gt;&gt;" />\r
-                                       <input type="button" onclick="updAllPreviews(); flipBlock('preview');" value="<%text(_BMLET_PREVIEW)%> &gt;&gt;" />\r
-                               </div>\r
-                       </div>\r
-\r
-                       <div id="body" class="contentblock">\r
-\r
-                               <table>\r
-                               <tr>\r
-                               <td><%text(_ADD_TITLE)%></td>\r
-                               <td>\r
-                               <input \r
-                                       <%jsinput(title)%>\r
-                                       type="text" size="60" maxlength="160" \r
-                                       value="<%contents(title)%>"\r
-                               /></td>\r
-                               </tr><tr>\r
-                               <td>\r
-                               <%text(_ADD_BODY)%> <%helplink(additem)%></td>\r
-                               <td>\r
-                               <%jsbuttonbar(media)%>\r
-                               <textarea \r
-                                       <%jsinput(body)%>\r
-                                       cols="58" \r
-                                       rows="12"><%contents(body)%></textarea>\r
-                                       \r
-                               </td></tr>\r
-                               <tr><td>\r
-                               <%text(_ADD_CATEGORY)%></td>\r
-                               <td><%categories%></td>\r
-                               </tr></table>\r
-\r
-                                       \r
-                       </div>\r
-                       \r
-                       <div id="more" class="contentblock">\r
-                               <table>\r
-                               <tr>\r
-                               <td><%text(_ADD_MORE)%> <%helplink(extended)%></td>\r
-                               <td>\r
-                               <%jsbuttonbar(media)%>\r
-                               <textarea \r
-                                       <%jsinput(more)%>\r
-                                       cols="58" \r
-                                       rows="17"><%contents(more)%></textarea>\r
-                               </td></tr></table>\r
-                       </div>\r
-                       <div id="options" class="contentblock">\r
-                               <table>\r
-                               <%ifblogsetting(bcomments)%>\r
-                                       <tr>\r
-                                       <td><%text(_ADD_DISABLE_COMMENTS)%></td>\r
-                                       <td>\r
-                                       <input type='radio' name='closed' value='1' id="closed_yes" /><label for="closed_yes"><%text(_YES)%></label>\r
-                                       <input type='radio' name='closed' value='0' checked='checked' id="closed_no"/><label for="closed_no"><%text(_NO)%></label>\r
-                                       </td>\r
-                                       </tr>\r
-                               <%endif%>\r
-                               \r
-                               <tr>\r
-                               <td><%text(_ADD_DRAFTNFUTURE)%></td>\r
-                               <td>\r
-                                       <input name="actiontype" value="addnow" type="radio" checked='checked' id="act_now" /><label for="act_now"><%text(_ADD_ADDNOW)%></label>\r
-                                       <br />\r
-                                       <input name="actiontype" value="addfuture" type="radio" id="act_future" /><label for="act_future"><%text(_ADD_ADDLATER)%></label> <%helplink(future)%>\r
-                                       <div class="indent">\r
-                                               <%text(_ADD_PLACE_ON)%>\r
-                                               <input id="inputyear" name="year" size="4" value="<%currenttime(year)%>" />年\r
-                                               <input id="inputmonth" name="month" size="2" value="<%currenttime(mon)%>" />月\r
-                                               <input id="inputday" name="day" size="2" value="<%currenttime(mday)%>" />日\r
-                                               <input id="inputhour" name="hour" size="2" value="<%currenttime(hours)%>" />時\r
-                                               <input id="inputminutes" name="minutes" size="2" value="<%currenttime(minutes)%>" />分\r
-                                               <br />\r
-                                               フォーマット:(yyyy)年(mm)月(dd)日 (hh)時(mm)分\r
-                                               <%ifblogsetting(ballowpast,0)%>\r
-                                                       <br />\r
-                                                       <%text(_ADD_NOPASTDATES)%>\r
-                                               <%endif%>\r
-                                       </div>\r
-                                       <input name="actiontype" value="adddraft" type="radio" id="act_draft" /><label for="act_draft"><%text(_ADD_ADDDRAFT)%></label> <%helplink(draft)%>\r
-                               </td>\r
-                               </tr>\r
-                               <tr>\r
-                               <td><%text(_ADD_PLUGIN_EXTRAS)%></td>\r
-                               <td>\r
-                               <%pluginextras%></td>\r
-                               </tr>\r
-                               \r
-                               \r
-                                 <%itemoptions%>\r
-                               </table>\r
-                               \r
-\r
-                       </div>\r
-                       \r
-                       <div id="preview" class="contentblock">\r
-                               <h2><%text(_ADD_PREVIEW)%></h2>\r
-                               \r
-                               <b><span id="prevtitle"></span></b>\r
-                               <br />\r
-                               <span id="prevbody"></span>\r
-                               <br />\r
-                               <span id="prevmore"></span>\r
-                       </div>\r
-                       \r
-               </div></form>\r
-       </body>\r
-       </html>\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+       <html xmlns="http://www.w3.org/1999/xhtml">
+       <head>
+               <title><%text(_ADD_ADDTO)%> '<%blogname%>'</title>
+               <link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" /> 
+               <link rel="stylesheet" type="text/css" href="styles/addedit.css" />             
+               <script type="text/javascript" src="javascript/bookmarklet.js"></script>
+               <script type="text/javascript" src="javascript/edit.js"></script>
+               <script type="text/javascript" src="javascript/numbercheck.js"></script>
+               <%init%>
+               <%extrahead%>
+               <script type="text/javascript">
+                       var nucleus_initbm_oldonload = window.onload;
+                       function nucleus_initbm()
+                       {
+                               initStyles(); 
+                               updAllPreviews();
+
+                               if (nucleus_initbm_oldonload)
+                                       nucleus_initbm_oldonload();
+                       }
+                       window.onload = nucleus_initbm;
+               </script>
+       </head>
+       <body>
+               <h1><%text(_ADD_ADDTO)%> '<%bloglink%>'</h1>
+               <form method="post" action="bookmarklet.php" ><div>
+                       
+                       <input name="action" type="hidden" value="additem" />
+                       <input name="blogid" type="hidden" value="<%blogid%>" />
+                       <%ticket%>
+                       
+                       <div id="submit" class="buttonbar">
+                               <input type="submit" value="<%text(_BMLET_ADD)%>" onclick="return checkSubmit();" />
+                               <div id="switchbuttons">
+                                       <input type="button" onclick="flipBlock('body');" value="<%text(_BMLET_BODY)%> &gt;&gt;" />
+                                       <input type="button" onclick="flipBlock('more');" value="<%text(_BMLET_MORE)%> &gt;&gt;" />
+                                       <input type="button" onclick="flipBlock('options');" value="<%text(_BMLET_OPTIONS)%> &gt;&gt;" />
+                                       <input type="button" onclick="updAllPreviews(); flipBlock('preview');" value="<%text(_BMLET_PREVIEW)%> &gt;&gt;" />
+                               </div>
+                       </div>
+
+                       <div id="body" class="contentblock">
+
+                               <table>
+                               <tr>
+                               <td><%text(_ADD_TITLE)%></td>
+                               <td>
+                               <input 
+                                       <%jsinput(title)%>
+                                       type="text" size="60" maxlength="160" 
+                                       value="<%contents(title)%>"
+                               /></td>
+                               </tr><tr>
+                               <td>
+                               <%text(_ADD_BODY)%> <%helplink(additem)%></td>
+                               <td>
+                               <%jsbuttonbar(media)%>
+                               <textarea 
+                                       <%jsinput(body)%>
+                                       cols="58" 
+                                       rows="12"><%contents(body)%></textarea>
+                                       
+                               </td></tr>
+                               <tr><td>
+                               <%text(_ADD_CATEGORY)%></td>
+                               <td><%categories%></td>
+                               </tr></table>
+
+                                       
+                       </div>
+                       
+                       <div id="more" class="contentblock">
+                               <table>
+                               <tr>
+                               <td><%text(_ADD_MORE)%> <%helplink(extended)%></td>
+                               <td>
+                               <%jsbuttonbar(media)%>
+                               <textarea 
+                                       <%jsinput(more)%>
+                                       cols="58" 
+                                       rows="17"><%contents(more)%></textarea>
+                               </td></tr></table>
+                       </div>
+                       <div id="options" class="contentblock">
+                               <table>
+                               <%ifblogsetting(bcomments)%>
+                                       <tr>
+                                       <td><%text(_ADD_DISABLE_COMMENTS)%></td>
+                                       <td>
+                                       <input type='radio' name='closed' value='1' id="closed_yes" /><label for="closed_yes"><%text(_YES)%></label>
+                                       <input type='radio' name='closed' value='0' checked='checked' id="closed_no"/><label for="closed_no"><%text(_NO)%></label>
+                                       </td>
+                                       </tr>
+                               <%endif%>
+                               
+                               <tr>
+                               <td><%text(_ADD_DRAFTNFUTURE)%></td>
+                               <td>
+                                       <input name="actiontype" value="addnow" type="radio" checked='checked' id="act_now" /><label for="act_now"><%text(_ADD_ADDNOW)%></label>
+                                       <br />
+                                       <input name="actiontype" value="addfuture" type="radio" id="act_future" /><label for="act_future"><%text(_ADD_ADDLATER)%></label> <%helplink(future)%>
+                                       <div class="indent">
+                                               <%text(_ADD_PLACE_ON)%>
+                                               <input id="inputyear" name="year" size="4" value="<%currenttime(year)%>" />年
+                                               <input id="inputmonth" name="month" size="2" value="<%currenttime(mon)%>" />月
+                                               <input id="inputday" name="day" size="2" value="<%currenttime(mday)%>" />日
+                                               <input id="inputhour" name="hour" size="2" value="<%currenttime(hours)%>" />時
+                                               <input id="inputminutes" name="minutes" size="2" value="<%currenttime(minutes)%>" />分
+                                               <br />
+                                               フォーマット:(yyyy)年(mm)月(dd)日 (hh)時(mm)分
+                                               <%ifblogsetting(ballowpast,0)%>
+                                                       <br />
+                                                       <%text(_ADD_NOPASTDATES)%>
+                                               <%endif%>
+                                       </div>
+                                       <input name="actiontype" value="adddraft" type="radio" id="act_draft" /><label for="act_draft"><%text(_ADD_ADDDRAFT)%></label> <%helplink(draft)%>
+                               </td>
+                               </tr>
+                               <tr>
+                               <td><%text(_ADD_PLUGIN_EXTRAS)%></td>
+                               <td>
+                               <%pluginextras%></td>
+                               </tr>
+                               
+                               
+                                 <%itemoptions%>
+                               </table>
+                               
+
+                       </div>
+                       
+                       <div id="preview" class="contentblock">
+                               <h2><%text(_ADD_PREVIEW)%></h2>
+                               
+                               <b><span id="prevtitle"></span></b>
+                               <br />
+                               <span id="prevbody"></span>
+                               <br />
+                               <span id="prevmore"></span>
+                       </div>
+                       
+               </div></form>
+       </body>
+       </html>
+
index b275792..13d3f88 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-       <html xmlns="http://www.w3.org/1999/xhtml">\r
-       <head>\r
-               <title><%text(_EDIT_ITEM)%></title>\r
-               <link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" />\r
-               <link rel="stylesheet" type="text/css" href="styles/addedit.css" />                             \r
-               <script type="text/javascript" src="javascript/bookmarklet.js"></script>\r
-               <script type="text/javascript" src="javascript/edit.js"></script>\r
-               <script type="text/javascript" src="javascript/numbercheck.js"></script>\r
-               <%init%>\r
-               <%extrahead%>\r
-               <script type="text/javascript">\r
-                       var nucleus_initbm_oldonload = window.onload;\r
-                       function nucleus_initbm()\r
-                       {\r
-                               initStyles(); \r
-                               updAllPreviews();\r
-\r
-                               if (nucleus_initbm_oldonload)\r
-                                       nucleus_initbm_oldonload();\r
-                       }\r
-                       window.onload = nucleus_initbm;\r
-               </script>\r
-       </head>\r
-       <body>\r
-               <h1><%text(_EDIT_ITEM)%> (<%contents(itemid)%>)</h1>\r
-               <form method="post" action="bookmarklet.php" ><div>\r
-                       \r
-                       <input name="action" type="hidden" value="edititem" />\r
-                       <input name="itemid" type="hidden" value="<%contents(itemid)%>" />\r
-                       <%ticket%>\r
-                       \r
-                       <div id="submit" class="buttonbar">\r
-                               <input type="submit" value="<%text(_BMLET_EDIT)%>" onclick="return checkSubmit();" />\r
-                               <div id="switchbuttons">\r
-                                       <input type="button" onclick="flipBlock('body');" value="<%text(_BMLET_BODY)%> &gt;&gt;" />\r
-                                       <input type="button" onclick="flipBlock('more');" value="<%text(_BMLET_MORE)%> &gt;&gt;" />\r
-                                       <input type="button" onclick="flipBlock('options');" value="<%text(_BMLET_OPTIONS)%> &gt;&gt;" />\r
-                                       <input type="button" onclick="updAllPreviews(); flipBlock('preview');" value="<%text(_BMLET_PREVIEW)%> &gt;&gt;" />\r
-                               </div>\r
-                       </div>\r
-\r
-                       <div id="body" class="contentblock">\r
-                               <table>\r
-                               <tr>\r
-                               <td><%text(_ADD_TITLE)%></td>\r
-                               <td><input \r
-                                       <%jsinput(title)%>\r
-                                       type="text" size="60" maxlength="160" \r
-                                       value="<%contents(title)%>"\r
-                               /></td></tr>\r
-                       \r
-                               <tr><td>\r
-                               <%text(_ADD_BODY)%>\r
-                               </td><td>\r
-                               <%jsbuttonbar(media)%>\r
-                               <textarea \r
-                                       <%jsinput(body)%>\r
-                                       cols="58" \r
-                                       rows="12"><%contents(body)%></textarea>\r
-\r
-                               </td></tr>\r
-                               <tr>\r
-                               <td><%text(_ADD_CATEGORY)%></td>\r
-                               <td><%categories%></td>\r
-                               </tr>\r
-                               </table>\r
-                                       \r
-                       </div>\r
-                       \r
-                       <div id="more" class="contentblock">\r
-                               <table>\r
-                               <tr>\r
-                               <td><%text(_ADD_MORE)%> <%helplink(extended)%></td>\r
-                               <td>\r
-                               <%jsbuttonbar(media)%>\r
-                               <textarea \r
-                                       <%jsinput(more)%>\r
-                                       cols="58" \r
-                                       rows="17"><%contents(more)%></textarea>\r
-                               </td></tr></table>\r
-                       </div>\r
-                       <div id="options" class="contentblock">\r
-                               <table>\r
-                               <%ifblogsetting(bcomments)%>\r
-                                       <tr>\r
-                                       <td><%text(_ADD_DISABLE_COMMENTS)%></td>\r
-                                       <td>\r
-                                   <input type="radio" name="closed" value="1" id="closed_yes" <%checkedonval(1,closed)%> /><label for="closed_yes"><%text(_YES)%></label>\r
-                                   <input type="radio" name="closed" value="0" id="closed_no" <%checkedonval(0,closed)%> /><label for="closed_no"><%text(_NO)%></label>\r
-                                       </td>\r
-                                       </tr>\r
-                               <%endif%>\r
-                               \r
-                               <!-- The only actiontypes are 'edit', 'changedate' (no draft items can be edited) and 'delete' -->\r
-                               <tr>\r
-                               <td>Action</td>\r
-                               <td>\r
-                               <ul class="nobullets">\r
-                                       <li><input name="actiontype" value="edit" type="radio" checked="checked" id="act_edit" /><label for="act_edit"><%text(_BMLET_EDIT)%></label></li>\r
-                                       <li><input name="actiontype" value="delete" type="radio" id="act_delete" /><label for="act_delete"><%text(_BMLET_DELETE)%></label></li>\r
-                                       <%ifblogsetting(ballowpast)%>\r
-                                               <li>\r
-                                                       <input name="actiontype" value="changedate" type="radio" id="act_changedate" tabindex="70" /><label for="act_changedate"><%text(_BMLET_CHANGEDATE)%></label> <%helplink(changedate)%>\r
-                                                                       <div class="indent">\r
-                                                                               <input id="inputyear" name="year" tabindex="71" size="4" value="<%itemtime(year)%>" />年\r
-                                                                               <input id="inputmonth" name="month" tabindex="72" size="2" value="<%itemtime(mon)%>" />月\r
-                                                                               <input id="inputday" name="day" tabindex="73" size="2" value="<%itemtime(mday)%>" />日\r
-                                                                               <input id="inputhour" name="hour" tabindex="74" size="2" value="<%itemtime(hours)%>" />時\r
-                                                                               <input id="inputminutes" name="minutes" tabindex="75" size="2" value="<%itemtime(minutes)%>" />分\r
-                                                                               <br />\r
-                                                                               フォーマット:(yyyy)年(mm)月(dd)日 (hh)時(mm)分\r
-                                                                       </div>\r
-                                                       </li>\r
-                                       <%endif%>                                               \r
-                               </ul>\r
-                               </td></tr>\r
-                               \r
-                               <tr>\r
-                               <td><%text(_ADD_PLUGIN_EXTRAS)%></td>\r
-                               <td>\r
-                               <%pluginextras%>\r
-                               </td></tr>\r
-                               \r
-                                 <%itemoptions%>\r
-                               </table>\r
-                               \r
-                       </div>\r
-                       \r
-                       <div id="preview" class="contentblock">\r
-                               <h2><%text(_ADD_PREVIEW)%></h2>\r
-                               \r
-                               <b><span id="prevtitle"></span></b>\r
-                               <br />\r
-                               <span id="prevbody"></span>\r
-                               <br />\r
-                               <span id="prevmore"></span>\r
-                       </div>\r
-                       \r
-               </div></form>\r
-       </body>\r
-       </html>\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+       <html xmlns="http://www.w3.org/1999/xhtml">
+       <head>
+               <title><%text(_EDIT_ITEM)%></title>
+               <link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" />
+               <link rel="stylesheet" type="text/css" href="styles/addedit.css" />                             
+               <script type="text/javascript" src="javascript/bookmarklet.js"></script>
+               <script type="text/javascript" src="javascript/edit.js"></script>
+               <script type="text/javascript" src="javascript/numbercheck.js"></script>
+               <%init%>
+               <%extrahead%>
+               <script type="text/javascript">
+                       var nucleus_initbm_oldonload = window.onload;
+                       function nucleus_initbm()
+                       {
+                               initStyles(); 
+                               updAllPreviews();
+
+                               if (nucleus_initbm_oldonload)
+                                       nucleus_initbm_oldonload();
+                       }
+                       window.onload = nucleus_initbm;
+               </script>
+       </head>
+       <body>
+               <h1><%text(_EDIT_ITEM)%> (<%contents(itemid)%>)</h1>
+               <form method="post" action="bookmarklet.php" ><div>
+                       
+                       <input name="action" type="hidden" value="edititem" />
+                       <input name="itemid" type="hidden" value="<%contents(itemid)%>" />
+                       <%ticket%>
+                       
+                       <div id="submit" class="buttonbar">
+                               <input type="submit" value="<%text(_BMLET_EDIT)%>" onclick="return checkSubmit();" />
+                               <div id="switchbuttons">
+                                       <input type="button" onclick="flipBlock('body');" value="<%text(_BMLET_BODY)%> &gt;&gt;" />
+                                       <input type="button" onclick="flipBlock('more');" value="<%text(_BMLET_MORE)%> &gt;&gt;" />
+                                       <input type="button" onclick="flipBlock('options');" value="<%text(_BMLET_OPTIONS)%> &gt;&gt;" />
+                                       <input type="button" onclick="updAllPreviews(); flipBlock('preview');" value="<%text(_BMLET_PREVIEW)%> &gt;&gt;" />
+                               </div>
+                       </div>
+
+                       <div id="body" class="contentblock">
+                               <table>
+                               <tr>
+                               <td><%text(_ADD_TITLE)%></td>
+                               <td><input 
+                                       <%jsinput(title)%>
+                                       type="text" size="60" maxlength="160" 
+                                       value="<%contents(title)%>"
+                               /></td></tr>
+                       
+                               <tr><td>
+                               <%text(_ADD_BODY)%>
+                               </td><td>
+                               <%jsbuttonbar(media)%>
+                               <textarea 
+                                       <%jsinput(body)%>
+                                       cols="58" 
+                                       rows="12"><%contents(body)%></textarea>
+
+                               </td></tr>
+                               <tr>
+                               <td><%text(_ADD_CATEGORY)%></td>
+                               <td><%categories%></td>
+                               </tr>
+                               </table>
+                                       
+                       </div>
+                       
+                       <div id="more" class="contentblock">
+                               <table>
+                               <tr>
+                               <td><%text(_ADD_MORE)%> <%helplink(extended)%></td>
+                               <td>
+                               <%jsbuttonbar(media)%>
+                               <textarea 
+                                       <%jsinput(more)%>
+                                       cols="58" 
+                                       rows="17"><%contents(more)%></textarea>
+                               </td></tr></table>
+                       </div>
+                       <div id="options" class="contentblock">
+                               <table>
+                               <%ifblogsetting(bcomments)%>
+                                       <tr>
+                                       <td><%text(_ADD_DISABLE_COMMENTS)%></td>
+                                       <td>
+                                   <input type="radio" name="closed" value="1" id="closed_yes" <%checkedonval(1,closed)%> /><label for="closed_yes"><%text(_YES)%></label>
+                                   <input type="radio" name="closed" value="0" id="closed_no" <%checkedonval(0,closed)%> /><label for="closed_no"><%text(_NO)%></label>
+                                       </td>
+                                       </tr>
+                               <%endif%>
+                               
+                               <!-- The only actiontypes are 'edit', 'changedate' (no draft items can be edited) and 'delete' -->
+                               <tr>
+                               <td>Action</td>
+                               <td>
+                               <ul class="nobullets">
+                                       <li><input name="actiontype" value="edit" type="radio" checked="checked" id="act_edit" /><label for="act_edit"><%text(_BMLET_EDIT)%></label></li>
+                                       <li><input name="actiontype" value="delete" type="radio" id="act_delete" /><label for="act_delete"><%text(_BMLET_DELETE)%></label></li>
+                                       <%ifblogsetting(ballowpast)%>
+                                               <li>
+                                                       <input name="actiontype" value="changedate" type="radio" id="act_changedate" tabindex="70" /><label for="act_changedate"><%text(_BMLET_CHANGEDATE)%></label> <%helplink(changedate)%>
+                                                                       <div class="indent">
+                                                                               <input id="inputyear" name="year" tabindex="71" size="4" value="<%itemtime(year)%>" />年
+                                                                               <input id="inputmonth" name="month" tabindex="72" size="2" value="<%itemtime(mon)%>" />月
+                                                                               <input id="inputday" name="day" tabindex="73" size="2" value="<%itemtime(mday)%>" />日
+                                                                               <input id="inputhour" name="hour" tabindex="74" size="2" value="<%itemtime(hours)%>" />時
+                                                                               <input id="inputminutes" name="minutes" tabindex="75" size="2" value="<%itemtime(minutes)%>" />分
+                                                                               <br />
+                                                                               フォーマット:(yyyy)年(mm)月(dd)日 (hh)時(mm)分
+                                                                       </div>
+                                                       </li>
+                                       <%endif%>                                               
+                               </ul>
+                               </td></tr>
+                               
+                               <tr>
+                               <td><%text(_ADD_PLUGIN_EXTRAS)%></td>
+                               <td>
+                               <%pluginextras%>
+                               </td></tr>
+                               
+                                 <%itemoptions%>
+                               </table>
+                               
+                       </div>
+                       
+                       <div id="preview" class="contentblock">
+                               <h2><%text(_ADD_PREVIEW)%></h2>
+                               
+                               <b><span id="prevtitle"></span></b>
+                               <br />
+                               <span id="prevbody"></span>
+                               <br />
+                               <span id="prevmore"></span>
+                       </div>
+                       
+               </div></form>
+       </body>
+       </html>
+
index d004b8f..bbdf3f9 100755 (executable)
@@ -1,13 +1,13 @@
-<!DOCTYPE html\r
-PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\r
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>Nothing Here</title>\r
-</head>\r
-<body>\r
-\r
-<h1>Nothing to see here</h1>\r
-\r
-</body>\r
+<!DOCTYPE html
+PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
 </html>
\ No newline at end of file
index 2853180..a90aa85 100755 (executable)
@@ -1,7 +1,7 @@
-README for the libs/include directory\r
--------------------------------------\r
-\r
-This directory contains templates used by the admin-area. \r
-They're not really intended to be edited by the people using Nucleus (i.e. there's \r
-no documentation and little support). But if you really can't stop yourself,\r
+README for the libs/include directory
+-------------------------------------
+
+This directory contains templates used by the admin-area. 
+They're not really intended to be edited by the people using Nucleus (i.e. there's 
+no documentation and little support). But if you really can't stop yourself,
 go ahead :)
\ No newline at end of file
index 50f792c..3974d80 100755 (executable)
@@ -1,11 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>Nothing Here</title>\r
-</head>\r
-<body>\r
-\r
-<h1>Nothing to see here</h1>\r
-\r
-</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
 </html>
\ No newline at end of file
index 4472525..3ebc53b 100755 (executable)
-<?php\r
-$_sjistoeuc_byte1 = array(\r
-129 => 161 ,130 => 163 ,131 => 165 ,132 => 167 ,133 => 169 ,134 => 171 ,\r
-135 => 173 ,136 => 175 ,137 => 177 ,138 => 179 ,139 => 181 ,140 => 183 ,\r
-141 => 185 ,142 => 187 ,143 => 189 ,144 => 191 ,145 => 193 ,146 => 195 ,\r
-147 => 197 ,148 => 199 ,149 => 201 ,150 => 203 ,151 => 205 ,152 => 207 ,\r
-153 => 209 ,154 => 211 ,155 => 213 ,156 => 215 ,157 => 217 ,158 => 219 ,\r
-159 => 221 ,224 => 223 ,225 => 225 ,226 => 227 ,227 => 229 ,228 => 231 ,\r
-229 => 233 ,230 => 235 ,231 => 237 ,232 => 239 ,233 => 241 ,234 => 243 ,\r
-235 => 245 ,236 => 247 ,237 => 249 ,238 => 251 ,239 => 253 ,240 => 255 );\r
-\r
-$_sjistoeuc_byte2 = array(\r
-0 => array(\r
-64 => 161 ,65 => 162 ,66 => 163 ,67 => 164 ,68 => 165 ,69 => 166 ,\r
-70 => 167 ,71 => 168 ,72 => 169 ,73 => 170 ,74 => 171 ,75 => 172 ,\r
-76 => 173 ,77 => 174 ,78 => 175 ,79 => 176 ,80 => 177 ,81 => 178 ,\r
-82 => 179 ,83 => 180 ,84 => 181 ,85 => 182 ,86 => 183 ,87 => 184 ,\r
-88 => 185 ,89 => 186 ,90 => 187 ,91 => 188 ,92 => 189 ,93 => 190 ,\r
-94 => 191 ,95 => 192 ,96 => 193 ,97 => 194 ,98 => 195 ,99 => 196 ,\r
-100 => 197 ,101 => 198 ,102 => 199 ,103 => 200 ,104 => 201 ,105 => 202 ,\r
-106 => 203 ,107 => 204 ,108 => 205 ,109 => 206 ,110 => 207 ,111 => 208 ,\r
-112 => 209 ,113 => 210 ,114 => 211 ,115 => 212 ,116 => 213 ,117 => 214 ,\r
-118 => 215 ,119 => 216 ,120 => 217 ,121 => 218 ,122 => 219 ,123 => 220 ,\r
-124 => 221 ,125 => 222 ,126 => 223 ,128 => 224 ,129 => 225 ,130 => 226 ,\r
-131 => 227 ,132 => 228 ,133 => 229 ,134 => 230 ,135 => 231 ,136 => 232 ,\r
-137 => 233 ,138 => 234 ,139 => 235 ,140 => 236 ,141 => 237 ,142 => 238 ,\r
-143 => 239 ,144 => 240 ,145 => 241 ,146 => 242 ,147 => 243 ,148 => 244 ,\r
-149 => 245 ,150 => 246 ,151 => 247 ,152 => 248 ,153 => 249 ,154 => 250 ,\r
-155 => 251 ,156 => 252 ,157 => 253 ,158 => 254 ),\r
-1 => array(\r
-159 => 161 ,160 => 162 ,\r
-161 => 163 ,162 => 164 ,163 => 165 ,164 => 166 ,165 => 167 ,166 => 168 ,\r
-167 => 169 ,168 => 170 ,169 => 171 ,170 => 172 ,171 => 173 ,172 => 174 ,\r
-173 => 175 ,174 => 176 ,175 => 177 ,176 => 178 ,177 => 179 ,178 => 180 ,\r
-179 => 181 ,180 => 182 ,181 => 183 ,182 => 184 ,183 => 185 ,184 => 186 ,\r
-185 => 187 ,186 => 188 ,187 => 189 ,188 => 190 ,189 => 191 ,190 => 192 ,\r
-191 => 193 ,192 => 194 ,193 => 195 ,194 => 196 ,195 => 197 ,196 => 198 ,\r
-197 => 199 ,198 => 200 ,199 => 201 ,200 => 202 ,201 => 203 ,202 => 204 ,\r
-203 => 205 ,204 => 206 ,205 => 207 ,206 => 208 ,207 => 209 ,208 => 210 ,\r
-209 => 211 ,210 => 212 ,211 => 213 ,212 => 214 ,213 => 215 ,214 => 216 ,\r
-215 => 217 ,216 => 218 ,217 => 219 ,218 => 220 ,219 => 221 ,220 => 222 ,\r
-221 => 223 ,222 => 224 ,223 => 225 ,224 => 226 ,225 => 227 ,226 => 228 ,\r
-227 => 229 ,228 => 230 ,229 => 231 ,230 => 232 ,231 => 233 ,232 => 234 ,\r
-233 => 235 ,234 => 236 ,235 => 237 ,236 => 238 ,237 => 239 ,238 => 240 ,\r
-239 => 241 ,240 => 242 ,241 => 243 ,242 => 244 ,243 => 245 ,244 => 246 ,\r
-245 => 247 ,246 => 248 ,247 => 249 ,248 => 250 ,249 => 251 ,250 => 252 ,\r
-251 => 253 ,252 => 254 ));\r
-\r
-$_sjistoeuc_byte1_shift = array (\r
-64 => 0 ,65 => 0 ,66 => 0 ,67 => 0 ,68 => 0 ,69 => 0 ,\r
-70 => 0 ,71 => 0 ,72 => 0 ,73 => 0 ,74 => 0 ,75 => 0 ,\r
-76 => 0 ,77 => 0 ,78 => 0 ,79 => 0 ,80 => 0 ,81 => 0 ,\r
-82 => 0 ,83 => 0 ,84 => 0 ,85 => 0 ,86 => 0 ,87 => 0 ,\r
-88 => 0 ,89 => 0 ,90 => 0 ,91 => 0 ,92 => 0 ,93 => 0 ,\r
-94 => 0 ,95 => 0 ,96 => 0 ,97 => 0 ,98 => 0 ,99 => 0 ,\r
-100 => 0 ,101 => 0 ,102 => 0 ,103 => 0 ,104 => 0 ,105 => 0 ,\r
-106 => 0 ,107 => 0 ,108 => 0 ,109 => 0 ,110 => 0 ,111 => 0 ,\r
-112 => 0 ,113 => 0 ,114 => 0 ,115 => 0 ,116 => 0 ,117 => 0 ,\r
-118 => 0 ,119 => 0 ,120 => 0 ,121 => 0 ,122 => 0 ,123 => 0 ,\r
-124 => 0 ,125 => 0 ,126 => 0 ,128 => 0 ,129 => 0 ,130 => 0 ,\r
-131 => 0 ,132 => 0 ,133 => 0 ,134 => 0 ,135 => 0 ,136 => 0 ,\r
-137 => 0 ,138 => 0 ,139 => 0 ,140 => 0 ,141 => 0 ,142 => 0 ,\r
-143 => 0 ,144 => 0 ,145 => 0 ,146 => 0 ,147 => 0 ,148 => 0 ,\r
-149 => 0 ,150 => 0 ,151 => 0 ,152 => 0 ,153 => 0 ,154 => 0 ,\r
-155 => 0 ,156 => 0 ,157 => 0 ,158 => 0 ,159 => 1 ,160 => 1 ,\r
-161 => 1 ,162 => 1 ,163 => 1 ,164 => 1 ,165 => 1 ,166 => 1 ,\r
-167 => 1 ,168 => 1 ,169 => 1 ,170 => 1 ,171 => 1 ,172 => 1 ,\r
-173 => 1 ,174 => 1 ,175 => 1 ,176 => 1 ,177 => 1 ,178 => 1 ,\r
-179 => 1 ,180 => 1 ,181 => 1 ,182 => 1 ,183 => 1 ,184 => 1 ,\r
-185 => 1 ,186 => 1 ,187 => 1 ,188 => 1 ,189 => 1 ,190 => 1 ,\r
-191 => 1 ,192 => 1 ,193 => 1 ,194 => 1 ,195 => 1 ,196 => 1 ,\r
-197 => 1 ,198 => 1 ,199 => 1 ,200 => 1 ,201 => 1 ,202 => 1 ,\r
-203 => 1 ,204 => 1 ,205 => 1 ,206 => 1 ,207 => 1 ,208 => 1 ,\r
-209 => 1 ,210 => 1 ,211 => 1 ,212 => 1 ,213 => 1 ,214 => 1 ,\r
-215 => 1 ,216 => 1 ,217 => 1 ,218 => 1 ,219 => 1 ,220 => 1 ,\r
-221 => 1 ,222 => 1 ,223 => 1 ,224 => 1 ,225 => 1 ,226 => 1 ,\r
-227 => 1 ,228 => 1 ,229 => 1 ,230 => 1 ,231 => 1 ,232 => 1 ,\r
-233 => 1 ,234 => 1 ,235 => 1 ,236 => 1 ,237 => 1 ,238 => 1 ,\r
-239 => 1 ,240 => 1 ,241 => 1 ,242 => 1 ,243 => 1 ,244 => 1 ,\r
-245 => 1 ,246 => 1 ,247 => 1 ,248 => 1 ,249 => 1 ,250 => 1 ,\r
-251 => 1 ,252 => 1 );\r
-\r
-$_euctosjis_byte1 = array(\r
-161 => 129, 162 => 129, 163 => 130, 164 => 130, 165 => 131, \r
-166 => 131, 167 => 132, 168 => 132, 169 => 133, 170 => 133, \r
-171 => 134, 172 => 134, 173 => 135, 174 => 135, 175 => 136, \r
-176 => 136, 177 => 137, 178 => 137, 179 => 138, 180 => 138, \r
-181 => 139, 182 => 139, 183 => 140, 184 => 140, 185 => 141, \r
-186 => 141, 187 => 142, 188 => 142, 189 => 143, 190 => 143, \r
-191 => 144, 192 => 144, 193 => 145, 194 => 145, 195 => 146, \r
-196 => 146, 197 => 147, 198 => 147, 199 => 148, 200 => 148, \r
-201 => 149, 202 => 149, 203 => 150, 204 => 150, 205 => 151, \r
-206 => 151, 207 => 152, 208 => 152, 209 => 153, 210 => 153, \r
-211 => 154, 212 => 154, 213 => 155, 214 => 155, 215 => 156, \r
-216 => 156, 217 => 157, 218 => 157, 219 => 158, 220 => 158, \r
-221 => 159, 222 => 159, 223 => 224, 224 => 224, 225 => 225, \r
-226 => 225, 227 => 226, 228 => 226, 229 => 227, 230 => 227, \r
-231 => 228, 232 => 228, 233 => 229, 234 => 229, 235 => 230, \r
-236 => 230, 237 => 231, 238 => 231, 239 => 232, 240 => 232, \r
-241 => 233, 242 => 233, 243 => 234, 244 => 234, 245 => 235, \r
-246 => 235, 247 => 236, 248 => 236, 249 => 237, 250 => 237, \r
-251 => 238, 252 => 238, 253 => 239, 254 => 239, 255 => 240);\r
-\r
-$_euctosjis_byte2 = array(\r
-0 => array(\r
-161 => 64, 162 => 65, 163 => 66, 164 => 67, 165 => 68, \r
-166 => 69, 167 => 70, 168 => 71, 169 => 72, 170 => 73, \r
-171 => 74, 172 => 75, 173 => 76, 174 => 77, 175 => 78, \r
-176 => 79, 177 => 80, 178 => 81, 179 => 82, 180 => 83, \r
-181 => 84, 182 => 85, 183 => 86, 184 => 87, 185 => 88, \r
-186 => 89, 187 => 90, 188 => 91, 189 => 92, 190 => 93, \r
-191 => 94, 192 => 95, 193 => 96, 194 => 97, 195 => 98, \r
-196 => 99, 197 => 100, 198 => 101, 199 => 102, 200 => 103, \r
-201 => 104, 202 => 105, 203 => 106, 204 => 107, 205 => 108, \r
-206 => 109, 207 => 110, 208 => 111, 209 => 112, 210 => 113, \r
-211 => 114, 212 => 115, 213 => 116, 214 => 117, 215 => 118, \r
-216 => 119, 217 => 120, 218 => 121, 219 => 122, 220 => 123, \r
-221 => 124, 222 => 125, 223 => 126, 224 => 128, 225 => 129, \r
-226 => 130, 227 => 131, 228 => 132, 229 => 133, 230 => 134, \r
-231 => 135, 232 => 136, 233 => 137, 234 => 138, 235 => 139, \r
-236 => 140, 237 => 141, 238 => 142, 239 => 143, 240 => 144, \r
-241 => 145, 242 => 146, 243 => 147, 244 => 148, 245 => 149, \r
-246 => 150, 247 => 151, 248 => 152, 249 => 153, 250 => 154, \r
-251 => 155, 252 => 156, 253 => 157, 254 => 158),\r
-1 => array(\r
-161 => 159, 162 => 160, 163 => 161, 164 => 162, 165 => 163, \r
-166 => 164, 167 => 165, 168 => 166, 169 => 167, 170 => 168, \r
-171 => 169, 172 => 170, 173 => 171, 174 => 172, 175 => 173, \r
-176 => 174, 177 => 175, 178 => 176, 179 => 177, 180 => 178, \r
-181 => 179, 182 => 180, 183 => 181, 184 => 182, 185 => 183, \r
-186 => 184, 187 => 185, 188 => 186, 189 => 187, 190 => 188, \r
-191 => 189, 192 => 190, 193 => 191, 194 => 192, 195 => 193, \r
-196 => 194, 197 => 195, 198 => 196, 199 => 197, 200 => 198, \r
-201 => 199, 202 => 200, 203 => 201, 204 => 202, 205 => 203, \r
-206 => 204, 207 => 205, 208 => 206, 209 => 207, 210 => 208, \r
-211 => 209, 212 => 210, 213 => 211, 214 => 212, 215 => 213, \r
-216 => 214, 217 => 215, 218 => 216, 219 => 217, 220 => 218, \r
-221 => 219, 222 => 220, 223 => 221, 224 => 222, 225 => 223, \r
-226 => 224, 227 => 225, 228 => 226, 229 => 227, 230 => 228, \r
-231 => 229, 232 => 230, 233 => 231, 234 => 232, 235 => 233, \r
-236 => 234, 237 => 235, 238 => 236, 239 => 237, 240 => 238, \r
-241 => 239, 242 => 240, 243 => 241, 244 => 242, 245 => 243, \r
-246 => 244, 247 => 245, 248 => 246, 249 => 247, 250 => 248, \r
-251 => 249, 252 => 250, 253 => 251, 254 => 252));\r
-\r
-$alphanumeric_convert = array (\r
-0x20 => "\xa1\xa1",0x21 => "\xa1\xaa",0x23 => "\xa1\xf4",0x24 => \r
-"\xa1\xf0",0x25 => "\xa1\xf3",\r
-0x26 => "\xa1\xf5",0x28 => "\xa1\xca",0x29 => "\xa1\xcb",0x2a => "\xa1\xf6",\r
-0x2b => "\xa1\xdc",0x2c => "\xa1\xa4",0x2d => "\xa1\xdd",0x2e => "\xa1\xa5",\r
-0x2f => "\xa1\xbf",0x30 => "\xa3\xb0",0x31 => "\xa3\xb1",0x32 => "\xa3\xb2",\r
-0x33 => "\xa3\xb3",0x34 => "\xa3\xb4",0x35 => "\xa3\xb5",0x36 => "\xa3\xb6",\r
-0x37 => "\xa3\xb7",0x38 => "\xa3\xb8",0x39 => "\xa3\xb9",0x3a => "\xa1\xa7",\r
-0x3b => "\xa1\xa8",0x3c => "\xa1\xe3",0x3d => "\xa1\xe1",0x3e => "\xa1\xe4",\r
-0x3f => "\xa1\xa9",0x40 => "\xa1\xf7",0x41 => "\xa3\xc1",0x42 => "\xa3\xc2",\r
-0x43 => "\xa3\xc3",0x44 => "\xa3\xc4",0x45 => "\xa3\xc5",0x46 => "\xa3\xc6",\r
-0x47 => "\xa3\xc7",0x48 => "\xa3\xc8",0x49 => "\xa3\xc9",0x4a => "\xa3\xca",\r
-0x4b => "\xa3\xcb",0x4c => "\xa3\xcc",0x4d => "\xa3\xcd",0x4e => "\xa3\xce",\r
-0x4f => "\xa3\xcf",0x50 => "\xa3\xd0",0x51 => "\xa3\xd1",0x52 => "\xa3\xd2",\r
-0x53 => "\xa3\xd3",0x54 => "\xa3\xd4",0x55 => "\xa3\xd5",0x56 => "\xa3\xd6",\r
-0x57 => "\xa3\xd7",0x58 => "\xa3\xd8",0x59 => "\xa3\xd9",0x5a => "\xa3\xda",\r
-0x5b => "\xa1\xce",0x5d => "\xa1\xcf",0x5e => "\xa1\xb0",0x5f => "\xa1\xb2",\r
-0x61 => "\xa3\xe1",0x62 => "\xa3\xe2",0x63 => "\xa3\xe3",0x64 => "\xa3\xe4",\r
-0x65 => "\xa3\xe5",0x66 => "\xa3\xe6",0x67 => "\xa3\xe7",0x68 => "\xa3\xe8",\r
-0x69 => "\xa3\xe9",0x6a => "\xa3\xea",0x6b => "\xa3\xeb",0x6c => "\xa3\xec",\r
-0x6d => "\xa3\xed",0x6e => "\xa3\xee",0x6f => "\xa3\xef",0x70 => "\xa3\xf0",\r
-0x71 => "\xa3\xf1",0x72 => "\xa3\xf2",0x73 => "\xa3\xf3",0x74 => "\xa3\xf4",\r
-0x75 => "\xa3\xf5",0x76 => "\xa3\xf6",0x77 => "\xa3\xf7",0x78 => "\xa3\xf8",\r
-0x79 => "\xa3\xf9",0x7a => "\xa3\xfa",0x7b => "\xa1\xd0",0x7c => "\xa1\xc3",\r
-0x7d => "\xa1\xd1");\r
-\r
-$kana_zenhan_convert = array (\r
-0xa1 => "\xa7",0xa2 => "\xb1",0xa3 => "\xa8",0xa4 => "\xb2",\r
-0xa5 => "\xa9",0xa6 => "\xb3",0xa7 => "\xaa",0xa8 => "\xb4",\r
-0xa9 => "\xab",0xaa => "\xb5",0xab => "\xb6",0xac => "\xb6\x8e\xde",\r
-0xad => "\xb7",0xae => "\xb7\x8e\xde",0xaf => "\xb8",\r
-0xb0 => "\xb8\x8e\xde",0xb1 => "\xb9",0xb2 => "\xb9\x8e\xde",\r
-0xb3 => "\xba",0xb4 => "\xba\x8e\xde",0xb5 => "\xbb",\r
-0xb6 => "\xbb\x8e\xde",0xb7 => "\xbc",0xb8 => "\xbc\x8e\xde",\r
-0xb9 => "\xbd",0xba => "\xbd\x8e\xde",0xbb => "\xbe",\r
-0xbc => "\xbe\x8e\xde",0xbd => "\xbf",0xbe => "\xbf\x8e\xde",\r
-0xbf => "\xc0",0xc0 => "\xc0\x8e\xde",0xc1 => "\xc1",\r
-0xc2 => "\xc1\x8e\xde",0xc3 => "\xaf",0xc4 => "\xc2",\r
-0xc5 => "\xc2\x8e\xde",0xc6 => "\xc3",0xc7 => "\xc3\x8e\xde",\r
-0xc8 => "\xc4",0xc9 => "\xc4\x8e\xde",0xca => "\xc5",\r
-0xcb => "\xc6",0xcc => "\xc7",0xcd => "\xc8",0xce => "\xc9",\r
-0xcf => "\xca",0xd0 => "\xca\x8e\xde",0xd1 => "\xca\x8e\xdf",\r
-0xd2 => "\xcb",0xd3 => "\xcb\x8e\xde",0xd4 => "\xcb\x8e\xdf",\r
-0xd5 => "\xcc",0xd6 => "\xcc\x8e\xde",0xd7 => "\xcc\x8e\xdf",\r
-0xd8 => "\xcd",0xd9 => "\xcd\x8e\xde",0xda => "\xcd\x8e\xdf",0xdb => "\xce",\r
-0xdc => "\xce\x8e\xde",0xdd => "\xce\x8e\xdf",0xde => "\xcf",0xdf => "\xd0",\r
-0xe0 => "\xd1",0xe1 => "\xd2",0xe2 => "\xd3",0xe3 => "\xac",0xe4 => "\xd4",\r
-0xe5 => "\xad",0xe6 => "\xd5",0xe7 => "\xae",0xe8 => "\xd6",0xe9 => "\xd7",\r
-0xea => "\xd8",0xeb => "\xd9",0xec => "\xda",0xed => "\xdb",0xef => "\xdc",\r
-0xee => "\xdc",0xf0 => "\xb2",0xf1 => "\xb4",0xf2 => "\xa6",0xf3 => "\xdd",\r
-0xf4 => "\xb3\x8e\xde");\r
-\r
-$special_zenhan_convert = array(\r
-0xa2 => "\xa4",0xa3 => "\xa1",0xa6 => "\xa5",0xab => "\xde",\r
-0xac => "\xdf",0xbc => "\xb0",0xd6 => "\xa2",0xd7 => "\xa3");\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+<?php
+$_sjistoeuc_byte1 = array(
+129 => 161 ,130 => 163 ,131 => 165 ,132 => 167 ,133 => 169 ,134 => 171 ,
+135 => 173 ,136 => 175 ,137 => 177 ,138 => 179 ,139 => 181 ,140 => 183 ,
+141 => 185 ,142 => 187 ,143 => 189 ,144 => 191 ,145 => 193 ,146 => 195 ,
+147 => 197 ,148 => 199 ,149 => 201 ,150 => 203 ,151 => 205 ,152 => 207 ,
+153 => 209 ,154 => 211 ,155 => 213 ,156 => 215 ,157 => 217 ,158 => 219 ,
+159 => 221 ,224 => 223 ,225 => 225 ,226 => 227 ,227 => 229 ,228 => 231 ,
+229 => 233 ,230 => 235 ,231 => 237 ,232 => 239 ,233 => 241 ,234 => 243 ,
+235 => 245 ,236 => 247 ,237 => 249 ,238 => 251 ,239 => 253 ,240 => 255 );
+
+$_sjistoeuc_byte2 = array(
+0 => array(
+64 => 161 ,65 => 162 ,66 => 163 ,67 => 164 ,68 => 165 ,69 => 166 ,
+70 => 167 ,71 => 168 ,72 => 169 ,73 => 170 ,74 => 171 ,75 => 172 ,
+76 => 173 ,77 => 174 ,78 => 175 ,79 => 176 ,80 => 177 ,81 => 178 ,
+82 => 179 ,83 => 180 ,84 => 181 ,85 => 182 ,86 => 183 ,87 => 184 ,
+88 => 185 ,89 => 186 ,90 => 187 ,91 => 188 ,92 => 189 ,93 => 190 ,
+94 => 191 ,95 => 192 ,96 => 193 ,97 => 194 ,98 => 195 ,99 => 196 ,
+100 => 197 ,101 => 198 ,102 => 199 ,103 => 200 ,104 => 201 ,105 => 202 ,
+106 => 203 ,107 => 204 ,108 => 205 ,109 => 206 ,110 => 207 ,111 => 208 ,
+112 => 209 ,113 => 210 ,114 => 211 ,115 => 212 ,116 => 213 ,117 => 214 ,
+118 => 215 ,119 => 216 ,120 => 217 ,121 => 218 ,122 => 219 ,123 => 220 ,
+124 => 221 ,125 => 222 ,126 => 223 ,128 => 224 ,129 => 225 ,130 => 226 ,
+131 => 227 ,132 => 228 ,133 => 229 ,134 => 230 ,135 => 231 ,136 => 232 ,
+137 => 233 ,138 => 234 ,139 => 235 ,140 => 236 ,141 => 237 ,142 => 238 ,
+143 => 239 ,144 => 240 ,145 => 241 ,146 => 242 ,147 => 243 ,148 => 244 ,
+149 => 245 ,150 => 246 ,151 => 247 ,152 => 248 ,153 => 249 ,154 => 250 ,
+155 => 251 ,156 => 252 ,157 => 253 ,158 => 254 ),
+1 => array(
+159 => 161 ,160 => 162 ,
+161 => 163 ,162 => 164 ,163 => 165 ,164 => 166 ,165 => 167 ,166 => 168 ,
+167 => 169 ,168 => 170 ,169 => 171 ,170 => 172 ,171 => 173 ,172 => 174 ,
+173 => 175 ,174 => 176 ,175 => 177 ,176 => 178 ,177 => 179 ,178 => 180 ,
+179 => 181 ,180 => 182 ,181 => 183 ,182 => 184 ,183 => 185 ,184 => 186 ,
+185 => 187 ,186 => 188 ,187 => 189 ,188 => 190 ,189 => 191 ,190 => 192 ,
+191 => 193 ,192 => 194 ,193 => 195 ,194 => 196 ,195 => 197 ,196 => 198 ,
+197 => 199 ,198 => 200 ,199 => 201 ,200 => 202 ,201 => 203 ,202 => 204 ,
+203 => 205 ,204 => 206 ,205 => 207 ,206 => 208 ,207 => 209 ,208 => 210 ,
+209 => 211 ,210 => 212 ,211 => 213 ,212 => 214 ,213 => 215 ,214 => 216 ,
+215 => 217 ,216 => 218 ,217 => 219 ,218 => 220 ,219 => 221 ,220 => 222 ,
+221 => 223 ,222 => 224 ,223 => 225 ,224 => 226 ,225 => 227 ,226 => 228 ,
+227 => 229 ,228 => 230 ,229 => 231 ,230 => 232 ,231 => 233 ,232 => 234 ,
+233 => 235 ,234 => 236 ,235 => 237 ,236 => 238 ,237 => 239 ,238 => 240 ,
+239 => 241 ,240 => 242 ,241 => 243 ,242 => 244 ,243 => 245 ,244 => 246 ,
+245 => 247 ,246 => 248 ,247 => 249 ,248 => 250 ,249 => 251 ,250 => 252 ,
+251 => 253 ,252 => 254 ));
+
+$_sjistoeuc_byte1_shift = array (
+64 => 0 ,65 => 0 ,66 => 0 ,67 => 0 ,68 => 0 ,69 => 0 ,
+70 => 0 ,71 => 0 ,72 => 0 ,73 => 0 ,74 => 0 ,75 => 0 ,
+76 => 0 ,77 => 0 ,78 => 0 ,79 => 0 ,80 => 0 ,81 => 0 ,
+82 => 0 ,83 => 0 ,84 => 0 ,85 => 0 ,86 => 0 ,87 => 0 ,
+88 => 0 ,89 => 0 ,90 => 0 ,91 => 0 ,92 => 0 ,93 => 0 ,
+94 => 0 ,95 => 0 ,96 => 0 ,97 => 0 ,98 => 0 ,99 => 0 ,
+100 => 0 ,101 => 0 ,102 => 0 ,103 => 0 ,104 => 0 ,105 => 0 ,
+106 => 0 ,107 => 0 ,108 => 0 ,109 => 0 ,110 => 0 ,111 => 0 ,
+112 => 0 ,113 => 0 ,114 => 0 ,115 => 0 ,116 => 0 ,117 => 0 ,
+118 => 0 ,119 => 0 ,120 => 0 ,121 => 0 ,122 => 0 ,123 => 0 ,
+124 => 0 ,125 => 0 ,126 => 0 ,128 => 0 ,129 => 0 ,130 => 0 ,
+131 => 0 ,132 => 0 ,133 => 0 ,134 => 0 ,135 => 0 ,136 => 0 ,
+137 => 0 ,138 => 0 ,139 => 0 ,140 => 0 ,141 => 0 ,142 => 0 ,
+143 => 0 ,144 => 0 ,145 => 0 ,146 => 0 ,147 => 0 ,148 => 0 ,
+149 => 0 ,150 => 0 ,151 => 0 ,152 => 0 ,153 => 0 ,154 => 0 ,
+155 => 0 ,156 => 0 ,157 => 0 ,158 => 0 ,159 => 1 ,160 => 1 ,
+161 => 1 ,162 => 1 ,163 => 1 ,164 => 1 ,165 => 1 ,166 => 1 ,
+167 => 1 ,168 => 1 ,169 => 1 ,170 => 1 ,171 => 1 ,172 => 1 ,
+173 => 1 ,174 => 1 ,175 => 1 ,176 => 1 ,177 => 1 ,178 => 1 ,
+179 => 1 ,180 => 1 ,181 => 1 ,182 => 1 ,183 => 1 ,184 => 1 ,
+185 => 1 ,186 => 1 ,187 => 1 ,188 => 1 ,189 => 1 ,190 => 1 ,
+191 => 1 ,192 => 1 ,193 => 1 ,194 => 1 ,195 => 1 ,196 => 1 ,
+197 => 1 ,198 => 1 ,199 => 1 ,200 => 1 ,201 => 1 ,202 => 1 ,
+203 => 1 ,204 => 1 ,205 => 1 ,206 => 1 ,207 => 1 ,208 => 1 ,
+209 => 1 ,210 => 1 ,211 => 1 ,212 => 1 ,213 => 1 ,214 => 1 ,
+215 => 1 ,216 => 1 ,217 => 1 ,218 => 1 ,219 => 1 ,220 => 1 ,
+221 => 1 ,222 => 1 ,223 => 1 ,224 => 1 ,225 => 1 ,226 => 1 ,
+227 => 1 ,228 => 1 ,229 => 1 ,230 => 1 ,231 => 1 ,232 => 1 ,
+233 => 1 ,234 => 1 ,235 => 1 ,236 => 1 ,237 => 1 ,238 => 1 ,
+239 => 1 ,240 => 1 ,241 => 1 ,242 => 1 ,243 => 1 ,244 => 1 ,
+245 => 1 ,246 => 1 ,247 => 1 ,248 => 1 ,249 => 1 ,250 => 1 ,
+251 => 1 ,252 => 1 );
+
+$_euctosjis_byte1 = array(
+161 => 129, 162 => 129, 163 => 130, 164 => 130, 165 => 131, 
+166 => 131, 167 => 132, 168 => 132, 169 => 133, 170 => 133, 
+171 => 134, 172 => 134, 173 => 135, 174 => 135, 175 => 136, 
+176 => 136, 177 => 137, 178 => 137, 179 => 138, 180 => 138, 
+181 => 139, 182 => 139, 183 => 140, 184 => 140, 185 => 141, 
+186 => 141, 187 => 142, 188 => 142, 189 => 143, 190 => 143, 
+191 => 144, 192 => 144, 193 => 145, 194 => 145, 195 => 146, 
+196 => 146, 197 => 147, 198 => 147, 199 => 148, 200 => 148, 
+201 => 149, 202 => 149, 203 => 150, 204 => 150, 205 => 151, 
+206 => 151, 207 => 152, 208 => 152, 209 => 153, 210 => 153, 
+211 => 154, 212 => 154, 213 => 155, 214 => 155, 215 => 156, 
+216 => 156, 217 => 157, 218 => 157, 219 => 158, 220 => 158, 
+221 => 159, 222 => 159, 223 => 224, 224 => 224, 225 => 225, 
+226 => 225, 227 => 226, 228 => 226, 229 => 227, 230 => 227, 
+231 => 228, 232 => 228, 233 => 229, 234 => 229, 235 => 230, 
+236 => 230, 237 => 231, 238 => 231, 239 => 232, 240 => 232, 
+241 => 233, 242 => 233, 243 => 234, 244 => 234, 245 => 235, 
+246 => 235, 247 => 236, 248 => 236, 249 => 237, 250 => 237, 
+251 => 238, 252 => 238, 253 => 239, 254 => 239, 255 => 240);
+
+$_euctosjis_byte2 = array(
+0 => array(
+161 => 64, 162 => 65, 163 => 66, 164 => 67, 165 => 68, 
+166 => 69, 167 => 70, 168 => 71, 169 => 72, 170 => 73, 
+171 => 74, 172 => 75, 173 => 76, 174 => 77, 175 => 78, 
+176 => 79, 177 => 80, 178 => 81, 179 => 82, 180 => 83, 
+181 => 84, 182 => 85, 183 => 86, 184 => 87, 185 => 88, 
+186 => 89, 187 => 90, 188 => 91, 189 => 92, 190 => 93, 
+191 => 94, 192 => 95, 193 => 96, 194 => 97, 195 => 98, 
+196 => 99, 197 => 100, 198 => 101, 199 => 102, 200 => 103, 
+201 => 104, 202 => 105, 203 => 106, 204 => 107, 205 => 108, 
+206 => 109, 207 => 110, 208 => 111, 209 => 112, 210 => 113, 
+211 => 114, 212 => 115, 213 => 116, 214 => 117, 215 => 118, 
+216 => 119, 217 => 120, 218 => 121, 219 => 122, 220 => 123, 
+221 => 124, 222 => 125, 223 => 126, 224 => 128, 225 => 129, 
+226 => 130, 227 => 131, 228 => 132, 229 => 133, 230 => 134, 
+231 => 135, 232 => 136, 233 => 137, 234 => 138, 235 => 139, 
+236 => 140, 237 => 141, 238 => 142, 239 => 143, 240 => 144, 
+241 => 145, 242 => 146, 243 => 147, 244 => 148, 245 => 149, 
+246 => 150, 247 => 151, 248 => 152, 249 => 153, 250 => 154, 
+251 => 155, 252 => 156, 253 => 157, 254 => 158),
+1 => array(
+161 => 159, 162 => 160, 163 => 161, 164 => 162, 165 => 163, 
+166 => 164, 167 => 165, 168 => 166, 169 => 167, 170 => 168, 
+171 => 169, 172 => 170, 173 => 171, 174 => 172, 175 => 173, 
+176 => 174, 177 => 175, 178 => 176, 179 => 177, 180 => 178, 
+181 => 179, 182 => 180, 183 => 181, 184 => 182, 185 => 183, 
+186 => 184, 187 => 185, 188 => 186, 189 => 187, 190 => 188, 
+191 => 189, 192 => 190, 193 => 191, 194 => 192, 195 => 193, 
+196 => 194, 197 => 195, 198 => 196, 199 => 197, 200 => 198, 
+201 => 199, 202 => 200, 203 => 201, 204 => 202, 205 => 203, 
+206 => 204, 207 => 205, 208 => 206, 209 => 207, 210 => 208, 
+211 => 209, 212 => 210, 213 => 211, 214 => 212, 215 => 213, 
+216 => 214, 217 => 215, 218 => 216, 219 => 217, 220 => 218, 
+221 => 219, 222 => 220, 223 => 221, 224 => 222, 225 => 223, 
+226 => 224, 227 => 225, 228 => 226, 229 => 227, 230 => 228, 
+231 => 229, 232 => 230, 233 => 231, 234 => 232, 235 => 233, 
+236 => 234, 237 => 235, 238 => 236, 239 => 237, 240 => 238, 
+241 => 239, 242 => 240, 243 => 241, 244 => 242, 245 => 243, 
+246 => 244, 247 => 245, 248 => 246, 249 => 247, 250 => 248, 
+251 => 249, 252 => 250, 253 => 251, 254 => 252));
+
+$alphanumeric_convert = array (
+0x20 => "\xa1\xa1",0x21 => "\xa1\xaa",0x23 => "\xa1\xf4",0x24 => 
+"\xa1\xf0",0x25 => "\xa1\xf3",
+0x26 => "\xa1\xf5",0x28 => "\xa1\xca",0x29 => "\xa1\xcb",0x2a => "\xa1\xf6",
+0x2b => "\xa1\xdc",0x2c => "\xa1\xa4",0x2d => "\xa1\xdd",0x2e => "\xa1\xa5",
+0x2f => "\xa1\xbf",0x30 => "\xa3\xb0",0x31 => "\xa3\xb1",0x32 => "\xa3\xb2",
+0x33 => "\xa3\xb3",0x34 => "\xa3\xb4",0x35 => "\xa3\xb5",0x36 => "\xa3\xb6",
+0x37 => "\xa3\xb7",0x38 => "\xa3\xb8",0x39 => "\xa3\xb9",0x3a => "\xa1\xa7",
+0x3b => "\xa1\xa8",0x3c => "\xa1\xe3",0x3d => "\xa1\xe1",0x3e => "\xa1\xe4",
+0x3f => "\xa1\xa9",0x40 => "\xa1\xf7",0x41 => "\xa3\xc1",0x42 => "\xa3\xc2",
+0x43 => "\xa3\xc3",0x44 => "\xa3\xc4",0x45 => "\xa3\xc5",0x46 => "\xa3\xc6",
+0x47 => "\xa3\xc7",0x48 => "\xa3\xc8",0x49 => "\xa3\xc9",0x4a => "\xa3\xca",
+0x4b => "\xa3\xcb",0x4c => "\xa3\xcc",0x4d => "\xa3\xcd",0x4e => "\xa3\xce",
+0x4f => "\xa3\xcf",0x50 => "\xa3\xd0",0x51 => "\xa3\xd1",0x52 => "\xa3\xd2",
+0x53 => "\xa3\xd3",0x54 => "\xa3\xd4",0x55 => "\xa3\xd5",0x56 => "\xa3\xd6",
+0x57 => "\xa3\xd7",0x58 => "\xa3\xd8",0x59 => "\xa3\xd9",0x5a => "\xa3\xda",
+0x5b => "\xa1\xce",0x5d => "\xa1\xcf",0x5e => "\xa1\xb0",0x5f => "\xa1\xb2",
+0x61 => "\xa3\xe1",0x62 => "\xa3\xe2",0x63 => "\xa3\xe3",0x64 => "\xa3\xe4",
+0x65 => "\xa3\xe5",0x66 => "\xa3\xe6",0x67 => "\xa3\xe7",0x68 => "\xa3\xe8",
+0x69 => "\xa3\xe9",0x6a => "\xa3\xea",0x6b => "\xa3\xeb",0x6c => "\xa3\xec",
+0x6d => "\xa3\xed",0x6e => "\xa3\xee",0x6f => "\xa3\xef",0x70 => "\xa3\xf0",
+0x71 => "\xa3\xf1",0x72 => "\xa3\xf2",0x73 => "\xa3\xf3",0x74 => "\xa3\xf4",
+0x75 => "\xa3\xf5",0x76 => "\xa3\xf6",0x77 => "\xa3\xf7",0x78 => "\xa3\xf8",
+0x79 => "\xa3\xf9",0x7a => "\xa3\xfa",0x7b => "\xa1\xd0",0x7c => "\xa1\xc3",
+0x7d => "\xa1\xd1");
+
+$kana_zenhan_convert = array (
+0xa1 => "\xa7",0xa2 => "\xb1",0xa3 => "\xa8",0xa4 => "\xb2",
+0xa5 => "\xa9",0xa6 => "\xb3",0xa7 => "\xaa",0xa8 => "\xb4",
+0xa9 => "\xab",0xaa => "\xb5",0xab => "\xb6",0xac => "\xb6\x8e\xde",
+0xad => "\xb7",0xae => "\xb7\x8e\xde",0xaf => "\xb8",
+0xb0 => "\xb8\x8e\xde",0xb1 => "\xb9",0xb2 => "\xb9\x8e\xde",
+0xb3 => "\xba",0xb4 => "\xba\x8e\xde",0xb5 => "\xbb",
+0xb6 => "\xbb\x8e\xde",0xb7 => "\xbc",0xb8 => "\xbc\x8e\xde",
+0xb9 => "\xbd",0xba => "\xbd\x8e\xde",0xbb => "\xbe",
+0xbc => "\xbe\x8e\xde",0xbd => "\xbf",0xbe => "\xbf\x8e\xde",
+0xbf => "\xc0",0xc0 => "\xc0\x8e\xde",0xc1 => "\xc1",
+0xc2 => "\xc1\x8e\xde",0xc3 => "\xaf",0xc4 => "\xc2",
+0xc5 => "\xc2\x8e\xde",0xc6 => "\xc3",0xc7 => "\xc3\x8e\xde",
+0xc8 => "\xc4",0xc9 => "\xc4\x8e\xde",0xca => "\xc5",
+0xcb => "\xc6",0xcc => "\xc7",0xcd => "\xc8",0xce => "\xc9",
+0xcf => "\xca",0xd0 => "\xca\x8e\xde",0xd1 => "\xca\x8e\xdf",
+0xd2 => "\xcb",0xd3 => "\xcb\x8e\xde",0xd4 => "\xcb\x8e\xdf",
+0xd5 => "\xcc",0xd6 => "\xcc\x8e\xde",0xd7 => "\xcc\x8e\xdf",
+0xd8 => "\xcd",0xd9 => "\xcd\x8e\xde",0xda => "\xcd\x8e\xdf",0xdb => "\xce",
+0xdc => "\xce\x8e\xde",0xdd => "\xce\x8e\xdf",0xde => "\xcf",0xdf => "\xd0",
+0xe0 => "\xd1",0xe1 => "\xd2",0xe2 => "\xd3",0xe3 => "\xac",0xe4 => "\xd4",
+0xe5 => "\xad",0xe6 => "\xd5",0xe7 => "\xae",0xe8 => "\xd6",0xe9 => "\xd7",
+0xea => "\xd8",0xeb => "\xd9",0xec => "\xda",0xed => "\xdb",0xef => "\xdc",
+0xee => "\xdc",0xf0 => "\xb2",0xf1 => "\xb4",0xf2 => "\xa6",0xf3 => "\xdd",
+0xf4 => "\xb3\x8e\xde");
+
+$special_zenhan_convert = array(
+0xa2 => "\xa4",0xa3 => "\xa1",0xa6 => "\xa5",0xab => "\xde",
+0xac => "\xdf",0xbc => "\xb0",0xd6 => "\xa2",0xd7 => "\xa3");
+
+
+
+
+
+
+
 ?>
\ No newline at end of file
index 2da730f..5043787 100755 (executable)
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\r
-<HTML>\r
-<HEAD>\r
-       <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=shift_jis">\r
-       <TITLE>\95Ï\8dX\97\9a\97ð</TITLE>\r
-       <META NAME="GENERATOR" CONTENT="OpenOffice.org 1.1.3  (Win32)">\r
-       <META NAME="CREATED" CONTENT="20050130;2310982">\r
-       <META NAME="CHANGED" CONTENT="20050130;2372139">\r
-</HEAD>\r
-<BODY LANG="ja-JP" DIR="LTR">\r
-<H2>\95Ï\8dX\97\9a\97ð</H2>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.37</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2005/1/30</SPAN></FONT>\81j</H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">JIS</SPAN></FONT>\82Ì\83}\83b\83`\83\93\83O\82Ì\83o\83O\82ð\8dÄ\82Ñ\8fC\90³\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.36</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/11/13</SPAN></FONT>\81j</H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">JIS</SPAN></FONT>\82Ì\83}\83b\83`\83\93\83O\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.35</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/9/26</SPAN></FONT>\81j</H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_send_mail</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.341</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/9/16</SPAN></FONT>\81j</H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_kana</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.34</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/9/15</SPAN></FONT>\81j</H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_kana</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.33</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/8/27</SPAN></FONT>\81j</H3>\r
-<UL>\r
-       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_encode_numericentity,\r
-       mb_decode_numericentity</SPAN></FONT>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81\r
-       </P>\r
-       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_encoding</SPAN></FONT>\82Å<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">UTF-16</SPAN></FONT>\82©\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-       <LI><P STYLE="margin-bottom: 0cm">\83V\83t\83g<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">JIS</SPAN></FONT>\82Ì\8f\88\97\9d\82ð<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">SJIS-WIN</SPAN></FONT>\8cÝ\8a·\82É\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR>mbstring</SPAN></FONT>\96{\89Æ\82Æ\82Í\88Ù\82È\82è\81C<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">SJIS</SPAN></FONT>\82Æ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">SJIS-WIN</SPAN></FONT>\82Ì\93®\8dì\82Í\93¯\82\82Å\82·\81B\r
-               </P>\r
-       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strcut</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-       <LI><P>\95Ï\8dX\97\9a\97ð\82ð<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">HTML</SPAN></FONT>\82É\95Ï\82¦\82Ü\82µ\82½\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.32(2004/8/19)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_http_input,\r
-       mb_http_output, mb_output_handler\r
-       </SPAN></FONT>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\82½\82¾\82µ\81C<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_http_input</SPAN></FONT>\82É\8aÖ\82µ\82Ä\82Í\95\8e\9a\83R\81[\83h\95Ï\8a·\82ð\8ds\82í\82È\82¢\82½\82ß\81C\8fí\82É<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">FALSE</SPAN></FONT>\82ð\95Ô\82µ\82Ü\82·\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.31(2004/8/16)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_decode_mimeheader</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\r
-               </P>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT>\82Ì\8f\89\8aú\90Ý\92è\83`\83F\83b\83N\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.3(2004/8/8)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P STYLE="margin-bottom: 0cm">\83o\83O\82Â\82Ô\82µ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-       <LI><P STYLE="margin-bottom: 0cm">\83o\83O\82Â\82Ô\82µ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR>mb_strcut</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\r
-               </P>\r
-       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_encode_mimeheader,\r
-       mb_decode_mimeheader</SPAN></FONT>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81\r
-       </P>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT>\82Å\94z\97ñ\82©\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\82±\82ê\82É\94º\82¢<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT>\82ð<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2</SPAN></FONT>\83p\83^\81[\83\93\82É\82µ\81C\8f\89\8aú\90Ý\92è\82Å\95Ï\8dX\82Å\82«\82é\82æ\82¤\82É\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\8f\89\8aú\90Ý\92è\83t\83@\83C\83\8b\82Ì<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">convert-variables-arrayonly</SPAN></FONT>\82ª<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">no</SPAN></FONT>\82Ì\8fê\8d\87\81i\83f\83t\83H\83\8b\83g\81j\81C\82±\82ê\82Ü\82Å\82Æ\93¯\82\82æ\82¤\82É\94z\97ñ\82Å\82È\82­\82Ä\82à\95Ï\8a·\82µ\82Ü\82·\81B\82Ü\82½\81C\8dÅ\8f\89\82Ì\97v\91f\82ª\94z\97ñ\82Ì\8fê\8d\87\81C\82»\82ê\82¾\82¯\82ð\95Ï\8a·\82µ\82Ü\82·\81B\82½\82¾\82µ\81C\82±\82¿\82ç\82Ì\8fê\8d\87\81C\8cÄ\82Ñ\8fo\82µ\8e\9e\82É\88ø\90\94\82É<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">&amp;</SPAN></FONT>\82ð\95t\82¯\82Ä\96¾\8e¦\93I\82É\8eQ\8fÆ\93n\82µ\82É\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR>convert-variables-arrayonly</SPAN></FONT>\82ª<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">no</SPAN></FONT>\82Å\82È\82¢\8fê\8d\87\81C\95Ï\8a·\82·\82é\88ø\90\94\82Í\94z\97ñ\82¾\82¯\82É\82È\82è\82Ü\82·\81B\82»\82Ì\91ã\82í\82è\81C<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">&amp;</SPAN></FONT>\82Í\95s\97v\82Å\82·\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.25(2004/7/7)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P>\83o\83O\82Â\82Ô\82µ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.24(2004/6/8)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strpos,\r
-       mb_substr_count, mb_preferred_mime_name</SPAN></FONT>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.23(2004/5/19)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_encoding</SPAN></FONT>\82Å<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">UTF-16</SPAN></FONT>\82Ö\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR><BR>usage:<BR>$str\r
-       = mb_convert_encoding($str, 'UTF-16', 'EUC-JP,\r
-       UTF-8');<BR><BR></SPAN></FONT>\95Ô\82·\82Ì\82Í<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">BOM</SPAN></FONT>\82È\82µ\82Ì\83r\83b\83O\81E\83G\83\93\83f\83B\83A\83\93\82É\82È\82è\82Ü\82·\81B\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.22(2004/5/11)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P STYLE="margin-bottom: 0cm">\83o\83O\82Â\82Ô\82µ \r
-       </P>\r
-       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT>\82ð\8eb\92è\83T\83|\81[\83g\r
-               </P>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strwidth</SPAN></FONT>\82ð\83T\83|\81[\83g\r
-               </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.21(2004/4/28)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P STYLE="margin-bottom: 0cm">\8f\89\8aú\90Ý\92è\82ð<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb-emulator.ini</SPAN></FONT>\82©\82ç\93Ç\82Þ\82æ\82¤\82É\95Ï\8dX\r
-               </P>\r
-       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">EUC</SPAN></FONT>\82Æ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">UTF-8</SPAN></FONT>\8aÔ\82ð\92¼\90Ú\95Ï\8a·\82·\82é\82æ\82¤\82É\95Ï\8dX\r
-               </P>\r
-       <LI><P>\83o\83O\82Â\82Ô\82µ \r
-       </P>\r
-</UL>\r
-<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.2(2004/4/27)</SPAN></FONT></H3>\r
-<UL>\r
-       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">jcode</SPAN></FONT>\82ð\8eg\82í\82È\82¢\8c`\82Å\93Æ\97§\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">12</SPAN></FONT>\8aÖ\90\94\83T\83|\81[\83g<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR>mb_language,\r
-       mb_internal_encoding, mb_convert_encoding, mb_convert_kana,\r
-       mb_send_mail, mb_strimwidth, mb_detect_encoding, mb_detect_order,\r
-       mb_strlen, mb_substr, mb_strcut, mb_strrpos </SPAN></FONT>\r
-       </P>\r
-</UL>\r
-<H2>\8aÖ\90\94\83T\83|\81[\83g\8fó\8bµ\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/8/19</SPAN></FONT>\81j</H2>\r
-<TABLE CELLPADDING=2 CELLSPACING=2>\r
-       <TR>\r
-               <TD WIDTH=150>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><B>mbstring</B></SPAN></FONT><B>\8aÖ\90\94\96¼</B></P>\r
-               </TD>\r
-               <TD WIDTH=300>\r
-                       <P><B>\8d¡\8cã\82Ì\83T\83|\81[\83g\97\\92è</B></P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_case</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\8c\8b\8d\\91å\95Ï\82»\82¤\81B\82 \82Ü\82è\8eg\82¢\82»\82¤\82É\82È\82¢\8bC\82ª\82·\82é\81B\82à\82µ\83j\81[\83Y\82ª\82 \82ê\82Î</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_encoding</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_kana</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_decode_mimeheader</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_decode_numericentity</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_detect_encoding</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_detect_order</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_encode_mimeheader</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_encode_numericentity</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_match</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_replace</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_getpos</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_getregs</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_init</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_pos</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_regs</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_setpos</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_eregi_replace</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_eregi</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_get_info</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_http_input</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý\81i\8fí\82É<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">FALSE</SPAN></FONT>\82ð\95Ô\82·\81j</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_http_output</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_internal_encoding</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_language</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý\81i\82½\82¾\82µ\8ew\92è\82µ\82Ä\82à\89½\82à\95Ï\82í\82ç\82È\82¢\81j</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_output_handler</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_parse_str</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_preferred_mime_name</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_regex_encoding</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_regex_set_options</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_send_mail</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_split</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strcut</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strimwidth</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strlen</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strpos</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strrpos</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strtolower</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\91å\95Ï\82»\82¤</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strtoupper</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\91å\95Ï\82»\82¤</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strwidth</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_substitute_character</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\93ï\82µ\82»\82¤</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_substr_count</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-       <TR>\r
-               <TD>\r
-                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_substr</SPAN></FONT></P>\r
-               </TD>\r
-               <TD>\r
-                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>\r
-               </TD>\r
-       </TR>\r
-</TABLE>\r
-<P><BR><BR>\r
-</P>\r
-</BODY>\r
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+       <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=shift_jis">
+       <TITLE>\95Ï\8dX\97\9a\97ð</TITLE>
+       <META NAME="GENERATOR" CONTENT="OpenOffice.org 1.1.3  (Win32)">
+       <META NAME="CREATED" CONTENT="20050130;2310982">
+       <META NAME="CHANGED" CONTENT="20050130;2372139">
+</HEAD>
+<BODY LANG="ja-JP" DIR="LTR">
+<H2>\95Ï\8dX\97\9a\97ð</H2>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.37</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2005/1/30</SPAN></FONT>\81j</H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">JIS</SPAN></FONT>\82Ì\83}\83b\83`\83\93\83O\82Ì\83o\83O\82ð\8dÄ\82Ñ\8fC\90³\82µ\82Ü\82µ\82½\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.36</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/11/13</SPAN></FONT>\81j</H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">JIS</SPAN></FONT>\82Ì\83}\83b\83`\83\93\83O\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.35</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/9/26</SPAN></FONT>\81j</H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_send_mail</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.341</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/9/16</SPAN></FONT>\81j</H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_kana</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.34</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/9/15</SPAN></FONT>\81j</H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_kana</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.33</SPAN></FONT>\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/8/27</SPAN></FONT>\81j</H3>
+<UL>
+       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_encode_numericentity,
+       mb_decode_numericentity</SPAN></FONT>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81
+       </P>
+       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_encoding</SPAN></FONT>\82Å<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">UTF-16</SPAN></FONT>\82©\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+               </P>
+       <LI><P STYLE="margin-bottom: 0cm">\83V\83t\83g<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">JIS</SPAN></FONT>\82Ì\8f\88\97\9d\82ð<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">SJIS-WIN</SPAN></FONT>\8cÝ\8a·\82É\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR>mbstring</SPAN></FONT>\96{\89Æ\82Æ\82Í\88Ù\82È\82è\81C<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">SJIS</SPAN></FONT>\82Æ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">SJIS-WIN</SPAN></FONT>\82Ì\93®\8dì\82Í\93¯\82\82Å\82·\81B
+               </P>
+       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strcut</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B
+               </P>
+       <LI><P>\95Ï\8dX\97\9a\97ð\82ð<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">HTML</SPAN></FONT>\82É\95Ï\82¦\82Ü\82µ\82½\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.32(2004/8/19)</SPAN></FONT></H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_http_input,
+       mb_http_output, mb_output_handler
+       </SPAN></FONT>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\82½\82¾\82µ\81C<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_http_input</SPAN></FONT>\82É\8aÖ\82µ\82Ä\82Í\95\8e\9a\83R\81[\83h\95Ï\8a·\82ð\8ds\82í\82È\82¢\82½\82ß\81C\8fí\82É<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">FALSE</SPAN></FONT>\82ð\95Ô\82µ\82Ü\82·\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.31(2004/8/16)</SPAN></FONT></H3>
+<UL>
+       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_decode_mimeheader</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½
+               </P>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT>\82Ì\8f\89\8aú\90Ý\92è\83`\83F\83b\83N\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.3(2004/8/8)</SPAN></FONT></H3>
+<UL>
+       <LI><P STYLE="margin-bottom: 0cm">\83o\83O\82Â\82Ô\82µ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B
+               </P>
+       <LI><P STYLE="margin-bottom: 0cm">\83o\83O\82Â\82Ô\82µ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR>mb_strcut</SPAN></FONT>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½
+               </P>
+       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_encode_mimeheader,
+       mb_decode_mimeheader</SPAN></FONT>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81
+       </P>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT>\82Å\94z\97ñ\82©\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\82±\82ê\82É\94º\82¢<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT>\82ð<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2</SPAN></FONT>\83p\83^\81[\83\93\82É\82µ\81C\8f\89\8aú\90Ý\92è\82Å\95Ï\8dX\82Å\82«\82é\82æ\82¤\82É\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\8f\89\8aú\90Ý\92è\83t\83@\83C\83\8b\82Ì<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">convert-variables-arrayonly</SPAN></FONT>\82ª<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">no</SPAN></FONT>\82Ì\8fê\8d\87\81i\83f\83t\83H\83\8b\83g\81j\81C\82±\82ê\82Ü\82Å\82Æ\93¯\82\82æ\82¤\82É\94z\97ñ\82Å\82È\82­\82Ä\82à\95Ï\8a·\82µ\82Ü\82·\81B\82Ü\82½\81C\8dÅ\8f\89\82Ì\97v\91f\82ª\94z\97ñ\82Ì\8fê\8d\87\81C\82»\82ê\82¾\82¯\82ð\95Ï\8a·\82µ\82Ü\82·\81B\82½\82¾\82µ\81C\82±\82¿\82ç\82Ì\8fê\8d\87\81C\8cÄ\82Ñ\8fo\82µ\8e\9e\82É\88ø\90\94\82É<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">&amp;</SPAN></FONT>\82ð\95t\82¯\82Ä\96¾\8e¦\93I\82É\8eQ\8fÆ\93n\82µ\82É\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR>convert-variables-arrayonly</SPAN></FONT>\82ª<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">no</SPAN></FONT>\82Å\82È\82¢\8fê\8d\87\81C\95Ï\8a·\82·\82é\88ø\90\94\82Í\94z\97ñ\82¾\82¯\82É\82È\82è\82Ü\82·\81B\82»\82Ì\91ã\82í\82è\81C<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">&amp;</SPAN></FONT>\82Í\95s\97v\82Å\82·\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">Ver.0.25(2004/7/7)</SPAN></FONT></H3>
+<UL>
+       <LI><P>\83o\83O\82Â\82Ô\82µ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR></SPAN></FONT>\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.24(2004/6/8)</SPAN></FONT></H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strpos,
+       mb_substr_count, mb_preferred_mime_name</SPAN></FONT>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.23(2004/5/19)</SPAN></FONT></H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_encoding</SPAN></FONT>\82Å<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">UTF-16</SPAN></FONT>\82Ö\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR><BR>usage:<BR>$str
+       = mb_convert_encoding($str, 'UTF-16', 'EUC-JP,
+       UTF-8');<BR><BR></SPAN></FONT>\95Ô\82·\82Ì\82Í<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">BOM</SPAN></FONT>\82È\82µ\82Ì\83r\83b\83O\81E\83G\83\93\83f\83B\83A\83\93\82É\82È\82è\82Ü\82·\81B
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.22(2004/5/11)</SPAN></FONT></H3>
+<UL>
+       <LI><P STYLE="margin-bottom: 0cm">\83o\83O\82Â\82Ô\82µ 
+       </P>
+       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT>\82ð\8eb\92è\83T\83|\81[\83g
+               </P>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strwidth</SPAN></FONT>\82ð\83T\83|\81[\83g
+               </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.21(2004/4/28)</SPAN></FONT></H3>
+<UL>
+       <LI><P STYLE="margin-bottom: 0cm">\8f\89\8aú\90Ý\92è\82ð<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb-emulator.ini</SPAN></FONT>\82©\82ç\93Ç\82Þ\82æ\82¤\82É\95Ï\8dX
+               </P>
+       <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">EUC</SPAN></FONT>\82Æ<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">UTF-8</SPAN></FONT>\8aÔ\82ð\92¼\90Ú\95Ï\8a·\82·\82é\82æ\82¤\82É\95Ï\8dX
+               </P>
+       <LI><P>\83o\83O\82Â\82Ô\82µ 
+       </P>
+</UL>
+<H3><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">ver.0.2(2004/4/27)</SPAN></FONT></H3>
+<UL>
+       <LI><P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">jcode</SPAN></FONT>\82ð\8eg\82í\82È\82¢\8c`\82Å\93Æ\97§\82µ\82Ü\82µ\82½\81B<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">12</SPAN></FONT>\8aÖ\90\94\83T\83|\81[\83g<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><BR>mb_language,
+       mb_internal_encoding, mb_convert_encoding, mb_convert_kana,
+       mb_send_mail, mb_strimwidth, mb_detect_encoding, mb_detect_order,
+       mb_strlen, mb_substr, mb_strcut, mb_strrpos </SPAN></FONT>
+       </P>
+</UL>
+<H2>\8aÖ\90\94\83T\83|\81[\83g\8fó\8bµ\81i<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">2004/8/19</SPAN></FONT>\81j</H2>
+<TABLE CELLPADDING=2 CELLSPACING=2>
+       <TR>
+               <TD WIDTH=150>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US"><B>mbstring</B></SPAN></FONT><B>\8aÖ\90\94\96¼</B></P>
+               </TD>
+               <TD WIDTH=300>
+                       <P><B>\8d¡\8cã\82Ì\83T\83|\81[\83g\97\\92è</B></P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_case</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\8c\8b\8d\\91å\95Ï\82»\82¤\81B\82 \82Ü\82è\8eg\82¢\82»\82¤\82É\82È\82¢\8bC\82ª\82·\82é\81B\82à\82µ\83j\81[\83Y\82ª\82 \82ê\82Î</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_encoding</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_kana</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_convert_variables</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_decode_mimeheader</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_decode_numericentity</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_detect_encoding</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_detect_order</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_encode_mimeheader</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_encode_numericentity</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_match</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_replace</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_getpos</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_getregs</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_init</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_pos</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_regs</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search_setpos</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg_search</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_ereg</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_eregi_replace</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_eregi</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_get_info</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_http_input</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý\81i\8fí\82É<FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">FALSE</SPAN></FONT>\82ð\95Ô\82·\81j</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_http_output</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_internal_encoding</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_language</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý\81i\82½\82¾\82µ\8ew\92è\82µ\82Ä\82à\89½\82à\95Ï\82í\82ç\82È\82¢\81j</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_output_handler</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_parse_str</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_preferred_mime_name</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_regex_encoding</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_regex_set_options</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_send_mail</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_split</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\95s\89Â\94\</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strcut</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strimwidth</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strlen</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strpos</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strrpos</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strtolower</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\91å\95Ï\82»\82¤</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strtoupper</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\91å\95Ï\82»\82¤</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_strwidth</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_substitute_character</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\93ï\82µ\82»\82¤</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_substr_count</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+       <TR>
+               <TD>
+                       <P><FONT FACE="Times New Roman, serif"><SPAN LANG="en-US">mb_substr</SPAN></FONT></P>
+               </TD>
+               <TD>
+                       <P>\83T\83|\81[\83g\8dÏ\82Ý</P>
+               </TD>
+       </TR>
+</TABLE>
+<P><BR><BR>
+</P>
+</BODY>
 </HTML>
\ No newline at end of file
index ca8b27f..47f0dd8 100755 (executable)
@@ -1,40 +1,40 @@
-Ver.0.3(2004/8/8)\r
-\81E\83o\83O\82Â\82Ô\82µ\r
-\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B\r
-\81E\83o\83O\82Â\82Ô\82µ\r
-mb_strcut\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\r
-\81Emb_encode_mimeheader, mb_decode_mimeheader\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B\r
-\81Emb_convert_variables\82Å\94z\97ñ\82©\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B\r
-\82±\82ê\82É\94º\82¢mb_convert_variables\82ð2\83p\83^\81[\83\93\82É\82µ\81C\8f\89\8aú\90Ý\92è\82Å\95Ï\8dX\82Å\82«\82é\82æ\82¤\82É\82µ\82Ü\82µ\82½\81B\r
-\8f\89\8aú\90Ý\92è\83t\83@\83C\83\8b\82Ìconvert-variables-arrayonly\82ªno\82Ì\8fê\8d\87\81i\83f\83t\83H\83\8b\83g\81j\81C\82±\82ê\82Ü\82Å\82Æ\93¯\82\82æ\82¤\82É\94z\97ñ\82Å\82È\82­\82Ä\82à\95Ï\8a·\82µ\82Ü\82·\81B\82Ü\82½\81C\8dÅ\8f\89\82Ì\97v\91f\82ª\94z\97ñ\82Ì\8fê\8d\87\81C\82»\82ê\82¾\82¯\82ð\95Ï\8a·\82µ\82Ü\82·\81B\82½\82¾\82µ\81C\82±\82¿\82ç\82Ì\8fê\8d\87\81C\8cÄ\82Ñ\8fo\82µ\8e\9e\82É\88ø\90\94\82É&\82ð\95t\82¯\82Ä\96¾\8e¦\93I\82É\8eQ\8fÆ\93n\82µ\82É\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B\r
-convert-variables-arrayonly\82ªno\82Å\82È\82¢\8fê\8d\87\81C\95Ï\8a·\82·\82é\88ø\90\94\82Í\94z\97ñ\82¾\82¯\82É\82È\82è\82Ü\82·\81B\82»\82Ì\91ã\82í\82è\81C&\82Í\95s\97v\82Å\82·\81B\r
-\r
-Ver.0.25(2004/7/7)\r
-\81E\83o\83O\82Â\82Ô\82µ\r
-\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B\r
-\r
-ver.0.24(2004/6/8)\r
-\81Emb_strpos, mb_substr_count, mb_preferred_mime_name\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B\r
-\r
-ver.0.23(2004/5/19)\r
-\81Emb_convert_encoding\82ÅUTF-16\82Ö\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B\r
-\r
-usage:\r
-$str = mb_convert_encoding($str, 'UTF-16', 'EUC-JP, UTF-8');\r
-\r
-\95Ô\82·\82Ì\82ÍBOM\82È\82µ\82Ì\83r\83b\83O\81E\83G\83\93\83f\83B\83A\83\93\82É\82È\82è\82Ü\82·\81B\r
-\r
-ver.0.22(2004/5/11)\r
-\81E\83o\83O\82Â\82Ô\82µ\r
-\81Emb_convert_variables\82ð\8eb\92è\83T\83|\81[\83g\r
-\81Emb_strwidth\82ð\83T\83|\81[\83\r
-\r
-ver.0.21(2004/4/28)\r
-\81E\8f\89\8aú\90Ý\92è\82ðmb-emulator.ini\82©\82ç\93Ç\82Þ\82æ\82¤\82É\95Ï\8dX\r
-\81EEUC\82ÆUTF-8\8aÔ\82ð\92¼\90Ú\95Ï\8a·\82·\82é\82æ\82¤\82É\95Ï\8dX\r
-\81E\83o\83O\82Â\82Ô\82µ\r
-\r
-ver.0.2(2004/4/27)\r
-jcode\82ð\8eg\82í\82È\82¢\8c`\82Å\93Æ\97§\82µ\82Ü\82µ\82½\81B12\8aÖ\90\94\83T\83|\81[\83g\r
-mb_language, mb_internal_encoding, mb_convert_encoding, mb_convert_kana, mb_send_mail, mb_strimwidth, mb_detect_encoding, mb_detect_order, mb_strlen, mb_substr, mb_strcut, mb_strrpos\r
-\r
+Ver.0.3(2004/8/8)
+\81E\83o\83O\82Â\82Ô\82µ
+\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B
+\81E\83o\83O\82Â\82Ô\82µ
+mb_strcut\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½
+\81Emb_encode_mimeheader, mb_decode_mimeheader\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+\81Emb_convert_variables\82Å\94z\97ñ\82©\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+\82±\82ê\82É\94º\82¢mb_convert_variables\82ð2\83p\83^\81[\83\93\82É\82µ\81C\8f\89\8aú\90Ý\92è\82Å\95Ï\8dX\82Å\82«\82é\82æ\82¤\82É\82µ\82Ü\82µ\82½\81B
+\8f\89\8aú\90Ý\92è\83t\83@\83C\83\8b\82Ìconvert-variables-arrayonly\82ªno\82Ì\8fê\8d\87\81i\83f\83t\83H\83\8b\83g\81j\81C\82±\82ê\82Ü\82Å\82Æ\93¯\82\82æ\82¤\82É\94z\97ñ\82Å\82È\82­\82Ä\82à\95Ï\8a·\82µ\82Ü\82·\81B\82Ü\82½\81C\8dÅ\8f\89\82Ì\97v\91f\82ª\94z\97ñ\82Ì\8fê\8d\87\81C\82»\82ê\82¾\82¯\82ð\95Ï\8a·\82µ\82Ü\82·\81B\82½\82¾\82µ\81C\82±\82¿\82ç\82Ì\8fê\8d\87\81C\8cÄ\82Ñ\8fo\82µ\8e\9e\82É\88ø\90\94\82É&\82ð\95t\82¯\82Ä\96¾\8e¦\93I\82É\8eQ\8fÆ\93n\82µ\82É\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B
+convert-variables-arrayonly\82ªno\82Å\82È\82¢\8fê\8d\87\81C\95Ï\8a·\82·\82é\88ø\90\94\82Í\94z\97ñ\82¾\82¯\82É\82È\82è\82Ü\82·\81B\82»\82Ì\91ã\82í\82è\81C&\82Í\95s\97v\82Å\82·\81B
+
+Ver.0.25(2004/7/7)
+\81E\83o\83O\82Â\82Ô\82µ
+\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B
+
+ver.0.24(2004/6/8)
+\81Emb_strpos, mb_substr_count, mb_preferred_mime_name\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+
+ver.0.23(2004/5/19)
+\81Emb_convert_encoding\82ÅUTF-16\82Ö\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+
+usage:
+$str = mb_convert_encoding($str, 'UTF-16', 'EUC-JP, UTF-8');
+
+\95Ô\82·\82Ì\82ÍBOM\82È\82µ\82Ì\83r\83b\83O\81E\83G\83\93\83f\83B\83A\83\93\82É\82È\82è\82Ü\82·\81B
+
+ver.0.22(2004/5/11)
+\81E\83o\83O\82Â\82Ô\82µ
+\81Emb_convert_variables\82ð\8eb\92è\83T\83|\81[\83g
+\81Emb_strwidth\82ð\83T\83|\81[\83
+
+ver.0.21(2004/4/28)
+\81E\8f\89\8aú\90Ý\92è\82ðmb-emulator.ini\82©\82ç\93Ç\82Þ\82æ\82¤\82É\95Ï\8dX
+\81EEUC\82ÆUTF-8\8aÔ\82ð\92¼\90Ú\95Ï\8a·\82·\82é\82æ\82¤\82É\95Ï\8dX
+\81E\83o\83O\82Â\82Ô\82µ
+
+ver.0.2(2004/4/27)
+jcode\82ð\8eg\82í\82È\82¢\8c`\82Å\93Æ\97§\82µ\82Ü\82µ\82½\81B12\8aÖ\90\94\83T\83|\81[\83g
+mb_language, mb_internal_encoding, mb_convert_encoding, mb_convert_kana, mb_send_mail, mb_strimwidth, mb_detect_encoding, mb_detect_order, mb_strlen, mb_substr, mb_strcut, mb_strrpos
+
index 3af4f04..a8a3eee 100755 (executable)
@@ -1,5 +1,5 @@
-language=ja\r
-internal_encoding=\r
-detect_order=ASCII, JIS, UTF-8, EUC-JP, SJIS\r
-convert_variables_arrayonly=no\r
-http_output=pass\r
+language=ja
+internal_encoding=
+detect_order=ASCII, JIS, UTF-8, EUC-JP, SJIS
+convert_variables_arrayonly=no
+http_output=pass
index 99e0955..24b7767 100755 (executable)
-<?php\r
-/* mb-emulator.php by Andy\r
- * email : webmaster@matsubarafamily.com\r
- *\r
- * license based on GPL(GNU General Public License)\r
- *\r
- * Ver.0.37 (2005/1/30)\r
- */\r
-\r
-\r
-\r
-include dirname(__FILE__).'/convert.table';\r
-include dirname(__FILE__).'/sjistouni.table';\r
-include dirname(__FILE__).'/unitosjis.table';\r
-\r
-$ini_file = parse_ini_file(dirname(__FILE__).'/mb-emulator.ini');\r
-\r
-$_language = $ini_file['language'];\r
-$_internal_encoding = $ini_file['internal_encoding'];\r
-$_lang_array = array (\r
-       'Japanese', 'ja', 'English', 'en', 'uni'\r
-       );\r
-\r
-$_mb_encoding = array (\r
-       'AUTO' => 0,\r
-       'ASCII' => 0,\r
-       'EUC-JP' => 1,\r
-       'EUC' => 1,\r
-       'SJIS' => 2,\r
-       'SHIFT-JIS' => 2,\r
-       'SJIS-WIN' => 2,\r
-       'JIS' => 3,\r
-       'ISO-2022-JP' => 3,\r
-       'UTF-8' => 4,\r
-       'UTF8' => 4,\r
-       'UTF-16'=>5\r
-       );\r
-\r
-if (!(mb_detect_order($ini_file['detect_order'])))\r
-       $_detect_order = array ("ASCII", "JIS", "UTF-8", "EUC-JP", "SJIS");\r
-\r
-\r
-\r
-$sjis_match = "[\x81-\x9F,\xE0-\xFC]([\x40-\xFC])|[\x01-\x7F]|[\xA0-\xDF]";\r
-$euc_match = "[\xa1-\xfe]([\xa1-\xfe])|[\x01-\x7f]|\x8e([\xa0-\xdf])";\r
-$utf8_match = "[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]";\r
-$jis_match = "(?:^|\x1b\(\x42)([^\x1b]*)|(?:\x1b\\$\x42([^\x1b]*))|(?:\x1b\(I([^\x1b]*))";\r
-\r
-function mb_language($language)\r
-{\r
-  global $_language, $_lang_array;\r
-\r
-  if ($language =='') {\r
-    if ($_language == '') return FALSE;\r
-    else return $_language;\r
-  } else {\r
-       foreach ($_lang_array as $element) {\r
-               if ($element == $language) {\r
-                       $_language = $language;\r
-                       return TRUE;\r
-               }\r
-       }\r
-       return FALSE;\r
-  }\r
-}\r
-\r
-\r
-function mb_internal_encoding($encoding = '')\r
-{\r
-  global $_internal_encoding;\r
-\r
-  if ($encoding =='') {\r
-    if ($_internal_encoding == '') return FALSE;\r
-    else return $_internal_encoding;\r
-  } else {\r
-               $_internal_encoding = $encoding;\r
-               return TRUE;\r
-  }\r
-}\r
-\r
-\r
-\r
-function mb_convert_encoding( $str, $to_encoding, $from_encoding = '')\r
-{\r
-       global $_internal_encoding, $_mb_encoding;\r
-\r
-       $to_encoding = strtoupper($to_encoding);\r
-       $from_encoding = mb_detect_encoding($str, $from_encoding);\r
-       \r
-       switch ($_mb_encoding[$from_encoding]) {\r
-               case 1: //euc-jp\r
-                       switch($_mb_encoding[$to_encoding]) {\r
-                               case 2: //sjis\r
-                                       return _euctosjis($str);\r
-                               case 3: //jis\r
-                                       $str = _euctosjis($str);\r
-                                       return _sjistojis($str);\r
-                               case 4: //utf8\r
-                                       return _euctoutf8($str);\r
-                               case 5: //utf16\r
-                                       $str = _euctoutf8($str);\r
-                                       return _utf8toutf16($str);\r
-                               default:\r
-                                       return $str;\r
-                       }\r
-               case 2: //sjis\r
-                       switch($_mb_encoding[$to_encoding]) {\r
-                               case 1: //euc-jp\r
-                                       return _sjistoeuc($str);\r
-                               case 3: //jis\r
-                                       return _sjistojis($str);\r
-                               case 4: //utf8\r
-                                       return _sjistoutf8($str);\r
-                               case 5: //utf16\r
-                                       $str = _sjistoutf8($str);\r
-                                       return _utf8toutf16($str);\r
-                               default:\r
-                                       return $str;\r
-                       }\r
-               case 3: //jis\r
-                       switch($_mb_encoding[$to_encoding]) {\r
-                               case 1: //euc-jp\r
-                                       $str = _jistosjis($str);\r
-                                       return _sjistoeuc($str);\r
-                               case 2: //sjis\r
-                                       return _jistosjis($str);\r
-                               case 4: //utf8\r
-                                       $str = _jistosjis($str);\r
-                                       return _sjistoutf8($str);\r
-                               case 5: //utf16\r
-                                       $str = _jistosjis($str);\r
-                                       $str = _sjistoutf8($str);\r
-                                       return _utf8toutf16($str);\r
-                               default:\r
-                                       return $str;\r
-                       }\r
-               case 4: //utf8\r
-                       switch($_mb_encoding[$to_encoding]) {\r
-                               case 1: //euc-jp\r
-                                       return _utf8toeuc($str);\r
-                               case 2: //sjis\r
-                                       return _utf8tosjis($str);\r
-                               case 3: //jis\r
-                                       $str = _utf8tosjis($str);\r
-                                       return _sjistojis($str);\r
-                               case 5: //utf16\r
-                                       return _utf8toutf16($str);\r
-                               default:\r
-                                       return $str;\r
-                       }\r
-               case 5: //utf16\r
-                       $str = _utf16toutf8($str);\r
-                       switch($_mb_encoding[$to_encoding]) {\r
-                               case 1: //euc-jp\r
-                                       return _utf8toeuc($str);\r
-                               case 2: //sjis\r
-                                       return _utf8tosjis($str);\r
-                               case 3: //jis\r
-                                       $str = _utf8tosjis($str);\r
-                                       return _sjistojis($str);\r
-                               case 4: //utf8\r
-                                       return $str;\r
-                               default:\r
-                                       return _utf8toutf16($str);\r
-                       }\r
-               default:\r
-                       return $str;\r
-       }\r
-}\r
-\r
-function _get_encoding(&$str, $encoding)\r
-{\r
-       global $_internal_encoding, $_mb_encoding;\r
-\r
-       if ($encoding =='') {\r
-               if ($_internal_encoding == '') {\r
-                       return mb_detect_encoding($str, mb_detect_order());\r
-               } else {\r
-                       return $_internal_encoding;\r
-               }\r
-       }\r
-       return strtoupper($encoding);\r
-}\r
-\r
-\r
-\r
-function _sjistoeuc(&$str)\r
-{\r
-       global $sjis_match, $_sjistoeuc_byte1, $_sjistoeuc_byte2, $_sjistoeuc_byte1_shift;\r
-       \r
-       $max = preg_match_all("/$sjis_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð\r
-       $str_EUC = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·\r
-               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87\r
-                       $shift = $_sjistoeuc_byte1_shift[$num2];\r
-                       $str_EUC .= chr($_sjistoeuc_byte1[$num] + $shift)\r
-                                          .chr($_sjistoeuc_byte2[$shift][$num2]);\r
-               } elseif ($num <= 0x7F) {//\89p\90\94\8e\9a\r
-                       $str_EUC .= chr($num);\r
-               } else { //\94¼\8ap\83J\83i\r
-                       $str_EUC .= chr(0x8E).chr($num);\r
-               }\r
-       }\r
-       return $str_EUC;\r
-}\r
-\r
-\r
-function _euctosjis(&$str)\r
-{\r
-       global $euc_match, $_euctosjis_byte1, $_euctosjis_byte2;\r
-       $max = preg_match_all("/$euc_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð\r
-       $str_SJIS = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·\r
-               if ($num2 = ord($allchars[1][$i])) { // \8a¿\8e\9a\82Ì\8fê\8d\87\r
-                       $str_SJIS .= chr($_euctosjis_byte1[$num]);\r
-                       if ($num & 1)\r
-                               $str_SJIS .= chr($_euctosjis_byte2[0][$num2]);\r
-                       else\r
-                               $str_SJIS .= chr($_euctosjis_byte2[1][$num2]);\r
-               } elseif ($num3 = ord($allchars[2][$i])) {//\94¼\8ap\83J\83i\r
-                       $str_SJIS .= chr($num3);\r
-               } else { //\89p\90\94\8e\9a\r
-                       $str_SJIS .= chr($num);\r
-               }\r
-       }\r
-       return $str_SJIS;\r
-}\r
-\r
-function _sjistojis(&$str)\r
-{\r
-       global $sjis_match, $_sjistoeuc_byte1, $_sjistoeuc_byte2, $_sjistoeuc_byte1_shift;\r
-       \r
-       $max = preg_match_all("/$sjis_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð\r
-       $str_JIS = '';\r
-       $mode = 0; // \89p\90\94\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·\r
-               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87\r
-                       if ($mode != 1) {\r
-                               $mode = 1;\r
-                               $str_JIS .= chr(0x1b).'$B';\r
-                       }\r
-                       $shift = $_sjistoeuc_byte1_shift[$num2];\r
-                       $str_JIS .= chr(($_sjistoeuc_byte1[$num] + $shift) & 0x7F)\r
-                                          .chr($_sjistoeuc_byte2[$shift][$num2] & 0x7F);\r
-               } elseif ($num > 0x80) {//\94¼\8ap\83J\83i\r
-                       if ($mode != 2) {\r
-                               $mode = 2;\r
-                               $str_JIS .= chr(0x1B).'(I';\r
-                       }\r
-                       $str_JIS .= chr($num & 0x7F);\r
-               } else {//\94¼\8ap\89p\90\94\r
-                       if ($mode != 0) {\r
-                               $mode = 0;\r
-                               $str_JIS .= chr(0x1B).'(B';\r
-                       }\r
-                       $str_JIS .= chr($num);\r
-               }\r
-       }\r
-       if ($mode != 0) {\r
-               $str_JIS .= chr(0x1B).'(B';\r
-       }\r
-       return $str_JIS;\r
-}\r
-\r
-function _sub_jtosj($match)\r
-{\r
-       global $_euctosjis_byte1, $_euctosjis_byte2;\r
-       $num = ord($match[0]);\r
-       $num2 = ord($match[1]);\r
-       $s = chr($_euctosjis_byte1[$num | 0x80]);\r
-       if ($num & 1) {\r
-               $s .= chr($_euctosjis_byte2[0][$num2 | 0x80]);\r
-       } else {\r
-               $s .= chr($_euctosjis_byte2[1][$num2 | 0x80]);\r
-       }\r
-       return $s;\r
-}\r
-\r
-function _jistosjis(&$str)\r
-{\r
-       global $_euctosjis_byte1, $_euctosjis_byte2, $jis_match;\r
-       \r
-       $max = preg_match_all("/$jis_match/", $str, $allchunks, PREG_SET_ORDER);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð\r
-       $st = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if (ord($allchunks[$i][1])) { //\89p\90\94\82É\83}\83b\83`\r
-                       $st .= $allchunks[$i][1];\r
-               } elseif (ord($allchunks[$i][2])) { //\8a¿\8e\9a\82É\83}\83b\83`\r
-                       $tmp = substr($allchunks[$i][0], 3, strlen($allchunks[$i][0]));\r
-                       $st .= preg_replace_callback("/.(.)/","_sub_jtosj", $tmp);\r
-               } elseif (ord($allchunks[$i][3])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`\r
-                       $st .= preg_replace("/./e","chr(ord['$1'] | 0x80);",$allchunks[$i][3]);\r
-               }\r
-       }\r
-       return $st;\r
-}\r
-\r
-\r
-function _ucs2utf8($uni)\r
-{\r
-       if ($uni <= 0x7f)\r
-               return chr($uni);\r
-       elseif ($uni <= 0x7ff) {\r
-               $y = ($uni >> 6) & 0x1f;\r
-               $x = $uni & 0x3f;\r
-               return chr(0xc0 | $y).chr(0x80 | $x);\r
-       } else {\r
-               $z = ($uni >> 12) & 0x0f;\r
-               $y = ($uni >> 6) & 0x3f;\r
-               $x = $uni & 0x3f;\r
-               return chr(0xe0 | $z).chr(0x80 | $y).chr(0x80 | $x);\r
-       }\r
-}\r
-\r
-function _sjistoutf8(&$str)\r
-{\r
-\r
-       global $sjis_match, $sjistoucs2;\r
-       $st = '';\r
-       $max = preg_match_all("/$sjis_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·\r
-               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87\r
-                       $ucs2 = $sjistoucs2[($num << 8) | $num2];\r
-                       $st .= _ucs2utf8($ucs2);\r
-               } elseif ($num > 0x80) {//\94¼\8ap\83J\83i\r
-                       $st .= _ucs2utf8(0xfec0 + $num);\r
-               } else {//\94¼\8ap\89p\90\94\r
-                       $st .= chr($num);\r
-               }\r
-       }\r
-       return $st;\r
-}\r
-\r
-function _utf8ucs2($st)\r
-{\r
-       $num = ord($st);\r
-       if (!($num & 0x80)) //1byte\r
-               return $num;\r
-       elseif (($num & 0xe0) == 0xc0) {//2bytes\r
-               $num2 = ord(substr($st, 1,1));\r
-               return (($num & 0x1f) << 6) | ($num2 & 0x3f);\r
-       } else  { //3bytes\r
-               $num2 = ord(substr($st, 1,1));\r
-               $num3 = ord(substr($st, 2,1));\r
-               return (($num & 0x0f) << 12) | (($num2 & 0x3f) << 6) | ($num3 & 0x3f);\r
-       }\r
-}\r
-\r
-function _utf8tosjis(&$str)\r
-{\r
-       global $utf8_match, $ucs2tosjis;\r
-       $st = '';\r
-       $max = preg_match_all("/$utf8_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·\r
-               if ($num < 0x80)\r
-                       $st .= chr($num);\r
-               elseif ((0xff61 <= $num) && ($num <= 0xff9f))\r
-                       $st .= chr($num - 0xfec0);\r
-               else {\r
-                       $sjis = $ucs2tosjis[$num];\r
-                       $st .= chr($sjis >> 8) . chr($sjis & 0xff);\r
-               }\r
-       }\r
-       return $st;\r
-}\r
-\r
-function _euctoutf8(&$str)\r
-{\r
-       global $euc_match, $sjistoucs2, $_euctosjis_byte1, $_euctosjis_byte2;\r
-       $st = '';\r
-       $max = preg_match_all("/$euc_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·\r
-               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87\r
-                       if ($num & 1)\r
-                               $sjis = ($_euctosjis_byte1[$num] << 8) | $_euctosjis_byte2[0][$num2];\r
-                       else\r
-                               $sjis = ($_euctosjis_byte1[$num] << 8) | $_euctosjis_byte2[1][$num2];\r
-                       $st .= _ucs2utf8($sjistoucs2[$sjis]);\r
-               } elseif ($num3 = ord($allchars[2][$i])) {\r
-                       $st .= _ucs2utf8(0xfec0 + $num3);\r
-               } else {//\94¼\8ap\89p\90\94\r
-                       $st .= chr($num);\r
-               }\r
-       }\r
-       return $st;\r
-}\r
-\r
-function _utf8toeuc(&$str)\r
-{\r
-       global $utf8_match, $ucs2tosjis, $_sjistoeuc_byte1, $_sjistoeuc_byte2, $_sjistoeuc_byte1_shift;\r
-       $st = '';\r
-       $max = preg_match_all("/$utf8_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·\r
-               if ($num < 0x80)\r
-                       $st .= chr($num);\r
-               elseif ((0xff61 <= $num) && ($num <= 0xff9f)) //\94¼\8ap\83J\83i\r
-                       $st .= chr(0x8e) . chr($num - 0xfec0);\r
-               else {\r
-                       $sjis = $ucs2tosjis[$num];\r
-                       $upper = $sjis >> 8;\r
-                       $lower = $sjis & 0xff;\r
-                       $shift = $_sjistoeuc_byte1_shift[$lower];\r
-                       $st .= chr($_sjistoeuc_byte1[$upper] + $shift)\r
-                                  .chr($_sjistoeuc_byte2[$shift][$lower]);\r
-               }\r
-       }\r
-       return $st;\r
-}\r
-\r
-function _utf8toutf16(&$str)\r
-{\r
-       global $utf8_match;\r
-       $st = '';\r
-       $max = preg_match_all("/$utf8_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·\r
-               $st .= chr(($num >> 8) & 0xff).chr($num & 0xff);\r
-       }\r
-       return $st;\r
-}\r
-\r
-function _utf16toutf8(&$str)\r
-{\r
-       global $utf8_match;\r
-       $st = '';\r
-       $ar = unpack("n*", $str);\r
-       foreach($ar as $char) {\r
-               $st .= _ucs2utf8($char);\r
-       }\r
-       return $st;\r
-}\r
-\r
-       \r
-function sub_zenhan_EUC(&$str, $match) {\r
-       global $alphanumeric_convert;\r
-\r
-       $match = $match . "|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($num = ord($chars[1][$i])) //\91S\8ap\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87\r
-                       $str .= chr(array_search($chars[1][$i], $alphanumeric_convert));\r
-               //      $str .= chr($num & 0x7F);\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function sub_hanzen_EUC(&$str, $match) {\r
-       global $alphanumeric_convert;\r
-\r
-       $match = $match . "|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($num = ord($chars[1][$i])) //\94¼\8ap\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87\r
-                       $str .= $alphanumeric_convert[$num];\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function alpha_zenhan_EUC(&$str) {\r
-       sub_zenhan_EUC($str, "(\xA3[\xC1-\xFA])");\r
-}\r
-\r
-function alpha_hanzen_EUC(&$str) {\r
-       sub_hanzen_EUC($str, "([\x41-\x5A,\x61-\x7A])");\r
-}\r
-\r
-\r
-function num_zenhan_EUC(&$str) {\r
-       sub_zenhan_EUC($str, "(\xA3[\xB0-\xB9])");\r
-}\r
-\r
-function num_hanzen_EUC(&$str) {\r
-       sub_hanzen_EUC($str, "([\x30-\x39])");\r
-}\r
-\r
-function alphanum_zenhan_EUC(&$str) {\r
-       sub_zenhan_EUC($str, "(\xa1[\xa4,\xa5,\xa7-\xaa,\xb0,\xb2,\xbf,\xc3,\xca,\xcb,\xce-\xd1,\xdc,\xdd,\xe1,\xe3,\xe4,\xf0,\xf3-\xf7]|\xA3[\xC1-\xFA]|\xA3[\xB0-\xB9])");\r
-}\r
-\r
-function alphanum_hanzen_EUC(&$str) {\r
-       sub_hanzen_EUC($str, "([\\\x21,\\\x23-\\\x26,\\\x28-\\\x5B,\\\x5D-\\\x7D])");\r
-}\r
-\r
-\r
-function space_zenhan_EUC(&$str) {\r
-       sub_zenhan_EUC($str, "(\xA1\xA1)");\r
-}\r
-\r
-function space_hanzen_EUC(&$str) {\r
-       sub_hanzen_EUC($str, "(\x20)");\r
-}\r
-\r
-function katakana_zenhan_EUC(&$str) {\r
-global $kana_zenhan_convert, $special_zenhan_convert;\r
-\r
-       $match = "\xa5([\xa1-\xf4])|\xa1([\xa2,\xa3,\xa6,\xab,\xac,\xbc,\xd6,\xd7])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87\r
-                       $str .= chr(0x8e) . $kana_zenhan_convert[$num];\r
-               elseif ($num = ord($chars[2][$i])) //\94¼\8ap\95Ï\8a·\89Â\94\\82È\93Á\8eê\95\8e\9a\82É\83}\83b\83`\82µ\82½\8fê\8d\87\r
-                       $str .= chr(0x8e) . $special_zenhan_convert[$num];\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function hiragana_zenhan_EUC(&$str) {\r
-global $kana_zenhan_convert, $special_zenhan_convert;\r
-\r
-       $match = "\xa4([\xa1-\xf4])|\xa1([\xa2,\xa3,\xa6,\xab,\xac,\xbc,\xd6,\xd7])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($num = ord($chars[1][$i])) //\82©\82È\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87\r
-                       $str .= chr(0x8e) . $kana_zenhan_convert[$num];\r
-               elseif ($num = ord($chars[2][$i])) //\94¼\8ap\95Ï\8a·\89Â\94\\82È\93Á\8eê\95\8e\9a\82É\83}\83b\83`\82µ\82½\8fê\8d\87\r
-                       $str .= chr(0x8e) . $special_zenhan_convert[$num];\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function katakana_hanzen1_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82·\82é\95û\r
-global $kana_zenhan_convert, $special_zenhan_convert;\r
-\r
-       $match = "\x8e((?:[\xb3,\xb6-\xc4,\xca-\xce]\x8e\xde)|(?:[\xca-\xce]\x8e\xdf))|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";\r
-               //\91÷\93_\82â\94¼\91÷\93_\82Í\88ê\8f\8f\82É\83}\83b\83`\83\93\83O\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($chars[1][$i]) //\91÷\89¹\81C\94¼\91÷\89¹\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87\r
-                       $str .= chr(0xa5).chr(array_search($chars[1][$i], $kana_zenhan_convert));\r
-               elseif ($chars[2][$i]) //\82»\82Ì\91¼\82Ì\94¼\8ap\83J\83i\82É\83}\83b\83`\r
-                       if ($num = array_search($chars[2][$i], $kana_zenhan_convert))\r
-                               $str .= chr(0xa5).chr($num);\r
-                       else\r
-                               $str .= chr(0xa1).chr(array_search($chars[2][$i], $special_zenhan_convert));\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function hiragana_hanzen1_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82·\82é\95û\r
-global $kana_zenhan_convert, $special_zenhan_convert;\r
-\r
-       $match = "\x8e((?:[\xb6-\xc4,\xca-\xce]\x8e\xde)|(?:[\xca-\xce]\x8e\xdf))|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";\r
-               //\91÷\93_\82â\94¼\91÷\93_\82Í\88ê\8f\8f\82É\83}\83b\83`\83\93\83O\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($chars[1][$i]) //\91÷\89¹\81C\94¼\91÷\89¹\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87\r
-                       $str .= chr(0xa4).chr(array_search($chars[1][$i], $kana_zenhan_convert));\r
-               elseif ($chars[2][$i]) //\82»\82Ì\91¼\82Ì\94¼\8ap\83J\83i\82É\83}\83b\83`\r
-                       if ($num = array_search($chars[2][$i], $kana_zenhan_convert))\r
-                               $str .= chr(0xa4).chr($num);\r
-                       else\r
-                               $str .= chr(0xa1).chr(array_search($chars[2][$i], $special_zenhan_convert));\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function katakana_hanzen2_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82µ\82È\82¢\95û\r
-global $kana_zenhan_convert, $special_zenhan_convert;\r
-\r
-       $match = "[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($chars[1][$i]) //\94¼\8ap\83J\83i\82É\83}\83b\83`\r
-                       if ($num = array_search($chars[1][$i], $kana_zenhan_convert))\r
-                               $str .= chr(0xa5).chr($num);\r
-                       else\r
-                               $str .= chr(0xa1).chr(array_search($chars[1][$i], $special_zenhan_convert));\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function hiragana_hanzen2_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82µ\82È\82¢\95û\r
-global $kana_zenhan_convert, $special_zenhan_convert;\r
-\r
-       $match = "[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($chars[1][$i]) //\94¼\8ap\83J\83i\82É\83}\83b\83`\r
-                       if ($num = array_search($chars[1][$i], $kana_zenhan_convert))\r
-                               $str .= chr(0xa4).chr($num);\r
-                       else\r
-                               $str .= chr(0xa1).chr(array_search($chars[1][$i], $special_zenhan_convert));\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function katakana_hiragana_EUC(&$str) {\r
-\r
-       $match = "\xa5([\xa1-\xf3])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87\r
-                       $str .= chr(0xa4) . chr($num);\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function hiragana_katakana_EUC(&$str) {\r
-\r
-       $match = "\xa4([\xa1-\xf4])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";\r
-       $max = preg_match_all("/$match/", $str, $chars);\r
-       $str = '';\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87\r
-                       $str .= chr(0xa5) . chr($num);\r
-               else\r
-                       $str .= $chars[0][$i];\r
-       }\r
-}\r
-\r
-function mb_convert_kana( $str, $option='KV', $encoding = '')\r
-{\r
-       $encoding = mb_detect_encoding($str, $encoding);\r
-       $str = mb_convert_encoding($str, 'EUC-JP', $encoding);\r
-\r
-       if (strstr($option, "r")) alpha_zenhan_EUC($str);\r
-       if (strstr($option, "R")) alpha_hanzen_EUC($str);\r
-       if (strstr($option, "n")) num_zenhan_EUC($str);\r
-       if (strstr($option, "N")) num_hanzen_EUC($str);\r
-       if (strstr($option, "a")) alphanum_zenhan_EUC($str);\r
-       if (strstr($option, "A")) alphanum_hanzen_EUC($str);\r
-       if (strstr($option, "s")) space_zenhan_EUC($str);\r
-       if (strstr($option, "S")) space_hanzen_EUC($str);\r
-       if (strstr($option, "k")) katakana_zenhan_EUC($str);\r
-       if (strstr($option, "K")) {\r
-               if (strstr($option, "V"))\r
-                       katakana_hanzen1_EUC($str);\r
-               else\r
-                       katakana_hanzen2_EUC($str);\r
-       }\r
-       if (strstr($option, "H")) {\r
-               if (strstr($option, "V"))\r
-                       hiragana_hanzen1_EUC($str);\r
-               else\r
-                       hiragana_hanzen2_EUC($str);\r
-       }\r
-       if (strstr($option, "h")) hiragana_zenhan_EUC($str);\r
-       if (strstr($option, "c")) katakana_hiragana_EUC($str);\r
-       if (strstr($option, "C")) hiragana_katakana_EUC($str);\r
-\r
-       $str = mb_convert_encoding($str, $encoding, 'EUC-JP');\r
-       return $str;\r
-}\r
-\r
-function mb_send_mail($to, $subject, $message , $additional_headers, $additional_parameter)\r
-{\r
-       if (!_is_JIS($subject)) \r
-               $subject =mb_encode_mimeheader($subject);\r
-       else {\r
-               $tmp = mb_internal_encoding();\r
-               mb_internal_encoding('iso-2022-jp');\r
-               $subject =mb_encode_mimeheader($subject);\r
-               mb_internal_encoding($tmp);\r
-       }\r
-       if (!_is_JIS($message))\r
-               $message = mb_convert_encoding($message, "iso-2022-jp", mb_internal_encoding());\r
-       $additional_headers .= \r
-       "\r\nMime-Version: 1.0\r\nContent-Type: text/plain; charset=ISO-2022-JP\r\nContent-Transfer-Encoding: 7bit";\r
-       mail($to, $subject, $message, $additional_headers, $additional_parameter); \r
-       \r
-}\r
-\r
-\r
-function mb_detect_order($encoding_list = '')\r
-{\r
-       global $_detect_order, $_mb_encoding;\r
-       \r
-       if ($encoding_list) {\r
-               if (is_string($encoding_list)) {\r
-                       $encoding_list = strtoupper($encoding_list);\r
-                       $encoding_list = split(', *', $encoding_list);\r
-               }\r
-               foreach($encoding_list as $encode)\r
-                       if (!array_key_exists($encode, $_mb_encoding)) return FALSE;\r
-               $_detect_order = $encoding_list;\r
-               return TRUE;\r
-       }\r
-       return $_detect_order;\r
-}\r
-\r
-function _is_Ascii(&$str)\r
-{\r
-       return (!ereg("[\x80-\xFF]", $str) && !ereg("\x1B", $str));\r
-}\r
-\r
-function _is_JIS(&$str)\r
-{\r
-       return (!ereg("[\x80-\xFF]", $str) && ereg("\x1B", $str));\r
-}\r
-\r
-function _is_SJIS(&$str)\r
-{\r
-       $sjis_match = \r
-       "[\x01-\x7F]|[\xA0-\xDF]|[\x81-\xFC][\x40-\xFC]";\r
-       return (preg_match("/^($sjis_match)+$/", $str) == 1);\r
-}\r
-\r
-function _is_EUCJP(&$str)\r
-{\r
-       $euc_match = \r
-       "[\x01-\x7F]|\x8E[\xA0-\xDF]|\x8F[xA1-\xFE][\xA1-\xFE]|[\xA1-\xFE][\xA1-\xFE]";\r
-       return (preg_match("/^($euc_match)+$/", $str) == 1);\r
-}\r
-\r
-function _is_UTF8(&$str)\r
-{\r
-       $utf8_match = \r
-       "[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]";\r
-       return (preg_match("/^($utf8_match)+$/", $str) == 1);\r
-}\r
-\r
-function mb_detect_encoding( $str , $encoding_list = '')\r
-{\r
-       global $_mb_encoding;\r
-\r
-       if ($encoding_list == '') \r
-                       $encoding_list = mb_detect_order();\r
-       if (!is_array($encoding_list)) {\r
-               $encoding_list = strtoupper($encoding_list);\r
-               if ($encoding_list == 'AUTO') {\r
-                       $encoding_list = mb_detect_order();\r
-               } else {\r
-                       $encoding_list = split(', *', $encoding_list);\r
-               }\r
-       }\r
-       foreach($encoding_list as $encode) {\r
-               switch ($_mb_encoding[$encode]) {\r
-                       case 0 : //ascii\r
-                               if (_is_ASCII($str)) return 'ASCII';\r
-                               break;\r
-                       case 1 : //euc-jp\r
-                               if (_is_EUCJP($str)) return 'EUC-JP';\r
-                               break;\r
-                       case 2 : //shift-jis\r
-                               if (_is_SJIS($str)) return 'SJIS';\r
-                               break;\r
-                       case 3 : //jis\r
-                               if (_is_JIS($str)) return 'JIS';\r
-                               break;\r
-                       case 4 : //utf-8\r
-                               if (_is_UTF8($str)) return 'UTF-8';\r
-                               break;\r
-               }\r
-       }\r
-       return $encode;\r
-}\r
-\r
-function mb_strlen ( $str , $encoding='')\r
-{\r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;\r
-\r
-       $encoding = _get_encoding($str, $encoding);\r
-\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 1 : //euc-jp\r
-                       return preg_match_all("/$euc_match/", $str, $arr);\r
-               case 0 : //ascii\r
-               case 4 : //utf-8\r
-                       return preg_match_all("/$utf8_match/", $str, $arr);\r
-               case 2 : //shift-jis\r
-                       return preg_match_all("/$sjis_match/", $str, $arr);\r
-               case 3 : //jis\r
-                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');\r
-                       return preg_match_all("/$sjis_match/", $str, $arr);\r
-       }\r
-}\r
-\r
-function mb_strwidth( $str, $encoding='')\r
-{\r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;\r
-\r
-       $encoding = _get_encoding($str, $encoding);\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 1 : //euc-jp\r
-                       $max = $len = preg_match_all("/$euc_match/", $str, $arr);\r
-                       $len;\r
-                       for ($i=0; $i < $max; ++$i)\r
-                               if ($arr[1][$i]) ++$len;\r
-                       return $len;\r
-               case 0 : //ascii\r
-               case 4 : //utf-8\r
-                       $max = $len = preg_match_all("/$utf8_match/", $str, $arr);\r
-                       for ($i=0; $i < $max; ++$i) {\r
-                               $ucs2 = _utf8ucs2($arr[0][$i]);\r
-                               if (((0x2000 <= $ucs2) && ($ucs2 <= 0xff60)) || (0xffa0 <= $ucs2))\r
-                                       ++$len;\r
-                       }\r
-                       return $len;\r
-               case 2 : //shift-jis\r
-                       $max = $len = preg_match_all("/$sjis_match/", $str, $arr);\r
-                       for ($i=0; $i < $max; ++$i)\r
-                               if ($arr[1][$i]) ++$len;\r
-                       return $len;\r
-               case 3 : //jis\r
-                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');\r
-                       $max = $len = preg_match_all("/$sjis_match/", $str, $arr);\r
-                       for ($i=0; $i < $max; ++$i)\r
-                               if ($arr[1][$i]) ++$len;\r
-                       return $len;\r
-       }\r
-}\r
-\r
-function mb_strimwidth( $str, $start, $width, $trimmarker , $encoding = '')\r
-{\r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;\r
-\r
-       $encoding = _get_encoding($str, $encoding);\r
-       $str = mb_substr($str, $start, 'notnumber', $encoding);\r
-       if (($len = mb_strwidth($str,$encoding)) <= $width)\r
-               return $str;\r
-       $trimwidth = mb_strwidth($trimmarker,$encoding);\r
-       $width -= $trimwidth;\r
-       if ($width <= 0) return $trimmarker;\r
-       \r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 1 : //euc-jp\r
-                       preg_match_all("/$euc_match/", $str, $arr);\r
-                       $i = 0;\r
-                       while(TRUE) {\r
-                               if ($arr[1][$i])\r
-                                       $width -= 2;\r
-                               else\r
-                                       --$width;\r
-                               if ($width<0) break;\r
-                               ++$i;\r
-                       }\r
-                       $arr[0] = array_slice($arr[0], 0, $i);\r
-                       return implode("", $arr[0]).$trimmarker;\r
-               case 0 : //ascii\r
-               case 4 : //utf-8\r
-                       preg_match_all("/$utf8_match/", $str, $arr);\r
-                       $i = 0;\r
-                       while(TRUE) {\r
-                               $ucs2 = _utf8ucs2($arr[0][$i]);\r
-                               if (((0x2000 <= $ucs2) && ($ucs2 <= 0xff60)) || (0xffa0 <= $ucs2))\r
-                                       $width -= 2;\r
-                               else\r
-                                       --$width;\r
-                               if ($width<0) break;\r
-                               ++$i;\r
-                       }\r
-                       $arr[0] = array_slice($arr[0], 0, $i);\r
-                       return implode("", $arr[0]).$trimmarker;\r
-               case 2 : //shift-jis\r
-                       preg_match_all("/$sjis_match/", $str, $arr);\r
-                       $i = 0;\r
-                       while(TRUE) {\r
-                               if ($arr[1][$i])\r
-                                       $width -= 2;\r
-                               else\r
-                                       --$width;\r
-                               if ($width<0) break;\r
-                               ++$i;\r
-                       }\r
-                       $arr[0] = array_slice($arr[0], 0, $i);\r
-                       return implode("", $arr[0]).$trimmarker;\r
-               case 3 : //jis\r
-                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');\r
-                       $trimmarker = mb_convert_encoding($trimmarker, 'SJIS', 'JIS');\r
-                       preg_match_all("/$sjis_match/", $str, $arr);\r
-                       $i = 0;\r
-                       while(TRUE) {\r
-                               if ($arr[1][$i])\r
-                                       $width -= 2;\r
-                               else\r
-                                       --$width;\r
-                               if ($width<0) break;\r
-                               ++$i;\r
-                       }\r
-                       $arr[0] = array_slice($arr[0], 0, $i);\r
-                       return mb_convert_encoding(implode("", $arr[0]).$trimmarker,'JIS','SJIS');\r
-       }\r
-}\r
-\r
-\r
-function mb_substr ( $str, $start , $length='notnumber' , $encoding='')\r
-{\r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;\r
-\r
-       $encoding = _get_encoding($str, $encoding);\r
-\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 1 : //euc-jp\r
-                       preg_match_all("/$euc_match/", $str, $arr);\r
-                       break;\r
-               case 0 : //ascii\r
-               case 4 : //utf-8\r
-                       preg_match_all("/$utf8_match/", $str, $arr);\r
-                       break;\r
-               case 2 : //shift-jis\r
-                       preg_match_all("/$sjis_match/", $str, $arr);\r
-                       break;\r
-               case 3 : //jis\r
-                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');\r
-                       preg_match_all("/$sjis_match/", $str, $arr);\r
-       }\r
-       if (is_int($length))\r
-               $arr[0] = array_slice($arr[0], $start, $length);\r
-       else\r
-               $arr[0] = array_slice($arr[0], $start);\r
-       $str = implode("", $arr[0]);\r
-       if ($_mb_encoding[$encoding] == 3)\r
-               $str = mb_convert_encoding($str, 'JIS', 'SJIS');\r
-       return $str;\r
-}\r
-\r
-function _sub_strcut($arr, $start, $length) {\r
-       $max = count($arr[0]);\r
-       $s = ''; $counter = 0;\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $counter += strlen($arr[0][$i]);\r
-               if ($counter > $start) {\r
-                       if ($length == 0) {\r
-                               for ($j = $i; $j < $max; ++$j)\r
-                                       $s .= $arr[0][$j];\r
-                               return $s;\r
-                       }\r
-                       for ($j = $i, $len = 0; $j < $max; ++$j) {\r
-                               $len += strlen($arr[0][$j]);\r
-                               if ($len <= $length)\r
-                                       $s .= $arr[0][$j];\r
-                       }\r
-                       return $s;\r
-               }\r
-       }\r
-       return $s;\r
-}\r
-\r
-\r
-function mb_strcut ( $str, $start , $length=0 , $encoding = '')\r
-{\r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;\r
-       \r
-       \r
-       $encoding = _get_encoding($str, $encoding);\r
-\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 1 : //euc-jp\r
-                       preg_match_all("/$euc_match/", $str, $arr);\r
-                       return _sub_strcut($arr, $start, $length);\r
-               case 0 : //ascii\r
-                       return substr($str, $start, $length);\r
-               case 4 : //utf-8\r
-                       preg_match_all("/$utf8_match/", $str, $arr);\r
-                       return _sub_strcut($arr, $start, $length);\r
-               case 2 : //shift-jis\r
-                       preg_match_all("/$sjis_match/", $str, $arr);\r
-                       return _sub_strcut($arr, $start, $length);\r
-               case 3 : //jis\r
-                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');\r
-                       preg_match_all("/$sjis_match/", $str, $arr);\r
-                       $sub = _sub_strcut($arr, $start, $length);\r
-                       return mb_convert_encoding($sub, 'JIS', 'SJIS');\r
-       }\r
-}\r
-\r
-function _sub_strrpos($ar_haystack, $ar_needle)\r
-{\r
-       $max_h = count($ar_haystack) - 1;\r
-       $max_n = count($ar_needle) - 1;\r
-       for ($i = $max_h; $i >= $max_n; --$i) {\r
-               if ($ar_haystack[$i] == $ar_needle[$max_n]) {\r
-                       $match = TRUE;\r
-                       for ($j = 1; $j <= $max_n; ++$j)\r
-                               if ($ar_haystack[$i-$j] != $ar_needle[$max_n-$j]) {\r
-                                       $match = FALSE;\r
-                                       break;\r
-                               }\r
-                       if ($match) return $i - $max_n;\r
-               }\r
-       }\r
-       return FALSE;\r
-}\r
-\r
-function mb_strrpos ( $haystack, $needle , $encoding = '')\r
-{\r
-       \r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;\r
-       \r
-       $encoding = _get_encoding($haystack, $encoding);\r
-\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 1 : //euc-jp\r
-                       preg_match_all("/$euc_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$euc_match/", $needle, $ar_n);\r
-                       return _sub_strrpos($ar_h[0], $ar_n[0]);\r
-               case 0 : //ascii\r
-               case 4 : //utf-8\r
-                       preg_match_all("/$utf8_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$utf8_match/", $needle, $ar_n);\r
-                       return _sub_strrpos($ar_h[0], $ar_n[0]);\r
-               case 2 : //shift-jis\r
-                       preg_match_all("/$sjis_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$sjis_match/", $needle, $ar_n);\r
-                       return _sub_strrpos($ar_h[0], $ar_n[0]);\r
-               case 3 : //jis\r
-                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');\r
-                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');\r
-                       preg_match_all("/$sjis_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$sjis_match/", $needle, $ar_n);\r
-                       return _sub_strrpos($ar_h[0], $ar_n[0]);\r
-       }\r
-}\r
-\r
-function _sub_strpos($ar_haystack, $ar_needle, $offset)\r
-{\r
-       $max_n = count($ar_needle) - 1;\r
-       $max_h = count($ar_haystack) - count($ar_needle);\r
-       for ($i = $offset; $i <= $max_h; ++$i) {\r
-               for ($j = 0; $j <= $max_n; ++$j) {\r
-                       $match = TRUE;\r
-                       if ($ar_haystack[$i+$j] != $ar_needle[$j]) {\r
-                               $match = FALSE;\r
-                               break;\r
-                       }\r
-               }\r
-               if ($match) return $i;\r
-       }\r
-       return FALSE;\r
-}\r
-\r
-function mb_strpos ( $haystack, $needle , $offset = 0, $encoding = '')\r
-{\r
-       \r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;\r
-       \r
-       $encoding = _get_encoding($haystack, $encoding);\r
-\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 1 : //euc-jp\r
-                       preg_match_all("/$euc_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$euc_match/", $needle, $ar_n);\r
-                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);\r
-               case 0 : //ascii\r
-               case 4 : //utf-8\r
-                       preg_match_all("/$utf8_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$utf8_match/", $needle, $ar_n);\r
-                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);\r
-               case 2 : //shift-jis\r
-                       preg_match_all("/$sjis_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$sjis_match/", $needle, $ar_n);\r
-                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);\r
-               case 3 : //jis\r
-                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');\r
-                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');\r
-                       preg_match_all("/$sjis_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$sjis_match/", $needle, $ar_n);\r
-                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);\r
-       }\r
-}\r
-\r
-function _sub_substr_count($ar_haystack, $ar_needle)\r
-{\r
-       $matches = 0;\r
-       $max_n = count($ar_needle) - 1;\r
-       $max_h = count($ar_haystack) - count($ar_needle);\r
-       for ($i = 0; $i <= $max_h; ++$i) {\r
-               for ($j = 0; $j <= $max_n; ++$j) {\r
-                       $match = TRUE;\r
-                       if ($ar_haystack[$i+$j] != $ar_needle[$j]) {\r
-                               $match = FALSE;\r
-                               break;\r
-                       }\r
-               }\r
-               if ($match) ++$matches;\r
-       }\r
-       return $matches;\r
-}\r
-\r
-function mb_substr_count($haystack, $needle , $encoding = '')\r
-{\r
-       \r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;\r
-       \r
-       $encoding = _get_encoding($haystack, $encoding);\r
-\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 1 : //euc-jp\r
-                       preg_match_all("/$euc_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$euc_match/", $needle, $ar_n);\r
-                       return _sub_substr_count($ar_h[0], $ar_n[0]);\r
-               case 0 : //ascii\r
-               case 4 : //utf-8\r
-                       preg_match_all("/$utf8_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$utf8_match/", $needle, $ar_n);\r
-                       return _sub_substr_count($ar_h[0], $ar_n[0]);\r
-               case 2 : //shift-jis\r
-                       preg_match_all("/$sjis_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$sjis_match/", $needle, $ar_n);\r
-                       return _sub_substr_count($ar_h[0], $ar_n[0]);\r
-               case 3 : //jis\r
-                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');\r
-                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');\r
-                       preg_match_all("/$sjis_match/", $haystack, $ar_h);\r
-                       preg_match_all("/$sjis_match/", $needle, $ar_n);\r
-                       return _sub_substr_count($ar_h[0], $ar_n[0]);\r
-       }\r
-}\r
-\r
-\r
-/******************\r
-mb_convert_variables\r
-*******************/\r
-if (!$ini_file['convert_variables_arrayonly']) {\r
-       function mb_convert_variables($to_encoding, $from_encoding, $s1, $s2='',$s3='',$s4='',$s5='',$s6='',$s7='', $s8='',$s9='', $s10='')\r
-       {\r
-               if (is_array($s1)) {\r
-                       $st = '';\r
-                       foreach($s1 as $s) $st .= $s;\r
-                       if (!($encode = mb_detect_encoding($st, $from_encoding)))\r
-                               return FALSE;\r
-                       reset($s1);\r
-                       while (list ($key, $val) = each ($s1)) {\r
-                               $s1[$key] = mb_convert_encoding($val, $to_encoding, $encode);\r
-                       }\r
-                       return $encode;\r
-               }\r
-           $st = $s1.$s2.$s3.$s4.$s5.$s6.$s7.$s8.$s9.$s10;\r
-           if (!($encode = mb_detect_encoding($st, $from_encoding)))\r
-               return FALSE;\r
-           $s1 = mb_convert_encoding($s1, $to_encoding, $encode);\r
-           $s2 = mb_convert_encoding($s2, $to_encoding, $encode);\r
-           $s3 = mb_convert_encoding($s3, $to_encoding, $encode);\r
-           $s4 = mb_convert_encoding($s4, $to_encoding, $encode);\r
-           $s5 = mb_convert_encoding($s5, $to_encoding, $encode);\r
-           $s6 = mb_convert_encoding($s6, $to_encoding, $encode);\r
-           $s7 = mb_convert_encoding($s7, $to_encoding, $encode);\r
-           $s8 = mb_convert_encoding($s8, $to_encoding, $encode);\r
-           $s9 = mb_convert_encoding($s9, $to_encoding, $encode);\r
-           $s10 = mb_convert_encoding($s10, $to_encoding, $encode);\r
-           return $encode;\r
-       }\r
-} else {\r
-       function mb_convert_variables($to_encoding, $from_encoding, &$arr)\r
-       {\r
-               $st = '';\r
-               foreach($arr as $s) $st .= $s;\r
-               if (!($encode = mb_detect_encoding($st, $from_encoding)))\r
-                       return FALSE;\r
-               reset($arr);\r
-               while (list ($key, $val) = each ($arr)) {\r
-                       $arr[$key] = mb_convert_encoding($val, $to_encoding, $encode);\r
-               }\r
-               return $encode;\r
-       }\r
-}\r
-\r
-function mb_preferred_mime_name ($encoding)\r
-{\r
-       global $_mb_encoding;\r
-       \r
-       $encoding = strtoupper($encoding);\r
-       \r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 0 : //ascii\r
-                       return 'US-ASCII';\r
-               case 1 : //euc-jp\r
-                       return 'EUC-JP';\r
-               case 2 : //shift-jis\r
-                       return 'Shift_JIS';\r
-               case 3 : //jis\r
-                       return 'ISO-2022-JP';\r
-               case 4 : //utf-8\r
-                       return 'UTF-8';\r
-       }\r
-}\r
-\r
-function mb_decode_mimeheader($str)\r
-{\r
-       $lines = preg_split("/(\r\n|\r|\n)( *)/", $str);\r
-       $s = '';\r
-       foreach ($lines as $line) {\r
-               if ($line != "") {\r
-                       $line = preg_replace("/<[\w\-+\.]+\@[\w\-+\.]+>/","", $line); //\83\81\81[\83\8b\81E\83A\83h\83\8c\83X\95\94\82ð\8fÁ\82·\r
-                       $matches = preg_split("/=\?([^?]+)\?(B|Q)\?([^?]+)\?=/", $line, -1, PREG_SPLIT_DELIM_CAPTURE);\r
-                       for ($i = 0; $i < count($matches)-1; $i+=4) {\r
-                               if (!preg_match("/^[ \t\r\n]*$/", $matches[$i]))\r
-                                       $s .= $matches[$i];\r
-                               if ($matches[$i+2] == 'B')\r
-                                       $s .= mb_convert_encoding(base64_decode($matches[$i+3]), \r
-                                                                                       mb_internal_encoding(), $matches[$i+1]);\r
-                               else\r
-                                       $s .= mb_convert_encoding(quoted_printable_decode($matches[$i+3]), \r
-                                                                                       mb_internal_encoding(), $matches[$i+1]);\r
-                       }\r
-                       if (!preg_match("/^[ \t\r\n]*$/", $matches[$i]))\r
-                                       $s .= $matches[$i];\r
-               }\r
-       }\r
-       return $s;\r
-}\r
-\r
-function _sub_qponechar($str, &$len)\r
-{\r
-       $all = unpack("C*", $str);\r
-       $s = ''; $len = 0;\r
-       foreach($all as $char) {\r
-               if (((ord('A') <= $char) && ($char <= ord('Z'))) ||\r
-                       ((ord('a') <= $char) && ($char <= ord('z')))) {\r
-                       $s .= chr($char);\r
-                       ++$len;\r
-               } else {\r
-                       $s .= '='.sprintf("%2X",$char);\r
-                       $len += 3;\r
-               }\r
-       }\r
-       return $s;\r
-}\r
-\r
-function _sub_quoted_printable_encode($str, $encoding, $maxline, $linefeed)\r
-{\r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match, $jis_match;\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 0 : //ascii\r
-                       $allchars[0] = unpack("c*", $str);\r
-                       $max = count($allchars[0]);\r
-                       break;\r
-               case 1 : //euc-jp\r
-                       $max = preg_match_all("/$euc_match/", $str, $allchars);\r
-                       break;\r
-               case 2 : //shift-jis\r
-                       $max = preg_match_all("/$sjis_match/", $str, $allchars);\r
-                       break;\r
-               case 4 : //utf-8\r
-                       $max = preg_match_all("/$utf8_match/", $str, $allchars);\r
-                       break;\r
-               case 3 : //jis\r
-                       $max = preg_match_all("/$jis_match/", $str, $allchunks, PREG_SET_ORDER);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð\r
-                       $st = ''; // quoted printable\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ\r
-                       $len = $maxline;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94\r
-                       $needterminate = FALSE; //\8dÅ\8cã\82É\83G\83X\83P\81[\83v\83V\81[\83P\83\93\83X\82ª\95K\97v\82©\82Ç\82¤\82©\r
-                       for ($i = 0; $i < $max; ++$i) {\r
-                               if (ord($allchunks[$i][1])) { //\89p\90\94\82É\83}\83b\83`\r
-                                       if ($needterminate) {\r
-                                               $st .= '=1B=28B';\r
-                                               $len -= 7;\r
-                                       }\r
-                                       $tmparr = unpack("C*", $allchunks[$i][1]);\r
-                                       foreach ($tmparr as $char) {\r
-                                               $tmp = _sub_qponechar(chr($char), $l);\r
-                                               if ($len < $l) {\r
-                                                       $st .= $linefeed;\r
-                                                       $len = $maxline;\r
-                                               }\r
-                                               $st .= $tmp;\r
-                                               $len -= $l;\r
-                                       } \r
-                                       $needterminate = FALSE;\r
-                               } elseif (ord($allchunks[$i][2])) { //\8a¿\8e\9a\82É\83}\83b\83`\r
-                                       $maxchars = preg_match_all("/../",substr($allchunks[$i][0], 3),$allchars);\r
-                                       $tmp = _sub_qponechar($allchars[0][0], $l);\r
-                                       if ($len < 14 + $l) {\r
-                                               if ($needterminate)\r
-                                                       $st .= '=1B=28B';\r
-                                               $st .= $linefeed;\r
-                                               $len = $maxline;\r
-                                       }\r
-                                       $st .= '=1B=24B';\r
-                                       $len -= 7;\r
-                                       for ($j = 0; $j < $maxchars; ++$j) {\r
-                                               $tmp = _sub_qponechar($allchars[0][$j], $l);\r
-                                               if ($len < $l + 7) {\r
-                                                       $st .= '=1B=28B'.$linefeed.'=1B=24B';\r
-                                                       $len = $maxline-7;\r
-                                               }\r
-                                               $st .= $tmp;\r
-                                               $len -= $l;\r
-                                       }\r
-                                       $needterminate = TRUE;\r
-                                       \r
-                               } elseif (ord($allchunks[$i][3])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`\r
-                                       $max = preg_match_all("/./",$allchunks[$i][3],$allchars);\r
-                                       $tmp = _sub_qponechar($allchars[0][0], $l);\r
-                                       if ($len < 14 + $l) {\r
-                                               if ($needterminate)\r
-                                                       $st .= '=1B=28B';\r
-                                               $st .= $linefeed;\r
-                                               $len = $maxline;\r
-                                       }\r
-                                       $st .= '=1B=28I';\r
-                                       $len -= 7;\r
-                                       for ($j == 0; $j < $max; ++$j) {\r
-                                               $tmp = _sub_qponechar($allchars[0][$j], $l);\r
-                                               if ($len < $l + 7) {\r
-                                                       $st .= '=1B=28B'.$linefeed.'=1B=28I';\r
-                                                       $len = $maxline-7;\r
-                                               }\r
-                                               $st .= $tmp;\r
-                                               $len -= $l;\r
-                                       }\r
-                                       $needterminate = TRUE;\r
-                               }\r
-                       }\r
-                       if ($needterminate) $st .= '=1B=28B';\r
-                       $st .= $linefeed;\r
-                       return $st;\r
-       }\r
-       $st = ''; // quoted printable\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ\r
-       $len = $maxline;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $tmp = _sub_qponechar($allchars[0][$i], $l);\r
-               if ($l > $len) {\r
-                       $st .= $linefeed;\r
-                       $len = $maxline;\r
-               }\r
-               $st .= $tmp;\r
-               $len -= $l;\r
-       }\r
-       $st .= $linefeed;\r
-       return $st;\r
-}\r
-\r
-function _sub_encode_base64($str, $encoding, $maxline , $linefeed)\r
-{\r
-       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match, $jis_match;\r
-       switch ($_mb_encoding[$encoding]) {\r
-               case 0 : //ascii\r
-                       return chunk_split( base64_encode($str) , $maxline, $linefeed);\r
-               case 1 : //euc-jp\r
-                       $max = preg_match_all("/$euc_match/", $str, $allchars);\r
-                       break;\r
-               case 2 : //shift-jis\r
-                       $max = preg_match_all("/$sjis_match/", $str, $allchars);\r
-                       break;\r
-               case 4 : //utf-8\r
-                       $max = preg_match_all("/$utf8_match/", $str, $allchars);\r
-                       break;\r
-               case 3 : //jis\r
-                       $max = preg_match_all("/$jis_match/", $str, $allchunks, PREG_SET_ORDER);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð\r
-                       $st = ''; // BASE64\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ\r
-                       $maxbytes = floor($maxline * 3 / 4);  //1\8ds\82É\95Ï\8a·\89Â\94\\82È\83o\83C\83g\90\94\r
-                       $len = $maxbytes;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94\r
-                       $line = '';  //1\8ds\95ª\82Ì\95Ï\8a·\91O\82Ì\95\8e\9a\97ñ\r
-                       $needterminate = FALSE; //\8dÅ\8cã\82É\83G\83X\83P\81[\83v\83V\81[\83P\83\93\83X\82ª\95K\97v\82©\82Ç\82¤\82©\r
-                       for ($i = 0; $i < $max; ++$i) {\r
-                               if (ord($allchunks[$i][1])) { //\89p\90\94\82É\83}\83b\83`\r
-                                       if ($needterminate) {\r
-                                               $line .= chr(0x1B).'(B';\r
-                                               $len -= 3;\r
-                                       }\r
-                                       $tmpstr = $allchunks[$i][1];  //\92Ç\89Á\82·\82é\95\8e\9a\97ñ\r
-                                       $l = strlen($tmpstr);  //\92Ç\89Á\82·\82é\95\8e\9a\97ñ\82Ì\92·\82³\r
-                                       while ($l > $len) {\r
-                                               $line .= substr($tmpstr, 0, $len);\r
-                                               $st .= base64_encode($line).$linefeed;\r
-                                               $l -= $len;\r
-                                               $tmpstr = substr($tmpstr, $len);\r
-                                               $len = $maxbytes;\r
-                                               $line = '';\r
-                                       } \r
-                                       $line .= $tmpstr;\r
-                                       $len -= $l;\r
-                                       $needterminate = FALSE;\r
-                               } elseif (ord($allchunks[$i][2])) { //\8a¿\8e\9a\82É\83}\83b\83`\r
-                                       $tmpstr = substr($allchunks[$i][0], 3);\r
-                                       if ($len < 8) { //\95\8e\9a\82ð\92Ç\89Á\82·\82é\82Ì\82É\8dÅ\92á8\83o\83C\83g\95K\97v\82È\82Ì\82Å\r
-                                               if ($needterminate)\r
-                                                       $line .= chr(0x1B).'(B';\r
-                                               $st .= base64_encode($line).$linefeed;\r
-                                               $len = $maxbytes;\r
-                                               $line = '';\r
-                                       }\r
-                                       $l = strlen($tmpstr);\r
-                                       $line .= chr(0x1B).'$B';\r
-                                       $len -= 3; \r
-                                       while ($l > $len-3) {\r
-                                               $add = floor(($len-3) / 2) * 2;\r
-                                               if ($add == 0) break;\r
-                                               $line .= substr($tmpstr, 0, $add).chr(0x1B).'(B';\r
-                                               $st .= base64_encode($line).$linefeed;\r
-                                               $l -= $add;\r
-                                               $tmpstr = substr($tmpstr, $add);\r
-                                               $len = $maxbytes-3;\r
-                                               $line = chr(0x1B).'$B';\r
-                                       } \r
-                                       $line .= $tmpstr;\r
-                                       $len -= $l;\r
-                                       $needterminate = TRUE;\r
-                                       \r
-                               } elseif (ord($allchunks[$i][3])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`\r
-                                       $tmpstr = $allchunks[$i][3];\r
-                                       if ($len < 7) { //\95\8e\9a\82ð\92Ç\89Á\82·\82é\82Ì\82É\8dÅ\92á7\83o\83C\83g\95K\97v\82È\82Ì\82Å\r
-                                               if ($needterminate)\r
-                                                       $line .= chr(0x1B).'(B';\r
-                                               $st .= base64_encode($line).$linefeed;\r
-                                               $len = $maxbytes;\r
-                                               $line = '';\r
-                                       }\r
-                                       $l = strlen($tmpstr);\r
-                                       $line .= chr(0x1B).'(I';\r
-                                       $len -= 3; \r
-                                       while ($l > $len-3) {\r
-                                               $line .= substr($tmpstr, 0, $len-3).chr(0x1B).'(B';\r
-                                               $st .= base64_encode($line).$linefeed;\r
-                                               $l -= $len;\r
-                                               $tmpstr = substr($tmpstr, $len-3);\r
-                                               $len = $maxbytes-3;\r
-                                               $line = chr(0x1B).'(I';\r
-                                       } \r
-                                       $line .= $tmpstr;\r
-                                       $len -= $l;\r
-                                       $needterminate = TRUE;\r
-                               }\r
-                       }\r
-                       if ($needterminate) $line .= chr(0x1B).'(B';\r
-                       $st .= base64_encode($line).$linefeed;\r
-                       return $st;\r
-       }\r
-       $st = ''; // BASE64\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ\r
-       $maxbytes = floor($maxline * 3 / 4);  //1\8ds\82É\95Ï\8a·\89Â\94\\82È\83o\83C\83g\90\94\r
-       $len = $maxbytes;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94\r
-       $line = '';  //1\8ds\95ª\82Ì\95Ï\8a·\91O\82Ì\95\8e\9a\97ñ\r
-       for ($i = 0; $i < $max; ++$i) {\r
-               $l = strlen($allchars[0][$i]);\r
-               if ($l > $len) {\r
-                       $st .= base64_encode($line).$linefeed;\r
-                       $len = $maxbytes;\r
-                       $line = '';\r
-               }\r
-               $line .= $allchars[0][$i];\r
-               $len -= $l;\r
-       }\r
-       $st .= base64_encode($line).$linefeed;\r
-       return $st;\r
-}\r
-\r
-function mb_encode_mimeheader( $str, $encoding = "ISO-2022-JP", $transfer_encoding = "B", $linefeed = "\r\n")\r
-{\r
-       global $_mb_encoding;\r
-       if ($transfer_encoding == "b") $transfer_encoding = "B";\r
-       if ($transfer_encoding <> "B") $transfer_encoding = "Q";\r
-       $encoding = strtoupper($encoding);\r
-       \r
-       $head = '=?' . mb_preferred_mime_name ($encoding) . '?'.$transfer_encoding.'?';\r
-       $str = mb_convert_encoding($str, $encoding, mb_internal_encoding());\r
-       $length = 76 - strlen($head) - 4;\r
-       if ($transfer_encoding == "B") {\r
-        $str = _sub_encode_base64( $str , $encoding, $length, $linefeed);\r
-       } else {\r
-               $str = _sub_quoted_printable_encode($str, $encoding, $length, $linefeed);\r
-       }\r
-       $ar = explode($linefeed, $str);\r
-       $s = '';\r
-       foreach ($ar as $element) {\r
-               if ($element <> '')\r
-                       $s .= $head . $element . '?=' .$linefeed;\r
-       }\r
-       return $s;\r
-}\r
-\r
-function mb_http_input($type = '')\r
-{\r
-       return FALSE;\r
-}\r
-\r
-function mb_http_output($encoding = '')\r
-{\r
-       global $ini_file;\r
-       \r
-       if ($encoding == '') return $ini_file['http_output'];\r
-       if (strtolower($encoding) == 'pass') {\r
-               $ini_file['http_output'] = 'pass';\r
-               return TRUE;\r
-       }\r
-       $ini_file['http_output'] = mb_preferred_mime_name($encoding);\r
-       return TRUE;\r
-}\r
-\r
-\r
-function mb_output_handler ( $buffer, $status='')\r
-{\r
-       global $ini_file, $tmpstr;\r
-       if ($ini_file['http_output'] == 'pass')\r
-               return $buffer;\r
-       return mb_convert_encoding($buffer, $ini_file['http_output'], mb_internal_encoding());\r
-}\r
-\r
-\r
-function mb_encode_numericentity($str, $convmap, $encoding="")\r
-{\r
-       if (!$encoding) $encoding = mb_internal_encoding();\r
-       $str = mb_convert_encoding($str, "utf-16", $encoding);\r
-       $ar = unpack("n*", $str);\r
-       $s = "";\r
-       foreach($ar as $char) {\r
-               $max = count($convmap);\r
-               for ($i = 0; $i < $max; $i += 4) {\r
-                       if (($convmap[$i] <= $char) && ($char <= $convmap[$i+1])) {\r
-                               $char += $convmap[$i+2];\r
-                               $char &= $convmap[$i+3];\r
-                               $s .= sprintf("&#%u;", $char);\r
-                               break;\r
-                       }\r
-               }\r
-               if ($i >= $max) $s .= pack("n*", $char);\r
-       }\r
-       return $s;\r
-}\r
-\r
-function mb_decode_numericentity ($str, $convmap, $encoding="")\r
-{\r
-       if (!$encoding) $encoding = mb_internal_encoding();\r
-       $ar = preg_split('/(&#[0-9]+;)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);\r
-       $s = '';\r
-       $max = count($convmap);\r
-       foreach($ar as $chunk) {\r
-               if (preg_match('/&#([0-9]+);/', $chunk, $match)) {\r
-                       for ($i = 0; $i < $max; $i += 4) {\r
-                               $num = $match[1] - $convmap[$i+2];\r
-                               if (($convmap[$i] <= $num) && ($num <= $convmap[$i+1])) {\r
-                                       $ucs2 = pack('n*', $num);\r
-                                       $s .= mb_convert_encoding($ucs2, $encoding, 'UTF-16');\r
-                                       break;\r
-                               }\r
-                       }\r
-                       if ($i >= $max) $s .= $chunk;\r
-               } else {\r
-                       $s .= $chunk;\r
-               }\r
-       }\r
-       return $s;\r
-}\r
-\r
-\r
-function _print_str($str) {\r
-       $all = unpack("C*", $str);\r
-       $s = '';\r
-       foreach($all as $char) {\r
-               $s .= sprintf(" %2X",$char);\r
-       }\r
-       print $s."\n";\r
-}\r
-\r
+<?php
+/* mb-emulator.php by Andy
+ * email : webmaster@matsubarafamily.com
+ *
+ * license based on GPL(GNU General Public License)
+ *
+ * Ver.0.37 (2005/1/30)
+ */
+
+
+
+include dirname(__FILE__).'/convert.table';
+include dirname(__FILE__).'/sjistouni.table';
+include dirname(__FILE__).'/unitosjis.table';
+
+$ini_file = parse_ini_file(dirname(__FILE__).'/mb-emulator.ini');
+
+$_language = $ini_file['language'];
+$_internal_encoding = $ini_file['internal_encoding'];
+$_lang_array = array (
+       'Japanese', 'ja', 'English', 'en', 'uni'
+       );
+
+$_mb_encoding = array (
+       'AUTO' => 0,
+       'ASCII' => 0,
+       'EUC-JP' => 1,
+       'EUC' => 1,
+       'SJIS' => 2,
+       'SHIFT-JIS' => 2,
+       'SJIS-WIN' => 2,
+       'JIS' => 3,
+       'ISO-2022-JP' => 3,
+       'UTF-8' => 4,
+       'UTF8' => 4,
+       'UTF-16'=>5
+       );
+
+if (!(mb_detect_order($ini_file['detect_order'])))
+       $_detect_order = array ("ASCII", "JIS", "UTF-8", "EUC-JP", "SJIS");
+
+
+
+$sjis_match = "[\x81-\x9F,\xE0-\xFC]([\x40-\xFC])|[\x01-\x7F]|[\xA0-\xDF]";
+$euc_match = "[\xa1-\xfe]([\xa1-\xfe])|[\x01-\x7f]|\x8e([\xa0-\xdf])";
+$utf8_match = "[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]";
+$jis_match = "(?:^|\x1b\(\x42)([^\x1b]*)|(?:\x1b\\$\x42([^\x1b]*))|(?:\x1b\(I([^\x1b]*))";
+
+function mb_language($language)
+{
+  global $_language, $_lang_array;
+
+  if ($language =='') {
+    if ($_language == '') return FALSE;
+    else return $_language;
+  } else {
+       foreach ($_lang_array as $element) {
+               if ($element == $language) {
+                       $_language = $language;
+                       return TRUE;
+               }
+       }
+       return FALSE;
+  }
+}
+
+
+function mb_internal_encoding($encoding = '')
+{
+  global $_internal_encoding;
+
+  if ($encoding =='') {
+    if ($_internal_encoding == '') return FALSE;
+    else return $_internal_encoding;
+  } else {
+               $_internal_encoding = $encoding;
+               return TRUE;
+  }
+}
+
+
+
+function mb_convert_encoding( $str, $to_encoding, $from_encoding = '')
+{
+       global $_internal_encoding, $_mb_encoding;
+
+       $to_encoding = strtoupper($to_encoding);
+       $from_encoding = mb_detect_encoding($str, $from_encoding);
+       
+       switch ($_mb_encoding[$from_encoding]) {
+               case 1: //euc-jp
+                       switch($_mb_encoding[$to_encoding]) {
+                               case 2: //sjis
+                                       return _euctosjis($str);
+                               case 3: //jis
+                                       $str = _euctosjis($str);
+                                       return _sjistojis($str);
+                               case 4: //utf8
+                                       return _euctoutf8($str);
+                               case 5: //utf16
+                                       $str = _euctoutf8($str);
+                                       return _utf8toutf16($str);
+                               default:
+                                       return $str;
+                       }
+               case 2: //sjis
+                       switch($_mb_encoding[$to_encoding]) {
+                               case 1: //euc-jp
+                                       return _sjistoeuc($str);
+                               case 3: //jis
+                                       return _sjistojis($str);
+                               case 4: //utf8
+                                       return _sjistoutf8($str);
+                               case 5: //utf16
+                                       $str = _sjistoutf8($str);
+                                       return _utf8toutf16($str);
+                               default:
+                                       return $str;
+                       }
+               case 3: //jis
+                       switch($_mb_encoding[$to_encoding]) {
+                               case 1: //euc-jp
+                                       $str = _jistosjis($str);
+                                       return _sjistoeuc($str);
+                               case 2: //sjis
+                                       return _jistosjis($str);
+                               case 4: //utf8
+                                       $str = _jistosjis($str);
+                                       return _sjistoutf8($str);
+                               case 5: //utf16
+                                       $str = _jistosjis($str);
+                                       $str = _sjistoutf8($str);
+                                       return _utf8toutf16($str);
+                               default:
+                                       return $str;
+                       }
+               case 4: //utf8
+                       switch($_mb_encoding[$to_encoding]) {
+                               case 1: //euc-jp
+                                       return _utf8toeuc($str);
+                               case 2: //sjis
+                                       return _utf8tosjis($str);
+                               case 3: //jis
+                                       $str = _utf8tosjis($str);
+                                       return _sjistojis($str);
+                               case 5: //utf16
+                                       return _utf8toutf16($str);
+                               default:
+                                       return $str;
+                       }
+               case 5: //utf16
+                       $str = _utf16toutf8($str);
+                       switch($_mb_encoding[$to_encoding]) {
+                               case 1: //euc-jp
+                                       return _utf8toeuc($str);
+                               case 2: //sjis
+                                       return _utf8tosjis($str);
+                               case 3: //jis
+                                       $str = _utf8tosjis($str);
+                                       return _sjistojis($str);
+                               case 4: //utf8
+                                       return $str;
+                               default:
+                                       return _utf8toutf16($str);
+                       }
+               default:
+                       return $str;
+       }
+}
+
+function _get_encoding(&$str, $encoding)
+{
+       global $_internal_encoding, $_mb_encoding;
+
+       if ($encoding =='') {
+               if ($_internal_encoding == '') {
+                       return mb_detect_encoding($str, mb_detect_order());
+               } else {
+                       return $_internal_encoding;
+               }
+       }
+       return strtoupper($encoding);
+}
+
+
+
+function _sjistoeuc(&$str)
+{
+       global $sjis_match, $_sjistoeuc_byte1, $_sjistoeuc_byte2, $_sjistoeuc_byte1_shift;
+       
+       $max = preg_match_all("/$sjis_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       $str_EUC = '';
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87
+                       $shift = $_sjistoeuc_byte1_shift[$num2];
+                       $str_EUC .= chr($_sjistoeuc_byte1[$num] + $shift)
+                                          .chr($_sjistoeuc_byte2[$shift][$num2]);
+               } elseif ($num <= 0x7F) {//\89p\90\94\8e\9a
+                       $str_EUC .= chr($num);
+               } else { //\94¼\8ap\83J\83i
+                       $str_EUC .= chr(0x8E).chr($num);
+               }
+       }
+       return $str_EUC;
+}
+
+
+function _euctosjis(&$str)
+{
+       global $euc_match, $_euctosjis_byte1, $_euctosjis_byte2;
+       $max = preg_match_all("/$euc_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       $str_SJIS = '';
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // \8a¿\8e\9a\82Ì\8fê\8d\87
+                       $str_SJIS .= chr($_euctosjis_byte1[$num]);
+                       if ($num & 1)
+                               $str_SJIS .= chr($_euctosjis_byte2[0][$num2]);
+                       else
+                               $str_SJIS .= chr($_euctosjis_byte2[1][$num2]);
+               } elseif ($num3 = ord($allchars[2][$i])) {//\94¼\8ap\83J\83i
+                       $str_SJIS .= chr($num3);
+               } else { //\89p\90\94\8e\9a
+                       $str_SJIS .= chr($num);
+               }
+       }
+       return $str_SJIS;
+}
+
+function _sjistojis(&$str)
+{
+       global $sjis_match, $_sjistoeuc_byte1, $_sjistoeuc_byte2, $_sjistoeuc_byte1_shift;
+       
+       $max = preg_match_all("/$sjis_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       $str_JIS = '';
+       $mode = 0; // \89p\90\94
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87
+                       if ($mode != 1) {
+                               $mode = 1;
+                               $str_JIS .= chr(0x1b).'$B';
+                       }
+                       $shift = $_sjistoeuc_byte1_shift[$num2];
+                       $str_JIS .= chr(($_sjistoeuc_byte1[$num] + $shift) & 0x7F)
+                                          .chr($_sjistoeuc_byte2[$shift][$num2] & 0x7F);
+               } elseif ($num > 0x80) {//\94¼\8ap\83J\83i
+                       if ($mode != 2) {
+                               $mode = 2;
+                               $str_JIS .= chr(0x1B).'(I';
+                       }
+                       $str_JIS .= chr($num & 0x7F);
+               } else {//\94¼\8ap\89p\90\94
+                       if ($mode != 0) {
+                               $mode = 0;
+                               $str_JIS .= chr(0x1B).'(B';
+                       }
+                       $str_JIS .= chr($num);
+               }
+       }
+       if ($mode != 0) {
+               $str_JIS .= chr(0x1B).'(B';
+       }
+       return $str_JIS;
+}
+
+function _sub_jtosj($match)
+{
+       global $_euctosjis_byte1, $_euctosjis_byte2;
+       $num = ord($match[0]);
+       $num2 = ord($match[1]);
+       $s = chr($_euctosjis_byte1[$num | 0x80]);
+       if ($num & 1) {
+               $s .= chr($_euctosjis_byte2[0][$num2 | 0x80]);
+       } else {
+               $s .= chr($_euctosjis_byte2[1][$num2 | 0x80]);
+       }
+       return $s;
+}
+
+function _jistosjis(&$str)
+{
+       global $_euctosjis_byte1, $_euctosjis_byte2, $jis_match;
+       
+       $max = preg_match_all("/$jis_match/", $str, $allchunks, PREG_SET_ORDER);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð
+       $st = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if (ord($allchunks[$i][1])) { //\89p\90\94\82É\83}\83b\83`
+                       $st .= $allchunks[$i][1];
+               } elseif (ord($allchunks[$i][2])) { //\8a¿\8e\9a\82É\83}\83b\83`
+                       $tmp = substr($allchunks[$i][0], 3, strlen($allchunks[$i][0]));
+                       $st .= preg_replace_callback("/.(.)/","_sub_jtosj", $tmp);
+               } elseif (ord($allchunks[$i][3])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       $st .= preg_replace("/./e","chr(ord['$1'] | 0x80);",$allchunks[$i][3]);
+               }
+       }
+       return $st;
+}
+
+
+function _ucs2utf8($uni)
+{
+       if ($uni <= 0x7f)
+               return chr($uni);
+       elseif ($uni <= 0x7ff) {
+               $y = ($uni >> 6) & 0x1f;
+               $x = $uni & 0x3f;
+               return chr(0xc0 | $y).chr(0x80 | $x);
+       } else {
+               $z = ($uni >> 12) & 0x0f;
+               $y = ($uni >> 6) & 0x3f;
+               $x = $uni & 0x3f;
+               return chr(0xe0 | $z).chr(0x80 | $y).chr(0x80 | $x);
+       }
+}
+
+function _sjistoutf8(&$str)
+{
+
+       global $sjis_match, $sjistoucs2;
+       $st = '';
+       $max = preg_match_all("/$sjis_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87
+                       $ucs2 = $sjistoucs2[($num << 8) | $num2];
+                       $st .= _ucs2utf8($ucs2);
+               } elseif ($num > 0x80) {//\94¼\8ap\83J\83i
+                       $st .= _ucs2utf8(0xfec0 + $num);
+               } else {//\94¼\8ap\89p\90\94
+                       $st .= chr($num);
+               }
+       }
+       return $st;
+}
+
+function _utf8ucs2($st)
+{
+       $num = ord($st);
+       if (!($num & 0x80)) //1byte
+               return $num;
+       elseif (($num & 0xe0) == 0xc0) {//2bytes
+               $num2 = ord(substr($st, 1,1));
+               return (($num & 0x1f) << 6) | ($num2 & 0x3f);
+       } else  { //3bytes
+               $num2 = ord(substr($st, 1,1));
+               $num3 = ord(substr($st, 2,1));
+               return (($num & 0x0f) << 12) | (($num2 & 0x3f) << 6) | ($num3 & 0x3f);
+       }
+}
+
+function _utf8tosjis(&$str)
+{
+       global $utf8_match, $ucs2tosjis;
+       $st = '';
+       $max = preg_match_all("/$utf8_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·
+               if ($num < 0x80)
+                       $st .= chr($num);
+               elseif ((0xff61 <= $num) && ($num <= 0xff9f))
+                       $st .= chr($num - 0xfec0);
+               else {
+                       $sjis = $ucs2tosjis[$num];
+                       $st .= chr($sjis >> 8) . chr($sjis & 0xff);
+               }
+       }
+       return $st;
+}
+
+function _euctoutf8(&$str)
+{
+       global $euc_match, $sjistoucs2, $_euctosjis_byte1, $_euctosjis_byte2;
+       $st = '';
+       $max = preg_match_all("/$euc_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87
+                       if ($num & 1)
+                               $sjis = ($_euctosjis_byte1[$num] << 8) | $_euctosjis_byte2[0][$num2];
+                       else
+                               $sjis = ($_euctosjis_byte1[$num] << 8) | $_euctosjis_byte2[1][$num2];
+                       $st .= _ucs2utf8($sjistoucs2[$sjis]);
+               } elseif ($num3 = ord($allchars[2][$i])) {
+                       $st .= _ucs2utf8(0xfec0 + $num3);
+               } else {//\94¼\8ap\89p\90\94
+                       $st .= chr($num);
+               }
+       }
+       return $st;
+}
+
+function _utf8toeuc(&$str)
+{
+       global $utf8_match, $ucs2tosjis, $_sjistoeuc_byte1, $_sjistoeuc_byte2, $_sjistoeuc_byte1_shift;
+       $st = '';
+       $max = preg_match_all("/$utf8_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·
+               if ($num < 0x80)
+                       $st .= chr($num);
+               elseif ((0xff61 <= $num) && ($num <= 0xff9f)) //\94¼\8ap\83J\83i
+                       $st .= chr(0x8e) . chr($num - 0xfec0);
+               else {
+                       $sjis = $ucs2tosjis[$num];
+                       $upper = $sjis >> 8;
+                       $lower = $sjis & 0xff;
+                       $shift = $_sjistoeuc_byte1_shift[$lower];
+                       $st .= chr($_sjistoeuc_byte1[$upper] + $shift)
+                                  .chr($_sjistoeuc_byte2[$shift][$lower]);
+               }
+       }
+       return $st;
+}
+
+function _utf8toutf16(&$str)
+{
+       global $utf8_match;
+       $st = '';
+       $max = preg_match_all("/$utf8_match/", $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·
+               $st .= chr(($num >> 8) & 0xff).chr($num & 0xff);
+       }
+       return $st;
+}
+
+function _utf16toutf8(&$str)
+{
+       global $utf8_match;
+       $st = '';
+       $ar = unpack("n*", $str);
+       foreach($ar as $char) {
+               $st .= _ucs2utf8($char);
+       }
+       return $st;
+}
+
+       
+function sub_zenhan_EUC(&$str, $match) {
+       global $alphanumeric_convert;
+
+       $match = $match . "|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\91S\8ap\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(array_search($chars[1][$i], $alphanumeric_convert));
+               //      $str .= chr($num & 0x7F);
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function sub_hanzen_EUC(&$str, $match) {
+       global $alphanumeric_convert;
+
+       $match = $match . "|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\94¼\8ap\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= $alphanumeric_convert[$num];
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function alpha_zenhan_EUC(&$str) {
+       sub_zenhan_EUC($str, "(\xA3[\xC1-\xFA])");
+}
+
+function alpha_hanzen_EUC(&$str) {
+       sub_hanzen_EUC($str, "([\x41-\x5A,\x61-\x7A])");
+}
+
+
+function num_zenhan_EUC(&$str) {
+       sub_zenhan_EUC($str, "(\xA3[\xB0-\xB9])");
+}
+
+function num_hanzen_EUC(&$str) {
+       sub_hanzen_EUC($str, "([\x30-\x39])");
+}
+
+function alphanum_zenhan_EUC(&$str) {
+       sub_zenhan_EUC($str, "(\xa1[\xa4,\xa5,\xa7-\xaa,\xb0,\xb2,\xbf,\xc3,\xca,\xcb,\xce-\xd1,\xdc,\xdd,\xe1,\xe3,\xe4,\xf0,\xf3-\xf7]|\xA3[\xC1-\xFA]|\xA3[\xB0-\xB9])");
+}
+
+function alphanum_hanzen_EUC(&$str) {
+       sub_hanzen_EUC($str, "([\\\x21,\\\x23-\\\x26,\\\x28-\\\x5B,\\\x5D-\\\x7D])");
+}
+
+
+function space_zenhan_EUC(&$str) {
+       sub_zenhan_EUC($str, "(\xA1\xA1)");
+}
+
+function space_hanzen_EUC(&$str) {
+       sub_hanzen_EUC($str, "(\x20)");
+}
+
+function katakana_zenhan_EUC(&$str) {
+global $kana_zenhan_convert, $special_zenhan_convert;
+
+       $match = "\xa5([\xa1-\xf4])|\xa1([\xa2,\xa3,\xa6,\xab,\xac,\xbc,\xd6,\xd7])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0x8e) . $kana_zenhan_convert[$num];
+               elseif ($num = ord($chars[2][$i])) //\94¼\8ap\95Ï\8a·\89Â\94\\82È\93Á\8eê\95\8e\9a\82É\83}\83b\83`\82µ\82½\8fê\8d\87
+                       $str .= chr(0x8e) . $special_zenhan_convert[$num];
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function hiragana_zenhan_EUC(&$str) {
+global $kana_zenhan_convert, $special_zenhan_convert;
+
+       $match = "\xa4([\xa1-\xf4])|\xa1([\xa2,\xa3,\xa6,\xab,\xac,\xbc,\xd6,\xd7])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\82©\82È\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0x8e) . $kana_zenhan_convert[$num];
+               elseif ($num = ord($chars[2][$i])) //\94¼\8ap\95Ï\8a·\89Â\94\\82È\93Á\8eê\95\8e\9a\82É\83}\83b\83`\82µ\82½\8fê\8d\87
+                       $str .= chr(0x8e) . $special_zenhan_convert[$num];
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function katakana_hanzen1_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82·\82é\95û
+global $kana_zenhan_convert, $special_zenhan_convert;
+
+       $match = "\x8e((?:[\xb3,\xb6-\xc4,\xca-\xce]\x8e\xde)|(?:[\xca-\xce]\x8e\xdf))|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";
+               //\91÷\93_\82â\94¼\91÷\93_\82Í\88ê\8f\8f\82É\83}\83b\83`\83\93\83O
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($chars[1][$i]) //\91÷\89¹\81C\94¼\91÷\89¹\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0xa5).chr(array_search($chars[1][$i], $kana_zenhan_convert));
+               elseif ($chars[2][$i]) //\82»\82Ì\91¼\82Ì\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       if ($num = array_search($chars[2][$i], $kana_zenhan_convert))
+                               $str .= chr(0xa5).chr($num);
+                       else
+                               $str .= chr(0xa1).chr(array_search($chars[2][$i], $special_zenhan_convert));
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function hiragana_hanzen1_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82·\82é\95û
+global $kana_zenhan_convert, $special_zenhan_convert;
+
+       $match = "\x8e((?:[\xb6-\xc4,\xca-\xce]\x8e\xde)|(?:[\xca-\xce]\x8e\xdf))|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";
+               //\91÷\93_\82â\94¼\91÷\93_\82Í\88ê\8f\8f\82É\83}\83b\83`\83\93\83O
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($chars[1][$i]) //\91÷\89¹\81C\94¼\91÷\89¹\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0xa4).chr(array_search($chars[1][$i], $kana_zenhan_convert));
+               elseif ($chars[2][$i]) //\82»\82Ì\91¼\82Ì\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       if ($num = array_search($chars[2][$i], $kana_zenhan_convert))
+                               $str .= chr(0xa4).chr($num);
+                       else
+                               $str .= chr(0xa1).chr(array_search($chars[2][$i], $special_zenhan_convert));
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function katakana_hanzen2_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82µ\82È\82¢\95û
+global $kana_zenhan_convert, $special_zenhan_convert;
+
+       $match = "[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($chars[1][$i]) //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       if ($num = array_search($chars[1][$i], $kana_zenhan_convert))
+                               $str .= chr(0xa5).chr($num);
+                       else
+                               $str .= chr(0xa1).chr(array_search($chars[1][$i], $special_zenhan_convert));
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function hiragana_hanzen2_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82µ\82È\82¢\95û
+global $kana_zenhan_convert, $special_zenhan_convert;
+
+       $match = "[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($chars[1][$i]) //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       if ($num = array_search($chars[1][$i], $kana_zenhan_convert))
+                               $str .= chr(0xa4).chr($num);
+                       else
+                               $str .= chr(0xa1).chr(array_search($chars[1][$i], $special_zenhan_convert));
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function katakana_hiragana_EUC(&$str) {
+
+       $match = "\xa5([\xa1-\xf3])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0xa4) . chr($num);
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function hiragana_katakana_EUC(&$str) {
+
+       $match = "\xa4([\xa1-\xf4])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0xa5) . chr($num);
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function mb_convert_kana( $str, $option='KV', $encoding = '')
+{
+       $encoding = mb_detect_encoding($str, $encoding);
+       $str = mb_convert_encoding($str, 'EUC-JP', $encoding);
+
+       if (strstr($option, "r")) alpha_zenhan_EUC($str);
+       if (strstr($option, "R")) alpha_hanzen_EUC($str);
+       if (strstr($option, "n")) num_zenhan_EUC($str);
+       if (strstr($option, "N")) num_hanzen_EUC($str);
+       if (strstr($option, "a")) alphanum_zenhan_EUC($str);
+       if (strstr($option, "A")) alphanum_hanzen_EUC($str);
+       if (strstr($option, "s")) space_zenhan_EUC($str);
+       if (strstr($option, "S")) space_hanzen_EUC($str);
+       if (strstr($option, "k")) katakana_zenhan_EUC($str);
+       if (strstr($option, "K")) {
+               if (strstr($option, "V"))
+                       katakana_hanzen1_EUC($str);
+               else
+                       katakana_hanzen2_EUC($str);
+       }
+       if (strstr($option, "H")) {
+               if (strstr($option, "V"))
+                       hiragana_hanzen1_EUC($str);
+               else
+                       hiragana_hanzen2_EUC($str);
+       }
+       if (strstr($option, "h")) hiragana_zenhan_EUC($str);
+       if (strstr($option, "c")) katakana_hiragana_EUC($str);
+       if (strstr($option, "C")) hiragana_katakana_EUC($str);
+
+       $str = mb_convert_encoding($str, $encoding, 'EUC-JP');
+       return $str;
+}
+
+function mb_send_mail($to, $subject, $message , $additional_headers, $additional_parameter)
+{
+       if (!_is_JIS($subject)) 
+               $subject =mb_encode_mimeheader($subject);
+       else {
+               $tmp = mb_internal_encoding();
+               mb_internal_encoding('iso-2022-jp');
+               $subject =mb_encode_mimeheader($subject);
+               mb_internal_encoding($tmp);
+       }
+       if (!_is_JIS($message))
+               $message = mb_convert_encoding($message, "iso-2022-jp", mb_internal_encoding());
+       $additional_headers .= 
+       "\r\nMime-Version: 1.0\r\nContent-Type: text/plain; charset=ISO-2022-JP\r\nContent-Transfer-Encoding: 7bit";
+       mail($to, $subject, $message, $additional_headers, $additional_parameter); 
+       
+}
+
+
+function mb_detect_order($encoding_list = '')
+{
+       global $_detect_order, $_mb_encoding;
+       
+       if ($encoding_list) {
+               if (is_string($encoding_list)) {
+                       $encoding_list = strtoupper($encoding_list);
+                       $encoding_list = split(', *', $encoding_list);
+               }
+               foreach($encoding_list as $encode)
+                       if (!array_key_exists($encode, $_mb_encoding)) return FALSE;
+               $_detect_order = $encoding_list;
+               return TRUE;
+       }
+       return $_detect_order;
+}
+
+function _is_Ascii(&$str)
+{
+       return (!ereg("[\x80-\xFF]", $str) && !ereg("\x1B", $str));
+}
+
+function _is_JIS(&$str)
+{
+       return (!ereg("[\x80-\xFF]", $str) && ereg("\x1B", $str));
+}
+
+function _is_SJIS(&$str)
+{
+       $sjis_match = 
+       "[\x01-\x7F]|[\xA0-\xDF]|[\x81-\xFC][\x40-\xFC]";
+       return (preg_match("/^($sjis_match)+$/", $str) == 1);
+}
+
+function _is_EUCJP(&$str)
+{
+       $euc_match = 
+       "[\x01-\x7F]|\x8E[\xA0-\xDF]|\x8F[xA1-\xFE][\xA1-\xFE]|[\xA1-\xFE][\xA1-\xFE]";
+       return (preg_match("/^($euc_match)+$/", $str) == 1);
+}
+
+function _is_UTF8(&$str)
+{
+       $utf8_match = 
+       "[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]";
+       return (preg_match("/^($utf8_match)+$/", $str) == 1);
+}
+
+function mb_detect_encoding( $str , $encoding_list = '')
+{
+       global $_mb_encoding;
+
+       if ($encoding_list == '') 
+                       $encoding_list = mb_detect_order();
+       if (!is_array($encoding_list)) {
+               $encoding_list = strtoupper($encoding_list);
+               if ($encoding_list == 'AUTO') {
+                       $encoding_list = mb_detect_order();
+               } else {
+                       $encoding_list = split(', *', $encoding_list);
+               }
+       }
+       foreach($encoding_list as $encode) {
+               switch ($_mb_encoding[$encode]) {
+                       case 0 : //ascii
+                               if (_is_ASCII($str)) return 'ASCII';
+                               break;
+                       case 1 : //euc-jp
+                               if (_is_EUCJP($str)) return 'EUC-JP';
+                               break;
+                       case 2 : //shift-jis
+                               if (_is_SJIS($str)) return 'SJIS';
+                               break;
+                       case 3 : //jis
+                               if (_is_JIS($str)) return 'JIS';
+                               break;
+                       case 4 : //utf-8
+                               if (_is_UTF8($str)) return 'UTF-8';
+                               break;
+               }
+       }
+       return $encode;
+}
+
+function mb_strlen ( $str , $encoding='')
+{
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
+
+       $encoding = _get_encoding($str, $encoding);
+
+       switch ($_mb_encoding[$encoding]) {
+               case 1 : //euc-jp
+                       return preg_match_all("/$euc_match/", $str, $arr);
+               case 0 : //ascii
+               case 4 : //utf-8
+                       return preg_match_all("/$utf8_match/", $str, $arr);
+               case 2 : //shift-jis
+                       return preg_match_all("/$sjis_match/", $str, $arr);
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       return preg_match_all("/$sjis_match/", $str, $arr);
+       }
+}
+
+function mb_strwidth( $str, $encoding='')
+{
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
+
+       $encoding = _get_encoding($str, $encoding);
+       switch ($_mb_encoding[$encoding]) {
+               case 1 : //euc-jp
+                       $max = $len = preg_match_all("/$euc_match/", $str, $arr);
+                       $len;
+                       for ($i=0; $i < $max; ++$i)
+                               if ($arr[1][$i]) ++$len;
+                       return $len;
+               case 0 : //ascii
+               case 4 : //utf-8
+                       $max = $len = preg_match_all("/$utf8_match/", $str, $arr);
+                       for ($i=0; $i < $max; ++$i) {
+                               $ucs2 = _utf8ucs2($arr[0][$i]);
+                               if (((0x2000 <= $ucs2) && ($ucs2 <= 0xff60)) || (0xffa0 <= $ucs2))
+                                       ++$len;
+                       }
+                       return $len;
+               case 2 : //shift-jis
+                       $max = $len = preg_match_all("/$sjis_match/", $str, $arr);
+                       for ($i=0; $i < $max; ++$i)
+                               if ($arr[1][$i]) ++$len;
+                       return $len;
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       $max = $len = preg_match_all("/$sjis_match/", $str, $arr);
+                       for ($i=0; $i < $max; ++$i)
+                               if ($arr[1][$i]) ++$len;
+                       return $len;
+       }
+}
+
+function mb_strimwidth( $str, $start, $width, $trimmarker , $encoding = '')
+{
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
+
+       $encoding = _get_encoding($str, $encoding);
+       $str = mb_substr($str, $start, 'notnumber', $encoding);
+       if (($len = mb_strwidth($str,$encoding)) <= $width)
+               return $str;
+       $trimwidth = mb_strwidth($trimmarker,$encoding);
+       $width -= $trimwidth;
+       if ($width <= 0) return $trimmarker;
+       
+       switch ($_mb_encoding[$encoding]) {
+               case 1 : //euc-jp
+                       preg_match_all("/$euc_match/", $str, $arr);
+                       $i = 0;
+                       while(TRUE) {
+                               if ($arr[1][$i])
+                                       $width -= 2;
+                               else
+                                       --$width;
+                               if ($width<0) break;
+                               ++$i;
+                       }
+                       $arr[0] = array_slice($arr[0], 0, $i);
+                       return implode("", $arr[0]).$trimmarker;
+               case 0 : //ascii
+               case 4 : //utf-8
+                       preg_match_all("/$utf8_match/", $str, $arr);
+                       $i = 0;
+                       while(TRUE) {
+                               $ucs2 = _utf8ucs2($arr[0][$i]);
+                               if (((0x2000 <= $ucs2) && ($ucs2 <= 0xff60)) || (0xffa0 <= $ucs2))
+                                       $width -= 2;
+                               else
+                                       --$width;
+                               if ($width<0) break;
+                               ++$i;
+                       }
+                       $arr[0] = array_slice($arr[0], 0, $i);
+                       return implode("", $arr[0]).$trimmarker;
+               case 2 : //shift-jis
+                       preg_match_all("/$sjis_match/", $str, $arr);
+                       $i = 0;
+                       while(TRUE) {
+                               if ($arr[1][$i])
+                                       $width -= 2;
+                               else
+                                       --$width;
+                               if ($width<0) break;
+                               ++$i;
+                       }
+                       $arr[0] = array_slice($arr[0], 0, $i);
+                       return implode("", $arr[0]).$trimmarker;
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       $trimmarker = mb_convert_encoding($trimmarker, 'SJIS', 'JIS');
+                       preg_match_all("/$sjis_match/", $str, $arr);
+                       $i = 0;
+                       while(TRUE) {
+                               if ($arr[1][$i])
+                                       $width -= 2;
+                               else
+                                       --$width;
+                               if ($width<0) break;
+                               ++$i;
+                       }
+                       $arr[0] = array_slice($arr[0], 0, $i);
+                       return mb_convert_encoding(implode("", $arr[0]).$trimmarker,'JIS','SJIS');
+       }
+}
+
+
+function mb_substr ( $str, $start , $length='notnumber' , $encoding='')
+{
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
+
+       $encoding = _get_encoding($str, $encoding);
+
+       switch ($_mb_encoding[$encoding]) {
+               case 1 : //euc-jp
+                       preg_match_all("/$euc_match/", $str, $arr);
+                       break;
+               case 0 : //ascii
+               case 4 : //utf-8
+                       preg_match_all("/$utf8_match/", $str, $arr);
+                       break;
+               case 2 : //shift-jis
+                       preg_match_all("/$sjis_match/", $str, $arr);
+                       break;
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       preg_match_all("/$sjis_match/", $str, $arr);
+       }
+       if (is_int($length))
+               $arr[0] = array_slice($arr[0], $start, $length);
+       else
+               $arr[0] = array_slice($arr[0], $start);
+       $str = implode("", $arr[0]);
+       if ($_mb_encoding[$encoding] == 3)
+               $str = mb_convert_encoding($str, 'JIS', 'SJIS');
+       return $str;
+}
+
+function _sub_strcut($arr, $start, $length) {
+       $max = count($arr[0]);
+       $s = ''; $counter = 0;
+       for ($i = 0; $i < $max; ++$i) {
+               $counter += strlen($arr[0][$i]);
+               if ($counter > $start) {
+                       if ($length == 0) {
+                               for ($j = $i; $j < $max; ++$j)
+                                       $s .= $arr[0][$j];
+                               return $s;
+                       }
+                       for ($j = $i, $len = 0; $j < $max; ++$j) {
+                               $len += strlen($arr[0][$j]);
+                               if ($len <= $length)
+                                       $s .= $arr[0][$j];
+                       }
+                       return $s;
+               }
+       }
+       return $s;
+}
+
+
+function mb_strcut ( $str, $start , $length=0 , $encoding = '')
+{
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
+       
+       
+       $encoding = _get_encoding($str, $encoding);
+
+       switch ($_mb_encoding[$encoding]) {
+               case 1 : //euc-jp
+                       preg_match_all("/$euc_match/", $str, $arr);
+                       return _sub_strcut($arr, $start, $length);
+               case 0 : //ascii
+                       return substr($str, $start, $length);
+               case 4 : //utf-8
+                       preg_match_all("/$utf8_match/", $str, $arr);
+                       return _sub_strcut($arr, $start, $length);
+               case 2 : //shift-jis
+                       preg_match_all("/$sjis_match/", $str, $arr);
+                       return _sub_strcut($arr, $start, $length);
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       preg_match_all("/$sjis_match/", $str, $arr);
+                       $sub = _sub_strcut($arr, $start, $length);
+                       return mb_convert_encoding($sub, 'JIS', 'SJIS');
+       }
+}
+
+function _sub_strrpos($ar_haystack, $ar_needle)
+{
+       $max_h = count($ar_haystack) - 1;
+       $max_n = count($ar_needle) - 1;
+       for ($i = $max_h; $i >= $max_n; --$i) {
+               if ($ar_haystack[$i] == $ar_needle[$max_n]) {
+                       $match = TRUE;
+                       for ($j = 1; $j <= $max_n; ++$j)
+                               if ($ar_haystack[$i-$j] != $ar_needle[$max_n-$j]) {
+                                       $match = FALSE;
+                                       break;
+                               }
+                       if ($match) return $i - $max_n;
+               }
+       }
+       return FALSE;
+}
+
+function mb_strrpos ( $haystack, $needle , $encoding = '')
+{
+       
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
+       
+       $encoding = _get_encoding($haystack, $encoding);
+
+       switch ($_mb_encoding[$encoding]) {
+               case 1 : //euc-jp
+                       preg_match_all("/$euc_match/", $haystack, $ar_h);
+                       preg_match_all("/$euc_match/", $needle, $ar_n);
+                       return _sub_strrpos($ar_h[0], $ar_n[0]);
+               case 0 : //ascii
+               case 4 : //utf-8
+                       preg_match_all("/$utf8_match/", $haystack, $ar_h);
+                       preg_match_all("/$utf8_match/", $needle, $ar_n);
+                       return _sub_strrpos($ar_h[0], $ar_n[0]);
+               case 2 : //shift-jis
+                       preg_match_all("/$sjis_match/", $haystack, $ar_h);
+                       preg_match_all("/$sjis_match/", $needle, $ar_n);
+                       return _sub_strrpos($ar_h[0], $ar_n[0]);
+               case 3 : //jis
+                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');
+                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');
+                       preg_match_all("/$sjis_match/", $haystack, $ar_h);
+                       preg_match_all("/$sjis_match/", $needle, $ar_n);
+                       return _sub_strrpos($ar_h[0], $ar_n[0]);
+       }
+}
+
+function _sub_strpos($ar_haystack, $ar_needle, $offset)
+{
+       $max_n = count($ar_needle) - 1;
+       $max_h = count($ar_haystack) - count($ar_needle);
+       for ($i = $offset; $i <= $max_h; ++$i) {
+               for ($j = 0; $j <= $max_n; ++$j) {
+                       $match = TRUE;
+                       if ($ar_haystack[$i+$j] != $ar_needle[$j]) {
+                               $match = FALSE;
+                               break;
+                       }
+               }
+               if ($match) return $i;
+       }
+       return FALSE;
+}
+
+function mb_strpos ( $haystack, $needle , $offset = 0, $encoding = '')
+{
+       
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
+       
+       $encoding = _get_encoding($haystack, $encoding);
+
+       switch ($_mb_encoding[$encoding]) {
+               case 1 : //euc-jp
+                       preg_match_all("/$euc_match/", $haystack, $ar_h);
+                       preg_match_all("/$euc_match/", $needle, $ar_n);
+                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);
+               case 0 : //ascii
+               case 4 : //utf-8
+                       preg_match_all("/$utf8_match/", $haystack, $ar_h);
+                       preg_match_all("/$utf8_match/", $needle, $ar_n);
+                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);
+               case 2 : //shift-jis
+                       preg_match_all("/$sjis_match/", $haystack, $ar_h);
+                       preg_match_all("/$sjis_match/", $needle, $ar_n);
+                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);
+               case 3 : //jis
+                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');
+                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');
+                       preg_match_all("/$sjis_match/", $haystack, $ar_h);
+                       preg_match_all("/$sjis_match/", $needle, $ar_n);
+                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);
+       }
+}
+
+function _sub_substr_count($ar_haystack, $ar_needle)
+{
+       $matches = 0;
+       $max_n = count($ar_needle) - 1;
+       $max_h = count($ar_haystack) - count($ar_needle);
+       for ($i = 0; $i <= $max_h; ++$i) {
+               for ($j = 0; $j <= $max_n; ++$j) {
+                       $match = TRUE;
+                       if ($ar_haystack[$i+$j] != $ar_needle[$j]) {
+                               $match = FALSE;
+                               break;
+                       }
+               }
+               if ($match) ++$matches;
+       }
+       return $matches;
+}
+
+function mb_substr_count($haystack, $needle , $encoding = '')
+{
+       
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match;
+       
+       $encoding = _get_encoding($haystack, $encoding);
+
+       switch ($_mb_encoding[$encoding]) {
+               case 1 : //euc-jp
+                       preg_match_all("/$euc_match/", $haystack, $ar_h);
+                       preg_match_all("/$euc_match/", $needle, $ar_n);
+                       return _sub_substr_count($ar_h[0], $ar_n[0]);
+               case 0 : //ascii
+               case 4 : //utf-8
+                       preg_match_all("/$utf8_match/", $haystack, $ar_h);
+                       preg_match_all("/$utf8_match/", $needle, $ar_n);
+                       return _sub_substr_count($ar_h[0], $ar_n[0]);
+               case 2 : //shift-jis
+                       preg_match_all("/$sjis_match/", $haystack, $ar_h);
+                       preg_match_all("/$sjis_match/", $needle, $ar_n);
+                       return _sub_substr_count($ar_h[0], $ar_n[0]);
+               case 3 : //jis
+                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');
+                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');
+                       preg_match_all("/$sjis_match/", $haystack, $ar_h);
+                       preg_match_all("/$sjis_match/", $needle, $ar_n);
+                       return _sub_substr_count($ar_h[0], $ar_n[0]);
+       }
+}
+
+
+/******************
+mb_convert_variables
+*******************/
+if (!$ini_file['convert_variables_arrayonly']) {
+       function mb_convert_variables($to_encoding, $from_encoding, $s1, $s2='',$s3='',$s4='',$s5='',$s6='',$s7='', $s8='',$s9='', $s10='')
+       {
+               if (is_array($s1)) {
+                       $st = '';
+                       foreach($s1 as $s) $st .= $s;
+                       if (!($encode = mb_detect_encoding($st, $from_encoding)))
+                               return FALSE;
+                       reset($s1);
+                       while (list ($key, $val) = each ($s1)) {
+                               $s1[$key] = mb_convert_encoding($val, $to_encoding, $encode);
+                       }
+                       return $encode;
+               }
+           $st = $s1.$s2.$s3.$s4.$s5.$s6.$s7.$s8.$s9.$s10;
+           if (!($encode = mb_detect_encoding($st, $from_encoding)))
+               return FALSE;
+           $s1 = mb_convert_encoding($s1, $to_encoding, $encode);
+           $s2 = mb_convert_encoding($s2, $to_encoding, $encode);
+           $s3 = mb_convert_encoding($s3, $to_encoding, $encode);
+           $s4 = mb_convert_encoding($s4, $to_encoding, $encode);
+           $s5 = mb_convert_encoding($s5, $to_encoding, $encode);
+           $s6 = mb_convert_encoding($s6, $to_encoding, $encode);
+           $s7 = mb_convert_encoding($s7, $to_encoding, $encode);
+           $s8 = mb_convert_encoding($s8, $to_encoding, $encode);
+           $s9 = mb_convert_encoding($s9, $to_encoding, $encode);
+           $s10 = mb_convert_encoding($s10, $to_encoding, $encode);
+           return $encode;
+       }
+} else {
+       function mb_convert_variables($to_encoding, $from_encoding, &$arr)
+       {
+               $st = '';
+               foreach($arr as $s) $st .= $s;
+               if (!($encode = mb_detect_encoding($st, $from_encoding)))
+                       return FALSE;
+               reset($arr);
+               while (list ($key, $val) = each ($arr)) {
+                       $arr[$key] = mb_convert_encoding($val, $to_encoding, $encode);
+               }
+               return $encode;
+       }
+}
+
+function mb_preferred_mime_name ($encoding)
+{
+       global $_mb_encoding;
+       
+       $encoding = strtoupper($encoding);
+       
+       switch ($_mb_encoding[$encoding]) {
+               case 0 : //ascii
+                       return 'US-ASCII';
+               case 1 : //euc-jp
+                       return 'EUC-JP';
+               case 2 : //shift-jis
+                       return 'Shift_JIS';
+               case 3 : //jis
+                       return 'ISO-2022-JP';
+               case 4 : //utf-8
+                       return 'UTF-8';
+       }
+}
+
+function mb_decode_mimeheader($str)
+{
+       $lines = preg_split("/(\r\n|\r|\n)( *)/", $str);
+       $s = '';
+       foreach ($lines as $line) {
+               if ($line != "") {
+                       $line = preg_replace("/<[\w\-+\.]+\@[\w\-+\.]+>/","", $line); //\83\81\81[\83\8b\81E\83A\83h\83\8c\83X\95\94\82ð\8fÁ\82·
+                       $matches = preg_split("/=\?([^?]+)\?(B|Q)\?([^?]+)\?=/", $line, -1, PREG_SPLIT_DELIM_CAPTURE);
+                       for ($i = 0; $i < count($matches)-1; $i+=4) {
+                               if (!preg_match("/^[ \t\r\n]*$/", $matches[$i]))
+                                       $s .= $matches[$i];
+                               if ($matches[$i+2] == 'B')
+                                       $s .= mb_convert_encoding(base64_decode($matches[$i+3]), 
+                                                                                       mb_internal_encoding(), $matches[$i+1]);
+                               else
+                                       $s .= mb_convert_encoding(quoted_printable_decode($matches[$i+3]), 
+                                                                                       mb_internal_encoding(), $matches[$i+1]);
+                       }
+                       if (!preg_match("/^[ \t\r\n]*$/", $matches[$i]))
+                                       $s .= $matches[$i];
+               }
+       }
+       return $s;
+}
+
+function _sub_qponechar($str, &$len)
+{
+       $all = unpack("C*", $str);
+       $s = ''; $len = 0;
+       foreach($all as $char) {
+               if (((ord('A') <= $char) && ($char <= ord('Z'))) ||
+                       ((ord('a') <= $char) && ($char <= ord('z')))) {
+                       $s .= chr($char);
+                       ++$len;
+               } else {
+                       $s .= '='.sprintf("%2X",$char);
+                       $len += 3;
+               }
+       }
+       return $s;
+}
+
+function _sub_quoted_printable_encode($str, $encoding, $maxline, $linefeed)
+{
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match, $jis_match;
+       switch ($_mb_encoding[$encoding]) {
+               case 0 : //ascii
+                       $allchars[0] = unpack("c*", $str);
+                       $max = count($allchars[0]);
+                       break;
+               case 1 : //euc-jp
+                       $max = preg_match_all("/$euc_match/", $str, $allchars);
+                       break;
+               case 2 : //shift-jis
+                       $max = preg_match_all("/$sjis_match/", $str, $allchars);
+                       break;
+               case 4 : //utf-8
+                       $max = preg_match_all("/$utf8_match/", $str, $allchars);
+                       break;
+               case 3 : //jis
+                       $max = preg_match_all("/$jis_match/", $str, $allchunks, PREG_SET_ORDER);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð
+                       $st = ''; // quoted printable\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ
+                       $len = $maxline;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94
+                       $needterminate = FALSE; //\8dÅ\8cã\82É\83G\83X\83P\81[\83v\83V\81[\83P\83\93\83X\82ª\95K\97v\82©\82Ç\82¤\82©
+                       for ($i = 0; $i < $max; ++$i) {
+                               if (ord($allchunks[$i][1])) { //\89p\90\94\82É\83}\83b\83`
+                                       if ($needterminate) {
+                                               $st .= '=1B=28B';
+                                               $len -= 7;
+                                       }
+                                       $tmparr = unpack("C*", $allchunks[$i][1]);
+                                       foreach ($tmparr as $char) {
+                                               $tmp = _sub_qponechar(chr($char), $l);
+                                               if ($len < $l) {
+                                                       $st .= $linefeed;
+                                                       $len = $maxline;
+                                               }
+                                               $st .= $tmp;
+                                               $len -= $l;
+                                       } 
+                                       $needterminate = FALSE;
+                               } elseif (ord($allchunks[$i][2])) { //\8a¿\8e\9a\82É\83}\83b\83`
+                                       $maxchars = preg_match_all("/../",substr($allchunks[$i][0], 3),$allchars);
+                                       $tmp = _sub_qponechar($allchars[0][0], $l);
+                                       if ($len < 14 + $l) {
+                                               if ($needterminate)
+                                                       $st .= '=1B=28B';
+                                               $st .= $linefeed;
+                                               $len = $maxline;
+                                       }
+                                       $st .= '=1B=24B';
+                                       $len -= 7;
+                                       for ($j = 0; $j < $maxchars; ++$j) {
+                                               $tmp = _sub_qponechar($allchars[0][$j], $l);
+                                               if ($len < $l + 7) {
+                                                       $st .= '=1B=28B'.$linefeed.'=1B=24B';
+                                                       $len = $maxline-7;
+                                               }
+                                               $st .= $tmp;
+                                               $len -= $l;
+                                       }
+                                       $needterminate = TRUE;
+                                       
+                               } elseif (ord($allchunks[$i][3])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                                       $max = preg_match_all("/./",$allchunks[$i][3],$allchars);
+                                       $tmp = _sub_qponechar($allchars[0][0], $l);
+                                       if ($len < 14 + $l) {
+                                               if ($needterminate)
+                                                       $st .= '=1B=28B';
+                                               $st .= $linefeed;
+                                               $len = $maxline;
+                                       }
+                                       $st .= '=1B=28I';
+                                       $len -= 7;
+                                       for ($j == 0; $j < $max; ++$j) {
+                                               $tmp = _sub_qponechar($allchars[0][$j], $l);
+                                               if ($len < $l + 7) {
+                                                       $st .= '=1B=28B'.$linefeed.'=1B=28I';
+                                                       $len = $maxline-7;
+                                               }
+                                               $st .= $tmp;
+                                               $len -= $l;
+                                       }
+                                       $needterminate = TRUE;
+                               }
+                       }
+                       if ($needterminate) $st .= '=1B=28B';
+                       $st .= $linefeed;
+                       return $st;
+       }
+       $st = ''; // quoted printable\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ
+       $len = $maxline;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94
+       for ($i = 0; $i < $max; ++$i) {
+               $tmp = _sub_qponechar($allchars[0][$i], $l);
+               if ($l > $len) {
+                       $st .= $linefeed;
+                       $len = $maxline;
+               }
+               $st .= $tmp;
+               $len -= $l;
+       }
+       $st .= $linefeed;
+       return $st;
+}
+
+function _sub_encode_base64($str, $encoding, $maxline , $linefeed)
+{
+       global $_mb_encoding, $euc_match, $utf8_match, $sjis_match, $jis_match;
+       switch ($_mb_encoding[$encoding]) {
+               case 0 : //ascii
+                       return chunk_split( base64_encode($str) , $maxline, $linefeed);
+               case 1 : //euc-jp
+                       $max = preg_match_all("/$euc_match/", $str, $allchars);
+                       break;
+               case 2 : //shift-jis
+                       $max = preg_match_all("/$sjis_match/", $str, $allchars);
+                       break;
+               case 4 : //utf-8
+                       $max = preg_match_all("/$utf8_match/", $str, $allchars);
+                       break;
+               case 3 : //jis
+                       $max = preg_match_all("/$jis_match/", $str, $allchunks, PREG_SET_ORDER);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð
+                       $st = ''; // BASE64\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ
+                       $maxbytes = floor($maxline * 3 / 4);  //1\8ds\82É\95Ï\8a·\89Â\94\\82È\83o\83C\83g\90\94
+                       $len = $maxbytes;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94
+                       $line = '';  //1\8ds\95ª\82Ì\95Ï\8a·\91O\82Ì\95\8e\9a\97ñ
+                       $needterminate = FALSE; //\8dÅ\8cã\82É\83G\83X\83P\81[\83v\83V\81[\83P\83\93\83X\82ª\95K\97v\82©\82Ç\82¤\82©
+                       for ($i = 0; $i < $max; ++$i) {
+                               if (ord($allchunks[$i][1])) { //\89p\90\94\82É\83}\83b\83`
+                                       if ($needterminate) {
+                                               $line .= chr(0x1B).'(B';
+                                               $len -= 3;
+                                       }
+                                       $tmpstr = $allchunks[$i][1];  //\92Ç\89Á\82·\82é\95\8e\9a\97ñ
+                                       $l = strlen($tmpstr);  //\92Ç\89Á\82·\82é\95\8e\9a\97ñ\82Ì\92·\82³
+                                       while ($l > $len) {
+                                               $line .= substr($tmpstr, 0, $len);
+                                               $st .= base64_encode($line).$linefeed;
+                                               $l -= $len;
+                                               $tmpstr = substr($tmpstr, $len);
+                                               $len = $maxbytes;
+                                               $line = '';
+                                       } 
+                                       $line .= $tmpstr;
+                                       $len -= $l;
+                                       $needterminate = FALSE;
+                               } elseif (ord($allchunks[$i][2])) { //\8a¿\8e\9a\82É\83}\83b\83`
+                                       $tmpstr = substr($allchunks[$i][0], 3);
+                                       if ($len < 8) { //\95\8e\9a\82ð\92Ç\89Á\82·\82é\82Ì\82É\8dÅ\92á8\83o\83C\83g\95K\97v\82È\82Ì\82Å
+                                               if ($needterminate)
+                                                       $line .= chr(0x1B).'(B';
+                                               $st .= base64_encode($line).$linefeed;
+                                               $len = $maxbytes;
+                                               $line = '';
+                                       }
+                                       $l = strlen($tmpstr);
+                                       $line .= chr(0x1B).'$B';
+                                       $len -= 3; 
+                                       while ($l > $len-3) {
+                                               $add = floor(($len-3) / 2) * 2;
+                                               if ($add == 0) break;
+                                               $line .= substr($tmpstr, 0, $add).chr(0x1B).'(B';
+                                               $st .= base64_encode($line).$linefeed;
+                                               $l -= $add;
+                                               $tmpstr = substr($tmpstr, $add);
+                                               $len = $maxbytes-3;
+                                               $line = chr(0x1B).'$B';
+                                       } 
+                                       $line .= $tmpstr;
+                                       $len -= $l;
+                                       $needterminate = TRUE;
+                                       
+                               } elseif (ord($allchunks[$i][3])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                                       $tmpstr = $allchunks[$i][3];
+                                       if ($len < 7) { //\95\8e\9a\82ð\92Ç\89Á\82·\82é\82Ì\82É\8dÅ\92á7\83o\83C\83g\95K\97v\82È\82Ì\82Å
+                                               if ($needterminate)
+                                                       $line .= chr(0x1B).'(B';
+                                               $st .= base64_encode($line).$linefeed;
+                                               $len = $maxbytes;
+                                               $line = '';
+                                       }
+                                       $l = strlen($tmpstr);
+                                       $line .= chr(0x1B).'(I';
+                                       $len -= 3; 
+                                       while ($l > $len-3) {
+                                               $line .= substr($tmpstr, 0, $len-3).chr(0x1B).'(B';
+                                               $st .= base64_encode($line).$linefeed;
+                                               $l -= $len;
+                                               $tmpstr = substr($tmpstr, $len-3);
+                                               $len = $maxbytes-3;
+                                               $line = chr(0x1B).'(I';
+                                       } 
+                                       $line .= $tmpstr;
+                                       $len -= $l;
+                                       $needterminate = TRUE;
+                               }
+                       }
+                       if ($needterminate) $line .= chr(0x1B).'(B';
+                       $st .= base64_encode($line).$linefeed;
+                       return $st;
+       }
+       $st = ''; // BASE64\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ
+       $maxbytes = floor($maxline * 3 / 4);  //1\8ds\82É\95Ï\8a·\89Â\94\\82È\83o\83C\83g\90\94
+       $len = $maxbytes;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94
+       $line = '';  //1\8ds\95ª\82Ì\95Ï\8a·\91O\82Ì\95\8e\9a\97ñ
+       for ($i = 0; $i < $max; ++$i) {
+               $l = strlen($allchars[0][$i]);
+               if ($l > $len) {
+                       $st .= base64_encode($line).$linefeed;
+                       $len = $maxbytes;
+                       $line = '';
+               }
+               $line .= $allchars[0][$i];
+               $len -= $l;
+       }
+       $st .= base64_encode($line).$linefeed;
+       return $st;
+}
+
+function mb_encode_mimeheader( $str, $encoding = "ISO-2022-JP", $transfer_encoding = "B", $linefeed = "\r\n")
+{
+       global $_mb_encoding;
+       if ($transfer_encoding == "b") $transfer_encoding = "B";
+       if ($transfer_encoding <> "B") $transfer_encoding = "Q";
+       $encoding = strtoupper($encoding);
+       
+       $head = '=?' . mb_preferred_mime_name ($encoding) . '?'.$transfer_encoding.'?';
+       $str = mb_convert_encoding($str, $encoding, mb_internal_encoding());
+       $length = 76 - strlen($head) - 4;
+       if ($transfer_encoding == "B") {
+        $str = _sub_encode_base64( $str , $encoding, $length, $linefeed);
+       } else {
+               $str = _sub_quoted_printable_encode($str, $encoding, $length, $linefeed);
+       }
+       $ar = explode($linefeed, $str);
+       $s = '';
+       foreach ($ar as $element) {
+               if ($element <> '')
+                       $s .= $head . $element . '?=' .$linefeed;
+       }
+       return $s;
+}
+
+function mb_http_input($type = '')
+{
+       return FALSE;
+}
+
+function mb_http_output($encoding = '')
+{
+       global $ini_file;
+       
+       if ($encoding == '') return $ini_file['http_output'];
+       if (strtolower($encoding) == 'pass') {
+               $ini_file['http_output'] = 'pass';
+               return TRUE;
+       }
+       $ini_file['http_output'] = mb_preferred_mime_name($encoding);
+       return TRUE;
+}
+
+
+function mb_output_handler ( $buffer, $status='')
+{
+       global $ini_file, $tmpstr;
+       if ($ini_file['http_output'] == 'pass')
+               return $buffer;
+       return mb_convert_encoding($buffer, $ini_file['http_output'], mb_internal_encoding());
+}
+
+
+function mb_encode_numericentity($str, $convmap, $encoding="")
+{
+       if (!$encoding) $encoding = mb_internal_encoding();
+       $str = mb_convert_encoding($str, "utf-16", $encoding);
+       $ar = unpack("n*", $str);
+       $s = "";
+       foreach($ar as $char) {
+               $max = count($convmap);
+               for ($i = 0; $i < $max; $i += 4) {
+                       if (($convmap[$i] <= $char) && ($char <= $convmap[$i+1])) {
+                               $char += $convmap[$i+2];
+                               $char &= $convmap[$i+3];
+                               $s .= sprintf("&#%u;", $char);
+                               break;
+                       }
+               }
+               if ($i >= $max) $s .= pack("n*", $char);
+       }
+       return $s;
+}
+
+function mb_decode_numericentity ($str, $convmap, $encoding="")
+{
+       if (!$encoding) $encoding = mb_internal_encoding();
+       $ar = preg_split('/(&#[0-9]+;)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
+       $s = '';
+       $max = count($convmap);
+       foreach($ar as $chunk) {
+               if (preg_match('/&#([0-9]+);/', $chunk, $match)) {
+                       for ($i = 0; $i < $max; $i += 4) {
+                               $num = $match[1] - $convmap[$i+2];
+                               if (($convmap[$i] <= $num) && ($num <= $convmap[$i+1])) {
+                                       $ucs2 = pack('n*', $num);
+                                       $s .= mb_convert_encoding($ucs2, $encoding, 'UTF-16');
+                                       break;
+                               }
+                       }
+                       if ($i >= $max) $s .= $chunk;
+               } else {
+                       $s .= $chunk;
+               }
+       }
+       return $s;
+}
+
+
+function _print_str($str) {
+       $all = unpack("C*", $str);
+       $s = '';
+       foreach($all as $char) {
+               $s .= sprintf(" %2X",$char);
+       }
+       print $s."\n";
+}
+
 ?>
\ No newline at end of file
index ada1bed..70cb336 100755 (executable)
-<?php\r
-$sjistoucs2 = array (\r
-0x8140=>0x3000,\r
-0x8141=>0x3001,\r
-0x8142=>0x3002,\r
-0x8143=>0xFF0C,\r
-0x8144=>0xFF0E,\r
-0x8145=>0x30FB,\r
-0x8146=>0xFF1A,\r
-0x8147=>0xFF1B,\r
-0x8148=>0xFF1F,\r
-0x8149=>0xFF01,\r
-0x814A=>0x309B,\r
-0x814B=>0x309C,\r
-0x814C=>0x00B4,\r
-0x814D=>0xFF40,\r
-0x814E=>0x00A8,\r
-0x814F=>0xFF3E,\r
-0x8150=>0xFFE3,\r
-0x8151=>0xFF3F,\r
-0x8152=>0x30FD,\r
-0x8153=>0x30FE,\r
-0x8154=>0x309D,\r
-0x8155=>0x309E,\r
-0x8156=>0x3003,\r
-0x8157=>0x4EDD,\r
-0x8158=>0x3005,\r
-0x8159=>0x3006,\r
-0x815A=>0x3007,\r
-0x815B=>0x30FC,\r
-0x815C=>0x2015,\r
-0x815D=>0x2010,\r
-0x815E=>0xFF0F,\r
-0x815F=>0xFF3C,\r
-0x8160=>0xFF5E,\r
-0x8161=>0x2225,\r
-0x8162=>0xFF5C,\r
-0x8163=>0x2026,\r
-0x8164=>0x2025,\r
-0x8165=>0x2018,\r
-0x8166=>0x2019,\r
-0x8167=>0x201C,\r
-0x8168=>0x201D,\r
-0x8169=>0xFF08,\r
-0x816A=>0xFF09,\r
-0x816B=>0x3014,\r
-0x816C=>0x3015,\r
-0x816D=>0xFF3B,\r
-0x816E=>0xFF3D,\r
-0x816F=>0xFF5B,\r
-0x8170=>0xFF5D,\r
-0x8171=>0x3008,\r
-0x8172=>0x3009,\r
-0x8173=>0x300A,\r
-0x8174=>0x300B,\r
-0x8175=>0x300C,\r
-0x8176=>0x300D,\r
-0x8177=>0x300E,\r
-0x8178=>0x300F,\r
-0x8179=>0x3010,\r
-0x817A=>0x3011,\r
-0x817B=>0xFF0B,\r
-0x817C=>0xFF0D,\r
-0x817D=>0x00B1,\r
-0x817E=>0x00D7,\r
-0x8180=>0x00F7,\r
-0x8181=>0xFF1D,\r
-0x8182=>0x2260,\r
-0x8183=>0xFF1C,\r
-0x8184=>0xFF1E,\r
-0x8185=>0x2266,\r
-0x8186=>0x2267,\r
-0x8187=>0x221E,\r
-0x8188=>0x2234,\r
-0x8189=>0x2642,\r
-0x818A=>0x2640,\r
-0x818B=>0x00B0,\r
-0x818C=>0x2032,\r
-0x818D=>0x2033,\r
-0x818E=>0x2103,\r
-0x818F=>0xFFE5,\r
-0x8190=>0xFF04,\r
-0x8191=>0xFFE0,\r
-0x8192=>0xFFE1,\r
-0x8193=>0xFF05,\r
-0x8194=>0xFF03,\r
-0x8195=>0xFF06,\r
-0x8196=>0xFF0A,\r
-0x8197=>0xFF20,\r
-0x8198=>0x00A7,\r
-0x8199=>0x2606,\r
-0x819A=>0x2605,\r
-0x819B=>0x25CB,\r
-0x819C=>0x25CF,\r
-0x819D=>0x25CE,\r
-0x819E=>0x25C7,\r
-0x819F=>0x25C6,\r
-0x81A0=>0x25A1,\r
-0x81A1=>0x25A0,\r
-0x81A2=>0x25B3,\r
-0x81A3=>0x25B2,\r
-0x81A4=>0x25BD,\r
-0x81A5=>0x25BC,\r
-0x81A6=>0x203B,\r
-0x81A7=>0x3012,\r
-0x81A8=>0x2192,\r
-0x81A9=>0x2190,\r
-0x81AA=>0x2191,\r
-0x81AB=>0x2193,\r
-0x81AC=>0x3013,\r
-0x81B8=>0x2208,\r
-0x81B9=>0x220B,\r
-0x81BA=>0x2286,\r
-0x81BB=>0x2287,\r
-0x81BC=>0x2282,\r
-0x81BD=>0x2283,\r
-0x81BE=>0x222A,\r
-0x81BF=>0x2229,\r
-0x81C8=>0x2227,\r
-0x81C9=>0x2228,\r
-0x81CA=>0xFFE2,\r
-0x81CB=>0x21D2,\r
-0x81CC=>0x21D4,\r
-0x81CD=>0x2200,\r
-0x81CE=>0x2203,\r
-0x81DA=>0x2220,\r
-0x81DB=>0x22A5,\r
-0x81DC=>0x2312,\r
-0x81DD=>0x2202,\r
-0x81DE=>0x2207,\r
-0x81DF=>0x2261,\r
-0x81E0=>0x2252,\r
-0x81E1=>0x226A,\r
-0x81E2=>0x226B,\r
-0x81E3=>0x221A,\r
-0x81E4=>0x223D,\r
-0x81E5=>0x221D,\r
-0x81E6=>0x2235,\r
-0x81E7=>0x222B,\r
-0x81E8=>0x222C,\r
-0x81F0=>0x212B,\r
-0x81F1=>0x2030,\r
-0x81F2=>0x266F,\r
-0x81F3=>0x266D,\r
-0x81F4=>0x266A,\r
-0x81F5=>0x2020,\r
-0x81F6=>0x2021,\r
-0x81F7=>0x00B6,\r
-0x81FC=>0x25EF,\r
-0x824F=>0xFF10,\r
-0x8250=>0xFF11,\r
-0x8251=>0xFF12,\r
-0x8252=>0xFF13,\r
-0x8253=>0xFF14,\r
-0x8254=>0xFF15,\r
-0x8255=>0xFF16,\r
-0x8256=>0xFF17,\r
-0x8257=>0xFF18,\r
-0x8258=>0xFF19,\r
-0x8260=>0xFF21,\r
-0x8261=>0xFF22,\r
-0x8262=>0xFF23,\r
-0x8263=>0xFF24,\r
-0x8264=>0xFF25,\r
-0x8265=>0xFF26,\r
-0x8266=>0xFF27,\r
-0x8267=>0xFF28,\r
-0x8268=>0xFF29,\r
-0x8269=>0xFF2A,\r
-0x826A=>0xFF2B,\r
-0x826B=>0xFF2C,\r
-0x826C=>0xFF2D,\r
-0x826D=>0xFF2E,\r
-0x826E=>0xFF2F,\r
-0x826F=>0xFF30,\r
-0x8270=>0xFF31,\r
-0x8271=>0xFF32,\r
-0x8272=>0xFF33,\r
-0x8273=>0xFF34,\r
-0x8274=>0xFF35,\r
-0x8275=>0xFF36,\r
-0x8276=>0xFF37,\r
-0x8277=>0xFF38,\r
-0x8278=>0xFF39,\r
-0x8279=>0xFF3A,\r
-0x8281=>0xFF41,\r
-0x8282=>0xFF42,\r
-0x8283=>0xFF43,\r
-0x8284=>0xFF44,\r
-0x8285=>0xFF45,\r
-0x8286=>0xFF46,\r
-0x8287=>0xFF47,\r
-0x8288=>0xFF48,\r
-0x8289=>0xFF49,\r
-0x828A=>0xFF4A,\r
-0x828B=>0xFF4B,\r
-0x828C=>0xFF4C,\r
-0x828D=>0xFF4D,\r
-0x828E=>0xFF4E,\r
-0x828F=>0xFF4F,\r
-0x8290=>0xFF50,\r
-0x8291=>0xFF51,\r
-0x8292=>0xFF52,\r
-0x8293=>0xFF53,\r
-0x8294=>0xFF54,\r
-0x8295=>0xFF55,\r
-0x8296=>0xFF56,\r
-0x8297=>0xFF57,\r
-0x8298=>0xFF58,\r
-0x8299=>0xFF59,\r
-0x829A=>0xFF5A,\r
-0x829F=>0x3041,\r
-0x82A0=>0x3042,\r
-0x82A1=>0x3043,\r
-0x82A2=>0x3044,\r
-0x82A3=>0x3045,\r
-0x82A4=>0x3046,\r
-0x82A5=>0x3047,\r
-0x82A6=>0x3048,\r
-0x82A7=>0x3049,\r
-0x82A8=>0x304A,\r
-0x82A9=>0x304B,\r
-0x82AA=>0x304C,\r
-0x82AB=>0x304D,\r
-0x82AC=>0x304E,\r
-0x82AD=>0x304F,\r
-0x82AE=>0x3050,\r
-0x82AF=>0x3051,\r
-0x82B0=>0x3052,\r
-0x82B1=>0x3053,\r
-0x82B2=>0x3054,\r
-0x82B3=>0x3055,\r
-0x82B4=>0x3056,\r
-0x82B5=>0x3057,\r
-0x82B6=>0x3058,\r
-0x82B7=>0x3059,\r
-0x82B8=>0x305A,\r
-0x82B9=>0x305B,\r
-0x82BA=>0x305C,\r
-0x82BB=>0x305D,\r
-0x82BC=>0x305E,\r
-0x82BD=>0x305F,\r
-0x82BE=>0x3060,\r
-0x82BF=>0x3061,\r
-0x82C0=>0x3062,\r
-0x82C1=>0x3063,\r
-0x82C2=>0x3064,\r
-0x82C3=>0x3065,\r
-0x82C4=>0x3066,\r
-0x82C5=>0x3067,\r
-0x82C6=>0x3068,\r
-0x82C7=>0x3069,\r
-0x82C8=>0x306A,\r
-0x82C9=>0x306B,\r
-0x82CA=>0x306C,\r
-0x82CB=>0x306D,\r
-0x82CC=>0x306E,\r
-0x82CD=>0x306F,\r
-0x82CE=>0x3070,\r
-0x82CF=>0x3071,\r
-0x82D0=>0x3072,\r
-0x82D1=>0x3073,\r
-0x82D2=>0x3074,\r
-0x82D3=>0x3075,\r
-0x82D4=>0x3076,\r
-0x82D5=>0x3077,\r
-0x82D6=>0x3078,\r
-0x82D7=>0x3079,\r
-0x82D8=>0x307A,\r
-0x82D9=>0x307B,\r
-0x82DA=>0x307C,\r
-0x82DB=>0x307D,\r
-0x82DC=>0x307E,\r
-0x82DD=>0x307F,\r
-0x82DE=>0x3080,\r
-0x82DF=>0x3081,\r
-0x82E0=>0x3082,\r
-0x82E1=>0x3083,\r
-0x82E2=>0x3084,\r
-0x82E3=>0x3085,\r
-0x82E4=>0x3086,\r
-0x82E5=>0x3087,\r
-0x82E6=>0x3088,\r
-0x82E7=>0x3089,\r
-0x82E8=>0x308A,\r
-0x82E9=>0x308B,\r
-0x82EA=>0x308C,\r
-0x82EB=>0x308D,\r
-0x82EC=>0x308E,\r
-0x82ED=>0x308F,\r
-0x82EE=>0x3090,\r
-0x82EF=>0x3091,\r
-0x82F0=>0x3092,\r
-0x82F1=>0x3093,\r
-0x8340=>0x30A1,\r
-0x8341=>0x30A2,\r
-0x8342=>0x30A3,\r
-0x8343=>0x30A4,\r
-0x8344=>0x30A5,\r
-0x8345=>0x30A6,\r
-0x8346=>0x30A7,\r
-0x8347=>0x30A8,\r
-0x8348=>0x30A9,\r
-0x8349=>0x30AA,\r
-0x834A=>0x30AB,\r
-0x834B=>0x30AC,\r
-0x834C=>0x30AD,\r
-0x834D=>0x30AE,\r
-0x834E=>0x30AF,\r
-0x834F=>0x30B0,\r
-0x8350=>0x30B1,\r
-0x8351=>0x30B2,\r
-0x8352=>0x30B3,\r
-0x8353=>0x30B4,\r
-0x8354=>0x30B5,\r
-0x8355=>0x30B6,\r
-0x8356=>0x30B7,\r
-0x8357=>0x30B8,\r
-0x8358=>0x30B9,\r
-0x8359=>0x30BA,\r
-0x835A=>0x30BB,\r
-0x835B=>0x30BC,\r
-0x835C=>0x30BD,\r
-0x835D=>0x30BE,\r
-0x835E=>0x30BF,\r
-0x835F=>0x30C0,\r
-0x8360=>0x30C1,\r
-0x8361=>0x30C2,\r
-0x8362=>0x30C3,\r
-0x8363=>0x30C4,\r
-0x8364=>0x30C5,\r
-0x8365=>0x30C6,\r
-0x8366=>0x30C7,\r
-0x8367=>0x30C8,\r
-0x8368=>0x30C9,\r
-0x8369=>0x30CA,\r
-0x836A=>0x30CB,\r
-0x836B=>0x30CC,\r
-0x836C=>0x30CD,\r
-0x836D=>0x30CE,\r
-0x836E=>0x30CF,\r
-0x836F=>0x30D0,\r
-0x8370=>0x30D1,\r
-0x8371=>0x30D2,\r
-0x8372=>0x30D3,\r
-0x8373=>0x30D4,\r
-0x8374=>0x30D5,\r
-0x8375=>0x30D6,\r
-0x8376=>0x30D7,\r
-0x8377=>0x30D8,\r
-0x8378=>0x30D9,\r
-0x8379=>0x30DA,\r
-0x837A=>0x30DB,\r
-0x837B=>0x30DC,\r
-0x837C=>0x30DD,\r
-0x837D=>0x30DE,\r
-0x837E=>0x30DF,\r
-0x8380=>0x30E0,\r
-0x8381=>0x30E1,\r
-0x8382=>0x30E2,\r
-0x8383=>0x30E3,\r
-0x8384=>0x30E4,\r
-0x8385=>0x30E5,\r
-0x8386=>0x30E6,\r
-0x8387=>0x30E7,\r
-0x8388=>0x30E8,\r
-0x8389=>0x30E9,\r
-0x838A=>0x30EA,\r
-0x838B=>0x30EB,\r
-0x838C=>0x30EC,\r
-0x838D=>0x30ED,\r
-0x838E=>0x30EE,\r
-0x838F=>0x30EF,\r
-0x8390=>0x30F0,\r
-0x8391=>0x30F1,\r
-0x8392=>0x30F2,\r
-0x8393=>0x30F3,\r
-0x8394=>0x30F4,\r
-0x8395=>0x30F5,\r
-0x8396=>0x30F6,\r
-0x839F=>0x0391,\r
-0x83A0=>0x0392,\r
-0x83A1=>0x0393,\r
-0x83A2=>0x0394,\r
-0x83A3=>0x0395,\r
-0x83A4=>0x0396,\r
-0x83A5=>0x0397,\r
-0x83A6=>0x0398,\r
-0x83A7=>0x0399,\r
-0x83A8=>0x039A,\r
-0x83A9=>0x039B,\r
-0x83AA=>0x039C,\r
-0x83AB=>0x039D,\r
-0x83AC=>0x039E,\r
-0x83AD=>0x039F,\r
-0x83AE=>0x03A0,\r
-0x83AF=>0x03A1,\r
-0x83B0=>0x03A3,\r
-0x83B1=>0x03A4,\r
-0x83B2=>0x03A5,\r
-0x83B3=>0x03A6,\r
-0x83B4=>0x03A7,\r
-0x83B5=>0x03A8,\r
-0x83B6=>0x03A9,\r
-0x83BF=>0x03B1,\r
-0x83C0=>0x03B2,\r
-0x83C1=>0x03B3,\r
-0x83C2=>0x03B4,\r
-0x83C3=>0x03B5,\r
-0x83C4=>0x03B6,\r
-0x83C5=>0x03B7,\r
-0x83C6=>0x03B8,\r
-0x83C7=>0x03B9,\r
-0x83C8=>0x03BA,\r
-0x83C9=>0x03BB,\r
-0x83CA=>0x03BC,\r
-0x83CB=>0x03BD,\r
-0x83CC=>0x03BE,\r
-0x83CD=>0x03BF,\r
-0x83CE=>0x03C0,\r
-0x83CF=>0x03C1,\r
-0x83D0=>0x03C3,\r
-0x83D1=>0x03C4,\r
-0x83D2=>0x03C5,\r
-0x83D3=>0x03C6,\r
-0x83D4=>0x03C7,\r
-0x83D5=>0x03C8,\r
-0x83D6=>0x03C9,\r
-0x8440=>0x0410,\r
-0x8441=>0x0411,\r
-0x8442=>0x0412,\r
-0x8443=>0x0413,\r
-0x8444=>0x0414,\r
-0x8445=>0x0415,\r
-0x8446=>0x0401,\r
-0x8447=>0x0416,\r
-0x8448=>0x0417,\r
-0x8449=>0x0418,\r
-0x844A=>0x0419,\r
-0x844B=>0x041A,\r
-0x844C=>0x041B,\r
-0x844D=>0x041C,\r
-0x844E=>0x041D,\r
-0x844F=>0x041E,\r
-0x8450=>0x041F,\r
-0x8451=>0x0420,\r
-0x8452=>0x0421,\r
-0x8453=>0x0422,\r
-0x8454=>0x0423,\r
-0x8455=>0x0424,\r
-0x8456=>0x0425,\r
-0x8457=>0x0426,\r
-0x8458=>0x0427,\r
-0x8459=>0x0428,\r
-0x845A=>0x0429,\r
-0x845B=>0x042A,\r
-0x845C=>0x042B,\r
-0x845D=>0x042C,\r
-0x845E=>0x042D,\r
-0x845F=>0x042E,\r
-0x8460=>0x042F,\r
-0x8470=>0x0430,\r
-0x8471=>0x0431,\r
-0x8472=>0x0432,\r
-0x8473=>0x0433,\r
-0x8474=>0x0434,\r
-0x8475=>0x0435,\r
-0x8476=>0x0451,\r
-0x8477=>0x0436,\r
-0x8478=>0x0437,\r
-0x8479=>0x0438,\r
-0x847A=>0x0439,\r
-0x847B=>0x043A,\r
-0x847C=>0x043B,\r
-0x847D=>0x043C,\r
-0x847E=>0x043D,\r
-0x8480=>0x043E,\r
-0x8481=>0x043F,\r
-0x8482=>0x0440,\r
-0x8483=>0x0441,\r
-0x8484=>0x0442,\r
-0x8485=>0x0443,\r
-0x8486=>0x0444,\r
-0x8487=>0x0445,\r
-0x8488=>0x0446,\r
-0x8489=>0x0447,\r
-0x848A=>0x0448,\r
-0x848B=>0x0449,\r
-0x848C=>0x044A,\r
-0x848D=>0x044B,\r
-0x848E=>0x044C,\r
-0x848F=>0x044D,\r
-0x8490=>0x044E,\r
-0x8491=>0x044F,\r
-0x849F=>0x2500,\r
-0x84A0=>0x2502,\r
-0x84A1=>0x250C,\r
-0x84A2=>0x2510,\r
-0x84A3=>0x2518,\r
-0x84A4=>0x2514,\r
-0x84A5=>0x251C,\r
-0x84A6=>0x252C,\r
-0x84A7=>0x2524,\r
-0x84A8=>0x2534,\r
-0x84A9=>0x253C,\r
-0x84AA=>0x2501,\r
-0x84AB=>0x2503,\r
-0x84AC=>0x250F,\r
-0x84AD=>0x2513,\r
-0x84AE=>0x251B,\r
-0x84AF=>0x2517,\r
-0x84B0=>0x2523,\r
-0x84B1=>0x2533,\r
-0x84B2=>0x252B,\r
-0x84B3=>0x253B,\r
-0x84B4=>0x254B,\r
-0x84B5=>0x2520,\r
-0x84B6=>0x252F,\r
-0x84B7=>0x2528,\r
-0x84B8=>0x2537,\r
-0x84B9=>0x253F,\r
-0x84BA=>0x251D,\r
-0x84BB=>0x2530,\r
-0x84BC=>0x2525,\r
-0x84BD=>0x2538,\r
-0x84BE=>0x2542,\r
-0x8740=>0x2460,\r
-0x8741=>0x2461,\r
-0x8742=>0x2462,\r
-0x8743=>0x2463,\r
-0x8744=>0x2464,\r
-0x8745=>0x2465,\r
-0x8746=>0x2466,\r
-0x8747=>0x2467,\r
-0x8748=>0x2468,\r
-0x8749=>0x2469,\r
-0x874A=>0x246A,\r
-0x874B=>0x246B,\r
-0x874C=>0x246C,\r
-0x874D=>0x246D,\r
-0x874E=>0x246E,\r
-0x874F=>0x246F,\r
-0x8750=>0x2470,\r
-0x8751=>0x2471,\r
-0x8752=>0x2472,\r
-0x8753=>0x2473,\r
-0x8754=>0x2160,\r
-0x8755=>0x2161,\r
-0x8756=>0x2162,\r
-0x8757=>0x2163,\r
-0x8758=>0x2164,\r
-0x8759=>0x2165,\r
-0x875A=>0x2166,\r
-0x875B=>0x2167,\r
-0x875C=>0x2168,\r
-0x875D=>0x2169,\r
-0x875F=>0x3349,\r
-0x8760=>0x3314,\r
-0x8761=>0x3322,\r
-0x8762=>0x334D,\r
-0x8763=>0x3318,\r
-0x8764=>0x3327,\r
-0x8765=>0x3303,\r
-0x8766=>0x3336,\r
-0x8767=>0x3351,\r
-0x8768=>0x3357,\r
-0x8769=>0x330D,\r
-0x876A=>0x3326,\r
-0x876B=>0x3323,\r
-0x876C=>0x332B,\r
-0x876D=>0x334A,\r
-0x876E=>0x333B,\r
-0x876F=>0x339C,\r
-0x8770=>0x339D,\r
-0x8771=>0x339E,\r
-0x8772=>0x338E,\r
-0x8773=>0x338F,\r
-0x8774=>0x33C4,\r
-0x8775=>0x33A1,\r
-0x877E=>0x337B,\r
-0x8780=>0x301D,\r
-0x8781=>0x301F,\r
-0x8782=>0x2116,\r
-0x8783=>0x33CD,\r
-0x8784=>0x2121,\r
-0x8785=>0x32A4,\r
-0x8786=>0x32A5,\r
-0x8787=>0x32A6,\r
-0x8788=>0x32A7,\r
-0x8789=>0x32A8,\r
-0x878A=>0x3231,\r
-0x878B=>0x3232,\r
-0x878C=>0x3239,\r
-0x878D=>0x337E,\r
-0x878E=>0x337D,\r
-0x878F=>0x337C,\r
-0x8790=>0x2252,\r
-0x8791=>0x2261,\r
-0x8792=>0x222B,\r
-0x8793=>0x222E,\r
-0x8794=>0x2211,\r
-0x8795=>0x221A,\r
-0x8796=>0x22A5,\r
-0x8797=>0x2220,\r
-0x8798=>0x221F,\r
-0x8799=>0x22BF,\r
-0x879A=>0x2235,\r
-0x879B=>0x2229,\r
-0x879C=>0x222A,\r
-0x889F=>0x4E9C,\r
-0x88A0=>0x5516,\r
-0x88A1=>0x5A03,\r
-0x88A2=>0x963F,\r
-0x88A3=>0x54C0,\r
-0x88A4=>0x611B,\r
-0x88A5=>0x6328,\r
-0x88A6=>0x59F6,\r
-0x88A7=>0x9022,\r
-0x88A8=>0x8475,\r
-0x88A9=>0x831C,\r
-0x88AA=>0x7A50,\r
-0x88AB=>0x60AA,\r
-0x88AC=>0x63E1,\r
-0x88AD=>0x6E25,\r
-0x88AE=>0x65ED,\r
-0x88AF=>0x8466,\r
-0x88B0=>0x82A6,\r
-0x88B1=>0x9BF5,\r
-0x88B2=>0x6893,\r
-0x88B3=>0x5727,\r
-0x88B4=>0x65A1,\r
-0x88B5=>0x6271,\r
-0x88B6=>0x5B9B,\r
-0x88B7=>0x59D0,\r
-0x88B8=>0x867B,\r
-0x88B9=>0x98F4,\r
-0x88BA=>0x7D62,\r
-0x88BB=>0x7DBE,\r
-0x88BC=>0x9B8E,\r
-0x88BD=>0x6216,\r
-0x88BE=>0x7C9F,\r
-0x88BF=>0x88B7,\r
-0x88C0=>0x5B89,\r
-0x88C1=>0x5EB5,\r
-0x88C2=>0x6309,\r
-0x88C3=>0x6697,\r
-0x88C4=>0x6848,\r
-0x88C5=>0x95C7,\r
-0x88C6=>0x978D,\r
-0x88C7=>0x674F,\r
-0x88C8=>0x4EE5,\r
-0x88C9=>0x4F0A,\r
-0x88CA=>0x4F4D,\r
-0x88CB=>0x4F9D,\r
-0x88CC=>0x5049,\r
-0x88CD=>0x56F2,\r
-0x88CE=>0x5937,\r
-0x88CF=>0x59D4,\r
-0x88D0=>0x5A01,\r
-0x88D1=>0x5C09,\r
-0x88D2=>0x60DF,\r
-0x88D3=>0x610F,\r
-0x88D4=>0x6170,\r
-0x88D5=>0x6613,\r
-0x88D6=>0x6905,\r
-0x88D7=>0x70BA,\r
-0x88D8=>0x754F,\r
-0x88D9=>0x7570,\r
-0x88DA=>0x79FB,\r
-0x88DB=>0x7DAD,\r
-0x88DC=>0x7DEF,\r
-0x88DD=>0x80C3,\r
-0x88DE=>0x840E,\r
-0x88DF=>0x8863,\r
-0x88E0=>0x8B02,\r
-0x88E1=>0x9055,\r
-0x88E2=>0x907A,\r
-0x88E3=>0x533B,\r
-0x88E4=>0x4E95,\r
-0x88E5=>0x4EA5,\r
-0x88E6=>0x57DF,\r
-0x88E7=>0x80B2,\r
-0x88E8=>0x90C1,\r
-0x88E9=>0x78EF,\r
-0x88EA=>0x4E00,\r
-0x88EB=>0x58F1,\r
-0x88EC=>0x6EA2,\r
-0x88ED=>0x9038,\r
-0x88EE=>0x7A32,\r
-0x88EF=>0x8328,\r
-0x88F0=>0x828B,\r
-0x88F1=>0x9C2F,\r
-0x88F2=>0x5141,\r
-0x88F3=>0x5370,\r
-0x88F4=>0x54BD,\r
-0x88F5=>0x54E1,\r
-0x88F6=>0x56E0,\r
-0x88F7=>0x59FB,\r
-0x88F8=>0x5F15,\r
-0x88F9=>0x98F2,\r
-0x88FA=>0x6DEB,\r
-0x88FB=>0x80E4,\r
-0x88FC=>0x852D,\r
-0x8940=>0x9662,\r
-0x8941=>0x9670,\r
-0x8942=>0x96A0,\r
-0x8943=>0x97FB,\r
-0x8944=>0x540B,\r
-0x8945=>0x53F3,\r
-0x8946=>0x5B87,\r
-0x8947=>0x70CF,\r
-0x8948=>0x7FBD,\r
-0x8949=>0x8FC2,\r
-0x894A=>0x96E8,\r
-0x894B=>0x536F,\r
-0x894C=>0x9D5C,\r
-0x894D=>0x7ABA,\r
-0x894E=>0x4E11,\r
-0x894F=>0x7893,\r
-0x8950=>0x81FC,\r
-0x8951=>0x6E26,\r
-0x8952=>0x5618,\r
-0x8953=>0x5504,\r
-0x8954=>0x6B1D,\r
-0x8955=>0x851A,\r
-0x8956=>0x9C3B,\r
-0x8957=>0x59E5,\r
-0x8958=>0x53A9,\r
-0x8959=>0x6D66,\r
-0x895A=>0x74DC,\r
-0x895B=>0x958F,\r
-0x895C=>0x5642,\r
-0x895D=>0x4E91,\r
-0x895E=>0x904B,\r
-0x895F=>0x96F2,\r
-0x8960=>0x834F,\r
-0x8961=>0x990C,\r
-0x8962=>0x53E1,\r
-0x8963=>0x55B6,\r
-0x8964=>0x5B30,\r
-0x8965=>0x5F71,\r
-0x8966=>0x6620,\r
-0x8967=>0x66F3,\r
-0x8968=>0x6804,\r
-0x8969=>0x6C38,\r
-0x896A=>0x6CF3,\r
-0x896B=>0x6D29,\r
-0x896C=>0x745B,\r
-0x896D=>0x76C8,\r
-0x896E=>0x7A4E,\r
-0x896F=>0x9834,\r
-0x8970=>0x82F1,\r
-0x8971=>0x885B,\r
-0x8972=>0x8A60,\r
-0x8973=>0x92ED,\r
-0x8974=>0x6DB2,\r
-0x8975=>0x75AB,\r
-0x8976=>0x76CA,\r
-0x8977=>0x99C5,\r
-0x8978=>0x60A6,\r
-0x8979=>0x8B01,\r
-0x897A=>0x8D8A,\r
-0x897B=>0x95B2,\r
-0x897C=>0x698E,\r
-0x897D=>0x53AD,\r
-0x897E=>0x5186,\r
-0x8980=>0x5712,\r
-0x8981=>0x5830,\r
-0x8982=>0x5944,\r
-0x8983=>0x5BB4,\r
-0x8984=>0x5EF6,\r
-0x8985=>0x6028,\r
-0x8986=>0x63A9,\r
-0x8987=>0x63F4,\r
-0x8988=>0x6CBF,\r
-0x8989=>0x6F14,\r
-0x898A=>0x708E,\r
-0x898B=>0x7114,\r
-0x898C=>0x7159,\r
-0x898D=>0x71D5,\r
-0x898E=>0x733F,\r
-0x898F=>0x7E01,\r
-0x8990=>0x8276,\r
-0x8991=>0x82D1,\r
-0x8992=>0x8597,\r
-0x8993=>0x9060,\r
-0x8994=>0x925B,\r
-0x8995=>0x9D1B,\r
-0x8996=>0x5869,\r
-0x8997=>0x65BC,\r
-0x8998=>0x6C5A,\r
-0x8999=>0x7525,\r
-0x899A=>0x51F9,\r
-0x899B=>0x592E,\r
-0x899C=>0x5965,\r
-0x899D=>0x5F80,\r
-0x899E=>0x5FDC,\r
-0x899F=>0x62BC,\r
-0x89A0=>0x65FA,\r
-0x89A1=>0x6A2A,\r
-0x89A2=>0x6B27,\r
-0x89A3=>0x6BB4,\r
-0x89A4=>0x738B,\r
-0x89A5=>0x7FC1,\r
-0x89A6=>0x8956,\r
-0x89A7=>0x9D2C,\r
-0x89A8=>0x9D0E,\r
-0x89A9=>0x9EC4,\r
-0x89AA=>0x5CA1,\r
-0x89AB=>0x6C96,\r
-0x89AC=>0x837B,\r
-0x89AD=>0x5104,\r
-0x89AE=>0x5C4B,\r
-0x89AF=>0x61B6,\r
-0x89B0=>0x81C6,\r
-0x89B1=>0x6876,\r
-0x89B2=>0x7261,\r
-0x89B3=>0x4E59,\r
-0x89B4=>0x4FFA,\r
-0x89B5=>0x5378,\r
-0x89B6=>0x6069,\r
-0x89B7=>0x6E29,\r
-0x89B8=>0x7A4F,\r
-0x89B9=>0x97F3,\r
-0x89BA=>0x4E0B,\r
-0x89BB=>0x5316,\r
-0x89BC=>0x4EEE,\r
-0x89BD=>0x4F55,\r
-0x89BE=>0x4F3D,\r
-0x89BF=>0x4FA1,\r
-0x89C0=>0x4F73,\r
-0x89C1=>0x52A0,\r
-0x89C2=>0x53EF,\r
-0x89C3=>0x5609,\r
-0x89C4=>0x590F,\r
-0x89C5=>0x5AC1,\r
-0x89C6=>0x5BB6,\r
-0x89C7=>0x5BE1,\r
-0x89C8=>0x79D1,\r
-0x89C9=>0x6687,\r
-0x89CA=>0x679C,\r
-0x89CB=>0x67B6,\r
-0x89CC=>0x6B4C,\r
-0x89CD=>0x6CB3,\r
-0x89CE=>0x706B,\r
-0x89CF=>0x73C2,\r
-0x89D0=>0x798D,\r
-0x89D1=>0x79BE,\r
-0x89D2=>0x7A3C,\r
-0x89D3=>0x7B87,\r
-0x89D4=>0x82B1,\r
-0x89D5=>0x82DB,\r
-0x89D6=>0x8304,\r
-0x89D7=>0x8377,\r
-0x89D8=>0x83EF,\r
-0x89D9=>0x83D3,\r
-0x89DA=>0x8766,\r
-0x89DB=>0x8AB2,\r
-0x89DC=>0x5629,\r
-0x89DD=>0x8CA8,\r
-0x89DE=>0x8FE6,\r
-0x89DF=>0x904E,\r
-0x89E0=>0x971E,\r
-0x89E1=>0x868A,\r
-0x89E2=>0x4FC4,\r
-0x89E3=>0x5CE8,\r
-0x89E4=>0x6211,\r
-0x89E5=>0x7259,\r
-0x89E6=>0x753B,\r
-0x89E7=>0x81E5,\r
-0x89E8=>0x82BD,\r
-0x89E9=>0x86FE,\r
-0x89EA=>0x8CC0,\r
-0x89EB=>0x96C5,\r
-0x89EC=>0x9913,\r
-0x89ED=>0x99D5,\r
-0x89EE=>0x4ECB,\r
-0x89EF=>0x4F1A,\r
-0x89F0=>0x89E3,\r
-0x89F1=>0x56DE,\r
-0x89F2=>0x584A,\r
-0x89F3=>0x58CA,\r
-0x89F4=>0x5EFB,\r
-0x89F5=>0x5FEB,\r
-0x89F6=>0x602A,\r
-0x89F7=>0x6094,\r
-0x89F8=>0x6062,\r
-0x89F9=>0x61D0,\r
-0x89FA=>0x6212,\r
-0x89FB=>0x62D0,\r
-0x89FC=>0x6539,\r
-0x8A40=>0x9B41,\r
-0x8A41=>0x6666,\r
-0x8A42=>0x68B0,\r
-0x8A43=>0x6D77,\r
-0x8A44=>0x7070,\r
-0x8A45=>0x754C,\r
-0x8A46=>0x7686,\r
-0x8A47=>0x7D75,\r
-0x8A48=>0x82A5,\r
-0x8A49=>0x87F9,\r
-0x8A4A=>0x958B,\r
-0x8A4B=>0x968E,\r
-0x8A4C=>0x8C9D,\r
-0x8A4D=>0x51F1,\r
-0x8A4E=>0x52BE,\r
-0x8A4F=>0x5916,\r
-0x8A50=>0x54B3,\r
-0x8A51=>0x5BB3,\r
-0x8A52=>0x5D16,\r
-0x8A53=>0x6168,\r
-0x8A54=>0x6982,\r
-0x8A55=>0x6DAF,\r
-0x8A56=>0x788D,\r
-0x8A57=>0x84CB,\r
-0x8A58=>0x8857,\r
-0x8A59=>0x8A72,\r
-0x8A5A=>0x93A7,\r
-0x8A5B=>0x9AB8,\r
-0x8A5C=>0x6D6C,\r
-0x8A5D=>0x99A8,\r
-0x8A5E=>0x86D9,\r
-0x8A5F=>0x57A3,\r
-0x8A60=>0x67FF,\r
-0x8A61=>0x86CE,\r
-0x8A62=>0x920E,\r
-0x8A63=>0x5283,\r
-0x8A64=>0x5687,\r
-0x8A65=>0x5404,\r
-0x8A66=>0x5ED3,\r
-0x8A67=>0x62E1,\r
-0x8A68=>0x64B9,\r
-0x8A69=>0x683C,\r
-0x8A6A=>0x6838,\r
-0x8A6B=>0x6BBB,\r
-0x8A6C=>0x7372,\r
-0x8A6D=>0x78BA,\r
-0x8A6E=>0x7A6B,\r
-0x8A6F=>0x899A,\r
-0x8A70=>0x89D2,\r
-0x8A71=>0x8D6B,\r
-0x8A72=>0x8F03,\r
-0x8A73=>0x90ED,\r
-0x8A74=>0x95A3,\r
-0x8A75=>0x9694,\r
-0x8A76=>0x9769,\r
-0x8A77=>0x5B66,\r
-0x8A78=>0x5CB3,\r
-0x8A79=>0x697D,\r
-0x8A7A=>0x984D,\r
-0x8A7B=>0x984E,\r
-0x8A7C=>0x639B,\r
-0x8A7D=>0x7B20,\r
-0x8A7E=>0x6A2B,\r
-0x8A80=>0x6A7F,\r
-0x8A81=>0x68B6,\r
-0x8A82=>0x9C0D,\r
-0x8A83=>0x6F5F,\r
-0x8A84=>0x5272,\r
-0x8A85=>0x559D,\r
-0x8A86=>0x6070,\r
-0x8A87=>0x62EC,\r
-0x8A88=>0x6D3B,\r
-0x8A89=>0x6E07,\r
-0x8A8A=>0x6ED1,\r
-0x8A8B=>0x845B,\r
-0x8A8C=>0x8910,\r
-0x8A8D=>0x8F44,\r
-0x8A8E=>0x4E14,\r
-0x8A8F=>0x9C39,\r
-0x8A90=>0x53F6,\r
-0x8A91=>0x691B,\r
-0x8A92=>0x6A3A,\r
-0x8A93=>0x9784,\r
-0x8A94=>0x682A,\r
-0x8A95=>0x515C,\r
-0x8A96=>0x7AC3,\r
-0x8A97=>0x84B2,\r
-0x8A98=>0x91DC,\r
-0x8A99=>0x938C,\r
-0x8A9A=>0x565B,\r
-0x8A9B=>0x9D28,\r
-0x8A9C=>0x6822,\r
-0x8A9D=>0x8305,\r
-0x8A9E=>0x8431,\r
-0x8A9F=>0x7CA5,\r
-0x8AA0=>0x5208,\r
-0x8AA1=>0x82C5,\r
-0x8AA2=>0x74E6,\r
-0x8AA3=>0x4E7E,\r
-0x8AA4=>0x4F83,\r
-0x8AA5=>0x51A0,\r
-0x8AA6=>0x5BD2,\r
-0x8AA7=>0x520A,\r
-0x8AA8=>0x52D8,\r
-0x8AA9=>0x52E7,\r
-0x8AAA=>0x5DFB,\r
-0x8AAB=>0x559A,\r
-0x8AAC=>0x582A,\r
-0x8AAD=>0x59E6,\r
-0x8AAE=>0x5B8C,\r
-0x8AAF=>0x5B98,\r
-0x8AB0=>0x5BDB,\r
-0x8AB1=>0x5E72,\r
-0x8AB2=>0x5E79,\r
-0x8AB3=>0x60A3,\r
-0x8AB4=>0x611F,\r
-0x8AB5=>0x6163,\r
-0x8AB6=>0x61BE,\r
-0x8AB7=>0x63DB,\r
-0x8AB8=>0x6562,\r
-0x8AB9=>0x67D1,\r
-0x8ABA=>0x6853,\r
-0x8ABB=>0x68FA,\r
-0x8ABC=>0x6B3E,\r
-0x8ABD=>0x6B53,\r
-0x8ABE=>0x6C57,\r
-0x8ABF=>0x6F22,\r
-0x8AC0=>0x6F97,\r
-0x8AC1=>0x6F45,\r
-0x8AC2=>0x74B0,\r
-0x8AC3=>0x7518,\r
-0x8AC4=>0x76E3,\r
-0x8AC5=>0x770B,\r
-0x8AC6=>0x7AFF,\r
-0x8AC7=>0x7BA1,\r
-0x8AC8=>0x7C21,\r
-0x8AC9=>0x7DE9,\r
-0x8ACA=>0x7F36,\r
-0x8ACB=>0x7FF0,\r
-0x8ACC=>0x809D,\r
-0x8ACD=>0x8266,\r
-0x8ACE=>0x839E,\r
-0x8ACF=>0x89B3,\r
-0x8AD0=>0x8ACC,\r
-0x8AD1=>0x8CAB,\r
-0x8AD2=>0x9084,\r
-0x8AD3=>0x9451,\r
-0x8AD4=>0x9593,\r
-0x8AD5=>0x9591,\r
-0x8AD6=>0x95A2,\r
-0x8AD7=>0x9665,\r
-0x8AD8=>0x97D3,\r
-0x8AD9=>0x9928,\r
-0x8ADA=>0x8218,\r
-0x8ADB=>0x4E38,\r
-0x8ADC=>0x542B,\r
-0x8ADD=>0x5CB8,\r
-0x8ADE=>0x5DCC,\r
-0x8ADF=>0x73A9,\r
-0x8AE0=>0x764C,\r
-0x8AE1=>0x773C,\r
-0x8AE2=>0x5CA9,\r
-0x8AE3=>0x7FEB,\r
-0x8AE4=>0x8D0B,\r
-0x8AE5=>0x96C1,\r
-0x8AE6=>0x9811,\r
-0x8AE7=>0x9854,\r
-0x8AE8=>0x9858,\r
-0x8AE9=>0x4F01,\r
-0x8AEA=>0x4F0E,\r
-0x8AEB=>0x5371,\r
-0x8AEC=>0x559C,\r
-0x8AED=>0x5668,\r
-0x8AEE=>0x57FA,\r
-0x8AEF=>0x5947,\r
-0x8AF0=>0x5B09,\r
-0x8AF1=>0x5BC4,\r
-0x8AF2=>0x5C90,\r
-0x8AF3=>0x5E0C,\r
-0x8AF4=>0x5E7E,\r
-0x8AF5=>0x5FCC,\r
-0x8AF6=>0x63EE,\r
-0x8AF7=>0x673A,\r
-0x8AF8=>0x65D7,\r
-0x8AF9=>0x65E2,\r
-0x8AFA=>0x671F,\r
-0x8AFB=>0x68CB,\r
-0x8AFC=>0x68C4,\r
-0x8B40=>0x6A5F,\r
-0x8B41=>0x5E30,\r
-0x8B42=>0x6BC5,\r
-0x8B43=>0x6C17,\r
-0x8B44=>0x6C7D,\r
-0x8B45=>0x757F,\r
-0x8B46=>0x7948,\r
-0x8B47=>0x5B63,\r
-0x8B48=>0x7A00,\r
-0x8B49=>0x7D00,\r
-0x8B4A=>0x5FBD,\r
-0x8B4B=>0x898F,\r
-0x8B4C=>0x8A18,\r
-0x8B4D=>0x8CB4,\r
-0x8B4E=>0x8D77,\r
-0x8B4F=>0x8ECC,\r
-0x8B50=>0x8F1D,\r
-0x8B51=>0x98E2,\r
-0x8B52=>0x9A0E,\r
-0x8B53=>0x9B3C,\r
-0x8B54=>0x4E80,\r
-0x8B55=>0x507D,\r
-0x8B56=>0x5100,\r
-0x8B57=>0x5993,\r
-0x8B58=>0x5B9C,\r
-0x8B59=>0x622F,\r
-0x8B5A=>0x6280,\r
-0x8B5B=>0x64EC,\r
-0x8B5C=>0x6B3A,\r
-0x8B5D=>0x72A0,\r
-0x8B5E=>0x7591,\r
-0x8B5F=>0x7947,\r
-0x8B60=>0x7FA9,\r
-0x8B61=>0x87FB,\r
-0x8B62=>0x8ABC,\r
-0x8B63=>0x8B70,\r
-0x8B64=>0x63AC,\r
-0x8B65=>0x83CA,\r
-0x8B66=>0x97A0,\r
-0x8B67=>0x5409,\r
-0x8B68=>0x5403,\r
-0x8B69=>0x55AB,\r
-0x8B6A=>0x6854,\r
-0x8B6B=>0x6A58,\r
-0x8B6C=>0x8A70,\r
-0x8B6D=>0x7827,\r
-0x8B6E=>0x6775,\r
-0x8B6F=>0x9ECD,\r
-0x8B70=>0x5374,\r
-0x8B71=>0x5BA2,\r
-0x8B72=>0x811A,\r
-0x8B73=>0x8650,\r
-0x8B74=>0x9006,\r
-0x8B75=>0x4E18,\r
-0x8B76=>0x4E45,\r
-0x8B77=>0x4EC7,\r
-0x8B78=>0x4F11,\r
-0x8B79=>0x53CA,\r
-0x8B7A=>0x5438,\r
-0x8B7B=>0x5BAE,\r
-0x8B7C=>0x5F13,\r
-0x8B7D=>0x6025,\r
-0x8B7E=>0x6551,\r
-0x8B80=>0x673D,\r
-0x8B81=>0x6C42,\r
-0x8B82=>0x6C72,\r
-0x8B83=>0x6CE3,\r
-0x8B84=>0x7078,\r
-0x8B85=>0x7403,\r
-0x8B86=>0x7A76,\r
-0x8B87=>0x7AAE,\r
-0x8B88=>0x7B08,\r
-0x8B89=>0x7D1A,\r
-0x8B8A=>0x7CFE,\r
-0x8B8B=>0x7D66,\r
-0x8B8C=>0x65E7,\r
-0x8B8D=>0x725B,\r
-0x8B8E=>0x53BB,\r
-0x8B8F=>0x5C45,\r
-0x8B90=>0x5DE8,\r
-0x8B91=>0x62D2,\r
-0x8B92=>0x62E0,\r
-0x8B93=>0x6319,\r
-0x8B94=>0x6E20,\r
-0x8B95=>0x865A,\r
-0x8B96=>0x8A31,\r
-0x8B97=>0x8DDD,\r
-0x8B98=>0x92F8,\r
-0x8B99=>0x6F01,\r
-0x8B9A=>0x79A6,\r
-0x8B9B=>0x9B5A,\r
-0x8B9C=>0x4EA8,\r
-0x8B9D=>0x4EAB,\r
-0x8B9E=>0x4EAC,\r
-0x8B9F=>0x4F9B,\r
-0x8BA0=>0x4FA0,\r
-0x8BA1=>0x50D1,\r
-0x8BA2=>0x5147,\r
-0x8BA3=>0x7AF6,\r
-0x8BA4=>0x5171,\r
-0x8BA5=>0x51F6,\r
-0x8BA6=>0x5354,\r
-0x8BA7=>0x5321,\r
-0x8BA8=>0x537F,\r
-0x8BA9=>0x53EB,\r
-0x8BAA=>0x55AC,\r
-0x8BAB=>0x5883,\r
-0x8BAC=>0x5CE1,\r
-0x8BAD=>0x5F37,\r
-0x8BAE=>0x5F4A,\r
-0x8BAF=>0x602F,\r
-0x8BB0=>0x6050,\r
-0x8BB1=>0x606D,\r
-0x8BB2=>0x631F,\r
-0x8BB3=>0x6559,\r
-0x8BB4=>0x6A4B,\r
-0x8BB5=>0x6CC1,\r
-0x8BB6=>0x72C2,\r
-0x8BB7=>0x72ED,\r
-0x8BB8=>0x77EF,\r
-0x8BB9=>0x80F8,\r
-0x8BBA=>0x8105,\r
-0x8BBB=>0x8208,\r
-0x8BBC=>0x854E,\r
-0x8BBD=>0x90F7,\r
-0x8BBE=>0x93E1,\r
-0x8BBF=>0x97FF,\r
-0x8BC0=>0x9957,\r
-0x8BC1=>0x9A5A,\r
-0x8BC2=>0x4EF0,\r
-0x8BC3=>0x51DD,\r
-0x8BC4=>0x5C2D,\r
-0x8BC5=>0x6681,\r
-0x8BC6=>0x696D,\r
-0x8BC7=>0x5C40,\r
-0x8BC8=>0x66F2,\r
-0x8BC9=>0x6975,\r
-0x8BCA=>0x7389,\r
-0x8BCB=>0x6850,\r
-0x8BCC=>0x7C81,\r
-0x8BCD=>0x50C5,\r
-0x8BCE=>0x52E4,\r
-0x8BCF=>0x5747,\r
-0x8BD0=>0x5DFE,\r
-0x8BD1=>0x9326,\r
-0x8BD2=>0x65A4,\r
-0x8BD3=>0x6B23,\r
-0x8BD4=>0x6B3D,\r
-0x8BD5=>0x7434,\r
-0x8BD6=>0x7981,\r
-0x8BD7=>0x79BD,\r
-0x8BD8=>0x7B4B,\r
-0x8BD9=>0x7DCA,\r
-0x8BDA=>0x82B9,\r
-0x8BDB=>0x83CC,\r
-0x8BDC=>0x887F,\r
-0x8BDD=>0x895F,\r
-0x8BDE=>0x8B39,\r
-0x8BDF=>0x8FD1,\r
-0x8BE0=>0x91D1,\r
-0x8BE1=>0x541F,\r
-0x8BE2=>0x9280,\r
-0x8BE3=>0x4E5D,\r
-0x8BE4=>0x5036,\r
-0x8BE5=>0x53E5,\r
-0x8BE6=>0x533A,\r
-0x8BE7=>0x72D7,\r
-0x8BE8=>0x7396,\r
-0x8BE9=>0x77E9,\r
-0x8BEA=>0x82E6,\r
-0x8BEB=>0x8EAF,\r
-0x8BEC=>0x99C6,\r
-0x8BED=>0x99C8,\r
-0x8BEE=>0x99D2,\r
-0x8BEF=>0x5177,\r
-0x8BF0=>0x611A,\r
-0x8BF1=>0x865E,\r
-0x8BF2=>0x55B0,\r
-0x8BF3=>0x7A7A,\r
-0x8BF4=>0x5076,\r
-0x8BF5=>0x5BD3,\r
-0x8BF6=>0x9047,\r
-0x8BF7=>0x9685,\r
-0x8BF8=>0x4E32,\r
-0x8BF9=>0x6ADB,\r
-0x8BFA=>0x91E7,\r
-0x8BFB=>0x5C51,\r
-0x8BFC=>0x5C48,\r
-0x8C40=>0x6398,\r
-0x8C41=>0x7A9F,\r
-0x8C42=>0x6C93,\r
-0x8C43=>0x9774,\r
-0x8C44=>0x8F61,\r
-0x8C45=>0x7AAA,\r
-0x8C46=>0x718A,\r
-0x8C47=>0x9688,\r
-0x8C48=>0x7C82,\r
-0x8C49=>0x6817,\r
-0x8C4A=>0x7E70,\r
-0x8C4B=>0x6851,\r
-0x8C4C=>0x936C,\r
-0x8C4D=>0x52F2,\r
-0x8C4E=>0x541B,\r
-0x8C4F=>0x85AB,\r
-0x8C50=>0x8A13,\r
-0x8C51=>0x7FA4,\r
-0x8C52=>0x8ECD,\r
-0x8C53=>0x90E1,\r
-0x8C54=>0x5366,\r
-0x8C55=>0x8888,\r
-0x8C56=>0x7941,\r
-0x8C57=>0x4FC2,\r
-0x8C58=>0x50BE,\r
-0x8C59=>0x5211,\r
-0x8C5A=>0x5144,\r
-0x8C5B=>0x5553,\r
-0x8C5C=>0x572D,\r
-0x8C5D=>0x73EA,\r
-0x8C5E=>0x578B,\r
-0x8C5F=>0x5951,\r
-0x8C60=>0x5F62,\r
-0x8C61=>0x5F84,\r
-0x8C62=>0x6075,\r
-0x8C63=>0x6176,\r
-0x8C64=>0x6167,\r
-0x8C65=>0x61A9,\r
-0x8C66=>0x63B2,\r
-0x8C67=>0x643A,\r
-0x8C68=>0x656C,\r
-0x8C69=>0x666F,\r
-0x8C6A=>0x6842,\r
-0x8C6B=>0x6E13,\r
-0x8C6C=>0x7566,\r
-0x8C6D=>0x7A3D,\r
-0x8C6E=>0x7CFB,\r
-0x8C6F=>0x7D4C,\r
-0x8C70=>0x7D99,\r
-0x8C71=>0x7E4B,\r
-0x8C72=>0x7F6B,\r
-0x8C73=>0x830E,\r
-0x8C74=>0x834A,\r
-0x8C75=>0x86CD,\r
-0x8C76=>0x8A08,\r
-0x8C77=>0x8A63,\r
-0x8C78=>0x8B66,\r
-0x8C79=>0x8EFD,\r
-0x8C7A=>0x981A,\r
-0x8C7B=>0x9D8F,\r
-0x8C7C=>0x82B8,\r
-0x8C7D=>0x8FCE,\r
-0x8C7E=>0x9BE8,\r
-0x8C80=>0x5287,\r
-0x8C81=>0x621F,\r
-0x8C82=>0x6483,\r
-0x8C83=>0x6FC0,\r
-0x8C84=>0x9699,\r
-0x8C85=>0x6841,\r
-0x8C86=>0x5091,\r
-0x8C87=>0x6B20,\r
-0x8C88=>0x6C7A,\r
-0x8C89=>0x6F54,\r
-0x8C8A=>0x7A74,\r
-0x8C8B=>0x7D50,\r
-0x8C8C=>0x8840,\r
-0x8C8D=>0x8A23,\r
-0x8C8E=>0x6708,\r
-0x8C8F=>0x4EF6,\r
-0x8C90=>0x5039,\r
-0x8C91=>0x5026,\r
-0x8C92=>0x5065,\r
-0x8C93=>0x517C,\r
-0x8C94=>0x5238,\r
-0x8C95=>0x5263,\r
-0x8C96=>0x55A7,\r
-0x8C97=>0x570F,\r
-0x8C98=>0x5805,\r
-0x8C99=>0x5ACC,\r
-0x8C9A=>0x5EFA,\r
-0x8C9B=>0x61B2,\r
-0x8C9C=>0x61F8,\r
-0x8C9D=>0x62F3,\r
-0x8C9E=>0x6372,\r
-0x8C9F=>0x691C,\r
-0x8CA0=>0x6A29,\r
-0x8CA1=>0x727D,\r
-0x8CA2=>0x72AC,\r
-0x8CA3=>0x732E,\r
-0x8CA4=>0x7814,\r
-0x8CA5=>0x786F,\r
-0x8CA6=>0x7D79,\r
-0x8CA7=>0x770C,\r
-0x8CA8=>0x80A9,\r
-0x8CA9=>0x898B,\r
-0x8CAA=>0x8B19,\r
-0x8CAB=>0x8CE2,\r
-0x8CAC=>0x8ED2,\r
-0x8CAD=>0x9063,\r
-0x8CAE=>0x9375,\r
-0x8CAF=>0x967A,\r
-0x8CB0=>0x9855,\r
-0x8CB1=>0x9A13,\r
-0x8CB2=>0x9E78,\r
-0x8CB3=>0x5143,\r
-0x8CB4=>0x539F,\r
-0x8CB5=>0x53B3,\r
-0x8CB6=>0x5E7B,\r
-0x8CB7=>0x5F26,\r
-0x8CB8=>0x6E1B,\r
-0x8CB9=>0x6E90,\r
-0x8CBA=>0x7384,\r
-0x8CBB=>0x73FE,\r
-0x8CBC=>0x7D43,\r
-0x8CBD=>0x8237,\r
-0x8CBE=>0x8A00,\r
-0x8CBF=>0x8AFA,\r
-0x8CC0=>0x9650,\r
-0x8CC1=>0x4E4E,\r
-0x8CC2=>0x500B,\r
-0x8CC3=>0x53E4,\r
-0x8CC4=>0x547C,\r
-0x8CC5=>0x56FA,\r
-0x8CC6=>0x59D1,\r
-0x8CC7=>0x5B64,\r
-0x8CC8=>0x5DF1,\r
-0x8CC9=>0x5EAB,\r
-0x8CCA=>0x5F27,\r
-0x8CCB=>0x6238,\r
-0x8CCC=>0x6545,\r
-0x8CCD=>0x67AF,\r
-0x8CCE=>0x6E56,\r
-0x8CCF=>0x72D0,\r
-0x8CD0=>0x7CCA,\r
-0x8CD1=>0x88B4,\r
-0x8CD2=>0x80A1,\r
-0x8CD3=>0x80E1,\r
-0x8CD4=>0x83F0,\r
-0x8CD5=>0x864E,\r
-0x8CD6=>0x8A87,\r
-0x8CD7=>0x8DE8,\r
-0x8CD8=>0x9237,\r
-0x8CD9=>0x96C7,\r
-0x8CDA=>0x9867,\r
-0x8CDB=>0x9F13,\r
-0x8CDC=>0x4E94,\r
-0x8CDD=>0x4E92,\r
-0x8CDE=>0x4F0D,\r
-0x8CDF=>0x5348,\r
-0x8CE0=>0x5449,\r
-0x8CE1=>0x543E,\r
-0x8CE2=>0x5A2F,\r
-0x8CE3=>0x5F8C,\r
-0x8CE4=>0x5FA1,\r
-0x8CE5=>0x609F,\r
-0x8CE6=>0x68A7,\r
-0x8CE7=>0x6A8E,\r
-0x8CE8=>0x745A,\r
-0x8CE9=>0x7881,\r
-0x8CEA=>0x8A9E,\r
-0x8CEB=>0x8AA4,\r
-0x8CEC=>0x8B77,\r
-0x8CED=>0x9190,\r
-0x8CEE=>0x4E5E,\r
-0x8CEF=>0x9BC9,\r
-0x8CF0=>0x4EA4,\r
-0x8CF1=>0x4F7C,\r
-0x8CF2=>0x4FAF,\r
-0x8CF3=>0x5019,\r
-0x8CF4=>0x5016,\r
-0x8CF5=>0x5149,\r
-0x8CF6=>0x516C,\r
-0x8CF7=>0x529F,\r
-0x8CF8=>0x52B9,\r
-0x8CF9=>0x52FE,\r
-0x8CFA=>0x539A,\r
-0x8CFB=>0x53E3,\r
-0x8CFC=>0x5411,\r
-0x8D40=>0x540E,\r
-0x8D41=>0x5589,\r
-0x8D42=>0x5751,\r
-0x8D43=>0x57A2,\r
-0x8D44=>0x597D,\r
-0x8D45=>0x5B54,\r
-0x8D46=>0x5B5D,\r
-0x8D47=>0x5B8F,\r
-0x8D48=>0x5DE5,\r
-0x8D49=>0x5DE7,\r
-0x8D4A=>0x5DF7,\r
-0x8D4B=>0x5E78,\r
-0x8D4C=>0x5E83,\r
-0x8D4D=>0x5E9A,\r
-0x8D4E=>0x5EB7,\r
-0x8D4F=>0x5F18,\r
-0x8D50=>0x6052,\r
-0x8D51=>0x614C,\r
-0x8D52=>0x6297,\r
-0x8D53=>0x62D8,\r
-0x8D54=>0x63A7,\r
-0x8D55=>0x653B,\r
-0x8D56=>0x6602,\r
-0x8D57=>0x6643,\r
-0x8D58=>0x66F4,\r
-0x8D59=>0x676D,\r
-0x8D5A=>0x6821,\r
-0x8D5B=>0x6897,\r
-0x8D5C=>0x69CB,\r
-0x8D5D=>0x6C5F,\r
-0x8D5E=>0x6D2A,\r
-0x8D5F=>0x6D69,\r
-0x8D60=>0x6E2F,\r
-0x8D61=>0x6E9D,\r
-0x8D62=>0x7532,\r
-0x8D63=>0x7687,\r
-0x8D64=>0x786C,\r
-0x8D65=>0x7A3F,\r
-0x8D66=>0x7CE0,\r
-0x8D67=>0x7D05,\r
-0x8D68=>0x7D18,\r
-0x8D69=>0x7D5E,\r
-0x8D6A=>0x7DB1,\r
-0x8D6B=>0x8015,\r
-0x8D6C=>0x8003,\r
-0x8D6D=>0x80AF,\r
-0x8D6E=>0x80B1,\r
-0x8D6F=>0x8154,\r
-0x8D70=>0x818F,\r
-0x8D71=>0x822A,\r
-0x8D72=>0x8352,\r
-0x8D73=>0x884C,\r
-0x8D74=>0x8861,\r
-0x8D75=>0x8B1B,\r
-0x8D76=>0x8CA2,\r
-0x8D77=>0x8CFC,\r
-0x8D78=>0x90CA,\r
-0x8D79=>0x9175,\r
-0x8D7A=>0x9271,\r
-0x8D7B=>0x783F,\r
-0x8D7C=>0x92FC,\r
-0x8D7D=>0x95A4,\r
-0x8D7E=>0x964D,\r
-0x8D80=>0x9805,\r
-0x8D81=>0x9999,\r
-0x8D82=>0x9AD8,\r
-0x8D83=>0x9D3B,\r
-0x8D84=>0x525B,\r
-0x8D85=>0x52AB,\r
-0x8D86=>0x53F7,\r
-0x8D87=>0x5408,\r
-0x8D88=>0x58D5,\r
-0x8D89=>0x62F7,\r
-0x8D8A=>0x6FE0,\r
-0x8D8B=>0x8C6A,\r
-0x8D8C=>0x8F5F,\r
-0x8D8D=>0x9EB9,\r
-0x8D8E=>0x514B,\r
-0x8D8F=>0x523B,\r
-0x8D90=>0x544A,\r
-0x8D91=>0x56FD,\r
-0x8D92=>0x7A40,\r
-0x8D93=>0x9177,\r
-0x8D94=>0x9D60,\r
-0x8D95=>0x9ED2,\r
-0x8D96=>0x7344,\r
-0x8D97=>0x6F09,\r
-0x8D98=>0x8170,\r
-0x8D99=>0x7511,\r
-0x8D9A=>0x5FFD,\r
-0x8D9B=>0x60DA,\r
-0x8D9C=>0x9AA8,\r
-0x8D9D=>0x72DB,\r
-0x8D9E=>0x8FBC,\r
-0x8D9F=>0x6B64,\r
-0x8DA0=>0x9803,\r
-0x8DA1=>0x4ECA,\r
-0x8DA2=>0x56F0,\r
-0x8DA3=>0x5764,\r
-0x8DA4=>0x58BE,\r
-0x8DA5=>0x5A5A,\r
-0x8DA6=>0x6068,\r
-0x8DA7=>0x61C7,\r
-0x8DA8=>0x660F,\r
-0x8DA9=>0x6606,\r
-0x8DAA=>0x6839,\r
-0x8DAB=>0x68B1,\r
-0x8DAC=>0x6DF7,\r
-0x8DAD=>0x75D5,\r
-0x8DAE=>0x7D3A,\r
-0x8DAF=>0x826E,\r
-0x8DB0=>0x9B42,\r
-0x8DB1=>0x4E9B,\r
-0x8DB2=>0x4F50,\r
-0x8DB3=>0x53C9,\r
-0x8DB4=>0x5506,\r
-0x8DB5=>0x5D6F,\r
-0x8DB6=>0x5DE6,\r
-0x8DB7=>0x5DEE,\r
-0x8DB8=>0x67FB,\r
-0x8DB9=>0x6C99,\r
-0x8DBA=>0x7473,\r
-0x8DBB=>0x7802,\r
-0x8DBC=>0x8A50,\r
-0x8DBD=>0x9396,\r
-0x8DBE=>0x88DF,\r
-0x8DBF=>0x5750,\r
-0x8DC0=>0x5EA7,\r
-0x8DC1=>0x632B,\r
-0x8DC2=>0x50B5,\r
-0x8DC3=>0x50AC,\r
-0x8DC4=>0x518D,\r
-0x8DC5=>0x6700,\r
-0x8DC6=>0x54C9,\r
-0x8DC7=>0x585E,\r
-0x8DC8=>0x59BB,\r
-0x8DC9=>0x5BB0,\r
-0x8DCA=>0x5F69,\r
-0x8DCB=>0x624D,\r
-0x8DCC=>0x63A1,\r
-0x8DCD=>0x683D,\r
-0x8DCE=>0x6B73,\r
-0x8DCF=>0x6E08,\r
-0x8DD0=>0x707D,\r
-0x8DD1=>0x91C7,\r
-0x8DD2=>0x7280,\r
-0x8DD3=>0x7815,\r
-0x8DD4=>0x7826,\r
-0x8DD5=>0x796D,\r
-0x8DD6=>0x658E,\r
-0x8DD7=>0x7D30,\r
-0x8DD8=>0x83DC,\r
-0x8DD9=>0x88C1,\r
-0x8DDA=>0x8F09,\r
-0x8DDB=>0x969B,\r
-0x8DDC=>0x5264,\r
-0x8DDD=>0x5728,\r
-0x8DDE=>0x6750,\r
-0x8DDF=>0x7F6A,\r
-0x8DE0=>0x8CA1,\r
-0x8DE1=>0x51B4,\r
-0x8DE2=>0x5742,\r
-0x8DE3=>0x962A,\r
-0x8DE4=>0x583A,\r
-0x8DE5=>0x698A,\r
-0x8DE6=>0x80B4,\r
-0x8DE7=>0x54B2,\r
-0x8DE8=>0x5D0E,\r
-0x8DE9=>0x57FC,\r
-0x8DEA=>0x7895,\r
-0x8DEB=>0x9DFA,\r
-0x8DEC=>0x4F5C,\r
-0x8DED=>0x524A,\r
-0x8DEE=>0x548B,\r
-0x8DEF=>0x643E,\r
-0x8DF0=>0x6628,\r
-0x8DF1=>0x6714,\r
-0x8DF2=>0x67F5,\r
-0x8DF3=>0x7A84,\r
-0x8DF4=>0x7B56,\r
-0x8DF5=>0x7D22,\r
-0x8DF6=>0x932F,\r
-0x8DF7=>0x685C,\r
-0x8DF8=>0x9BAD,\r
-0x8DF9=>0x7B39,\r
-0x8DFA=>0x5319,\r
-0x8DFB=>0x518A,\r
-0x8DFC=>0x5237,\r
-0x8E40=>0x5BDF,\r
-0x8E41=>0x62F6,\r
-0x8E42=>0x64AE,\r
-0x8E43=>0x64E6,\r
-0x8E44=>0x672D,\r
-0x8E45=>0x6BBA,\r
-0x8E46=>0x85A9,\r
-0x8E47=>0x96D1,\r
-0x8E48=>0x7690,\r
-0x8E49=>0x9BD6,\r
-0x8E4A=>0x634C,\r
-0x8E4B=>0x9306,\r
-0x8E4C=>0x9BAB,\r
-0x8E4D=>0x76BF,\r
-0x8E4E=>0x6652,\r
-0x8E4F=>0x4E09,\r
-0x8E50=>0x5098,\r
-0x8E51=>0x53C2,\r
-0x8E52=>0x5C71,\r
-0x8E53=>0x60E8,\r
-0x8E54=>0x6492,\r
-0x8E55=>0x6563,\r
-0x8E56=>0x685F,\r
-0x8E57=>0x71E6,\r
-0x8E58=>0x73CA,\r
-0x8E59=>0x7523,\r
-0x8E5A=>0x7B97,\r
-0x8E5B=>0x7E82,\r
-0x8E5C=>0x8695,\r
-0x8E5D=>0x8B83,\r
-0x8E5E=>0x8CDB,\r
-0x8E5F=>0x9178,\r
-0x8E60=>0x9910,\r
-0x8E61=>0x65AC,\r
-0x8E62=>0x66AB,\r
-0x8E63=>0x6B8B,\r
-0x8E64=>0x4ED5,\r
-0x8E65=>0x4ED4,\r
-0x8E66=>0x4F3A,\r
-0x8E67=>0x4F7F,\r
-0x8E68=>0x523A,\r
-0x8E69=>0x53F8,\r
-0x8E6A=>0x53F2,\r
-0x8E6B=>0x55E3,\r
-0x8E6C=>0x56DB,\r
-0x8E6D=>0x58EB,\r
-0x8E6E=>0x59CB,\r
-0x8E6F=>0x59C9,\r
-0x8E70=>0x59FF,\r
-0x8E71=>0x5B50,\r
-0x8E72=>0x5C4D,\r
-0x8E73=>0x5E02,\r
-0x8E74=>0x5E2B,\r
-0x8E75=>0x5FD7,\r
-0x8E76=>0x601D,\r
-0x8E77=>0x6307,\r
-0x8E78=>0x652F,\r
-0x8E79=>0x5B5C,\r
-0x8E7A=>0x65AF,\r
-0x8E7B=>0x65BD,\r
-0x8E7C=>0x65E8,\r
-0x8E7D=>0x679D,\r
-0x8E7E=>0x6B62,\r
-0x8E80=>0x6B7B,\r
-0x8E81=>0x6C0F,\r
-0x8E82=>0x7345,\r
-0x8E83=>0x7949,\r
-0x8E84=>0x79C1,\r
-0x8E85=>0x7CF8,\r
-0x8E86=>0x7D19,\r
-0x8E87=>0x7D2B,\r
-0x8E88=>0x80A2,\r
-0x8E89=>0x8102,\r
-0x8E8A=>0x81F3,\r
-0x8E8B=>0x8996,\r
-0x8E8C=>0x8A5E,\r
-0x8E8D=>0x8A69,\r
-0x8E8E=>0x8A66,\r
-0x8E8F=>0x8A8C,\r
-0x8E90=>0x8AEE,\r
-0x8E91=>0x8CC7,\r
-0x8E92=>0x8CDC,\r
-0x8E93=>0x96CC,\r
-0x8E94=>0x98FC,\r
-0x8E95=>0x6B6F,\r
-0x8E96=>0x4E8B,\r
-0x8E97=>0x4F3C,\r
-0x8E98=>0x4F8D,\r
-0x8E99=>0x5150,\r
-0x8E9A=>0x5B57,\r
-0x8E9B=>0x5BFA,\r
-0x8E9C=>0x6148,\r
-0x8E9D=>0x6301,\r
-0x8E9E=>0x6642,\r
-0x8E9F=>0x6B21,\r
-0x8EA0=>0x6ECB,\r
-0x8EA1=>0x6CBB,\r
-0x8EA2=>0x723E,\r
-0x8EA3=>0x74BD,\r
-0x8EA4=>0x75D4,\r
-0x8EA5=>0x78C1,\r
-0x8EA6=>0x793A,\r
-0x8EA7=>0x800C,\r
-0x8EA8=>0x8033,\r
-0x8EA9=>0x81EA,\r
-0x8EAA=>0x8494,\r
-0x8EAB=>0x8F9E,\r
-0x8EAC=>0x6C50,\r
-0x8EAD=>0x9E7F,\r
-0x8EAE=>0x5F0F,\r
-0x8EAF=>0x8B58,\r
-0x8EB0=>0x9D2B,\r
-0x8EB1=>0x7AFA,\r
-0x8EB2=>0x8EF8,\r
-0x8EB3=>0x5B8D,\r
-0x8EB4=>0x96EB,\r
-0x8EB5=>0x4E03,\r
-0x8EB6=>0x53F1,\r
-0x8EB7=>0x57F7,\r
-0x8EB8=>0x5931,\r
-0x8EB9=>0x5AC9,\r
-0x8EBA=>0x5BA4,\r
-0x8EBB=>0x6089,\r
-0x8EBC=>0x6E7F,\r
-0x8EBD=>0x6F06,\r
-0x8EBE=>0x75BE,\r
-0x8EBF=>0x8CEA,\r
-0x8EC0=>0x5B9F,\r
-0x8EC1=>0x8500,\r
-0x8EC2=>0x7BE0,\r
-0x8EC3=>0x5072,\r
-0x8EC4=>0x67F4,\r
-0x8EC5=>0x829D,\r
-0x8EC6=>0x5C61,\r
-0x8EC7=>0x854A,\r
-0x8EC8=>0x7E1E,\r
-0x8EC9=>0x820E,\r
-0x8ECA=>0x5199,\r
-0x8ECB=>0x5C04,\r
-0x8ECC=>0x6368,\r
-0x8ECD=>0x8D66,\r
-0x8ECE=>0x659C,\r
-0x8ECF=>0x716E,\r
-0x8ED0=>0x793E,\r
-0x8ED1=>0x7D17,\r
-0x8ED2=>0x8005,\r
-0x8ED3=>0x8B1D,\r
-0x8ED4=>0x8ECA,\r
-0x8ED5=>0x906E,\r
-0x8ED6=>0x86C7,\r
-0x8ED7=>0x90AA,\r
-0x8ED8=>0x501F,\r
-0x8ED9=>0x52FA,\r
-0x8EDA=>0x5C3A,\r
-0x8EDB=>0x6753,\r
-0x8EDC=>0x707C,\r
-0x8EDD=>0x7235,\r
-0x8EDE=>0x914C,\r
-0x8EDF=>0x91C8,\r
-0x8EE0=>0x932B,\r
-0x8EE1=>0x82E5,\r
-0x8EE2=>0x5BC2,\r
-0x8EE3=>0x5F31,\r
-0x8EE4=>0x60F9,\r
-0x8EE5=>0x4E3B,\r
-0x8EE6=>0x53D6,\r
-0x8EE7=>0x5B88,\r
-0x8EE8=>0x624B,\r
-0x8EE9=>0x6731,\r
-0x8EEA=>0x6B8A,\r
-0x8EEB=>0x72E9,\r
-0x8EEC=>0x73E0,\r
-0x8EED=>0x7A2E,\r
-0x8EEE=>0x816B,\r
-0x8EEF=>0x8DA3,\r
-0x8EF0=>0x9152,\r
-0x8EF1=>0x9996,\r
-0x8EF2=>0x5112,\r
-0x8EF3=>0x53D7,\r
-0x8EF4=>0x546A,\r
-0x8EF5=>0x5BFF,\r
-0x8EF6=>0x6388,\r
-0x8EF7=>0x6A39,\r
-0x8EF8=>0x7DAC,\r
-0x8EF9=>0x9700,\r
-0x8EFA=>0x56DA,\r
-0x8EFB=>0x53CE,\r
-0x8EFC=>0x5468,\r
-0x8F40=>0x5B97,\r
-0x8F41=>0x5C31,\r
-0x8F42=>0x5DDE,\r
-0x8F43=>0x4FEE,\r
-0x8F44=>0x6101,\r
-0x8F45=>0x62FE,\r
-0x8F46=>0x6D32,\r
-0x8F47=>0x79C0,\r
-0x8F48=>0x79CB,\r
-0x8F49=>0x7D42,\r
-0x8F4A=>0x7E4D,\r
-0x8F4B=>0x7FD2,\r
-0x8F4C=>0x81ED,\r
-0x8F4D=>0x821F,\r
-0x8F4E=>0x8490,\r
-0x8F4F=>0x8846,\r
-0x8F50=>0x8972,\r
-0x8F51=>0x8B90,\r
-0x8F52=>0x8E74,\r
-0x8F53=>0x8F2F,\r
-0x8F54=>0x9031,\r
-0x8F55=>0x914B,\r
-0x8F56=>0x916C,\r
-0x8F57=>0x96C6,\r
-0x8F58=>0x919C,\r
-0x8F59=>0x4EC0,\r
-0x8F5A=>0x4F4F,\r
-0x8F5B=>0x5145,\r
-0x8F5C=>0x5341,\r
-0x8F5D=>0x5F93,\r
-0x8F5E=>0x620E,\r
-0x8F5F=>0x67D4,\r
-0x8F60=>0x6C41,\r
-0x8F61=>0x6E0B,\r
-0x8F62=>0x7363,\r
-0x8F63=>0x7E26,\r
-0x8F64=>0x91CD,\r
-0x8F65=>0x9283,\r
-0x8F66=>0x53D4,\r
-0x8F67=>0x5919,\r
-0x8F68=>0x5BBF,\r
-0x8F69=>0x6DD1,\r
-0x8F6A=>0x795D,\r
-0x8F6B=>0x7E2E,\r
-0x8F6C=>0x7C9B,\r
-0x8F6D=>0x587E,\r
-0x8F6E=>0x719F,\r
-0x8F6F=>0x51FA,\r
-0x8F70=>0x8853,\r
-0x8F71=>0x8FF0,\r
-0x8F72=>0x4FCA,\r
-0x8F73=>0x5CFB,\r
-0x8F74=>0x6625,\r
-0x8F75=>0x77AC,\r
-0x8F76=>0x7AE3,\r
-0x8F77=>0x821C,\r
-0x8F78=>0x99FF,\r
-0x8F79=>0x51C6,\r
-0x8F7A=>0x5FAA,\r
-0x8F7B=>0x65EC,\r
-0x8F7C=>0x696F,\r
-0x8F7D=>0x6B89,\r
-0x8F7E=>0x6DF3,\r
-0x8F80=>0x6E96,\r
-0x8F81=>0x6F64,\r
-0x8F82=>0x76FE,\r
-0x8F83=>0x7D14,\r
-0x8F84=>0x5DE1,\r
-0x8F85=>0x9075,\r
-0x8F86=>0x9187,\r
-0x8F87=>0x9806,\r
-0x8F88=>0x51E6,\r
-0x8F89=>0x521D,\r
-0x8F8A=>0x6240,\r
-0x8F8B=>0x6691,\r
-0x8F8C=>0x66D9,\r
-0x8F8D=>0x6E1A,\r
-0x8F8E=>0x5EB6,\r
-0x8F8F=>0x7DD2,\r
-0x8F90=>0x7F72,\r
-0x8F91=>0x66F8,\r
-0x8F92=>0x85AF,\r
-0x8F93=>0x85F7,\r
-0x8F94=>0x8AF8,\r
-0x8F95=>0x52A9,\r
-0x8F96=>0x53D9,\r
-0x8F97=>0x5973,\r
-0x8F98=>0x5E8F,\r
-0x8F99=>0x5F90,\r
-0x8F9A=>0x6055,\r
-0x8F9B=>0x92E4,\r
-0x8F9C=>0x9664,\r
-0x8F9D=>0x50B7,\r
-0x8F9E=>0x511F,\r
-0x8F9F=>0x52DD,\r
-0x8FA0=>0x5320,\r
-0x8FA1=>0x5347,\r
-0x8FA2=>0x53EC,\r
-0x8FA3=>0x54E8,\r
-0x8FA4=>0x5546,\r
-0x8FA5=>0x5531,\r
-0x8FA6=>0x5617,\r
-0x8FA7=>0x5968,\r
-0x8FA8=>0x59BE,\r
-0x8FA9=>0x5A3C,\r
-0x8FAA=>0x5BB5,\r
-0x8FAB=>0x5C06,\r
-0x8FAC=>0x5C0F,\r
-0x8FAD=>0x5C11,\r
-0x8FAE=>0x5C1A,\r
-0x8FAF=>0x5E84,\r
-0x8FB0=>0x5E8A,\r
-0x8FB1=>0x5EE0,\r
-0x8FB2=>0x5F70,\r
-0x8FB3=>0x627F,\r
-0x8FB4=>0x6284,\r
-0x8FB5=>0x62DB,\r
-0x8FB6=>0x638C,\r
-0x8FB7=>0x6377,\r
-0x8FB8=>0x6607,\r
-0x8FB9=>0x660C,\r
-0x8FBA=>0x662D,\r
-0x8FBB=>0x6676,\r
-0x8FBC=>0x677E,\r
-0x8FBD=>0x68A2,\r
-0x8FBE=>0x6A1F,\r
-0x8FBF=>0x6A35,\r
-0x8FC0=>0x6CBC,\r
-0x8FC1=>0x6D88,\r
-0x8FC2=>0x6E09,\r
-0x8FC3=>0x6E58,\r
-0x8FC4=>0x713C,\r
-0x8FC5=>0x7126,\r
-0x8FC6=>0x7167,\r
-0x8FC7=>0x75C7,\r
-0x8FC8=>0x7701,\r
-0x8FC9=>0x785D,\r
-0x8FCA=>0x7901,\r
-0x8FCB=>0x7965,\r
-0x8FCC=>0x79F0,\r
-0x8FCD=>0x7AE0,\r
-0x8FCE=>0x7B11,\r
-0x8FCF=>0x7CA7,\r
-0x8FD0=>0x7D39,\r
-0x8FD1=>0x8096,\r
-0x8FD2=>0x83D6,\r
-0x8FD3=>0x848B,\r
-0x8FD4=>0x8549,\r
-0x8FD5=>0x885D,\r
-0x8FD6=>0x88F3,\r
-0x8FD7=>0x8A1F,\r
-0x8FD8=>0x8A3C,\r
-0x8FD9=>0x8A54,\r
-0x8FDA=>0x8A73,\r
-0x8FDB=>0x8C61,\r
-0x8FDC=>0x8CDE,\r
-0x8FDD=>0x91A4,\r
-0x8FDE=>0x9266,\r
-0x8FDF=>0x937E,\r
-0x8FE0=>0x9418,\r
-0x8FE1=>0x969C,\r
-0x8FE2=>0x9798,\r
-0x8FE3=>0x4E0A,\r
-0x8FE4=>0x4E08,\r
-0x8FE5=>0x4E1E,\r
-0x8FE6=>0x4E57,\r
-0x8FE7=>0x5197,\r
-0x8FE8=>0x5270,\r
-0x8FE9=>0x57CE,\r
-0x8FEA=>0x5834,\r
-0x8FEB=>0x58CC,\r
-0x8FEC=>0x5B22,\r
-0x8FED=>0x5E38,\r
-0x8FEE=>0x60C5,\r
-0x8FEF=>0x64FE,\r
-0x8FF0=>0x6761,\r
-0x8FF1=>0x6756,\r
-0x8FF2=>0x6D44,\r
-0x8FF3=>0x72B6,\r
-0x8FF4=>0x7573,\r
-0x8FF5=>0x7A63,\r
-0x8FF6=>0x84B8,\r
-0x8FF7=>0x8B72,\r
-0x8FF8=>0x91B8,\r
-0x8FF9=>0x9320,\r
-0x8FFA=>0x5631,\r
-0x8FFB=>0x57F4,\r
-0x8FFC=>0x98FE,\r
-0x9040=>0x62ED,\r
-0x9041=>0x690D,\r
-0x9042=>0x6B96,\r
-0x9043=>0x71ED,\r
-0x9044=>0x7E54,\r
-0x9045=>0x8077,\r
-0x9046=>0x8272,\r
-0x9047=>0x89E6,\r
-0x9048=>0x98DF,\r
-0x9049=>0x8755,\r
-0x904A=>0x8FB1,\r
-0x904B=>0x5C3B,\r
-0x904C=>0x4F38,\r
-0x904D=>0x4FE1,\r
-0x904E=>0x4FB5,\r
-0x904F=>0x5507,\r
-0x9050=>0x5A20,\r
-0x9051=>0x5BDD,\r
-0x9052=>0x5BE9,\r
-0x9053=>0x5FC3,\r
-0x9054=>0x614E,\r
-0x9055=>0x632F,\r
-0x9056=>0x65B0,\r
-0x9057=>0x664B,\r
-0x9058=>0x68EE,\r
-0x9059=>0x699B,\r
-0x905A=>0x6D78,\r
-0x905B=>0x6DF1,\r
-0x905C=>0x7533,\r
-0x905D=>0x75B9,\r
-0x905E=>0x771F,\r
-0x905F=>0x795E,\r
-0x9060=>0x79E6,\r
-0x9061=>0x7D33,\r
-0x9062=>0x81E3,\r
-0x9063=>0x82AF,\r
-0x9064=>0x85AA,\r
-0x9065=>0x89AA,\r
-0x9066=>0x8A3A,\r
-0x9067=>0x8EAB,\r
-0x9068=>0x8F9B,\r
-0x9069=>0x9032,\r
-0x906A=>0x91DD,\r
-0x906B=>0x9707,\r
-0x906C=>0x4EBA,\r
-0x906D=>0x4EC1,\r
-0x906E=>0x5203,\r
-0x906F=>0x5875,\r
-0x9070=>0x58EC,\r
-0x9071=>0x5C0B,\r
-0x9072=>0x751A,\r
-0x9073=>0x5C3D,\r
-0x9074=>0x814E,\r
-0x9075=>0x8A0A,\r
-0x9076=>0x8FC5,\r
-0x9077=>0x9663,\r
-0x9078=>0x976D,\r
-0x9079=>0x7B25,\r
-0x907A=>0x8ACF,\r
-0x907B=>0x9808,\r
-0x907C=>0x9162,\r
-0x907D=>0x56F3,\r
-0x907E=>0x53A8,\r
-0x9080=>0x9017,\r
-0x9081=>0x5439,\r
-0x9082=>0x5782,\r
-0x9083=>0x5E25,\r
-0x9084=>0x63A8,\r
-0x9085=>0x6C34,\r
-0x9086=>0x708A,\r
-0x9087=>0x7761,\r
-0x9088=>0x7C8B,\r
-0x9089=>0x7FE0,\r
-0x908A=>0x8870,\r
-0x908B=>0x9042,\r
-0x908C=>0x9154,\r
-0x908D=>0x9310,\r
-0x908E=>0x9318,\r
-0x908F=>0x968F,\r
-0x9090=>0x745E,\r
-0x9091=>0x9AC4,\r
-0x9092=>0x5D07,\r
-0x9093=>0x5D69,\r
-0x9094=>0x6570,\r
-0x9095=>0x67A2,\r
-0x9096=>0x8DA8,\r
-0x9097=>0x96DB,\r
-0x9098=>0x636E,\r
-0x9099=>0x6749,\r
-0x909A=>0x6919,\r
-0x909B=>0x83C5,\r
-0x909C=>0x9817,\r
-0x909D=>0x96C0,\r
-0x909E=>0x88FE,\r
-0x909F=>0x6F84,\r
-0x90A0=>0x647A,\r
-0x90A1=>0x5BF8,\r
-0x90A2=>0x4E16,\r
-0x90A3=>0x702C,\r
-0x90A4=>0x755D,\r
-0x90A5=>0x662F,\r
-0x90A6=>0x51C4,\r
-0x90A7=>0x5236,\r
-0x90A8=>0x52E2,\r
-0x90A9=>0x59D3,\r
-0x90AA=>0x5F81,\r
-0x90AB=>0x6027,\r
-0x90AC=>0x6210,\r
-0x90AD=>0x653F,\r
-0x90AE=>0x6574,\r
-0x90AF=>0x661F,\r
-0x90B0=>0x6674,\r
-0x90B1=>0x68F2,\r
-0x90B2=>0x6816,\r
-0x90B3=>0x6B63,\r
-0x90B4=>0x6E05,\r
-0x90B5=>0x7272,\r
-0x90B6=>0x751F,\r
-0x90B7=>0x76DB,\r
-0x90B8=>0x7CBE,\r
-0x90B9=>0x8056,\r
-0x90BA=>0x58F0,\r
-0x90BB=>0x88FD,\r
-0x90BC=>0x897F,\r
-0x90BD=>0x8AA0,\r
-0x90BE=>0x8A93,\r
-0x90BF=>0x8ACB,\r
-0x90C0=>0x901D,\r
-0x90C1=>0x9192,\r
-0x90C2=>0x9752,\r
-0x90C3=>0x9759,\r
-0x90C4=>0x6589,\r
-0x90C5=>0x7A0E,\r
-0x90C6=>0x8106,\r
-0x90C7=>0x96BB,\r
-0x90C8=>0x5E2D,\r
-0x90C9=>0x60DC,\r
-0x90CA=>0x621A,\r
-0x90CB=>0x65A5,\r
-0x90CC=>0x6614,\r
-0x90CD=>0x6790,\r
-0x90CE=>0x77F3,\r
-0x90CF=>0x7A4D,\r
-0x90D0=>0x7C4D,\r
-0x90D1=>0x7E3E,\r
-0x90D2=>0x810A,\r
-0x90D3=>0x8CAC,\r
-0x90D4=>0x8D64,\r
-0x90D5=>0x8DE1,\r
-0x90D6=>0x8E5F,\r
-0x90D7=>0x78A9,\r
-0x90D8=>0x5207,\r
-0x90D9=>0x62D9,\r
-0x90DA=>0x63A5,\r
-0x90DB=>0x6442,\r
-0x90DC=>0x6298,\r
-0x90DD=>0x8A2D,\r
-0x90DE=>0x7A83,\r
-0x90DF=>0x7BC0,\r
-0x90E0=>0x8AAC,\r
-0x90E1=>0x96EA,\r
-0x90E2=>0x7D76,\r
-0x90E3=>0x820C,\r
-0x90E4=>0x8749,\r
-0x90E5=>0x4ED9,\r
-0x90E6=>0x5148,\r
-0x90E7=>0x5343,\r
-0x90E8=>0x5360,\r
-0x90E9=>0x5BA3,\r
-0x90EA=>0x5C02,\r
-0x90EB=>0x5C16,\r
-0x90EC=>0x5DDD,\r
-0x90ED=>0x6226,\r
-0x90EE=>0x6247,\r
-0x90EF=>0x64B0,\r
-0x90F0=>0x6813,\r
-0x90F1=>0x6834,\r
-0x90F2=>0x6CC9,\r
-0x90F3=>0x6D45,\r
-0x90F4=>0x6D17,\r
-0x90F5=>0x67D3,\r
-0x90F6=>0x6F5C,\r
-0x90F7=>0x714E,\r
-0x90F8=>0x717D,\r
-0x90F9=>0x65CB,\r
-0x90FA=>0x7A7F,\r
-0x90FB=>0x7BAD,\r
-0x90FC=>0x7DDA,\r
-0x9140=>0x7E4A,\r
-0x9141=>0x7FA8,\r
-0x9142=>0x817A,\r
-0x9143=>0x821B,\r
-0x9144=>0x8239,\r
-0x9145=>0x85A6,\r
-0x9146=>0x8A6E,\r
-0x9147=>0x8CCE,\r
-0x9148=>0x8DF5,\r
-0x9149=>0x9078,\r
-0x914A=>0x9077,\r
-0x914B=>0x92AD,\r
-0x914C=>0x9291,\r
-0x914D=>0x9583,\r
-0x914E=>0x9BAE,\r
-0x914F=>0x524D,\r
-0x9150=>0x5584,\r
-0x9151=>0x6F38,\r
-0x9152=>0x7136,\r
-0x9153=>0x5168,\r
-0x9154=>0x7985,\r
-0x9155=>0x7E55,\r
-0x9156=>0x81B3,\r
-0x9157=>0x7CCE,\r
-0x9158=>0x564C,\r
-0x9159=>0x5851,\r
-0x915A=>0x5CA8,\r
-0x915B=>0x63AA,\r
-0x915C=>0x66FE,\r
-0x915D=>0x66FD,\r
-0x915E=>0x695A,\r
-0x915F=>0x72D9,\r
-0x9160=>0x758F,\r
-0x9161=>0x758E,\r
-0x9162=>0x790E,\r
-0x9163=>0x7956,\r
-0x9164=>0x79DF,\r
-0x9165=>0x7C97,\r
-0x9166=>0x7D20,\r
-0x9167=>0x7D44,\r
-0x9168=>0x8607,\r
-0x9169=>0x8A34,\r
-0x916A=>0x963B,\r
-0x916B=>0x9061,\r
-0x916C=>0x9F20,\r
-0x916D=>0x50E7,\r
-0x916E=>0x5275,\r
-0x916F=>0x53CC,\r
-0x9170=>0x53E2,\r
-0x9171=>0x5009,\r
-0x9172=>0x55AA,\r
-0x9173=>0x58EE,\r
-0x9174=>0x594F,\r
-0x9175=>0x723D,\r
-0x9176=>0x5B8B,\r
-0x9177=>0x5C64,\r
-0x9178=>0x531D,\r
-0x9179=>0x60E3,\r
-0x917A=>0x60F3,\r
-0x917B=>0x635C,\r
-0x917C=>0x6383,\r
-0x917D=>0x633F,\r
-0x917E=>0x63BB,\r
-0x9180=>0x64CD,\r
-0x9181=>0x65E9,\r
-0x9182=>0x66F9,\r
-0x9183=>0x5DE3,\r
-0x9184=>0x69CD,\r
-0x9185=>0x69FD,\r
-0x9186=>0x6F15,\r
-0x9187=>0x71E5,\r
-0x9188=>0x4E89,\r
-0x9189=>0x75E9,\r
-0x918A=>0x76F8,\r
-0x918B=>0x7A93,\r
-0x918C=>0x7CDF,\r
-0x918D=>0x7DCF,\r
-0x918E=>0x7D9C,\r
-0x918F=>0x8061,\r
-0x9190=>0x8349,\r
-0x9191=>0x8358,\r
-0x9192=>0x846C,\r
-0x9193=>0x84BC,\r
-0x9194=>0x85FB,\r
-0x9195=>0x88C5,\r
-0x9196=>0x8D70,\r
-0x9197=>0x9001,\r
-0x9198=>0x906D,\r
-0x9199=>0x9397,\r
-0x919A=>0x971C,\r
-0x919B=>0x9A12,\r
-0x919C=>0x50CF,\r
-0x919D=>0x5897,\r
-0x919E=>0x618E,\r
-0x919F=>0x81D3,\r
-0x91A0=>0x8535,\r
-0x91A1=>0x8D08,\r
-0x91A2=>0x9020,\r
-0x91A3=>0x4FC3,\r
-0x91A4=>0x5074,\r
-0x91A5=>0x5247,\r
-0x91A6=>0x5373,\r
-0x91A7=>0x606F,\r
-0x91A8=>0x6349,\r
-0x91A9=>0x675F,\r
-0x91AA=>0x6E2C,\r
-0x91AB=>0x8DB3,\r
-0x91AC=>0x901F,\r
-0x91AD=>0x4FD7,\r
-0x91AE=>0x5C5E,\r
-0x91AF=>0x8CCA,\r
-0x91B0=>0x65CF,\r
-0x91B1=>0x7D9A,\r
-0x91B2=>0x5352,\r
-0x91B3=>0x8896,\r
-0x91B4=>0x5176,\r
-0x91B5=>0x63C3,\r
-0x91B6=>0x5B58,\r
-0x91B7=>0x5B6B,\r
-0x91B8=>0x5C0A,\r
-0x91B9=>0x640D,\r
-0x91BA=>0x6751,\r
-0x91BB=>0x905C,\r
-0x91BC=>0x4ED6,\r
-0x91BD=>0x591A,\r
-0x91BE=>0x592A,\r
-0x91BF=>0x6C70,\r
-0x91C0=>0x8A51,\r
-0x91C1=>0x553E,\r
-0x91C2=>0x5815,\r
-0x91C3=>0x59A5,\r
-0x91C4=>0x60F0,\r
-0x91C5=>0x6253,\r
-0x91C6=>0x67C1,\r
-0x91C7=>0x8235,\r
-0x91C8=>0x6955,\r
-0x91C9=>0x9640,\r
-0x91CA=>0x99C4,\r
-0x91CB=>0x9A28,\r
-0x91CC=>0x4F53,\r
-0x91CD=>0x5806,\r
-0x91CE=>0x5BFE,\r
-0x91CF=>0x8010,\r
-0x91D0=>0x5CB1,\r
-0x91D1=>0x5E2F,\r
-0x91D2=>0x5F85,\r
-0x91D3=>0x6020,\r
-0x91D4=>0x614B,\r
-0x91D5=>0x6234,\r
-0x91D6=>0x66FF,\r
-0x91D7=>0x6CF0,\r
-0x91D8=>0x6EDE,\r
-0x91D9=>0x80CE,\r
-0x91DA=>0x817F,\r
-0x91DB=>0x82D4,\r
-0x91DC=>0x888B,\r
-0x91DD=>0x8CB8,\r
-0x91DE=>0x9000,\r
-0x91DF=>0x902E,\r
-0x91E0=>0x968A,\r
-0x91E1=>0x9EDB,\r
-0x91E2=>0x9BDB,\r
-0x91E3=>0x4EE3,\r
-0x91E4=>0x53F0,\r
-0x91E5=>0x5927,\r
-0x91E6=>0x7B2C,\r
-0x91E7=>0x918D,\r
-0x91E8=>0x984C,\r
-0x91E9=>0x9DF9,\r
-0x91EA=>0x6EDD,\r
-0x91EB=>0x7027,\r
-0x91EC=>0x5353,\r
-0x91ED=>0x5544,\r
-0x91EE=>0x5B85,\r
-0x91EF=>0x6258,\r
-0x91F0=>0x629E,\r
-0x91F1=>0x62D3,\r
-0x91F2=>0x6CA2,\r
-0x91F3=>0x6FEF,\r
-0x91F4=>0x7422,\r
-0x91F5=>0x8A17,\r
-0x91F6=>0x9438,\r
-0x91F7=>0x6FC1,\r
-0x91F8=>0x8AFE,\r
-0x91F9=>0x8338,\r
-0x91FA=>0x51E7,\r
-0x91FB=>0x86F8,\r
-0x91FC=>0x53EA,\r
-0x9240=>0x53E9,\r
-0x9241=>0x4F46,\r
-0x9242=>0x9054,\r
-0x9243=>0x8FB0,\r
-0x9244=>0x596A,\r
-0x9245=>0x8131,\r
-0x9246=>0x5DFD,\r
-0x9247=>0x7AEA,\r
-0x9248=>0x8FBF,\r
-0x9249=>0x68DA,\r
-0x924A=>0x8C37,\r
-0x924B=>0x72F8,\r
-0x924C=>0x9C48,\r
-0x924D=>0x6A3D,\r
-0x924E=>0x8AB0,\r
-0x924F=>0x4E39,\r
-0x9250=>0x5358,\r
-0x9251=>0x5606,\r
-0x9252=>0x5766,\r
-0x9253=>0x62C5,\r
-0x9254=>0x63A2,\r
-0x9255=>0x65E6,\r
-0x9256=>0x6B4E,\r
-0x9257=>0x6DE1,\r
-0x9258=>0x6E5B,\r
-0x9259=>0x70AD,\r
-0x925A=>0x77ED,\r
-0x925B=>0x7AEF,\r
-0x925C=>0x7BAA,\r
-0x925D=>0x7DBB,\r
-0x925E=>0x803D,\r
-0x925F=>0x80C6,\r
-0x9260=>0x86CB,\r
-0x9261=>0x8A95,\r
-0x9262=>0x935B,\r
-0x9263=>0x56E3,\r
-0x9264=>0x58C7,\r
-0x9265=>0x5F3E,\r
-0x9266=>0x65AD,\r
-0x9267=>0x6696,\r
-0x9268=>0x6A80,\r
-0x9269=>0x6BB5,\r
-0x926A=>0x7537,\r
-0x926B=>0x8AC7,\r
-0x926C=>0x5024,\r
-0x926D=>0x77E5,\r
-0x926E=>0x5730,\r
-0x926F=>0x5F1B,\r
-0x9270=>0x6065,\r
-0x9271=>0x667A,\r
-0x9272=>0x6C60,\r
-0x9273=>0x75F4,\r
-0x9274=>0x7A1A,\r
-0x9275=>0x7F6E,\r
-0x9276=>0x81F4,\r
-0x9277=>0x8718,\r
-0x9278=>0x9045,\r
-0x9279=>0x99B3,\r
-0x927A=>0x7BC9,\r
-0x927B=>0x755C,\r
-0x927C=>0x7AF9,\r
-0x927D=>0x7B51,\r
-0x927E=>0x84C4,\r
-0x9280=>0x9010,\r
-0x9281=>0x79E9,\r
-0x9282=>0x7A92,\r
-0x9283=>0x8336,\r
-0x9284=>0x5AE1,\r
-0x9285=>0x7740,\r
-0x9286=>0x4E2D,\r
-0x9287=>0x4EF2,\r
-0x9288=>0x5B99,\r
-0x9289=>0x5FE0,\r
-0x928A=>0x62BD,\r
-0x928B=>0x663C,\r
-0x928C=>0x67F1,\r
-0x928D=>0x6CE8,\r
-0x928E=>0x866B,\r
-0x928F=>0x8877,\r
-0x9290=>0x8A3B,\r
-0x9291=>0x914E,\r
-0x9292=>0x92F3,\r
-0x9293=>0x99D0,\r
-0x9294=>0x6A17,\r
-0x9295=>0x7026,\r
-0x9296=>0x732A,\r
-0x9297=>0x82E7,\r
-0x9298=>0x8457,\r
-0x9299=>0x8CAF,\r
-0x929A=>0x4E01,\r
-0x929B=>0x5146,\r
-0x929C=>0x51CB,\r
-0x929D=>0x558B,\r
-0x929E=>0x5BF5,\r
-0x929F=>0x5E16,\r
-0x92A0=>0x5E33,\r
-0x92A1=>0x5E81,\r
-0x92A2=>0x5F14,\r
-0x92A3=>0x5F35,\r
-0x92A4=>0x5F6B,\r
-0x92A5=>0x5FB4,\r
-0x92A6=>0x61F2,\r
-0x92A7=>0x6311,\r
-0x92A8=>0x66A2,\r
-0x92A9=>0x671D,\r
-0x92AA=>0x6F6E,\r
-0x92AB=>0x7252,\r
-0x92AC=>0x753A,\r
-0x92AD=>0x773A,\r
-0x92AE=>0x8074,\r
-0x92AF=>0x8139,\r
-0x92B0=>0x8178,\r
-0x92B1=>0x8776,\r
-0x92B2=>0x8ABF,\r
-0x92B3=>0x8ADC,\r
-0x92B4=>0x8D85,\r
-0x92B5=>0x8DF3,\r
-0x92B6=>0x929A,\r
-0x92B7=>0x9577,\r
-0x92B8=>0x9802,\r
-0x92B9=>0x9CE5,\r
-0x92BA=>0x52C5,\r
-0x92BB=>0x6357,\r
-0x92BC=>0x76F4,\r
-0x92BD=>0x6715,\r
-0x92BE=>0x6C88,\r
-0x92BF=>0x73CD,\r
-0x92C0=>0x8CC3,\r
-0x92C1=>0x93AE,\r
-0x92C2=>0x9673,\r
-0x92C3=>0x6D25,\r
-0x92C4=>0x589C,\r
-0x92C5=>0x690E,\r
-0x92C6=>0x69CC,\r
-0x92C7=>0x8FFD,\r
-0x92C8=>0x939A,\r
-0x92C9=>0x75DB,\r
-0x92CA=>0x901A,\r
-0x92CB=>0x585A,\r
-0x92CC=>0x6802,\r
-0x92CD=>0x63B4,\r
-0x92CE=>0x69FB,\r
-0x92CF=>0x4F43,\r
-0x92D0=>0x6F2C,\r
-0x92D1=>0x67D8,\r
-0x92D2=>0x8FBB,\r
-0x92D3=>0x8526,\r
-0x92D4=>0x7DB4,\r
-0x92D5=>0x9354,\r
-0x92D6=>0x693F,\r
-0x92D7=>0x6F70,\r
-0x92D8=>0x576A,\r
-0x92D9=>0x58F7,\r
-0x92DA=>0x5B2C,\r
-0x92DB=>0x7D2C,\r
-0x92DC=>0x722A,\r
-0x92DD=>0x540A,\r
-0x92DE=>0x91E3,\r
-0x92DF=>0x9DB4,\r
-0x92E0=>0x4EAD,\r
-0x92E1=>0x4F4E,\r
-0x92E2=>0x505C,\r
-0x92E3=>0x5075,\r
-0x92E4=>0x5243,\r
-0x92E5=>0x8C9E,\r
-0x92E6=>0x5448,\r
-0x92E7=>0x5824,\r
-0x92E8=>0x5B9A,\r
-0x92E9=>0x5E1D,\r
-0x92EA=>0x5E95,\r
-0x92EB=>0x5EAD,\r
-0x92EC=>0x5EF7,\r
-0x92ED=>0x5F1F,\r
-0x92EE=>0x608C,\r
-0x92EF=>0x62B5,\r
-0x92F0=>0x633A,\r
-0x92F1=>0x63D0,\r
-0x92F2=>0x68AF,\r
-0x92F3=>0x6C40,\r
-0x92F4=>0x7887,\r
-0x92F5=>0x798E,\r
-0x92F6=>0x7A0B,\r
-0x92F7=>0x7DE0,\r
-0x92F8=>0x8247,\r
-0x92F9=>0x8A02,\r
-0x92FA=>0x8AE6,\r
-0x92FB=>0x8E44,\r
-0x92FC=>0x9013,\r
-0x9340=>0x90B8,\r
-0x9341=>0x912D,\r
-0x9342=>0x91D8,\r
-0x9343=>0x9F0E,\r
-0x9344=>0x6CE5,\r
-0x9345=>0x6458,\r
-0x9346=>0x64E2,\r
-0x9347=>0x6575,\r
-0x9348=>0x6EF4,\r
-0x9349=>0x7684,\r
-0x934A=>0x7B1B,\r
-0x934B=>0x9069,\r
-0x934C=>0x93D1,\r
-0x934D=>0x6EBA,\r
-0x934E=>0x54F2,\r
-0x934F=>0x5FB9,\r
-0x9350=>0x64A4,\r
-0x9351=>0x8F4D,\r
-0x9352=>0x8FED,\r
-0x9353=>0x9244,\r
-0x9354=>0x5178,\r
-0x9355=>0x586B,\r
-0x9356=>0x5929,\r
-0x9357=>0x5C55,\r
-0x9358=>0x5E97,\r
-0x9359=>0x6DFB,\r
-0x935A=>0x7E8F,\r
-0x935B=>0x751C,\r
-0x935C=>0x8CBC,\r
-0x935D=>0x8EE2,\r
-0x935E=>0x985B,\r
-0x935F=>0x70B9,\r
-0x9360=>0x4F1D,\r
-0x9361=>0x6BBF,\r
-0x9362=>0x6FB1,\r
-0x9363=>0x7530,\r
-0x9364=>0x96FB,\r
-0x9365=>0x514E,\r
-0x9366=>0x5410,\r
-0x9367=>0x5835,\r
-0x9368=>0x5857,\r
-0x9369=>0x59AC,\r
-0x936A=>0x5C60,\r
-0x936B=>0x5F92,\r
-0x936C=>0x6597,\r
-0x936D=>0x675C,\r
-0x936E=>0x6E21,\r
-0x936F=>0x767B,\r
-0x9370=>0x83DF,\r
-0x9371=>0x8CED,\r
-0x9372=>0x9014,\r
-0x9373=>0x90FD,\r
-0x9374=>0x934D,\r
-0x9375=>0x7825,\r
-0x9376=>0x783A,\r
-0x9377=>0x52AA,\r
-0x9378=>0x5EA6,\r
-0x9379=>0x571F,\r
-0x937A=>0x5974,\r
-0x937B=>0x6012,\r
-0x937C=>0x5012,\r
-0x937D=>0x515A,\r
-0x937E=>0x51AC,\r
-0x9380=>0x51CD,\r
-0x9381=>0x5200,\r
-0x9382=>0x5510,\r
-0x9383=>0x5854,\r
-0x9384=>0x5858,\r
-0x9385=>0x5957,\r
-0x9386=>0x5B95,\r
-0x9387=>0x5CF6,\r
-0x9388=>0x5D8B,\r
-0x9389=>0x60BC,\r
-0x938A=>0x6295,\r
-0x938B=>0x642D,\r
-0x938C=>0x6771,\r
-0x938D=>0x6843,\r
-0x938E=>0x68BC,\r
-0x938F=>0x68DF,\r
-0x9390=>0x76D7,\r
-0x9391=>0x6DD8,\r
-0x9392=>0x6E6F,\r
-0x9393=>0x6D9B,\r
-0x9394=>0x706F,\r
-0x9395=>0x71C8,\r
-0x9396=>0x5F53,\r
-0x9397=>0x75D8,\r
-0x9398=>0x7977,\r
-0x9399=>0x7B49,\r
-0x939A=>0x7B54,\r
-0x939B=>0x7B52,\r
-0x939C=>0x7CD6,\r
-0x939D=>0x7D71,\r
-0x939E=>0x5230,\r
-0x939F=>0x8463,\r
-0x93A0=>0x8569,\r
-0x93A1=>0x85E4,\r
-0x93A2=>0x8A0E,\r
-0x93A3=>0x8B04,\r
-0x93A4=>0x8C46,\r
-0x93A5=>0x8E0F,\r
-0x93A6=>0x9003,\r
-0x93A7=>0x900F,\r
-0x93A8=>0x9419,\r
-0x93A9=>0x9676,\r
-0x93AA=>0x982D,\r
-0x93AB=>0x9A30,\r
-0x93AC=>0x95D8,\r
-0x93AD=>0x50CD,\r
-0x93AE=>0x52D5,\r
-0x93AF=>0x540C,\r
-0x93B0=>0x5802,\r
-0x93B1=>0x5C0E,\r
-0x93B2=>0x61A7,\r
-0x93B3=>0x649E,\r
-0x93B4=>0x6D1E,\r
-0x93B5=>0x77B3,\r
-0x93B6=>0x7AE5,\r
-0x93B7=>0x80F4,\r
-0x93B8=>0x8404,\r
-0x93B9=>0x9053,\r
-0x93BA=>0x9285,\r
-0x93BB=>0x5CE0,\r
-0x93BC=>0x9D07,\r
-0x93BD=>0x533F,\r
-0x93BE=>0x5F97,\r
-0x93BF=>0x5FB3,\r
-0x93C0=>0x6D9C,\r
-0x93C1=>0x7279,\r
-0x93C2=>0x7763,\r
-0x93C3=>0x79BF,\r
-0x93C4=>0x7BE4,\r
-0x93C5=>0x6BD2,\r
-0x93C6=>0x72EC,\r
-0x93C7=>0x8AAD,\r
-0x93C8=>0x6803,\r
-0x93C9=>0x6A61,\r
-0x93CA=>0x51F8,\r
-0x93CB=>0x7A81,\r
-0x93CC=>0x6934,\r
-0x93CD=>0x5C4A,\r
-0x93CE=>0x9CF6,\r
-0x93CF=>0x82EB,\r
-0x93D0=>0x5BC5,\r
-0x93D1=>0x9149,\r
-0x93D2=>0x701E,\r
-0x93D3=>0x5678,\r
-0x93D4=>0x5C6F,\r
-0x93D5=>0x60C7,\r
-0x93D6=>0x6566,\r
-0x93D7=>0x6C8C,\r
-0x93D8=>0x8C5A,\r
-0x93D9=>0x9041,\r
-0x93DA=>0x9813,\r
-0x93DB=>0x5451,\r
-0x93DC=>0x66C7,\r
-0x93DD=>0x920D,\r
-0x93DE=>0x5948,\r
-0x93DF=>0x90A3,\r
-0x93E0=>0x5185,\r
-0x93E1=>0x4E4D,\r
-0x93E2=>0x51EA,\r
-0x93E3=>0x8599,\r
-0x93E4=>0x8B0E,\r
-0x93E5=>0x7058,\r
-0x93E6=>0x637A,\r
-0x93E7=>0x934B,\r
-0x93E8=>0x6962,\r
-0x93E9=>0x99B4,\r
-0x93EA=>0x7E04,\r
-0x93EB=>0x7577,\r
-0x93EC=>0x5357,\r
-0x93ED=>0x6960,\r
-0x93EE=>0x8EDF,\r
-0x93EF=>0x96E3,\r
-0x93F0=>0x6C5D,\r
-0x93F1=>0x4E8C,\r
-0x93F2=>0x5C3C,\r
-0x93F3=>0x5F10,\r
-0x93F4=>0x8FE9,\r
-0x93F5=>0x5302,\r
-0x93F6=>0x8CD1,\r
-0x93F7=>0x8089,\r
-0x93F8=>0x8679,\r
-0x93F9=>0x5EFF,\r
-0x93FA=>0x65E5,\r
-0x93FB=>0x4E73,\r
-0x93FC=>0x5165,\r
-0x9440=>0x5982,\r
-0x9441=>0x5C3F,\r
-0x9442=>0x97EE,\r
-0x9443=>0x4EFB,\r
-0x9444=>0x598A,\r
-0x9445=>0x5FCD,\r
-0x9446=>0x8A8D,\r
-0x9447=>0x6FE1,\r
-0x9448=>0x79B0,\r
-0x9449=>0x7962,\r
-0x944A=>0x5BE7,\r
-0x944B=>0x8471,\r
-0x944C=>0x732B,\r
-0x944D=>0x71B1,\r
-0x944E=>0x5E74,\r
-0x944F=>0x5FF5,\r
-0x9450=>0x637B,\r
-0x9451=>0x649A,\r
-0x9452=>0x71C3,\r
-0x9453=>0x7C98,\r
-0x9454=>0x4E43,\r
-0x9455=>0x5EFC,\r
-0x9456=>0x4E4B,\r
-0x9457=>0x57DC,\r
-0x9458=>0x56A2,\r
-0x9459=>0x60A9,\r
-0x945A=>0x6FC3,\r
-0x945B=>0x7D0D,\r
-0x945C=>0x80FD,\r
-0x945D=>0x8133,\r
-0x945E=>0x81BF,\r
-0x945F=>0x8FB2,\r
-0x9460=>0x8997,\r
-0x9461=>0x86A4,\r
-0x9462=>0x5DF4,\r
-0x9463=>0x628A,\r
-0x9464=>0x64AD,\r
-0x9465=>0x8987,\r
-0x9466=>0x6777,\r
-0x9467=>0x6CE2,\r
-0x9468=>0x6D3E,\r
-0x9469=>0x7436,\r
-0x946A=>0x7834,\r
-0x946B=>0x5A46,\r
-0x946C=>0x7F75,\r
-0x946D=>0x82AD,\r
-0x946E=>0x99AC,\r
-0x946F=>0x4FF3,\r
-0x9470=>0x5EC3,\r
-0x9471=>0x62DD,\r
-0x9472=>0x6392,\r
-0x9473=>0x6557,\r
-0x9474=>0x676F,\r
-0x9475=>0x76C3,\r
-0x9476=>0x724C,\r
-0x9477=>0x80CC,\r
-0x9478=>0x80BA,\r
-0x9479=>0x8F29,\r
-0x947A=>0x914D,\r
-0x947B=>0x500D,\r
-0x947C=>0x57F9,\r
-0x947D=>0x5A92,\r
-0x947E=>0x6885,\r
-0x9480=>0x6973,\r
-0x9481=>0x7164,\r
-0x9482=>0x72FD,\r
-0x9483=>0x8CB7,\r
-0x9484=>0x58F2,\r
-0x9485=>0x8CE0,\r
-0x9486=>0x966A,\r
-0x9487=>0x9019,\r
-0x9488=>0x877F,\r
-0x9489=>0x79E4,\r
-0x948A=>0x77E7,\r
-0x948B=>0x8429,\r
-0x948C=>0x4F2F,\r
-0x948D=>0x5265,\r
-0x948E=>0x535A,\r
-0x948F=>0x62CD,\r
-0x9490=>0x67CF,\r
-0x9491=>0x6CCA,\r
-0x9492=>0x767D,\r
-0x9493=>0x7B94,\r
-0x9494=>0x7C95,\r
-0x9495=>0x8236,\r
-0x9496=>0x8584,\r
-0x9497=>0x8FEB,\r
-0x9498=>0x66DD,\r
-0x9499=>0x6F20,\r
-0x949A=>0x7206,\r
-0x949B=>0x7E1B,\r
-0x949C=>0x83AB,\r
-0x949D=>0x99C1,\r
-0x949E=>0x9EA6,\r
-0x949F=>0x51FD,\r
-0x94A0=>0x7BB1,\r
-0x94A1=>0x7872,\r
-0x94A2=>0x7BB8,\r
-0x94A3=>0x8087,\r
-0x94A4=>0x7B48,\r
-0x94A5=>0x6AE8,\r
-0x94A6=>0x5E61,\r
-0x94A7=>0x808C,\r
-0x94A8=>0x7551,\r
-0x94A9=>0x7560,\r
-0x94AA=>0x516B,\r
-0x94AB=>0x9262,\r
-0x94AC=>0x6E8C,\r
-0x94AD=>0x767A,\r
-0x94AE=>0x9197,\r
-0x94AF=>0x9AEA,\r
-0x94B0=>0x4F10,\r
-0x94B1=>0x7F70,\r
-0x94B2=>0x629C,\r
-0x94B3=>0x7B4F,\r
-0x94B4=>0x95A5,\r
-0x94B5=>0x9CE9,\r
-0x94B6=>0x567A,\r
-0x94B7=>0x5859,\r
-0x94B8=>0x86E4,\r
-0x94B9=>0x96BC,\r
-0x94BA=>0x4F34,\r
-0x94BB=>0x5224,\r
-0x94BC=>0x534A,\r
-0x94BD=>0x53CD,\r
-0x94BE=>0x53DB,\r
-0x94BF=>0x5E06,\r
-0x94C0=>0x642C,\r
-0x94C1=>0x6591,\r
-0x94C2=>0x677F,\r
-0x94C3=>0x6C3E,\r
-0x94C4=>0x6C4E,\r
-0x94C5=>0x7248,\r
-0x94C6=>0x72AF,\r
-0x94C7=>0x73ED,\r
-0x94C8=>0x7554,\r
-0x94C9=>0x7E41,\r
-0x94CA=>0x822C,\r
-0x94CB=>0x85E9,\r
-0x94CC=>0x8CA9,\r
-0x94CD=>0x7BC4,\r
-0x94CE=>0x91C6,\r
-0x94CF=>0x7169,\r
-0x94D0=>0x9812,\r
-0x94D1=>0x98EF,\r
-0x94D2=>0x633D,\r
-0x94D3=>0x6669,\r
-0x94D4=>0x756A,\r
-0x94D5=>0x76E4,\r
-0x94D6=>0x78D0,\r
-0x94D7=>0x8543,\r
-0x94D8=>0x86EE,\r
-0x94D9=>0x532A,\r
-0x94DA=>0x5351,\r
-0x94DB=>0x5426,\r
-0x94DC=>0x5983,\r
-0x94DD=>0x5E87,\r
-0x94DE=>0x5F7C,\r
-0x94DF=>0x60B2,\r
-0x94E0=>0x6249,\r
-0x94E1=>0x6279,\r
-0x94E2=>0x62AB,\r
-0x94E3=>0x6590,\r
-0x94E4=>0x6BD4,\r
-0x94E5=>0x6CCC,\r
-0x94E6=>0x75B2,\r
-0x94E7=>0x76AE,\r
-0x94E8=>0x7891,\r
-0x94E9=>0x79D8,\r
-0x94EA=>0x7DCB,\r
-0x94EB=>0x7F77,\r
-0x94EC=>0x80A5,\r
-0x94ED=>0x88AB,\r
-0x94EE=>0x8AB9,\r
-0x94EF=>0x8CBB,\r
-0x94F0=>0x907F,\r
-0x94F1=>0x975E,\r
-0x94F2=>0x98DB,\r
-0x94F3=>0x6A0B,\r
-0x94F4=>0x7C38,\r
-0x94F5=>0x5099,\r
-0x94F6=>0x5C3E,\r
-0x94F7=>0x5FAE,\r
-0x94F8=>0x6787,\r
-0x94F9=>0x6BD8,\r
-0x94FA=>0x7435,\r
-0x94FB=>0x7709,\r
-0x94FC=>0x7F8E,\r
-0x9540=>0x9F3B,\r
-0x9541=>0x67CA,\r
-0x9542=>0x7A17,\r
-0x9543=>0x5339,\r
-0x9544=>0x758B,\r
-0x9545=>0x9AED,\r
-0x9546=>0x5F66,\r
-0x9547=>0x819D,\r
-0x9548=>0x83F1,\r
-0x9549=>0x8098,\r
-0x954A=>0x5F3C,\r
-0x954B=>0x5FC5,\r
-0x954C=>0x7562,\r
-0x954D=>0x7B46,\r
-0x954E=>0x903C,\r
-0x954F=>0x6867,\r
-0x9550=>0x59EB,\r
-0x9551=>0x5A9B,\r
-0x9552=>0x7D10,\r
-0x9553=>0x767E,\r
-0x9554=>0x8B2C,\r
-0x9555=>0x4FF5,\r
-0x9556=>0x5F6A,\r
-0x9557=>0x6A19,\r
-0x9558=>0x6C37,\r
-0x9559=>0x6F02,\r
-0x955A=>0x74E2,\r
-0x955B=>0x7968,\r
-0x955C=>0x8868,\r
-0x955D=>0x8A55,\r
-0x955E=>0x8C79,\r
-0x955F=>0x5EDF,\r
-0x9560=>0x63CF,\r
-0x9561=>0x75C5,\r
-0x9562=>0x79D2,\r
-0x9563=>0x82D7,\r
-0x9564=>0x9328,\r
-0x9565=>0x92F2,\r
-0x9566=>0x849C,\r
-0x9567=>0x86ED,\r
-0x9568=>0x9C2D,\r
-0x9569=>0x54C1,\r
-0x956A=>0x5F6C,\r
-0x956B=>0x658C,\r
-0x956C=>0x6D5C,\r
-0x956D=>0x7015,\r
-0x956E=>0x8CA7,\r
-0x956F=>0x8CD3,\r
-0x9570=>0x983B,\r
-0x9571=>0x654F,\r
-0x9572=>0x74F6,\r
-0x9573=>0x4E0D,\r
-0x9574=>0x4ED8,\r
-0x9575=>0x57E0,\r
-0x9576=>0x592B,\r
-0x9577=>0x5A66,\r
-0x9578=>0x5BCC,\r
-0x9579=>0x51A8,\r
-0x957A=>0x5E03,\r
-0x957B=>0x5E9C,\r
-0x957C=>0x6016,\r
-0x957D=>0x6276,\r
-0x957E=>0x6577,\r
-0x9580=>0x65A7,\r
-0x9581=>0x666E,\r
-0x9582=>0x6D6E,\r
-0x9583=>0x7236,\r
-0x9584=>0x7B26,\r
-0x9585=>0x8150,\r
-0x9586=>0x819A,\r
-0x9587=>0x8299,\r
-0x9588=>0x8B5C,\r
-0x9589=>0x8CA0,\r
-0x958A=>0x8CE6,\r
-0x958B=>0x8D74,\r
-0x958C=>0x961C,\r
-0x958D=>0x9644,\r
-0x958E=>0x4FAE,\r
-0x958F=>0x64AB,\r
-0x9590=>0x6B66,\r
-0x9591=>0x821E,\r
-0x9592=>0x8461,\r
-0x9593=>0x856A,\r
-0x9594=>0x90E8,\r
-0x9595=>0x5C01,\r
-0x9596=>0x6953,\r
-0x9597=>0x98A8,\r
-0x9598=>0x847A,\r
-0x9599=>0x8557,\r
-0x959A=>0x4F0F,\r
-0x959B=>0x526F,\r
-0x959C=>0x5FA9,\r
-0x959D=>0x5E45,\r
-0x959E=>0x670D,\r
-0x959F=>0x798F,\r
-0x95A0=>0x8179,\r
-0x95A1=>0x8907,\r
-0x95A2=>0x8986,\r
-0x95A3=>0x6DF5,\r
-0x95A4=>0x5F17,\r
-0x95A5=>0x6255,\r
-0x95A6=>0x6CB8,\r
-0x95A7=>0x4ECF,\r
-0x95A8=>0x7269,\r
-0x95A9=>0x9B92,\r
-0x95AA=>0x5206,\r
-0x95AB=>0x543B,\r
-0x95AC=>0x5674,\r
-0x95AD=>0x58B3,\r
-0x95AE=>0x61A4,\r
-0x95AF=>0x626E,\r
-0x95B0=>0x711A,\r
-0x95B1=>0x596E,\r
-0x95B2=>0x7C89,\r
-0x95B3=>0x7CDE,\r
-0x95B4=>0x7D1B,\r
-0x95B5=>0x96F0,\r
-0x95B6=>0x6587,\r
-0x95B7=>0x805E,\r
-0x95B8=>0x4E19,\r
-0x95B9=>0x4F75,\r
-0x95BA=>0x5175,\r
-0x95BB=>0x5840,\r
-0x95BC=>0x5E63,\r
-0x95BD=>0x5E73,\r
-0x95BE=>0x5F0A,\r
-0x95BF=>0x67C4,\r
-0x95C0=>0x4E26,\r
-0x95C1=>0x853D,\r
-0x95C2=>0x9589,\r
-0x95C3=>0x965B,\r
-0x95C4=>0x7C73,\r
-0x95C5=>0x9801,\r
-0x95C6=>0x50FB,\r
-0x95C7=>0x58C1,\r
-0x95C8=>0x7656,\r
-0x95C9=>0x78A7,\r
-0x95CA=>0x5225,\r
-0x95CB=>0x77A5,\r
-0x95CC=>0x8511,\r
-0x95CD=>0x7B86,\r
-0x95CE=>0x504F,\r
-0x95CF=>0x5909,\r
-0x95D0=>0x7247,\r
-0x95D1=>0x7BC7,\r
-0x95D2=>0x7DE8,\r
-0x95D3=>0x8FBA,\r
-0x95D4=>0x8FD4,\r
-0x95D5=>0x904D,\r
-0x95D6=>0x4FBF,\r
-0x95D7=>0x52C9,\r
-0x95D8=>0x5A29,\r
-0x95D9=>0x5F01,\r
-0x95DA=>0x97AD,\r
-0x95DB=>0x4FDD,\r
-0x95DC=>0x8217,\r
-0x95DD=>0x92EA,\r
-0x95DE=>0x5703,\r
-0x95DF=>0x6355,\r
-0x95E0=>0x6B69,\r
-0x95E1=>0x752B,\r
-0x95E2=>0x88DC,\r
-0x95E3=>0x8F14,\r
-0x95E4=>0x7A42,\r
-0x95E5=>0x52DF,\r
-0x95E6=>0x5893,\r
-0x95E7=>0x6155,\r
-0x95E8=>0x620A,\r
-0x95E9=>0x66AE,\r
-0x95EA=>0x6BCD,\r
-0x95EB=>0x7C3F,\r
-0x95EC=>0x83E9,\r
-0x95ED=>0x5023,\r
-0x95EE=>0x4FF8,\r
-0x95EF=>0x5305,\r
-0x95F0=>0x5446,\r
-0x95F1=>0x5831,\r
-0x95F2=>0x5949,\r
-0x95F3=>0x5B9D,\r
-0x95F4=>0x5CF0,\r
-0x95F5=>0x5CEF,\r
-0x95F6=>0x5D29,\r
-0x95F7=>0x5E96,\r
-0x95F8=>0x62B1,\r
-0x95F9=>0x6367,\r
-0x95FA=>0x653E,\r
-0x95FB=>0x65B9,\r
-0x95FC=>0x670B,\r
-0x9640=>0x6CD5,\r
-0x9641=>0x6CE1,\r
-0x9642=>0x70F9,\r
-0x9643=>0x7832,\r
-0x9644=>0x7E2B,\r
-0x9645=>0x80DE,\r
-0x9646=>0x82B3,\r
-0x9647=>0x840C,\r
-0x9648=>0x84EC,\r
-0x9649=>0x8702,\r
-0x964A=>0x8912,\r
-0x964B=>0x8A2A,\r
-0x964C=>0x8C4A,\r
-0x964D=>0x90A6,\r
-0x964E=>0x92D2,\r
-0x964F=>0x98FD,\r
-0x9650=>0x9CF3,\r
-0x9651=>0x9D6C,\r
-0x9652=>0x4E4F,\r
-0x9653=>0x4EA1,\r
-0x9654=>0x508D,\r
-0x9655=>0x5256,\r
-0x9656=>0x574A,\r
-0x9657=>0x59A8,\r
-0x9658=>0x5E3D,\r
-0x9659=>0x5FD8,\r
-0x965A=>0x5FD9,\r
-0x965B=>0x623F,\r
-0x965C=>0x66B4,\r
-0x965D=>0x671B,\r
-0x965E=>0x67D0,\r
-0x965F=>0x68D2,\r
-0x9660=>0x5192,\r
-0x9661=>0x7D21,\r
-0x9662=>0x80AA,\r
-0x9663=>0x81A8,\r
-0x9664=>0x8B00,\r
-0x9665=>0x8C8C,\r
-0x9666=>0x8CBF,\r
-0x9667=>0x927E,\r
-0x9668=>0x9632,\r
-0x9669=>0x5420,\r
-0x966A=>0x982C,\r
-0x966B=>0x5317,\r
-0x966C=>0x50D5,\r
-0x966D=>0x535C,\r
-0x966E=>0x58A8,\r
-0x966F=>0x64B2,\r
-0x9670=>0x6734,\r
-0x9671=>0x7267,\r
-0x9672=>0x7766,\r
-0x9673=>0x7A46,\r
-0x9674=>0x91E6,\r
-0x9675=>0x52C3,\r
-0x9676=>0x6CA1,\r
-0x9677=>0x6B86,\r
-0x9678=>0x5800,\r
-0x9679=>0x5E4C,\r
-0x967A=>0x5954,\r
-0x967B=>0x672C,\r
-0x967C=>0x7FFB,\r
-0x967D=>0x51E1,\r
-0x967E=>0x76C6,\r
-0x9680=>0x6469,\r
-0x9681=>0x78E8,\r
-0x9682=>0x9B54,\r
-0x9683=>0x9EBB,\r
-0x9684=>0x57CB,\r
-0x9685=>0x59B9,\r
-0x9686=>0x6627,\r
-0x9687=>0x679A,\r
-0x9688=>0x6BCE,\r
-0x9689=>0x54E9,\r
-0x968A=>0x69D9,\r
-0x968B=>0x5E55,\r
-0x968C=>0x819C,\r
-0x968D=>0x6795,\r
-0x968E=>0x9BAA,\r
-0x968F=>0x67FE,\r
-0x9690=>0x9C52,\r
-0x9691=>0x685D,\r
-0x9692=>0x4EA6,\r
-0x9693=>0x4FE3,\r
-0x9694=>0x53C8,\r
-0x9695=>0x62B9,\r
-0x9696=>0x672B,\r
-0x9697=>0x6CAB,\r
-0x9698=>0x8FC4,\r
-0x9699=>0x4FAD,\r
-0x969A=>0x7E6D,\r
-0x969B=>0x9EBF,\r
-0x969C=>0x4E07,\r
-0x969D=>0x6162,\r
-0x969E=>0x6E80,\r
-0x969F=>0x6F2B,\r
-0x96A0=>0x8513,\r
-0x96A1=>0x5473,\r
-0x96A2=>0x672A,\r
-0x96A3=>0x9B45,\r
-0x96A4=>0x5DF3,\r
-0x96A5=>0x7B95,\r
-0x96A6=>0x5CAC,\r
-0x96A7=>0x5BC6,\r
-0x96A8=>0x871C,\r
-0x96A9=>0x6E4A,\r
-0x96AA=>0x84D1,\r
-0x96AB=>0x7A14,\r
-0x96AC=>0x8108,\r
-0x96AD=>0x5999,\r
-0x96AE=>0x7C8D,\r
-0x96AF=>0x6C11,\r
-0x96B0=>0x7720,\r
-0x96B1=>0x52D9,\r
-0x96B2=>0x5922,\r
-0x96B3=>0x7121,\r
-0x96B4=>0x725F,\r
-0x96B5=>0x77DB,\r
-0x96B6=>0x9727,\r
-0x96B7=>0x9D61,\r
-0x96B8=>0x690B,\r
-0x96B9=>0x5A7F,\r
-0x96BA=>0x5A18,\r
-0x96BB=>0x51A5,\r
-0x96BC=>0x540D,\r
-0x96BD=>0x547D,\r
-0x96BE=>0x660E,\r
-0x96BF=>0x76DF,\r
-0x96C0=>0x8FF7,\r
-0x96C1=>0x9298,\r
-0x96C2=>0x9CF4,\r
-0x96C3=>0x59EA,\r
-0x96C4=>0x725D,\r
-0x96C5=>0x6EC5,\r
-0x96C6=>0x514D,\r
-0x96C7=>0x68C9,\r
-0x96C8=>0x7DBF,\r
-0x96C9=>0x7DEC,\r
-0x96CA=>0x9762,\r
-0x96CB=>0x9EBA,\r
-0x96CC=>0x6478,\r
-0x96CD=>0x6A21,\r
-0x96CE=>0x8302,\r
-0x96CF=>0x5984,\r
-0x96D0=>0x5B5F,\r
-0x96D1=>0x6BDB,\r
-0x96D2=>0x731B,\r
-0x96D3=>0x76F2,\r
-0x96D4=>0x7DB2,\r
-0x96D5=>0x8017,\r
-0x96D6=>0x8499,\r
-0x96D7=>0x5132,\r
-0x96D8=>0x6728,\r
-0x96D9=>0x9ED9,\r
-0x96DA=>0x76EE,\r
-0x96DB=>0x6762,\r
-0x96DC=>0x52FF,\r
-0x96DD=>0x9905,\r
-0x96DE=>0x5C24,\r
-0x96DF=>0x623B,\r
-0x96E0=>0x7C7E,\r
-0x96E1=>0x8CB0,\r
-0x96E2=>0x554F,\r
-0x96E3=>0x60B6,\r
-0x96E4=>0x7D0B,\r
-0x96E5=>0x9580,\r
-0x96E6=>0x5301,\r
-0x96E7=>0x4E5F,\r
-0x96E8=>0x51B6,\r
-0x96E9=>0x591C,\r
-0x96EA=>0x723A,\r
-0x96EB=>0x8036,\r
-0x96EC=>0x91CE,\r
-0x96ED=>0x5F25,\r
-0x96EE=>0x77E2,\r
-0x96EF=>0x5384,\r
-0x96F0=>0x5F79,\r
-0x96F1=>0x7D04,\r
-0x96F2=>0x85AC,\r
-0x96F3=>0x8A33,\r
-0x96F4=>0x8E8D,\r
-0x96F5=>0x9756,\r
-0x96F6=>0x67F3,\r
-0x96F7=>0x85AE,\r
-0x96F8=>0x9453,\r
-0x96F9=>0x6109,\r
-0x96FA=>0x6108,\r
-0x96FB=>0x6CB9,\r
-0x96FC=>0x7652,\r
-0x9740=>0x8AED,\r
-0x9741=>0x8F38,\r
-0x9742=>0x552F,\r
-0x9743=>0x4F51,\r
-0x9744=>0x512A,\r
-0x9745=>0x52C7,\r
-0x9746=>0x53CB,\r
-0x9747=>0x5BA5,\r
-0x9748=>0x5E7D,\r
-0x9749=>0x60A0,\r
-0x974A=>0x6182,\r
-0x974B=>0x63D6,\r
-0x974C=>0x6709,\r
-0x974D=>0x67DA,\r
-0x974E=>0x6E67,\r
-0x974F=>0x6D8C,\r
-0x9750=>0x7336,\r
-0x9751=>0x7337,\r
-0x9752=>0x7531,\r
-0x9753=>0x7950,\r
-0x9754=>0x88D5,\r
-0x9755=>0x8A98,\r
-0x9756=>0x904A,\r
-0x9757=>0x9091,\r
-0x9758=>0x90F5,\r
-0x9759=>0x96C4,\r
-0x975A=>0x878D,\r
-0x975B=>0x5915,\r
-0x975C=>0x4E88,\r
-0x975D=>0x4F59,\r
-0x975E=>0x4E0E,\r
-0x975F=>0x8A89,\r
-0x9760=>0x8F3F,\r
-0x9761=>0x9810,\r
-0x9762=>0x50AD,\r
-0x9763=>0x5E7C,\r
-0x9764=>0x5996,\r
-0x9765=>0x5BB9,\r
-0x9766=>0x5EB8,\r
-0x9767=>0x63DA,\r
-0x9768=>0x63FA,\r
-0x9769=>0x64C1,\r
-0x976A=>0x66DC,\r
-0x976B=>0x694A,\r
-0x976C=>0x69D8,\r
-0x976D=>0x6D0B,\r
-0x976E=>0x6EB6,\r
-0x976F=>0x7194,\r
-0x9770=>0x7528,\r
-0x9771=>0x7AAF,\r
-0x9772=>0x7F8A,\r
-0x9773=>0x8000,\r
-0x9774=>0x8449,\r
-0x9775=>0x84C9,\r
-0x9776=>0x8981,\r
-0x9777=>0x8B21,\r
-0x9778=>0x8E0A,\r
-0x9779=>0x9065,\r
-0x977A=>0x967D,\r
-0x977B=>0x990A,\r
-0x977C=>0x617E,\r
-0x977D=>0x6291,\r
-0x977E=>0x6B32,\r
-0x9780=>0x6C83,\r
-0x9781=>0x6D74,\r
-0x9782=>0x7FCC,\r
-0x9783=>0x7FFC,\r
-0x9784=>0x6DC0,\r
-0x9785=>0x7F85,\r
-0x9786=>0x87BA,\r
-0x9787=>0x88F8,\r
-0x9788=>0x6765,\r
-0x9789=>0x83B1,\r
-0x978A=>0x983C,\r
-0x978B=>0x96F7,\r
-0x978C=>0x6D1B,\r
-0x978D=>0x7D61,\r
-0x978E=>0x843D,\r
-0x978F=>0x916A,\r
-0x9790=>0x4E71,\r
-0x9791=>0x5375,\r
-0x9792=>0x5D50,\r
-0x9793=>0x6B04,\r
-0x9794=>0x6FEB,\r
-0x9795=>0x85CD,\r
-0x9796=>0x862D,\r
-0x9797=>0x89A7,\r
-0x9798=>0x5229,\r
-0x9799=>0x540F,\r
-0x979A=>0x5C65,\r
-0x979B=>0x674E,\r
-0x979C=>0x68A8,\r
-0x979D=>0x7406,\r
-0x979E=>0x7483,\r
-0x979F=>0x75E2,\r
-0x97A0=>0x88CF,\r
-0x97A1=>0x88E1,\r
-0x97A2=>0x91CC,\r
-0x97A3=>0x96E2,\r
-0x97A4=>0x9678,\r
-0x97A5=>0x5F8B,\r
-0x97A6=>0x7387,\r
-0x97A7=>0x7ACB,\r
-0x97A8=>0x844E,\r
-0x97A9=>0x63A0,\r
-0x97AA=>0x7565,\r
-0x97AB=>0x5289,\r
-0x97AC=>0x6D41,\r
-0x97AD=>0x6E9C,\r
-0x97AE=>0x7409,\r
-0x97AF=>0x7559,\r
-0x97B0=>0x786B,\r
-0x97B1=>0x7C92,\r
-0x97B2=>0x9686,\r
-0x97B3=>0x7ADC,\r
-0x97B4=>0x9F8D,\r
-0x97B5=>0x4FB6,\r
-0x97B6=>0x616E,\r
-0x97B7=>0x65C5,\r
-0x97B8=>0x865C,\r
-0x97B9=>0x4E86,\r
-0x97BA=>0x4EAE,\r
-0x97BB=>0x50DA,\r
-0x97BC=>0x4E21,\r
-0x97BD=>0x51CC,\r
-0x97BE=>0x5BEE,\r
-0x97BF=>0x6599,\r
-0x97C0=>0x6881,\r
-0x97C1=>0x6DBC,\r
-0x97C2=>0x731F,\r
-0x97C3=>0x7642,\r
-0x97C4=>0x77AD,\r
-0x97C5=>0x7A1C,\r
-0x97C6=>0x7CE7,\r
-0x97C7=>0x826F,\r
-0x97C8=>0x8AD2,\r
-0x97C9=>0x907C,\r
-0x97CA=>0x91CF,\r
-0x97CB=>0x9675,\r
-0x97CC=>0x9818,\r
-0x97CD=>0x529B,\r
-0x97CE=>0x7DD1,\r
-0x97CF=>0x502B,\r
-0x97D0=>0x5398,\r
-0x97D1=>0x6797,\r
-0x97D2=>0x6DCB,\r
-0x97D3=>0x71D0,\r
-0x97D4=>0x7433,\r
-0x97D5=>0x81E8,\r
-0x97D6=>0x8F2A,\r
-0x97D7=>0x96A3,\r
-0x97D8=>0x9C57,\r
-0x97D9=>0x9E9F,\r
-0x97DA=>0x7460,\r
-0x97DB=>0x5841,\r
-0x97DC=>0x6D99,\r
-0x97DD=>0x7D2F,\r
-0x97DE=>0x985E,\r
-0x97DF=>0x4EE4,\r
-0x97E0=>0x4F36,\r
-0x97E1=>0x4F8B,\r
-0x97E2=>0x51B7,\r
-0x97E3=>0x52B1,\r
-0x97E4=>0x5DBA,\r
-0x97E5=>0x601C,\r
-0x97E6=>0x73B2,\r
-0x97E7=>0x793C,\r
-0x97E8=>0x82D3,\r
-0x97E9=>0x9234,\r
-0x97EA=>0x96B7,\r
-0x97EB=>0x96F6,\r
-0x97EC=>0x970A,\r
-0x97ED=>0x9E97,\r
-0x97EE=>0x9F62,\r
-0x97EF=>0x66A6,\r
-0x97F0=>0x6B74,\r
-0x97F1=>0x5217,\r
-0x97F2=>0x52A3,\r
-0x97F3=>0x70C8,\r
-0x97F4=>0x88C2,\r
-0x97F5=>0x5EC9,\r
-0x97F6=>0x604B,\r
-0x97F7=>0x6190,\r
-0x97F8=>0x6F23,\r
-0x97F9=>0x7149,\r
-0x97FA=>0x7C3E,\r
-0x97FB=>0x7DF4,\r
-0x97FC=>0x806F,\r
-0x9840=>0x84EE,\r
-0x9841=>0x9023,\r
-0x9842=>0x932C,\r
-0x9843=>0x5442,\r
-0x9844=>0x9B6F,\r
-0x9845=>0x6AD3,\r
-0x9846=>0x7089,\r
-0x9847=>0x8CC2,\r
-0x9848=>0x8DEF,\r
-0x9849=>0x9732,\r
-0x984A=>0x52B4,\r
-0x984B=>0x5A41,\r
-0x984C=>0x5ECA,\r
-0x984D=>0x5F04,\r
-0x984E=>0x6717,\r
-0x984F=>0x697C,\r
-0x9850=>0x6994,\r
-0x9851=>0x6D6A,\r
-0x9852=>0x6F0F,\r
-0x9853=>0x7262,\r
-0x9854=>0x72FC,\r
-0x9855=>0x7BED,\r
-0x9856=>0x8001,\r
-0x9857=>0x807E,\r
-0x9858=>0x874B,\r
-0x9859=>0x90CE,\r
-0x985A=>0x516D,\r
-0x985B=>0x9E93,\r
-0x985C=>0x7984,\r
-0x985D=>0x808B,\r
-0x985E=>0x9332,\r
-0x985F=>0x8AD6,\r
-0x9860=>0x502D,\r
-0x9861=>0x548C,\r
-0x9862=>0x8A71,\r
-0x9863=>0x6B6A,\r
-0x9864=>0x8CC4,\r
-0x9865=>0x8107,\r
-0x9866=>0x60D1,\r
-0x9867=>0x67A0,\r
-0x9868=>0x9DF2,\r
-0x9869=>0x4E99,\r
-0x986A=>0x4E98,\r
-0x986B=>0x9C10,\r
-0x986C=>0x8A6B,\r
-0x986D=>0x85C1,\r
-0x986E=>0x8568,\r
-0x986F=>0x6900,\r
-0x9870=>0x6E7E,\r
-0x9871=>0x7897,\r
-0x9872=>0x8155,\r
-0x989F=>0x5F0C,\r
-0x98A0=>0x4E10,\r
-0x98A1=>0x4E15,\r
-0x98A2=>0x4E2A,\r
-0x98A3=>0x4E31,\r
-0x98A4=>0x4E36,\r
-0x98A5=>0x4E3C,\r
-0x98A6=>0x4E3F,\r
-0x98A7=>0x4E42,\r
-0x98A8=>0x4E56,\r
-0x98A9=>0x4E58,\r
-0x98AA=>0x4E82,\r
-0x98AB=>0x4E85,\r
-0x98AC=>0x8C6B,\r
-0x98AD=>0x4E8A,\r
-0x98AE=>0x8212,\r
-0x98AF=>0x5F0D,\r
-0x98B0=>0x4E8E,\r
-0x98B1=>0x4E9E,\r
-0x98B2=>0x4E9F,\r
-0x98B3=>0x4EA0,\r
-0x98B4=>0x4EA2,\r
-0x98B5=>0x4EB0,\r
-0x98B6=>0x4EB3,\r
-0x98B7=>0x4EB6,\r
-0x98B8=>0x4ECE,\r
-0x98B9=>0x4ECD,\r
-0x98BA=>0x4EC4,\r
-0x98BB=>0x4EC6,\r
-0x98BC=>0x4EC2,\r
-0x98BD=>0x4ED7,\r
-0x98BE=>0x4EDE,\r
-0x98BF=>0x4EED,\r
-0x98C0=>0x4EDF,\r
-0x98C1=>0x4EF7,\r
-0x98C2=>0x4F09,\r
-0x98C3=>0x4F5A,\r
-0x98C4=>0x4F30,\r
-0x98C5=>0x4F5B,\r
-0x98C6=>0x4F5D,\r
-0x98C7=>0x4F57,\r
-0x98C8=>0x4F47,\r
-0x98C9=>0x4F76,\r
-0x98CA=>0x4F88,\r
-0x98CB=>0x4F8F,\r
-0x98CC=>0x4F98,\r
-0x98CD=>0x4F7B,\r
-0x98CE=>0x4F69,\r
-0x98CF=>0x4F70,\r
-0x98D0=>0x4F91,\r
-0x98D1=>0x4F6F,\r
-0x98D2=>0x4F86,\r
-0x98D3=>0x4F96,\r
-0x98D4=>0x5118,\r
-0x98D5=>0x4FD4,\r
-0x98D6=>0x4FDF,\r
-0x98D7=>0x4FCE,\r
-0x98D8=>0x4FD8,\r
-0x98D9=>0x4FDB,\r
-0x98DA=>0x4FD1,\r
-0x98DB=>0x4FDA,\r
-0x98DC=>0x4FD0,\r
-0x98DD=>0x4FE4,\r
-0x98DE=>0x4FE5,\r
-0x98DF=>0x501A,\r
-0x98E0=>0x5028,\r
-0x98E1=>0x5014,\r
-0x98E2=>0x502A,\r
-0x98E3=>0x5025,\r
-0x98E4=>0x5005,\r
-0x98E5=>0x4F1C,\r
-0x98E6=>0x4FF6,\r
-0x98E7=>0x5021,\r
-0x98E8=>0x5029,\r
-0x98E9=>0x502C,\r
-0x98EA=>0x4FFE,\r
-0x98EB=>0x4FEF,\r
-0x98EC=>0x5011,\r
-0x98ED=>0x5006,\r
-0x98EE=>0x5043,\r
-0x98EF=>0x5047,\r
-0x98F0=>0x6703,\r
-0x98F1=>0x5055,\r
-0x98F2=>0x5050,\r
-0x98F3=>0x5048,\r
-0x98F4=>0x505A,\r
-0x98F5=>0x5056,\r
-0x98F6=>0x506C,\r
-0x98F7=>0x5078,\r
-0x98F8=>0x5080,\r
-0x98F9=>0x509A,\r
-0x98FA=>0x5085,\r
-0x98FB=>0x50B4,\r
-0x98FC=>0x50B2,\r
-0x9940=>0x50C9,\r
-0x9941=>0x50CA,\r
-0x9942=>0x50B3,\r
-0x9943=>0x50C2,\r
-0x9944=>0x50D6,\r
-0x9945=>0x50DE,\r
-0x9946=>0x50E5,\r
-0x9947=>0x50ED,\r
-0x9948=>0x50E3,\r
-0x9949=>0x50EE,\r
-0x994A=>0x50F9,\r
-0x994B=>0x50F5,\r
-0x994C=>0x5109,\r
-0x994D=>0x5101,\r
-0x994E=>0x5102,\r
-0x994F=>0x5116,\r
-0x9950=>0x5115,\r
-0x9951=>0x5114,\r
-0x9952=>0x511A,\r
-0x9953=>0x5121,\r
-0x9954=>0x513A,\r
-0x9955=>0x5137,\r
-0x9956=>0x513C,\r
-0x9957=>0x513B,\r
-0x9958=>0x513F,\r
-0x9959=>0x5140,\r
-0x995A=>0x5152,\r
-0x995B=>0x514C,\r
-0x995C=>0x5154,\r
-0x995D=>0x5162,\r
-0x995E=>0x7AF8,\r
-0x995F=>0x5169,\r
-0x9960=>0x516A,\r
-0x9961=>0x516E,\r
-0x9962=>0x5180,\r
-0x9963=>0x5182,\r
-0x9964=>0x56D8,\r
-0x9965=>0x518C,\r
-0x9966=>0x5189,\r
-0x9967=>0x518F,\r
-0x9968=>0x5191,\r
-0x9969=>0x5193,\r
-0x996A=>0x5195,\r
-0x996B=>0x5196,\r
-0x996C=>0x51A4,\r
-0x996D=>0x51A6,\r
-0x996E=>0x51A2,\r
-0x996F=>0x51A9,\r
-0x9970=>0x51AA,\r
-0x9971=>0x51AB,\r
-0x9972=>0x51B3,\r
-0x9973=>0x51B1,\r
-0x9974=>0x51B2,\r
-0x9975=>0x51B0,\r
-0x9976=>0x51B5,\r
-0x9977=>0x51BD,\r
-0x9978=>0x51C5,\r
-0x9979=>0x51C9,\r
-0x997A=>0x51DB,\r
-0x997B=>0x51E0,\r
-0x997C=>0x8655,\r
-0x997D=>0x51E9,\r
-0x997E=>0x51ED,\r
-0x9980=>0x51F0,\r
-0x9981=>0x51F5,\r
-0x9982=>0x51FE,\r
-0x9983=>0x5204,\r
-0x9984=>0x520B,\r
-0x9985=>0x5214,\r
-0x9986=>0x520E,\r
-0x9987=>0x5227,\r
-0x9988=>0x522A,\r
-0x9989=>0x522E,\r
-0x998A=>0x5233,\r
-0x998B=>0x5239,\r
-0x998C=>0x524F,\r
-0x998D=>0x5244,\r
-0x998E=>0x524B,\r
-0x998F=>0x524C,\r
-0x9990=>0x525E,\r
-0x9991=>0x5254,\r
-0x9992=>0x526A,\r
-0x9993=>0x5274,\r
-0x9994=>0x5269,\r
-0x9995=>0x5273,\r
-0x9996=>0x527F,\r
-0x9997=>0x527D,\r
-0x9998=>0x528D,\r
-0x9999=>0x5294,\r
-0x999A=>0x5292,\r
-0x999B=>0x5271,\r
-0x999C=>0x5288,\r
-0x999D=>0x5291,\r
-0x999E=>0x8FA8,\r
-0x999F=>0x8FA7,\r
-0x99A0=>0x52AC,\r
-0x99A1=>0x52AD,\r
-0x99A2=>0x52BC,\r
-0x99A3=>0x52B5,\r
-0x99A4=>0x52C1,\r
-0x99A5=>0x52CD,\r
-0x99A6=>0x52D7,\r
-0x99A7=>0x52DE,\r
-0x99A8=>0x52E3,\r
-0x99A9=>0x52E6,\r
-0x99AA=>0x98ED,\r
-0x99AB=>0x52E0,\r
-0x99AC=>0x52F3,\r
-0x99AD=>0x52F5,\r
-0x99AE=>0x52F8,\r
-0x99AF=>0x52F9,\r
-0x99B0=>0x5306,\r
-0x99B1=>0x5308,\r
-0x99B2=>0x7538,\r
-0x99B3=>0x530D,\r
-0x99B4=>0x5310,\r
-0x99B5=>0x530F,\r
-0x99B6=>0x5315,\r
-0x99B7=>0x531A,\r
-0x99B8=>0x5323,\r
-0x99B9=>0x532F,\r
-0x99BA=>0x5331,\r
-0x99BB=>0x5333,\r
-0x99BC=>0x5338,\r
-0x99BD=>0x5340,\r
-0x99BE=>0x5346,\r
-0x99BF=>0x5345,\r
-0x99C0=>0x4E17,\r
-0x99C1=>0x5349,\r
-0x99C2=>0x534D,\r
-0x99C3=>0x51D6,\r
-0x99C4=>0x535E,\r
-0x99C5=>0x5369,\r
-0x99C6=>0x536E,\r
-0x99C7=>0x5918,\r
-0x99C8=>0x537B,\r
-0x99C9=>0x5377,\r
-0x99CA=>0x5382,\r
-0x99CB=>0x5396,\r
-0x99CC=>0x53A0,\r
-0x99CD=>0x53A6,\r
-0x99CE=>0x53A5,\r
-0x99CF=>0x53AE,\r
-0x99D0=>0x53B0,\r
-0x99D1=>0x53B6,\r
-0x99D2=>0x53C3,\r
-0x99D3=>0x7C12,\r
-0x99D4=>0x96D9,\r
-0x99D5=>0x53DF,\r
-0x99D6=>0x66FC,\r
-0x99D7=>0x71EE,\r
-0x99D8=>0x53EE,\r
-0x99D9=>0x53E8,\r
-0x99DA=>0x53ED,\r
-0x99DB=>0x53FA,\r
-0x99DC=>0x5401,\r
-0x99DD=>0x543D,\r
-0x99DE=>0x5440,\r
-0x99DF=>0x542C,\r
-0x99E0=>0x542D,\r
-0x99E1=>0x543C,\r
-0x99E2=>0x542E,\r
-0x99E3=>0x5436,\r
-0x99E4=>0x5429,\r
-0x99E5=>0x541D,\r
-0x99E6=>0x544E,\r
-0x99E7=>0x548F,\r
-0x99E8=>0x5475,\r
-0x99E9=>0x548E,\r
-0x99EA=>0x545F,\r
-0x99EB=>0x5471,\r
-0x99EC=>0x5477,\r
-0x99ED=>0x5470,\r
-0x99EE=>0x5492,\r
-0x99EF=>0x547B,\r
-0x99F0=>0x5480,\r
-0x99F1=>0x5476,\r
-0x99F2=>0x5484,\r
-0x99F3=>0x5490,\r
-0x99F4=>0x5486,\r
-0x99F5=>0x54C7,\r
-0x99F6=>0x54A2,\r
-0x99F7=>0x54B8,\r
-0x99F8=>0x54A5,\r
-0x99F9=>0x54AC,\r
-0x99FA=>0x54C4,\r
-0x99FB=>0x54C8,\r
-0x99FC=>0x54A8,\r
-0x9A40=>0x54AB,\r
-0x9A41=>0x54C2,\r
-0x9A42=>0x54A4,\r
-0x9A43=>0x54BE,\r
-0x9A44=>0x54BC,\r
-0x9A45=>0x54D8,\r
-0x9A46=>0x54E5,\r
-0x9A47=>0x54E6,\r
-0x9A48=>0x550F,\r
-0x9A49=>0x5514,\r
-0x9A4A=>0x54FD,\r
-0x9A4B=>0x54EE,\r
-0x9A4C=>0x54ED,\r
-0x9A4D=>0x54FA,\r
-0x9A4E=>0x54E2,\r
-0x9A4F=>0x5539,\r
-0x9A50=>0x5540,\r
-0x9A51=>0x5563,\r
-0x9A52=>0x554C,\r
-0x9A53=>0x552E,\r
-0x9A54=>0x555C,\r
-0x9A55=>0x5545,\r
-0x9A56=>0x5556,\r
-0x9A57=>0x5557,\r
-0x9A58=>0x5538,\r
-0x9A59=>0x5533,\r
-0x9A5A=>0x555D,\r
-0x9A5B=>0x5599,\r
-0x9A5C=>0x5580,\r
-0x9A5D=>0x54AF,\r
-0x9A5E=>0x558A,\r
-0x9A5F=>0x559F,\r
-0x9A60=>0x557B,\r
-0x9A61=>0x557E,\r
-0x9A62=>0x5598,\r
-0x9A63=>0x559E,\r
-0x9A64=>0x55AE,\r
-0x9A65=>0x557C,\r
-0x9A66=>0x5583,\r
-0x9A67=>0x55A9,\r
-0x9A68=>0x5587,\r
-0x9A69=>0x55A8,\r
-0x9A6A=>0x55DA,\r
-0x9A6B=>0x55C5,\r
-0x9A6C=>0x55DF,\r
-0x9A6D=>0x55C4,\r
-0x9A6E=>0x55DC,\r
-0x9A6F=>0x55E4,\r
-0x9A70=>0x55D4,\r
-0x9A71=>0x5614,\r
-0x9A72=>0x55F7,\r
-0x9A73=>0x5616,\r
-0x9A74=>0x55FE,\r
-0x9A75=>0x55FD,\r
-0x9A76=>0x561B,\r
-0x9A77=>0x55F9,\r
-0x9A78=>0x564E,\r
-0x9A79=>0x5650,\r
-0x9A7A=>0x71DF,\r
-0x9A7B=>0x5634,\r
-0x9A7C=>0x5636,\r
-0x9A7D=>0x5632,\r
-0x9A7E=>0x5638,\r
-0x9A80=>0x566B,\r
-0x9A81=>0x5664,\r
-0x9A82=>0x562F,\r
-0x9A83=>0x566C,\r
-0x9A84=>0x566A,\r
-0x9A85=>0x5686,\r
-0x9A86=>0x5680,\r
-0x9A87=>0x568A,\r
-0x9A88=>0x56A0,\r
-0x9A89=>0x5694,\r
-0x9A8A=>0x568F,\r
-0x9A8B=>0x56A5,\r
-0x9A8C=>0x56AE,\r
-0x9A8D=>0x56B6,\r
-0x9A8E=>0x56B4,\r
-0x9A8F=>0x56C2,\r
-0x9A90=>0x56BC,\r
-0x9A91=>0x56C1,\r
-0x9A92=>0x56C3,\r
-0x9A93=>0x56C0,\r
-0x9A94=>0x56C8,\r
-0x9A95=>0x56CE,\r
-0x9A96=>0x56D1,\r
-0x9A97=>0x56D3,\r
-0x9A98=>0x56D7,\r
-0x9A99=>0x56EE,\r
-0x9A9A=>0x56F9,\r
-0x9A9B=>0x5700,\r
-0x9A9C=>0x56FF,\r
-0x9A9D=>0x5704,\r
-0x9A9E=>0x5709,\r
-0x9A9F=>0x5708,\r
-0x9AA0=>0x570B,\r
-0x9AA1=>0x570D,\r
-0x9AA2=>0x5713,\r
-0x9AA3=>0x5718,\r
-0x9AA4=>0x5716,\r
-0x9AA5=>0x55C7,\r
-0x9AA6=>0x571C,\r
-0x9AA7=>0x5726,\r
-0x9AA8=>0x5737,\r
-0x9AA9=>0x5738,\r
-0x9AAA=>0x574E,\r
-0x9AAB=>0x573B,\r
-0x9AAC=>0x5740,\r
-0x9AAD=>0x574F,\r
-0x9AAE=>0x5769,\r
-0x9AAF=>0x57C0,\r
-0x9AB0=>0x5788,\r
-0x9AB1=>0x5761,\r
-0x9AB2=>0x577F,\r
-0x9AB3=>0x5789,\r
-0x9AB4=>0x5793,\r
-0x9AB5=>0x57A0,\r
-0x9AB6=>0x57B3,\r
-0x9AB7=>0x57A4,\r
-0x9AB8=>0x57AA,\r
-0x9AB9=>0x57B0,\r
-0x9ABA=>0x57C3,\r
-0x9ABB=>0x57C6,\r
-0x9ABC=>0x57D4,\r
-0x9ABD=>0x57D2,\r
-0x9ABE=>0x57D3,\r
-0x9ABF=>0x580A,\r
-0x9AC0=>0x57D6,\r
-0x9AC1=>0x57E3,\r
-0x9AC2=>0x580B,\r
-0x9AC3=>0x5819,\r
-0x9AC4=>0x581D,\r
-0x9AC5=>0x5872,\r
-0x9AC6=>0x5821,\r
-0x9AC7=>0x5862,\r
-0x9AC8=>0x584B,\r
-0x9AC9=>0x5870,\r
-0x9ACA=>0x6BC0,\r
-0x9ACB=>0x5852,\r
-0x9ACC=>0x583D,\r
-0x9ACD=>0x5879,\r
-0x9ACE=>0x5885,\r
-0x9ACF=>0x58B9,\r
-0x9AD0=>0x589F,\r
-0x9AD1=>0x58AB,\r
-0x9AD2=>0x58BA,\r
-0x9AD3=>0x58DE,\r
-0x9AD4=>0x58BB,\r
-0x9AD5=>0x58B8,\r
-0x9AD6=>0x58AE,\r
-0x9AD7=>0x58C5,\r
-0x9AD8=>0x58D3,\r
-0x9AD9=>0x58D1,\r
-0x9ADA=>0x58D7,\r
-0x9ADB=>0x58D9,\r
-0x9ADC=>0x58D8,\r
-0x9ADD=>0x58E5,\r
-0x9ADE=>0x58DC,\r
-0x9ADF=>0x58E4,\r
-0x9AE0=>0x58DF,\r
-0x9AE1=>0x58EF,\r
-0x9AE2=>0x58FA,\r
-0x9AE3=>0x58F9,\r
-0x9AE4=>0x58FB,\r
-0x9AE5=>0x58FC,\r
-0x9AE6=>0x58FD,\r
-0x9AE7=>0x5902,\r
-0x9AE8=>0x590A,\r
-0x9AE9=>0x5910,\r
-0x9AEA=>0x591B,\r
-0x9AEB=>0x68A6,\r
-0x9AEC=>0x5925,\r
-0x9AED=>0x592C,\r
-0x9AEE=>0x592D,\r
-0x9AEF=>0x5932,\r
-0x9AF0=>0x5938,\r
-0x9AF1=>0x593E,\r
-0x9AF2=>0x7AD2,\r
-0x9AF3=>0x5955,\r
-0x9AF4=>0x5950,\r
-0x9AF5=>0x594E,\r
-0x9AF6=>0x595A,\r
-0x9AF7=>0x5958,\r
-0x9AF8=>0x5962,\r
-0x9AF9=>0x5960,\r
-0x9AFA=>0x5967,\r
-0x9AFB=>0x596C,\r
-0x9AFC=>0x5969,\r
-0x9B40=>0x5978,\r
-0x9B41=>0x5981,\r
-0x9B42=>0x599D,\r
-0x9B43=>0x4F5E,\r
-0x9B44=>0x4FAB,\r
-0x9B45=>0x59A3,\r
-0x9B46=>0x59B2,\r
-0x9B47=>0x59C6,\r
-0x9B48=>0x59E8,\r
-0x9B49=>0x59DC,\r
-0x9B4A=>0x598D,\r
-0x9B4B=>0x59D9,\r
-0x9B4C=>0x59DA,\r
-0x9B4D=>0x5A25,\r
-0x9B4E=>0x5A1F,\r
-0x9B4F=>0x5A11,\r
-0x9B50=>0x5A1C,\r
-0x9B51=>0x5A09,\r
-0x9B52=>0x5A1A,\r
-0x9B53=>0x5A40,\r
-0x9B54=>0x5A6C,\r
-0x9B55=>0x5A49,\r
-0x9B56=>0x5A35,\r
-0x9B57=>0x5A36,\r
-0x9B58=>0x5A62,\r
-0x9B59=>0x5A6A,\r
-0x9B5A=>0x5A9A,\r
-0x9B5B=>0x5ABC,\r
-0x9B5C=>0x5ABE,\r
-0x9B5D=>0x5ACB,\r
-0x9B5E=>0x5AC2,\r
-0x9B5F=>0x5ABD,\r
-0x9B60=>0x5AE3,\r
-0x9B61=>0x5AD7,\r
-0x9B62=>0x5AE6,\r
-0x9B63=>0x5AE9,\r
-0x9B64=>0x5AD6,\r
-0x9B65=>0x5AFA,\r
-0x9B66=>0x5AFB,\r
-0x9B67=>0x5B0C,\r
-0x9B68=>0x5B0B,\r
-0x9B69=>0x5B16,\r
-0x9B6A=>0x5B32,\r
-0x9B6B=>0x5AD0,\r
-0x9B6C=>0x5B2A,\r
-0x9B6D=>0x5B36,\r
-0x9B6E=>0x5B3E,\r
-0x9B6F=>0x5B43,\r
-0x9B70=>0x5B45,\r
-0x9B71=>0x5B40,\r
-0x9B72=>0x5B51,\r
-0x9B73=>0x5B55,\r
-0x9B74=>0x5B5A,\r
-0x9B75=>0x5B5B,\r
-0x9B76=>0x5B65,\r
-0x9B77=>0x5B69,\r
-0x9B78=>0x5B70,\r
-0x9B79=>0x5B73,\r
-0x9B7A=>0x5B75,\r
-0x9B7B=>0x5B78,\r
-0x9B7C=>0x6588,\r
-0x9B7D=>0x5B7A,\r
-0x9B7E=>0x5B80,\r
-0x9B80=>0x5B83,\r
-0x9B81=>0x5BA6,\r
-0x9B82=>0x5BB8,\r
-0x9B83=>0x5BC3,\r
-0x9B84=>0x5BC7,\r
-0x9B85=>0x5BC9,\r
-0x9B86=>0x5BD4,\r
-0x9B87=>0x5BD0,\r
-0x9B88=>0x5BE4,\r
-0x9B89=>0x5BE6,\r
-0x9B8A=>0x5BE2,\r
-0x9B8B=>0x5BDE,\r
-0x9B8C=>0x5BE5,\r
-0x9B8D=>0x5BEB,\r
-0x9B8E=>0x5BF0,\r
-0x9B8F=>0x5BF6,\r
-0x9B90=>0x5BF3,\r
-0x9B91=>0x5C05,\r
-0x9B92=>0x5C07,\r
-0x9B93=>0x5C08,\r
-0x9B94=>0x5C0D,\r
-0x9B95=>0x5C13,\r
-0x9B96=>0x5C20,\r
-0x9B97=>0x5C22,\r
-0x9B98=>0x5C28,\r
-0x9B99=>0x5C38,\r
-0x9B9A=>0x5C39,\r
-0x9B9B=>0x5C41,\r
-0x9B9C=>0x5C46,\r
-0x9B9D=>0x5C4E,\r
-0x9B9E=>0x5C53,\r
-0x9B9F=>0x5C50,\r
-0x9BA0=>0x5C4F,\r
-0x9BA1=>0x5B71,\r
-0x9BA2=>0x5C6C,\r
-0x9BA3=>0x5C6E,\r
-0x9BA4=>0x4E62,\r
-0x9BA5=>0x5C76,\r
-0x9BA6=>0x5C79,\r
-0x9BA7=>0x5C8C,\r
-0x9BA8=>0x5C91,\r
-0x9BA9=>0x5C94,\r
-0x9BAA=>0x599B,\r
-0x9BAB=>0x5CAB,\r
-0x9BAC=>0x5CBB,\r
-0x9BAD=>0x5CB6,\r
-0x9BAE=>0x5CBC,\r
-0x9BAF=>0x5CB7,\r
-0x9BB0=>0x5CC5,\r
-0x9BB1=>0x5CBE,\r
-0x9BB2=>0x5CC7,\r
-0x9BB3=>0x5CD9,\r
-0x9BB4=>0x5CE9,\r
-0x9BB5=>0x5CFD,\r
-0x9BB6=>0x5CFA,\r
-0x9BB7=>0x5CED,\r
-0x9BB8=>0x5D8C,\r
-0x9BB9=>0x5CEA,\r
-0x9BBA=>0x5D0B,\r
-0x9BBB=>0x5D15,\r
-0x9BBC=>0x5D17,\r
-0x9BBD=>0x5D5C,\r
-0x9BBE=>0x5D1F,\r
-0x9BBF=>0x5D1B,\r
-0x9BC0=>0x5D11,\r
-0x9BC1=>0x5D14,\r
-0x9BC2=>0x5D22,\r
-0x9BC3=>0x5D1A,\r
-0x9BC4=>0x5D19,\r
-0x9BC5=>0x5D18,\r
-0x9BC6=>0x5D4C,\r
-0x9BC7=>0x5D52,\r
-0x9BC8=>0x5D4E,\r
-0x9BC9=>0x5D4B,\r
-0x9BCA=>0x5D6C,\r
-0x9BCB=>0x5D73,\r
-0x9BCC=>0x5D76,\r
-0x9BCD=>0x5D87,\r
-0x9BCE=>0x5D84,\r
-0x9BCF=>0x5D82,\r
-0x9BD0=>0x5DA2,\r
-0x9BD1=>0x5D9D,\r
-0x9BD2=>0x5DAC,\r
-0x9BD3=>0x5DAE,\r
-0x9BD4=>0x5DBD,\r
-0x9BD5=>0x5D90,\r
-0x9BD6=>0x5DB7,\r
-0x9BD7=>0x5DBC,\r
-0x9BD8=>0x5DC9,\r
-0x9BD9=>0x5DCD,\r
-0x9BDA=>0x5DD3,\r
-0x9BDB=>0x5DD2,\r
-0x9BDC=>0x5DD6,\r
-0x9BDD=>0x5DDB,\r
-0x9BDE=>0x5DEB,\r
-0x9BDF=>0x5DF2,\r
-0x9BE0=>0x5DF5,\r
-0x9BE1=>0x5E0B,\r
-0x9BE2=>0x5E1A,\r
-0x9BE3=>0x5E19,\r
-0x9BE4=>0x5E11,\r
-0x9BE5=>0x5E1B,\r
-0x9BE6=>0x5E36,\r
-0x9BE7=>0x5E37,\r
-0x9BE8=>0x5E44,\r
-0x9BE9=>0x5E43,\r
-0x9BEA=>0x5E40,\r
-0x9BEB=>0x5E4E,\r
-0x9BEC=>0x5E57,\r
-0x9BED=>0x5E54,\r
-0x9BEE=>0x5E5F,\r
-0x9BEF=>0x5E62,\r
-0x9BF0=>0x5E64,\r
-0x9BF1=>0x5E47,\r
-0x9BF2=>0x5E75,\r
-0x9BF3=>0x5E76,\r
-0x9BF4=>0x5E7A,\r
-0x9BF5=>0x9EBC,\r
-0x9BF6=>0x5E7F,\r
-0x9BF7=>0x5EA0,\r
-0x9BF8=>0x5EC1,\r
-0x9BF9=>0x5EC2,\r
-0x9BFA=>0x5EC8,\r
-0x9BFB=>0x5ED0,\r
-0x9BFC=>0x5ECF,\r
-0x9C40=>0x5ED6,\r
-0x9C41=>0x5EE3,\r
-0x9C42=>0x5EDD,\r
-0x9C43=>0x5EDA,\r
-0x9C44=>0x5EDB,\r
-0x9C45=>0x5EE2,\r
-0x9C46=>0x5EE1,\r
-0x9C47=>0x5EE8,\r
-0x9C48=>0x5EE9,\r
-0x9C49=>0x5EEC,\r
-0x9C4A=>0x5EF1,\r
-0x9C4B=>0x5EF3,\r
-0x9C4C=>0x5EF0,\r
-0x9C4D=>0x5EF4,\r
-0x9C4E=>0x5EF8,\r
-0x9C4F=>0x5EFE,\r
-0x9C50=>0x5F03,\r
-0x9C51=>0x5F09,\r
-0x9C52=>0x5F5D,\r
-0x9C53=>0x5F5C,\r
-0x9C54=>0x5F0B,\r
-0x9C55=>0x5F11,\r
-0x9C56=>0x5F16,\r
-0x9C57=>0x5F29,\r
-0x9C58=>0x5F2D,\r
-0x9C59=>0x5F38,\r
-0x9C5A=>0x5F41,\r
-0x9C5B=>0x5F48,\r
-0x9C5C=>0x5F4C,\r
-0x9C5D=>0x5F4E,\r
-0x9C5E=>0x5F2F,\r
-0x9C5F=>0x5F51,\r
-0x9C60=>0x5F56,\r
-0x9C61=>0x5F57,\r
-0x9C62=>0x5F59,\r
-0x9C63=>0x5F61,\r
-0x9C64=>0x5F6D,\r
-0x9C65=>0x5F73,\r
-0x9C66=>0x5F77,\r
-0x9C67=>0x5F83,\r
-0x9C68=>0x5F82,\r
-0x9C69=>0x5F7F,\r
-0x9C6A=>0x5F8A,\r
-0x9C6B=>0x5F88,\r
-0x9C6C=>0x5F91,\r
-0x9C6D=>0x5F87,\r
-0x9C6E=>0x5F9E,\r
-0x9C6F=>0x5F99,\r
-0x9C70=>0x5F98,\r
-0x9C71=>0x5FA0,\r
-0x9C72=>0x5FA8,\r
-0x9C73=>0x5FAD,\r
-0x9C74=>0x5FBC,\r
-0x9C75=>0x5FD6,\r
-0x9C76=>0x5FFB,\r
-0x9C77=>0x5FE4,\r
-0x9C78=>0x5FF8,\r
-0x9C79=>0x5FF1,\r
-0x9C7A=>0x5FDD,\r
-0x9C7B=>0x60B3,\r
-0x9C7C=>0x5FFF,\r
-0x9C7D=>0x6021,\r
-0x9C7E=>0x6060,\r
-0x9C80=>0x6019,\r
-0x9C81=>0x6010,\r
-0x9C82=>0x6029,\r
-0x9C83=>0x600E,\r
-0x9C84=>0x6031,\r
-0x9C85=>0x601B,\r
-0x9C86=>0x6015,\r
-0x9C87=>0x602B,\r
-0x9C88=>0x6026,\r
-0x9C89=>0x600F,\r
-0x9C8A=>0x603A,\r
-0x9C8B=>0x605A,\r
-0x9C8C=>0x6041,\r
-0x9C8D=>0x606A,\r
-0x9C8E=>0x6077,\r
-0x9C8F=>0x605F,\r
-0x9C90=>0x604A,\r
-0x9C91=>0x6046,\r
-0x9C92=>0x604D,\r
-0x9C93=>0x6063,\r
-0x9C94=>0x6043,\r
-0x9C95=>0x6064,\r
-0x9C96=>0x6042,\r
-0x9C97=>0x606C,\r
-0x9C98=>0x606B,\r
-0x9C99=>0x6059,\r
-0x9C9A=>0x6081,\r
-0x9C9B=>0x608D,\r
-0x9C9C=>0x60E7,\r
-0x9C9D=>0x6083,\r
-0x9C9E=>0x609A,\r
-0x9C9F=>0x6084,\r
-0x9CA0=>0x609B,\r
-0x9CA1=>0x6096,\r
-0x9CA2=>0x6097,\r
-0x9CA3=>0x6092,\r
-0x9CA4=>0x60A7,\r
-0x9CA5=>0x608B,\r
-0x9CA6=>0x60E1,\r
-0x9CA7=>0x60B8,\r
-0x9CA8=>0x60E0,\r
-0x9CA9=>0x60D3,\r
-0x9CAA=>0x60B4,\r
-0x9CAB=>0x5FF0,\r
-0x9CAC=>0x60BD,\r
-0x9CAD=>0x60C6,\r
-0x9CAE=>0x60B5,\r
-0x9CAF=>0x60D8,\r
-0x9CB0=>0x614D,\r
-0x9CB1=>0x6115,\r
-0x9CB2=>0x6106,\r
-0x9CB3=>0x60F6,\r
-0x9CB4=>0x60F7,\r
-0x9CB5=>0x6100,\r
-0x9CB6=>0x60F4,\r
-0x9CB7=>0x60FA,\r
-0x9CB8=>0x6103,\r
-0x9CB9=>0x6121,\r
-0x9CBA=>0x60FB,\r
-0x9CBB=>0x60F1,\r
-0x9CBC=>0x610D,\r
-0x9CBD=>0x610E,\r
-0x9CBE=>0x6147,\r
-0x9CBF=>0x613E,\r
-0x9CC0=>0x6128,\r
-0x9CC1=>0x6127,\r
-0x9CC2=>0x614A,\r
-0x9CC3=>0x613F,\r
-0x9CC4=>0x613C,\r
-0x9CC5=>0x612C,\r
-0x9CC6=>0x6134,\r
-0x9CC7=>0x613D,\r
-0x9CC8=>0x6142,\r
-0x9CC9=>0x6144,\r
-0x9CCA=>0x6173,\r
-0x9CCB=>0x6177,\r
-0x9CCC=>0x6158,\r
-0x9CCD=>0x6159,\r
-0x9CCE=>0x615A,\r
-0x9CCF=>0x616B,\r
-0x9CD0=>0x6174,\r
-0x9CD1=>0x616F,\r
-0x9CD2=>0x6165,\r
-0x9CD3=>0x6171,\r
-0x9CD4=>0x615F,\r
-0x9CD5=>0x615D,\r
-0x9CD6=>0x6153,\r
-0x9CD7=>0x6175,\r
-0x9CD8=>0x6199,\r
-0x9CD9=>0x6196,\r
-0x9CDA=>0x6187,\r
-0x9CDB=>0x61AC,\r
-0x9CDC=>0x6194,\r
-0x9CDD=>0x619A,\r
-0x9CDE=>0x618A,\r
-0x9CDF=>0x6191,\r
-0x9CE0=>0x61AB,\r
-0x9CE1=>0x61AE,\r
-0x9CE2=>0x61CC,\r
-0x9CE3=>0x61CA,\r
-0x9CE4=>0x61C9,\r
-0x9CE5=>0x61F7,\r
-0x9CE6=>0x61C8,\r
-0x9CE7=>0x61C3,\r
-0x9CE8=>0x61C6,\r
-0x9CE9=>0x61BA,\r
-0x9CEA=>0x61CB,\r
-0x9CEB=>0x7F79,\r
-0x9CEC=>0x61CD,\r
-0x9CED=>0x61E6,\r
-0x9CEE=>0x61E3,\r
-0x9CEF=>0x61F6,\r
-0x9CF0=>0x61FA,\r
-0x9CF1=>0x61F4,\r
-0x9CF2=>0x61FF,\r
-0x9CF3=>0x61FD,\r
-0x9CF4=>0x61FC,\r
-0x9CF5=>0x61FE,\r
-0x9CF6=>0x6200,\r
-0x9CF7=>0x6208,\r
-0x9CF8=>0x6209,\r
-0x9CF9=>0x620D,\r
-0x9CFA=>0x620C,\r
-0x9CFB=>0x6214,\r
-0x9CFC=>0x621B,\r
-0x9D40=>0x621E,\r
-0x9D41=>0x6221,\r
-0x9D42=>0x622A,\r
-0x9D43=>0x622E,\r
-0x9D44=>0x6230,\r
-0x9D45=>0x6232,\r
-0x9D46=>0x6233,\r
-0x9D47=>0x6241,\r
-0x9D48=>0x624E,\r
-0x9D49=>0x625E,\r
-0x9D4A=>0x6263,\r
-0x9D4B=>0x625B,\r
-0x9D4C=>0x6260,\r
-0x9D4D=>0x6268,\r
-0x9D4E=>0x627C,\r
-0x9D4F=>0x6282,\r
-0x9D50=>0x6289,\r
-0x9D51=>0x627E,\r
-0x9D52=>0x6292,\r
-0x9D53=>0x6293,\r
-0x9D54=>0x6296,\r
-0x9D55=>0x62D4,\r
-0x9D56=>0x6283,\r
-0x9D57=>0x6294,\r
-0x9D58=>0x62D7,\r
-0x9D59=>0x62D1,\r
-0x9D5A=>0x62BB,\r
-0x9D5B=>0x62CF,\r
-0x9D5C=>0x62FF,\r
-0x9D5D=>0x62C6,\r
-0x9D5E=>0x64D4,\r
-0x9D5F=>0x62C8,\r
-0x9D60=>0x62DC,\r
-0x9D61=>0x62CC,\r
-0x9D62=>0x62CA,\r
-0x9D63=>0x62C2,\r
-0x9D64=>0x62C7,\r
-0x9D65=>0x629B,\r
-0x9D66=>0x62C9,\r
-0x9D67=>0x630C,\r
-0x9D68=>0x62EE,\r
-0x9D69=>0x62F1,\r
-0x9D6A=>0x6327,\r
-0x9D6B=>0x6302,\r
-0x9D6C=>0x6308,\r
-0x9D6D=>0x62EF,\r
-0x9D6E=>0x62F5,\r
-0x9D6F=>0x6350,\r
-0x9D70=>0x633E,\r
-0x9D71=>0x634D,\r
-0x9D72=>0x641C,\r
-0x9D73=>0x634F,\r
-0x9D74=>0x6396,\r
-0x9D75=>0x638E,\r
-0x9D76=>0x6380,\r
-0x9D77=>0x63AB,\r
-0x9D78=>0x6376,\r
-0x9D79=>0x63A3,\r
-0x9D7A=>0x638F,\r
-0x9D7B=>0x6389,\r
-0x9D7C=>0x639F,\r
-0x9D7D=>0x63B5,\r
-0x9D7E=>0x636B,\r
-0x9D80=>0x6369,\r
-0x9D81=>0x63BE,\r
-0x9D82=>0x63E9,\r
-0x9D83=>0x63C0,\r
-0x9D84=>0x63C6,\r
-0x9D85=>0x63E3,\r
-0x9D86=>0x63C9,\r
-0x9D87=>0x63D2,\r
-0x9D88=>0x63F6,\r
-0x9D89=>0x63C4,\r
-0x9D8A=>0x6416,\r
-0x9D8B=>0x6434,\r
-0x9D8C=>0x6406,\r
-0x9D8D=>0x6413,\r
-0x9D8E=>0x6426,\r
-0x9D8F=>0x6436,\r
-0x9D90=>0x651D,\r
-0x9D91=>0x6417,\r
-0x9D92=>0x6428,\r
-0x9D93=>0x640F,\r
-0x9D94=>0x6467,\r
-0x9D95=>0x646F,\r
-0x9D96=>0x6476,\r
-0x9D97=>0x644E,\r
-0x9D98=>0x652A,\r
-0x9D99=>0x6495,\r
-0x9D9A=>0x6493,\r
-0x9D9B=>0x64A5,\r
-0x9D9C=>0x64A9,\r
-0x9D9D=>0x6488,\r
-0x9D9E=>0x64BC,\r
-0x9D9F=>0x64DA,\r
-0x9DA0=>0x64D2,\r
-0x9DA1=>0x64C5,\r
-0x9DA2=>0x64C7,\r
-0x9DA3=>0x64BB,\r
-0x9DA4=>0x64D8,\r
-0x9DA5=>0x64C2,\r
-0x9DA6=>0x64F1,\r
-0x9DA7=>0x64E7,\r
-0x9DA8=>0x8209,\r
-0x9DA9=>0x64E0,\r
-0x9DAA=>0x64E1,\r
-0x9DAB=>0x62AC,\r
-0x9DAC=>0x64E3,\r
-0x9DAD=>0x64EF,\r
-0x9DAE=>0x652C,\r
-0x9DAF=>0x64F6,\r
-0x9DB0=>0x64F4,\r
-0x9DB1=>0x64F2,\r
-0x9DB2=>0x64FA,\r
-0x9DB3=>0x6500,\r
-0x9DB4=>0x64FD,\r
-0x9DB5=>0x6518,\r
-0x9DB6=>0x651C,\r
-0x9DB7=>0x6505,\r
-0x9DB8=>0x6524,\r
-0x9DB9=>0x6523,\r
-0x9DBA=>0x652B,\r
-0x9DBB=>0x6534,\r
-0x9DBC=>0x6535,\r
-0x9DBD=>0x6537,\r
-0x9DBE=>0x6536,\r
-0x9DBF=>0x6538,\r
-0x9DC0=>0x754B,\r
-0x9DC1=>0x6548,\r
-0x9DC2=>0x6556,\r
-0x9DC3=>0x6555,\r
-0x9DC4=>0x654D,\r
-0x9DC5=>0x6558,\r
-0x9DC6=>0x655E,\r
-0x9DC7=>0x655D,\r
-0x9DC8=>0x6572,\r
-0x9DC9=>0x6578,\r
-0x9DCA=>0x6582,\r
-0x9DCB=>0x6583,\r
-0x9DCC=>0x8B8A,\r
-0x9DCD=>0x659B,\r
-0x9DCE=>0x659F,\r
-0x9DCF=>0x65AB,\r
-0x9DD0=>0x65B7,\r
-0x9DD1=>0x65C3,\r
-0x9DD2=>0x65C6,\r
-0x9DD3=>0x65C1,\r
-0x9DD4=>0x65C4,\r
-0x9DD5=>0x65CC,\r
-0x9DD6=>0x65D2,\r
-0x9DD7=>0x65DB,\r
-0x9DD8=>0x65D9,\r
-0x9DD9=>0x65E0,\r
-0x9DDA=>0x65E1,\r
-0x9DDB=>0x65F1,\r
-0x9DDC=>0x6772,\r
-0x9DDD=>0x660A,\r
-0x9DDE=>0x6603,\r
-0x9DDF=>0x65FB,\r
-0x9DE0=>0x6773,\r
-0x9DE1=>0x6635,\r
-0x9DE2=>0x6636,\r
-0x9DE3=>0x6634,\r
-0x9DE4=>0x661C,\r
-0x9DE5=>0x664F,\r
-0x9DE6=>0x6644,\r
-0x9DE7=>0x6649,\r
-0x9DE8=>0x6641,\r
-0x9DE9=>0x665E,\r
-0x9DEA=>0x665D,\r
-0x9DEB=>0x6664,\r
-0x9DEC=>0x6667,\r
-0x9DED=>0x6668,\r
-0x9DEE=>0x665F,\r
-0x9DEF=>0x6662,\r
-0x9DF0=>0x6670,\r
-0x9DF1=>0x6683,\r
-0x9DF2=>0x6688,\r
-0x9DF3=>0x668E,\r
-0x9DF4=>0x6689,\r
-0x9DF5=>0x6684,\r
-0x9DF6=>0x6698,\r
-0x9DF7=>0x669D,\r
-0x9DF8=>0x66C1,\r
-0x9DF9=>0x66B9,\r
-0x9DFA=>0x66C9,\r
-0x9DFB=>0x66BE,\r
-0x9DFC=>0x66BC,\r
-0x9E40=>0x66C4,\r
-0x9E41=>0x66B8,\r
-0x9E42=>0x66D6,\r
-0x9E43=>0x66DA,\r
-0x9E44=>0x66E0,\r
-0x9E45=>0x663F,\r
-0x9E46=>0x66E6,\r
-0x9E47=>0x66E9,\r
-0x9E48=>0x66F0,\r
-0x9E49=>0x66F5,\r
-0x9E4A=>0x66F7,\r
-0x9E4B=>0x670F,\r
-0x9E4C=>0x6716,\r
-0x9E4D=>0x671E,\r
-0x9E4E=>0x6726,\r
-0x9E4F=>0x6727,\r
-0x9E50=>0x9738,\r
-0x9E51=>0x672E,\r
-0x9E52=>0x673F,\r
-0x9E53=>0x6736,\r
-0x9E54=>0x6741,\r
-0x9E55=>0x6738,\r
-0x9E56=>0x6737,\r
-0x9E57=>0x6746,\r
-0x9E58=>0x675E,\r
-0x9E59=>0x6760,\r
-0x9E5A=>0x6759,\r
-0x9E5B=>0x6763,\r
-0x9E5C=>0x6764,\r
-0x9E5D=>0x6789,\r
-0x9E5E=>0x6770,\r
-0x9E5F=>0x67A9,\r
-0x9E60=>0x677C,\r
-0x9E61=>0x676A,\r
-0x9E62=>0x678C,\r
-0x9E63=>0x678B,\r
-0x9E64=>0x67A6,\r
-0x9E65=>0x67A1,\r
-0x9E66=>0x6785,\r
-0x9E67=>0x67B7,\r
-0x9E68=>0x67EF,\r
-0x9E69=>0x67B4,\r
-0x9E6A=>0x67EC,\r
-0x9E6B=>0x67B3,\r
-0x9E6C=>0x67E9,\r
-0x9E6D=>0x67B8,\r
-0x9E6E=>0x67E4,\r
-0x9E6F=>0x67DE,\r
-0x9E70=>0x67DD,\r
-0x9E71=>0x67E2,\r
-0x9E72=>0x67EE,\r
-0x9E73=>0x67B9,\r
-0x9E74=>0x67CE,\r
-0x9E75=>0x67C6,\r
-0x9E76=>0x67E7,\r
-0x9E77=>0x6A9C,\r
-0x9E78=>0x681E,\r
-0x9E79=>0x6846,\r
-0x9E7A=>0x6829,\r
-0x9E7B=>0x6840,\r
-0x9E7C=>0x684D,\r
-0x9E7D=>0x6832,\r
-0x9E7E=>0x684E,\r
-0x9E80=>0x68B3,\r
-0x9E81=>0x682B,\r
-0x9E82=>0x6859,\r
-0x9E83=>0x6863,\r
-0x9E84=>0x6877,\r
-0x9E85=>0x687F,\r
-0x9E86=>0x689F,\r
-0x9E87=>0x688F,\r
-0x9E88=>0x68AD,\r
-0x9E89=>0x6894,\r
-0x9E8A=>0x689D,\r
-0x9E8B=>0x689B,\r
-0x9E8C=>0x6883,\r
-0x9E8D=>0x6AAE,\r
-0x9E8E=>0x68B9,\r
-0x9E8F=>0x6874,\r
-0x9E90=>0x68B5,\r
-0x9E91=>0x68A0,\r
-0x9E92=>0x68BA,\r
-0x9E93=>0x690F,\r
-0x9E94=>0x688D,\r
-0x9E95=>0x687E,\r
-0x9E96=>0x6901,\r
-0x9E97=>0x68CA,\r
-0x9E98=>0x6908,\r
-0x9E99=>0x68D8,\r
-0x9E9A=>0x6922,\r
-0x9E9B=>0x6926,\r
-0x9E9C=>0x68E1,\r
-0x9E9D=>0x690C,\r
-0x9E9E=>0x68CD,\r
-0x9E9F=>0x68D4,\r
-0x9EA0=>0x68E7,\r
-0x9EA1=>0x68D5,\r
-0x9EA2=>0x6936,\r
-0x9EA3=>0x6912,\r
-0x9EA4=>0x6904,\r
-0x9EA5=>0x68D7,\r
-0x9EA6=>0x68E3,\r
-0x9EA7=>0x6925,\r
-0x9EA8=>0x68F9,\r
-0x9EA9=>0x68E0,\r
-0x9EAA=>0x68EF,\r
-0x9EAB=>0x6928,\r
-0x9EAC=>0x692A,\r
-0x9EAD=>0x691A,\r
-0x9EAE=>0x6923,\r
-0x9EAF=>0x6921,\r
-0x9EB0=>0x68C6,\r
-0x9EB1=>0x6979,\r
-0x9EB2=>0x6977,\r
-0x9EB3=>0x695C,\r
-0x9EB4=>0x6978,\r
-0x9EB5=>0x696B,\r
-0x9EB6=>0x6954,\r
-0x9EB7=>0x697E,\r
-0x9EB8=>0x696E,\r
-0x9EB9=>0x6939,\r
-0x9EBA=>0x6974,\r
-0x9EBB=>0x693D,\r
-0x9EBC=>0x6959,\r
-0x9EBD=>0x6930,\r
-0x9EBE=>0x6961,\r
-0x9EBF=>0x695E,\r
-0x9EC0=>0x695D,\r
-0x9EC1=>0x6981,\r
-0x9EC2=>0x696A,\r
-0x9EC3=>0x69B2,\r
-0x9EC4=>0x69AE,\r
-0x9EC5=>0x69D0,\r
-0x9EC6=>0x69BF,\r
-0x9EC7=>0x69C1,\r
-0x9EC8=>0x69D3,\r
-0x9EC9=>0x69BE,\r
-0x9ECA=>0x69CE,\r
-0x9ECB=>0x5BE8,\r
-0x9ECC=>0x69CA,\r
-0x9ECD=>0x69DD,\r
-0x9ECE=>0x69BB,\r
-0x9ECF=>0x69C3,\r
-0x9ED0=>0x69A7,\r
-0x9ED1=>0x6A2E,\r
-0x9ED2=>0x6991,\r
-0x9ED3=>0x69A0,\r
-0x9ED4=>0x699C,\r
-0x9ED5=>0x6995,\r
-0x9ED6=>0x69B4,\r
-0x9ED7=>0x69DE,\r
-0x9ED8=>0x69E8,\r
-0x9ED9=>0x6A02,\r
-0x9EDA=>0x6A1B,\r
-0x9EDB=>0x69FF,\r
-0x9EDC=>0x6B0A,\r
-0x9EDD=>0x69F9,\r
-0x9EDE=>0x69F2,\r
-0x9EDF=>0x69E7,\r
-0x9EE0=>0x6A05,\r
-0x9EE1=>0x69B1,\r
-0x9EE2=>0x6A1E,\r
-0x9EE3=>0x69ED,\r
-0x9EE4=>0x6A14,\r
-0x9EE5=>0x69EB,\r
-0x9EE6=>0x6A0A,\r
-0x9EE7=>0x6A12,\r
-0x9EE8=>0x6AC1,\r
-0x9EE9=>0x6A23,\r
-0x9EEA=>0x6A13,\r
-0x9EEB=>0x6A44,\r
-0x9EEC=>0x6A0C,\r
-0x9EED=>0x6A72,\r
-0x9EEE=>0x6A36,\r
-0x9EEF=>0x6A78,\r
-0x9EF0=>0x6A47,\r
-0x9EF1=>0x6A62,\r
-0x9EF2=>0x6A59,\r
-0x9EF3=>0x6A66,\r
-0x9EF4=>0x6A48,\r
-0x9EF5=>0x6A38,\r
-0x9EF6=>0x6A22,\r
-0x9EF7=>0x6A90,\r
-0x9EF8=>0x6A8D,\r
-0x9EF9=>0x6AA0,\r
-0x9EFA=>0x6A84,\r
-0x9EFB=>0x6AA2,\r
-0x9EFC=>0x6AA3,\r
-0x9F40=>0x6A97,\r
-0x9F41=>0x8617,\r
-0x9F42=>0x6ABB,\r
-0x9F43=>0x6AC3,\r
-0x9F44=>0x6AC2,\r
-0x9F45=>0x6AB8,\r
-0x9F46=>0x6AB3,\r
-0x9F47=>0x6AAC,\r
-0x9F48=>0x6ADE,\r
-0x9F49=>0x6AD1,\r
-0x9F4A=>0x6ADF,\r
-0x9F4B=>0x6AAA,\r
-0x9F4C=>0x6ADA,\r
-0x9F4D=>0x6AEA,\r
-0x9F4E=>0x6AFB,\r
-0x9F4F=>0x6B05,\r
-0x9F50=>0x8616,\r
-0x9F51=>0x6AFA,\r
-0x9F52=>0x6B12,\r
-0x9F53=>0x6B16,\r
-0x9F54=>0x9B31,\r
-0x9F55=>0x6B1F,\r
-0x9F56=>0x6B38,\r
-0x9F57=>0x6B37,\r
-0x9F58=>0x76DC,\r
-0x9F59=>0x6B39,\r
-0x9F5A=>0x98EE,\r
-0x9F5B=>0x6B47,\r
-0x9F5C=>0x6B43,\r
-0x9F5D=>0x6B49,\r
-0x9F5E=>0x6B50,\r
-0x9F5F=>0x6B59,\r
-0x9F60=>0x6B54,\r
-0x9F61=>0x6B5B,\r
-0x9F62=>0x6B5F,\r
-0x9F63=>0x6B61,\r
-0x9F64=>0x6B78,\r
-0x9F65=>0x6B79,\r
-0x9F66=>0x6B7F,\r
-0x9F67=>0x6B80,\r
-0x9F68=>0x6B84,\r
-0x9F69=>0x6B83,\r
-0x9F6A=>0x6B8D,\r
-0x9F6B=>0x6B98,\r
-0x9F6C=>0x6B95,\r
-0x9F6D=>0x6B9E,\r
-0x9F6E=>0x6BA4,\r
-0x9F6F=>0x6BAA,\r
-0x9F70=>0x6BAB,\r
-0x9F71=>0x6BAF,\r
-0x9F72=>0x6BB2,\r
-0x9F73=>0x6BB1,\r
-0x9F74=>0x6BB3,\r
-0x9F75=>0x6BB7,\r
-0x9F76=>0x6BBC,\r
-0x9F77=>0x6BC6,\r
-0x9F78=>0x6BCB,\r
-0x9F79=>0x6BD3,\r
-0x9F7A=>0x6BDF,\r
-0x9F7B=>0x6BEC,\r
-0x9F7C=>0x6BEB,\r
-0x9F7D=>0x6BF3,\r
-0x9F7E=>0x6BEF,\r
-0x9F80=>0x9EBE,\r
-0x9F81=>0x6C08,\r
-0x9F82=>0x6C13,\r
-0x9F83=>0x6C14,\r
-0x9F84=>0x6C1B,\r
-0x9F85=>0x6C24,\r
-0x9F86=>0x6C23,\r
-0x9F87=>0x6C5E,\r
-0x9F88=>0x6C55,\r
-0x9F89=>0x6C62,\r
-0x9F8A=>0x6C6A,\r
-0x9F8B=>0x6C82,\r
-0x9F8C=>0x6C8D,\r
-0x9F8D=>0x6C9A,\r
-0x9F8E=>0x6C81,\r
-0x9F8F=>0x6C9B,\r
-0x9F90=>0x6C7E,\r
-0x9F91=>0x6C68,\r
-0x9F92=>0x6C73,\r
-0x9F93=>0x6C92,\r
-0x9F94=>0x6C90,\r
-0x9F95=>0x6CC4,\r
-0x9F96=>0x6CF1,\r
-0x9F97=>0x6CD3,\r
-0x9F98=>0x6CBD,\r
-0x9F99=>0x6CD7,\r
-0x9F9A=>0x6CC5,\r
-0x9F9B=>0x6CDD,\r
-0x9F9C=>0x6CAE,\r
-0x9F9D=>0x6CB1,\r
-0x9F9E=>0x6CBE,\r
-0x9F9F=>0x6CBA,\r
-0x9FA0=>0x6CDB,\r
-0x9FA1=>0x6CEF,\r
-0x9FA2=>0x6CD9,\r
-0x9FA3=>0x6CEA,\r
-0x9FA4=>0x6D1F,\r
-0x9FA5=>0x884D,\r
-0x9FA6=>0x6D36,\r
-0x9FA7=>0x6D2B,\r
-0x9FA8=>0x6D3D,\r
-0x9FA9=>0x6D38,\r
-0x9FAA=>0x6D19,\r
-0x9FAB=>0x6D35,\r
-0x9FAC=>0x6D33,\r
-0x9FAD=>0x6D12,\r
-0x9FAE=>0x6D0C,\r
-0x9FAF=>0x6D63,\r
-0x9FB0=>0x6D93,\r
-0x9FB1=>0x6D64,\r
-0x9FB2=>0x6D5A,\r
-0x9FB3=>0x6D79,\r
-0x9FB4=>0x6D59,\r
-0x9FB5=>0x6D8E,\r
-0x9FB6=>0x6D95,\r
-0x9FB7=>0x6FE4,\r
-0x9FB8=>0x6D85,\r
-0x9FB9=>0x6DF9,\r
-0x9FBA=>0x6E15,\r
-0x9FBB=>0x6E0A,\r
-0x9FBC=>0x6DB5,\r
-0x9FBD=>0x6DC7,\r
-0x9FBE=>0x6DE6,\r
-0x9FBF=>0x6DB8,\r
-0x9FC0=>0x6DC6,\r
-0x9FC1=>0x6DEC,\r
-0x9FC2=>0x6DDE,\r
-0x9FC3=>0x6DCC,\r
-0x9FC4=>0x6DE8,\r
-0x9FC5=>0x6DD2,\r
-0x9FC6=>0x6DC5,\r
-0x9FC7=>0x6DFA,\r
-0x9FC8=>0x6DD9,\r
-0x9FC9=>0x6DE4,\r
-0x9FCA=>0x6DD5,\r
-0x9FCB=>0x6DEA,\r
-0x9FCC=>0x6DEE,\r
-0x9FCD=>0x6E2D,\r
-0x9FCE=>0x6E6E,\r
-0x9FCF=>0x6E2E,\r
-0x9FD0=>0x6E19,\r
-0x9FD1=>0x6E72,\r
-0x9FD2=>0x6E5F,\r
-0x9FD3=>0x6E3E,\r
-0x9FD4=>0x6E23,\r
-0x9FD5=>0x6E6B,\r
-0x9FD6=>0x6E2B,\r
-0x9FD7=>0x6E76,\r
-0x9FD8=>0x6E4D,\r
-0x9FD9=>0x6E1F,\r
-0x9FDA=>0x6E43,\r
-0x9FDB=>0x6E3A,\r
-0x9FDC=>0x6E4E,\r
-0x9FDD=>0x6E24,\r
-0x9FDE=>0x6EFF,\r
-0x9FDF=>0x6E1D,\r
-0x9FE0=>0x6E38,\r
-0x9FE1=>0x6E82,\r
-0x9FE2=>0x6EAA,\r
-0x9FE3=>0x6E98,\r
-0x9FE4=>0x6EC9,\r
-0x9FE5=>0x6EB7,\r
-0x9FE6=>0x6ED3,\r
-0x9FE7=>0x6EBD,\r
-0x9FE8=>0x6EAF,\r
-0x9FE9=>0x6EC4,\r
-0x9FEA=>0x6EB2,\r
-0x9FEB=>0x6ED4,\r
-0x9FEC=>0x6ED5,\r
-0x9FED=>0x6E8F,\r
-0x9FEE=>0x6EA5,\r
-0x9FEF=>0x6EC2,\r
-0x9FF0=>0x6E9F,\r
-0x9FF1=>0x6F41,\r
-0x9FF2=>0x6F11,\r
-0x9FF3=>0x704C,\r
-0x9FF4=>0x6EEC,\r
-0x9FF5=>0x6EF8,\r
-0x9FF6=>0x6EFE,\r
-0x9FF7=>0x6F3F,\r
-0x9FF8=>0x6EF2,\r
-0x9FF9=>0x6F31,\r
-0x9FFA=>0x6EEF,\r
-0x9FFB=>0x6F32,\r
-0x9FFC=>0x6ECC,\r
-0xE040=>0x6F3E,\r
-0xE041=>0x6F13,\r
-0xE042=>0x6EF7,\r
-0xE043=>0x6F86,\r
-0xE044=>0x6F7A,\r
-0xE045=>0x6F78,\r
-0xE046=>0x6F81,\r
-0xE047=>0x6F80,\r
-0xE048=>0x6F6F,\r
-0xE049=>0x6F5B,\r
-0xE04A=>0x6FF3,\r
-0xE04B=>0x6F6D,\r
-0xE04C=>0x6F82,\r
-0xE04D=>0x6F7C,\r
-0xE04E=>0x6F58,\r
-0xE04F=>0x6F8E,\r
-0xE050=>0x6F91,\r
-0xE051=>0x6FC2,\r
-0xE052=>0x6F66,\r
-0xE053=>0x6FB3,\r
-0xE054=>0x6FA3,\r
-0xE055=>0x6FA1,\r
-0xE056=>0x6FA4,\r
-0xE057=>0x6FB9,\r
-0xE058=>0x6FC6,\r
-0xE059=>0x6FAA,\r
-0xE05A=>0x6FDF,\r
-0xE05B=>0x6FD5,\r
-0xE05C=>0x6FEC,\r
-0xE05D=>0x6FD4,\r
-0xE05E=>0x6FD8,\r
-0xE05F=>0x6FF1,\r
-0xE060=>0x6FEE,\r
-0xE061=>0x6FDB,\r
-0xE062=>0x7009,\r
-0xE063=>0x700B,\r
-0xE064=>0x6FFA,\r
-0xE065=>0x7011,\r
-0xE066=>0x7001,\r
-0xE067=>0x700F,\r
-0xE068=>0x6FFE,\r
-0xE069=>0x701B,\r
-0xE06A=>0x701A,\r
-0xE06B=>0x6F74,\r
-0xE06C=>0x701D,\r
-0xE06D=>0x7018,\r
-0xE06E=>0x701F,\r
-0xE06F=>0x7030,\r
-0xE070=>0x703E,\r
-0xE071=>0x7032,\r
-0xE072=>0x7051,\r
-0xE073=>0x7063,\r
-0xE074=>0x7099,\r
-0xE075=>0x7092,\r
-0xE076=>0x70AF,\r
-0xE077=>0x70F1,\r
-0xE078=>0x70AC,\r
-0xE079=>0x70B8,\r
-0xE07A=>0x70B3,\r
-0xE07B=>0x70AE,\r
-0xE07C=>0x70DF,\r
-0xE07D=>0x70CB,\r
-0xE07E=>0x70DD,\r
-0xE080=>0x70D9,\r
-0xE081=>0x7109,\r
-0xE082=>0x70FD,\r
-0xE083=>0x711C,\r
-0xE084=>0x7119,\r
-0xE085=>0x7165,\r
-0xE086=>0x7155,\r
-0xE087=>0x7188,\r
-0xE088=>0x7166,\r
-0xE089=>0x7162,\r
-0xE08A=>0x714C,\r
-0xE08B=>0x7156,\r
-0xE08C=>0x716C,\r
-0xE08D=>0x718F,\r
-0xE08E=>0x71FB,\r
-0xE08F=>0x7184,\r
-0xE090=>0x7195,\r
-0xE091=>0x71A8,\r
-0xE092=>0x71AC,\r
-0xE093=>0x71D7,\r
-0xE094=>0x71B9,\r
-0xE095=>0x71BE,\r
-0xE096=>0x71D2,\r
-0xE097=>0x71C9,\r
-0xE098=>0x71D4,\r
-0xE099=>0x71CE,\r
-0xE09A=>0x71E0,\r
-0xE09B=>0x71EC,\r
-0xE09C=>0x71E7,\r
-0xE09D=>0x71F5,\r
-0xE09E=>0x71FC,\r
-0xE09F=>0x71F9,\r
-0xE0A0=>0x71FF,\r
-0xE0A1=>0x720D,\r
-0xE0A2=>0x7210,\r
-0xE0A3=>0x721B,\r
-0xE0A4=>0x7228,\r
-0xE0A5=>0x722D,\r
-0xE0A6=>0x722C,\r
-0xE0A7=>0x7230,\r
-0xE0A8=>0x7232,\r
-0xE0A9=>0x723B,\r
-0xE0AA=>0x723C,\r
-0xE0AB=>0x723F,\r
-0xE0AC=>0x7240,\r
-0xE0AD=>0x7246,\r
-0xE0AE=>0x724B,\r
-0xE0AF=>0x7258,\r
-0xE0B0=>0x7274,\r
-0xE0B1=>0x727E,\r
-0xE0B2=>0x7282,\r
-0xE0B3=>0x7281,\r
-0xE0B4=>0x7287,\r
-0xE0B5=>0x7292,\r
-0xE0B6=>0x7296,\r
-0xE0B7=>0x72A2,\r
-0xE0B8=>0x72A7,\r
-0xE0B9=>0x72B9,\r
-0xE0BA=>0x72B2,\r
-0xE0BB=>0x72C3,\r
-0xE0BC=>0x72C6,\r
-0xE0BD=>0x72C4,\r
-0xE0BE=>0x72CE,\r
-0xE0BF=>0x72D2,\r
-0xE0C0=>0x72E2,\r
-0xE0C1=>0x72E0,\r
-0xE0C2=>0x72E1,\r
-0xE0C3=>0x72F9,\r
-0xE0C4=>0x72F7,\r
-0xE0C5=>0x500F,\r
-0xE0C6=>0x7317,\r
-0xE0C7=>0x730A,\r
-0xE0C8=>0x731C,\r
-0xE0C9=>0x7316,\r
-0xE0CA=>0x731D,\r
-0xE0CB=>0x7334,\r
-0xE0CC=>0x732F,\r
-0xE0CD=>0x7329,\r
-0xE0CE=>0x7325,\r
-0xE0CF=>0x733E,\r
-0xE0D0=>0x734E,\r
-0xE0D1=>0x734F,\r
-0xE0D2=>0x9ED8,\r
-0xE0D3=>0x7357,\r
-0xE0D4=>0x736A,\r
-0xE0D5=>0x7368,\r
-0xE0D6=>0x7370,\r
-0xE0D7=>0x7378,\r
-0xE0D8=>0x7375,\r
-0xE0D9=>0x737B,\r
-0xE0DA=>0x737A,\r
-0xE0DB=>0x73C8,\r
-0xE0DC=>0x73B3,\r
-0xE0DD=>0x73CE,\r
-0xE0DE=>0x73BB,\r
-0xE0DF=>0x73C0,\r
-0xE0E0=>0x73E5,\r
-0xE0E1=>0x73EE,\r
-0xE0E2=>0x73DE,\r
-0xE0E3=>0x74A2,\r
-0xE0E4=>0x7405,\r
-0xE0E5=>0x746F,\r
-0xE0E6=>0x7425,\r
-0xE0E7=>0x73F8,\r
-0xE0E8=>0x7432,\r
-0xE0E9=>0x743A,\r
-0xE0EA=>0x7455,\r
-0xE0EB=>0x743F,\r
-0xE0EC=>0x745F,\r
-0xE0ED=>0x7459,\r
-0xE0EE=>0x7441,\r
-0xE0EF=>0x745C,\r
-0xE0F0=>0x7469,\r
-0xE0F1=>0x7470,\r
-0xE0F2=>0x7463,\r
-0xE0F3=>0x746A,\r
-0xE0F4=>0x7476,\r
-0xE0F5=>0x747E,\r
-0xE0F6=>0x748B,\r
-0xE0F7=>0x749E,\r
-0xE0F8=>0x74A7,\r
-0xE0F9=>0x74CA,\r
-0xE0FA=>0x74CF,\r
-0xE0FB=>0x74D4,\r
-0xE0FC=>0x73F1,\r
-0xE140=>0x74E0,\r
-0xE141=>0x74E3,\r
-0xE142=>0x74E7,\r
-0xE143=>0x74E9,\r
-0xE144=>0x74EE,\r
-0xE145=>0x74F2,\r
-0xE146=>0x74F0,\r
-0xE147=>0x74F1,\r
-0xE148=>0x74F8,\r
-0xE149=>0x74F7,\r
-0xE14A=>0x7504,\r
-0xE14B=>0x7503,\r
-0xE14C=>0x7505,\r
-0xE14D=>0x750C,\r
-0xE14E=>0x750E,\r
-0xE14F=>0x750D,\r
-0xE150=>0x7515,\r
-0xE151=>0x7513,\r
-0xE152=>0x751E,\r
-0xE153=>0x7526,\r
-0xE154=>0x752C,\r
-0xE155=>0x753C,\r
-0xE156=>0x7544,\r
-0xE157=>0x754D,\r
-0xE158=>0x754A,\r
-0xE159=>0x7549,\r
-0xE15A=>0x755B,\r
-0xE15B=>0x7546,\r
-0xE15C=>0x755A,\r
-0xE15D=>0x7569,\r
-0xE15E=>0x7564,\r
-0xE15F=>0x7567,\r
-0xE160=>0x756B,\r
-0xE161=>0x756D,\r
-0xE162=>0x7578,\r
-0xE163=>0x7576,\r
-0xE164=>0x7586,\r
-0xE165=>0x7587,\r
-0xE166=>0x7574,\r
-0xE167=>0x758A,\r
-0xE168=>0x7589,\r
-0xE169=>0x7582,\r
-0xE16A=>0x7594,\r
-0xE16B=>0x759A,\r
-0xE16C=>0x759D,\r
-0xE16D=>0x75A5,\r
-0xE16E=>0x75A3,\r
-0xE16F=>0x75C2,\r
-0xE170=>0x75B3,\r
-0xE171=>0x75C3,\r
-0xE172=>0x75B5,\r
-0xE173=>0x75BD,\r
-0xE174=>0x75B8,\r
-0xE175=>0x75BC,\r
-0xE176=>0x75B1,\r
-0xE177=>0x75CD,\r
-0xE178=>0x75CA,\r
-0xE179=>0x75D2,\r
-0xE17A=>0x75D9,\r
-0xE17B=>0x75E3,\r
-0xE17C=>0x75DE,\r
-0xE17D=>0x75FE,\r
-0xE17E=>0x75FF,\r
-0xE180=>0x75FC,\r
-0xE181=>0x7601,\r
-0xE182=>0x75F0,\r
-0xE183=>0x75FA,\r
-0xE184=>0x75F2,\r
-0xE185=>0x75F3,\r
-0xE186=>0x760B,\r
-0xE187=>0x760D,\r
-0xE188=>0x7609,\r
-0xE189=>0x761F,\r
-0xE18A=>0x7627,\r
-0xE18B=>0x7620,\r
-0xE18C=>0x7621,\r
-0xE18D=>0x7622,\r
-0xE18E=>0x7624,\r
-0xE18F=>0x7634,\r
-0xE190=>0x7630,\r
-0xE191=>0x763B,\r
-0xE192=>0x7647,\r
-0xE193=>0x7648,\r
-0xE194=>0x7646,\r
-0xE195=>0x765C,\r
-0xE196=>0x7658,\r
-0xE197=>0x7661,\r
-0xE198=>0x7662,\r
-0xE199=>0x7668,\r
-0xE19A=>0x7669,\r
-0xE19B=>0x766A,\r
-0xE19C=>0x7667,\r
-0xE19D=>0x766C,\r
-0xE19E=>0x7670,\r
-0xE19F=>0x7672,\r
-0xE1A0=>0x7676,\r
-0xE1A1=>0x7678,\r
-0xE1A2=>0x767C,\r
-0xE1A3=>0x7680,\r
-0xE1A4=>0x7683,\r
-0xE1A5=>0x7688,\r
-0xE1A6=>0x768B,\r
-0xE1A7=>0x768E,\r
-0xE1A8=>0x7696,\r
-0xE1A9=>0x7693,\r
-0xE1AA=>0x7699,\r
-0xE1AB=>0x769A,\r
-0xE1AC=>0x76B0,\r
-0xE1AD=>0x76B4,\r
-0xE1AE=>0x76B8,\r
-0xE1AF=>0x76B9,\r
-0xE1B0=>0x76BA,\r
-0xE1B1=>0x76C2,\r
-0xE1B2=>0x76CD,\r
-0xE1B3=>0x76D6,\r
-0xE1B4=>0x76D2,\r
-0xE1B5=>0x76DE,\r
-0xE1B6=>0x76E1,\r
-0xE1B7=>0x76E5,\r
-0xE1B8=>0x76E7,\r
-0xE1B9=>0x76EA,\r
-0xE1BA=>0x862F,\r
-0xE1BB=>0x76FB,\r
-0xE1BC=>0x7708,\r
-0xE1BD=>0x7707,\r
-0xE1BE=>0x7704,\r
-0xE1BF=>0x7729,\r
-0xE1C0=>0x7724,\r
-0xE1C1=>0x771E,\r
-0xE1C2=>0x7725,\r
-0xE1C3=>0x7726,\r
-0xE1C4=>0x771B,\r
-0xE1C5=>0x7737,\r
-0xE1C6=>0x7738,\r
-0xE1C7=>0x7747,\r
-0xE1C8=>0x775A,\r
-0xE1C9=>0x7768,\r
-0xE1CA=>0x776B,\r
-0xE1CB=>0x775B,\r
-0xE1CC=>0x7765,\r
-0xE1CD=>0x777F,\r
-0xE1CE=>0x777E,\r
-0xE1CF=>0x7779,\r
-0xE1D0=>0x778E,\r
-0xE1D1=>0x778B,\r
-0xE1D2=>0x7791,\r
-0xE1D3=>0x77A0,\r
-0xE1D4=>0x779E,\r
-0xE1D5=>0x77B0,\r
-0xE1D6=>0x77B6,\r
-0xE1D7=>0x77B9,\r
-0xE1D8=>0x77BF,\r
-0xE1D9=>0x77BC,\r
-0xE1DA=>0x77BD,\r
-0xE1DB=>0x77BB,\r
-0xE1DC=>0x77C7,\r
-0xE1DD=>0x77CD,\r
-0xE1DE=>0x77D7,\r
-0xE1DF=>0x77DA,\r
-0xE1E0=>0x77DC,\r
-0xE1E1=>0x77E3,\r
-0xE1E2=>0x77EE,\r
-0xE1E3=>0x77FC,\r
-0xE1E4=>0x780C,\r
-0xE1E5=>0x7812,\r
-0xE1E6=>0x7926,\r
-0xE1E7=>0x7820,\r
-0xE1E8=>0x792A,\r
-0xE1E9=>0x7845,\r
-0xE1EA=>0x788E,\r
-0xE1EB=>0x7874,\r
-0xE1EC=>0x7886,\r
-0xE1ED=>0x787C,\r
-0xE1EE=>0x789A,\r
-0xE1EF=>0x788C,\r
-0xE1F0=>0x78A3,\r
-0xE1F1=>0x78B5,\r
-0xE1F2=>0x78AA,\r
-0xE1F3=>0x78AF,\r
-0xE1F4=>0x78D1,\r
-0xE1F5=>0x78C6,\r
-0xE1F6=>0x78CB,\r
-0xE1F7=>0x78D4,\r
-0xE1F8=>0x78BE,\r
-0xE1F9=>0x78BC,\r
-0xE1FA=>0x78C5,\r
-0xE1FB=>0x78CA,\r
-0xE1FC=>0x78EC,\r
-0xE240=>0x78E7,\r
-0xE241=>0x78DA,\r
-0xE242=>0x78FD,\r
-0xE243=>0x78F4,\r
-0xE244=>0x7907,\r
-0xE245=>0x7912,\r
-0xE246=>0x7911,\r
-0xE247=>0x7919,\r
-0xE248=>0x792C,\r
-0xE249=>0x792B,\r
-0xE24A=>0x7940,\r
-0xE24B=>0x7960,\r
-0xE24C=>0x7957,\r
-0xE24D=>0x795F,\r
-0xE24E=>0x795A,\r
-0xE24F=>0x7955,\r
-0xE250=>0x7953,\r
-0xE251=>0x797A,\r
-0xE252=>0x797F,\r
-0xE253=>0x798A,\r
-0xE254=>0x799D,\r
-0xE255=>0x79A7,\r
-0xE256=>0x9F4B,\r
-0xE257=>0x79AA,\r
-0xE258=>0x79AE,\r
-0xE259=>0x79B3,\r
-0xE25A=>0x79B9,\r
-0xE25B=>0x79BA,\r
-0xE25C=>0x79C9,\r
-0xE25D=>0x79D5,\r
-0xE25E=>0x79E7,\r
-0xE25F=>0x79EC,\r
-0xE260=>0x79E1,\r
-0xE261=>0x79E3,\r
-0xE262=>0x7A08,\r
-0xE263=>0x7A0D,\r
-0xE264=>0x7A18,\r
-0xE265=>0x7A19,\r
-0xE266=>0x7A20,\r
-0xE267=>0x7A1F,\r
-0xE268=>0x7980,\r
-0xE269=>0x7A31,\r
-0xE26A=>0x7A3B,\r
-0xE26B=>0x7A3E,\r
-0xE26C=>0x7A37,\r
-0xE26D=>0x7A43,\r
-0xE26E=>0x7A57,\r
-0xE26F=>0x7A49,\r
-0xE270=>0x7A61,\r
-0xE271=>0x7A62,\r
-0xE272=>0x7A69,\r
-0xE273=>0x9F9D,\r
-0xE274=>0x7A70,\r
-0xE275=>0x7A79,\r
-0xE276=>0x7A7D,\r
-0xE277=>0x7A88,\r
-0xE278=>0x7A97,\r
-0xE279=>0x7A95,\r
-0xE27A=>0x7A98,\r
-0xE27B=>0x7A96,\r
-0xE27C=>0x7AA9,\r
-0xE27D=>0x7AC8,\r
-0xE27E=>0x7AB0,\r
-0xE280=>0x7AB6,\r
-0xE281=>0x7AC5,\r
-0xE282=>0x7AC4,\r
-0xE283=>0x7ABF,\r
-0xE284=>0x9083,\r
-0xE285=>0x7AC7,\r
-0xE286=>0x7ACA,\r
-0xE287=>0x7ACD,\r
-0xE288=>0x7ACF,\r
-0xE289=>0x7AD5,\r
-0xE28A=>0x7AD3,\r
-0xE28B=>0x7AD9,\r
-0xE28C=>0x7ADA,\r
-0xE28D=>0x7ADD,\r
-0xE28E=>0x7AE1,\r
-0xE28F=>0x7AE2,\r
-0xE290=>0x7AE6,\r
-0xE291=>0x7AED,\r
-0xE292=>0x7AF0,\r
-0xE293=>0x7B02,\r
-0xE294=>0x7B0F,\r
-0xE295=>0x7B0A,\r
-0xE296=>0x7B06,\r
-0xE297=>0x7B33,\r
-0xE298=>0x7B18,\r
-0xE299=>0x7B19,\r
-0xE29A=>0x7B1E,\r
-0xE29B=>0x7B35,\r
-0xE29C=>0x7B28,\r
-0xE29D=>0x7B36,\r
-0xE29E=>0x7B50,\r
-0xE29F=>0x7B7A,\r
-0xE2A0=>0x7B04,\r
-0xE2A1=>0x7B4D,\r
-0xE2A2=>0x7B0B,\r
-0xE2A3=>0x7B4C,\r
-0xE2A4=>0x7B45,\r
-0xE2A5=>0x7B75,\r
-0xE2A6=>0x7B65,\r
-0xE2A7=>0x7B74,\r
-0xE2A8=>0x7B67,\r
-0xE2A9=>0x7B70,\r
-0xE2AA=>0x7B71,\r
-0xE2AB=>0x7B6C,\r
-0xE2AC=>0x7B6E,\r
-0xE2AD=>0x7B9D,\r
-0xE2AE=>0x7B98,\r
-0xE2AF=>0x7B9F,\r
-0xE2B0=>0x7B8D,\r
-0xE2B1=>0x7B9C,\r
-0xE2B2=>0x7B9A,\r
-0xE2B3=>0x7B8B,\r
-0xE2B4=>0x7B92,\r
-0xE2B5=>0x7B8F,\r
-0xE2B6=>0x7B5D,\r
-0xE2B7=>0x7B99,\r
-0xE2B8=>0x7BCB,\r
-0xE2B9=>0x7BC1,\r
-0xE2BA=>0x7BCC,\r
-0xE2BB=>0x7BCF,\r
-0xE2BC=>0x7BB4,\r
-0xE2BD=>0x7BC6,\r
-0xE2BE=>0x7BDD,\r
-0xE2BF=>0x7BE9,\r
-0xE2C0=>0x7C11,\r
-0xE2C1=>0x7C14,\r
-0xE2C2=>0x7BE6,\r
-0xE2C3=>0x7BE5,\r
-0xE2C4=>0x7C60,\r
-0xE2C5=>0x7C00,\r
-0xE2C6=>0x7C07,\r
-0xE2C7=>0x7C13,\r
-0xE2C8=>0x7BF3,\r
-0xE2C9=>0x7BF7,\r
-0xE2CA=>0x7C17,\r
-0xE2CB=>0x7C0D,\r
-0xE2CC=>0x7BF6,\r
-0xE2CD=>0x7C23,\r
-0xE2CE=>0x7C27,\r
-0xE2CF=>0x7C2A,\r
-0xE2D0=>0x7C1F,\r
-0xE2D1=>0x7C37,\r
-0xE2D2=>0x7C2B,\r
-0xE2D3=>0x7C3D,\r
-0xE2D4=>0x7C4C,\r
-0xE2D5=>0x7C43,\r
-0xE2D6=>0x7C54,\r
-0xE2D7=>0x7C4F,\r
-0xE2D8=>0x7C40,\r
-0xE2D9=>0x7C50,\r
-0xE2DA=>0x7C58,\r
-0xE2DB=>0x7C5F,\r
-0xE2DC=>0x7C64,\r
-0xE2DD=>0x7C56,\r
-0xE2DE=>0x7C65,\r
-0xE2DF=>0x7C6C,\r
-0xE2E0=>0x7C75,\r
-0xE2E1=>0x7C83,\r
-0xE2E2=>0x7C90,\r
-0xE2E3=>0x7CA4,\r
-0xE2E4=>0x7CAD,\r
-0xE2E5=>0x7CA2,\r
-0xE2E6=>0x7CAB,\r
-0xE2E7=>0x7CA1,\r
-0xE2E8=>0x7CA8,\r
-0xE2E9=>0x7CB3,\r
-0xE2EA=>0x7CB2,\r
-0xE2EB=>0x7CB1,\r
-0xE2EC=>0x7CAE,\r
-0xE2ED=>0x7CB9,\r
-0xE2EE=>0x7CBD,\r
-0xE2EF=>0x7CC0,\r
-0xE2F0=>0x7CC5,\r
-0xE2F1=>0x7CC2,\r
-0xE2F2=>0x7CD8,\r
-0xE2F3=>0x7CD2,\r
-0xE2F4=>0x7CDC,\r
-0xE2F5=>0x7CE2,\r
-0xE2F6=>0x9B3B,\r
-0xE2F7=>0x7CEF,\r
-0xE2F8=>0x7CF2,\r
-0xE2F9=>0x7CF4,\r
-0xE2FA=>0x7CF6,\r
-0xE2FB=>0x7CFA,\r
-0xE2FC=>0x7D06,\r
-0xE340=>0x7D02,\r
-0xE341=>0x7D1C,\r
-0xE342=>0x7D15,\r
-0xE343=>0x7D0A,\r
-0xE344=>0x7D45,\r
-0xE345=>0x7D4B,\r
-0xE346=>0x7D2E,\r
-0xE347=>0x7D32,\r
-0xE348=>0x7D3F,\r
-0xE349=>0x7D35,\r
-0xE34A=>0x7D46,\r
-0xE34B=>0x7D73,\r
-0xE34C=>0x7D56,\r
-0xE34D=>0x7D4E,\r
-0xE34E=>0x7D72,\r
-0xE34F=>0x7D68,\r
-0xE350=>0x7D6E,\r
-0xE351=>0x7D4F,\r
-0xE352=>0x7D63,\r
-0xE353=>0x7D93,\r
-0xE354=>0x7D89,\r
-0xE355=>0x7D5B,\r
-0xE356=>0x7D8F,\r
-0xE357=>0x7D7D,\r
-0xE358=>0x7D9B,\r
-0xE359=>0x7DBA,\r
-0xE35A=>0x7DAE,\r
-0xE35B=>0x7DA3,\r
-0xE35C=>0x7DB5,\r
-0xE35D=>0x7DC7,\r
-0xE35E=>0x7DBD,\r
-0xE35F=>0x7DAB,\r
-0xE360=>0x7E3D,\r
-0xE361=>0x7DA2,\r
-0xE362=>0x7DAF,\r
-0xE363=>0x7DDC,\r
-0xE364=>0x7DB8,\r
-0xE365=>0x7D9F,\r
-0xE366=>0x7DB0,\r
-0xE367=>0x7DD8,\r
-0xE368=>0x7DDD,\r
-0xE369=>0x7DE4,\r
-0xE36A=>0x7DDE,\r
-0xE36B=>0x7DFB,\r
-0xE36C=>0x7DF2,\r
-0xE36D=>0x7DE1,\r
-0xE36E=>0x7E05,\r
-0xE36F=>0x7E0A,\r
-0xE370=>0x7E23,\r
-0xE371=>0x7E21,\r
-0xE372=>0x7E12,\r
-0xE373=>0x7E31,\r
-0xE374=>0x7E1F,\r
-0xE375=>0x7E09,\r
-0xE376=>0x7E0B,\r
-0xE377=>0x7E22,\r
-0xE378=>0x7E46,\r
-0xE379=>0x7E66,\r
-0xE37A=>0x7E3B,\r
-0xE37B=>0x7E35,\r
-0xE37C=>0x7E39,\r
-0xE37D=>0x7E43,\r
-0xE37E=>0x7E37,\r
-0xE380=>0x7E32,\r
-0xE381=>0x7E3A,\r
-0xE382=>0x7E67,\r
-0xE383=>0x7E5D,\r
-0xE384=>0x7E56,\r
-0xE385=>0x7E5E,\r
-0xE386=>0x7E59,\r
-0xE387=>0x7E5A,\r
-0xE388=>0x7E79,\r
-0xE389=>0x7E6A,\r
-0xE38A=>0x7E69,\r
-0xE38B=>0x7E7C,\r
-0xE38C=>0x7E7B,\r
-0xE38D=>0x7E83,\r
-0xE38E=>0x7DD5,\r
-0xE38F=>0x7E7D,\r
-0xE390=>0x8FAE,\r
-0xE391=>0x7E7F,\r
-0xE392=>0x7E88,\r
-0xE393=>0x7E89,\r
-0xE394=>0x7E8C,\r
-0xE395=>0x7E92,\r
-0xE396=>0x7E90,\r
-0xE397=>0x7E93,\r
-0xE398=>0x7E94,\r
-0xE399=>0x7E96,\r
-0xE39A=>0x7E8E,\r
-0xE39B=>0x7E9B,\r
-0xE39C=>0x7E9C,\r
-0xE39D=>0x7F38,\r
-0xE39E=>0x7F3A,\r
-0xE39F=>0x7F45,\r
-0xE3A0=>0x7F4C,\r
-0xE3A1=>0x7F4D,\r
-0xE3A2=>0x7F4E,\r
-0xE3A3=>0x7F50,\r
-0xE3A4=>0x7F51,\r
-0xE3A5=>0x7F55,\r
-0xE3A6=>0x7F54,\r
-0xE3A7=>0x7F58,\r
-0xE3A8=>0x7F5F,\r
-0xE3A9=>0x7F60,\r
-0xE3AA=>0x7F68,\r
-0xE3AB=>0x7F69,\r
-0xE3AC=>0x7F67,\r
-0xE3AD=>0x7F78,\r
-0xE3AE=>0x7F82,\r
-0xE3AF=>0x7F86,\r
-0xE3B0=>0x7F83,\r
-0xE3B1=>0x7F88,\r
-0xE3B2=>0x7F87,\r
-0xE3B3=>0x7F8C,\r
-0xE3B4=>0x7F94,\r
-0xE3B5=>0x7F9E,\r
-0xE3B6=>0x7F9D,\r
-0xE3B7=>0x7F9A,\r
-0xE3B8=>0x7FA3,\r
-0xE3B9=>0x7FAF,\r
-0xE3BA=>0x7FB2,\r
-0xE3BB=>0x7FB9,\r
-0xE3BC=>0x7FAE,\r
-0xE3BD=>0x7FB6,\r
-0xE3BE=>0x7FB8,\r
-0xE3BF=>0x8B71,\r
-0xE3C0=>0x7FC5,\r
-0xE3C1=>0x7FC6,\r
-0xE3C2=>0x7FCA,\r
-0xE3C3=>0x7FD5,\r
-0xE3C4=>0x7FD4,\r
-0xE3C5=>0x7FE1,\r
-0xE3C6=>0x7FE6,\r
-0xE3C7=>0x7FE9,\r
-0xE3C8=>0x7FF3,\r
-0xE3C9=>0x7FF9,\r
-0xE3CA=>0x98DC,\r
-0xE3CB=>0x8006,\r
-0xE3CC=>0x8004,\r
-0xE3CD=>0x800B,\r
-0xE3CE=>0x8012,\r
-0xE3CF=>0x8018,\r
-0xE3D0=>0x8019,\r
-0xE3D1=>0x801C,\r
-0xE3D2=>0x8021,\r
-0xE3D3=>0x8028,\r
-0xE3D4=>0x803F,\r
-0xE3D5=>0x803B,\r
-0xE3D6=>0x804A,\r
-0xE3D7=>0x8046,\r
-0xE3D8=>0x8052,\r
-0xE3D9=>0x8058,\r
-0xE3DA=>0x805A,\r
-0xE3DB=>0x805F,\r
-0xE3DC=>0x8062,\r
-0xE3DD=>0x8068,\r
-0xE3DE=>0x8073,\r
-0xE3DF=>0x8072,\r
-0xE3E0=>0x8070,\r
-0xE3E1=>0x8076,\r
-0xE3E2=>0x8079,\r
-0xE3E3=>0x807D,\r
-0xE3E4=>0x807F,\r
-0xE3E5=>0x8084,\r
-0xE3E6=>0x8086,\r
-0xE3E7=>0x8085,\r
-0xE3E8=>0x809B,\r
-0xE3E9=>0x8093,\r
-0xE3EA=>0x809A,\r
-0xE3EB=>0x80AD,\r
-0xE3EC=>0x5190,\r
-0xE3ED=>0x80AC,\r
-0xE3EE=>0x80DB,\r
-0xE3EF=>0x80E5,\r
-0xE3F0=>0x80D9,\r
-0xE3F1=>0x80DD,\r
-0xE3F2=>0x80C4,\r
-0xE3F3=>0x80DA,\r
-0xE3F4=>0x80D6,\r
-0xE3F5=>0x8109,\r
-0xE3F6=>0x80EF,\r
-0xE3F7=>0x80F1,\r
-0xE3F8=>0x811B,\r
-0xE3F9=>0x8129,\r
-0xE3FA=>0x8123,\r
-0xE3FB=>0x812F,\r
-0xE3FC=>0x814B,\r
-0xE440=>0x968B,\r
-0xE441=>0x8146,\r
-0xE442=>0x813E,\r
-0xE443=>0x8153,\r
-0xE444=>0x8151,\r
-0xE445=>0x80FC,\r
-0xE446=>0x8171,\r
-0xE447=>0x816E,\r
-0xE448=>0x8165,\r
-0xE449=>0x8166,\r
-0xE44A=>0x8174,\r
-0xE44B=>0x8183,\r
-0xE44C=>0x8188,\r
-0xE44D=>0x818A,\r
-0xE44E=>0x8180,\r
-0xE44F=>0x8182,\r
-0xE450=>0x81A0,\r
-0xE451=>0x8195,\r
-0xE452=>0x81A4,\r
-0xE453=>0x81A3,\r
-0xE454=>0x815F,\r
-0xE455=>0x8193,\r
-0xE456=>0x81A9,\r
-0xE457=>0x81B0,\r
-0xE458=>0x81B5,\r
-0xE459=>0x81BE,\r
-0xE45A=>0x81B8,\r
-0xE45B=>0x81BD,\r
-0xE45C=>0x81C0,\r
-0xE45D=>0x81C2,\r
-0xE45E=>0x81BA,\r
-0xE45F=>0x81C9,\r
-0xE460=>0x81CD,\r
-0xE461=>0x81D1,\r
-0xE462=>0x81D9,\r
-0xE463=>0x81D8,\r
-0xE464=>0x81C8,\r
-0xE465=>0x81DA,\r
-0xE466=>0x81DF,\r
-0xE467=>0x81E0,\r
-0xE468=>0x81E7,\r
-0xE469=>0x81FA,\r
-0xE46A=>0x81FB,\r
-0xE46B=>0x81FE,\r
-0xE46C=>0x8201,\r
-0xE46D=>0x8202,\r
-0xE46E=>0x8205,\r
-0xE46F=>0x8207,\r
-0xE470=>0x820A,\r
-0xE471=>0x820D,\r
-0xE472=>0x8210,\r
-0xE473=>0x8216,\r
-0xE474=>0x8229,\r
-0xE475=>0x822B,\r
-0xE476=>0x8238,\r
-0xE477=>0x8233,\r
-0xE478=>0x8240,\r
-0xE479=>0x8259,\r
-0xE47A=>0x8258,\r
-0xE47B=>0x825D,\r
-0xE47C=>0x825A,\r
-0xE47D=>0x825F,\r
-0xE47E=>0x8264,\r
-0xE480=>0x8262,\r
-0xE481=>0x8268,\r
-0xE482=>0x826A,\r
-0xE483=>0x826B,\r
-0xE484=>0x822E,\r
-0xE485=>0x8271,\r
-0xE486=>0x8277,\r
-0xE487=>0x8278,\r
-0xE488=>0x827E,\r
-0xE489=>0x828D,\r
-0xE48A=>0x8292,\r
-0xE48B=>0x82AB,\r
-0xE48C=>0x829F,\r
-0xE48D=>0x82BB,\r
-0xE48E=>0x82AC,\r
-0xE48F=>0x82E1,\r
-0xE490=>0x82E3,\r
-0xE491=>0x82DF,\r
-0xE492=>0x82D2,\r
-0xE493=>0x82F4,\r
-0xE494=>0x82F3,\r
-0xE495=>0x82FA,\r
-0xE496=>0x8393,\r
-0xE497=>0x8303,\r
-0xE498=>0x82FB,\r
-0xE499=>0x82F9,\r
-0xE49A=>0x82DE,\r
-0xE49B=>0x8306,\r
-0xE49C=>0x82DC,\r
-0xE49D=>0x8309,\r
-0xE49E=>0x82D9,\r
-0xE49F=>0x8335,\r
-0xE4A0=>0x8334,\r
-0xE4A1=>0x8316,\r
-0xE4A2=>0x8332,\r
-0xE4A3=>0x8331,\r
-0xE4A4=>0x8340,\r
-0xE4A5=>0x8339,\r
-0xE4A6=>0x8350,\r
-0xE4A7=>0x8345,\r
-0xE4A8=>0x832F,\r
-0xE4A9=>0x832B,\r
-0xE4AA=>0x8317,\r
-0xE4AB=>0x8318,\r
-0xE4AC=>0x8385,\r
-0xE4AD=>0x839A,\r
-0xE4AE=>0x83AA,\r
-0xE4AF=>0x839F,\r
-0xE4B0=>0x83A2,\r
-0xE4B1=>0x8396,\r
-0xE4B2=>0x8323,\r
-0xE4B3=>0x838E,\r
-0xE4B4=>0x8387,\r
-0xE4B5=>0x838A,\r
-0xE4B6=>0x837C,\r
-0xE4B7=>0x83B5,\r
-0xE4B8=>0x8373,\r
-0xE4B9=>0x8375,\r
-0xE4BA=>0x83A0,\r
-0xE4BB=>0x8389,\r
-0xE4BC=>0x83A8,\r
-0xE4BD=>0x83F4,\r
-0xE4BE=>0x8413,\r
-0xE4BF=>0x83EB,\r
-0xE4C0=>0x83CE,\r
-0xE4C1=>0x83FD,\r
-0xE4C2=>0x8403,\r
-0xE4C3=>0x83D8,\r
-0xE4C4=>0x840B,\r
-0xE4C5=>0x83C1,\r
-0xE4C6=>0x83F7,\r
-0xE4C7=>0x8407,\r
-0xE4C8=>0x83E0,\r
-0xE4C9=>0x83F2,\r
-0xE4CA=>0x840D,\r
-0xE4CB=>0x8422,\r
-0xE4CC=>0x8420,\r
-0xE4CD=>0x83BD,\r
-0xE4CE=>0x8438,\r
-0xE4CF=>0x8506,\r
-0xE4D0=>0x83FB,\r
-0xE4D1=>0x846D,\r
-0xE4D2=>0x842A,\r
-0xE4D3=>0x843C,\r
-0xE4D4=>0x855A,\r
-0xE4D5=>0x8484,\r
-0xE4D6=>0x8477,\r
-0xE4D7=>0x846B,\r
-0xE4D8=>0x84AD,\r
-0xE4D9=>0x846E,\r
-0xE4DA=>0x8482,\r
-0xE4DB=>0x8469,\r
-0xE4DC=>0x8446,\r
-0xE4DD=>0x842C,\r
-0xE4DE=>0x846F,\r
-0xE4DF=>0x8479,\r
-0xE4E0=>0x8435,\r
-0xE4E1=>0x84CA,\r
-0xE4E2=>0x8462,\r
-0xE4E3=>0x84B9,\r
-0xE4E4=>0x84BF,\r
-0xE4E5=>0x849F,\r
-0xE4E6=>0x84D9,\r
-0xE4E7=>0x84CD,\r
-0xE4E8=>0x84BB,\r
-0xE4E9=>0x84DA,\r
-0xE4EA=>0x84D0,\r
-0xE4EB=>0x84C1,\r
-0xE4EC=>0x84C6,\r
-0xE4ED=>0x84D6,\r
-0xE4EE=>0x84A1,\r
-0xE4EF=>0x8521,\r
-0xE4F0=>0x84FF,\r
-0xE4F1=>0x84F4,\r
-0xE4F2=>0x8517,\r
-0xE4F3=>0x8518,\r
-0xE4F4=>0x852C,\r
-0xE4F5=>0x851F,\r
-0xE4F6=>0x8515,\r
-0xE4F7=>0x8514,\r
-0xE4F8=>0x84FC,\r
-0xE4F9=>0x8540,\r
-0xE4FA=>0x8563,\r
-0xE4FB=>0x8558,\r
-0xE4FC=>0x8548,\r
-0xE540=>0x8541,\r
-0xE541=>0x8602,\r
-0xE542=>0x854B,\r
-0xE543=>0x8555,\r
-0xE544=>0x8580,\r
-0xE545=>0x85A4,\r
-0xE546=>0x8588,\r
-0xE547=>0x8591,\r
-0xE548=>0x858A,\r
-0xE549=>0x85A8,\r
-0xE54A=>0x856D,\r
-0xE54B=>0x8594,\r
-0xE54C=>0x859B,\r
-0xE54D=>0x85EA,\r
-0xE54E=>0x8587,\r
-0xE54F=>0x859C,\r
-0xE550=>0x8577,\r
-0xE551=>0x857E,\r
-0xE552=>0x8590,\r
-0xE553=>0x85C9,\r
-0xE554=>0x85BA,\r
-0xE555=>0x85CF,\r
-0xE556=>0x85B9,\r
-0xE557=>0x85D0,\r
-0xE558=>0x85D5,\r
-0xE559=>0x85DD,\r
-0xE55A=>0x85E5,\r
-0xE55B=>0x85DC,\r
-0xE55C=>0x85F9,\r
-0xE55D=>0x860A,\r
-0xE55E=>0x8613,\r
-0xE55F=>0x860B,\r
-0xE560=>0x85FE,\r
-0xE561=>0x85FA,\r
-0xE562=>0x8606,\r
-0xE563=>0x8622,\r
-0xE564=>0x861A,\r
-0xE565=>0x8630,\r
-0xE566=>0x863F,\r
-0xE567=>0x864D,\r
-0xE568=>0x4E55,\r
-0xE569=>0x8654,\r
-0xE56A=>0x865F,\r
-0xE56B=>0x8667,\r
-0xE56C=>0x8671,\r
-0xE56D=>0x8693,\r
-0xE56E=>0x86A3,\r
-0xE56F=>0x86A9,\r
-0xE570=>0x86AA,\r
-0xE571=>0x868B,\r
-0xE572=>0x868C,\r
-0xE573=>0x86B6,\r
-0xE574=>0x86AF,\r
-0xE575=>0x86C4,\r
-0xE576=>0x86C6,\r
-0xE577=>0x86B0,\r
-0xE578=>0x86C9,\r
-0xE579=>0x8823,\r
-0xE57A=>0x86AB,\r
-0xE57B=>0x86D4,\r
-0xE57C=>0x86DE,\r
-0xE57D=>0x86E9,\r
-0xE57E=>0x86EC,\r
-0xE580=>0x86DF,\r
-0xE581=>0x86DB,\r
-0xE582=>0x86EF,\r
-0xE583=>0x8712,\r
-0xE584=>0x8706,\r
-0xE585=>0x8708,\r
-0xE586=>0x8700,\r
-0xE587=>0x8703,\r
-0xE588=>0x86FB,\r
-0xE589=>0x8711,\r
-0xE58A=>0x8709,\r
-0xE58B=>0x870D,\r
-0xE58C=>0x86F9,\r
-0xE58D=>0x870A,\r
-0xE58E=>0x8734,\r
-0xE58F=>0x873F,\r
-0xE590=>0x8737,\r
-0xE591=>0x873B,\r
-0xE592=>0x8725,\r
-0xE593=>0x8729,\r
-0xE594=>0x871A,\r
-0xE595=>0x8760,\r
-0xE596=>0x875F,\r
-0xE597=>0x8778,\r
-0xE598=>0x874C,\r
-0xE599=>0x874E,\r
-0xE59A=>0x8774,\r
-0xE59B=>0x8757,\r
-0xE59C=>0x8768,\r
-0xE59D=>0x876E,\r
-0xE59E=>0x8759,\r
-0xE59F=>0x8753,\r
-0xE5A0=>0x8763,\r
-0xE5A1=>0x876A,\r
-0xE5A2=>0x8805,\r
-0xE5A3=>0x87A2,\r
-0xE5A4=>0x879F,\r
-0xE5A5=>0x8782,\r
-0xE5A6=>0x87AF,\r
-0xE5A7=>0x87CB,\r
-0xE5A8=>0x87BD,\r
-0xE5A9=>0x87C0,\r
-0xE5AA=>0x87D0,\r
-0xE5AB=>0x96D6,\r
-0xE5AC=>0x87AB,\r
-0xE5AD=>0x87C4,\r
-0xE5AE=>0x87B3,\r
-0xE5AF=>0x87C7,\r
-0xE5B0=>0x87C6,\r
-0xE5B1=>0x87BB,\r
-0xE5B2=>0x87EF,\r
-0xE5B3=>0x87F2,\r
-0xE5B4=>0x87E0,\r
-0xE5B5=>0x880F,\r
-0xE5B6=>0x880D,\r
-0xE5B7=>0x87FE,\r
-0xE5B8=>0x87F6,\r
-0xE5B9=>0x87F7,\r
-0xE5BA=>0x880E,\r
-0xE5BB=>0x87D2,\r
-0xE5BC=>0x8811,\r
-0xE5BD=>0x8816,\r
-0xE5BE=>0x8815,\r
-0xE5BF=>0x8822,\r
-0xE5C0=>0x8821,\r
-0xE5C1=>0x8831,\r
-0xE5C2=>0x8836,\r
-0xE5C3=>0x8839,\r
-0xE5C4=>0x8827,\r
-0xE5C5=>0x883B,\r
-0xE5C6=>0x8844,\r
-0xE5C7=>0x8842,\r
-0xE5C8=>0x8852,\r
-0xE5C9=>0x8859,\r
-0xE5CA=>0x885E,\r
-0xE5CB=>0x8862,\r
-0xE5CC=>0x886B,\r
-0xE5CD=>0x8881,\r
-0xE5CE=>0x887E,\r
-0xE5CF=>0x889E,\r
-0xE5D0=>0x8875,\r
-0xE5D1=>0x887D,\r
-0xE5D2=>0x88B5,\r
-0xE5D3=>0x8872,\r
-0xE5D4=>0x8882,\r
-0xE5D5=>0x8897,\r
-0xE5D6=>0x8892,\r
-0xE5D7=>0x88AE,\r
-0xE5D8=>0x8899,\r
-0xE5D9=>0x88A2,\r
-0xE5DA=>0x888D,\r
-0xE5DB=>0x88A4,\r
-0xE5DC=>0x88B0,\r
-0xE5DD=>0x88BF,\r
-0xE5DE=>0x88B1,\r
-0xE5DF=>0x88C3,\r
-0xE5E0=>0x88C4,\r
-0xE5E1=>0x88D4,\r
-0xE5E2=>0x88D8,\r
-0xE5E3=>0x88D9,\r
-0xE5E4=>0x88DD,\r
-0xE5E5=>0x88F9,\r
-0xE5E6=>0x8902,\r
-0xE5E7=>0x88FC,\r
-0xE5E8=>0x88F4,\r
-0xE5E9=>0x88E8,\r
-0xE5EA=>0x88F2,\r
-0xE5EB=>0x8904,\r
-0xE5EC=>0x890C,\r
-0xE5ED=>0x890A,\r
-0xE5EE=>0x8913,\r
-0xE5EF=>0x8943,\r
-0xE5F0=>0x891E,\r
-0xE5F1=>0x8925,\r
-0xE5F2=>0x892A,\r
-0xE5F3=>0x892B,\r
-0xE5F4=>0x8941,\r
-0xE5F5=>0x8944,\r
-0xE5F6=>0x893B,\r
-0xE5F7=>0x8936,\r
-0xE5F8=>0x8938,\r
-0xE5F9=>0x894C,\r
-0xE5FA=>0x891D,\r
-0xE5FB=>0x8960,\r
-0xE5FC=>0x895E,\r
-0xE640=>0x8966,\r
-0xE641=>0x8964,\r
-0xE642=>0x896D,\r
-0xE643=>0x896A,\r
-0xE644=>0x896F,\r
-0xE645=>0x8974,\r
-0xE646=>0x8977,\r
-0xE647=>0x897E,\r
-0xE648=>0x8983,\r
-0xE649=>0x8988,\r
-0xE64A=>0x898A,\r
-0xE64B=>0x8993,\r
-0xE64C=>0x8998,\r
-0xE64D=>0x89A1,\r
-0xE64E=>0x89A9,\r
-0xE64F=>0x89A6,\r
-0xE650=>0x89AC,\r
-0xE651=>0x89AF,\r
-0xE652=>0x89B2,\r
-0xE653=>0x89BA,\r
-0xE654=>0x89BD,\r
-0xE655=>0x89BF,\r
-0xE656=>0x89C0,\r
-0xE657=>0x89DA,\r
-0xE658=>0x89DC,\r
-0xE659=>0x89DD,\r
-0xE65A=>0x89E7,\r
-0xE65B=>0x89F4,\r
-0xE65C=>0x89F8,\r
-0xE65D=>0x8A03,\r
-0xE65E=>0x8A16,\r
-0xE65F=>0x8A10,\r
-0xE660=>0x8A0C,\r
-0xE661=>0x8A1B,\r
-0xE662=>0x8A1D,\r
-0xE663=>0x8A25,\r
-0xE664=>0x8A36,\r
-0xE665=>0x8A41,\r
-0xE666=>0x8A5B,\r
-0xE667=>0x8A52,\r
-0xE668=>0x8A46,\r
-0xE669=>0x8A48,\r
-0xE66A=>0x8A7C,\r
-0xE66B=>0x8A6D,\r
-0xE66C=>0x8A6C,\r
-0xE66D=>0x8A62,\r
-0xE66E=>0x8A85,\r
-0xE66F=>0x8A82,\r
-0xE670=>0x8A84,\r
-0xE671=>0x8AA8,\r
-0xE672=>0x8AA1,\r
-0xE673=>0x8A91,\r
-0xE674=>0x8AA5,\r
-0xE675=>0x8AA6,\r
-0xE676=>0x8A9A,\r
-0xE677=>0x8AA3,\r
-0xE678=>0x8AC4,\r
-0xE679=>0x8ACD,\r
-0xE67A=>0x8AC2,\r
-0xE67B=>0x8ADA,\r
-0xE67C=>0x8AEB,\r
-0xE67D=>0x8AF3,\r
-0xE67E=>0x8AE7,\r
-0xE680=>0x8AE4,\r
-0xE681=>0x8AF1,\r
-0xE682=>0x8B14,\r
-0xE683=>0x8AE0,\r
-0xE684=>0x8AE2,\r
-0xE685=>0x8AF7,\r
-0xE686=>0x8ADE,\r
-0xE687=>0x8ADB,\r
-0xE688=>0x8B0C,\r
-0xE689=>0x8B07,\r
-0xE68A=>0x8B1A,\r
-0xE68B=>0x8AE1,\r
-0xE68C=>0x8B16,\r
-0xE68D=>0x8B10,\r
-0xE68E=>0x8B17,\r
-0xE68F=>0x8B20,\r
-0xE690=>0x8B33,\r
-0xE691=>0x97AB,\r
-0xE692=>0x8B26,\r
-0xE693=>0x8B2B,\r
-0xE694=>0x8B3E,\r
-0xE695=>0x8B28,\r
-0xE696=>0x8B41,\r
-0xE697=>0x8B4C,\r
-0xE698=>0x8B4F,\r
-0xE699=>0x8B4E,\r
-0xE69A=>0x8B49,\r
-0xE69B=>0x8B56,\r
-0xE69C=>0x8B5B,\r
-0xE69D=>0x8B5A,\r
-0xE69E=>0x8B6B,\r
-0xE69F=>0x8B5F,\r
-0xE6A0=>0x8B6C,\r
-0xE6A1=>0x8B6F,\r
-0xE6A2=>0x8B74,\r
-0xE6A3=>0x8B7D,\r
-0xE6A4=>0x8B80,\r
-0xE6A5=>0x8B8C,\r
-0xE6A6=>0x8B8E,\r
-0xE6A7=>0x8B92,\r
-0xE6A8=>0x8B93,\r
-0xE6A9=>0x8B96,\r
-0xE6AA=>0x8B99,\r
-0xE6AB=>0x8B9A,\r
-0xE6AC=>0x8C3A,\r
-0xE6AD=>0x8C41,\r
-0xE6AE=>0x8C3F,\r
-0xE6AF=>0x8C48,\r
-0xE6B0=>0x8C4C,\r
-0xE6B1=>0x8C4E,\r
-0xE6B2=>0x8C50,\r
-0xE6B3=>0x8C55,\r
-0xE6B4=>0x8C62,\r
-0xE6B5=>0x8C6C,\r
-0xE6B6=>0x8C78,\r
-0xE6B7=>0x8C7A,\r
-0xE6B8=>0x8C82,\r
-0xE6B9=>0x8C89,\r
-0xE6BA=>0x8C85,\r
-0xE6BB=>0x8C8A,\r
-0xE6BC=>0x8C8D,\r
-0xE6BD=>0x8C8E,\r
-0xE6BE=>0x8C94,\r
-0xE6BF=>0x8C7C,\r
-0xE6C0=>0x8C98,\r
-0xE6C1=>0x621D,\r
-0xE6C2=>0x8CAD,\r
-0xE6C3=>0x8CAA,\r
-0xE6C4=>0x8CBD,\r
-0xE6C5=>0x8CB2,\r
-0xE6C6=>0x8CB3,\r
-0xE6C7=>0x8CAE,\r
-0xE6C8=>0x8CB6,\r
-0xE6C9=>0x8CC8,\r
-0xE6CA=>0x8CC1,\r
-0xE6CB=>0x8CE4,\r
-0xE6CC=>0x8CE3,\r
-0xE6CD=>0x8CDA,\r
-0xE6CE=>0x8CFD,\r
-0xE6CF=>0x8CFA,\r
-0xE6D0=>0x8CFB,\r
-0xE6D1=>0x8D04,\r
-0xE6D2=>0x8D05,\r
-0xE6D3=>0x8D0A,\r
-0xE6D4=>0x8D07,\r
-0xE6D5=>0x8D0F,\r
-0xE6D6=>0x8D0D,\r
-0xE6D7=>0x8D10,\r
-0xE6D8=>0x9F4E,\r
-0xE6D9=>0x8D13,\r
-0xE6DA=>0x8CCD,\r
-0xE6DB=>0x8D14,\r
-0xE6DC=>0x8D16,\r
-0xE6DD=>0x8D67,\r
-0xE6DE=>0x8D6D,\r
-0xE6DF=>0x8D71,\r
-0xE6E0=>0x8D73,\r
-0xE6E1=>0x8D81,\r
-0xE6E2=>0x8D99,\r
-0xE6E3=>0x8DC2,\r
-0xE6E4=>0x8DBE,\r
-0xE6E5=>0x8DBA,\r
-0xE6E6=>0x8DCF,\r
-0xE6E7=>0x8DDA,\r
-0xE6E8=>0x8DD6,\r
-0xE6E9=>0x8DCC,\r
-0xE6EA=>0x8DDB,\r
-0xE6EB=>0x8DCB,\r
-0xE6EC=>0x8DEA,\r
-0xE6ED=>0x8DEB,\r
-0xE6EE=>0x8DDF,\r
-0xE6EF=>0x8DE3,\r
-0xE6F0=>0x8DFC,\r
-0xE6F1=>0x8E08,\r
-0xE6F2=>0x8E09,\r
-0xE6F3=>0x8DFF,\r
-0xE6F4=>0x8E1D,\r
-0xE6F5=>0x8E1E,\r
-0xE6F6=>0x8E10,\r
-0xE6F7=>0x8E1F,\r
-0xE6F8=>0x8E42,\r
-0xE6F9=>0x8E35,\r
-0xE6FA=>0x8E30,\r
-0xE6FB=>0x8E34,\r
-0xE6FC=>0x8E4A,\r
-0xE740=>0x8E47,\r
-0xE741=>0x8E49,\r
-0xE742=>0x8E4C,\r
-0xE743=>0x8E50,\r
-0xE744=>0x8E48,\r
-0xE745=>0x8E59,\r
-0xE746=>0x8E64,\r
-0xE747=>0x8E60,\r
-0xE748=>0x8E2A,\r
-0xE749=>0x8E63,\r
-0xE74A=>0x8E55,\r
-0xE74B=>0x8E76,\r
-0xE74C=>0x8E72,\r
-0xE74D=>0x8E7C,\r
-0xE74E=>0x8E81,\r
-0xE74F=>0x8E87,\r
-0xE750=>0x8E85,\r
-0xE751=>0x8E84,\r
-0xE752=>0x8E8B,\r
-0xE753=>0x8E8A,\r
-0xE754=>0x8E93,\r
-0xE755=>0x8E91,\r
-0xE756=>0x8E94,\r
-0xE757=>0x8E99,\r
-0xE758=>0x8EAA,\r
-0xE759=>0x8EA1,\r
-0xE75A=>0x8EAC,\r
-0xE75B=>0x8EB0,\r
-0xE75C=>0x8EC6,\r
-0xE75D=>0x8EB1,\r
-0xE75E=>0x8EBE,\r
-0xE75F=>0x8EC5,\r
-0xE760=>0x8EC8,\r
-0xE761=>0x8ECB,\r
-0xE762=>0x8EDB,\r
-0xE763=>0x8EE3,\r
-0xE764=>0x8EFC,\r
-0xE765=>0x8EFB,\r
-0xE766=>0x8EEB,\r
-0xE767=>0x8EFE,\r
-0xE768=>0x8F0A,\r
-0xE769=>0x8F05,\r
-0xE76A=>0x8F15,\r
-0xE76B=>0x8F12,\r
-0xE76C=>0x8F19,\r
-0xE76D=>0x8F13,\r
-0xE76E=>0x8F1C,\r
-0xE76F=>0x8F1F,\r
-0xE770=>0x8F1B,\r
-0xE771=>0x8F0C,\r
-0xE772=>0x8F26,\r
-0xE773=>0x8F33,\r
-0xE774=>0x8F3B,\r
-0xE775=>0x8F39,\r
-0xE776=>0x8F45,\r
-0xE777=>0x8F42,\r
-0xE778=>0x8F3E,\r
-0xE779=>0x8F4C,\r
-0xE77A=>0x8F49,\r
-0xE77B=>0x8F46,\r
-0xE77C=>0x8F4E,\r
-0xE77D=>0x8F57,\r
-0xE77E=>0x8F5C,\r
-0xE780=>0x8F62,\r
-0xE781=>0x8F63,\r
-0xE782=>0x8F64,\r
-0xE783=>0x8F9C,\r
-0xE784=>0x8F9F,\r
-0xE785=>0x8FA3,\r
-0xE786=>0x8FAD,\r
-0xE787=>0x8FAF,\r
-0xE788=>0x8FB7,\r
-0xE789=>0x8FDA,\r
-0xE78A=>0x8FE5,\r
-0xE78B=>0x8FE2,\r
-0xE78C=>0x8FEA,\r
-0xE78D=>0x8FEF,\r
-0xE78E=>0x9087,\r
-0xE78F=>0x8FF4,\r
-0xE790=>0x9005,\r
-0xE791=>0x8FF9,\r
-0xE792=>0x8FFA,\r
-0xE793=>0x9011,\r
-0xE794=>0x9015,\r
-0xE795=>0x9021,\r
-0xE796=>0x900D,\r
-0xE797=>0x901E,\r
-0xE798=>0x9016,\r
-0xE799=>0x900B,\r
-0xE79A=>0x9027,\r
-0xE79B=>0x9036,\r
-0xE79C=>0x9035,\r
-0xE79D=>0x9039,\r
-0xE79E=>0x8FF8,\r
-0xE79F=>0x904F,\r
-0xE7A0=>0x9050,\r
-0xE7A1=>0x9051,\r
-0xE7A2=>0x9052,\r
-0xE7A3=>0x900E,\r
-0xE7A4=>0x9049,\r
-0xE7A5=>0x903E,\r
-0xE7A6=>0x9056,\r
-0xE7A7=>0x9058,\r
-0xE7A8=>0x905E,\r
-0xE7A9=>0x9068,\r
-0xE7AA=>0x906F,\r
-0xE7AB=>0x9076,\r
-0xE7AC=>0x96A8,\r
-0xE7AD=>0x9072,\r
-0xE7AE=>0x9082,\r
-0xE7AF=>0x907D,\r
-0xE7B0=>0x9081,\r
-0xE7B1=>0x9080,\r
-0xE7B2=>0x908A,\r
-0xE7B3=>0x9089,\r
-0xE7B4=>0x908F,\r
-0xE7B5=>0x90A8,\r
-0xE7B6=>0x90AF,\r
-0xE7B7=>0x90B1,\r
-0xE7B8=>0x90B5,\r
-0xE7B9=>0x90E2,\r
-0xE7BA=>0x90E4,\r
-0xE7BB=>0x6248,\r
-0xE7BC=>0x90DB,\r
-0xE7BD=>0x9102,\r
-0xE7BE=>0x9112,\r
-0xE7BF=>0x9119,\r
-0xE7C0=>0x9132,\r
-0xE7C1=>0x9130,\r
-0xE7C2=>0x914A,\r
-0xE7C3=>0x9156,\r
-0xE7C4=>0x9158,\r
-0xE7C5=>0x9163,\r
-0xE7C6=>0x9165,\r
-0xE7C7=>0x9169,\r
-0xE7C8=>0x9173,\r
-0xE7C9=>0x9172,\r
-0xE7CA=>0x918B,\r
-0xE7CB=>0x9189,\r
-0xE7CC=>0x9182,\r
-0xE7CD=>0x91A2,\r
-0xE7CE=>0x91AB,\r
-0xE7CF=>0x91AF,\r
-0xE7D0=>0x91AA,\r
-0xE7D1=>0x91B5,\r
-0xE7D2=>0x91B4,\r
-0xE7D3=>0x91BA,\r
-0xE7D4=>0x91C0,\r
-0xE7D5=>0x91C1,\r
-0xE7D6=>0x91C9,\r
-0xE7D7=>0x91CB,\r
-0xE7D8=>0x91D0,\r
-0xE7D9=>0x91D6,\r
-0xE7DA=>0x91DF,\r
-0xE7DB=>0x91E1,\r
-0xE7DC=>0x91DB,\r
-0xE7DD=>0x91FC,\r
-0xE7DE=>0x91F5,\r
-0xE7DF=>0x91F6,\r
-0xE7E0=>0x921E,\r
-0xE7E1=>0x91FF,\r
-0xE7E2=>0x9214,\r
-0xE7E3=>0x922C,\r
-0xE7E4=>0x9215,\r
-0xE7E5=>0x9211,\r
-0xE7E6=>0x925E,\r
-0xE7E7=>0x9257,\r
-0xE7E8=>0x9245,\r
-0xE7E9=>0x9249,\r
-0xE7EA=>0x9264,\r
-0xE7EB=>0x9248,\r
-0xE7EC=>0x9295,\r
-0xE7ED=>0x923F,\r
-0xE7EE=>0x924B,\r
-0xE7EF=>0x9250,\r
-0xE7F0=>0x929C,\r
-0xE7F1=>0x9296,\r
-0xE7F2=>0x9293,\r
-0xE7F3=>0x929B,\r
-0xE7F4=>0x925A,\r
-0xE7F5=>0x92CF,\r
-0xE7F6=>0x92B9,\r
-0xE7F7=>0x92B7,\r
-0xE7F8=>0x92E9,\r
-0xE7F9=>0x930F,\r
-0xE7FA=>0x92FA,\r
-0xE7FB=>0x9344,\r
-0xE7FC=>0x932E,\r
-0xE840=>0x9319,\r
-0xE841=>0x9322,\r
-0xE842=>0x931A,\r
-0xE843=>0x9323,\r
-0xE844=>0x933A,\r
-0xE845=>0x9335,\r
-0xE846=>0x933B,\r
-0xE847=>0x935C,\r
-0xE848=>0x9360,\r
-0xE849=>0x937C,\r
-0xE84A=>0x936E,\r
-0xE84B=>0x9356,\r
-0xE84C=>0x93B0,\r
-0xE84D=>0x93AC,\r
-0xE84E=>0x93AD,\r
-0xE84F=>0x9394,\r
-0xE850=>0x93B9,\r
-0xE851=>0x93D6,\r
-0xE852=>0x93D7,\r
-0xE853=>0x93E8,\r
-0xE854=>0x93E5,\r
-0xE855=>0x93D8,\r
-0xE856=>0x93C3,\r
-0xE857=>0x93DD,\r
-0xE858=>0x93D0,\r
-0xE859=>0x93C8,\r
-0xE85A=>0x93E4,\r
-0xE85B=>0x941A,\r
-0xE85C=>0x9414,\r
-0xE85D=>0x9413,\r
-0xE85E=>0x9403,\r
-0xE85F=>0x9407,\r
-0xE860=>0x9410,\r
-0xE861=>0x9436,\r
-0xE862=>0x942B,\r
-0xE863=>0x9435,\r
-0xE864=>0x9421,\r
-0xE865=>0x943A,\r
-0xE866=>0x9441,\r
-0xE867=>0x9452,\r
-0xE868=>0x9444,\r
-0xE869=>0x945B,\r
-0xE86A=>0x9460,\r
-0xE86B=>0x9462,\r
-0xE86C=>0x945E,\r
-0xE86D=>0x946A,\r
-0xE86E=>0x9229,\r
-0xE86F=>0x9470,\r
-0xE870=>0x9475,\r
-0xE871=>0x9477,\r
-0xE872=>0x947D,\r
-0xE873=>0x945A,\r
-0xE874=>0x947C,\r
-0xE875=>0x947E,\r
-0xE876=>0x9481,\r
-0xE877=>0x947F,\r
-0xE878=>0x9582,\r
-0xE879=>0x9587,\r
-0xE87A=>0x958A,\r
-0xE87B=>0x9594,\r
-0xE87C=>0x9596,\r
-0xE87D=>0x9598,\r
-0xE87E=>0x9599,\r
-0xE880=>0x95A0,\r
-0xE881=>0x95A8,\r
-0xE882=>0x95A7,\r
-0xE883=>0x95AD,\r
-0xE884=>0x95BC,\r
-0xE885=>0x95BB,\r
-0xE886=>0x95B9,\r
-0xE887=>0x95BE,\r
-0xE888=>0x95CA,\r
-0xE889=>0x6FF6,\r
-0xE88A=>0x95C3,\r
-0xE88B=>0x95CD,\r
-0xE88C=>0x95CC,\r
-0xE88D=>0x95D5,\r
-0xE88E=>0x95D4,\r
-0xE88F=>0x95D6,\r
-0xE890=>0x95DC,\r
-0xE891=>0x95E1,\r
-0xE892=>0x95E5,\r
-0xE893=>0x95E2,\r
-0xE894=>0x9621,\r
-0xE895=>0x9628,\r
-0xE896=>0x962E,\r
-0xE897=>0x962F,\r
-0xE898=>0x9642,\r
-0xE899=>0x964C,\r
-0xE89A=>0x964F,\r
-0xE89B=>0x964B,\r
-0xE89C=>0x9677,\r
-0xE89D=>0x965C,\r
-0xE89E=>0x965E,\r
-0xE89F=>0x965D,\r
-0xE8A0=>0x965F,\r
-0xE8A1=>0x9666,\r
-0xE8A2=>0x9672,\r
-0xE8A3=>0x966C,\r
-0xE8A4=>0x968D,\r
-0xE8A5=>0x9698,\r
-0xE8A6=>0x9695,\r
-0xE8A7=>0x9697,\r
-0xE8A8=>0x96AA,\r
-0xE8A9=>0x96A7,\r
-0xE8AA=>0x96B1,\r
-0xE8AB=>0x96B2,\r
-0xE8AC=>0x96B0,\r
-0xE8AD=>0x96B4,\r
-0xE8AE=>0x96B6,\r
-0xE8AF=>0x96B8,\r
-0xE8B0=>0x96B9,\r
-0xE8B1=>0x96CE,\r
-0xE8B2=>0x96CB,\r
-0xE8B3=>0x96C9,\r
-0xE8B4=>0x96CD,\r
-0xE8B5=>0x894D,\r
-0xE8B6=>0x96DC,\r
-0xE8B7=>0x970D,\r
-0xE8B8=>0x96D5,\r
-0xE8B9=>0x96F9,\r
-0xE8BA=>0x9704,\r
-0xE8BB=>0x9706,\r
-0xE8BC=>0x9708,\r
-0xE8BD=>0x9713,\r
-0xE8BE=>0x970E,\r
-0xE8BF=>0x9711,\r
-0xE8C0=>0x970F,\r
-0xE8C1=>0x9716,\r
-0xE8C2=>0x9719,\r
-0xE8C3=>0x9724,\r
-0xE8C4=>0x972A,\r
-0xE8C5=>0x9730,\r
-0xE8C6=>0x9739,\r
-0xE8C7=>0x973D,\r
-0xE8C8=>0x973E,\r
-0xE8C9=>0x9744,\r
-0xE8CA=>0x9746,\r
-0xE8CB=>0x9748,\r
-0xE8CC=>0x9742,\r
-0xE8CD=>0x9749,\r
-0xE8CE=>0x975C,\r
-0xE8CF=>0x9760,\r
-0xE8D0=>0x9764,\r
-0xE8D1=>0x9766,\r
-0xE8D2=>0x9768,\r
-0xE8D3=>0x52D2,\r
-0xE8D4=>0x976B,\r
-0xE8D5=>0x9771,\r
-0xE8D6=>0x9779,\r
-0xE8D7=>0x9785,\r
-0xE8D8=>0x977C,\r
-0xE8D9=>0x9781,\r
-0xE8DA=>0x977A,\r
-0xE8DB=>0x9786,\r
-0xE8DC=>0x978B,\r
-0xE8DD=>0x978F,\r
-0xE8DE=>0x9790,\r
-0xE8DF=>0x979C,\r
-0xE8E0=>0x97A8,\r
-0xE8E1=>0x97A6,\r
-0xE8E2=>0x97A3,\r
-0xE8E3=>0x97B3,\r
-0xE8E4=>0x97B4,\r
-0xE8E5=>0x97C3,\r
-0xE8E6=>0x97C6,\r
-0xE8E7=>0x97C8,\r
-0xE8E8=>0x97CB,\r
-0xE8E9=>0x97DC,\r
-0xE8EA=>0x97ED,\r
-0xE8EB=>0x9F4F,\r
-0xE8EC=>0x97F2,\r
-0xE8ED=>0x7ADF,\r
-0xE8EE=>0x97F6,\r
-0xE8EF=>0x97F5,\r
-0xE8F0=>0x980F,\r
-0xE8F1=>0x980C,\r
-0xE8F2=>0x9838,\r
-0xE8F3=>0x9824,\r
-0xE8F4=>0x9821,\r
-0xE8F5=>0x9837,\r
-0xE8F6=>0x983D,\r
-0xE8F7=>0x9846,\r
-0xE8F8=>0x984F,\r
-0xE8F9=>0x984B,\r
-0xE8FA=>0x986B,\r
-0xE8FB=>0x986F,\r
-0xE8FC=>0x9870,\r
-0xE940=>0x9871,\r
-0xE941=>0x9874,\r
-0xE942=>0x9873,\r
-0xE943=>0x98AA,\r
-0xE944=>0x98AF,\r
-0xE945=>0x98B1,\r
-0xE946=>0x98B6,\r
-0xE947=>0x98C4,\r
-0xE948=>0x98C3,\r
-0xE949=>0x98C6,\r
-0xE94A=>0x98E9,\r
-0xE94B=>0x98EB,\r
-0xE94C=>0x9903,\r
-0xE94D=>0x9909,\r
-0xE94E=>0x9912,\r
-0xE94F=>0x9914,\r
-0xE950=>0x9918,\r
-0xE951=>0x9921,\r
-0xE952=>0x991D,\r
-0xE953=>0x991E,\r
-0xE954=>0x9924,\r
-0xE955=>0x9920,\r
-0xE956=>0x992C,\r
-0xE957=>0x992E,\r
-0xE958=>0x993D,\r
-0xE959=>0x993E,\r
-0xE95A=>0x9942,\r
-0xE95B=>0x9949,\r
-0xE95C=>0x9945,\r
-0xE95D=>0x9950,\r
-0xE95E=>0x994B,\r
-0xE95F=>0x9951,\r
-0xE960=>0x9952,\r
-0xE961=>0x994C,\r
-0xE962=>0x9955,\r
-0xE963=>0x9997,\r
-0xE964=>0x9998,\r
-0xE965=>0x99A5,\r
-0xE966=>0x99AD,\r
-0xE967=>0x99AE,\r
-0xE968=>0x99BC,\r
-0xE969=>0x99DF,\r
-0xE96A=>0x99DB,\r
-0xE96B=>0x99DD,\r
-0xE96C=>0x99D8,\r
-0xE96D=>0x99D1,\r
-0xE96E=>0x99ED,\r
-0xE96F=>0x99EE,\r
-0xE970=>0x99F1,\r
-0xE971=>0x99F2,\r
-0xE972=>0x99FB,\r
-0xE973=>0x99F8,\r
-0xE974=>0x9A01,\r
-0xE975=>0x9A0F,\r
-0xE976=>0x9A05,\r
-0xE977=>0x99E2,\r
-0xE978=>0x9A19,\r
-0xE979=>0x9A2B,\r
-0xE97A=>0x9A37,\r
-0xE97B=>0x9A45,\r
-0xE97C=>0x9A42,\r
-0xE97D=>0x9A40,\r
-0xE97E=>0x9A43,\r
-0xE980=>0x9A3E,\r
-0xE981=>0x9A55,\r
-0xE982=>0x9A4D,\r
-0xE983=>0x9A5B,\r
-0xE984=>0x9A57,\r
-0xE985=>0x9A5F,\r
-0xE986=>0x9A62,\r
-0xE987=>0x9A65,\r
-0xE988=>0x9A64,\r
-0xE989=>0x9A69,\r
-0xE98A=>0x9A6B,\r
-0xE98B=>0x9A6A,\r
-0xE98C=>0x9AAD,\r
-0xE98D=>0x9AB0,\r
-0xE98E=>0x9ABC,\r
-0xE98F=>0x9AC0,\r
-0xE990=>0x9ACF,\r
-0xE991=>0x9AD1,\r
-0xE992=>0x9AD3,\r
-0xE993=>0x9AD4,\r
-0xE994=>0x9ADE,\r
-0xE995=>0x9ADF,\r
-0xE996=>0x9AE2,\r
-0xE997=>0x9AE3,\r
-0xE998=>0x9AE6,\r
-0xE999=>0x9AEF,\r
-0xE99A=>0x9AEB,\r
-0xE99B=>0x9AEE,\r
-0xE99C=>0x9AF4,\r
-0xE99D=>0x9AF1,\r
-0xE99E=>0x9AF7,\r
-0xE99F=>0x9AFB,\r
-0xE9A0=>0x9B06,\r
-0xE9A1=>0x9B18,\r
-0xE9A2=>0x9B1A,\r
-0xE9A3=>0x9B1F,\r
-0xE9A4=>0x9B22,\r
-0xE9A5=>0x9B23,\r
-0xE9A6=>0x9B25,\r
-0xE9A7=>0x9B27,\r
-0xE9A8=>0x9B28,\r
-0xE9A9=>0x9B29,\r
-0xE9AA=>0x9B2A,\r
-0xE9AB=>0x9B2E,\r
-0xE9AC=>0x9B2F,\r
-0xE9AD=>0x9B32,\r
-0xE9AE=>0x9B44,\r
-0xE9AF=>0x9B43,\r
-0xE9B0=>0x9B4F,\r
-0xE9B1=>0x9B4D,\r
-0xE9B2=>0x9B4E,\r
-0xE9B3=>0x9B51,\r
-0xE9B4=>0x9B58,\r
-0xE9B5=>0x9B74,\r
-0xE9B6=>0x9B93,\r
-0xE9B7=>0x9B83,\r
-0xE9B8=>0x9B91,\r
-0xE9B9=>0x9B96,\r
-0xE9BA=>0x9B97,\r
-0xE9BB=>0x9B9F,\r
-0xE9BC=>0x9BA0,\r
-0xE9BD=>0x9BA8,\r
-0xE9BE=>0x9BB4,\r
-0xE9BF=>0x9BC0,\r
-0xE9C0=>0x9BCA,\r
-0xE9C1=>0x9BB9,\r
-0xE9C2=>0x9BC6,\r
-0xE9C3=>0x9BCF,\r
-0xE9C4=>0x9BD1,\r
-0xE9C5=>0x9BD2,\r
-0xE9C6=>0x9BE3,\r
-0xE9C7=>0x9BE2,\r
-0xE9C8=>0x9BE4,\r
-0xE9C9=>0x9BD4,\r
-0xE9CA=>0x9BE1,\r
-0xE9CB=>0x9C3A,\r
-0xE9CC=>0x9BF2,\r
-0xE9CD=>0x9BF1,\r
-0xE9CE=>0x9BF0,\r
-0xE9CF=>0x9C15,\r
-0xE9D0=>0x9C14,\r
-0xE9D1=>0x9C09,\r
-0xE9D2=>0x9C13,\r
-0xE9D3=>0x9C0C,\r
-0xE9D4=>0x9C06,\r
-0xE9D5=>0x9C08,\r
-0xE9D6=>0x9C12,\r
-0xE9D7=>0x9C0A,\r
-0xE9D8=>0x9C04,\r
-0xE9D9=>0x9C2E,\r
-0xE9DA=>0x9C1B,\r
-0xE9DB=>0x9C25,\r
-0xE9DC=>0x9C24,\r
-0xE9DD=>0x9C21,\r
-0xE9DE=>0x9C30,\r
-0xE9DF=>0x9C47,\r
-0xE9E0=>0x9C32,\r
-0xE9E1=>0x9C46,\r
-0xE9E2=>0x9C3E,\r
-0xE9E3=>0x9C5A,\r
-0xE9E4=>0x9C60,\r
-0xE9E5=>0x9C67,\r
-0xE9E6=>0x9C76,\r
-0xE9E7=>0x9C78,\r
-0xE9E8=>0x9CE7,\r
-0xE9E9=>0x9CEC,\r
-0xE9EA=>0x9CF0,\r
-0xE9EB=>0x9D09,\r
-0xE9EC=>0x9D08,\r
-0xE9ED=>0x9CEB,\r
-0xE9EE=>0x9D03,\r
-0xE9EF=>0x9D06,\r
-0xE9F0=>0x9D2A,\r
-0xE9F1=>0x9D26,\r
-0xE9F2=>0x9DAF,\r
-0xE9F3=>0x9D23,\r
-0xE9F4=>0x9D1F,\r
-0xE9F5=>0x9D44,\r
-0xE9F6=>0x9D15,\r
-0xE9F7=>0x9D12,\r
-0xE9F8=>0x9D41,\r
-0xE9F9=>0x9D3F,\r
-0xE9FA=>0x9D3E,\r
-0xE9FB=>0x9D46,\r
-0xE9FC=>0x9D48,\r
-0xEA40=>0x9D5D,\r
-0xEA41=>0x9D5E,\r
-0xEA42=>0x9D64,\r
-0xEA43=>0x9D51,\r
-0xEA44=>0x9D50,\r
-0xEA45=>0x9D59,\r
-0xEA46=>0x9D72,\r
-0xEA47=>0x9D89,\r
-0xEA48=>0x9D87,\r
-0xEA49=>0x9DAB,\r
-0xEA4A=>0x9D6F,\r
-0xEA4B=>0x9D7A,\r
-0xEA4C=>0x9D9A,\r
-0xEA4D=>0x9DA4,\r
-0xEA4E=>0x9DA9,\r
-0xEA4F=>0x9DB2,\r
-0xEA50=>0x9DC4,\r
-0xEA51=>0x9DC1,\r
-0xEA52=>0x9DBB,\r
-0xEA53=>0x9DB8,\r
-0xEA54=>0x9DBA,\r
-0xEA55=>0x9DC6,\r
-0xEA56=>0x9DCF,\r
-0xEA57=>0x9DC2,\r
-0xEA58=>0x9DD9,\r
-0xEA59=>0x9DD3,\r
-0xEA5A=>0x9DF8,\r
-0xEA5B=>0x9DE6,\r
-0xEA5C=>0x9DED,\r
-0xEA5D=>0x9DEF,\r
-0xEA5E=>0x9DFD,\r
-0xEA5F=>0x9E1A,\r
-0xEA60=>0x9E1B,\r
-0xEA61=>0x9E1E,\r
-0xEA62=>0x9E75,\r
-0xEA63=>0x9E79,\r
-0xEA64=>0x9E7D,\r
-0xEA65=>0x9E81,\r
-0xEA66=>0x9E88,\r
-0xEA67=>0x9E8B,\r
-0xEA68=>0x9E8C,\r
-0xEA69=>0x9E92,\r
-0xEA6A=>0x9E95,\r
-0xEA6B=>0x9E91,\r
-0xEA6C=>0x9E9D,\r
-0xEA6D=>0x9EA5,\r
-0xEA6E=>0x9EA9,\r
-0xEA6F=>0x9EB8,\r
-0xEA70=>0x9EAA,\r
-0xEA71=>0x9EAD,\r
-0xEA72=>0x9761,\r
-0xEA73=>0x9ECC,\r
-0xEA74=>0x9ECE,\r
-0xEA75=>0x9ECF,\r
-0xEA76=>0x9ED0,\r
-0xEA77=>0x9ED4,\r
-0xEA78=>0x9EDC,\r
-0xEA79=>0x9EDE,\r
-0xEA7A=>0x9EDD,\r
-0xEA7B=>0x9EE0,\r
-0xEA7C=>0x9EE5,\r
-0xEA7D=>0x9EE8,\r
-0xEA7E=>0x9EEF,\r
-0xEA80=>0x9EF4,\r
-0xEA81=>0x9EF6,\r
-0xEA82=>0x9EF7,\r
-0xEA83=>0x9EF9,\r
-0xEA84=>0x9EFB,\r
-0xEA85=>0x9EFC,\r
-0xEA86=>0x9EFD,\r
-0xEA87=>0x9F07,\r
-0xEA88=>0x9F08,\r
-0xEA89=>0x76B7,\r
-0xEA8A=>0x9F15,\r
-0xEA8B=>0x9F21,\r
-0xEA8C=>0x9F2C,\r
-0xEA8D=>0x9F3E,\r
-0xEA8E=>0x9F4A,\r
-0xEA8F=>0x9F52,\r
-0xEA90=>0x9F54,\r
-0xEA91=>0x9F63,\r
-0xEA92=>0x9F5F,\r
-0xEA93=>0x9F60,\r
-0xEA94=>0x9F61,\r
-0xEA95=>0x9F66,\r
-0xEA96=>0x9F67,\r
-0xEA97=>0x9F6C,\r
-0xEA98=>0x9F6A,\r
-0xEA99=>0x9F77,\r
-0xEA9A=>0x9F72,\r
-0xEA9B=>0x9F76,\r
-0xEA9C=>0x9F95,\r
-0xEA9D=>0x9F9C,\r
-0xEA9E=>0x9FA0,\r
-0xEA9F=>0x582F,\r
-0xEAA0=>0x69C7,\r
-0xEAA1=>0x9059,\r
-0xEAA2=>0x7464,\r
-0xEAA3=>0x51DC,\r
-0xEAA4=>0x7199,\r
-0xED40=>0x7E8A,\r
-0xED41=>0x891C,\r
-0xED42=>0x9348,\r
-0xED43=>0x9288,\r
-0xED44=>0x84DC,\r
-0xED45=>0x4FC9,\r
-0xED46=>0x70BB,\r
-0xED47=>0x6631,\r
-0xED48=>0x68C8,\r
-0xED49=>0x92F9,\r
-0xED4A=>0x66FB,\r
-0xED4B=>0x5F45,\r
-0xED4C=>0x4E28,\r
-0xED4D=>0x4EE1,\r
-0xED4E=>0x4EFC,\r
-0xED4F=>0x4F00,\r
-0xED50=>0x4F03,\r
-0xED51=>0x4F39,\r
-0xED52=>0x4F56,\r
-0xED53=>0x4F92,\r
-0xED54=>0x4F8A,\r
-0xED55=>0x4F9A,\r
-0xED56=>0x4F94,\r
-0xED57=>0x4FCD,\r
-0xED58=>0x5040,\r
-0xED59=>0x5022,\r
-0xED5A=>0x4FFF,\r
-0xED5B=>0x501E,\r
-0xED5C=>0x5046,\r
-0xED5D=>0x5070,\r
-0xED5E=>0x5042,\r
-0xED5F=>0x5094,\r
-0xED60=>0x50F4,\r
-0xED61=>0x50D8,\r
-0xED62=>0x514A,\r
-0xED63=>0x5164,\r
-0xED64=>0x519D,\r
-0xED65=>0x51BE,\r
-0xED66=>0x51EC,\r
-0xED67=>0x5215,\r
-0xED68=>0x529C,\r
-0xED69=>0x52A6,\r
-0xED6A=>0x52C0,\r
-0xED6B=>0x52DB,\r
-0xED6C=>0x5300,\r
-0xED6D=>0x5307,\r
-0xED6E=>0x5324,\r
-0xED6F=>0x5372,\r
-0xED70=>0x5393,\r
-0xED71=>0x53B2,\r
-0xED72=>0x53DD,\r
-0xED73=>0xFA0E,\r
-0xED74=>0x549C,\r
-0xED75=>0x548A,\r
-0xED76=>0x54A9,\r
-0xED77=>0x54FF,\r
-0xED78=>0x5586,\r
-0xED79=>0x5759,\r
-0xED7A=>0x5765,\r
-0xED7B=>0x57AC,\r
-0xED7C=>0x57C8,\r
-0xED7D=>0x57C7,\r
-0xED7E=>0xFA0F,\r
-0xED80=>0xFA10,\r
-0xED81=>0x589E,\r
-0xED82=>0x58B2,\r
-0xED83=>0x590B,\r
-0xED84=>0x5953,\r
-0xED85=>0x595B,\r
-0xED86=>0x595D,\r
-0xED87=>0x5963,\r
-0xED88=>0x59A4,\r
-0xED89=>0x59BA,\r
-0xED8A=>0x5B56,\r
-0xED8B=>0x5BC0,\r
-0xED8C=>0x752F,\r
-0xED8D=>0x5BD8,\r
-0xED8E=>0x5BEC,\r
-0xED8F=>0x5C1E,\r
-0xED90=>0x5CA6,\r
-0xED91=>0x5CBA,\r
-0xED92=>0x5CF5,\r
-0xED93=>0x5D27,\r
-0xED94=>0x5D53,\r
-0xED95=>0xFA11,\r
-0xED96=>0x5D42,\r
-0xED97=>0x5D6D,\r
-0xED98=>0x5DB8,\r
-0xED99=>0x5DB9,\r
-0xED9A=>0x5DD0,\r
-0xED9B=>0x5F21,\r
-0xED9C=>0x5F34,\r
-0xED9D=>0x5F67,\r
-0xED9E=>0x5FB7,\r
-0xED9F=>0x5FDE,\r
-0xEDA0=>0x605D,\r
-0xEDA1=>0x6085,\r
-0xEDA2=>0x608A,\r
-0xEDA3=>0x60DE,\r
-0xEDA4=>0x60D5,\r
-0xEDA5=>0x6120,\r
-0xEDA6=>0x60F2,\r
-0xEDA7=>0x6111,\r
-0xEDA8=>0x6137,\r
-0xEDA9=>0x6130,\r
-0xEDAA=>0x6198,\r
-0xEDAB=>0x6213,\r
-0xEDAC=>0x62A6,\r
-0xEDAD=>0x63F5,\r
-0xEDAE=>0x6460,\r
-0xEDAF=>0x649D,\r
-0xEDB0=>0x64CE,\r
-0xEDB1=>0x654E,\r
-0xEDB2=>0x6600,\r
-0xEDB3=>0x6615,\r
-0xEDB4=>0x663B,\r
-0xEDB5=>0x6609,\r
-0xEDB6=>0x662E,\r
-0xEDB7=>0x661E,\r
-0xEDB8=>0x6624,\r
-0xEDB9=>0x6665,\r
-0xEDBA=>0x6657,\r
-0xEDBB=>0x6659,\r
-0xEDBC=>0xFA12,\r
-0xEDBD=>0x6673,\r
-0xEDBE=>0x6699,\r
-0xEDBF=>0x66A0,\r
-0xEDC0=>0x66B2,\r
-0xEDC1=>0x66BF,\r
-0xEDC2=>0x66FA,\r
-0xEDC3=>0x670E,\r
-0xEDC4=>0xF929,\r
-0xEDC5=>0x6766,\r
-0xEDC6=>0x67BB,\r
-0xEDC7=>0x6852,\r
-0xEDC8=>0x67C0,\r
-0xEDC9=>0x6801,\r
-0xEDCA=>0x6844,\r
-0xEDCB=>0x68CF,\r
-0xEDCC=>0xFA13,\r
-0xEDCD=>0x6968,\r
-0xEDCE=>0xFA14,\r
-0xEDCF=>0x6998,\r
-0xEDD0=>0x69E2,\r
-0xEDD1=>0x6A30,\r
-0xEDD2=>0x6A6B,\r
-0xEDD3=>0x6A46,\r
-0xEDD4=>0x6A73,\r
-0xEDD5=>0x6A7E,\r
-0xEDD6=>0x6AE2,\r
-0xEDD7=>0x6AE4,\r
-0xEDD8=>0x6BD6,\r
-0xEDD9=>0x6C3F,\r
-0xEDDA=>0x6C5C,\r
-0xEDDB=>0x6C86,\r
-0xEDDC=>0x6C6F,\r
-0xEDDD=>0x6CDA,\r
-0xEDDE=>0x6D04,\r
-0xEDDF=>0x6D87,\r
-0xEDE0=>0x6D6F,\r
-0xEDE1=>0x6D96,\r
-0xEDE2=>0x6DAC,\r
-0xEDE3=>0x6DCF,\r
-0xEDE4=>0x6DF8,\r
-0xEDE5=>0x6DF2,\r
-0xEDE6=>0x6DFC,\r
-0xEDE7=>0x6E39,\r
-0xEDE8=>0x6E5C,\r
-0xEDE9=>0x6E27,\r
-0xEDEA=>0x6E3C,\r
-0xEDEB=>0x6EBF,\r
-0xEDEC=>0x6F88,\r
-0xEDED=>0x6FB5,\r
-0xEDEE=>0x6FF5,\r
-0xEDEF=>0x7005,\r
-0xEDF0=>0x7007,\r
-0xEDF1=>0x7028,\r
-0xEDF2=>0x7085,\r
-0xEDF3=>0x70AB,\r
-0xEDF4=>0x710F,\r
-0xEDF5=>0x7104,\r
-0xEDF6=>0x715C,\r
-0xEDF7=>0x7146,\r
-0xEDF8=>0x7147,\r
-0xEDF9=>0xFA15,\r
-0xEDFA=>0x71C1,\r
-0xEDFB=>0x71FE,\r
-0xEDFC=>0x72B1,\r
-0xEE40=>0x72BE,\r
-0xEE41=>0x7324,\r
-0xEE42=>0xFA16,\r
-0xEE43=>0x7377,\r
-0xEE44=>0x73BD,\r
-0xEE45=>0x73C9,\r
-0xEE46=>0x73D6,\r
-0xEE47=>0x73E3,\r
-0xEE48=>0x73D2,\r
-0xEE49=>0x7407,\r
-0xEE4A=>0x73F5,\r
-0xEE4B=>0x7426,\r
-0xEE4C=>0x742A,\r
-0xEE4D=>0x7429,\r
-0xEE4E=>0x742E,\r
-0xEE4F=>0x7462,\r
-0xEE50=>0x7489,\r
-0xEE51=>0x749F,\r
-0xEE52=>0x7501,\r
-0xEE53=>0x756F,\r
-0xEE54=>0x7682,\r
-0xEE55=>0x769C,\r
-0xEE56=>0x769E,\r
-0xEE57=>0x769B,\r
-0xEE58=>0x76A6,\r
-0xEE59=>0xFA17,\r
-0xEE5A=>0x7746,\r
-0xEE5B=>0x52AF,\r
-0xEE5C=>0x7821,\r
-0xEE5D=>0x784E,\r
-0xEE5E=>0x7864,\r
-0xEE5F=>0x787A,\r
-0xEE60=>0x7930,\r
-0xEE61=>0xFA18,\r
-0xEE62=>0xFA19,\r
-0xEE63=>0xFA1A,\r
-0xEE64=>0x7994,\r
-0xEE65=>0xFA1B,\r
-0xEE66=>0x799B,\r
-0xEE67=>0x7AD1,\r
-0xEE68=>0x7AE7,\r
-0xEE69=>0xFA1C,\r
-0xEE6A=>0x7AEB,\r
-0xEE6B=>0x7B9E,\r
-0xEE6C=>0xFA1D,\r
-0xEE6D=>0x7D48,\r
-0xEE6E=>0x7D5C,\r
-0xEE6F=>0x7DB7,\r
-0xEE70=>0x7DA0,\r
-0xEE71=>0x7DD6,\r
-0xEE72=>0x7E52,\r
-0xEE73=>0x7F47,\r
-0xEE74=>0x7FA1,\r
-0xEE75=>0xFA1E,\r
-0xEE76=>0x8301,\r
-0xEE77=>0x8362,\r
-0xEE78=>0x837F,\r
-0xEE79=>0x83C7,\r
-0xEE7A=>0x83F6,\r
-0xEE7B=>0x8448,\r
-0xEE7C=>0x84B4,\r
-0xEE7D=>0x8553,\r
-0xEE7E=>0x8559,\r
-0xEE80=>0x856B,\r
-0xEE81=>0xFA1F,\r
-0xEE82=>0x85B0,\r
-0xEE83=>0xFA20,\r
-0xEE84=>0xFA21,\r
-0xEE85=>0x8807,\r
-0xEE86=>0x88F5,\r
-0xEE87=>0x8A12,\r
-0xEE88=>0x8A37,\r
-0xEE89=>0x8A79,\r
-0xEE8A=>0x8AA7,\r
-0xEE8B=>0x8ABE,\r
-0xEE8C=>0x8ADF,\r
-0xEE8D=>0xFA22,\r
-0xEE8E=>0x8AF6,\r
-0xEE8F=>0x8B53,\r
-0xEE90=>0x8B7F,\r
-0xEE91=>0x8CF0,\r
-0xEE92=>0x8CF4,\r
-0xEE93=>0x8D12,\r
-0xEE94=>0x8D76,\r
-0xEE95=>0xFA23,\r
-0xEE96=>0x8ECF,\r
-0xEE97=>0xFA24,\r
-0xEE98=>0xFA25,\r
-0xEE99=>0x9067,\r
-0xEE9A=>0x90DE,\r
-0xEE9B=>0xFA26,\r
-0xEE9C=>0x9115,\r
-0xEE9D=>0x9127,\r
-0xEE9E=>0x91DA,\r
-0xEE9F=>0x91D7,\r
-0xEEA0=>0x91DE,\r
-0xEEA1=>0x91ED,\r
-0xEEA2=>0x91EE,\r
-0xEEA3=>0x91E4,\r
-0xEEA4=>0x91E5,\r
-0xEEA5=>0x9206,\r
-0xEEA6=>0x9210,\r
-0xEEA7=>0x920A,\r
-0xEEA8=>0x923A,\r
-0xEEA9=>0x9240,\r
-0xEEAA=>0x923C,\r
-0xEEAB=>0x924E,\r
-0xEEAC=>0x9259,\r
-0xEEAD=>0x9251,\r
-0xEEAE=>0x9239,\r
-0xEEAF=>0x9267,\r
-0xEEB0=>0x92A7,\r
-0xEEB1=>0x9277,\r
-0xEEB2=>0x9278,\r
-0xEEB3=>0x92E7,\r
-0xEEB4=>0x92D7,\r
-0xEEB5=>0x92D9,\r
-0xEEB6=>0x92D0,\r
-0xEEB7=>0xFA27,\r
-0xEEB8=>0x92D5,\r
-0xEEB9=>0x92E0,\r
-0xEEBA=>0x92D3,\r
-0xEEBB=>0x9325,\r
-0xEEBC=>0x9321,\r
-0xEEBD=>0x92FB,\r
-0xEEBE=>0xFA28,\r
-0xEEBF=>0x931E,\r
-0xEEC0=>0x92FF,\r
-0xEEC1=>0x931D,\r
-0xEEC2=>0x9302,\r
-0xEEC3=>0x9370,\r
-0xEEC4=>0x9357,\r
-0xEEC5=>0x93A4,\r
-0xEEC6=>0x93C6,\r
-0xEEC7=>0x93DE,\r
-0xEEC8=>0x93F8,\r
-0xEEC9=>0x9431,\r
-0xEECA=>0x9445,\r
-0xEECB=>0x9448,\r
-0xEECC=>0x9592,\r
-0xEECD=>0xF9DC,\r
-0xEECE=>0xFA29,\r
-0xEECF=>0x969D,\r
-0xEED0=>0x96AF,\r
-0xEED1=>0x9733,\r
-0xEED2=>0x973B,\r
-0xEED3=>0x9743,\r
-0xEED4=>0x974D,\r
-0xEED5=>0x974F,\r
-0xEED6=>0x9751,\r
-0xEED7=>0x9755,\r
-0xEED8=>0x9857,\r
-0xEED9=>0x9865,\r
-0xEEDA=>0xFA2A,\r
-0xEEDB=>0xFA2B,\r
-0xEEDC=>0x9927,\r
-0xEEDD=>0xFA2C,\r
-0xEEDE=>0x999E,\r
-0xEEDF=>0x9A4E,\r
-0xEEE0=>0x9AD9,\r
-0xEEE1=>0x9ADC,\r
-0xEEE2=>0x9B75,\r
-0xEEE3=>0x9B72,\r
-0xEEE4=>0x9B8F,\r
-0xEEE5=>0x9BB1,\r
-0xEEE6=>0x9BBB,\r
-0xEEE7=>0x9C00,\r
-0xEEE8=>0x9D70,\r
-0xEEE9=>0x9D6B,\r
-0xEEEA=>0xFA2D,\r
-0xEEEB=>0x9E19,\r
-0xEEEC=>0x9ED1,\r
-0xEEEF=>0x2170,\r
-0xEEF0=>0x2171,\r
-0xEEF1=>0x2172,\r
-0xEEF2=>0x2173,\r
-0xEEF3=>0x2174,\r
-0xEEF4=>0x2175,\r
-0xEEF5=>0x2176,\r
-0xEEF6=>0x2177,\r
-0xEEF7=>0x2178,\r
-0xEEF8=>0x2179,\r
-0xEEF9=>0xFFE2,\r
-0xEEFA=>0xFFE4,\r
-0xEEFB=>0xFF07,\r
-0xEEFC=>0xFF02,\r
-0xF040=>0xE000,\r
-0xF041=>0xE001,\r
-0xF042=>0xE002,\r
-0xF043=>0xE003,\r
-0xF044=>0xE004,\r
-0xF045=>0xE005,\r
-0xF046=>0xE006,\r
-0xF047=>0xE007,\r
-0xF048=>0xE008,\r
-0xF049=>0xE009,\r
-0xF04A=>0xE00A,\r
-0xF04B=>0xE00B,\r
-0xF04C=>0xE00C,\r
-0xF04D=>0xE00D,\r
-0xF04E=>0xE00E,\r
-0xF04F=>0xE00F,\r
-0xF050=>0xE010,\r
-0xF051=>0xE011,\r
-0xF052=>0xE012,\r
-0xF053=>0xE013,\r
-0xF054=>0xE014,\r
-0xF055=>0xE015,\r
-0xF056=>0xE016,\r
-0xF057=>0xE017,\r
-0xF058=>0xE018,\r
-0xF059=>0xE019,\r
-0xF05A=>0xE01A,\r
-0xF05B=>0xE01B,\r
-0xF05C=>0xE01C,\r
-0xF05D=>0xE01D,\r
-0xF05E=>0xE01E,\r
-0xF05F=>0xE01F,\r
-0xF060=>0xE020,\r
-0xF061=>0xE021,\r
-0xF062=>0xE022,\r
-0xF063=>0xE023,\r
-0xF064=>0xE024,\r
-0xF065=>0xE025,\r
-0xF066=>0xE026,\r
-0xF067=>0xE027,\r
-0xF068=>0xE028,\r
-0xF069=>0xE029,\r
-0xF06A=>0xE02A,\r
-0xF06B=>0xE02B,\r
-0xF06C=>0xE02C,\r
-0xF06D=>0xE02D,\r
-0xF06E=>0xE02E,\r
-0xF06F=>0xE02F,\r
-0xF070=>0xE030,\r
-0xF071=>0xE031,\r
-0xF072=>0xE032,\r
-0xF073=>0xE033,\r
-0xF074=>0xE034,\r
-0xF075=>0xE035,\r
-0xF076=>0xE036,\r
-0xF077=>0xE037,\r
-0xF078=>0xE038,\r
-0xF079=>0xE039,\r
-0xF07A=>0xE03A,\r
-0xF07B=>0xE03B,\r
-0xF07C=>0xE03C,\r
-0xF07D=>0xE03D,\r
-0xF07E=>0xE03E,\r
-0xF080=>0xE03F,\r
-0xF081=>0xE040,\r
-0xF082=>0xE041,\r
-0xF083=>0xE042,\r
-0xF084=>0xE043,\r
-0xF085=>0xE044,\r
-0xF086=>0xE045,\r
-0xF087=>0xE046,\r
-0xF088=>0xE047,\r
-0xF089=>0xE048,\r
-0xF08A=>0xE049,\r
-0xF08B=>0xE04A,\r
-0xF08C=>0xE04B,\r
-0xF08D=>0xE04C,\r
-0xF08E=>0xE04D,\r
-0xF08F=>0xE04E,\r
-0xF090=>0xE04F,\r
-0xF091=>0xE050,\r
-0xF092=>0xE051,\r
-0xF093=>0xE052,\r
-0xF094=>0xE053,\r
-0xF095=>0xE054,\r
-0xF096=>0xE055,\r
-0xF097=>0xE056,\r
-0xF098=>0xE057,\r
-0xF099=>0xE058,\r
-0xF09A=>0xE059,\r
-0xF09B=>0xE05A,\r
-0xF09C=>0xE05B,\r
-0xF09D=>0xE05C,\r
-0xF09E=>0xE05D,\r
-0xF09F=>0xE05E,\r
-0xF0A0=>0xE05F,\r
-0xF0A1=>0xE060,\r
-0xF0A2=>0xE061,\r
-0xF0A3=>0xE062,\r
-0xF0A4=>0xE063,\r
-0xF0A5=>0xE064,\r
-0xF0A6=>0xE065,\r
-0xF0A7=>0xE066,\r
-0xF0A8=>0xE067,\r
-0xF0A9=>0xE068,\r
-0xF0AA=>0xE069,\r
-0xF0AB=>0xE06A,\r
-0xF0AC=>0xE06B,\r
-0xF0AD=>0xE06C,\r
-0xF0AE=>0xE06D,\r
-0xF0AF=>0xE06E,\r
-0xF0B0=>0xE06F,\r
-0xF0B1=>0xE070,\r
-0xF0B2=>0xE071,\r
-0xF0B3=>0xE072,\r
-0xF0B4=>0xE073,\r
-0xF0B5=>0xE074,\r
-0xF0B6=>0xE075,\r
-0xF0B7=>0xE076,\r
-0xF0B8=>0xE077,\r
-0xF0B9=>0xE078,\r
-0xF0BA=>0xE079,\r
-0xF0BB=>0xE07A,\r
-0xF0BC=>0xE07B,\r
-0xF0BD=>0xE07C,\r
-0xF0BE=>0xE07D,\r
-0xF0BF=>0xE07E,\r
-0xF0C0=>0xE07F,\r
-0xF0C1=>0xE080,\r
-0xF0C2=>0xE081,\r
-0xF0C3=>0xE082,\r
-0xF0C4=>0xE083,\r
-0xF0C5=>0xE084,\r
-0xF0C6=>0xE085,\r
-0xF0C7=>0xE086,\r
-0xF0C8=>0xE087,\r
-0xF0C9=>0xE088,\r
-0xF0CA=>0xE089,\r
-0xF0CB=>0xE08A,\r
-0xF0CC=>0xE08B,\r
-0xF0CD=>0xE08C,\r
-0xF0CE=>0xE08D,\r
-0xF0CF=>0xE08E,\r
-0xF0D0=>0xE08F,\r
-0xF0D1=>0xE090,\r
-0xF0D2=>0xE091,\r
-0xF0D3=>0xE092,\r
-0xF0D4=>0xE093,\r
-0xF0D5=>0xE094,\r
-0xF0D6=>0xE095,\r
-0xF0D7=>0xE096,\r
-0xF0D8=>0xE097,\r
-0xF0D9=>0xE098,\r
-0xF0DA=>0xE099,\r
-0xF0DB=>0xE09A,\r
-0xF0DC=>0xE09B,\r
-0xF0DD=>0xE09C,\r
-0xF0DE=>0xE09D,\r
-0xF0DF=>0xE09E,\r
-0xF0E0=>0xE09F,\r
-0xF0E1=>0xE0A0,\r
-0xF0E2=>0xE0A1,\r
-0xF0E3=>0xE0A2,\r
-0xF0E4=>0xE0A3,\r
-0xF0E5=>0xE0A4,\r
-0xF0E6=>0xE0A5,\r
-0xF0E7=>0xE0A6,\r
-0xF0E8=>0xE0A7,\r
-0xF0E9=>0xE0A8,\r
-0xF0EA=>0xE0A9,\r
-0xF0EB=>0xE0AA,\r
-0xF0EC=>0xE0AB,\r
-0xF0ED=>0xE0AC,\r
-0xF0EE=>0xE0AD,\r
-0xF0EF=>0xE0AE,\r
-0xF0F0=>0xE0AF,\r
-0xF0F1=>0xE0B0,\r
-0xF0F2=>0xE0B1,\r
-0xF0F3=>0xE0B2,\r
-0xF0F4=>0xE0B3,\r
-0xF0F5=>0xE0B4,\r
-0xF0F6=>0xE0B5,\r
-0xF0F7=>0xE0B6,\r
-0xF0F8=>0xE0B7,\r
-0xF0F9=>0xE0B8,\r
-0xF0FA=>0xE0B9,\r
-0xF0FB=>0xE0BA,\r
-0xF0FC=>0xE0BB,\r
-0xF140=>0xE0BC,\r
-0xF141=>0xE0BD,\r
-0xF142=>0xE0BE,\r
-0xF143=>0xE0BF,\r
-0xF144=>0xE0C0,\r
-0xF145=>0xE0C1,\r
-0xF146=>0xE0C2,\r
-0xF147=>0xE0C3,\r
-0xF148=>0xE0C4,\r
-0xF149=>0xE0C5,\r
-0xF14A=>0xE0C6,\r
-0xF14B=>0xE0C7,\r
-0xF14C=>0xE0C8,\r
-0xF14D=>0xE0C9,\r
-0xF14E=>0xE0CA,\r
-0xF14F=>0xE0CB,\r
-0xF150=>0xE0CC,\r
-0xF151=>0xE0CD,\r
-0xF152=>0xE0CE,\r
-0xF153=>0xE0CF,\r
-0xF154=>0xE0D0,\r
-0xF155=>0xE0D1,\r
-0xF156=>0xE0D2,\r
-0xF157=>0xE0D3,\r
-0xF158=>0xE0D4,\r
-0xF159=>0xE0D5,\r
-0xF15A=>0xE0D6,\r
-0xF15B=>0xE0D7,\r
-0xF15C=>0xE0D8,\r
-0xF15D=>0xE0D9,\r
-0xF15E=>0xE0DA,\r
-0xF15F=>0xE0DB,\r
-0xF160=>0xE0DC,\r
-0xF161=>0xE0DD,\r
-0xF162=>0xE0DE,\r
-0xF163=>0xE0DF,\r
-0xF164=>0xE0E0,\r
-0xF165=>0xE0E1,\r
-0xF166=>0xE0E2,\r
-0xF167=>0xE0E3,\r
-0xF168=>0xE0E4,\r
-0xF169=>0xE0E5,\r
-0xF16A=>0xE0E6,\r
-0xF16B=>0xE0E7,\r
-0xF16C=>0xE0E8,\r
-0xF16D=>0xE0E9,\r
-0xF16E=>0xE0EA,\r
-0xF16F=>0xE0EB,\r
-0xF170=>0xE0EC,\r
-0xF171=>0xE0ED,\r
-0xF172=>0xE0EE,\r
-0xF173=>0xE0EF,\r
-0xF174=>0xE0F0,\r
-0xF175=>0xE0F1,\r
-0xF176=>0xE0F2,\r
-0xF177=>0xE0F3,\r
-0xF178=>0xE0F4,\r
-0xF179=>0xE0F5,\r
-0xF17A=>0xE0F6,\r
-0xF17B=>0xE0F7,\r
-0xF17C=>0xE0F8,\r
-0xF17D=>0xE0F9,\r
-0xF17E=>0xE0FA,\r
-0xF180=>0xE0FB,\r
-0xF181=>0xE0FC,\r
-0xF182=>0xE0FD,\r
-0xF183=>0xE0FE,\r
-0xF184=>0xE0FF,\r
-0xF185=>0xE100,\r
-0xF186=>0xE101,\r
-0xF187=>0xE102,\r
-0xF188=>0xE103,\r
-0xF189=>0xE104,\r
-0xF18A=>0xE105,\r
-0xF18B=>0xE106,\r
-0xF18C=>0xE107,\r
-0xF18D=>0xE108,\r
-0xF18E=>0xE109,\r
-0xF18F=>0xE10A,\r
-0xF190=>0xE10B,\r
-0xF191=>0xE10C,\r
-0xF192=>0xE10D,\r
-0xF193=>0xE10E,\r
-0xF194=>0xE10F,\r
-0xF195=>0xE110,\r
-0xF196=>0xE111,\r
-0xF197=>0xE112,\r
-0xF198=>0xE113,\r
-0xF199=>0xE114,\r
-0xF19A=>0xE115,\r
-0xF19B=>0xE116,\r
-0xF19C=>0xE117,\r
-0xF19D=>0xE118,\r
-0xF19E=>0xE119,\r
-0xF19F=>0xE11A,\r
-0xF1A0=>0xE11B,\r
-0xF1A1=>0xE11C,\r
-0xF1A2=>0xE11D,\r
-0xF1A3=>0xE11E,\r
-0xF1A4=>0xE11F,\r
-0xF1A5=>0xE120,\r
-0xF1A6=>0xE121,\r
-0xF1A7=>0xE122,\r
-0xF1A8=>0xE123,\r
-0xF1A9=>0xE124,\r
-0xF1AA=>0xE125,\r
-0xF1AB=>0xE126,\r
-0xF1AC=>0xE127,\r
-0xF1AD=>0xE128,\r
-0xF1AE=>0xE129,\r
-0xF1AF=>0xE12A,\r
-0xF1B0=>0xE12B,\r
-0xF1B1=>0xE12C,\r
-0xF1B2=>0xE12D,\r
-0xF1B3=>0xE12E,\r
-0xF1B4=>0xE12F,\r
-0xF1B5=>0xE130,\r
-0xF1B6=>0xE131,\r
-0xF1B7=>0xE132,\r
-0xF1B8=>0xE133,\r
-0xF1B9=>0xE134,\r
-0xF1BA=>0xE135,\r
-0xF1BB=>0xE136,\r
-0xF1BC=>0xE137,\r
-0xF1BD=>0xE138,\r
-0xF1BE=>0xE139,\r
-0xF1BF=>0xE13A,\r
-0xF1C0=>0xE13B,\r
-0xF1C1=>0xE13C,\r
-0xF1C2=>0xE13D,\r
-0xF1C3=>0xE13E,\r
-0xF1C4=>0xE13F,\r
-0xF1C5=>0xE140,\r
-0xF1C6=>0xE141,\r
-0xF1C7=>0xE142,\r
-0xF1C8=>0xE143,\r
-0xF1C9=>0xE144,\r
-0xF1CA=>0xE145,\r
-0xF1CB=>0xE146,\r
-0xF1CC=>0xE147,\r
-0xF1CD=>0xE148,\r
-0xF1CE=>0xE149,\r
-0xF1CF=>0xE14A,\r
-0xF1D0=>0xE14B,\r
-0xF1D1=>0xE14C,\r
-0xF1D2=>0xE14D,\r
-0xF1D3=>0xE14E,\r
-0xF1D4=>0xE14F,\r
-0xF1D5=>0xE150,\r
-0xF1D6=>0xE151,\r
-0xF1D7=>0xE152,\r
-0xF1D8=>0xE153,\r
-0xF1D9=>0xE154,\r
-0xF1DA=>0xE155,\r
-0xF1DB=>0xE156,\r
-0xF1DC=>0xE157,\r
-0xF1DD=>0xE158,\r
-0xF1DE=>0xE159,\r
-0xF1DF=>0xE15A,\r
-0xF1E0=>0xE15B,\r
-0xF1E1=>0xE15C,\r
-0xF1E2=>0xE15D,\r
-0xF1E3=>0xE15E,\r
-0xF1E4=>0xE15F,\r
-0xF1E5=>0xE160,\r
-0xF1E6=>0xE161,\r
-0xF1E7=>0xE162,\r
-0xF1E8=>0xE163,\r
-0xF1E9=>0xE164,\r
-0xF1EA=>0xE165,\r
-0xF1EB=>0xE166,\r
-0xF1EC=>0xE167,\r
-0xF1ED=>0xE168,\r
-0xF1EE=>0xE169,\r
-0xF1EF=>0xE16A,\r
-0xF1F0=>0xE16B,\r
-0xF1F1=>0xE16C,\r
-0xF1F2=>0xE16D,\r
-0xF1F3=>0xE16E,\r
-0xF1F4=>0xE16F,\r
-0xF1F5=>0xE170,\r
-0xF1F6=>0xE171,\r
-0xF1F7=>0xE172,\r
-0xF1F8=>0xE173,\r
-0xF1F9=>0xE174,\r
-0xF1FA=>0xE175,\r
-0xF1FB=>0xE176,\r
-0xF1FC=>0xE177,\r
-0xF240=>0xE178,\r
-0xF241=>0xE179,\r
-0xF242=>0xE17A,\r
-0xF243=>0xE17B,\r
-0xF244=>0xE17C,\r
-0xF245=>0xE17D,\r
-0xF246=>0xE17E,\r
-0xF247=>0xE17F,\r
-0xF248=>0xE180,\r
-0xF249=>0xE181,\r
-0xF24A=>0xE182,\r
-0xF24B=>0xE183,\r
-0xF24C=>0xE184,\r
-0xF24D=>0xE185,\r
-0xF24E=>0xE186,\r
-0xF24F=>0xE187,\r
-0xF250=>0xE188,\r
-0xF251=>0xE189,\r
-0xF252=>0xE18A,\r
-0xF253=>0xE18B,\r
-0xF254=>0xE18C,\r
-0xF255=>0xE18D,\r
-0xF256=>0xE18E,\r
-0xF257=>0xE18F,\r
-0xF258=>0xE190,\r
-0xF259=>0xE191,\r
-0xF25A=>0xE192,\r
-0xF25B=>0xE193,\r
-0xF25C=>0xE194,\r
-0xF25D=>0xE195,\r
-0xF25E=>0xE196,\r
-0xF25F=>0xE197,\r
-0xF260=>0xE198,\r
-0xF261=>0xE199,\r
-0xF262=>0xE19A,\r
-0xF263=>0xE19B,\r
-0xF264=>0xE19C,\r
-0xF265=>0xE19D,\r
-0xF266=>0xE19E,\r
-0xF267=>0xE19F,\r
-0xF268=>0xE1A0,\r
-0xF269=>0xE1A1,\r
-0xF26A=>0xE1A2,\r
-0xF26B=>0xE1A3,\r
-0xF26C=>0xE1A4,\r
-0xF26D=>0xE1A5,\r
-0xF26E=>0xE1A6,\r
-0xF26F=>0xE1A7,\r
-0xF270=>0xE1A8,\r
-0xF271=>0xE1A9,\r
-0xF272=>0xE1AA,\r
-0xF273=>0xE1AB,\r
-0xF274=>0xE1AC,\r
-0xF275=>0xE1AD,\r
-0xF276=>0xE1AE,\r
-0xF277=>0xE1AF,\r
-0xF278=>0xE1B0,\r
-0xF279=>0xE1B1,\r
-0xF27A=>0xE1B2,\r
-0xF27B=>0xE1B3,\r
-0xF27C=>0xE1B4,\r
-0xF27D=>0xE1B5,\r
-0xF27E=>0xE1B6,\r
-0xF280=>0xE1B7,\r
-0xF281=>0xE1B8,\r
-0xF282=>0xE1B9,\r
-0xF283=>0xE1BA,\r
-0xF284=>0xE1BB,\r
-0xF285=>0xE1BC,\r
-0xF286=>0xE1BD,\r
-0xF287=>0xE1BE,\r
-0xF288=>0xE1BF,\r
-0xF289=>0xE1C0,\r
-0xF28A=>0xE1C1,\r
-0xF28B=>0xE1C2,\r
-0xF28C=>0xE1C3,\r
-0xF28D=>0xE1C4,\r
-0xF28E=>0xE1C5,\r
-0xF28F=>0xE1C6,\r
-0xF290=>0xE1C7,\r
-0xF291=>0xE1C8,\r
-0xF292=>0xE1C9,\r
-0xF293=>0xE1CA,\r
-0xF294=>0xE1CB,\r
-0xF295=>0xE1CC,\r
-0xF296=>0xE1CD,\r
-0xF297=>0xE1CE,\r
-0xF298=>0xE1CF,\r
-0xF299=>0xE1D0,\r
-0xF29A=>0xE1D1,\r
-0xF29B=>0xE1D2,\r
-0xF29C=>0xE1D3,\r
-0xF29D=>0xE1D4,\r
-0xF29E=>0xE1D5,\r
-0xF29F=>0xE1D6,\r
-0xF2A0=>0xE1D7,\r
-0xF2A1=>0xE1D8,\r
-0xF2A2=>0xE1D9,\r
-0xF2A3=>0xE1DA,\r
-0xF2A4=>0xE1DB,\r
-0xF2A5=>0xE1DC,\r
-0xF2A6=>0xE1DD,\r
-0xF2A7=>0xE1DE,\r
-0xF2A8=>0xE1DF,\r
-0xF2A9=>0xE1E0,\r
-0xF2AA=>0xE1E1,\r
-0xF2AB=>0xE1E2,\r
-0xF2AC=>0xE1E3,\r
-0xF2AD=>0xE1E4,\r
-0xF2AE=>0xE1E5,\r
-0xF2AF=>0xE1E6,\r
-0xF2B0=>0xE1E7,\r
-0xF2B1=>0xE1E8,\r
-0xF2B2=>0xE1E9,\r
-0xF2B3=>0xE1EA,\r
-0xF2B4=>0xE1EB,\r
-0xF2B5=>0xE1EC,\r
-0xF2B6=>0xE1ED,\r
-0xF2B7=>0xE1EE,\r
-0xF2B8=>0xE1EF,\r
-0xF2B9=>0xE1F0,\r
-0xF2BA=>0xE1F1,\r
-0xF2BB=>0xE1F2,\r
-0xF2BC=>0xE1F3,\r
-0xF2BD=>0xE1F4,\r
-0xF2BE=>0xE1F5,\r
-0xF2BF=>0xE1F6,\r
-0xF2C0=>0xE1F7,\r
-0xF2C1=>0xE1F8,\r
-0xF2C2=>0xE1F9,\r
-0xF2C3=>0xE1FA,\r
-0xF2C4=>0xE1FB,\r
-0xF2C5=>0xE1FC,\r
-0xF2C6=>0xE1FD,\r
-0xF2C7=>0xE1FE,\r
-0xF2C8=>0xE1FF,\r
-0xF2C9=>0xE200,\r
-0xF2CA=>0xE201,\r
-0xF2CB=>0xE202,\r
-0xF2CC=>0xE203,\r
-0xF2CD=>0xE204,\r
-0xF2CE=>0xE205,\r
-0xF2CF=>0xE206,\r
-0xF2D0=>0xE207,\r
-0xF2D1=>0xE208,\r
-0xF2D2=>0xE209,\r
-0xF2D3=>0xE20A,\r
-0xF2D4=>0xE20B,\r
-0xF2D5=>0xE20C,\r
-0xF2D6=>0xE20D,\r
-0xF2D7=>0xE20E,\r
-0xF2D8=>0xE20F,\r
-0xF2D9=>0xE210,\r
-0xF2DA=>0xE211,\r
-0xF2DB=>0xE212,\r
-0xF2DC=>0xE213,\r
-0xF2DD=>0xE214,\r
-0xF2DE=>0xE215,\r
-0xF2DF=>0xE216,\r
-0xF2E0=>0xE217,\r
-0xF2E1=>0xE218,\r
-0xF2E2=>0xE219,\r
-0xF2E3=>0xE21A,\r
-0xF2E4=>0xE21B,\r
-0xF2E5=>0xE21C,\r
-0xF2E6=>0xE21D,\r
-0xF2E7=>0xE21E,\r
-0xF2E8=>0xE21F,\r
-0xF2E9=>0xE220,\r
-0xF2EA=>0xE221,\r
-0xF2EB=>0xE222,\r
-0xF2EC=>0xE223,\r
-0xF2ED=>0xE224,\r
-0xF2EE=>0xE225,\r
-0xF2EF=>0xE226,\r
-0xF2F0=>0xE227,\r
-0xF2F1=>0xE228,\r
-0xF2F2=>0xE229,\r
-0xF2F3=>0xE22A,\r
-0xF2F4=>0xE22B,\r
-0xF2F5=>0xE22C,\r
-0xF2F6=>0xE22D,\r
-0xF2F7=>0xE22E,\r
-0xF2F8=>0xE22F,\r
-0xF2F9=>0xE230,\r
-0xF2FA=>0xE231,\r
-0xF2FB=>0xE232,\r
-0xF2FC=>0xE233,\r
-0xF340=>0xE234,\r
-0xF341=>0xE235,\r
-0xF342=>0xE236,\r
-0xF343=>0xE237,\r
-0xF344=>0xE238,\r
-0xF345=>0xE239,\r
-0xF346=>0xE23A,\r
-0xF347=>0xE23B,\r
-0xF348=>0xE23C,\r
-0xF349=>0xE23D,\r
-0xF34A=>0xE23E,\r
-0xF34B=>0xE23F,\r
-0xF34C=>0xE240,\r
-0xF34D=>0xE241,\r
-0xF34E=>0xE242,\r
-0xF34F=>0xE243,\r
-0xF350=>0xE244,\r
-0xF351=>0xE245,\r
-0xF352=>0xE246,\r
-0xF353=>0xE247,\r
-0xF354=>0xE248,\r
-0xF355=>0xE249,\r
-0xF356=>0xE24A,\r
-0xF357=>0xE24B,\r
-0xF358=>0xE24C,\r
-0xF359=>0xE24D,\r
-0xF35A=>0xE24E,\r
-0xF35B=>0xE24F,\r
-0xF35C=>0xE250,\r
-0xF35D=>0xE251,\r
-0xF35E=>0xE252,\r
-0xF35F=>0xE253,\r
-0xF360=>0xE254,\r
-0xF361=>0xE255,\r
-0xF362=>0xE256,\r
-0xF363=>0xE257,\r
-0xF364=>0xE258,\r
-0xF365=>0xE259,\r
-0xF366=>0xE25A,\r
-0xF367=>0xE25B,\r
-0xF368=>0xE25C,\r
-0xF369=>0xE25D,\r
-0xF36A=>0xE25E,\r
-0xF36B=>0xE25F,\r
-0xF36C=>0xE260,\r
-0xF36D=>0xE261,\r
-0xF36E=>0xE262,\r
-0xF36F=>0xE263,\r
-0xF370=>0xE264,\r
-0xF371=>0xE265,\r
-0xF372=>0xE266,\r
-0xF373=>0xE267,\r
-0xF374=>0xE268,\r
-0xF375=>0xE269,\r
-0xF376=>0xE26A,\r
-0xF377=>0xE26B,\r
-0xF378=>0xE26C,\r
-0xF379=>0xE26D,\r
-0xF37A=>0xE26E,\r
-0xF37B=>0xE26F,\r
-0xF37C=>0xE270,\r
-0xF37D=>0xE271,\r
-0xF37E=>0xE272,\r
-0xF380=>0xE273,\r
-0xF381=>0xE274,\r
-0xF382=>0xE275,\r
-0xF383=>0xE276,\r
-0xF384=>0xE277,\r
-0xF385=>0xE278,\r
-0xF386=>0xE279,\r
-0xF387=>0xE27A,\r
-0xF388=>0xE27B,\r
-0xF389=>0xE27C,\r
-0xF38A=>0xE27D,\r
-0xF38B=>0xE27E,\r
-0xF38C=>0xE27F,\r
-0xF38D=>0xE280,\r
-0xF38E=>0xE281,\r
-0xF38F=>0xE282,\r
-0xF390=>0xE283,\r
-0xF391=>0xE284,\r
-0xF392=>0xE285,\r
-0xF393=>0xE286,\r
-0xF394=>0xE287,\r
-0xF395=>0xE288,\r
-0xF396=>0xE289,\r
-0xF397=>0xE28A,\r
-0xF398=>0xE28B,\r
-0xF399=>0xE28C,\r
-0xF39A=>0xE28D,\r
-0xF39B=>0xE28E,\r
-0xF39C=>0xE28F,\r
-0xF39D=>0xE290,\r
-0xF39E=>0xE291,\r
-0xF39F=>0xE292,\r
-0xF3A0=>0xE293,\r
-0xF3A1=>0xE294,\r
-0xF3A2=>0xE295,\r
-0xF3A3=>0xE296,\r
-0xF3A4=>0xE297,\r
-0xF3A5=>0xE298,\r
-0xF3A6=>0xE299,\r
-0xF3A7=>0xE29A,\r
-0xF3A8=>0xE29B,\r
-0xF3A9=>0xE29C,\r
-0xF3AA=>0xE29D,\r
-0xF3AB=>0xE29E,\r
-0xF3AC=>0xE29F,\r
-0xF3AD=>0xE2A0,\r
-0xF3AE=>0xE2A1,\r
-0xF3AF=>0xE2A2,\r
-0xF3B0=>0xE2A3,\r
-0xF3B1=>0xE2A4,\r
-0xF3B2=>0xE2A5,\r
-0xF3B3=>0xE2A6,\r
-0xF3B4=>0xE2A7,\r
-0xF3B5=>0xE2A8,\r
-0xF3B6=>0xE2A9,\r
-0xF3B7=>0xE2AA,\r
-0xF3B8=>0xE2AB,\r
-0xF3B9=>0xE2AC,\r
-0xF3BA=>0xE2AD,\r
-0xF3BB=>0xE2AE,\r
-0xF3BC=>0xE2AF,\r
-0xF3BD=>0xE2B0,\r
-0xF3BE=>0xE2B1,\r
-0xF3BF=>0xE2B2,\r
-0xF3C0=>0xE2B3,\r
-0xF3C1=>0xE2B4,\r
-0xF3C2=>0xE2B5,\r
-0xF3C3=>0xE2B6,\r
-0xF3C4=>0xE2B7,\r
-0xF3C5=>0xE2B8,\r
-0xF3C6=>0xE2B9,\r
-0xF3C7=>0xE2BA,\r
-0xF3C8=>0xE2BB,\r
-0xF3C9=>0xE2BC,\r
-0xF3CA=>0xE2BD,\r
-0xF3CB=>0xE2BE,\r
-0xF3CC=>0xE2BF,\r
-0xF3CD=>0xE2C0,\r
-0xF3CE=>0xE2C1,\r
-0xF3CF=>0xE2C2,\r
-0xF3D0=>0xE2C3,\r
-0xF3D1=>0xE2C4,\r
-0xF3D2=>0xE2C5,\r
-0xF3D3=>0xE2C6,\r
-0xF3D4=>0xE2C7,\r
-0xF3D5=>0xE2C8,\r
-0xF3D6=>0xE2C9,\r
-0xF3D7=>0xE2CA,\r
-0xF3D8=>0xE2CB,\r
-0xF3D9=>0xE2CC,\r
-0xF3DA=>0xE2CD,\r
-0xF3DB=>0xE2CE,\r
-0xF3DC=>0xE2CF,\r
-0xF3DD=>0xE2D0,\r
-0xF3DE=>0xE2D1,\r
-0xF3DF=>0xE2D2,\r
-0xF3E0=>0xE2D3,\r
-0xF3E1=>0xE2D4,\r
-0xF3E2=>0xE2D5,\r
-0xF3E3=>0xE2D6,\r
-0xF3E4=>0xE2D7,\r
-0xF3E5=>0xE2D8,\r
-0xF3E6=>0xE2D9,\r
-0xF3E7=>0xE2DA,\r
-0xF3E8=>0xE2DB,\r
-0xF3E9=>0xE2DC,\r
-0xF3EA=>0xE2DD,\r
-0xF3EB=>0xE2DE,\r
-0xF3EC=>0xE2DF,\r
-0xF3ED=>0xE2E0,\r
-0xF3EE=>0xE2E1,\r
-0xF3EF=>0xE2E2,\r
-0xF3F0=>0xE2E3,\r
-0xF3F1=>0xE2E4,\r
-0xF3F2=>0xE2E5,\r
-0xF3F3=>0xE2E6,\r
-0xF3F4=>0xE2E7,\r
-0xF3F5=>0xE2E8,\r
-0xF3F6=>0xE2E9,\r
-0xF3F7=>0xE2EA,\r
-0xF3F8=>0xE2EB,\r
-0xF3F9=>0xE2EC,\r
-0xF3FA=>0xE2ED,\r
-0xF3FB=>0xE2EE,\r
-0xF3FC=>0xE2EF,\r
-0xF440=>0xE2F0,\r
-0xF441=>0xE2F1,\r
-0xF442=>0xE2F2,\r
-0xF443=>0xE2F3,\r
-0xF444=>0xE2F4,\r
-0xF445=>0xE2F5,\r
-0xF446=>0xE2F6,\r
-0xF447=>0xE2F7,\r
-0xF448=>0xE2F8,\r
-0xF449=>0xE2F9,\r
-0xF44A=>0xE2FA,\r
-0xF44B=>0xE2FB,\r
-0xF44C=>0xE2FC,\r
-0xF44D=>0xE2FD,\r
-0xF44E=>0xE2FE,\r
-0xF44F=>0xE2FF,\r
-0xF450=>0xE300,\r
-0xF451=>0xE301,\r
-0xF452=>0xE302,\r
-0xF453=>0xE303,\r
-0xF454=>0xE304,\r
-0xF455=>0xE305,\r
-0xF456=>0xE306,\r
-0xF457=>0xE307,\r
-0xF458=>0xE308,\r
-0xF459=>0xE309,\r
-0xF45A=>0xE30A,\r
-0xF45B=>0xE30B,\r
-0xF45C=>0xE30C,\r
-0xF45D=>0xE30D,\r
-0xF45E=>0xE30E,\r
-0xF45F=>0xE30F,\r
-0xF460=>0xE310,\r
-0xF461=>0xE311,\r
-0xF462=>0xE312,\r
-0xF463=>0xE313,\r
-0xF464=>0xE314,\r
-0xF465=>0xE315,\r
-0xF466=>0xE316,\r
-0xF467=>0xE317,\r
-0xF468=>0xE318,\r
-0xF469=>0xE319,\r
-0xF46A=>0xE31A,\r
-0xF46B=>0xE31B,\r
-0xF46C=>0xE31C,\r
-0xF46D=>0xE31D,\r
-0xF46E=>0xE31E,\r
-0xF46F=>0xE31F,\r
-0xF470=>0xE320,\r
-0xF471=>0xE321,\r
-0xF472=>0xE322,\r
-0xF473=>0xE323,\r
-0xF474=>0xE324,\r
-0xF475=>0xE325,\r
-0xF476=>0xE326,\r
-0xF477=>0xE327,\r
-0xF478=>0xE328,\r
-0xF479=>0xE329,\r
-0xF47A=>0xE32A,\r
-0xF47B=>0xE32B,\r
-0xF47C=>0xE32C,\r
-0xF47D=>0xE32D,\r
-0xF47E=>0xE32E,\r
-0xF480=>0xE32F,\r
-0xF481=>0xE330,\r
-0xF482=>0xE331,\r
-0xF483=>0xE332,\r
-0xF484=>0xE333,\r
-0xF485=>0xE334,\r
-0xF486=>0xE335,\r
-0xF487=>0xE336,\r
-0xF488=>0xE337,\r
-0xF489=>0xE338,\r
-0xF48A=>0xE339,\r
-0xF48B=>0xE33A,\r
-0xF48C=>0xE33B,\r
-0xF48D=>0xE33C,\r
-0xF48E=>0xE33D,\r
-0xF48F=>0xE33E,\r
-0xF490=>0xE33F,\r
-0xF491=>0xE340,\r
-0xF492=>0xE341,\r
-0xF493=>0xE342,\r
-0xF494=>0xE343,\r
-0xF495=>0xE344,\r
-0xF496=>0xE345,\r
-0xF497=>0xE346,\r
-0xF498=>0xE347,\r
-0xF499=>0xE348,\r
-0xF49A=>0xE349,\r
-0xF49B=>0xE34A,\r
-0xF49C=>0xE34B,\r
-0xF49D=>0xE34C,\r
-0xF49E=>0xE34D,\r
-0xF49F=>0xE34E,\r
-0xF4A0=>0xE34F,\r
-0xF4A1=>0xE350,\r
-0xF4A2=>0xE351,\r
-0xF4A3=>0xE352,\r
-0xF4A4=>0xE353,\r
-0xF4A5=>0xE354,\r
-0xF4A6=>0xE355,\r
-0xF4A7=>0xE356,\r
-0xF4A8=>0xE357,\r
-0xF4A9=>0xE358,\r
-0xF4AA=>0xE359,\r
-0xF4AB=>0xE35A,\r
-0xF4AC=>0xE35B,\r
-0xF4AD=>0xE35C,\r
-0xF4AE=>0xE35D,\r
-0xF4AF=>0xE35E,\r
-0xF4B0=>0xE35F,\r
-0xF4B1=>0xE360,\r
-0xF4B2=>0xE361,\r
-0xF4B3=>0xE362,\r
-0xF4B4=>0xE363,\r
-0xF4B5=>0xE364,\r
-0xF4B6=>0xE365,\r
-0xF4B7=>0xE366,\r
-0xF4B8=>0xE367,\r
-0xF4B9=>0xE368,\r
-0xF4BA=>0xE369,\r
-0xF4BB=>0xE36A,\r
-0xF4BC=>0xE36B,\r
-0xF4BD=>0xE36C,\r
-0xF4BE=>0xE36D,\r
-0xF4BF=>0xE36E,\r
-0xF4C0=>0xE36F,\r
-0xF4C1=>0xE370,\r
-0xF4C2=>0xE371,\r
-0xF4C3=>0xE372,\r
-0xF4C4=>0xE373,\r
-0xF4C5=>0xE374,\r
-0xF4C6=>0xE375,\r
-0xF4C7=>0xE376,\r
-0xF4C8=>0xE377,\r
-0xF4C9=>0xE378,\r
-0xF4CA=>0xE379,\r
-0xF4CB=>0xE37A,\r
-0xF4CC=>0xE37B,\r
-0xF4CD=>0xE37C,\r
-0xF4CE=>0xE37D,\r
-0xF4CF=>0xE37E,\r
-0xF4D0=>0xE37F,\r
-0xF4D1=>0xE380,\r
-0xF4D2=>0xE381,\r
-0xF4D3=>0xE382,\r
-0xF4D4=>0xE383,\r
-0xF4D5=>0xE384,\r
-0xF4D6=>0xE385,\r
-0xF4D7=>0xE386,\r
-0xF4D8=>0xE387,\r
-0xF4D9=>0xE388,\r
-0xF4DA=>0xE389,\r
-0xF4DB=>0xE38A,\r
-0xF4DC=>0xE38B,\r
-0xF4DD=>0xE38C,\r
-0xF4DE=>0xE38D,\r
-0xF4DF=>0xE38E,\r
-0xF4E0=>0xE38F,\r
-0xF4E1=>0xE390,\r
-0xF4E2=>0xE391,\r
-0xF4E3=>0xE392,\r
-0xF4E4=>0xE393,\r
-0xF4E5=>0xE394,\r
-0xF4E6=>0xE395,\r
-0xF4E7=>0xE396,\r
-0xF4E8=>0xE397,\r
-0xF4E9=>0xE398,\r
-0xF4EA=>0xE399,\r
-0xF4EB=>0xE39A,\r
-0xF4EC=>0xE39B,\r
-0xF4ED=>0xE39C,\r
-0xF4EE=>0xE39D,\r
-0xF4EF=>0xE39E,\r
-0xF4F0=>0xE39F,\r
-0xF4F1=>0xE3A0,\r
-0xF4F2=>0xE3A1,\r
-0xF4F3=>0xE3A2,\r
-0xF4F4=>0xE3A3,\r
-0xF4F5=>0xE3A4,\r
-0xF4F6=>0xE3A5,\r
-0xF4F7=>0xE3A6,\r
-0xF4F8=>0xE3A7,\r
-0xF4F9=>0xE3A8,\r
-0xF4FA=>0xE3A9,\r
-0xF4FB=>0xE3AA,\r
-0xF4FC=>0xE3AB,\r
-0xF540=>0xE3AC,\r
-0xF541=>0xE3AD,\r
-0xF542=>0xE3AE,\r
-0xF543=>0xE3AF,\r
-0xF544=>0xE3B0,\r
-0xF545=>0xE3B1,\r
-0xF546=>0xE3B2,\r
-0xF547=>0xE3B3,\r
-0xF548=>0xE3B4,\r
-0xF549=>0xE3B5,\r
-0xF54A=>0xE3B6,\r
-0xF54B=>0xE3B7,\r
-0xF54C=>0xE3B8,\r
-0xF54D=>0xE3B9,\r
-0xF54E=>0xE3BA,\r
-0xF54F=>0xE3BB,\r
-0xF550=>0xE3BC,\r
-0xF551=>0xE3BD,\r
-0xF552=>0xE3BE,\r
-0xF553=>0xE3BF,\r
-0xF554=>0xE3C0,\r
-0xF555=>0xE3C1,\r
-0xF556=>0xE3C2,\r
-0xF557=>0xE3C3,\r
-0xF558=>0xE3C4,\r
-0xF559=>0xE3C5,\r
-0xF55A=>0xE3C6,\r
-0xF55B=>0xE3C7,\r
-0xF55C=>0xE3C8,\r
-0xF55D=>0xE3C9,\r
-0xF55E=>0xE3CA,\r
-0xF55F=>0xE3CB,\r
-0xF560=>0xE3CC,\r
-0xF561=>0xE3CD,\r
-0xF562=>0xE3CE,\r
-0xF563=>0xE3CF,\r
-0xF564=>0xE3D0,\r
-0xF565=>0xE3D1,\r
-0xF566=>0xE3D2,\r
-0xF567=>0xE3D3,\r
-0xF568=>0xE3D4,\r
-0xF569=>0xE3D5,\r
-0xF56A=>0xE3D6,\r
-0xF56B=>0xE3D7,\r
-0xF56C=>0xE3D8,\r
-0xF56D=>0xE3D9,\r
-0xF56E=>0xE3DA,\r
-0xF56F=>0xE3DB,\r
-0xF570=>0xE3DC,\r
-0xF571=>0xE3DD,\r
-0xF572=>0xE3DE,\r
-0xF573=>0xE3DF,\r
-0xF574=>0xE3E0,\r
-0xF575=>0xE3E1,\r
-0xF576=>0xE3E2,\r
-0xF577=>0xE3E3,\r
-0xF578=>0xE3E4,\r
-0xF579=>0xE3E5,\r
-0xF57A=>0xE3E6,\r
-0xF57B=>0xE3E7,\r
-0xF57C=>0xE3E8,\r
-0xF57D=>0xE3E9,\r
-0xF57E=>0xE3EA,\r
-0xF580=>0xE3EB,\r
-0xF581=>0xE3EC,\r
-0xF582=>0xE3ED,\r
-0xF583=>0xE3EE,\r
-0xF584=>0xE3EF,\r
-0xF585=>0xE3F0,\r
-0xF586=>0xE3F1,\r
-0xF587=>0xE3F2,\r
-0xF588=>0xE3F3,\r
-0xF589=>0xE3F4,\r
-0xF58A=>0xE3F5,\r
-0xF58B=>0xE3F6,\r
-0xF58C=>0xE3F7,\r
-0xF58D=>0xE3F8,\r
-0xF58E=>0xE3F9,\r
-0xF58F=>0xE3FA,\r
-0xF590=>0xE3FB,\r
-0xF591=>0xE3FC,\r
-0xF592=>0xE3FD,\r
-0xF593=>0xE3FE,\r
-0xF594=>0xE3FF,\r
-0xF595=>0xE400,\r
-0xF596=>0xE401,\r
-0xF597=>0xE402,\r
-0xF598=>0xE403,\r
-0xF599=>0xE404,\r
-0xF59A=>0xE405,\r
-0xF59B=>0xE406,\r
-0xF59C=>0xE407,\r
-0xF59D=>0xE408,\r
-0xF59E=>0xE409,\r
-0xF59F=>0xE40A,\r
-0xF5A0=>0xE40B,\r
-0xF5A1=>0xE40C,\r
-0xF5A2=>0xE40D,\r
-0xF5A3=>0xE40E,\r
-0xF5A4=>0xE40F,\r
-0xF5A5=>0xE410,\r
-0xF5A6=>0xE411,\r
-0xF5A7=>0xE412,\r
-0xF5A8=>0xE413,\r
-0xF5A9=>0xE414,\r
-0xF5AA=>0xE415,\r
-0xF5AB=>0xE416,\r
-0xF5AC=>0xE417,\r
-0xF5AD=>0xE418,\r
-0xF5AE=>0xE419,\r
-0xF5AF=>0xE41A,\r
-0xF5B0=>0xE41B,\r
-0xF5B1=>0xE41C,\r
-0xF5B2=>0xE41D,\r
-0xF5B3=>0xE41E,\r
-0xF5B4=>0xE41F,\r
-0xF5B5=>0xE420,\r
-0xF5B6=>0xE421,\r
-0xF5B7=>0xE422,\r
-0xF5B8=>0xE423,\r
-0xF5B9=>0xE424,\r
-0xF5BA=>0xE425,\r
-0xF5BB=>0xE426,\r
-0xF5BC=>0xE427,\r
-0xF5BD=>0xE428,\r
-0xF5BE=>0xE429,\r
-0xF5BF=>0xE42A,\r
-0xF5C0=>0xE42B,\r
-0xF5C1=>0xE42C,\r
-0xF5C2=>0xE42D,\r
-0xF5C3=>0xE42E,\r
-0xF5C4=>0xE42F,\r
-0xF5C5=>0xE430,\r
-0xF5C6=>0xE431,\r
-0xF5C7=>0xE432,\r
-0xF5C8=>0xE433,\r
-0xF5C9=>0xE434,\r
-0xF5CA=>0xE435,\r
-0xF5CB=>0xE436,\r
-0xF5CC=>0xE437,\r
-0xF5CD=>0xE438,\r
-0xF5CE=>0xE439,\r
-0xF5CF=>0xE43A,\r
-0xF5D0=>0xE43B,\r
-0xF5D1=>0xE43C,\r
-0xF5D2=>0xE43D,\r
-0xF5D3=>0xE43E,\r
-0xF5D4=>0xE43F,\r
-0xF5D5=>0xE440,\r
-0xF5D6=>0xE441,\r
-0xF5D7=>0xE442,\r
-0xF5D8=>0xE443,\r
-0xF5D9=>0xE444,\r
-0xF5DA=>0xE445,\r
-0xF5DB=>0xE446,\r
-0xF5DC=>0xE447,\r
-0xF5DD=>0xE448,\r
-0xF5DE=>0xE449,\r
-0xF5DF=>0xE44A,\r
-0xF5E0=>0xE44B,\r
-0xF5E1=>0xE44C,\r
-0xF5E2=>0xE44D,\r
-0xF5E3=>0xE44E,\r
-0xF5E4=>0xE44F,\r
-0xF5E5=>0xE450,\r
-0xF5E6=>0xE451,\r
-0xF5E7=>0xE452,\r
-0xF5E8=>0xE453,\r
-0xF5E9=>0xE454,\r
-0xF5EA=>0xE455,\r
-0xF5EB=>0xE456,\r
-0xF5EC=>0xE457,\r
-0xF5ED=>0xE458,\r
-0xF5EE=>0xE459,\r
-0xF5EF=>0xE45A,\r
-0xF5F0=>0xE45B,\r
-0xF5F1=>0xE45C,\r
-0xF5F2=>0xE45D,\r
-0xF5F3=>0xE45E,\r
-0xF5F4=>0xE45F,\r
-0xF5F5=>0xE460,\r
-0xF5F6=>0xE461,\r
-0xF5F7=>0xE462,\r
-0xF5F8=>0xE463,\r
-0xF5F9=>0xE464,\r
-0xF5FA=>0xE465,\r
-0xF5FB=>0xE466,\r
-0xF5FC=>0xE467,\r
-0xF640=>0xE468,\r
-0xF641=>0xE469,\r
-0xF642=>0xE46A,\r
-0xF643=>0xE46B,\r
-0xF644=>0xE46C,\r
-0xF645=>0xE46D,\r
-0xF646=>0xE46E,\r
-0xF647=>0xE46F,\r
-0xF648=>0xE470,\r
-0xF649=>0xE471,\r
-0xF64A=>0xE472,\r
-0xF64B=>0xE473,\r
-0xF64C=>0xE474,\r
-0xF64D=>0xE475,\r
-0xF64E=>0xE476,\r
-0xF64F=>0xE477,\r
-0xF650=>0xE478,\r
-0xF651=>0xE479,\r
-0xF652=>0xE47A,\r
-0xF653=>0xE47B,\r
-0xF654=>0xE47C,\r
-0xF655=>0xE47D,\r
-0xF656=>0xE47E,\r
-0xF657=>0xE47F,\r
-0xF658=>0xE480,\r
-0xF659=>0xE481,\r
-0xF65A=>0xE482,\r
-0xF65B=>0xE483,\r
-0xF65C=>0xE484,\r
-0xF65D=>0xE485,\r
-0xF65E=>0xE486,\r
-0xF65F=>0xE487,\r
-0xF660=>0xE488,\r
-0xF661=>0xE489,\r
-0xF662=>0xE48A,\r
-0xF663=>0xE48B,\r
-0xF664=>0xE48C,\r
-0xF665=>0xE48D,\r
-0xF666=>0xE48E,\r
-0xF667=>0xE48F,\r
-0xF668=>0xE490,\r
-0xF669=>0xE491,\r
-0xF66A=>0xE492,\r
-0xF66B=>0xE493,\r
-0xF66C=>0xE494,\r
-0xF66D=>0xE495,\r
-0xF66E=>0xE496,\r
-0xF66F=>0xE497,\r
-0xF670=>0xE498,\r
-0xF671=>0xE499,\r
-0xF672=>0xE49A,\r
-0xF673=>0xE49B,\r
-0xF674=>0xE49C,\r
-0xF675=>0xE49D,\r
-0xF676=>0xE49E,\r
-0xF677=>0xE49F,\r
-0xF678=>0xE4A0,\r
-0xF679=>0xE4A1,\r
-0xF67A=>0xE4A2,\r
-0xF67B=>0xE4A3,\r
-0xF67C=>0xE4A4,\r
-0xF67D=>0xE4A5,\r
-0xF67E=>0xE4A6,\r
-0xF680=>0xE4A7,\r
-0xF681=>0xE4A8,\r
-0xF682=>0xE4A9,\r
-0xF683=>0xE4AA,\r
-0xF684=>0xE4AB,\r
-0xF685=>0xE4AC,\r
-0xF686=>0xE4AD,\r
-0xF687=>0xE4AE,\r
-0xF688=>0xE4AF,\r
-0xF689=>0xE4B0,\r
-0xF68A=>0xE4B1,\r
-0xF68B=>0xE4B2,\r
-0xF68C=>0xE4B3,\r
-0xF68D=>0xE4B4,\r
-0xF68E=>0xE4B5,\r
-0xF68F=>0xE4B6,\r
-0xF690=>0xE4B7,\r
-0xF691=>0xE4B8,\r
-0xF692=>0xE4B9,\r
-0xF693=>0xE4BA,\r
-0xF694=>0xE4BB,\r
-0xF695=>0xE4BC,\r
-0xF696=>0xE4BD,\r
-0xF697=>0xE4BE,\r
-0xF698=>0xE4BF,\r
-0xF699=>0xE4C0,\r
-0xF69A=>0xE4C1,\r
-0xF69B=>0xE4C2,\r
-0xF69C=>0xE4C3,\r
-0xF69D=>0xE4C4,\r
-0xF69E=>0xE4C5,\r
-0xF69F=>0xE4C6,\r
-0xF6A0=>0xE4C7,\r
-0xF6A1=>0xE4C8,\r
-0xF6A2=>0xE4C9,\r
-0xF6A3=>0xE4CA,\r
-0xF6A4=>0xE4CB,\r
-0xF6A5=>0xE4CC,\r
-0xF6A6=>0xE4CD,\r
-0xF6A7=>0xE4CE,\r
-0xF6A8=>0xE4CF,\r
-0xF6A9=>0xE4D0,\r
-0xF6AA=>0xE4D1,\r
-0xF6AB=>0xE4D2,\r
-0xF6AC=>0xE4D3,\r
-0xF6AD=>0xE4D4,\r
-0xF6AE=>0xE4D5,\r
-0xF6AF=>0xE4D6,\r
-0xF6B0=>0xE4D7,\r
-0xF6B1=>0xE4D8,\r
-0xF6B2=>0xE4D9,\r
-0xF6B3=>0xE4DA,\r
-0xF6B4=>0xE4DB,\r
-0xF6B5=>0xE4DC,\r
-0xF6B6=>0xE4DD,\r
-0xF6B7=>0xE4DE,\r
-0xF6B8=>0xE4DF,\r
-0xF6B9=>0xE4E0,\r
-0xF6BA=>0xE4E1,\r
-0xF6BB=>0xE4E2,\r
-0xF6BC=>0xE4E3,\r
-0xF6BD=>0xE4E4,\r
-0xF6BE=>0xE4E5,\r
-0xF6BF=>0xE4E6,\r
-0xF6C0=>0xE4E7,\r
-0xF6C1=>0xE4E8,\r
-0xF6C2=>0xE4E9,\r
-0xF6C3=>0xE4EA,\r
-0xF6C4=>0xE4EB,\r
-0xF6C5=>0xE4EC,\r
-0xF6C6=>0xE4ED,\r
-0xF6C7=>0xE4EE,\r
-0xF6C8=>0xE4EF,\r
-0xF6C9=>0xE4F0,\r
-0xF6CA=>0xE4F1,\r
-0xF6CB=>0xE4F2,\r
-0xF6CC=>0xE4F3,\r
-0xF6CD=>0xE4F4,\r
-0xF6CE=>0xE4F5,\r
-0xF6CF=>0xE4F6,\r
-0xF6D0=>0xE4F7,\r
-0xF6D1=>0xE4F8,\r
-0xF6D2=>0xE4F9,\r
-0xF6D3=>0xE4FA,\r
-0xF6D4=>0xE4FB,\r
-0xF6D5=>0xE4FC,\r
-0xF6D6=>0xE4FD,\r
-0xF6D7=>0xE4FE,\r
-0xF6D8=>0xE4FF,\r
-0xF6D9=>0xE500,\r
-0xF6DA=>0xE501,\r
-0xF6DB=>0xE502,\r
-0xF6DC=>0xE503,\r
-0xF6DD=>0xE504,\r
-0xF6DE=>0xE505,\r
-0xF6DF=>0xE506,\r
-0xF6E0=>0xE507,\r
-0xF6E1=>0xE508,\r
-0xF6E2=>0xE509,\r
-0xF6E3=>0xE50A,\r
-0xF6E4=>0xE50B,\r
-0xF6E5=>0xE50C,\r
-0xF6E6=>0xE50D,\r
-0xF6E7=>0xE50E,\r
-0xF6E8=>0xE50F,\r
-0xF6E9=>0xE510,\r
-0xF6EA=>0xE511,\r
-0xF6EB=>0xE512,\r
-0xF6EC=>0xE513,\r
-0xF6ED=>0xE514,\r
-0xF6EE=>0xE515,\r
-0xF6EF=>0xE516,\r
-0xF6F0=>0xE517,\r
-0xF6F1=>0xE518,\r
-0xF6F2=>0xE519,\r
-0xF6F3=>0xE51A,\r
-0xF6F4=>0xE51B,\r
-0xF6F5=>0xE51C,\r
-0xF6F6=>0xE51D,\r
-0xF6F7=>0xE51E,\r
-0xF6F8=>0xE51F,\r
-0xF6F9=>0xE520,\r
-0xF6FA=>0xE521,\r
-0xF6FB=>0xE522,\r
-0xF6FC=>0xE523,\r
-0xF740=>0xE524,\r
-0xF741=>0xE525,\r
-0xF742=>0xE526,\r
-0xF743=>0xE527,\r
-0xF744=>0xE528,\r
-0xF745=>0xE529,\r
-0xF746=>0xE52A,\r
-0xF747=>0xE52B,\r
-0xF748=>0xE52C,\r
-0xF749=>0xE52D,\r
-0xF74A=>0xE52E,\r
-0xF74B=>0xE52F,\r
-0xF74C=>0xE530,\r
-0xF74D=>0xE531,\r
-0xF74E=>0xE532,\r
-0xF74F=>0xE533,\r
-0xF750=>0xE534,\r
-0xF751=>0xE535,\r
-0xF752=>0xE536,\r
-0xF753=>0xE537,\r
-0xF754=>0xE538,\r
-0xF755=>0xE539,\r
-0xF756=>0xE53A,\r
-0xF757=>0xE53B,\r
-0xF758=>0xE53C,\r
-0xF759=>0xE53D,\r
-0xF75A=>0xE53E,\r
-0xF75B=>0xE53F,\r
-0xF75C=>0xE540,\r
-0xF75D=>0xE541,\r
-0xF75E=>0xE542,\r
-0xF75F=>0xE543,\r
-0xF760=>0xE544,\r
-0xF761=>0xE545,\r
-0xF762=>0xE546,\r
-0xF763=>0xE547,\r
-0xF764=>0xE548,\r
-0xF765=>0xE549,\r
-0xF766=>0xE54A,\r
-0xF767=>0xE54B,\r
-0xF768=>0xE54C,\r
-0xF769=>0xE54D,\r
-0xF76A=>0xE54E,\r
-0xF76B=>0xE54F,\r
-0xF76C=>0xE550,\r
-0xF76D=>0xE551,\r
-0xF76E=>0xE552,\r
-0xF76F=>0xE553,\r
-0xF770=>0xE554,\r
-0xF771=>0xE555,\r
-0xF772=>0xE556,\r
-0xF773=>0xE557,\r
-0xF774=>0xE558,\r
-0xF775=>0xE559,\r
-0xF776=>0xE55A,\r
-0xF777=>0xE55B,\r
-0xF778=>0xE55C,\r
-0xF779=>0xE55D,\r
-0xF77A=>0xE55E,\r
-0xF77B=>0xE55F,\r
-0xF77C=>0xE560,\r
-0xF77D=>0xE561,\r
-0xF77E=>0xE562,\r
-0xF780=>0xE563,\r
-0xF781=>0xE564,\r
-0xF782=>0xE565,\r
-0xF783=>0xE566,\r
-0xF784=>0xE567,\r
-0xF785=>0xE568,\r
-0xF786=>0xE569,\r
-0xF787=>0xE56A,\r
-0xF788=>0xE56B,\r
-0xF789=>0xE56C,\r
-0xF78A=>0xE56D,\r
-0xF78B=>0xE56E,\r
-0xF78C=>0xE56F,\r
-0xF78D=>0xE570,\r
-0xF78E=>0xE571,\r
-0xF78F=>0xE572,\r
-0xF790=>0xE573,\r
-0xF791=>0xE574,\r
-0xF792=>0xE575,\r
-0xF793=>0xE576,\r
-0xF794=>0xE577,\r
-0xF795=>0xE578,\r
-0xF796=>0xE579,\r
-0xF797=>0xE57A,\r
-0xF798=>0xE57B,\r
-0xF799=>0xE57C,\r
-0xF79A=>0xE57D,\r
-0xF79B=>0xE57E,\r
-0xF79C=>0xE57F,\r
-0xF79D=>0xE580,\r
-0xF79E=>0xE581,\r
-0xF79F=>0xE582,\r
-0xF7A0=>0xE583,\r
-0xF7A1=>0xE584,\r
-0xF7A2=>0xE585,\r
-0xF7A3=>0xE586,\r
-0xF7A4=>0xE587,\r
-0xF7A5=>0xE588,\r
-0xF7A6=>0xE589,\r
-0xF7A7=>0xE58A,\r
-0xF7A8=>0xE58B,\r
-0xF7A9=>0xE58C,\r
-0xF7AA=>0xE58D,\r
-0xF7AB=>0xE58E,\r
-0xF7AC=>0xE58F,\r
-0xF7AD=>0xE590,\r
-0xF7AE=>0xE591,\r
-0xF7AF=>0xE592,\r
-0xF7B0=>0xE593,\r
-0xF7B1=>0xE594,\r
-0xF7B2=>0xE595,\r
-0xF7B3=>0xE596,\r
-0xF7B4=>0xE597,\r
-0xF7B5=>0xE598,\r
-0xF7B6=>0xE599,\r
-0xF7B7=>0xE59A,\r
-0xF7B8=>0xE59B,\r
-0xF7B9=>0xE59C,\r
-0xF7BA=>0xE59D,\r
-0xF7BB=>0xE59E,\r
-0xF7BC=>0xE59F,\r
-0xF7BD=>0xE5A0,\r
-0xF7BE=>0xE5A1,\r
-0xF7BF=>0xE5A2,\r
-0xF7C0=>0xE5A3,\r
-0xF7C1=>0xE5A4,\r
-0xF7C2=>0xE5A5,\r
-0xF7C3=>0xE5A6,\r
-0xF7C4=>0xE5A7,\r
-0xF7C5=>0xE5A8,\r
-0xF7C6=>0xE5A9,\r
-0xF7C7=>0xE5AA,\r
-0xF7C8=>0xE5AB,\r
-0xF7C9=>0xE5AC,\r
-0xF7CA=>0xE5AD,\r
-0xF7CB=>0xE5AE,\r
-0xF7CC=>0xE5AF,\r
-0xF7CD=>0xE5B0,\r
-0xF7CE=>0xE5B1,\r
-0xF7CF=>0xE5B2,\r
-0xF7D0=>0xE5B3,\r
-0xF7D1=>0xE5B4,\r
-0xF7D2=>0xE5B5,\r
-0xF7D3=>0xE5B6,\r
-0xF7D4=>0xE5B7,\r
-0xF7D5=>0xE5B8,\r
-0xF7D6=>0xE5B9,\r
-0xF7D7=>0xE5BA,\r
-0xF7D8=>0xE5BB,\r
-0xF7D9=>0xE5BC,\r
-0xF7DA=>0xE5BD,\r
-0xF7DB=>0xE5BE,\r
-0xF7DC=>0xE5BF,\r
-0xF7DD=>0xE5C0,\r
-0xF7DE=>0xE5C1,\r
-0xF7DF=>0xE5C2,\r
-0xF7E0=>0xE5C3,\r
-0xF7E1=>0xE5C4,\r
-0xF7E2=>0xE5C5,\r
-0xF7E3=>0xE5C6,\r
-0xF7E4=>0xE5C7,\r
-0xF7E5=>0xE5C8,\r
-0xF7E6=>0xE5C9,\r
-0xF7E7=>0xE5CA,\r
-0xF7E8=>0xE5CB,\r
-0xF7E9=>0xE5CC,\r
-0xF7EA=>0xE5CD,\r
-0xF7EB=>0xE5CE,\r
-0xF7EC=>0xE5CF,\r
-0xF7ED=>0xE5D0,\r
-0xF7EE=>0xE5D1,\r
-0xF7EF=>0xE5D2,\r
-0xF7F0=>0xE5D3,\r
-0xF7F1=>0xE5D4,\r
-0xF7F2=>0xE5D5,\r
-0xF7F3=>0xE5D6,\r
-0xF7F4=>0xE5D7,\r
-0xF7F5=>0xE5D8,\r
-0xF7F6=>0xE5D9,\r
-0xF7F7=>0xE5DA,\r
-0xF7F8=>0xE5DB,\r
-0xF7F9=>0xE5DC,\r
-0xF7FA=>0xE5DD,\r
-0xF7FB=>0xE5DE,\r
-0xF7FC=>0xE5DF,\r
-0xF840=>0xE5E0,\r
-0xF841=>0xE5E1,\r
-0xF842=>0xE5E2,\r
-0xF843=>0xE5E3,\r
-0xF844=>0xE5E4,\r
-0xF845=>0xE5E5,\r
-0xF846=>0xE5E6,\r
-0xF847=>0xE5E7,\r
-0xF848=>0xE5E8,\r
-0xF849=>0xE5E9,\r
-0xF84A=>0xE5EA,\r
-0xF84B=>0xE5EB,\r
-0xF84C=>0xE5EC,\r
-0xF84D=>0xE5ED,\r
-0xF84E=>0xE5EE,\r
-0xF84F=>0xE5EF,\r
-0xF850=>0xE5F0,\r
-0xF851=>0xE5F1,\r
-0xF852=>0xE5F2,\r
-0xF853=>0xE5F3,\r
-0xF854=>0xE5F4,\r
-0xF855=>0xE5F5,\r
-0xF856=>0xE5F6,\r
-0xF857=>0xE5F7,\r
-0xF858=>0xE5F8,\r
-0xF859=>0xE5F9,\r
-0xF85A=>0xE5FA,\r
-0xF85B=>0xE5FB,\r
-0xF85C=>0xE5FC,\r
-0xF85D=>0xE5FD,\r
-0xF85E=>0xE5FE,\r
-0xF85F=>0xE5FF,\r
-0xF860=>0xE600,\r
-0xF861=>0xE601,\r
-0xF862=>0xE602,\r
-0xF863=>0xE603,\r
-0xF864=>0xE604,\r
-0xF865=>0xE605,\r
-0xF866=>0xE606,\r
-0xF867=>0xE607,\r
-0xF868=>0xE608,\r
-0xF869=>0xE609,\r
-0xF86A=>0xE60A,\r
-0xF86B=>0xE60B,\r
-0xF86C=>0xE60C,\r
-0xF86D=>0xE60D,\r
-0xF86E=>0xE60E,\r
-0xF86F=>0xE60F,\r
-0xF870=>0xE610,\r
-0xF871=>0xE611,\r
-0xF872=>0xE612,\r
-0xF873=>0xE613,\r
-0xF874=>0xE614,\r
-0xF875=>0xE615,\r
-0xF876=>0xE616,\r
-0xF877=>0xE617,\r
-0xF878=>0xE618,\r
-0xF879=>0xE619,\r
-0xF87A=>0xE61A,\r
-0xF87B=>0xE61B,\r
-0xF87C=>0xE61C,\r
-0xF87D=>0xE61D,\r
-0xF87E=>0xE61E,\r
-0xF880=>0xE61F,\r
-0xF881=>0xE620,\r
-0xF882=>0xE621,\r
-0xF883=>0xE622,\r
-0xF884=>0xE623,\r
-0xF885=>0xE624,\r
-0xF886=>0xE625,\r
-0xF887=>0xE626,\r
-0xF888=>0xE627,\r
-0xF889=>0xE628,\r
-0xF88A=>0xE629,\r
-0xF88B=>0xE62A,\r
-0xF88C=>0xE62B,\r
-0xF88D=>0xE62C,\r
-0xF88E=>0xE62D,\r
-0xF88F=>0xE62E,\r
-0xF890=>0xE62F,\r
-0xF891=>0xE630,\r
-0xF892=>0xE631,\r
-0xF893=>0xE632,\r
-0xF894=>0xE633,\r
-0xF895=>0xE634,\r
-0xF896=>0xE635,\r
-0xF897=>0xE636,\r
-0xF898=>0xE637,\r
-0xF899=>0xE638,\r
-0xF89A=>0xE639,\r
-0xF89B=>0xE63A,\r
-0xF89C=>0xE63B,\r
-0xF89D=>0xE63C,\r
-0xF89E=>0xE63D,\r
-0xF89F=>0xE63E,\r
-0xF8A0=>0xE63F,\r
-0xF8A1=>0xE640,\r
-0xF8A2=>0xE641,\r
-0xF8A3=>0xE642,\r
-0xF8A4=>0xE643,\r
-0xF8A5=>0xE644,\r
-0xF8A6=>0xE645,\r
-0xF8A7=>0xE646,\r
-0xF8A8=>0xE647,\r
-0xF8A9=>0xE648,\r
-0xF8AA=>0xE649,\r
-0xF8AB=>0xE64A,\r
-0xF8AC=>0xE64B,\r
-0xF8AD=>0xE64C,\r
-0xF8AE=>0xE64D,\r
-0xF8AF=>0xE64E,\r
-0xF8B0=>0xE64F,\r
-0xF8B1=>0xE650,\r
-0xF8B2=>0xE651,\r
-0xF8B3=>0xE652,\r
-0xF8B4=>0xE653,\r
-0xF8B5=>0xE654,\r
-0xF8B6=>0xE655,\r
-0xF8B7=>0xE656,\r
-0xF8B8=>0xE657,\r
-0xF8B9=>0xE658,\r
-0xF8BA=>0xE659,\r
-0xF8BB=>0xE65A,\r
-0xF8BC=>0xE65B,\r
-0xF8BD=>0xE65C,\r
-0xF8BE=>0xE65D,\r
-0xF8BF=>0xE65E,\r
-0xF8C0=>0xE65F,\r
-0xF8C1=>0xE660,\r
-0xF8C2=>0xE661,\r
-0xF8C3=>0xE662,\r
-0xF8C4=>0xE663,\r
-0xF8C5=>0xE664,\r
-0xF8C6=>0xE665,\r
-0xF8C7=>0xE666,\r
-0xF8C8=>0xE667,\r
-0xF8C9=>0xE668,\r
-0xF8CA=>0xE669,\r
-0xF8CB=>0xE66A,\r
-0xF8CC=>0xE66B,\r
-0xF8CD=>0xE66C,\r
-0xF8CE=>0xE66D,\r
-0xF8CF=>0xE66E,\r
-0xF8D0=>0xE66F,\r
-0xF8D1=>0xE670,\r
-0xF8D2=>0xE671,\r
-0xF8D3=>0xE672,\r
-0xF8D4=>0xE673,\r
-0xF8D5=>0xE674,\r
-0xF8D6=>0xE675,\r
-0xF8D7=>0xE676,\r
-0xF8D8=>0xE677,\r
-0xF8D9=>0xE678,\r
-0xF8DA=>0xE679,\r
-0xF8DB=>0xE67A,\r
-0xF8DC=>0xE67B,\r
-0xF8DD=>0xE67C,\r
-0xF8DE=>0xE67D,\r
-0xF8DF=>0xE67E,\r
-0xF8E0=>0xE67F,\r
-0xF8E1=>0xE680,\r
-0xF8E2=>0xE681,\r
-0xF8E3=>0xE682,\r
-0xF8E4=>0xE683,\r
-0xF8E5=>0xE684,\r
-0xF8E6=>0xE685,\r
-0xF8E7=>0xE686,\r
-0xF8E8=>0xE687,\r
-0xF8E9=>0xE688,\r
-0xF8EA=>0xE689,\r
-0xF8EB=>0xE68A,\r
-0xF8EC=>0xE68B,\r
-0xF8ED=>0xE68C,\r
-0xF8EE=>0xE68D,\r
-0xF8EF=>0xE68E,\r
-0xF8F0=>0xE68F,\r
-0xF8F1=>0xE690,\r
-0xF8F2=>0xE691,\r
-0xF8F3=>0xE692,\r
-0xF8F4=>0xE693,\r
-0xF8F5=>0xE694,\r
-0xF8F6=>0xE695,\r
-0xF8F7=>0xE696,\r
-0xF8F8=>0xE697,\r
-0xF8F9=>0xE698,\r
-0xF8FA=>0xE699,\r
-0xF8FB=>0xE69A,\r
-0xF8FC=>0xE69B,\r
-0xF940=>0xE69C,\r
-0xF941=>0xE69D,\r
-0xF942=>0xE69E,\r
-0xF943=>0xE69F,\r
-0xF944=>0xE6A0,\r
-0xF945=>0xE6A1,\r
-0xF946=>0xE6A2,\r
-0xF947=>0xE6A3,\r
-0xF948=>0xE6A4,\r
-0xF949=>0xE6A5,\r
-0xF94A=>0xE6A6,\r
-0xF94B=>0xE6A7,\r
-0xF94C=>0xE6A8,\r
-0xF94D=>0xE6A9,\r
-0xF94E=>0xE6AA,\r
-0xF94F=>0xE6AB,\r
-0xF950=>0xE6AC,\r
-0xF951=>0xE6AD,\r
-0xF952=>0xE6AE,\r
-0xF953=>0xE6AF,\r
-0xF954=>0xE6B0,\r
-0xF955=>0xE6B1,\r
-0xF956=>0xE6B2,\r
-0xF957=>0xE6B3,\r
-0xF958=>0xE6B4,\r
-0xF959=>0xE6B5,\r
-0xF95A=>0xE6B6,\r
-0xF95B=>0xE6B7,\r
-0xF95C=>0xE6B8,\r
-0xF95D=>0xE6B9,\r
-0xF95E=>0xE6BA,\r
-0xF95F=>0xE6BB,\r
-0xF960=>0xE6BC,\r
-0xF961=>0xE6BD,\r
-0xF962=>0xE6BE,\r
-0xF963=>0xE6BF,\r
-0xF964=>0xE6C0,\r
-0xF965=>0xE6C1,\r
-0xF966=>0xE6C2,\r
-0xF967=>0xE6C3,\r
-0xF968=>0xE6C4,\r
-0xF969=>0xE6C5,\r
-0xF96A=>0xE6C6,\r
-0xF96B=>0xE6C7,\r
-0xF96C=>0xE6C8,\r
-0xF96D=>0xE6C9,\r
-0xF96E=>0xE6CA,\r
-0xF96F=>0xE6CB,\r
-0xF970=>0xE6CC,\r
-0xF971=>0xE6CD,\r
-0xF972=>0xE6CE,\r
-0xF973=>0xE6CF,\r
-0xF974=>0xE6D0,\r
-0xF975=>0xE6D1,\r
-0xF976=>0xE6D2,\r
-0xF977=>0xE6D3,\r
-0xF978=>0xE6D4,\r
-0xF979=>0xE6D5,\r
-0xF97A=>0xE6D6,\r
-0xF97B=>0xE6D7,\r
-0xF97C=>0xE6D8,\r
-0xF97D=>0xE6D9,\r
-0xF97E=>0xE6DA,\r
-0xF980=>0xE6DB,\r
-0xF981=>0xE6DC,\r
-0xF982=>0xE6DD,\r
-0xF983=>0xE6DE,\r
-0xF984=>0xE6DF,\r
-0xF985=>0xE6E0,\r
-0xF986=>0xE6E1,\r
-0xF987=>0xE6E2,\r
-0xF988=>0xE6E3,\r
-0xF989=>0xE6E4,\r
-0xF98A=>0xE6E5,\r
-0xF98B=>0xE6E6,\r
-0xF98C=>0xE6E7,\r
-0xF98D=>0xE6E8,\r
-0xF98E=>0xE6E9,\r
-0xF98F=>0xE6EA,\r
-0xF990=>0xE6EB,\r
-0xF991=>0xE6EC,\r
-0xF992=>0xE6ED,\r
-0xF993=>0xE6EE,\r
-0xF994=>0xE6EF,\r
-0xF995=>0xE6F0,\r
-0xF996=>0xE6F1,\r
-0xF997=>0xE6F2,\r
-0xF998=>0xE6F3,\r
-0xF999=>0xE6F4,\r
-0xF99A=>0xE6F5,\r
-0xF99B=>0xE6F6,\r
-0xF99C=>0xE6F7,\r
-0xF99D=>0xE6F8,\r
-0xF99E=>0xE6F9,\r
-0xF99F=>0xE6FA,\r
-0xF9A0=>0xE6FB,\r
-0xF9A1=>0xE6FC,\r
-0xF9A2=>0xE6FD,\r
-0xF9A3=>0xE6FE,\r
-0xF9A4=>0xE6FF,\r
-0xF9A5=>0xE700,\r
-0xF9A6=>0xE701,\r
-0xF9A7=>0xE702,\r
-0xF9A8=>0xE703,\r
-0xF9A9=>0xE704,\r
-0xF9AA=>0xE705,\r
-0xF9AB=>0xE706,\r
-0xF9AC=>0xE707,\r
-0xF9AD=>0xE708,\r
-0xF9AE=>0xE709,\r
-0xF9AF=>0xE70A,\r
-0xF9B0=>0xE70B,\r
-0xF9B1=>0xE70C,\r
-0xF9B2=>0xE70D,\r
-0xF9B3=>0xE70E,\r
-0xF9B4=>0xE70F,\r
-0xF9B5=>0xE710,\r
-0xF9B6=>0xE711,\r
-0xF9B7=>0xE712,\r
-0xF9B8=>0xE713,\r
-0xF9B9=>0xE714,\r
-0xF9BA=>0xE715,\r
-0xF9BB=>0xE716,\r
-0xF9BC=>0xE717,\r
-0xF9BD=>0xE718,\r
-0xF9BE=>0xE719,\r
-0xF9BF=>0xE71A,\r
-0xF9C0=>0xE71B,\r
-0xF9C1=>0xE71C,\r
-0xF9C2=>0xE71D,\r
-0xF9C3=>0xE71E,\r
-0xF9C4=>0xE71F,\r
-0xF9C5=>0xE720,\r
-0xF9C6=>0xE721,\r
-0xF9C7=>0xE722,\r
-0xF9C8=>0xE723,\r
-0xF9C9=>0xE724,\r
-0xF9CA=>0xE725,\r
-0xF9CB=>0xE726,\r
-0xF9CC=>0xE727,\r
-0xF9CD=>0xE728,\r
-0xF9CE=>0xE729,\r
-0xF9CF=>0xE72A,\r
-0xF9D0=>0xE72B,\r
-0xF9D1=>0xE72C,\r
-0xF9D2=>0xE72D,\r
-0xF9D3=>0xE72E,\r
-0xF9D4=>0xE72F,\r
-0xF9D5=>0xE730,\r
-0xF9D6=>0xE731,\r
-0xF9D7=>0xE732,\r
-0xF9D8=>0xE733,\r
-0xF9D9=>0xE734,\r
-0xF9DA=>0xE735,\r
-0xF9DB=>0xE736,\r
-0xF9DC=>0xE737,\r
-0xF9DD=>0xE738,\r
-0xF9DE=>0xE739,\r
-0xF9DF=>0xE73A,\r
-0xF9E0=>0xE73B,\r
-0xF9E1=>0xE73C,\r
-0xF9E2=>0xE73D,\r
-0xF9E3=>0xE73E,\r
-0xF9E4=>0xE73F,\r
-0xF9E5=>0xE740,\r
-0xF9E6=>0xE741,\r
-0xF9E7=>0xE742,\r
-0xF9E8=>0xE743,\r
-0xF9E9=>0xE744,\r
-0xF9EA=>0xE745,\r
-0xF9EB=>0xE746,\r
-0xF9EC=>0xE747,\r
-0xF9ED=>0xE748,\r
-0xF9EE=>0xE749,\r
-0xF9EF=>0xE74A,\r
-0xF9F0=>0xE74B,\r
-0xF9F1=>0xE74C,\r
-0xF9F2=>0xE74D,\r
-0xF9F3=>0xE74E,\r
-0xF9F4=>0xE74F,\r
-0xF9F5=>0xE750,\r
-0xF9F6=>0xE751,\r
-0xF9F7=>0xE752,\r
-0xF9F8=>0xE753,\r
-0xF9F9=>0xE754,\r
-0xF9FA=>0xE755,\r
-0xF9FB=>0xE756,\r
-0xF9FC=>0xE757,\r
-0xFA40=>0x2170,\r
-0xFA41=>0x2171,\r
-0xFA42=>0x2172,\r
-0xFA43=>0x2173,\r
-0xFA44=>0x2174,\r
-0xFA45=>0x2175,\r
-0xFA46=>0x2176,\r
-0xFA47=>0x2177,\r
-0xFA48=>0x2178,\r
-0xFA49=>0x2179,\r
-0xFA4A=>0x2160,\r
-0xFA4B=>0x2161,\r
-0xFA4C=>0x2162,\r
-0xFA4D=>0x2163,\r
-0xFA4E=>0x2164,\r
-0xFA4F=>0x2165,\r
-0xFA50=>0x2166,\r
-0xFA51=>0x2167,\r
-0xFA52=>0x2168,\r
-0xFA53=>0x2169,\r
-0xFA54=>0xFFE2,\r
-0xFA55=>0xFFE4,\r
-0xFA56=>0xFF07,\r
-0xFA57=>0xFF02,\r
-0xFA58=>0x3231,\r
-0xFA59=>0x2116,\r
-0xFA5A=>0x2121,\r
-0xFA5B=>0x2235,\r
-0xFA5C=>0x7E8A,\r
-0xFA5D=>0x891C,\r
-0xFA5E=>0x9348,\r
-0xFA5F=>0x9288,\r
-0xFA60=>0x84DC,\r
-0xFA61=>0x4FC9,\r
-0xFA62=>0x70BB,\r
-0xFA63=>0x6631,\r
-0xFA64=>0x68C8,\r
-0xFA65=>0x92F9,\r
-0xFA66=>0x66FB,\r
-0xFA67=>0x5F45,\r
-0xFA68=>0x4E28,\r
-0xFA69=>0x4EE1,\r
-0xFA6A=>0x4EFC,\r
-0xFA6B=>0x4F00,\r
-0xFA6C=>0x4F03,\r
-0xFA6D=>0x4F39,\r
-0xFA6E=>0x4F56,\r
-0xFA6F=>0x4F92,\r
-0xFA70=>0x4F8A,\r
-0xFA71=>0x4F9A,\r
-0xFA72=>0x4F94,\r
-0xFA73=>0x4FCD,\r
-0xFA74=>0x5040,\r
-0xFA75=>0x5022,\r
-0xFA76=>0x4FFF,\r
-0xFA77=>0x501E,\r
-0xFA78=>0x5046,\r
-0xFA79=>0x5070,\r
-0xFA7A=>0x5042,\r
-0xFA7B=>0x5094,\r
-0xFA7C=>0x50F4,\r
-0xFA7D=>0x50D8,\r
-0xFA7E=>0x514A,\r
-0xFA80=>0x5164,\r
-0xFA81=>0x519D,\r
-0xFA82=>0x51BE,\r
-0xFA83=>0x51EC,\r
-0xFA84=>0x5215,\r
-0xFA85=>0x529C,\r
-0xFA86=>0x52A6,\r
-0xFA87=>0x52C0,\r
-0xFA88=>0x52DB,\r
-0xFA89=>0x5300,\r
-0xFA8A=>0x5307,\r
-0xFA8B=>0x5324,\r
-0xFA8C=>0x5372,\r
-0xFA8D=>0x5393,\r
-0xFA8E=>0x53B2,\r
-0xFA8F=>0x53DD,\r
-0xFA90=>0xFA0E,\r
-0xFA91=>0x549C,\r
-0xFA92=>0x548A,\r
-0xFA93=>0x54A9,\r
-0xFA94=>0x54FF,\r
-0xFA95=>0x5586,\r
-0xFA96=>0x5759,\r
-0xFA97=>0x5765,\r
-0xFA98=>0x57AC,\r
-0xFA99=>0x57C8,\r
-0xFA9A=>0x57C7,\r
-0xFA9B=>0xFA0F,\r
-0xFA9C=>0xFA10,\r
-0xFA9D=>0x589E,\r
-0xFA9E=>0x58B2,\r
-0xFA9F=>0x590B,\r
-0xFAA0=>0x5953,\r
-0xFAA1=>0x595B,\r
-0xFAA2=>0x595D,\r
-0xFAA3=>0x5963,\r
-0xFAA4=>0x59A4,\r
-0xFAA5=>0x59BA,\r
-0xFAA6=>0x5B56,\r
-0xFAA7=>0x5BC0,\r
-0xFAA8=>0x752F,\r
-0xFAA9=>0x5BD8,\r
-0xFAAA=>0x5BEC,\r
-0xFAAB=>0x5C1E,\r
-0xFAAC=>0x5CA6,\r
-0xFAAD=>0x5CBA,\r
-0xFAAE=>0x5CF5,\r
-0xFAAF=>0x5D27,\r
-0xFAB0=>0x5D53,\r
-0xFAB1=>0xFA11,\r
-0xFAB2=>0x5D42,\r
-0xFAB3=>0x5D6D,\r
-0xFAB4=>0x5DB8,\r
-0xFAB5=>0x5DB9,\r
-0xFAB6=>0x5DD0,\r
-0xFAB7=>0x5F21,\r
-0xFAB8=>0x5F34,\r
-0xFAB9=>0x5F67,\r
-0xFABA=>0x5FB7,\r
-0xFABB=>0x5FDE,\r
-0xFABC=>0x605D,\r
-0xFABD=>0x6085,\r
-0xFABE=>0x608A,\r
-0xFABF=>0x60DE,\r
-0xFAC0=>0x60D5,\r
-0xFAC1=>0x6120,\r
-0xFAC2=>0x60F2,\r
-0xFAC3=>0x6111,\r
-0xFAC4=>0x6137,\r
-0xFAC5=>0x6130,\r
-0xFAC6=>0x6198,\r
-0xFAC7=>0x6213,\r
-0xFAC8=>0x62A6,\r
-0xFAC9=>0x63F5,\r
-0xFACA=>0x6460,\r
-0xFACB=>0x649D,\r
-0xFACC=>0x64CE,\r
-0xFACD=>0x654E,\r
-0xFACE=>0x6600,\r
-0xFACF=>0x6615,\r
-0xFAD0=>0x663B,\r
-0xFAD1=>0x6609,\r
-0xFAD2=>0x662E,\r
-0xFAD3=>0x661E,\r
-0xFAD4=>0x6624,\r
-0xFAD5=>0x6665,\r
-0xFAD6=>0x6657,\r
-0xFAD7=>0x6659,\r
-0xFAD8=>0xFA12,\r
-0xFAD9=>0x6673,\r
-0xFADA=>0x6699,\r
-0xFADB=>0x66A0,\r
-0xFADC=>0x66B2,\r
-0xFADD=>0x66BF,\r
-0xFADE=>0x66FA,\r
-0xFADF=>0x670E,\r
-0xFAE0=>0xF929,\r
-0xFAE1=>0x6766,\r
-0xFAE2=>0x67BB,\r
-0xFAE3=>0x6852,\r
-0xFAE4=>0x67C0,\r
-0xFAE5=>0x6801,\r
-0xFAE6=>0x6844,\r
-0xFAE7=>0x68CF,\r
-0xFAE8=>0xFA13,\r
-0xFAE9=>0x6968,\r
-0xFAEA=>0xFA14,\r
-0xFAEB=>0x6998,\r
-0xFAEC=>0x69E2,\r
-0xFAED=>0x6A30,\r
-0xFAEE=>0x6A6B,\r
-0xFAEF=>0x6A46,\r
-0xFAF0=>0x6A73,\r
-0xFAF1=>0x6A7E,\r
-0xFAF2=>0x6AE2,\r
-0xFAF3=>0x6AE4,\r
-0xFAF4=>0x6BD6,\r
-0xFAF5=>0x6C3F,\r
-0xFAF6=>0x6C5C,\r
-0xFAF7=>0x6C86,\r
-0xFAF8=>0x6C6F,\r
-0xFAF9=>0x6CDA,\r
-0xFAFA=>0x6D04,\r
-0xFAFB=>0x6D87,\r
-0xFAFC=>0x6D6F,\r
-0xFB40=>0x6D96,\r
-0xFB41=>0x6DAC,\r
-0xFB42=>0x6DCF,\r
-0xFB43=>0x6DF8,\r
-0xFB44=>0x6DF2,\r
-0xFB45=>0x6DFC,\r
-0xFB46=>0x6E39,\r
-0xFB47=>0x6E5C,\r
-0xFB48=>0x6E27,\r
-0xFB49=>0x6E3C,\r
-0xFB4A=>0x6EBF,\r
-0xFB4B=>0x6F88,\r
-0xFB4C=>0x6FB5,\r
-0xFB4D=>0x6FF5,\r
-0xFB4E=>0x7005,\r
-0xFB4F=>0x7007,\r
-0xFB50=>0x7028,\r
-0xFB51=>0x7085,\r
-0xFB52=>0x70AB,\r
-0xFB53=>0x710F,\r
-0xFB54=>0x7104,\r
-0xFB55=>0x715C,\r
-0xFB56=>0x7146,\r
-0xFB57=>0x7147,\r
-0xFB58=>0xFA15,\r
-0xFB59=>0x71C1,\r
-0xFB5A=>0x71FE,\r
-0xFB5B=>0x72B1,\r
-0xFB5C=>0x72BE,\r
-0xFB5D=>0x7324,\r
-0xFB5E=>0xFA16,\r
-0xFB5F=>0x7377,\r
-0xFB60=>0x73BD,\r
-0xFB61=>0x73C9,\r
-0xFB62=>0x73D6,\r
-0xFB63=>0x73E3,\r
-0xFB64=>0x73D2,\r
-0xFB65=>0x7407,\r
-0xFB66=>0x73F5,\r
-0xFB67=>0x7426,\r
-0xFB68=>0x742A,\r
-0xFB69=>0x7429,\r
-0xFB6A=>0x742E,\r
-0xFB6B=>0x7462,\r
-0xFB6C=>0x7489,\r
-0xFB6D=>0x749F,\r
-0xFB6E=>0x7501,\r
-0xFB6F=>0x756F,\r
-0xFB70=>0x7682,\r
-0xFB71=>0x769C,\r
-0xFB72=>0x769E,\r
-0xFB73=>0x769B,\r
-0xFB74=>0x76A6,\r
-0xFB75=>0xFA17,\r
-0xFB76=>0x7746,\r
-0xFB77=>0x52AF,\r
-0xFB78=>0x7821,\r
-0xFB79=>0x784E,\r
-0xFB7A=>0x7864,\r
-0xFB7B=>0x787A,\r
-0xFB7C=>0x7930,\r
-0xFB7D=>0xFA18,\r
-0xFB7E=>0xFA19,\r
-0xFB80=>0xFA1A,\r
-0xFB81=>0x7994,\r
-0xFB82=>0xFA1B,\r
-0xFB83=>0x799B,\r
-0xFB84=>0x7AD1,\r
-0xFB85=>0x7AE7,\r
-0xFB86=>0xFA1C,\r
-0xFB87=>0x7AEB,\r
-0xFB88=>0x7B9E,\r
-0xFB89=>0xFA1D,\r
-0xFB8A=>0x7D48,\r
-0xFB8B=>0x7D5C,\r
-0xFB8C=>0x7DB7,\r
-0xFB8D=>0x7DA0,\r
-0xFB8E=>0x7DD6,\r
-0xFB8F=>0x7E52,\r
-0xFB90=>0x7F47,\r
-0xFB91=>0x7FA1,\r
-0xFB92=>0xFA1E,\r
-0xFB93=>0x8301,\r
-0xFB94=>0x8362,\r
-0xFB95=>0x837F,\r
-0xFB96=>0x83C7,\r
-0xFB97=>0x83F6,\r
-0xFB98=>0x8448,\r
-0xFB99=>0x84B4,\r
-0xFB9A=>0x8553,\r
-0xFB9B=>0x8559,\r
-0xFB9C=>0x856B,\r
-0xFB9D=>0xFA1F,\r
-0xFB9E=>0x85B0,\r
-0xFB9F=>0xFA20,\r
-0xFBA0=>0xFA21,\r
-0xFBA1=>0x8807,\r
-0xFBA2=>0x88F5,\r
-0xFBA3=>0x8A12,\r
-0xFBA4=>0x8A37,\r
-0xFBA5=>0x8A79,\r
-0xFBA6=>0x8AA7,\r
-0xFBA7=>0x8ABE,\r
-0xFBA8=>0x8ADF,\r
-0xFBA9=>0xFA22,\r
-0xFBAA=>0x8AF6,\r
-0xFBAB=>0x8B53,\r
-0xFBAC=>0x8B7F,\r
-0xFBAD=>0x8CF0,\r
-0xFBAE=>0x8CF4,\r
-0xFBAF=>0x8D12,\r
-0xFBB0=>0x8D76,\r
-0xFBB1=>0xFA23,\r
-0xFBB2=>0x8ECF,\r
-0xFBB3=>0xFA24,\r
-0xFBB4=>0xFA25,\r
-0xFBB5=>0x9067,\r
-0xFBB6=>0x90DE,\r
-0xFBB7=>0xFA26,\r
-0xFBB8=>0x9115,\r
-0xFBB9=>0x9127,\r
-0xFBBA=>0x91DA,\r
-0xFBBB=>0x91D7,\r
-0xFBBC=>0x91DE,\r
-0xFBBD=>0x91ED,\r
-0xFBBE=>0x91EE,\r
-0xFBBF=>0x91E4,\r
-0xFBC0=>0x91E5,\r
-0xFBC1=>0x9206,\r
-0xFBC2=>0x9210,\r
-0xFBC3=>0x920A,\r
-0xFBC4=>0x923A,\r
-0xFBC5=>0x9240,\r
-0xFBC6=>0x923C,\r
-0xFBC7=>0x924E,\r
-0xFBC8=>0x9259,\r
-0xFBC9=>0x9251,\r
-0xFBCA=>0x9239,\r
-0xFBCB=>0x9267,\r
-0xFBCC=>0x92A7,\r
-0xFBCD=>0x9277,\r
-0xFBCE=>0x9278,\r
-0xFBCF=>0x92E7,\r
-0xFBD0=>0x92D7,\r
-0xFBD1=>0x92D9,\r
-0xFBD2=>0x92D0,\r
-0xFBD3=>0xFA27,\r
-0xFBD4=>0x92D5,\r
-0xFBD5=>0x92E0,\r
-0xFBD6=>0x92D3,\r
-0xFBD7=>0x9325,\r
-0xFBD8=>0x9321,\r
-0xFBD9=>0x92FB,\r
-0xFBDA=>0xFA28,\r
-0xFBDB=>0x931E,\r
-0xFBDC=>0x92FF,\r
-0xFBDD=>0x931D,\r
-0xFBDE=>0x9302,\r
-0xFBDF=>0x9370,\r
-0xFBE0=>0x9357,\r
-0xFBE1=>0x93A4,\r
-0xFBE2=>0x93C6,\r
-0xFBE3=>0x93DE,\r
-0xFBE4=>0x93F8,\r
-0xFBE5=>0x9431,\r
-0xFBE6=>0x9445,\r
-0xFBE7=>0x9448,\r
-0xFBE8=>0x9592,\r
-0xFBE9=>0xF9DC,\r
-0xFBEA=>0xFA29,\r
-0xFBEB=>0x969D,\r
-0xFBEC=>0x96AF,\r
-0xFBED=>0x9733,\r
-0xFBEE=>0x973B,\r
-0xFBEF=>0x9743,\r
-0xFBF0=>0x974D,\r
-0xFBF1=>0x974F,\r
-0xFBF2=>0x9751,\r
-0xFBF3=>0x9755,\r
-0xFBF4=>0x9857,\r
-0xFBF5=>0x9865,\r
-0xFBF6=>0xFA2A,\r
-0xFBF7=>0xFA2B,\r
-0xFBF8=>0x9927,\r
-0xFBF9=>0xFA2C,\r
-0xFBFA=>0x999E,\r
-0xFBFB=>0x9A4E,\r
-0xFBFC=>0x9AD9,\r
-0xFC40=>0x9ADC,\r
-0xFC41=>0x9B75,\r
-0xFC42=>0x9B72,\r
-0xFC43=>0x9B8F,\r
-0xFC44=>0x9BB1,\r
-0xFC45=>0x9BBB,\r
-0xFC46=>0x9C00,\r
-0xFC47=>0x9D70,\r
-0xFC48=>0x9D6B,\r
-0xFC49=>0xFA2D,\r
-0xFC4A=>0x9E19,\r
-0xFC4B=>0x9ED1\r
-);\r
+<?php
+$sjistoucs2 = array (
+0x8140=>0x3000,
+0x8141=>0x3001,
+0x8142=>0x3002,
+0x8143=>0xFF0C,
+0x8144=>0xFF0E,
+0x8145=>0x30FB,
+0x8146=>0xFF1A,
+0x8147=>0xFF1B,
+0x8148=>0xFF1F,
+0x8149=>0xFF01,
+0x814A=>0x309B,
+0x814B=>0x309C,
+0x814C=>0x00B4,
+0x814D=>0xFF40,
+0x814E=>0x00A8,
+0x814F=>0xFF3E,
+0x8150=>0xFFE3,
+0x8151=>0xFF3F,
+0x8152=>0x30FD,
+0x8153=>0x30FE,
+0x8154=>0x309D,
+0x8155=>0x309E,
+0x8156=>0x3003,
+0x8157=>0x4EDD,
+0x8158=>0x3005,
+0x8159=>0x3006,
+0x815A=>0x3007,
+0x815B=>0x30FC,
+0x815C=>0x2015,
+0x815D=>0x2010,
+0x815E=>0xFF0F,
+0x815F=>0xFF3C,
+0x8160=>0xFF5E,
+0x8161=>0x2225,
+0x8162=>0xFF5C,
+0x8163=>0x2026,
+0x8164=>0x2025,
+0x8165=>0x2018,
+0x8166=>0x2019,
+0x8167=>0x201C,
+0x8168=>0x201D,
+0x8169=>0xFF08,
+0x816A=>0xFF09,
+0x816B=>0x3014,
+0x816C=>0x3015,
+0x816D=>0xFF3B,
+0x816E=>0xFF3D,
+0x816F=>0xFF5B,
+0x8170=>0xFF5D,
+0x8171=>0x3008,
+0x8172=>0x3009,
+0x8173=>0x300A,
+0x8174=>0x300B,
+0x8175=>0x300C,
+0x8176=>0x300D,
+0x8177=>0x300E,
+0x8178=>0x300F,
+0x8179=>0x3010,
+0x817A=>0x3011,
+0x817B=>0xFF0B,
+0x817C=>0xFF0D,
+0x817D=>0x00B1,
+0x817E=>0x00D7,
+0x8180=>0x00F7,
+0x8181=>0xFF1D,
+0x8182=>0x2260,
+0x8183=>0xFF1C,
+0x8184=>0xFF1E,
+0x8185=>0x2266,
+0x8186=>0x2267,
+0x8187=>0x221E,
+0x8188=>0x2234,
+0x8189=>0x2642,
+0x818A=>0x2640,
+0x818B=>0x00B0,
+0x818C=>0x2032,
+0x818D=>0x2033,
+0x818E=>0x2103,
+0x818F=>0xFFE5,
+0x8190=>0xFF04,
+0x8191=>0xFFE0,
+0x8192=>0xFFE1,
+0x8193=>0xFF05,
+0x8194=>0xFF03,
+0x8195=>0xFF06,
+0x8196=>0xFF0A,
+0x8197=>0xFF20,
+0x8198=>0x00A7,
+0x8199=>0x2606,
+0x819A=>0x2605,
+0x819B=>0x25CB,
+0x819C=>0x25CF,
+0x819D=>0x25CE,
+0x819E=>0x25C7,
+0x819F=>0x25C6,
+0x81A0=>0x25A1,
+0x81A1=>0x25A0,
+0x81A2=>0x25B3,
+0x81A3=>0x25B2,
+0x81A4=>0x25BD,
+0x81A5=>0x25BC,
+0x81A6=>0x203B,
+0x81A7=>0x3012,
+0x81A8=>0x2192,
+0x81A9=>0x2190,
+0x81AA=>0x2191,
+0x81AB=>0x2193,
+0x81AC=>0x3013,
+0x81B8=>0x2208,
+0x81B9=>0x220B,
+0x81BA=>0x2286,
+0x81BB=>0x2287,
+0x81BC=>0x2282,
+0x81BD=>0x2283,
+0x81BE=>0x222A,
+0x81BF=>0x2229,
+0x81C8=>0x2227,
+0x81C9=>0x2228,
+0x81CA=>0xFFE2,
+0x81CB=>0x21D2,
+0x81CC=>0x21D4,
+0x81CD=>0x2200,
+0x81CE=>0x2203,
+0x81DA=>0x2220,
+0x81DB=>0x22A5,
+0x81DC=>0x2312,
+0x81DD=>0x2202,
+0x81DE=>0x2207,
+0x81DF=>0x2261,
+0x81E0=>0x2252,
+0x81E1=>0x226A,
+0x81E2=>0x226B,
+0x81E3=>0x221A,
+0x81E4=>0x223D,
+0x81E5=>0x221D,
+0x81E6=>0x2235,
+0x81E7=>0x222B,
+0x81E8=>0x222C,
+0x81F0=>0x212B,
+0x81F1=>0x2030,
+0x81F2=>0x266F,
+0x81F3=>0x266D,
+0x81F4=>0x266A,
+0x81F5=>0x2020,
+0x81F6=>0x2021,
+0x81F7=>0x00B6,
+0x81FC=>0x25EF,
+0x824F=>0xFF10,
+0x8250=>0xFF11,
+0x8251=>0xFF12,
+0x8252=>0xFF13,
+0x8253=>0xFF14,
+0x8254=>0xFF15,
+0x8255=>0xFF16,
+0x8256=>0xFF17,
+0x8257=>0xFF18,
+0x8258=>0xFF19,
+0x8260=>0xFF21,
+0x8261=>0xFF22,
+0x8262=>0xFF23,
+0x8263=>0xFF24,
+0x8264=>0xFF25,
+0x8265=>0xFF26,
+0x8266=>0xFF27,
+0x8267=>0xFF28,
+0x8268=>0xFF29,
+0x8269=>0xFF2A,
+0x826A=>0xFF2B,
+0x826B=>0xFF2C,
+0x826C=>0xFF2D,
+0x826D=>0xFF2E,
+0x826E=>0xFF2F,
+0x826F=>0xFF30,
+0x8270=>0xFF31,
+0x8271=>0xFF32,
+0x8272=>0xFF33,
+0x8273=>0xFF34,
+0x8274=>0xFF35,
+0x8275=>0xFF36,
+0x8276=>0xFF37,
+0x8277=>0xFF38,
+0x8278=>0xFF39,
+0x8279=>0xFF3A,
+0x8281=>0xFF41,
+0x8282=>0xFF42,
+0x8283=>0xFF43,
+0x8284=>0xFF44,
+0x8285=>0xFF45,
+0x8286=>0xFF46,
+0x8287=>0xFF47,
+0x8288=>0xFF48,
+0x8289=>0xFF49,
+0x828A=>0xFF4A,
+0x828B=>0xFF4B,
+0x828C=>0xFF4C,
+0x828D=>0xFF4D,
+0x828E=>0xFF4E,
+0x828F=>0xFF4F,
+0x8290=>0xFF50,
+0x8291=>0xFF51,
+0x8292=>0xFF52,
+0x8293=>0xFF53,
+0x8294=>0xFF54,
+0x8295=>0xFF55,
+0x8296=>0xFF56,
+0x8297=>0xFF57,
+0x8298=>0xFF58,
+0x8299=>0xFF59,
+0x829A=>0xFF5A,
+0x829F=>0x3041,
+0x82A0=>0x3042,
+0x82A1=>0x3043,
+0x82A2=>0x3044,
+0x82A3=>0x3045,
+0x82A4=>0x3046,
+0x82A5=>0x3047,
+0x82A6=>0x3048,
+0x82A7=>0x3049,
+0x82A8=>0x304A,
+0x82A9=>0x304B,
+0x82AA=>0x304C,
+0x82AB=>0x304D,
+0x82AC=>0x304E,
+0x82AD=>0x304F,
+0x82AE=>0x3050,
+0x82AF=>0x3051,
+0x82B0=>0x3052,
+0x82B1=>0x3053,
+0x82B2=>0x3054,
+0x82B3=>0x3055,
+0x82B4=>0x3056,
+0x82B5=>0x3057,
+0x82B6=>0x3058,
+0x82B7=>0x3059,
+0x82B8=>0x305A,
+0x82B9=>0x305B,
+0x82BA=>0x305C,
+0x82BB=>0x305D,
+0x82BC=>0x305E,
+0x82BD=>0x305F,
+0x82BE=>0x3060,
+0x82BF=>0x3061,
+0x82C0=>0x3062,
+0x82C1=>0x3063,
+0x82C2=>0x3064,
+0x82C3=>0x3065,
+0x82C4=>0x3066,
+0x82C5=>0x3067,
+0x82C6=>0x3068,
+0x82C7=>0x3069,
+0x82C8=>0x306A,
+0x82C9=>0x306B,
+0x82CA=>0x306C,
+0x82CB=>0x306D,
+0x82CC=>0x306E,
+0x82CD=>0x306F,
+0x82CE=>0x3070,
+0x82CF=>0x3071,
+0x82D0=>0x3072,
+0x82D1=>0x3073,
+0x82D2=>0x3074,
+0x82D3=>0x3075,
+0x82D4=>0x3076,
+0x82D5=>0x3077,
+0x82D6=>0x3078,
+0x82D7=>0x3079,
+0x82D8=>0x307A,
+0x82D9=>0x307B,
+0x82DA=>0x307C,
+0x82DB=>0x307D,
+0x82DC=>0x307E,
+0x82DD=>0x307F,
+0x82DE=>0x3080,
+0x82DF=>0x3081,
+0x82E0=>0x3082,
+0x82E1=>0x3083,
+0x82E2=>0x3084,
+0x82E3=>0x3085,
+0x82E4=>0x3086,
+0x82E5=>0x3087,
+0x82E6=>0x3088,
+0x82E7=>0x3089,
+0x82E8=>0x308A,
+0x82E9=>0x308B,
+0x82EA=>0x308C,
+0x82EB=>0x308D,
+0x82EC=>0x308E,
+0x82ED=>0x308F,
+0x82EE=>0x3090,
+0x82EF=>0x3091,
+0x82F0=>0x3092,
+0x82F1=>0x3093,
+0x8340=>0x30A1,
+0x8341=>0x30A2,
+0x8342=>0x30A3,
+0x8343=>0x30A4,
+0x8344=>0x30A5,
+0x8345=>0x30A6,
+0x8346=>0x30A7,
+0x8347=>0x30A8,
+0x8348=>0x30A9,
+0x8349=>0x30AA,
+0x834A=>0x30AB,
+0x834B=>0x30AC,
+0x834C=>0x30AD,
+0x834D=>0x30AE,
+0x834E=>0x30AF,
+0x834F=>0x30B0,
+0x8350=>0x30B1,
+0x8351=>0x30B2,
+0x8352=>0x30B3,
+0x8353=>0x30B4,
+0x8354=>0x30B5,
+0x8355=>0x30B6,
+0x8356=>0x30B7,
+0x8357=>0x30B8,
+0x8358=>0x30B9,
+0x8359=>0x30BA,
+0x835A=>0x30BB,
+0x835B=>0x30BC,
+0x835C=>0x30BD,
+0x835D=>0x30BE,
+0x835E=>0x30BF,
+0x835F=>0x30C0,
+0x8360=>0x30C1,
+0x8361=>0x30C2,
+0x8362=>0x30C3,
+0x8363=>0x30C4,
+0x8364=>0x30C5,
+0x8365=>0x30C6,
+0x8366=>0x30C7,
+0x8367=>0x30C8,
+0x8368=>0x30C9,
+0x8369=>0x30CA,
+0x836A=>0x30CB,
+0x836B=>0x30CC,
+0x836C=>0x30CD,
+0x836D=>0x30CE,
+0x836E=>0x30CF,
+0x836F=>0x30D0,
+0x8370=>0x30D1,
+0x8371=>0x30D2,
+0x8372=>0x30D3,
+0x8373=>0x30D4,
+0x8374=>0x30D5,
+0x8375=>0x30D6,
+0x8376=>0x30D7,
+0x8377=>0x30D8,
+0x8378=>0x30D9,
+0x8379=>0x30DA,
+0x837A=>0x30DB,
+0x837B=>0x30DC,
+0x837C=>0x30DD,
+0x837D=>0x30DE,
+0x837E=>0x30DF,
+0x8380=>0x30E0,
+0x8381=>0x30E1,
+0x8382=>0x30E2,
+0x8383=>0x30E3,
+0x8384=>0x30E4,
+0x8385=>0x30E5,
+0x8386=>0x30E6,
+0x8387=>0x30E7,
+0x8388=>0x30E8,
+0x8389=>0x30E9,
+0x838A=>0x30EA,
+0x838B=>0x30EB,
+0x838C=>0x30EC,
+0x838D=>0x30ED,
+0x838E=>0x30EE,
+0x838F=>0x30EF,
+0x8390=>0x30F0,
+0x8391=>0x30F1,
+0x8392=>0x30F2,
+0x8393=>0x30F3,
+0x8394=>0x30F4,
+0x8395=>0x30F5,
+0x8396=>0x30F6,
+0x839F=>0x0391,
+0x83A0=>0x0392,
+0x83A1=>0x0393,
+0x83A2=>0x0394,
+0x83A3=>0x0395,
+0x83A4=>0x0396,
+0x83A5=>0x0397,
+0x83A6=>0x0398,
+0x83A7=>0x0399,
+0x83A8=>0x039A,
+0x83A9=>0x039B,
+0x83AA=>0x039C,
+0x83AB=>0x039D,
+0x83AC=>0x039E,
+0x83AD=>0x039F,
+0x83AE=>0x03A0,
+0x83AF=>0x03A1,
+0x83B0=>0x03A3,
+0x83B1=>0x03A4,
+0x83B2=>0x03A5,
+0x83B3=>0x03A6,
+0x83B4=>0x03A7,
+0x83B5=>0x03A8,
+0x83B6=>0x03A9,
+0x83BF=>0x03B1,
+0x83C0=>0x03B2,
+0x83C1=>0x03B3,
+0x83C2=>0x03B4,
+0x83C3=>0x03B5,
+0x83C4=>0x03B6,
+0x83C5=>0x03B7,
+0x83C6=>0x03B8,
+0x83C7=>0x03B9,
+0x83C8=>0x03BA,
+0x83C9=>0x03BB,
+0x83CA=>0x03BC,
+0x83CB=>0x03BD,
+0x83CC=>0x03BE,
+0x83CD=>0x03BF,
+0x83CE=>0x03C0,
+0x83CF=>0x03C1,
+0x83D0=>0x03C3,
+0x83D1=>0x03C4,
+0x83D2=>0x03C5,
+0x83D3=>0x03C6,
+0x83D4=>0x03C7,
+0x83D5=>0x03C8,
+0x83D6=>0x03C9,
+0x8440=>0x0410,
+0x8441=>0x0411,
+0x8442=>0x0412,
+0x8443=>0x0413,
+0x8444=>0x0414,
+0x8445=>0x0415,
+0x8446=>0x0401,
+0x8447=>0x0416,
+0x8448=>0x0417,
+0x8449=>0x0418,
+0x844A=>0x0419,
+0x844B=>0x041A,
+0x844C=>0x041B,
+0x844D=>0x041C,
+0x844E=>0x041D,
+0x844F=>0x041E,
+0x8450=>0x041F,
+0x8451=>0x0420,
+0x8452=>0x0421,
+0x8453=>0x0422,
+0x8454=>0x0423,
+0x8455=>0x0424,
+0x8456=>0x0425,
+0x8457=>0x0426,
+0x8458=>0x0427,
+0x8459=>0x0428,
+0x845A=>0x0429,
+0x845B=>0x042A,
+0x845C=>0x042B,
+0x845D=>0x042C,
+0x845E=>0x042D,
+0x845F=>0x042E,
+0x8460=>0x042F,
+0x8470=>0x0430,
+0x8471=>0x0431,
+0x8472=>0x0432,
+0x8473=>0x0433,
+0x8474=>0x0434,
+0x8475=>0x0435,
+0x8476=>0x0451,
+0x8477=>0x0436,
+0x8478=>0x0437,
+0x8479=>0x0438,
+0x847A=>0x0439,
+0x847B=>0x043A,
+0x847C=>0x043B,
+0x847D=>0x043C,
+0x847E=>0x043D,
+0x8480=>0x043E,
+0x8481=>0x043F,
+0x8482=>0x0440,
+0x8483=>0x0441,
+0x8484=>0x0442,
+0x8485=>0x0443,
+0x8486=>0x0444,
+0x8487=>0x0445,
+0x8488=>0x0446,
+0x8489=>0x0447,
+0x848A=>0x0448,
+0x848B=>0x0449,
+0x848C=>0x044A,
+0x848D=>0x044B,
+0x848E=>0x044C,
+0x848F=>0x044D,
+0x8490=>0x044E,
+0x8491=>0x044F,
+0x849F=>0x2500,
+0x84A0=>0x2502,
+0x84A1=>0x250C,
+0x84A2=>0x2510,
+0x84A3=>0x2518,
+0x84A4=>0x2514,
+0x84A5=>0x251C,
+0x84A6=>0x252C,
+0x84A7=>0x2524,
+0x84A8=>0x2534,
+0x84A9=>0x253C,
+0x84AA=>0x2501,
+0x84AB=>0x2503,
+0x84AC=>0x250F,
+0x84AD=>0x2513,
+0x84AE=>0x251B,
+0x84AF=>0x2517,
+0x84B0=>0x2523,
+0x84B1=>0x2533,
+0x84B2=>0x252B,
+0x84B3=>0x253B,
+0x84B4=>0x254B,
+0x84B5=>0x2520,
+0x84B6=>0x252F,
+0x84B7=>0x2528,
+0x84B8=>0x2537,
+0x84B9=>0x253F,
+0x84BA=>0x251D,
+0x84BB=>0x2530,
+0x84BC=>0x2525,
+0x84BD=>0x2538,
+0x84BE=>0x2542,
+0x8740=>0x2460,
+0x8741=>0x2461,
+0x8742=>0x2462,
+0x8743=>0x2463,
+0x8744=>0x2464,
+0x8745=>0x2465,
+0x8746=>0x2466,
+0x8747=>0x2467,
+0x8748=>0x2468,
+0x8749=>0x2469,
+0x874A=>0x246A,
+0x874B=>0x246B,
+0x874C=>0x246C,
+0x874D=>0x246D,
+0x874E=>0x246E,
+0x874F=>0x246F,
+0x8750=>0x2470,
+0x8751=>0x2471,
+0x8752=>0x2472,
+0x8753=>0x2473,
+0x8754=>0x2160,
+0x8755=>0x2161,
+0x8756=>0x2162,
+0x8757=>0x2163,
+0x8758=>0x2164,
+0x8759=>0x2165,
+0x875A=>0x2166,
+0x875B=>0x2167,
+0x875C=>0x2168,
+0x875D=>0x2169,
+0x875F=>0x3349,
+0x8760=>0x3314,
+0x8761=>0x3322,
+0x8762=>0x334D,
+0x8763=>0x3318,
+0x8764=>0x3327,
+0x8765=>0x3303,
+0x8766=>0x3336,
+0x8767=>0x3351,
+0x8768=>0x3357,
+0x8769=>0x330D,
+0x876A=>0x3326,
+0x876B=>0x3323,
+0x876C=>0x332B,
+0x876D=>0x334A,
+0x876E=>0x333B,
+0x876F=>0x339C,
+0x8770=>0x339D,
+0x8771=>0x339E,
+0x8772=>0x338E,
+0x8773=>0x338F,
+0x8774=>0x33C4,
+0x8775=>0x33A1,
+0x877E=>0x337B,
+0x8780=>0x301D,
+0x8781=>0x301F,
+0x8782=>0x2116,
+0x8783=>0x33CD,
+0x8784=>0x2121,
+0x8785=>0x32A4,
+0x8786=>0x32A5,
+0x8787=>0x32A6,
+0x8788=>0x32A7,
+0x8789=>0x32A8,
+0x878A=>0x3231,
+0x878B=>0x3232,
+0x878C=>0x3239,
+0x878D=>0x337E,
+0x878E=>0x337D,
+0x878F=>0x337C,
+0x8790=>0x2252,
+0x8791=>0x2261,
+0x8792=>0x222B,
+0x8793=>0x222E,
+0x8794=>0x2211,
+0x8795=>0x221A,
+0x8796=>0x22A5,
+0x8797=>0x2220,
+0x8798=>0x221F,
+0x8799=>0x22BF,
+0x879A=>0x2235,
+0x879B=>0x2229,
+0x879C=>0x222A,
+0x889F=>0x4E9C,
+0x88A0=>0x5516,
+0x88A1=>0x5A03,
+0x88A2=>0x963F,
+0x88A3=>0x54C0,
+0x88A4=>0x611B,
+0x88A5=>0x6328,
+0x88A6=>0x59F6,
+0x88A7=>0x9022,
+0x88A8=>0x8475,
+0x88A9=>0x831C,
+0x88AA=>0x7A50,
+0x88AB=>0x60AA,
+0x88AC=>0x63E1,
+0x88AD=>0x6E25,
+0x88AE=>0x65ED,
+0x88AF=>0x8466,
+0x88B0=>0x82A6,
+0x88B1=>0x9BF5,
+0x88B2=>0x6893,
+0x88B3=>0x5727,
+0x88B4=>0x65A1,
+0x88B5=>0x6271,
+0x88B6=>0x5B9B,
+0x88B7=>0x59D0,
+0x88B8=>0x867B,
+0x88B9=>0x98F4,
+0x88BA=>0x7D62,
+0x88BB=>0x7DBE,
+0x88BC=>0x9B8E,
+0x88BD=>0x6216,
+0x88BE=>0x7C9F,
+0x88BF=>0x88B7,
+0x88C0=>0x5B89,
+0x88C1=>0x5EB5,
+0x88C2=>0x6309,
+0x88C3=>0x6697,
+0x88C4=>0x6848,
+0x88C5=>0x95C7,
+0x88C6=>0x978D,
+0x88C7=>0x674F,
+0x88C8=>0x4EE5,
+0x88C9=>0x4F0A,
+0x88CA=>0x4F4D,
+0x88CB=>0x4F9D,
+0x88CC=>0x5049,
+0x88CD=>0x56F2,
+0x88CE=>0x5937,
+0x88CF=>0x59D4,
+0x88D0=>0x5A01,
+0x88D1=>0x5C09,
+0x88D2=>0x60DF,
+0x88D3=>0x610F,
+0x88D4=>0x6170,
+0x88D5=>0x6613,
+0x88D6=>0x6905,
+0x88D7=>0x70BA,
+0x88D8=>0x754F,
+0x88D9=>0x7570,
+0x88DA=>0x79FB,
+0x88DB=>0x7DAD,
+0x88DC=>0x7DEF,
+0x88DD=>0x80C3,
+0x88DE=>0x840E,
+0x88DF=>0x8863,
+0x88E0=>0x8B02,
+0x88E1=>0x9055,
+0x88E2=>0x907A,
+0x88E3=>0x533B,
+0x88E4=>0x4E95,
+0x88E5=>0x4EA5,
+0x88E6=>0x57DF,
+0x88E7=>0x80B2,
+0x88E8=>0x90C1,
+0x88E9=>0x78EF,
+0x88EA=>0x4E00,
+0x88EB=>0x58F1,
+0x88EC=>0x6EA2,
+0x88ED=>0x9038,
+0x88EE=>0x7A32,
+0x88EF=>0x8328,
+0x88F0=>0x828B,
+0x88F1=>0x9C2F,
+0x88F2=>0x5141,
+0x88F3=>0x5370,
+0x88F4=>0x54BD,
+0x88F5=>0x54E1,
+0x88F6=>0x56E0,
+0x88F7=>0x59FB,
+0x88F8=>0x5F15,
+0x88F9=>0x98F2,
+0x88FA=>0x6DEB,
+0x88FB=>0x80E4,
+0x88FC=>0x852D,
+0x8940=>0x9662,
+0x8941=>0x9670,
+0x8942=>0x96A0,
+0x8943=>0x97FB,
+0x8944=>0x540B,
+0x8945=>0x53F3,
+0x8946=>0x5B87,
+0x8947=>0x70CF,
+0x8948=>0x7FBD,
+0x8949=>0x8FC2,
+0x894A=>0x96E8,
+0x894B=>0x536F,
+0x894C=>0x9D5C,
+0x894D=>0x7ABA,
+0x894E=>0x4E11,
+0x894F=>0x7893,
+0x8950=>0x81FC,
+0x8951=>0x6E26,
+0x8952=>0x5618,
+0x8953=>0x5504,
+0x8954=>0x6B1D,
+0x8955=>0x851A,
+0x8956=>0x9C3B,
+0x8957=>0x59E5,
+0x8958=>0x53A9,
+0x8959=>0x6D66,
+0x895A=>0x74DC,
+0x895B=>0x958F,
+0x895C=>0x5642,
+0x895D=>0x4E91,
+0x895E=>0x904B,
+0x895F=>0x96F2,
+0x8960=>0x834F,
+0x8961=>0x990C,
+0x8962=>0x53E1,
+0x8963=>0x55B6,
+0x8964=>0x5B30,
+0x8965=>0x5F71,
+0x8966=>0x6620,
+0x8967=>0x66F3,
+0x8968=>0x6804,
+0x8969=>0x6C38,
+0x896A=>0x6CF3,
+0x896B=>0x6D29,
+0x896C=>0x745B,
+0x896D=>0x76C8,
+0x896E=>0x7A4E,
+0x896F=>0x9834,
+0x8970=>0x82F1,
+0x8971=>0x885B,
+0x8972=>0x8A60,
+0x8973=>0x92ED,
+0x8974=>0x6DB2,
+0x8975=>0x75AB,
+0x8976=>0x76CA,
+0x8977=>0x99C5,
+0x8978=>0x60A6,
+0x8979=>0x8B01,
+0x897A=>0x8D8A,
+0x897B=>0x95B2,
+0x897C=>0x698E,
+0x897D=>0x53AD,
+0x897E=>0x5186,
+0x8980=>0x5712,
+0x8981=>0x5830,
+0x8982=>0x5944,
+0x8983=>0x5BB4,
+0x8984=>0x5EF6,
+0x8985=>0x6028,
+0x8986=>0x63A9,
+0x8987=>0x63F4,
+0x8988=>0x6CBF,
+0x8989=>0x6F14,
+0x898A=>0x708E,
+0x898B=>0x7114,
+0x898C=>0x7159,
+0x898D=>0x71D5,
+0x898E=>0x733F,
+0x898F=>0x7E01,
+0x8990=>0x8276,
+0x8991=>0x82D1,
+0x8992=>0x8597,
+0x8993=>0x9060,
+0x8994=>0x925B,
+0x8995=>0x9D1B,
+0x8996=>0x5869,
+0x8997=>0x65BC,
+0x8998=>0x6C5A,
+0x8999=>0x7525,
+0x899A=>0x51F9,
+0x899B=>0x592E,
+0x899C=>0x5965,
+0x899D=>0x5F80,
+0x899E=>0x5FDC,
+0x899F=>0x62BC,
+0x89A0=>0x65FA,
+0x89A1=>0x6A2A,
+0x89A2=>0x6B27,
+0x89A3=>0x6BB4,
+0x89A4=>0x738B,
+0x89A5=>0x7FC1,
+0x89A6=>0x8956,
+0x89A7=>0x9D2C,
+0x89A8=>0x9D0E,
+0x89A9=>0x9EC4,
+0x89AA=>0x5CA1,
+0x89AB=>0x6C96,
+0x89AC=>0x837B,
+0x89AD=>0x5104,
+0x89AE=>0x5C4B,
+0x89AF=>0x61B6,
+0x89B0=>0x81C6,
+0x89B1=>0x6876,
+0x89B2=>0x7261,
+0x89B3=>0x4E59,
+0x89B4=>0x4FFA,
+0x89B5=>0x5378,
+0x89B6=>0x6069,
+0x89B7=>0x6E29,
+0x89B8=>0x7A4F,
+0x89B9=>0x97F3,
+0x89BA=>0x4E0B,
+0x89BB=>0x5316,
+0x89BC=>0x4EEE,
+0x89BD=>0x4F55,
+0x89BE=>0x4F3D,
+0x89BF=>0x4FA1,
+0x89C0=>0x4F73,
+0x89C1=>0x52A0,
+0x89C2=>0x53EF,
+0x89C3=>0x5609,
+0x89C4=>0x590F,
+0x89C5=>0x5AC1,
+0x89C6=>0x5BB6,
+0x89C7=>0x5BE1,
+0x89C8=>0x79D1,
+0x89C9=>0x6687,
+0x89CA=>0x679C,
+0x89CB=>0x67B6,
+0x89CC=>0x6B4C,
+0x89CD=>0x6CB3,
+0x89CE=>0x706B,
+0x89CF=>0x73C2,
+0x89D0=>0x798D,
+0x89D1=>0x79BE,
+0x89D2=>0x7A3C,
+0x89D3=>0x7B87,
+0x89D4=>0x82B1,
+0x89D5=>0x82DB,
+0x89D6=>0x8304,
+0x89D7=>0x8377,
+0x89D8=>0x83EF,
+0x89D9=>0x83D3,
+0x89DA=>0x8766,
+0x89DB=>0x8AB2,
+0x89DC=>0x5629,
+0x89DD=>0x8CA8,
+0x89DE=>0x8FE6,
+0x89DF=>0x904E,
+0x89E0=>0x971E,
+0x89E1=>0x868A,
+0x89E2=>0x4FC4,
+0x89E3=>0x5CE8,
+0x89E4=>0x6211,
+0x89E5=>0x7259,
+0x89E6=>0x753B,
+0x89E7=>0x81E5,
+0x89E8=>0x82BD,
+0x89E9=>0x86FE,
+0x89EA=>0x8CC0,
+0x89EB=>0x96C5,
+0x89EC=>0x9913,
+0x89ED=>0x99D5,
+0x89EE=>0x4ECB,
+0x89EF=>0x4F1A,
+0x89F0=>0x89E3,
+0x89F1=>0x56DE,
+0x89F2=>0x584A,
+0x89F3=>0x58CA,
+0x89F4=>0x5EFB,
+0x89F5=>0x5FEB,
+0x89F6=>0x602A,
+0x89F7=>0x6094,
+0x89F8=>0x6062,
+0x89F9=>0x61D0,
+0x89FA=>0x6212,
+0x89FB=>0x62D0,
+0x89FC=>0x6539,
+0x8A40=>0x9B41,
+0x8A41=>0x6666,
+0x8A42=>0x68B0,
+0x8A43=>0x6D77,
+0x8A44=>0x7070,
+0x8A45=>0x754C,
+0x8A46=>0x7686,
+0x8A47=>0x7D75,
+0x8A48=>0x82A5,
+0x8A49=>0x87F9,
+0x8A4A=>0x958B,
+0x8A4B=>0x968E,
+0x8A4C=>0x8C9D,
+0x8A4D=>0x51F1,
+0x8A4E=>0x52BE,
+0x8A4F=>0x5916,
+0x8A50=>0x54B3,
+0x8A51=>0x5BB3,
+0x8A52=>0x5D16,
+0x8A53=>0x6168,
+0x8A54=>0x6982,
+0x8A55=>0x6DAF,
+0x8A56=>0x788D,
+0x8A57=>0x84CB,
+0x8A58=>0x8857,
+0x8A59=>0x8A72,
+0x8A5A=>0x93A7,
+0x8A5B=>0x9AB8,
+0x8A5C=>0x6D6C,
+0x8A5D=>0x99A8,
+0x8A5E=>0x86D9,
+0x8A5F=>0x57A3,
+0x8A60=>0x67FF,
+0x8A61=>0x86CE,
+0x8A62=>0x920E,
+0x8A63=>0x5283,
+0x8A64=>0x5687,
+0x8A65=>0x5404,
+0x8A66=>0x5ED3,
+0x8A67=>0x62E1,
+0x8A68=>0x64B9,
+0x8A69=>0x683C,
+0x8A6A=>0x6838,
+0x8A6B=>0x6BBB,
+0x8A6C=>0x7372,
+0x8A6D=>0x78BA,
+0x8A6E=>0x7A6B,
+0x8A6F=>0x899A,
+0x8A70=>0x89D2,
+0x8A71=>0x8D6B,
+0x8A72=>0x8F03,
+0x8A73=>0x90ED,
+0x8A74=>0x95A3,
+0x8A75=>0x9694,
+0x8A76=>0x9769,
+0x8A77=>0x5B66,
+0x8A78=>0x5CB3,
+0x8A79=>0x697D,
+0x8A7A=>0x984D,
+0x8A7B=>0x984E,
+0x8A7C=>0x639B,
+0x8A7D=>0x7B20,
+0x8A7E=>0x6A2B,
+0x8A80=>0x6A7F,
+0x8A81=>0x68B6,
+0x8A82=>0x9C0D,
+0x8A83=>0x6F5F,
+0x8A84=>0x5272,
+0x8A85=>0x559D,
+0x8A86=>0x6070,
+0x8A87=>0x62EC,
+0x8A88=>0x6D3B,
+0x8A89=>0x6E07,
+0x8A8A=>0x6ED1,
+0x8A8B=>0x845B,
+0x8A8C=>0x8910,
+0x8A8D=>0x8F44,
+0x8A8E=>0x4E14,
+0x8A8F=>0x9C39,
+0x8A90=>0x53F6,
+0x8A91=>0x691B,
+0x8A92=>0x6A3A,
+0x8A93=>0x9784,
+0x8A94=>0x682A,
+0x8A95=>0x515C,
+0x8A96=>0x7AC3,
+0x8A97=>0x84B2,
+0x8A98=>0x91DC,
+0x8A99=>0x938C,
+0x8A9A=>0x565B,
+0x8A9B=>0x9D28,
+0x8A9C=>0x6822,
+0x8A9D=>0x8305,
+0x8A9E=>0x8431,
+0x8A9F=>0x7CA5,
+0x8AA0=>0x5208,
+0x8AA1=>0x82C5,
+0x8AA2=>0x74E6,
+0x8AA3=>0x4E7E,
+0x8AA4=>0x4F83,
+0x8AA5=>0x51A0,
+0x8AA6=>0x5BD2,
+0x8AA7=>0x520A,
+0x8AA8=>0x52D8,
+0x8AA9=>0x52E7,
+0x8AAA=>0x5DFB,
+0x8AAB=>0x559A,
+0x8AAC=>0x582A,
+0x8AAD=>0x59E6,
+0x8AAE=>0x5B8C,
+0x8AAF=>0x5B98,
+0x8AB0=>0x5BDB,
+0x8AB1=>0x5E72,
+0x8AB2=>0x5E79,
+0x8AB3=>0x60A3,
+0x8AB4=>0x611F,
+0x8AB5=>0x6163,
+0x8AB6=>0x61BE,
+0x8AB7=>0x63DB,
+0x8AB8=>0x6562,
+0x8AB9=>0x67D1,
+0x8ABA=>0x6853,
+0x8ABB=>0x68FA,
+0x8ABC=>0x6B3E,
+0x8ABD=>0x6B53,
+0x8ABE=>0x6C57,
+0x8ABF=>0x6F22,
+0x8AC0=>0x6F97,
+0x8AC1=>0x6F45,
+0x8AC2=>0x74B0,
+0x8AC3=>0x7518,
+0x8AC4=>0x76E3,
+0x8AC5=>0x770B,
+0x8AC6=>0x7AFF,
+0x8AC7=>0x7BA1,
+0x8AC8=>0x7C21,
+0x8AC9=>0x7DE9,
+0x8ACA=>0x7F36,
+0x8ACB=>0x7FF0,
+0x8ACC=>0x809D,
+0x8ACD=>0x8266,
+0x8ACE=>0x839E,
+0x8ACF=>0x89B3,
+0x8AD0=>0x8ACC,
+0x8AD1=>0x8CAB,
+0x8AD2=>0x9084,
+0x8AD3=>0x9451,
+0x8AD4=>0x9593,
+0x8AD5=>0x9591,
+0x8AD6=>0x95A2,
+0x8AD7=>0x9665,
+0x8AD8=>0x97D3,
+0x8AD9=>0x9928,
+0x8ADA=>0x8218,
+0x8ADB=>0x4E38,
+0x8ADC=>0x542B,
+0x8ADD=>0x5CB8,
+0x8ADE=>0x5DCC,
+0x8ADF=>0x73A9,
+0x8AE0=>0x764C,
+0x8AE1=>0x773C,
+0x8AE2=>0x5CA9,
+0x8AE3=>0x7FEB,
+0x8AE4=>0x8D0B,
+0x8AE5=>0x96C1,
+0x8AE6=>0x9811,
+0x8AE7=>0x9854,
+0x8AE8=>0x9858,
+0x8AE9=>0x4F01,
+0x8AEA=>0x4F0E,
+0x8AEB=>0x5371,
+0x8AEC=>0x559C,
+0x8AED=>0x5668,
+0x8AEE=>0x57FA,
+0x8AEF=>0x5947,
+0x8AF0=>0x5B09,
+0x8AF1=>0x5BC4,
+0x8AF2=>0x5C90,
+0x8AF3=>0x5E0C,
+0x8AF4=>0x5E7E,
+0x8AF5=>0x5FCC,
+0x8AF6=>0x63EE,
+0x8AF7=>0x673A,
+0x8AF8=>0x65D7,
+0x8AF9=>0x65E2,
+0x8AFA=>0x671F,
+0x8AFB=>0x68CB,
+0x8AFC=>0x68C4,
+0x8B40=>0x6A5F,
+0x8B41=>0x5E30,
+0x8B42=>0x6BC5,
+0x8B43=>0x6C17,
+0x8B44=>0x6C7D,
+0x8B45=>0x757F,
+0x8B46=>0x7948,
+0x8B47=>0x5B63,
+0x8B48=>0x7A00,
+0x8B49=>0x7D00,
+0x8B4A=>0x5FBD,
+0x8B4B=>0x898F,
+0x8B4C=>0x8A18,
+0x8B4D=>0x8CB4,
+0x8B4E=>0x8D77,
+0x8B4F=>0x8ECC,
+0x8B50=>0x8F1D,
+0x8B51=>0x98E2,
+0x8B52=>0x9A0E,
+0x8B53=>0x9B3C,
+0x8B54=>0x4E80,
+0x8B55=>0x507D,
+0x8B56=>0x5100,
+0x8B57=>0x5993,
+0x8B58=>0x5B9C,
+0x8B59=>0x622F,
+0x8B5A=>0x6280,
+0x8B5B=>0x64EC,
+0x8B5C=>0x6B3A,
+0x8B5D=>0x72A0,
+0x8B5E=>0x7591,
+0x8B5F=>0x7947,
+0x8B60=>0x7FA9,
+0x8B61=>0x87FB,
+0x8B62=>0x8ABC,
+0x8B63=>0x8B70,
+0x8B64=>0x63AC,
+0x8B65=>0x83CA,
+0x8B66=>0x97A0,
+0x8B67=>0x5409,
+0x8B68=>0x5403,
+0x8B69=>0x55AB,
+0x8B6A=>0x6854,
+0x8B6B=>0x6A58,
+0x8B6C=>0x8A70,
+0x8B6D=>0x7827,
+0x8B6E=>0x6775,
+0x8B6F=>0x9ECD,
+0x8B70=>0x5374,
+0x8B71=>0x5BA2,
+0x8B72=>0x811A,
+0x8B73=>0x8650,
+0x8B74=>0x9006,
+0x8B75=>0x4E18,
+0x8B76=>0x4E45,
+0x8B77=>0x4EC7,
+0x8B78=>0x4F11,
+0x8B79=>0x53CA,
+0x8B7A=>0x5438,
+0x8B7B=>0x5BAE,
+0x8B7C=>0x5F13,
+0x8B7D=>0x6025,
+0x8B7E=>0x6551,
+0x8B80=>0x673D,
+0x8B81=>0x6C42,
+0x8B82=>0x6C72,
+0x8B83=>0x6CE3,
+0x8B84=>0x7078,
+0x8B85=>0x7403,
+0x8B86=>0x7A76,
+0x8B87=>0x7AAE,
+0x8B88=>0x7B08,
+0x8B89=>0x7D1A,
+0x8B8A=>0x7CFE,
+0x8B8B=>0x7D66,
+0x8B8C=>0x65E7,
+0x8B8D=>0x725B,
+0x8B8E=>0x53BB,
+0x8B8F=>0x5C45,
+0x8B90=>0x5DE8,
+0x8B91=>0x62D2,
+0x8B92=>0x62E0,
+0x8B93=>0x6319,
+0x8B94=>0x6E20,
+0x8B95=>0x865A,
+0x8B96=>0x8A31,
+0x8B97=>0x8DDD,
+0x8B98=>0x92F8,
+0x8B99=>0x6F01,
+0x8B9A=>0x79A6,
+0x8B9B=>0x9B5A,
+0x8B9C=>0x4EA8,
+0x8B9D=>0x4EAB,
+0x8B9E=>0x4EAC,
+0x8B9F=>0x4F9B,
+0x8BA0=>0x4FA0,
+0x8BA1=>0x50D1,
+0x8BA2=>0x5147,
+0x8BA3=>0x7AF6,
+0x8BA4=>0x5171,
+0x8BA5=>0x51F6,
+0x8BA6=>0x5354,
+0x8BA7=>0x5321,
+0x8BA8=>0x537F,
+0x8BA9=>0x53EB,
+0x8BAA=>0x55AC,
+0x8BAB=>0x5883,
+0x8BAC=>0x5CE1,
+0x8BAD=>0x5F37,
+0x8BAE=>0x5F4A,
+0x8BAF=>0x602F,
+0x8BB0=>0x6050,
+0x8BB1=>0x606D,
+0x8BB2=>0x631F,
+0x8BB3=>0x6559,
+0x8BB4=>0x6A4B,
+0x8BB5=>0x6CC1,
+0x8BB6=>0x72C2,
+0x8BB7=>0x72ED,
+0x8BB8=>0x77EF,
+0x8BB9=>0x80F8,
+0x8BBA=>0x8105,
+0x8BBB=>0x8208,
+0x8BBC=>0x854E,
+0x8BBD=>0x90F7,
+0x8BBE=>0x93E1,
+0x8BBF=>0x97FF,
+0x8BC0=>0x9957,
+0x8BC1=>0x9A5A,
+0x8BC2=>0x4EF0,
+0x8BC3=>0x51DD,
+0x8BC4=>0x5C2D,
+0x8BC5=>0x6681,
+0x8BC6=>0x696D,
+0x8BC7=>0x5C40,
+0x8BC8=>0x66F2,
+0x8BC9=>0x6975,
+0x8BCA=>0x7389,
+0x8BCB=>0x6850,
+0x8BCC=>0x7C81,
+0x8BCD=>0x50C5,
+0x8BCE=>0x52E4,
+0x8BCF=>0x5747,
+0x8BD0=>0x5DFE,
+0x8BD1=>0x9326,
+0x8BD2=>0x65A4,
+0x8BD3=>0x6B23,
+0x8BD4=>0x6B3D,
+0x8BD5=>0x7434,
+0x8BD6=>0x7981,
+0x8BD7=>0x79BD,
+0x8BD8=>0x7B4B,
+0x8BD9=>0x7DCA,
+0x8BDA=>0x82B9,
+0x8BDB=>0x83CC,
+0x8BDC=>0x887F,
+0x8BDD=>0x895F,
+0x8BDE=>0x8B39,
+0x8BDF=>0x8FD1,
+0x8BE0=>0x91D1,
+0x8BE1=>0x541F,
+0x8BE2=>0x9280,
+0x8BE3=>0x4E5D,
+0x8BE4=>0x5036,
+0x8BE5=>0x53E5,
+0x8BE6=>0x533A,
+0x8BE7=>0x72D7,
+0x8BE8=>0x7396,
+0x8BE9=>0x77E9,
+0x8BEA=>0x82E6,
+0x8BEB=>0x8EAF,
+0x8BEC=>0x99C6,
+0x8BED=>0x99C8,
+0x8BEE=>0x99D2,
+0x8BEF=>0x5177,
+0x8BF0=>0x611A,
+0x8BF1=>0x865E,
+0x8BF2=>0x55B0,
+0x8BF3=>0x7A7A,
+0x8BF4=>0x5076,
+0x8BF5=>0x5BD3,
+0x8BF6=>0x9047,
+0x8BF7=>0x9685,
+0x8BF8=>0x4E32,
+0x8BF9=>0x6ADB,
+0x8BFA=>0x91E7,
+0x8BFB=>0x5C51,
+0x8BFC=>0x5C48,
+0x8C40=>0x6398,
+0x8C41=>0x7A9F,
+0x8C42=>0x6C93,
+0x8C43=>0x9774,
+0x8C44=>0x8F61,
+0x8C45=>0x7AAA,
+0x8C46=>0x718A,
+0x8C47=>0x9688,
+0x8C48=>0x7C82,
+0x8C49=>0x6817,
+0x8C4A=>0x7E70,
+0x8C4B=>0x6851,
+0x8C4C=>0x936C,
+0x8C4D=>0x52F2,
+0x8C4E=>0x541B,
+0x8C4F=>0x85AB,
+0x8C50=>0x8A13,
+0x8C51=>0x7FA4,
+0x8C52=>0x8ECD,
+0x8C53=>0x90E1,
+0x8C54=>0x5366,
+0x8C55=>0x8888,
+0x8C56=>0x7941,
+0x8C57=>0x4FC2,
+0x8C58=>0x50BE,
+0x8C59=>0x5211,
+0x8C5A=>0x5144,
+0x8C5B=>0x5553,
+0x8C5C=>0x572D,
+0x8C5D=>0x73EA,
+0x8C5E=>0x578B,
+0x8C5F=>0x5951,
+0x8C60=>0x5F62,
+0x8C61=>0x5F84,
+0x8C62=>0x6075,
+0x8C63=>0x6176,
+0x8C64=>0x6167,
+0x8C65=>0x61A9,
+0x8C66=>0x63B2,
+0x8C67=>0x643A,
+0x8C68=>0x656C,
+0x8C69=>0x666F,
+0x8C6A=>0x6842,
+0x8C6B=>0x6E13,
+0x8C6C=>0x7566,
+0x8C6D=>0x7A3D,
+0x8C6E=>0x7CFB,
+0x8C6F=>0x7D4C,
+0x8C70=>0x7D99,
+0x8C71=>0x7E4B,
+0x8C72=>0x7F6B,
+0x8C73=>0x830E,
+0x8C74=>0x834A,
+0x8C75=>0x86CD,
+0x8C76=>0x8A08,
+0x8C77=>0x8A63,
+0x8C78=>0x8B66,
+0x8C79=>0x8EFD,
+0x8C7A=>0x981A,
+0x8C7B=>0x9D8F,
+0x8C7C=>0x82B8,
+0x8C7D=>0x8FCE,
+0x8C7E=>0x9BE8,
+0x8C80=>0x5287,
+0x8C81=>0x621F,
+0x8C82=>0x6483,
+0x8C83=>0x6FC0,
+0x8C84=>0x9699,
+0x8C85=>0x6841,
+0x8C86=>0x5091,
+0x8C87=>0x6B20,
+0x8C88=>0x6C7A,
+0x8C89=>0x6F54,
+0x8C8A=>0x7A74,
+0x8C8B=>0x7D50,
+0x8C8C=>0x8840,
+0x8C8D=>0x8A23,
+0x8C8E=>0x6708,
+0x8C8F=>0x4EF6,
+0x8C90=>0x5039,
+0x8C91=>0x5026,
+0x8C92=>0x5065,
+0x8C93=>0x517C,
+0x8C94=>0x5238,
+0x8C95=>0x5263,
+0x8C96=>0x55A7,
+0x8C97=>0x570F,
+0x8C98=>0x5805,
+0x8C99=>0x5ACC,
+0x8C9A=>0x5EFA,
+0x8C9B=>0x61B2,
+0x8C9C=>0x61F8,
+0x8C9D=>0x62F3,
+0x8C9E=>0x6372,
+0x8C9F=>0x691C,
+0x8CA0=>0x6A29,
+0x8CA1=>0x727D,
+0x8CA2=>0x72AC,
+0x8CA3=>0x732E,
+0x8CA4=>0x7814,
+0x8CA5=>0x786F,
+0x8CA6=>0x7D79,
+0x8CA7=>0x770C,
+0x8CA8=>0x80A9,
+0x8CA9=>0x898B,
+0x8CAA=>0x8B19,
+0x8CAB=>0x8CE2,
+0x8CAC=>0x8ED2,
+0x8CAD=>0x9063,
+0x8CAE=>0x9375,
+0x8CAF=>0x967A,
+0x8CB0=>0x9855,
+0x8CB1=>0x9A13,
+0x8CB2=>0x9E78,
+0x8CB3=>0x5143,
+0x8CB4=>0x539F,
+0x8CB5=>0x53B3,
+0x8CB6=>0x5E7B,
+0x8CB7=>0x5F26,
+0x8CB8=>0x6E1B,
+0x8CB9=>0x6E90,
+0x8CBA=>0x7384,
+0x8CBB=>0x73FE,
+0x8CBC=>0x7D43,
+0x8CBD=>0x8237,
+0x8CBE=>0x8A00,
+0x8CBF=>0x8AFA,
+0x8CC0=>0x9650,
+0x8CC1=>0x4E4E,
+0x8CC2=>0x500B,
+0x8CC3=>0x53E4,
+0x8CC4=>0x547C,
+0x8CC5=>0x56FA,
+0x8CC6=>0x59D1,
+0x8CC7=>0x5B64,
+0x8CC8=>0x5DF1,
+0x8CC9=>0x5EAB,
+0x8CCA=>0x5F27,
+0x8CCB=>0x6238,
+0x8CCC=>0x6545,
+0x8CCD=>0x67AF,
+0x8CCE=>0x6E56,
+0x8CCF=>0x72D0,
+0x8CD0=>0x7CCA,
+0x8CD1=>0x88B4,
+0x8CD2=>0x80A1,
+0x8CD3=>0x80E1,
+0x8CD4=>0x83F0,
+0x8CD5=>0x864E,
+0x8CD6=>0x8A87,
+0x8CD7=>0x8DE8,
+0x8CD8=>0x9237,
+0x8CD9=>0x96C7,
+0x8CDA=>0x9867,
+0x8CDB=>0x9F13,
+0x8CDC=>0x4E94,
+0x8CDD=>0x4E92,
+0x8CDE=>0x4F0D,
+0x8CDF=>0x5348,
+0x8CE0=>0x5449,
+0x8CE1=>0x543E,
+0x8CE2=>0x5A2F,
+0x8CE3=>0x5F8C,
+0x8CE4=>0x5FA1,
+0x8CE5=>0x609F,
+0x8CE6=>0x68A7,
+0x8CE7=>0x6A8E,
+0x8CE8=>0x745A,
+0x8CE9=>0x7881,
+0x8CEA=>0x8A9E,
+0x8CEB=>0x8AA4,
+0x8CEC=>0x8B77,
+0x8CED=>0x9190,
+0x8CEE=>0x4E5E,
+0x8CEF=>0x9BC9,
+0x8CF0=>0x4EA4,
+0x8CF1=>0x4F7C,
+0x8CF2=>0x4FAF,
+0x8CF3=>0x5019,
+0x8CF4=>0x5016,
+0x8CF5=>0x5149,
+0x8CF6=>0x516C,
+0x8CF7=>0x529F,
+0x8CF8=>0x52B9,
+0x8CF9=>0x52FE,
+0x8CFA=>0x539A,
+0x8CFB=>0x53E3,
+0x8CFC=>0x5411,
+0x8D40=>0x540E,
+0x8D41=>0x5589,
+0x8D42=>0x5751,
+0x8D43=>0x57A2,
+0x8D44=>0x597D,
+0x8D45=>0x5B54,
+0x8D46=>0x5B5D,
+0x8D47=>0x5B8F,
+0x8D48=>0x5DE5,
+0x8D49=>0x5DE7,
+0x8D4A=>0x5DF7,
+0x8D4B=>0x5E78,
+0x8D4C=>0x5E83,
+0x8D4D=>0x5E9A,
+0x8D4E=>0x5EB7,
+0x8D4F=>0x5F18,
+0x8D50=>0x6052,
+0x8D51=>0x614C,
+0x8D52=>0x6297,
+0x8D53=>0x62D8,
+0x8D54=>0x63A7,
+0x8D55=>0x653B,
+0x8D56=>0x6602,
+0x8D57=>0x6643,
+0x8D58=>0x66F4,
+0x8D59=>0x676D,
+0x8D5A=>0x6821,
+0x8D5B=>0x6897,
+0x8D5C=>0x69CB,
+0x8D5D=>0x6C5F,
+0x8D5E=>0x6D2A,
+0x8D5F=>0x6D69,
+0x8D60=>0x6E2F,
+0x8D61=>0x6E9D,
+0x8D62=>0x7532,
+0x8D63=>0x7687,
+0x8D64=>0x786C,
+0x8D65=>0x7A3F,
+0x8D66=>0x7CE0,
+0x8D67=>0x7D05,
+0x8D68=>0x7D18,
+0x8D69=>0x7D5E,
+0x8D6A=>0x7DB1,
+0x8D6B=>0x8015,
+0x8D6C=>0x8003,
+0x8D6D=>0x80AF,
+0x8D6E=>0x80B1,
+0x8D6F=>0x8154,
+0x8D70=>0x818F,
+0x8D71=>0x822A,
+0x8D72=>0x8352,
+0x8D73=>0x884C,
+0x8D74=>0x8861,
+0x8D75=>0x8B1B,
+0x8D76=>0x8CA2,
+0x8D77=>0x8CFC,
+0x8D78=>0x90CA,
+0x8D79=>0x9175,
+0x8D7A=>0x9271,
+0x8D7B=>0x783F,
+0x8D7C=>0x92FC,
+0x8D7D=>0x95A4,
+0x8D7E=>0x964D,
+0x8D80=>0x9805,
+0x8D81=>0x9999,
+0x8D82=>0x9AD8,
+0x8D83=>0x9D3B,
+0x8D84=>0x525B,
+0x8D85=>0x52AB,
+0x8D86=>0x53F7,
+0x8D87=>0x5408,
+0x8D88=>0x58D5,
+0x8D89=>0x62F7,
+0x8D8A=>0x6FE0,
+0x8D8B=>0x8C6A,
+0x8D8C=>0x8F5F,
+0x8D8D=>0x9EB9,
+0x8D8E=>0x514B,
+0x8D8F=>0x523B,
+0x8D90=>0x544A,
+0x8D91=>0x56FD,
+0x8D92=>0x7A40,
+0x8D93=>0x9177,
+0x8D94=>0x9D60,
+0x8D95=>0x9ED2,
+0x8D96=>0x7344,
+0x8D97=>0x6F09,
+0x8D98=>0x8170,
+0x8D99=>0x7511,
+0x8D9A=>0x5FFD,
+0x8D9B=>0x60DA,
+0x8D9C=>0x9AA8,
+0x8D9D=>0x72DB,
+0x8D9E=>0x8FBC,
+0x8D9F=>0x6B64,
+0x8DA0=>0x9803,
+0x8DA1=>0x4ECA,
+0x8DA2=>0x56F0,
+0x8DA3=>0x5764,
+0x8DA4=>0x58BE,
+0x8DA5=>0x5A5A,
+0x8DA6=>0x6068,
+0x8DA7=>0x61C7,
+0x8DA8=>0x660F,
+0x8DA9=>0x6606,
+0x8DAA=>0x6839,
+0x8DAB=>0x68B1,
+0x8DAC=>0x6DF7,
+0x8DAD=>0x75D5,
+0x8DAE=>0x7D3A,
+0x8DAF=>0x826E,
+0x8DB0=>0x9B42,
+0x8DB1=>0x4E9B,
+0x8DB2=>0x4F50,
+0x8DB3=>0x53C9,
+0x8DB4=>0x5506,
+0x8DB5=>0x5D6F,
+0x8DB6=>0x5DE6,
+0x8DB7=>0x5DEE,
+0x8DB8=>0x67FB,
+0x8DB9=>0x6C99,
+0x8DBA=>0x7473,
+0x8DBB=>0x7802,
+0x8DBC=>0x8A50,
+0x8DBD=>0x9396,
+0x8DBE=>0x88DF,
+0x8DBF=>0x5750,
+0x8DC0=>0x5EA7,
+0x8DC1=>0x632B,
+0x8DC2=>0x50B5,
+0x8DC3=>0x50AC,
+0x8DC4=>0x518D,
+0x8DC5=>0x6700,
+0x8DC6=>0x54C9,
+0x8DC7=>0x585E,
+0x8DC8=>0x59BB,
+0x8DC9=>0x5BB0,
+0x8DCA=>0x5F69,
+0x8DCB=>0x624D,
+0x8DCC=>0x63A1,
+0x8DCD=>0x683D,
+0x8DCE=>0x6B73,
+0x8DCF=>0x6E08,
+0x8DD0=>0x707D,
+0x8DD1=>0x91C7,
+0x8DD2=>0x7280,
+0x8DD3=>0x7815,
+0x8DD4=>0x7826,
+0x8DD5=>0x796D,
+0x8DD6=>0x658E,
+0x8DD7=>0x7D30,
+0x8DD8=>0x83DC,
+0x8DD9=>0x88C1,
+0x8DDA=>0x8F09,
+0x8DDB=>0x969B,
+0x8DDC=>0x5264,
+0x8DDD=>0x5728,
+0x8DDE=>0x6750,
+0x8DDF=>0x7F6A,
+0x8DE0=>0x8CA1,
+0x8DE1=>0x51B4,
+0x8DE2=>0x5742,
+0x8DE3=>0x962A,
+0x8DE4=>0x583A,
+0x8DE5=>0x698A,
+0x8DE6=>0x80B4,
+0x8DE7=>0x54B2,
+0x8DE8=>0x5D0E,
+0x8DE9=>0x57FC,
+0x8DEA=>0x7895,
+0x8DEB=>0x9DFA,
+0x8DEC=>0x4F5C,
+0x8DED=>0x524A,
+0x8DEE=>0x548B,
+0x8DEF=>0x643E,
+0x8DF0=>0x6628,
+0x8DF1=>0x6714,
+0x8DF2=>0x67F5,
+0x8DF3=>0x7A84,
+0x8DF4=>0x7B56,
+0x8DF5=>0x7D22,
+0x8DF6=>0x932F,
+0x8DF7=>0x685C,
+0x8DF8=>0x9BAD,
+0x8DF9=>0x7B39,
+0x8DFA=>0x5319,
+0x8DFB=>0x518A,
+0x8DFC=>0x5237,
+0x8E40=>0x5BDF,
+0x8E41=>0x62F6,
+0x8E42=>0x64AE,
+0x8E43=>0x64E6,
+0x8E44=>0x672D,
+0x8E45=>0x6BBA,
+0x8E46=>0x85A9,
+0x8E47=>0x96D1,
+0x8E48=>0x7690,
+0x8E49=>0x9BD6,
+0x8E4A=>0x634C,
+0x8E4B=>0x9306,
+0x8E4C=>0x9BAB,
+0x8E4D=>0x76BF,
+0x8E4E=>0x6652,
+0x8E4F=>0x4E09,
+0x8E50=>0x5098,
+0x8E51=>0x53C2,
+0x8E52=>0x5C71,
+0x8E53=>0x60E8,
+0x8E54=>0x6492,
+0x8E55=>0x6563,
+0x8E56=>0x685F,
+0x8E57=>0x71E6,
+0x8E58=>0x73CA,
+0x8E59=>0x7523,
+0x8E5A=>0x7B97,
+0x8E5B=>0x7E82,
+0x8E5C=>0x8695,
+0x8E5D=>0x8B83,
+0x8E5E=>0x8CDB,
+0x8E5F=>0x9178,
+0x8E60=>0x9910,
+0x8E61=>0x65AC,
+0x8E62=>0x66AB,
+0x8E63=>0x6B8B,
+0x8E64=>0x4ED5,
+0x8E65=>0x4ED4,
+0x8E66=>0x4F3A,
+0x8E67=>0x4F7F,
+0x8E68=>0x523A,
+0x8E69=>0x53F8,
+0x8E6A=>0x53F2,
+0x8E6B=>0x55E3,
+0x8E6C=>0x56DB,
+0x8E6D=>0x58EB,
+0x8E6E=>0x59CB,
+0x8E6F=>0x59C9,
+0x8E70=>0x59FF,
+0x8E71=>0x5B50,
+0x8E72=>0x5C4D,
+0x8E73=>0x5E02,
+0x8E74=>0x5E2B,
+0x8E75=>0x5FD7,
+0x8E76=>0x601D,
+0x8E77=>0x6307,
+0x8E78=>0x652F,
+0x8E79=>0x5B5C,
+0x8E7A=>0x65AF,
+0x8E7B=>0x65BD,
+0x8E7C=>0x65E8,
+0x8E7D=>0x679D,
+0x8E7E=>0x6B62,
+0x8E80=>0x6B7B,
+0x8E81=>0x6C0F,
+0x8E82=>0x7345,
+0x8E83=>0x7949,
+0x8E84=>0x79C1,
+0x8E85=>0x7CF8,
+0x8E86=>0x7D19,
+0x8E87=>0x7D2B,
+0x8E88=>0x80A2,
+0x8E89=>0x8102,
+0x8E8A=>0x81F3,
+0x8E8B=>0x8996,
+0x8E8C=>0x8A5E,
+0x8E8D=>0x8A69,
+0x8E8E=>0x8A66,
+0x8E8F=>0x8A8C,
+0x8E90=>0x8AEE,
+0x8E91=>0x8CC7,
+0x8E92=>0x8CDC,
+0x8E93=>0x96CC,
+0x8E94=>0x98FC,
+0x8E95=>0x6B6F,
+0x8E96=>0x4E8B,
+0x8E97=>0x4F3C,
+0x8E98=>0x4F8D,
+0x8E99=>0x5150,
+0x8E9A=>0x5B57,
+0x8E9B=>0x5BFA,
+0x8E9C=>0x6148,
+0x8E9D=>0x6301,
+0x8E9E=>0x6642,
+0x8E9F=>0x6B21,
+0x8EA0=>0x6ECB,
+0x8EA1=>0x6CBB,
+0x8EA2=>0x723E,
+0x8EA3=>0x74BD,
+0x8EA4=>0x75D4,
+0x8EA5=>0x78C1,
+0x8EA6=>0x793A,
+0x8EA7=>0x800C,
+0x8EA8=>0x8033,
+0x8EA9=>0x81EA,
+0x8EAA=>0x8494,
+0x8EAB=>0x8F9E,
+0x8EAC=>0x6C50,
+0x8EAD=>0x9E7F,
+0x8EAE=>0x5F0F,
+0x8EAF=>0x8B58,
+0x8EB0=>0x9D2B,
+0x8EB1=>0x7AFA,
+0x8EB2=>0x8EF8,
+0x8EB3=>0x5B8D,
+0x8EB4=>0x96EB,
+0x8EB5=>0x4E03,
+0x8EB6=>0x53F1,
+0x8EB7=>0x57F7,
+0x8EB8=>0x5931,
+0x8EB9=>0x5AC9,
+0x8EBA=>0x5BA4,
+0x8EBB=>0x6089,
+0x8EBC=>0x6E7F,
+0x8EBD=>0x6F06,
+0x8EBE=>0x75BE,
+0x8EBF=>0x8CEA,
+0x8EC0=>0x5B9F,
+0x8EC1=>0x8500,
+0x8EC2=>0x7BE0,
+0x8EC3=>0x5072,
+0x8EC4=>0x67F4,
+0x8EC5=>0x829D,
+0x8EC6=>0x5C61,
+0x8EC7=>0x854A,
+0x8EC8=>0x7E1E,
+0x8EC9=>0x820E,
+0x8ECA=>0x5199,
+0x8ECB=>0x5C04,
+0x8ECC=>0x6368,
+0x8ECD=>0x8D66,
+0x8ECE=>0x659C,
+0x8ECF=>0x716E,
+0x8ED0=>0x793E,
+0x8ED1=>0x7D17,
+0x8ED2=>0x8005,
+0x8ED3=>0x8B1D,
+0x8ED4=>0x8ECA,
+0x8ED5=>0x906E,
+0x8ED6=>0x86C7,
+0x8ED7=>0x90AA,
+0x8ED8=>0x501F,
+0x8ED9=>0x52FA,
+0x8EDA=>0x5C3A,
+0x8EDB=>0x6753,
+0x8EDC=>0x707C,
+0x8EDD=>0x7235,
+0x8EDE=>0x914C,
+0x8EDF=>0x91C8,
+0x8EE0=>0x932B,
+0x8EE1=>0x82E5,
+0x8EE2=>0x5BC2,
+0x8EE3=>0x5F31,
+0x8EE4=>0x60F9,
+0x8EE5=>0x4E3B,
+0x8EE6=>0x53D6,
+0x8EE7=>0x5B88,
+0x8EE8=>0x624B,
+0x8EE9=>0x6731,
+0x8EEA=>0x6B8A,
+0x8EEB=>0x72E9,
+0x8EEC=>0x73E0,
+0x8EED=>0x7A2E,
+0x8EEE=>0x816B,
+0x8EEF=>0x8DA3,
+0x8EF0=>0x9152,
+0x8EF1=>0x9996,
+0x8EF2=>0x5112,
+0x8EF3=>0x53D7,
+0x8EF4=>0x546A,
+0x8EF5=>0x5BFF,
+0x8EF6=>0x6388,
+0x8EF7=>0x6A39,
+0x8EF8=>0x7DAC,
+0x8EF9=>0x9700,
+0x8EFA=>0x56DA,
+0x8EFB=>0x53CE,
+0x8EFC=>0x5468,
+0x8F40=>0x5B97,
+0x8F41=>0x5C31,
+0x8F42=>0x5DDE,
+0x8F43=>0x4FEE,
+0x8F44=>0x6101,
+0x8F45=>0x62FE,
+0x8F46=>0x6D32,
+0x8F47=>0x79C0,
+0x8F48=>0x79CB,
+0x8F49=>0x7D42,
+0x8F4A=>0x7E4D,
+0x8F4B=>0x7FD2,
+0x8F4C=>0x81ED,
+0x8F4D=>0x821F,
+0x8F4E=>0x8490,
+0x8F4F=>0x8846,
+0x8F50=>0x8972,
+0x8F51=>0x8B90,
+0x8F52=>0x8E74,
+0x8F53=>0x8F2F,
+0x8F54=>0x9031,
+0x8F55=>0x914B,
+0x8F56=>0x916C,
+0x8F57=>0x96C6,
+0x8F58=>0x919C,
+0x8F59=>0x4EC0,
+0x8F5A=>0x4F4F,
+0x8F5B=>0x5145,
+0x8F5C=>0x5341,
+0x8F5D=>0x5F93,
+0x8F5E=>0x620E,
+0x8F5F=>0x67D4,
+0x8F60=>0x6C41,
+0x8F61=>0x6E0B,
+0x8F62=>0x7363,
+0x8F63=>0x7E26,
+0x8F64=>0x91CD,
+0x8F65=>0x9283,
+0x8F66=>0x53D4,
+0x8F67=>0x5919,
+0x8F68=>0x5BBF,
+0x8F69=>0x6DD1,
+0x8F6A=>0x795D,
+0x8F6B=>0x7E2E,
+0x8F6C=>0x7C9B,
+0x8F6D=>0x587E,
+0x8F6E=>0x719F,
+0x8F6F=>0x51FA,
+0x8F70=>0x8853,
+0x8F71=>0x8FF0,
+0x8F72=>0x4FCA,
+0x8F73=>0x5CFB,
+0x8F74=>0x6625,
+0x8F75=>0x77AC,
+0x8F76=>0x7AE3,
+0x8F77=>0x821C,
+0x8F78=>0x99FF,
+0x8F79=>0x51C6,
+0x8F7A=>0x5FAA,
+0x8F7B=>0x65EC,
+0x8F7C=>0x696F,
+0x8F7D=>0x6B89,
+0x8F7E=>0x6DF3,
+0x8F80=>0x6E96,
+0x8F81=>0x6F64,
+0x8F82=>0x76FE,
+0x8F83=>0x7D14,
+0x8F84=>0x5DE1,
+0x8F85=>0x9075,
+0x8F86=>0x9187,
+0x8F87=>0x9806,
+0x8F88=>0x51E6,
+0x8F89=>0x521D,
+0x8F8A=>0x6240,
+0x8F8B=>0x6691,
+0x8F8C=>0x66D9,
+0x8F8D=>0x6E1A,
+0x8F8E=>0x5EB6,
+0x8F8F=>0x7DD2,
+0x8F90=>0x7F72,
+0x8F91=>0x66F8,
+0x8F92=>0x85AF,
+0x8F93=>0x85F7,
+0x8F94=>0x8AF8,
+0x8F95=>0x52A9,
+0x8F96=>0x53D9,
+0x8F97=>0x5973,
+0x8F98=>0x5E8F,
+0x8F99=>0x5F90,
+0x8F9A=>0x6055,
+0x8F9B=>0x92E4,
+0x8F9C=>0x9664,
+0x8F9D=>0x50B7,
+0x8F9E=>0x511F,
+0x8F9F=>0x52DD,
+0x8FA0=>0x5320,
+0x8FA1=>0x5347,
+0x8FA2=>0x53EC,
+0x8FA3=>0x54E8,
+0x8FA4=>0x5546,
+0x8FA5=>0x5531,
+0x8FA6=>0x5617,
+0x8FA7=>0x5968,
+0x8FA8=>0x59BE,
+0x8FA9=>0x5A3C,
+0x8FAA=>0x5BB5,
+0x8FAB=>0x5C06,
+0x8FAC=>0x5C0F,
+0x8FAD=>0x5C11,
+0x8FAE=>0x5C1A,
+0x8FAF=>0x5E84,
+0x8FB0=>0x5E8A,
+0x8FB1=>0x5EE0,
+0x8FB2=>0x5F70,
+0x8FB3=>0x627F,
+0x8FB4=>0x6284,
+0x8FB5=>0x62DB,
+0x8FB6=>0x638C,
+0x8FB7=>0x6377,
+0x8FB8=>0x6607,
+0x8FB9=>0x660C,
+0x8FBA=>0x662D,
+0x8FBB=>0x6676,
+0x8FBC=>0x677E,
+0x8FBD=>0x68A2,
+0x8FBE=>0x6A1F,
+0x8FBF=>0x6A35,
+0x8FC0=>0x6CBC,
+0x8FC1=>0x6D88,
+0x8FC2=>0x6E09,
+0x8FC3=>0x6E58,
+0x8FC4=>0x713C,
+0x8FC5=>0x7126,
+0x8FC6=>0x7167,
+0x8FC7=>0x75C7,
+0x8FC8=>0x7701,
+0x8FC9=>0x785D,
+0x8FCA=>0x7901,
+0x8FCB=>0x7965,
+0x8FCC=>0x79F0,
+0x8FCD=>0x7AE0,
+0x8FCE=>0x7B11,
+0x8FCF=>0x7CA7,
+0x8FD0=>0x7D39,
+0x8FD1=>0x8096,
+0x8FD2=>0x83D6,
+0x8FD3=>0x848B,
+0x8FD4=>0x8549,
+0x8FD5=>0x885D,
+0x8FD6=>0x88F3,
+0x8FD7=>0x8A1F,
+0x8FD8=>0x8A3C,
+0x8FD9=>0x8A54,
+0x8FDA=>0x8A73,
+0x8FDB=>0x8C61,
+0x8FDC=>0x8CDE,
+0x8FDD=>0x91A4,
+0x8FDE=>0x9266,
+0x8FDF=>0x937E,
+0x8FE0=>0x9418,
+0x8FE1=>0x969C,
+0x8FE2=>0x9798,
+0x8FE3=>0x4E0A,
+0x8FE4=>0x4E08,
+0x8FE5=>0x4E1E,
+0x8FE6=>0x4E57,
+0x8FE7=>0x5197,
+0x8FE8=>0x5270,
+0x8FE9=>0x57CE,
+0x8FEA=>0x5834,
+0x8FEB=>0x58CC,
+0x8FEC=>0x5B22,
+0x8FED=>0x5E38,
+0x8FEE=>0x60C5,
+0x8FEF=>0x64FE,
+0x8FF0=>0x6761,
+0x8FF1=>0x6756,
+0x8FF2=>0x6D44,
+0x8FF3=>0x72B6,
+0x8FF4=>0x7573,
+0x8FF5=>0x7A63,
+0x8FF6=>0x84B8,
+0x8FF7=>0x8B72,
+0x8FF8=>0x91B8,
+0x8FF9=>0x9320,
+0x8FFA=>0x5631,
+0x8FFB=>0x57F4,
+0x8FFC=>0x98FE,
+0x9040=>0x62ED,
+0x9041=>0x690D,
+0x9042=>0x6B96,
+0x9043=>0x71ED,
+0x9044=>0x7E54,
+0x9045=>0x8077,
+0x9046=>0x8272,
+0x9047=>0x89E6,
+0x9048=>0x98DF,
+0x9049=>0x8755,
+0x904A=>0x8FB1,
+0x904B=>0x5C3B,
+0x904C=>0x4F38,
+0x904D=>0x4FE1,
+0x904E=>0x4FB5,
+0x904F=>0x5507,
+0x9050=>0x5A20,
+0x9051=>0x5BDD,
+0x9052=>0x5BE9,
+0x9053=>0x5FC3,
+0x9054=>0x614E,
+0x9055=>0x632F,
+0x9056=>0x65B0,
+0x9057=>0x664B,
+0x9058=>0x68EE,
+0x9059=>0x699B,
+0x905A=>0x6D78,
+0x905B=>0x6DF1,
+0x905C=>0x7533,
+0x905D=>0x75B9,
+0x905E=>0x771F,
+0x905F=>0x795E,
+0x9060=>0x79E6,
+0x9061=>0x7D33,
+0x9062=>0x81E3,
+0x9063=>0x82AF,
+0x9064=>0x85AA,
+0x9065=>0x89AA,
+0x9066=>0x8A3A,
+0x9067=>0x8EAB,
+0x9068=>0x8F9B,
+0x9069=>0x9032,
+0x906A=>0x91DD,
+0x906B=>0x9707,
+0x906C=>0x4EBA,
+0x906D=>0x4EC1,
+0x906E=>0x5203,
+0x906F=>0x5875,
+0x9070=>0x58EC,
+0x9071=>0x5C0B,
+0x9072=>0x751A,
+0x9073=>0x5C3D,
+0x9074=>0x814E,
+0x9075=>0x8A0A,
+0x9076=>0x8FC5,
+0x9077=>0x9663,
+0x9078=>0x976D,
+0x9079=>0x7B25,
+0x907A=>0x8ACF,
+0x907B=>0x9808,
+0x907C=>0x9162,
+0x907D=>0x56F3,
+0x907E=>0x53A8,
+0x9080=>0x9017,
+0x9081=>0x5439,
+0x9082=>0x5782,
+0x9083=>0x5E25,
+0x9084=>0x63A8,
+0x9085=>0x6C34,
+0x9086=>0x708A,
+0x9087=>0x7761,
+0x9088=>0x7C8B,
+0x9089=>0x7FE0,
+0x908A=>0x8870,
+0x908B=>0x9042,
+0x908C=>0x9154,
+0x908D=>0x9310,
+0x908E=>0x9318,
+0x908F=>0x968F,
+0x9090=>0x745E,
+0x9091=>0x9AC4,
+0x9092=>0x5D07,
+0x9093=>0x5D69,
+0x9094=>0x6570,
+0x9095=>0x67A2,
+0x9096=>0x8DA8,
+0x9097=>0x96DB,
+0x9098=>0x636E,
+0x9099=>0x6749,
+0x909A=>0x6919,
+0x909B=>0x83C5,
+0x909C=>0x9817,
+0x909D=>0x96C0,
+0x909E=>0x88FE,
+0x909F=>0x6F84,
+0x90A0=>0x647A,
+0x90A1=>0x5BF8,
+0x90A2=>0x4E16,
+0x90A3=>0x702C,
+0x90A4=>0x755D,
+0x90A5=>0x662F,
+0x90A6=>0x51C4,
+0x90A7=>0x5236,
+0x90A8=>0x52E2,
+0x90A9=>0x59D3,
+0x90AA=>0x5F81,
+0x90AB=>0x6027,
+0x90AC=>0x6210,
+0x90AD=>0x653F,
+0x90AE=>0x6574,
+0x90AF=>0x661F,
+0x90B0=>0x6674,
+0x90B1=>0x68F2,
+0x90B2=>0x6816,
+0x90B3=>0x6B63,
+0x90B4=>0x6E05,
+0x90B5=>0x7272,
+0x90B6=>0x751F,
+0x90B7=>0x76DB,
+0x90B8=>0x7CBE,
+0x90B9=>0x8056,
+0x90BA=>0x58F0,
+0x90BB=>0x88FD,
+0x90BC=>0x897F,
+0x90BD=>0x8AA0,
+0x90BE=>0x8A93,
+0x90BF=>0x8ACB,
+0x90C0=>0x901D,
+0x90C1=>0x9192,
+0x90C2=>0x9752,
+0x90C3=>0x9759,
+0x90C4=>0x6589,
+0x90C5=>0x7A0E,
+0x90C6=>0x8106,
+0x90C7=>0x96BB,
+0x90C8=>0x5E2D,
+0x90C9=>0x60DC,
+0x90CA=>0x621A,
+0x90CB=>0x65A5,
+0x90CC=>0x6614,
+0x90CD=>0x6790,
+0x90CE=>0x77F3,
+0x90CF=>0x7A4D,
+0x90D0=>0x7C4D,
+0x90D1=>0x7E3E,
+0x90D2=>0x810A,
+0x90D3=>0x8CAC,
+0x90D4=>0x8D64,
+0x90D5=>0x8DE1,
+0x90D6=>0x8E5F,
+0x90D7=>0x78A9,
+0x90D8=>0x5207,
+0x90D9=>0x62D9,
+0x90DA=>0x63A5,
+0x90DB=>0x6442,
+0x90DC=>0x6298,
+0x90DD=>0x8A2D,
+0x90DE=>0x7A83,
+0x90DF=>0x7BC0,
+0x90E0=>0x8AAC,
+0x90E1=>0x96EA,
+0x90E2=>0x7D76,
+0x90E3=>0x820C,
+0x90E4=>0x8749,
+0x90E5=>0x4ED9,
+0x90E6=>0x5148,
+0x90E7=>0x5343,
+0x90E8=>0x5360,
+0x90E9=>0x5BA3,
+0x90EA=>0x5C02,
+0x90EB=>0x5C16,
+0x90EC=>0x5DDD,
+0x90ED=>0x6226,
+0x90EE=>0x6247,
+0x90EF=>0x64B0,
+0x90F0=>0x6813,
+0x90F1=>0x6834,
+0x90F2=>0x6CC9,
+0x90F3=>0x6D45,
+0x90F4=>0x6D17,
+0x90F5=>0x67D3,
+0x90F6=>0x6F5C,
+0x90F7=>0x714E,
+0x90F8=>0x717D,
+0x90F9=>0x65CB,
+0x90FA=>0x7A7F,
+0x90FB=>0x7BAD,
+0x90FC=>0x7DDA,
+0x9140=>0x7E4A,
+0x9141=>0x7FA8,
+0x9142=>0x817A,
+0x9143=>0x821B,
+0x9144=>0x8239,
+0x9145=>0x85A6,
+0x9146=>0x8A6E,
+0x9147=>0x8CCE,
+0x9148=>0x8DF5,
+0x9149=>0x9078,
+0x914A=>0x9077,
+0x914B=>0x92AD,
+0x914C=>0x9291,
+0x914D=>0x9583,
+0x914E=>0x9BAE,
+0x914F=>0x524D,
+0x9150=>0x5584,
+0x9151=>0x6F38,
+0x9152=>0x7136,
+0x9153=>0x5168,
+0x9154=>0x7985,
+0x9155=>0x7E55,
+0x9156=>0x81B3,
+0x9157=>0x7CCE,
+0x9158=>0x564C,
+0x9159=>0x5851,
+0x915A=>0x5CA8,
+0x915B=>0x63AA,
+0x915C=>0x66FE,
+0x915D=>0x66FD,
+0x915E=>0x695A,
+0x915F=>0x72D9,
+0x9160=>0x758F,
+0x9161=>0x758E,
+0x9162=>0x790E,
+0x9163=>0x7956,
+0x9164=>0x79DF,
+0x9165=>0x7C97,
+0x9166=>0x7D20,
+0x9167=>0x7D44,
+0x9168=>0x8607,
+0x9169=>0x8A34,
+0x916A=>0x963B,
+0x916B=>0x9061,
+0x916C=>0x9F20,
+0x916D=>0x50E7,
+0x916E=>0x5275,
+0x916F=>0x53CC,
+0x9170=>0x53E2,
+0x9171=>0x5009,
+0x9172=>0x55AA,
+0x9173=>0x58EE,
+0x9174=>0x594F,
+0x9175=>0x723D,
+0x9176=>0x5B8B,
+0x9177=>0x5C64,
+0x9178=>0x531D,
+0x9179=>0x60E3,
+0x917A=>0x60F3,
+0x917B=>0x635C,
+0x917C=>0x6383,
+0x917D=>0x633F,
+0x917E=>0x63BB,
+0x9180=>0x64CD,
+0x9181=>0x65E9,
+0x9182=>0x66F9,
+0x9183=>0x5DE3,
+0x9184=>0x69CD,
+0x9185=>0x69FD,
+0x9186=>0x6F15,
+0x9187=>0x71E5,
+0x9188=>0x4E89,
+0x9189=>0x75E9,
+0x918A=>0x76F8,
+0x918B=>0x7A93,
+0x918C=>0x7CDF,
+0x918D=>0x7DCF,
+0x918E=>0x7D9C,
+0x918F=>0x8061,
+0x9190=>0x8349,
+0x9191=>0x8358,
+0x9192=>0x846C,
+0x9193=>0x84BC,
+0x9194=>0x85FB,
+0x9195=>0x88C5,
+0x9196=>0x8D70,
+0x9197=>0x9001,
+0x9198=>0x906D,
+0x9199=>0x9397,
+0x919A=>0x971C,
+0x919B=>0x9A12,
+0x919C=>0x50CF,
+0x919D=>0x5897,
+0x919E=>0x618E,
+0x919F=>0x81D3,
+0x91A0=>0x8535,
+0x91A1=>0x8D08,
+0x91A2=>0x9020,
+0x91A3=>0x4FC3,
+0x91A4=>0x5074,
+0x91A5=>0x5247,
+0x91A6=>0x5373,
+0x91A7=>0x606F,
+0x91A8=>0x6349,
+0x91A9=>0x675F,
+0x91AA=>0x6E2C,
+0x91AB=>0x8DB3,
+0x91AC=>0x901F,
+0x91AD=>0x4FD7,
+0x91AE=>0x5C5E,
+0x91AF=>0x8CCA,
+0x91B0=>0x65CF,
+0x91B1=>0x7D9A,
+0x91B2=>0x5352,
+0x91B3=>0x8896,
+0x91B4=>0x5176,
+0x91B5=>0x63C3,
+0x91B6=>0x5B58,
+0x91B7=>0x5B6B,
+0x91B8=>0x5C0A,
+0x91B9=>0x640D,
+0x91BA=>0x6751,
+0x91BB=>0x905C,
+0x91BC=>0x4ED6,
+0x91BD=>0x591A,
+0x91BE=>0x592A,
+0x91BF=>0x6C70,
+0x91C0=>0x8A51,
+0x91C1=>0x553E,
+0x91C2=>0x5815,
+0x91C3=>0x59A5,
+0x91C4=>0x60F0,
+0x91C5=>0x6253,
+0x91C6=>0x67C1,
+0x91C7=>0x8235,
+0x91C8=>0x6955,
+0x91C9=>0x9640,
+0x91CA=>0x99C4,
+0x91CB=>0x9A28,
+0x91CC=>0x4F53,
+0x91CD=>0x5806,
+0x91CE=>0x5BFE,
+0x91CF=>0x8010,
+0x91D0=>0x5CB1,
+0x91D1=>0x5E2F,
+0x91D2=>0x5F85,
+0x91D3=>0x6020,
+0x91D4=>0x614B,
+0x91D5=>0x6234,
+0x91D6=>0x66FF,
+0x91D7=>0x6CF0,
+0x91D8=>0x6EDE,
+0x91D9=>0x80CE,
+0x91DA=>0x817F,
+0x91DB=>0x82D4,
+0x91DC=>0x888B,
+0x91DD=>0x8CB8,
+0x91DE=>0x9000,
+0x91DF=>0x902E,
+0x91E0=>0x968A,
+0x91E1=>0x9EDB,
+0x91E2=>0x9BDB,
+0x91E3=>0x4EE3,
+0x91E4=>0x53F0,
+0x91E5=>0x5927,
+0x91E6=>0x7B2C,
+0x91E7=>0x918D,
+0x91E8=>0x984C,
+0x91E9=>0x9DF9,
+0x91EA=>0x6EDD,
+0x91EB=>0x7027,
+0x91EC=>0x5353,
+0x91ED=>0x5544,
+0x91EE=>0x5B85,
+0x91EF=>0x6258,
+0x91F0=>0x629E,
+0x91F1=>0x62D3,
+0x91F2=>0x6CA2,
+0x91F3=>0x6FEF,
+0x91F4=>0x7422,
+0x91F5=>0x8A17,
+0x91F6=>0x9438,
+0x91F7=>0x6FC1,
+0x91F8=>0x8AFE,
+0x91F9=>0x8338,
+0x91FA=>0x51E7,
+0x91FB=>0x86F8,
+0x91FC=>0x53EA,
+0x9240=>0x53E9,
+0x9241=>0x4F46,
+0x9242=>0x9054,
+0x9243=>0x8FB0,
+0x9244=>0x596A,
+0x9245=>0x8131,
+0x9246=>0x5DFD,
+0x9247=>0x7AEA,
+0x9248=>0x8FBF,
+0x9249=>0x68DA,
+0x924A=>0x8C37,
+0x924B=>0x72F8,
+0x924C=>0x9C48,
+0x924D=>0x6A3D,
+0x924E=>0x8AB0,
+0x924F=>0x4E39,
+0x9250=>0x5358,
+0x9251=>0x5606,
+0x9252=>0x5766,
+0x9253=>0x62C5,
+0x9254=>0x63A2,
+0x9255=>0x65E6,
+0x9256=>0x6B4E,
+0x9257=>0x6DE1,
+0x9258=>0x6E5B,
+0x9259=>0x70AD,
+0x925A=>0x77ED,
+0x925B=>0x7AEF,
+0x925C=>0x7BAA,
+0x925D=>0x7DBB,
+0x925E=>0x803D,
+0x925F=>0x80C6,
+0x9260=>0x86CB,
+0x9261=>0x8A95,
+0x9262=>0x935B,
+0x9263=>0x56E3,
+0x9264=>0x58C7,
+0x9265=>0x5F3E,
+0x9266=>0x65AD,
+0x9267=>0x6696,
+0x9268=>0x6A80,
+0x9269=>0x6BB5,
+0x926A=>0x7537,
+0x926B=>0x8AC7,
+0x926C=>0x5024,
+0x926D=>0x77E5,
+0x926E=>0x5730,
+0x926F=>0x5F1B,
+0x9270=>0x6065,
+0x9271=>0x667A,
+0x9272=>0x6C60,
+0x9273=>0x75F4,
+0x9274=>0x7A1A,
+0x9275=>0x7F6E,
+0x9276=>0x81F4,
+0x9277=>0x8718,
+0x9278=>0x9045,
+0x9279=>0x99B3,
+0x927A=>0x7BC9,
+0x927B=>0x755C,
+0x927C=>0x7AF9,
+0x927D=>0x7B51,
+0x927E=>0x84C4,
+0x9280=>0x9010,
+0x9281=>0x79E9,
+0x9282=>0x7A92,
+0x9283=>0x8336,
+0x9284=>0x5AE1,
+0x9285=>0x7740,
+0x9286=>0x4E2D,
+0x9287=>0x4EF2,
+0x9288=>0x5B99,
+0x9289=>0x5FE0,
+0x928A=>0x62BD,
+0x928B=>0x663C,
+0x928C=>0x67F1,
+0x928D=>0x6CE8,
+0x928E=>0x866B,
+0x928F=>0x8877,
+0x9290=>0x8A3B,
+0x9291=>0x914E,
+0x9292=>0x92F3,
+0x9293=>0x99D0,
+0x9294=>0x6A17,
+0x9295=>0x7026,
+0x9296=>0x732A,
+0x9297=>0x82E7,
+0x9298=>0x8457,
+0x9299=>0x8CAF,
+0x929A=>0x4E01,
+0x929B=>0x5146,
+0x929C=>0x51CB,
+0x929D=>0x558B,
+0x929E=>0x5BF5,
+0x929F=>0x5E16,
+0x92A0=>0x5E33,
+0x92A1=>0x5E81,
+0x92A2=>0x5F14,
+0x92A3=>0x5F35,
+0x92A4=>0x5F6B,
+0x92A5=>0x5FB4,
+0x92A6=>0x61F2,
+0x92A7=>0x6311,
+0x92A8=>0x66A2,
+0x92A9=>0x671D,
+0x92AA=>0x6F6E,
+0x92AB=>0x7252,
+0x92AC=>0x753A,
+0x92AD=>0x773A,
+0x92AE=>0x8074,
+0x92AF=>0x8139,
+0x92B0=>0x8178,
+0x92B1=>0x8776,
+0x92B2=>0x8ABF,
+0x92B3=>0x8ADC,
+0x92B4=>0x8D85,
+0x92B5=>0x8DF3,
+0x92B6=>0x929A,
+0x92B7=>0x9577,
+0x92B8=>0x9802,
+0x92B9=>0x9CE5,
+0x92BA=>0x52C5,
+0x92BB=>0x6357,
+0x92BC=>0x76F4,
+0x92BD=>0x6715,
+0x92BE=>0x6C88,
+0x92BF=>0x73CD,
+0x92C0=>0x8CC3,
+0x92C1=>0x93AE,
+0x92C2=>0x9673,
+0x92C3=>0x6D25,
+0x92C4=>0x589C,
+0x92C5=>0x690E,
+0x92C6=>0x69CC,
+0x92C7=>0x8FFD,
+0x92C8=>0x939A,
+0x92C9=>0x75DB,
+0x92CA=>0x901A,
+0x92CB=>0x585A,
+0x92CC=>0x6802,
+0x92CD=>0x63B4,
+0x92CE=>0x69FB,
+0x92CF=>0x4F43,
+0x92D0=>0x6F2C,
+0x92D1=>0x67D8,
+0x92D2=>0x8FBB,
+0x92D3=>0x8526,
+0x92D4=>0x7DB4,
+0x92D5=>0x9354,
+0x92D6=>0x693F,
+0x92D7=>0x6F70,
+0x92D8=>0x576A,
+0x92D9=>0x58F7,
+0x92DA=>0x5B2C,
+0x92DB=>0x7D2C,
+0x92DC=>0x722A,
+0x92DD=>0x540A,
+0x92DE=>0x91E3,
+0x92DF=>0x9DB4,
+0x92E0=>0x4EAD,
+0x92E1=>0x4F4E,
+0x92E2=>0x505C,
+0x92E3=>0x5075,
+0x92E4=>0x5243,
+0x92E5=>0x8C9E,
+0x92E6=>0x5448,
+0x92E7=>0x5824,
+0x92E8=>0x5B9A,
+0x92E9=>0x5E1D,
+0x92EA=>0x5E95,
+0x92EB=>0x5EAD,
+0x92EC=>0x5EF7,
+0x92ED=>0x5F1F,
+0x92EE=>0x608C,
+0x92EF=>0x62B5,
+0x92F0=>0x633A,
+0x92F1=>0x63D0,
+0x92F2=>0x68AF,
+0x92F3=>0x6C40,
+0x92F4=>0x7887,
+0x92F5=>0x798E,
+0x92F6=>0x7A0B,
+0x92F7=>0x7DE0,
+0x92F8=>0x8247,
+0x92F9=>0x8A02,
+0x92FA=>0x8AE6,
+0x92FB=>0x8E44,
+0x92FC=>0x9013,
+0x9340=>0x90B8,
+0x9341=>0x912D,
+0x9342=>0x91D8,
+0x9343=>0x9F0E,
+0x9344=>0x6CE5,
+0x9345=>0x6458,
+0x9346=>0x64E2,
+0x9347=>0x6575,
+0x9348=>0x6EF4,
+0x9349=>0x7684,
+0x934A=>0x7B1B,
+0x934B=>0x9069,
+0x934C=>0x93D1,
+0x934D=>0x6EBA,
+0x934E=>0x54F2,
+0x934F=>0x5FB9,
+0x9350=>0x64A4,
+0x9351=>0x8F4D,
+0x9352=>0x8FED,
+0x9353=>0x9244,
+0x9354=>0x5178,
+0x9355=>0x586B,
+0x9356=>0x5929,
+0x9357=>0x5C55,
+0x9358=>0x5E97,
+0x9359=>0x6DFB,
+0x935A=>0x7E8F,
+0x935B=>0x751C,
+0x935C=>0x8CBC,
+0x935D=>0x8EE2,
+0x935E=>0x985B,
+0x935F=>0x70B9,
+0x9360=>0x4F1D,
+0x9361=>0x6BBF,
+0x9362=>0x6FB1,
+0x9363=>0x7530,
+0x9364=>0x96FB,
+0x9365=>0x514E,
+0x9366=>0x5410,
+0x9367=>0x5835,
+0x9368=>0x5857,
+0x9369=>0x59AC,
+0x936A=>0x5C60,
+0x936B=>0x5F92,
+0x936C=>0x6597,
+0x936D=>0x675C,
+0x936E=>0x6E21,
+0x936F=>0x767B,
+0x9370=>0x83DF,
+0x9371=>0x8CED,
+0x9372=>0x9014,
+0x9373=>0x90FD,
+0x9374=>0x934D,
+0x9375=>0x7825,
+0x9376=>0x783A,
+0x9377=>0x52AA,
+0x9378=>0x5EA6,
+0x9379=>0x571F,
+0x937A=>0x5974,
+0x937B=>0x6012,
+0x937C=>0x5012,
+0x937D=>0x515A,
+0x937E=>0x51AC,
+0x9380=>0x51CD,
+0x9381=>0x5200,
+0x9382=>0x5510,
+0x9383=>0x5854,
+0x9384=>0x5858,
+0x9385=>0x5957,
+0x9386=>0x5B95,
+0x9387=>0x5CF6,
+0x9388=>0x5D8B,
+0x9389=>0x60BC,
+0x938A=>0x6295,
+0x938B=>0x642D,
+0x938C=>0x6771,
+0x938D=>0x6843,
+0x938E=>0x68BC,
+0x938F=>0x68DF,
+0x9390=>0x76D7,
+0x9391=>0x6DD8,
+0x9392=>0x6E6F,
+0x9393=>0x6D9B,
+0x9394=>0x706F,
+0x9395=>0x71C8,
+0x9396=>0x5F53,
+0x9397=>0x75D8,
+0x9398=>0x7977,
+0x9399=>0x7B49,
+0x939A=>0x7B54,
+0x939B=>0x7B52,
+0x939C=>0x7CD6,
+0x939D=>0x7D71,
+0x939E=>0x5230,
+0x939F=>0x8463,
+0x93A0=>0x8569,
+0x93A1=>0x85E4,
+0x93A2=>0x8A0E,
+0x93A3=>0x8B04,
+0x93A4=>0x8C46,
+0x93A5=>0x8E0F,
+0x93A6=>0x9003,
+0x93A7=>0x900F,
+0x93A8=>0x9419,
+0x93A9=>0x9676,
+0x93AA=>0x982D,
+0x93AB=>0x9A30,
+0x93AC=>0x95D8,
+0x93AD=>0x50CD,
+0x93AE=>0x52D5,
+0x93AF=>0x540C,
+0x93B0=>0x5802,
+0x93B1=>0x5C0E,
+0x93B2=>0x61A7,
+0x93B3=>0x649E,
+0x93B4=>0x6D1E,
+0x93B5=>0x77B3,
+0x93B6=>0x7AE5,
+0x93B7=>0x80F4,
+0x93B8=>0x8404,
+0x93B9=>0x9053,
+0x93BA=>0x9285,
+0x93BB=>0x5CE0,
+0x93BC=>0x9D07,
+0x93BD=>0x533F,
+0x93BE=>0x5F97,
+0x93BF=>0x5FB3,
+0x93C0=>0x6D9C,
+0x93C1=>0x7279,
+0x93C2=>0x7763,
+0x93C3=>0x79BF,
+0x93C4=>0x7BE4,
+0x93C5=>0x6BD2,
+0x93C6=>0x72EC,
+0x93C7=>0x8AAD,
+0x93C8=>0x6803,
+0x93C9=>0x6A61,
+0x93CA=>0x51F8,
+0x93CB=>0x7A81,
+0x93CC=>0x6934,
+0x93CD=>0x5C4A,
+0x93CE=>0x9CF6,
+0x93CF=>0x82EB,
+0x93D0=>0x5BC5,
+0x93D1=>0x9149,
+0x93D2=>0x701E,
+0x93D3=>0x5678,
+0x93D4=>0x5C6F,
+0x93D5=>0x60C7,
+0x93D6=>0x6566,
+0x93D7=>0x6C8C,
+0x93D8=>0x8C5A,
+0x93D9=>0x9041,
+0x93DA=>0x9813,
+0x93DB=>0x5451,
+0x93DC=>0x66C7,
+0x93DD=>0x920D,
+0x93DE=>0x5948,
+0x93DF=>0x90A3,
+0x93E0=>0x5185,
+0x93E1=>0x4E4D,
+0x93E2=>0x51EA,
+0x93E3=>0x8599,
+0x93E4=>0x8B0E,
+0x93E5=>0x7058,
+0x93E6=>0x637A,
+0x93E7=>0x934B,
+0x93E8=>0x6962,
+0x93E9=>0x99B4,
+0x93EA=>0x7E04,
+0x93EB=>0x7577,
+0x93EC=>0x5357,
+0x93ED=>0x6960,
+0x93EE=>0x8EDF,
+0x93EF=>0x96E3,
+0x93F0=>0x6C5D,
+0x93F1=>0x4E8C,
+0x93F2=>0x5C3C,
+0x93F3=>0x5F10,
+0x93F4=>0x8FE9,
+0x93F5=>0x5302,
+0x93F6=>0x8CD1,
+0x93F7=>0x8089,
+0x93F8=>0x8679,
+0x93F9=>0x5EFF,
+0x93FA=>0x65E5,
+0x93FB=>0x4E73,
+0x93FC=>0x5165,
+0x9440=>0x5982,
+0x9441=>0x5C3F,
+0x9442=>0x97EE,
+0x9443=>0x4EFB,
+0x9444=>0x598A,
+0x9445=>0x5FCD,
+0x9446=>0x8A8D,
+0x9447=>0x6FE1,
+0x9448=>0x79B0,
+0x9449=>0x7962,
+0x944A=>0x5BE7,
+0x944B=>0x8471,
+0x944C=>0x732B,
+0x944D=>0x71B1,
+0x944E=>0x5E74,
+0x944F=>0x5FF5,
+0x9450=>0x637B,
+0x9451=>0x649A,
+0x9452=>0x71C3,
+0x9453=>0x7C98,
+0x9454=>0x4E43,
+0x9455=>0x5EFC,
+0x9456=>0x4E4B,
+0x9457=>0x57DC,
+0x9458=>0x56A2,
+0x9459=>0x60A9,
+0x945A=>0x6FC3,
+0x945B=>0x7D0D,
+0x945C=>0x80FD,
+0x945D=>0x8133,
+0x945E=>0x81BF,
+0x945F=>0x8FB2,
+0x9460=>0x8997,
+0x9461=>0x86A4,
+0x9462=>0x5DF4,
+0x9463=>0x628A,
+0x9464=>0x64AD,
+0x9465=>0x8987,
+0x9466=>0x6777,
+0x9467=>0x6CE2,
+0x9468=>0x6D3E,
+0x9469=>0x7436,
+0x946A=>0x7834,
+0x946B=>0x5A46,
+0x946C=>0x7F75,
+0x946D=>0x82AD,
+0x946E=>0x99AC,
+0x946F=>0x4FF3,
+0x9470=>0x5EC3,
+0x9471=>0x62DD,
+0x9472=>0x6392,
+0x9473=>0x6557,
+0x9474=>0x676F,
+0x9475=>0x76C3,
+0x9476=>0x724C,
+0x9477=>0x80CC,
+0x9478=>0x80BA,
+0x9479=>0x8F29,
+0x947A=>0x914D,
+0x947B=>0x500D,
+0x947C=>0x57F9,
+0x947D=>0x5A92,
+0x947E=>0x6885,
+0x9480=>0x6973,
+0x9481=>0x7164,
+0x9482=>0x72FD,
+0x9483=>0x8CB7,
+0x9484=>0x58F2,
+0x9485=>0x8CE0,
+0x9486=>0x966A,
+0x9487=>0x9019,
+0x9488=>0x877F,
+0x9489=>0x79E4,
+0x948A=>0x77E7,
+0x948B=>0x8429,
+0x948C=>0x4F2F,
+0x948D=>0x5265,
+0x948E=>0x535A,
+0x948F=>0x62CD,
+0x9490=>0x67CF,
+0x9491=>0x6CCA,
+0x9492=>0x767D,
+0x9493=>0x7B94,
+0x9494=>0x7C95,
+0x9495=>0x8236,
+0x9496=>0x8584,
+0x9497=>0x8FEB,
+0x9498=>0x66DD,
+0x9499=>0x6F20,
+0x949A=>0x7206,
+0x949B=>0x7E1B,
+0x949C=>0x83AB,
+0x949D=>0x99C1,
+0x949E=>0x9EA6,
+0x949F=>0x51FD,
+0x94A0=>0x7BB1,
+0x94A1=>0x7872,
+0x94A2=>0x7BB8,
+0x94A3=>0x8087,
+0x94A4=>0x7B48,
+0x94A5=>0x6AE8,
+0x94A6=>0x5E61,
+0x94A7=>0x808C,
+0x94A8=>0x7551,
+0x94A9=>0x7560,
+0x94AA=>0x516B,
+0x94AB=>0x9262,
+0x94AC=>0x6E8C,
+0x94AD=>0x767A,
+0x94AE=>0x9197,
+0x94AF=>0x9AEA,
+0x94B0=>0x4F10,
+0x94B1=>0x7F70,
+0x94B2=>0x629C,
+0x94B3=>0x7B4F,
+0x94B4=>0x95A5,
+0x94B5=>0x9CE9,
+0x94B6=>0x567A,
+0x94B7=>0x5859,
+0x94B8=>0x86E4,
+0x94B9=>0x96BC,
+0x94BA=>0x4F34,
+0x94BB=>0x5224,
+0x94BC=>0x534A,
+0x94BD=>0x53CD,
+0x94BE=>0x53DB,
+0x94BF=>0x5E06,
+0x94C0=>0x642C,
+0x94C1=>0x6591,
+0x94C2=>0x677F,
+0x94C3=>0x6C3E,
+0x94C4=>0x6C4E,
+0x94C5=>0x7248,
+0x94C6=>0x72AF,
+0x94C7=>0x73ED,
+0x94C8=>0x7554,
+0x94C9=>0x7E41,
+0x94CA=>0x822C,
+0x94CB=>0x85E9,
+0x94CC=>0x8CA9,
+0x94CD=>0x7BC4,
+0x94CE=>0x91C6,
+0x94CF=>0x7169,
+0x94D0=>0x9812,
+0x94D1=>0x98EF,
+0x94D2=>0x633D,
+0x94D3=>0x6669,
+0x94D4=>0x756A,
+0x94D5=>0x76E4,
+0x94D6=>0x78D0,
+0x94D7=>0x8543,
+0x94D8=>0x86EE,
+0x94D9=>0x532A,
+0x94DA=>0x5351,
+0x94DB=>0x5426,
+0x94DC=>0x5983,
+0x94DD=>0x5E87,
+0x94DE=>0x5F7C,
+0x94DF=>0x60B2,
+0x94E0=>0x6249,
+0x94E1=>0x6279,
+0x94E2=>0x62AB,
+0x94E3=>0x6590,
+0x94E4=>0x6BD4,
+0x94E5=>0x6CCC,
+0x94E6=>0x75B2,
+0x94E7=>0x76AE,
+0x94E8=>0x7891,
+0x94E9=>0x79D8,
+0x94EA=>0x7DCB,
+0x94EB=>0x7F77,
+0x94EC=>0x80A5,
+0x94ED=>0x88AB,
+0x94EE=>0x8AB9,
+0x94EF=>0x8CBB,
+0x94F0=>0x907F,
+0x94F1=>0x975E,
+0x94F2=>0x98DB,
+0x94F3=>0x6A0B,
+0x94F4=>0x7C38,
+0x94F5=>0x5099,
+0x94F6=>0x5C3E,
+0x94F7=>0x5FAE,
+0x94F8=>0x6787,
+0x94F9=>0x6BD8,
+0x94FA=>0x7435,
+0x94FB=>0x7709,
+0x94FC=>0x7F8E,
+0x9540=>0x9F3B,
+0x9541=>0x67CA,
+0x9542=>0x7A17,
+0x9543=>0x5339,
+0x9544=>0x758B,
+0x9545=>0x9AED,
+0x9546=>0x5F66,
+0x9547=>0x819D,
+0x9548=>0x83F1,
+0x9549=>0x8098,
+0x954A=>0x5F3C,
+0x954B=>0x5FC5,
+0x954C=>0x7562,
+0x954D=>0x7B46,
+0x954E=>0x903C,
+0x954F=>0x6867,
+0x9550=>0x59EB,
+0x9551=>0x5A9B,
+0x9552=>0x7D10,
+0x9553=>0x767E,
+0x9554=>0x8B2C,
+0x9555=>0x4FF5,
+0x9556=>0x5F6A,
+0x9557=>0x6A19,
+0x9558=>0x6C37,
+0x9559=>0x6F02,
+0x955A=>0x74E2,
+0x955B=>0x7968,
+0x955C=>0x8868,
+0x955D=>0x8A55,
+0x955E=>0x8C79,
+0x955F=>0x5EDF,
+0x9560=>0x63CF,
+0x9561=>0x75C5,
+0x9562=>0x79D2,
+0x9563=>0x82D7,
+0x9564=>0x9328,
+0x9565=>0x92F2,
+0x9566=>0x849C,
+0x9567=>0x86ED,
+0x9568=>0x9C2D,
+0x9569=>0x54C1,
+0x956A=>0x5F6C,
+0x956B=>0x658C,
+0x956C=>0x6D5C,
+0x956D=>0x7015,
+0x956E=>0x8CA7,
+0x956F=>0x8CD3,
+0x9570=>0x983B,
+0x9571=>0x654F,
+0x9572=>0x74F6,
+0x9573=>0x4E0D,
+0x9574=>0x4ED8,
+0x9575=>0x57E0,
+0x9576=>0x592B,
+0x9577=>0x5A66,
+0x9578=>0x5BCC,
+0x9579=>0x51A8,
+0x957A=>0x5E03,
+0x957B=>0x5E9C,
+0x957C=>0x6016,
+0x957D=>0x6276,
+0x957E=>0x6577,
+0x9580=>0x65A7,
+0x9581=>0x666E,
+0x9582=>0x6D6E,
+0x9583=>0x7236,
+0x9584=>0x7B26,
+0x9585=>0x8150,
+0x9586=>0x819A,
+0x9587=>0x8299,
+0x9588=>0x8B5C,
+0x9589=>0x8CA0,
+0x958A=>0x8CE6,
+0x958B=>0x8D74,
+0x958C=>0x961C,
+0x958D=>0x9644,
+0x958E=>0x4FAE,
+0x958F=>0x64AB,
+0x9590=>0x6B66,
+0x9591=>0x821E,
+0x9592=>0x8461,
+0x9593=>0x856A,
+0x9594=>0x90E8,
+0x9595=>0x5C01,
+0x9596=>0x6953,
+0x9597=>0x98A8,
+0x9598=>0x847A,
+0x9599=>0x8557,
+0x959A=>0x4F0F,
+0x959B=>0x526F,
+0x959C=>0x5FA9,
+0x959D=>0x5E45,
+0x959E=>0x670D,
+0x959F=>0x798F,
+0x95A0=>0x8179,
+0x95A1=>0x8907,
+0x95A2=>0x8986,
+0x95A3=>0x6DF5,
+0x95A4=>0x5F17,
+0x95A5=>0x6255,
+0x95A6=>0x6CB8,
+0x95A7=>0x4ECF,
+0x95A8=>0x7269,
+0x95A9=>0x9B92,
+0x95AA=>0x5206,
+0x95AB=>0x543B,
+0x95AC=>0x5674,
+0x95AD=>0x58B3,
+0x95AE=>0x61A4,
+0x95AF=>0x626E,
+0x95B0=>0x711A,
+0x95B1=>0x596E,
+0x95B2=>0x7C89,
+0x95B3=>0x7CDE,
+0x95B4=>0x7D1B,
+0x95B5=>0x96F0,
+0x95B6=>0x6587,
+0x95B7=>0x805E,
+0x95B8=>0x4E19,
+0x95B9=>0x4F75,
+0x95BA=>0x5175,
+0x95BB=>0x5840,
+0x95BC=>0x5E63,
+0x95BD=>0x5E73,
+0x95BE=>0x5F0A,
+0x95BF=>0x67C4,
+0x95C0=>0x4E26,
+0x95C1=>0x853D,
+0x95C2=>0x9589,
+0x95C3=>0x965B,
+0x95C4=>0x7C73,
+0x95C5=>0x9801,
+0x95C6=>0x50FB,
+0x95C7=>0x58C1,
+0x95C8=>0x7656,
+0x95C9=>0x78A7,
+0x95CA=>0x5225,
+0x95CB=>0x77A5,
+0x95CC=>0x8511,
+0x95CD=>0x7B86,
+0x95CE=>0x504F,
+0x95CF=>0x5909,
+0x95D0=>0x7247,
+0x95D1=>0x7BC7,
+0x95D2=>0x7DE8,
+0x95D3=>0x8FBA,
+0x95D4=>0x8FD4,
+0x95D5=>0x904D,
+0x95D6=>0x4FBF,
+0x95D7=>0x52C9,
+0x95D8=>0x5A29,
+0x95D9=>0x5F01,
+0x95DA=>0x97AD,
+0x95DB=>0x4FDD,
+0x95DC=>0x8217,
+0x95DD=>0x92EA,
+0x95DE=>0x5703,
+0x95DF=>0x6355,
+0x95E0=>0x6B69,
+0x95E1=>0x752B,
+0x95E2=>0x88DC,
+0x95E3=>0x8F14,
+0x95E4=>0x7A42,
+0x95E5=>0x52DF,
+0x95E6=>0x5893,
+0x95E7=>0x6155,
+0x95E8=>0x620A,
+0x95E9=>0x66AE,
+0x95EA=>0x6BCD,
+0x95EB=>0x7C3F,
+0x95EC=>0x83E9,
+0x95ED=>0x5023,
+0x95EE=>0x4FF8,
+0x95EF=>0x5305,
+0x95F0=>0x5446,
+0x95F1=>0x5831,
+0x95F2=>0x5949,
+0x95F3=>0x5B9D,
+0x95F4=>0x5CF0,
+0x95F5=>0x5CEF,
+0x95F6=>0x5D29,
+0x95F7=>0x5E96,
+0x95F8=>0x62B1,
+0x95F9=>0x6367,
+0x95FA=>0x653E,
+0x95FB=>0x65B9,
+0x95FC=>0x670B,
+0x9640=>0x6CD5,
+0x9641=>0x6CE1,
+0x9642=>0x70F9,
+0x9643=>0x7832,
+0x9644=>0x7E2B,
+0x9645=>0x80DE,
+0x9646=>0x82B3,
+0x9647=>0x840C,
+0x9648=>0x84EC,
+0x9649=>0x8702,
+0x964A=>0x8912,
+0x964B=>0x8A2A,
+0x964C=>0x8C4A,
+0x964D=>0x90A6,
+0x964E=>0x92D2,
+0x964F=>0x98FD,
+0x9650=>0x9CF3,
+0x9651=>0x9D6C,
+0x9652=>0x4E4F,
+0x9653=>0x4EA1,
+0x9654=>0x508D,
+0x9655=>0x5256,
+0x9656=>0x574A,
+0x9657=>0x59A8,
+0x9658=>0x5E3D,
+0x9659=>0x5FD8,
+0x965A=>0x5FD9,
+0x965B=>0x623F,
+0x965C=>0x66B4,
+0x965D=>0x671B,
+0x965E=>0x67D0,
+0x965F=>0x68D2,
+0x9660=>0x5192,
+0x9661=>0x7D21,
+0x9662=>0x80AA,
+0x9663=>0x81A8,
+0x9664=>0x8B00,
+0x9665=>0x8C8C,
+0x9666=>0x8CBF,
+0x9667=>0x927E,
+0x9668=>0x9632,
+0x9669=>0x5420,
+0x966A=>0x982C,
+0x966B=>0x5317,
+0x966C=>0x50D5,
+0x966D=>0x535C,
+0x966E=>0x58A8,
+0x966F=>0x64B2,
+0x9670=>0x6734,
+0x9671=>0x7267,
+0x9672=>0x7766,
+0x9673=>0x7A46,
+0x9674=>0x91E6,
+0x9675=>0x52C3,
+0x9676=>0x6CA1,
+0x9677=>0x6B86,
+0x9678=>0x5800,
+0x9679=>0x5E4C,
+0x967A=>0x5954,
+0x967B=>0x672C,
+0x967C=>0x7FFB,
+0x967D=>0x51E1,
+0x967E=>0x76C6,
+0x9680=>0x6469,
+0x9681=>0x78E8,
+0x9682=>0x9B54,
+0x9683=>0x9EBB,
+0x9684=>0x57CB,
+0x9685=>0x59B9,
+0x9686=>0x6627,
+0x9687=>0x679A,
+0x9688=>0x6BCE,
+0x9689=>0x54E9,
+0x968A=>0x69D9,
+0x968B=>0x5E55,
+0x968C=>0x819C,
+0x968D=>0x6795,
+0x968E=>0x9BAA,
+0x968F=>0x67FE,
+0x9690=>0x9C52,
+0x9691=>0x685D,
+0x9692=>0x4EA6,
+0x9693=>0x4FE3,
+0x9694=>0x53C8,
+0x9695=>0x62B9,
+0x9696=>0x672B,
+0x9697=>0x6CAB,
+0x9698=>0x8FC4,
+0x9699=>0x4FAD,
+0x969A=>0x7E6D,
+0x969B=>0x9EBF,
+0x969C=>0x4E07,
+0x969D=>0x6162,
+0x969E=>0x6E80,
+0x969F=>0x6F2B,
+0x96A0=>0x8513,
+0x96A1=>0x5473,
+0x96A2=>0x672A,
+0x96A3=>0x9B45,
+0x96A4=>0x5DF3,
+0x96A5=>0x7B95,
+0x96A6=>0x5CAC,
+0x96A7=>0x5BC6,
+0x96A8=>0x871C,
+0x96A9=>0x6E4A,
+0x96AA=>0x84D1,
+0x96AB=>0x7A14,
+0x96AC=>0x8108,
+0x96AD=>0x5999,
+0x96AE=>0x7C8D,
+0x96AF=>0x6C11,
+0x96B0=>0x7720,
+0x96B1=>0x52D9,
+0x96B2=>0x5922,
+0x96B3=>0x7121,
+0x96B4=>0x725F,
+0x96B5=>0x77DB,
+0x96B6=>0x9727,
+0x96B7=>0x9D61,
+0x96B8=>0x690B,
+0x96B9=>0x5A7F,
+0x96BA=>0x5A18,
+0x96BB=>0x51A5,
+0x96BC=>0x540D,
+0x96BD=>0x547D,
+0x96BE=>0x660E,
+0x96BF=>0x76DF,
+0x96C0=>0x8FF7,
+0x96C1=>0x9298,
+0x96C2=>0x9CF4,
+0x96C3=>0x59EA,
+0x96C4=>0x725D,
+0x96C5=>0x6EC5,
+0x96C6=>0x514D,
+0x96C7=>0x68C9,
+0x96C8=>0x7DBF,
+0x96C9=>0x7DEC,
+0x96CA=>0x9762,
+0x96CB=>0x9EBA,
+0x96CC=>0x6478,
+0x96CD=>0x6A21,
+0x96CE=>0x8302,
+0x96CF=>0x5984,
+0x96D0=>0x5B5F,
+0x96D1=>0x6BDB,
+0x96D2=>0x731B,
+0x96D3=>0x76F2,
+0x96D4=>0x7DB2,
+0x96D5=>0x8017,
+0x96D6=>0x8499,
+0x96D7=>0x5132,
+0x96D8=>0x6728,
+0x96D9=>0x9ED9,
+0x96DA=>0x76EE,
+0x96DB=>0x6762,
+0x96DC=>0x52FF,
+0x96DD=>0x9905,
+0x96DE=>0x5C24,
+0x96DF=>0x623B,
+0x96E0=>0x7C7E,
+0x96E1=>0x8CB0,
+0x96E2=>0x554F,
+0x96E3=>0x60B6,
+0x96E4=>0x7D0B,
+0x96E5=>0x9580,
+0x96E6=>0x5301,
+0x96E7=>0x4E5F,
+0x96E8=>0x51B6,
+0x96E9=>0x591C,
+0x96EA=>0x723A,
+0x96EB=>0x8036,
+0x96EC=>0x91CE,
+0x96ED=>0x5F25,
+0x96EE=>0x77E2,
+0x96EF=>0x5384,
+0x96F0=>0x5F79,
+0x96F1=>0x7D04,
+0x96F2=>0x85AC,
+0x96F3=>0x8A33,
+0x96F4=>0x8E8D,
+0x96F5=>0x9756,
+0x96F6=>0x67F3,
+0x96F7=>0x85AE,
+0x96F8=>0x9453,
+0x96F9=>0x6109,
+0x96FA=>0x6108,
+0x96FB=>0x6CB9,
+0x96FC=>0x7652,
+0x9740=>0x8AED,
+0x9741=>0x8F38,
+0x9742=>0x552F,
+0x9743=>0x4F51,
+0x9744=>0x512A,
+0x9745=>0x52C7,
+0x9746=>0x53CB,
+0x9747=>0x5BA5,
+0x9748=>0x5E7D,
+0x9749=>0x60A0,
+0x974A=>0x6182,
+0x974B=>0x63D6,
+0x974C=>0x6709,
+0x974D=>0x67DA,
+0x974E=>0x6E67,
+0x974F=>0x6D8C,
+0x9750=>0x7336,
+0x9751=>0x7337,
+0x9752=>0x7531,
+0x9753=>0x7950,
+0x9754=>0x88D5,
+0x9755=>0x8A98,
+0x9756=>0x904A,
+0x9757=>0x9091,
+0x9758=>0x90F5,
+0x9759=>0x96C4,
+0x975A=>0x878D,
+0x975B=>0x5915,
+0x975C=>0x4E88,
+0x975D=>0x4F59,
+0x975E=>0x4E0E,
+0x975F=>0x8A89,
+0x9760=>0x8F3F,
+0x9761=>0x9810,
+0x9762=>0x50AD,
+0x9763=>0x5E7C,
+0x9764=>0x5996,
+0x9765=>0x5BB9,
+0x9766=>0x5EB8,
+0x9767=>0x63DA,
+0x9768=>0x63FA,
+0x9769=>0x64C1,
+0x976A=>0x66DC,
+0x976B=>0x694A,
+0x976C=>0x69D8,
+0x976D=>0x6D0B,
+0x976E=>0x6EB6,
+0x976F=>0x7194,
+0x9770=>0x7528,
+0x9771=>0x7AAF,
+0x9772=>0x7F8A,
+0x9773=>0x8000,
+0x9774=>0x8449,
+0x9775=>0x84C9,
+0x9776=>0x8981,
+0x9777=>0x8B21,
+0x9778=>0x8E0A,
+0x9779=>0x9065,
+0x977A=>0x967D,
+0x977B=>0x990A,
+0x977C=>0x617E,
+0x977D=>0x6291,
+0x977E=>0x6B32,
+0x9780=>0x6C83,
+0x9781=>0x6D74,
+0x9782=>0x7FCC,
+0x9783=>0x7FFC,
+0x9784=>0x6DC0,
+0x9785=>0x7F85,
+0x9786=>0x87BA,
+0x9787=>0x88F8,
+0x9788=>0x6765,
+0x9789=>0x83B1,
+0x978A=>0x983C,
+0x978B=>0x96F7,
+0x978C=>0x6D1B,
+0x978D=>0x7D61,
+0x978E=>0x843D,
+0x978F=>0x916A,
+0x9790=>0x4E71,
+0x9791=>0x5375,
+0x9792=>0x5D50,
+0x9793=>0x6B04,
+0x9794=>0x6FEB,
+0x9795=>0x85CD,
+0x9796=>0x862D,
+0x9797=>0x89A7,
+0x9798=>0x5229,
+0x9799=>0x540F,
+0x979A=>0x5C65,
+0x979B=>0x674E,
+0x979C=>0x68A8,
+0x979D=>0x7406,
+0x979E=>0x7483,
+0x979F=>0x75E2,
+0x97A0=>0x88CF,
+0x97A1=>0x88E1,
+0x97A2=>0x91CC,
+0x97A3=>0x96E2,
+0x97A4=>0x9678,
+0x97A5=>0x5F8B,
+0x97A6=>0x7387,
+0x97A7=>0x7ACB,
+0x97A8=>0x844E,
+0x97A9=>0x63A0,
+0x97AA=>0x7565,
+0x97AB=>0x5289,
+0x97AC=>0x6D41,
+0x97AD=>0x6E9C,
+0x97AE=>0x7409,
+0x97AF=>0x7559,
+0x97B0=>0x786B,
+0x97B1=>0x7C92,
+0x97B2=>0x9686,
+0x97B3=>0x7ADC,
+0x97B4=>0x9F8D,
+0x97B5=>0x4FB6,
+0x97B6=>0x616E,
+0x97B7=>0x65C5,
+0x97B8=>0x865C,
+0x97B9=>0x4E86,
+0x97BA=>0x4EAE,
+0x97BB=>0x50DA,
+0x97BC=>0x4E21,
+0x97BD=>0x51CC,
+0x97BE=>0x5BEE,
+0x97BF=>0x6599,
+0x97C0=>0x6881,
+0x97C1=>0x6DBC,
+0x97C2=>0x731F,
+0x97C3=>0x7642,
+0x97C4=>0x77AD,
+0x97C5=>0x7A1C,
+0x97C6=>0x7CE7,
+0x97C7=>0x826F,
+0x97C8=>0x8AD2,
+0x97C9=>0x907C,
+0x97CA=>0x91CF,
+0x97CB=>0x9675,
+0x97CC=>0x9818,
+0x97CD=>0x529B,
+0x97CE=>0x7DD1,
+0x97CF=>0x502B,
+0x97D0=>0x5398,
+0x97D1=>0x6797,
+0x97D2=>0x6DCB,
+0x97D3=>0x71D0,
+0x97D4=>0x7433,
+0x97D5=>0x81E8,
+0x97D6=>0x8F2A,
+0x97D7=>0x96A3,
+0x97D8=>0x9C57,
+0x97D9=>0x9E9F,
+0x97DA=>0x7460,
+0x97DB=>0x5841,
+0x97DC=>0x6D99,
+0x97DD=>0x7D2F,
+0x97DE=>0x985E,
+0x97DF=>0x4EE4,
+0x97E0=>0x4F36,
+0x97E1=>0x4F8B,
+0x97E2=>0x51B7,
+0x97E3=>0x52B1,
+0x97E4=>0x5DBA,
+0x97E5=>0x601C,
+0x97E6=>0x73B2,
+0x97E7=>0x793C,
+0x97E8=>0x82D3,
+0x97E9=>0x9234,
+0x97EA=>0x96B7,
+0x97EB=>0x96F6,
+0x97EC=>0x970A,
+0x97ED=>0x9E97,
+0x97EE=>0x9F62,
+0x97EF=>0x66A6,
+0x97F0=>0x6B74,
+0x97F1=>0x5217,
+0x97F2=>0x52A3,
+0x97F3=>0x70C8,
+0x97F4=>0x88C2,
+0x97F5=>0x5EC9,
+0x97F6=>0x604B,
+0x97F7=>0x6190,
+0x97F8=>0x6F23,
+0x97F9=>0x7149,
+0x97FA=>0x7C3E,
+0x97FB=>0x7DF4,
+0x97FC=>0x806F,
+0x9840=>0x84EE,
+0x9841=>0x9023,
+0x9842=>0x932C,
+0x9843=>0x5442,
+0x9844=>0x9B6F,
+0x9845=>0x6AD3,
+0x9846=>0x7089,
+0x9847=>0x8CC2,
+0x9848=>0x8DEF,
+0x9849=>0x9732,
+0x984A=>0x52B4,
+0x984B=>0x5A41,
+0x984C=>0x5ECA,
+0x984D=>0x5F04,
+0x984E=>0x6717,
+0x984F=>0x697C,
+0x9850=>0x6994,
+0x9851=>0x6D6A,
+0x9852=>0x6F0F,
+0x9853=>0x7262,
+0x9854=>0x72FC,
+0x9855=>0x7BED,
+0x9856=>0x8001,
+0x9857=>0x807E,
+0x9858=>0x874B,
+0x9859=>0x90CE,
+0x985A=>0x516D,
+0x985B=>0x9E93,
+0x985C=>0x7984,
+0x985D=>0x808B,
+0x985E=>0x9332,
+0x985F=>0x8AD6,
+0x9860=>0x502D,
+0x9861=>0x548C,
+0x9862=>0x8A71,
+0x9863=>0x6B6A,
+0x9864=>0x8CC4,
+0x9865=>0x8107,
+0x9866=>0x60D1,
+0x9867=>0x67A0,
+0x9868=>0x9DF2,
+0x9869=>0x4E99,
+0x986A=>0x4E98,
+0x986B=>0x9C10,
+0x986C=>0x8A6B,
+0x986D=>0x85C1,
+0x986E=>0x8568,
+0x986F=>0x6900,
+0x9870=>0x6E7E,
+0x9871=>0x7897,
+0x9872=>0x8155,
+0x989F=>0x5F0C,
+0x98A0=>0x4E10,
+0x98A1=>0x4E15,
+0x98A2=>0x4E2A,
+0x98A3=>0x4E31,
+0x98A4=>0x4E36,
+0x98A5=>0x4E3C,
+0x98A6=>0x4E3F,
+0x98A7=>0x4E42,
+0x98A8=>0x4E56,
+0x98A9=>0x4E58,
+0x98AA=>0x4E82,
+0x98AB=>0x4E85,
+0x98AC=>0x8C6B,
+0x98AD=>0x4E8A,
+0x98AE=>0x8212,
+0x98AF=>0x5F0D,
+0x98B0=>0x4E8E,
+0x98B1=>0x4E9E,
+0x98B2=>0x4E9F,
+0x98B3=>0x4EA0,
+0x98B4=>0x4EA2,
+0x98B5=>0x4EB0,
+0x98B6=>0x4EB3,
+0x98B7=>0x4EB6,
+0x98B8=>0x4ECE,
+0x98B9=>0x4ECD,
+0x98BA=>0x4EC4,
+0x98BB=>0x4EC6,
+0x98BC=>0x4EC2,
+0x98BD=>0x4ED7,
+0x98BE=>0x4EDE,
+0x98BF=>0x4EED,
+0x98C0=>0x4EDF,
+0x98C1=>0x4EF7,
+0x98C2=>0x4F09,
+0x98C3=>0x4F5A,
+0x98C4=>0x4F30,
+0x98C5=>0x4F5B,
+0x98C6=>0x4F5D,
+0x98C7=>0x4F57,
+0x98C8=>0x4F47,
+0x98C9=>0x4F76,
+0x98CA=>0x4F88,
+0x98CB=>0x4F8F,
+0x98CC=>0x4F98,
+0x98CD=>0x4F7B,
+0x98CE=>0x4F69,
+0x98CF=>0x4F70,
+0x98D0=>0x4F91,
+0x98D1=>0x4F6F,
+0x98D2=>0x4F86,
+0x98D3=>0x4F96,
+0x98D4=>0x5118,
+0x98D5=>0x4FD4,
+0x98D6=>0x4FDF,
+0x98D7=>0x4FCE,
+0x98D8=>0x4FD8,
+0x98D9=>0x4FDB,
+0x98DA=>0x4FD1,
+0x98DB=>0x4FDA,
+0x98DC=>0x4FD0,
+0x98DD=>0x4FE4,
+0x98DE=>0x4FE5,
+0x98DF=>0x501A,
+0x98E0=>0x5028,
+0x98E1=>0x5014,
+0x98E2=>0x502A,
+0x98E3=>0x5025,
+0x98E4=>0x5005,
+0x98E5=>0x4F1C,
+0x98E6=>0x4FF6,
+0x98E7=>0x5021,
+0x98E8=>0x5029,
+0x98E9=>0x502C,
+0x98EA=>0x4FFE,
+0x98EB=>0x4FEF,
+0x98EC=>0x5011,
+0x98ED=>0x5006,
+0x98EE=>0x5043,
+0x98EF=>0x5047,
+0x98F0=>0x6703,
+0x98F1=>0x5055,
+0x98F2=>0x5050,
+0x98F3=>0x5048,
+0x98F4=>0x505A,
+0x98F5=>0x5056,
+0x98F6=>0x506C,
+0x98F7=>0x5078,
+0x98F8=>0x5080,
+0x98F9=>0x509A,
+0x98FA=>0x5085,
+0x98FB=>0x50B4,
+0x98FC=>0x50B2,
+0x9940=>0x50C9,
+0x9941=>0x50CA,
+0x9942=>0x50B3,
+0x9943=>0x50C2,
+0x9944=>0x50D6,
+0x9945=>0x50DE,
+0x9946=>0x50E5,
+0x9947=>0x50ED,
+0x9948=>0x50E3,
+0x9949=>0x50EE,
+0x994A=>0x50F9,
+0x994B=>0x50F5,
+0x994C=>0x5109,
+0x994D=>0x5101,
+0x994E=>0x5102,
+0x994F=>0x5116,
+0x9950=>0x5115,
+0x9951=>0x5114,
+0x9952=>0x511A,
+0x9953=>0x5121,
+0x9954=>0x513A,
+0x9955=>0x5137,
+0x9956=>0x513C,
+0x9957=>0x513B,
+0x9958=>0x513F,
+0x9959=>0x5140,
+0x995A=>0x5152,
+0x995B=>0x514C,
+0x995C=>0x5154,
+0x995D=>0x5162,
+0x995E=>0x7AF8,
+0x995F=>0x5169,
+0x9960=>0x516A,
+0x9961=>0x516E,
+0x9962=>0x5180,
+0x9963=>0x5182,
+0x9964=>0x56D8,
+0x9965=>0x518C,
+0x9966=>0x5189,
+0x9967=>0x518F,
+0x9968=>0x5191,
+0x9969=>0x5193,
+0x996A=>0x5195,
+0x996B=>0x5196,
+0x996C=>0x51A4,
+0x996D=>0x51A6,
+0x996E=>0x51A2,
+0x996F=>0x51A9,
+0x9970=>0x51AA,
+0x9971=>0x51AB,
+0x9972=>0x51B3,
+0x9973=>0x51B1,
+0x9974=>0x51B2,
+0x9975=>0x51B0,
+0x9976=>0x51B5,
+0x9977=>0x51BD,
+0x9978=>0x51C5,
+0x9979=>0x51C9,
+0x997A=>0x51DB,
+0x997B=>0x51E0,
+0x997C=>0x8655,
+0x997D=>0x51E9,
+0x997E=>0x51ED,
+0x9980=>0x51F0,
+0x9981=>0x51F5,
+0x9982=>0x51FE,
+0x9983=>0x5204,
+0x9984=>0x520B,
+0x9985=>0x5214,
+0x9986=>0x520E,
+0x9987=>0x5227,
+0x9988=>0x522A,
+0x9989=>0x522E,
+0x998A=>0x5233,
+0x998B=>0x5239,
+0x998C=>0x524F,
+0x998D=>0x5244,
+0x998E=>0x524B,
+0x998F=>0x524C,
+0x9990=>0x525E,
+0x9991=>0x5254,
+0x9992=>0x526A,
+0x9993=>0x5274,
+0x9994=>0x5269,
+0x9995=>0x5273,
+0x9996=>0x527F,
+0x9997=>0x527D,
+0x9998=>0x528D,
+0x9999=>0x5294,
+0x999A=>0x5292,
+0x999B=>0x5271,
+0x999C=>0x5288,
+0x999D=>0x5291,
+0x999E=>0x8FA8,
+0x999F=>0x8FA7,
+0x99A0=>0x52AC,
+0x99A1=>0x52AD,
+0x99A2=>0x52BC,
+0x99A3=>0x52B5,
+0x99A4=>0x52C1,
+0x99A5=>0x52CD,
+0x99A6=>0x52D7,
+0x99A7=>0x52DE,
+0x99A8=>0x52E3,
+0x99A9=>0x52E6,
+0x99AA=>0x98ED,
+0x99AB=>0x52E0,
+0x99AC=>0x52F3,
+0x99AD=>0x52F5,
+0x99AE=>0x52F8,
+0x99AF=>0x52F9,
+0x99B0=>0x5306,
+0x99B1=>0x5308,
+0x99B2=>0x7538,
+0x99B3=>0x530D,
+0x99B4=>0x5310,
+0x99B5=>0x530F,
+0x99B6=>0x5315,
+0x99B7=>0x531A,
+0x99B8=>0x5323,
+0x99B9=>0x532F,
+0x99BA=>0x5331,
+0x99BB=>0x5333,
+0x99BC=>0x5338,
+0x99BD=>0x5340,
+0x99BE=>0x5346,
+0x99BF=>0x5345,
+0x99C0=>0x4E17,
+0x99C1=>0x5349,
+0x99C2=>0x534D,
+0x99C3=>0x51D6,
+0x99C4=>0x535E,
+0x99C5=>0x5369,
+0x99C6=>0x536E,
+0x99C7=>0x5918,
+0x99C8=>0x537B,
+0x99C9=>0x5377,
+0x99CA=>0x5382,
+0x99CB=>0x5396,
+0x99CC=>0x53A0,
+0x99CD=>0x53A6,
+0x99CE=>0x53A5,
+0x99CF=>0x53AE,
+0x99D0=>0x53B0,
+0x99D1=>0x53B6,
+0x99D2=>0x53C3,
+0x99D3=>0x7C12,
+0x99D4=>0x96D9,
+0x99D5=>0x53DF,
+0x99D6=>0x66FC,
+0x99D7=>0x71EE,
+0x99D8=>0x53EE,
+0x99D9=>0x53E8,
+0x99DA=>0x53ED,
+0x99DB=>0x53FA,
+0x99DC=>0x5401,
+0x99DD=>0x543D,
+0x99DE=>0x5440,
+0x99DF=>0x542C,
+0x99E0=>0x542D,
+0x99E1=>0x543C,
+0x99E2=>0x542E,
+0x99E3=>0x5436,
+0x99E4=>0x5429,
+0x99E5=>0x541D,
+0x99E6=>0x544E,
+0x99E7=>0x548F,
+0x99E8=>0x5475,
+0x99E9=>0x548E,
+0x99EA=>0x545F,
+0x99EB=>0x5471,
+0x99EC=>0x5477,
+0x99ED=>0x5470,
+0x99EE=>0x5492,
+0x99EF=>0x547B,
+0x99F0=>0x5480,
+0x99F1=>0x5476,
+0x99F2=>0x5484,
+0x99F3=>0x5490,
+0x99F4=>0x5486,
+0x99F5=>0x54C7,
+0x99F6=>0x54A2,
+0x99F7=>0x54B8,
+0x99F8=>0x54A5,
+0x99F9=>0x54AC,
+0x99FA=>0x54C4,
+0x99FB=>0x54C8,
+0x99FC=>0x54A8,
+0x9A40=>0x54AB,
+0x9A41=>0x54C2,
+0x9A42=>0x54A4,
+0x9A43=>0x54BE,
+0x9A44=>0x54BC,
+0x9A45=>0x54D8,
+0x9A46=>0x54E5,
+0x9A47=>0x54E6,
+0x9A48=>0x550F,
+0x9A49=>0x5514,
+0x9A4A=>0x54FD,
+0x9A4B=>0x54EE,
+0x9A4C=>0x54ED,
+0x9A4D=>0x54FA,
+0x9A4E=>0x54E2,
+0x9A4F=>0x5539,
+0x9A50=>0x5540,
+0x9A51=>0x5563,
+0x9A52=>0x554C,
+0x9A53=>0x552E,
+0x9A54=>0x555C,
+0x9A55=>0x5545,
+0x9A56=>0x5556,
+0x9A57=>0x5557,
+0x9A58=>0x5538,
+0x9A59=>0x5533,
+0x9A5A=>0x555D,
+0x9A5B=>0x5599,
+0x9A5C=>0x5580,
+0x9A5D=>0x54AF,
+0x9A5E=>0x558A,
+0x9A5F=>0x559F,
+0x9A60=>0x557B,
+0x9A61=>0x557E,
+0x9A62=>0x5598,
+0x9A63=>0x559E,
+0x9A64=>0x55AE,
+0x9A65=>0x557C,
+0x9A66=>0x5583,
+0x9A67=>0x55A9,
+0x9A68=>0x5587,
+0x9A69=>0x55A8,
+0x9A6A=>0x55DA,
+0x9A6B=>0x55C5,
+0x9A6C=>0x55DF,
+0x9A6D=>0x55C4,
+0x9A6E=>0x55DC,
+0x9A6F=>0x55E4,
+0x9A70=>0x55D4,
+0x9A71=>0x5614,
+0x9A72=>0x55F7,
+0x9A73=>0x5616,
+0x9A74=>0x55FE,
+0x9A75=>0x55FD,
+0x9A76=>0x561B,
+0x9A77=>0x55F9,
+0x9A78=>0x564E,
+0x9A79=>0x5650,
+0x9A7A=>0x71DF,
+0x9A7B=>0x5634,
+0x9A7C=>0x5636,
+0x9A7D=>0x5632,
+0x9A7E=>0x5638,
+0x9A80=>0x566B,
+0x9A81=>0x5664,
+0x9A82=>0x562F,
+0x9A83=>0x566C,
+0x9A84=>0x566A,
+0x9A85=>0x5686,
+0x9A86=>0x5680,
+0x9A87=>0x568A,
+0x9A88=>0x56A0,
+0x9A89=>0x5694,
+0x9A8A=>0x568F,
+0x9A8B=>0x56A5,
+0x9A8C=>0x56AE,
+0x9A8D=>0x56B6,
+0x9A8E=>0x56B4,
+0x9A8F=>0x56C2,
+0x9A90=>0x56BC,
+0x9A91=>0x56C1,
+0x9A92=>0x56C3,
+0x9A93=>0x56C0,
+0x9A94=>0x56C8,
+0x9A95=>0x56CE,
+0x9A96=>0x56D1,
+0x9A97=>0x56D3,
+0x9A98=>0x56D7,
+0x9A99=>0x56EE,
+0x9A9A=>0x56F9,
+0x9A9B=>0x5700,
+0x9A9C=>0x56FF,
+0x9A9D=>0x5704,
+0x9A9E=>0x5709,
+0x9A9F=>0x5708,
+0x9AA0=>0x570B,
+0x9AA1=>0x570D,
+0x9AA2=>0x5713,
+0x9AA3=>0x5718,
+0x9AA4=>0x5716,
+0x9AA5=>0x55C7,
+0x9AA6=>0x571C,
+0x9AA7=>0x5726,
+0x9AA8=>0x5737,
+0x9AA9=>0x5738,
+0x9AAA=>0x574E,
+0x9AAB=>0x573B,
+0x9AAC=>0x5740,
+0x9AAD=>0x574F,
+0x9AAE=>0x5769,
+0x9AAF=>0x57C0,
+0x9AB0=>0x5788,
+0x9AB1=>0x5761,
+0x9AB2=>0x577F,
+0x9AB3=>0x5789,
+0x9AB4=>0x5793,
+0x9AB5=>0x57A0,
+0x9AB6=>0x57B3,
+0x9AB7=>0x57A4,
+0x9AB8=>0x57AA,
+0x9AB9=>0x57B0,
+0x9ABA=>0x57C3,
+0x9ABB=>0x57C6,
+0x9ABC=>0x57D4,
+0x9ABD=>0x57D2,
+0x9ABE=>0x57D3,
+0x9ABF=>0x580A,
+0x9AC0=>0x57D6,
+0x9AC1=>0x57E3,
+0x9AC2=>0x580B,
+0x9AC3=>0x5819,
+0x9AC4=>0x581D,
+0x9AC5=>0x5872,
+0x9AC6=>0x5821,
+0x9AC7=>0x5862,
+0x9AC8=>0x584B,
+0x9AC9=>0x5870,
+0x9ACA=>0x6BC0,
+0x9ACB=>0x5852,
+0x9ACC=>0x583D,
+0x9ACD=>0x5879,
+0x9ACE=>0x5885,
+0x9ACF=>0x58B9,
+0x9AD0=>0x589F,
+0x9AD1=>0x58AB,
+0x9AD2=>0x58BA,
+0x9AD3=>0x58DE,
+0x9AD4=>0x58BB,
+0x9AD5=>0x58B8,
+0x9AD6=>0x58AE,
+0x9AD7=>0x58C5,
+0x9AD8=>0x58D3,
+0x9AD9=>0x58D1,
+0x9ADA=>0x58D7,
+0x9ADB=>0x58D9,
+0x9ADC=>0x58D8,
+0x9ADD=>0x58E5,
+0x9ADE=>0x58DC,
+0x9ADF=>0x58E4,
+0x9AE0=>0x58DF,
+0x9AE1=>0x58EF,
+0x9AE2=>0x58FA,
+0x9AE3=>0x58F9,
+0x9AE4=>0x58FB,
+0x9AE5=>0x58FC,
+0x9AE6=>0x58FD,
+0x9AE7=>0x5902,
+0x9AE8=>0x590A,
+0x9AE9=>0x5910,
+0x9AEA=>0x591B,
+0x9AEB=>0x68A6,
+0x9AEC=>0x5925,
+0x9AED=>0x592C,
+0x9AEE=>0x592D,
+0x9AEF=>0x5932,
+0x9AF0=>0x5938,
+0x9AF1=>0x593E,
+0x9AF2=>0x7AD2,
+0x9AF3=>0x5955,
+0x9AF4=>0x5950,
+0x9AF5=>0x594E,
+0x9AF6=>0x595A,
+0x9AF7=>0x5958,
+0x9AF8=>0x5962,
+0x9AF9=>0x5960,
+0x9AFA=>0x5967,
+0x9AFB=>0x596C,
+0x9AFC=>0x5969,
+0x9B40=>0x5978,
+0x9B41=>0x5981,
+0x9B42=>0x599D,
+0x9B43=>0x4F5E,
+0x9B44=>0x4FAB,
+0x9B45=>0x59A3,
+0x9B46=>0x59B2,
+0x9B47=>0x59C6,
+0x9B48=>0x59E8,
+0x9B49=>0x59DC,
+0x9B4A=>0x598D,
+0x9B4B=>0x59D9,
+0x9B4C=>0x59DA,
+0x9B4D=>0x5A25,
+0x9B4E=>0x5A1F,
+0x9B4F=>0x5A11,
+0x9B50=>0x5A1C,
+0x9B51=>0x5A09,
+0x9B52=>0x5A1A,
+0x9B53=>0x5A40,
+0x9B54=>0x5A6C,
+0x9B55=>0x5A49,
+0x9B56=>0x5A35,
+0x9B57=>0x5A36,
+0x9B58=>0x5A62,
+0x9B59=>0x5A6A,
+0x9B5A=>0x5A9A,
+0x9B5B=>0x5ABC,
+0x9B5C=>0x5ABE,
+0x9B5D=>0x5ACB,
+0x9B5E=>0x5AC2,
+0x9B5F=>0x5ABD,
+0x9B60=>0x5AE3,
+0x9B61=>0x5AD7,
+0x9B62=>0x5AE6,
+0x9B63=>0x5AE9,
+0x9B64=>0x5AD6,
+0x9B65=>0x5AFA,
+0x9B66=>0x5AFB,
+0x9B67=>0x5B0C,
+0x9B68=>0x5B0B,
+0x9B69=>0x5B16,
+0x9B6A=>0x5B32,
+0x9B6B=>0x5AD0,
+0x9B6C=>0x5B2A,
+0x9B6D=>0x5B36,
+0x9B6E=>0x5B3E,
+0x9B6F=>0x5B43,
+0x9B70=>0x5B45,
+0x9B71=>0x5B40,
+0x9B72=>0x5B51,
+0x9B73=>0x5B55,
+0x9B74=>0x5B5A,
+0x9B75=>0x5B5B,
+0x9B76=>0x5B65,
+0x9B77=>0x5B69,
+0x9B78=>0x5B70,
+0x9B79=>0x5B73,
+0x9B7A=>0x5B75,
+0x9B7B=>0x5B78,
+0x9B7C=>0x6588,
+0x9B7D=>0x5B7A,
+0x9B7E=>0x5B80,
+0x9B80=>0x5B83,
+0x9B81=>0x5BA6,
+0x9B82=>0x5BB8,
+0x9B83=>0x5BC3,
+0x9B84=>0x5BC7,
+0x9B85=>0x5BC9,
+0x9B86=>0x5BD4,
+0x9B87=>0x5BD0,
+0x9B88=>0x5BE4,
+0x9B89=>0x5BE6,
+0x9B8A=>0x5BE2,
+0x9B8B=>0x5BDE,
+0x9B8C=>0x5BE5,
+0x9B8D=>0x5BEB,
+0x9B8E=>0x5BF0,
+0x9B8F=>0x5BF6,
+0x9B90=>0x5BF3,
+0x9B91=>0x5C05,
+0x9B92=>0x5C07,
+0x9B93=>0x5C08,
+0x9B94=>0x5C0D,
+0x9B95=>0x5C13,
+0x9B96=>0x5C20,
+0x9B97=>0x5C22,
+0x9B98=>0x5C28,
+0x9B99=>0x5C38,
+0x9B9A=>0x5C39,
+0x9B9B=>0x5C41,
+0x9B9C=>0x5C46,
+0x9B9D=>0x5C4E,
+0x9B9E=>0x5C53,
+0x9B9F=>0x5C50,
+0x9BA0=>0x5C4F,
+0x9BA1=>0x5B71,
+0x9BA2=>0x5C6C,
+0x9BA3=>0x5C6E,
+0x9BA4=>0x4E62,
+0x9BA5=>0x5C76,
+0x9BA6=>0x5C79,
+0x9BA7=>0x5C8C,
+0x9BA8=>0x5C91,
+0x9BA9=>0x5C94,
+0x9BAA=>0x599B,
+0x9BAB=>0x5CAB,
+0x9BAC=>0x5CBB,
+0x9BAD=>0x5CB6,
+0x9BAE=>0x5CBC,
+0x9BAF=>0x5CB7,
+0x9BB0=>0x5CC5,
+0x9BB1=>0x5CBE,
+0x9BB2=>0x5CC7,
+0x9BB3=>0x5CD9,
+0x9BB4=>0x5CE9,
+0x9BB5=>0x5CFD,
+0x9BB6=>0x5CFA,
+0x9BB7=>0x5CED,
+0x9BB8=>0x5D8C,
+0x9BB9=>0x5CEA,
+0x9BBA=>0x5D0B,
+0x9BBB=>0x5D15,
+0x9BBC=>0x5D17,
+0x9BBD=>0x5D5C,
+0x9BBE=>0x5D1F,
+0x9BBF=>0x5D1B,
+0x9BC0=>0x5D11,
+0x9BC1=>0x5D14,
+0x9BC2=>0x5D22,
+0x9BC3=>0x5D1A,
+0x9BC4=>0x5D19,
+0x9BC5=>0x5D18,
+0x9BC6=>0x5D4C,
+0x9BC7=>0x5D52,
+0x9BC8=>0x5D4E,
+0x9BC9=>0x5D4B,
+0x9BCA=>0x5D6C,
+0x9BCB=>0x5D73,
+0x9BCC=>0x5D76,
+0x9BCD=>0x5D87,
+0x9BCE=>0x5D84,
+0x9BCF=>0x5D82,
+0x9BD0=>0x5DA2,
+0x9BD1=>0x5D9D,
+0x9BD2=>0x5DAC,
+0x9BD3=>0x5DAE,
+0x9BD4=>0x5DBD,
+0x9BD5=>0x5D90,
+0x9BD6=>0x5DB7,
+0x9BD7=>0x5DBC,
+0x9BD8=>0x5DC9,
+0x9BD9=>0x5DCD,
+0x9BDA=>0x5DD3,
+0x9BDB=>0x5DD2,
+0x9BDC=>0x5DD6,
+0x9BDD=>0x5DDB,
+0x9BDE=>0x5DEB,
+0x9BDF=>0x5DF2,
+0x9BE0=>0x5DF5,
+0x9BE1=>0x5E0B,
+0x9BE2=>0x5E1A,
+0x9BE3=>0x5E19,
+0x9BE4=>0x5E11,
+0x9BE5=>0x5E1B,
+0x9BE6=>0x5E36,
+0x9BE7=>0x5E37,
+0x9BE8=>0x5E44,
+0x9BE9=>0x5E43,
+0x9BEA=>0x5E40,
+0x9BEB=>0x5E4E,
+0x9BEC=>0x5E57,
+0x9BED=>0x5E54,
+0x9BEE=>0x5E5F,
+0x9BEF=>0x5E62,
+0x9BF0=>0x5E64,
+0x9BF1=>0x5E47,
+0x9BF2=>0x5E75,
+0x9BF3=>0x5E76,
+0x9BF4=>0x5E7A,
+0x9BF5=>0x9EBC,
+0x9BF6=>0x5E7F,
+0x9BF7=>0x5EA0,
+0x9BF8=>0x5EC1,
+0x9BF9=>0x5EC2,
+0x9BFA=>0x5EC8,
+0x9BFB=>0x5ED0,
+0x9BFC=>0x5ECF,
+0x9C40=>0x5ED6,
+0x9C41=>0x5EE3,
+0x9C42=>0x5EDD,
+0x9C43=>0x5EDA,
+0x9C44=>0x5EDB,
+0x9C45=>0x5EE2,
+0x9C46=>0x5EE1,
+0x9C47=>0x5EE8,
+0x9C48=>0x5EE9,
+0x9C49=>0x5EEC,
+0x9C4A=>0x5EF1,
+0x9C4B=>0x5EF3,
+0x9C4C=>0x5EF0,
+0x9C4D=>0x5EF4,
+0x9C4E=>0x5EF8,
+0x9C4F=>0x5EFE,
+0x9C50=>0x5F03,
+0x9C51=>0x5F09,
+0x9C52=>0x5F5D,
+0x9C53=>0x5F5C,
+0x9C54=>0x5F0B,
+0x9C55=>0x5F11,
+0x9C56=>0x5F16,
+0x9C57=>0x5F29,
+0x9C58=>0x5F2D,
+0x9C59=>0x5F38,
+0x9C5A=>0x5F41,
+0x9C5B=>0x5F48,
+0x9C5C=>0x5F4C,
+0x9C5D=>0x5F4E,
+0x9C5E=>0x5F2F,
+0x9C5F=>0x5F51,
+0x9C60=>0x5F56,
+0x9C61=>0x5F57,
+0x9C62=>0x5F59,
+0x9C63=>0x5F61,
+0x9C64=>0x5F6D,
+0x9C65=>0x5F73,
+0x9C66=>0x5F77,
+0x9C67=>0x5F83,
+0x9C68=>0x5F82,
+0x9C69=>0x5F7F,
+0x9C6A=>0x5F8A,
+0x9C6B=>0x5F88,
+0x9C6C=>0x5F91,
+0x9C6D=>0x5F87,
+0x9C6E=>0x5F9E,
+0x9C6F=>0x5F99,
+0x9C70=>0x5F98,
+0x9C71=>0x5FA0,
+0x9C72=>0x5FA8,
+0x9C73=>0x5FAD,
+0x9C74=>0x5FBC,
+0x9C75=>0x5FD6,
+0x9C76=>0x5FFB,
+0x9C77=>0x5FE4,
+0x9C78=>0x5FF8,
+0x9C79=>0x5FF1,
+0x9C7A=>0x5FDD,
+0x9C7B=>0x60B3,
+0x9C7C=>0x5FFF,
+0x9C7D=>0x6021,
+0x9C7E=>0x6060,
+0x9C80=>0x6019,
+0x9C81=>0x6010,
+0x9C82=>0x6029,
+0x9C83=>0x600E,
+0x9C84=>0x6031,
+0x9C85=>0x601B,
+0x9C86=>0x6015,
+0x9C87=>0x602B,
+0x9C88=>0x6026,
+0x9C89=>0x600F,
+0x9C8A=>0x603A,
+0x9C8B=>0x605A,
+0x9C8C=>0x6041,
+0x9C8D=>0x606A,
+0x9C8E=>0x6077,
+0x9C8F=>0x605F,
+0x9C90=>0x604A,
+0x9C91=>0x6046,
+0x9C92=>0x604D,
+0x9C93=>0x6063,
+0x9C94=>0x6043,
+0x9C95=>0x6064,
+0x9C96=>0x6042,
+0x9C97=>0x606C,
+0x9C98=>0x606B,
+0x9C99=>0x6059,
+0x9C9A=>0x6081,
+0x9C9B=>0x608D,
+0x9C9C=>0x60E7,
+0x9C9D=>0x6083,
+0x9C9E=>0x609A,
+0x9C9F=>0x6084,
+0x9CA0=>0x609B,
+0x9CA1=>0x6096,
+0x9CA2=>0x6097,
+0x9CA3=>0x6092,
+0x9CA4=>0x60A7,
+0x9CA5=>0x608B,
+0x9CA6=>0x60E1,
+0x9CA7=>0x60B8,
+0x9CA8=>0x60E0,
+0x9CA9=>0x60D3,
+0x9CAA=>0x60B4,
+0x9CAB=>0x5FF0,
+0x9CAC=>0x60BD,
+0x9CAD=>0x60C6,
+0x9CAE=>0x60B5,
+0x9CAF=>0x60D8,
+0x9CB0=>0x614D,
+0x9CB1=>0x6115,
+0x9CB2=>0x6106,
+0x9CB3=>0x60F6,
+0x9CB4=>0x60F7,
+0x9CB5=>0x6100,
+0x9CB6=>0x60F4,
+0x9CB7=>0x60FA,
+0x9CB8=>0x6103,
+0x9CB9=>0x6121,
+0x9CBA=>0x60FB,
+0x9CBB=>0x60F1,
+0x9CBC=>0x610D,
+0x9CBD=>0x610E,
+0x9CBE=>0x6147,
+0x9CBF=>0x613E,
+0x9CC0=>0x6128,
+0x9CC1=>0x6127,
+0x9CC2=>0x614A,
+0x9CC3=>0x613F,
+0x9CC4=>0x613C,
+0x9CC5=>0x612C,
+0x9CC6=>0x6134,
+0x9CC7=>0x613D,
+0x9CC8=>0x6142,
+0x9CC9=>0x6144,
+0x9CCA=>0x6173,
+0x9CCB=>0x6177,
+0x9CCC=>0x6158,
+0x9CCD=>0x6159,
+0x9CCE=>0x615A,
+0x9CCF=>0x616B,
+0x9CD0=>0x6174,
+0x9CD1=>0x616F,
+0x9CD2=>0x6165,
+0x9CD3=>0x6171,
+0x9CD4=>0x615F,
+0x9CD5=>0x615D,
+0x9CD6=>0x6153,
+0x9CD7=>0x6175,
+0x9CD8=>0x6199,
+0x9CD9=>0x6196,
+0x9CDA=>0x6187,
+0x9CDB=>0x61AC,
+0x9CDC=>0x6194,
+0x9CDD=>0x619A,
+0x9CDE=>0x618A,
+0x9CDF=>0x6191,
+0x9CE0=>0x61AB,
+0x9CE1=>0x61AE,
+0x9CE2=>0x61CC,
+0x9CE3=>0x61CA,
+0x9CE4=>0x61C9,
+0x9CE5=>0x61F7,
+0x9CE6=>0x61C8,
+0x9CE7=>0x61C3,
+0x9CE8=>0x61C6,
+0x9CE9=>0x61BA,
+0x9CEA=>0x61CB,
+0x9CEB=>0x7F79,
+0x9CEC=>0x61CD,
+0x9CED=>0x61E6,
+0x9CEE=>0x61E3,
+0x9CEF=>0x61F6,
+0x9CF0=>0x61FA,
+0x9CF1=>0x61F4,
+0x9CF2=>0x61FF,
+0x9CF3=>0x61FD,
+0x9CF4=>0x61FC,
+0x9CF5=>0x61FE,
+0x9CF6=>0x6200,
+0x9CF7=>0x6208,
+0x9CF8=>0x6209,
+0x9CF9=>0x620D,
+0x9CFA=>0x620C,
+0x9CFB=>0x6214,
+0x9CFC=>0x621B,
+0x9D40=>0x621E,
+0x9D41=>0x6221,
+0x9D42=>0x622A,
+0x9D43=>0x622E,
+0x9D44=>0x6230,
+0x9D45=>0x6232,
+0x9D46=>0x6233,
+0x9D47=>0x6241,
+0x9D48=>0x624E,
+0x9D49=>0x625E,
+0x9D4A=>0x6263,
+0x9D4B=>0x625B,
+0x9D4C=>0x6260,
+0x9D4D=>0x6268,
+0x9D4E=>0x627C,
+0x9D4F=>0x6282,
+0x9D50=>0x6289,
+0x9D51=>0x627E,
+0x9D52=>0x6292,
+0x9D53=>0x6293,
+0x9D54=>0x6296,
+0x9D55=>0x62D4,
+0x9D56=>0x6283,
+0x9D57=>0x6294,
+0x9D58=>0x62D7,
+0x9D59=>0x62D1,
+0x9D5A=>0x62BB,
+0x9D5B=>0x62CF,
+0x9D5C=>0x62FF,
+0x9D5D=>0x62C6,
+0x9D5E=>0x64D4,
+0x9D5F=>0x62C8,
+0x9D60=>0x62DC,
+0x9D61=>0x62CC,
+0x9D62=>0x62CA,
+0x9D63=>0x62C2,
+0x9D64=>0x62C7,
+0x9D65=>0x629B,
+0x9D66=>0x62C9,
+0x9D67=>0x630C,
+0x9D68=>0x62EE,
+0x9D69=>0x62F1,
+0x9D6A=>0x6327,
+0x9D6B=>0x6302,
+0x9D6C=>0x6308,
+0x9D6D=>0x62EF,
+0x9D6E=>0x62F5,
+0x9D6F=>0x6350,
+0x9D70=>0x633E,
+0x9D71=>0x634D,
+0x9D72=>0x641C,
+0x9D73=>0x634F,
+0x9D74=>0x6396,
+0x9D75=>0x638E,
+0x9D76=>0x6380,
+0x9D77=>0x63AB,
+0x9D78=>0x6376,
+0x9D79=>0x63A3,
+0x9D7A=>0x638F,
+0x9D7B=>0x6389,
+0x9D7C=>0x639F,
+0x9D7D=>0x63B5,
+0x9D7E=>0x636B,
+0x9D80=>0x6369,
+0x9D81=>0x63BE,
+0x9D82=>0x63E9,
+0x9D83=>0x63C0,
+0x9D84=>0x63C6,
+0x9D85=>0x63E3,
+0x9D86=>0x63C9,
+0x9D87=>0x63D2,
+0x9D88=>0x63F6,
+0x9D89=>0x63C4,
+0x9D8A=>0x6416,
+0x9D8B=>0x6434,
+0x9D8C=>0x6406,
+0x9D8D=>0x6413,
+0x9D8E=>0x6426,
+0x9D8F=>0x6436,
+0x9D90=>0x651D,
+0x9D91=>0x6417,
+0x9D92=>0x6428,
+0x9D93=>0x640F,
+0x9D94=>0x6467,
+0x9D95=>0x646F,
+0x9D96=>0x6476,
+0x9D97=>0x644E,
+0x9D98=>0x652A,
+0x9D99=>0x6495,
+0x9D9A=>0x6493,
+0x9D9B=>0x64A5,
+0x9D9C=>0x64A9,
+0x9D9D=>0x6488,
+0x9D9E=>0x64BC,
+0x9D9F=>0x64DA,
+0x9DA0=>0x64D2,
+0x9DA1=>0x64C5,
+0x9DA2=>0x64C7,
+0x9DA3=>0x64BB,
+0x9DA4=>0x64D8,
+0x9DA5=>0x64C2,
+0x9DA6=>0x64F1,
+0x9DA7=>0x64E7,
+0x9DA8=>0x8209,
+0x9DA9=>0x64E0,
+0x9DAA=>0x64E1,
+0x9DAB=>0x62AC,
+0x9DAC=>0x64E3,
+0x9DAD=>0x64EF,
+0x9DAE=>0x652C,
+0x9DAF=>0x64F6,
+0x9DB0=>0x64F4,
+0x9DB1=>0x64F2,
+0x9DB2=>0x64FA,
+0x9DB3=>0x6500,
+0x9DB4=>0x64FD,
+0x9DB5=>0x6518,
+0x9DB6=>0x651C,
+0x9DB7=>0x6505,
+0x9DB8=>0x6524,
+0x9DB9=>0x6523,
+0x9DBA=>0x652B,
+0x9DBB=>0x6534,
+0x9DBC=>0x6535,
+0x9DBD=>0x6537,
+0x9DBE=>0x6536,
+0x9DBF=>0x6538,
+0x9DC0=>0x754B,
+0x9DC1=>0x6548,
+0x9DC2=>0x6556,
+0x9DC3=>0x6555,
+0x9DC4=>0x654D,
+0x9DC5=>0x6558,
+0x9DC6=>0x655E,
+0x9DC7=>0x655D,
+0x9DC8=>0x6572,
+0x9DC9=>0x6578,
+0x9DCA=>0x6582,
+0x9DCB=>0x6583,
+0x9DCC=>0x8B8A,
+0x9DCD=>0x659B,
+0x9DCE=>0x659F,
+0x9DCF=>0x65AB,
+0x9DD0=>0x65B7,
+0x9DD1=>0x65C3,
+0x9DD2=>0x65C6,
+0x9DD3=>0x65C1,
+0x9DD4=>0x65C4,
+0x9DD5=>0x65CC,
+0x9DD6=>0x65D2,
+0x9DD7=>0x65DB,
+0x9DD8=>0x65D9,
+0x9DD9=>0x65E0,
+0x9DDA=>0x65E1,
+0x9DDB=>0x65F1,
+0x9DDC=>0x6772,
+0x9DDD=>0x660A,
+0x9DDE=>0x6603,
+0x9DDF=>0x65FB,
+0x9DE0=>0x6773,
+0x9DE1=>0x6635,
+0x9DE2=>0x6636,
+0x9DE3=>0x6634,
+0x9DE4=>0x661C,
+0x9DE5=>0x664F,
+0x9DE6=>0x6644,
+0x9DE7=>0x6649,
+0x9DE8=>0x6641,
+0x9DE9=>0x665E,
+0x9DEA=>0x665D,
+0x9DEB=>0x6664,
+0x9DEC=>0x6667,
+0x9DED=>0x6668,
+0x9DEE=>0x665F,
+0x9DEF=>0x6662,
+0x9DF0=>0x6670,
+0x9DF1=>0x6683,
+0x9DF2=>0x6688,
+0x9DF3=>0x668E,
+0x9DF4=>0x6689,
+0x9DF5=>0x6684,
+0x9DF6=>0x6698,
+0x9DF7=>0x669D,
+0x9DF8=>0x66C1,
+0x9DF9=>0x66B9,
+0x9DFA=>0x66C9,
+0x9DFB=>0x66BE,
+0x9DFC=>0x66BC,
+0x9E40=>0x66C4,
+0x9E41=>0x66B8,
+0x9E42=>0x66D6,
+0x9E43=>0x66DA,
+0x9E44=>0x66E0,
+0x9E45=>0x663F,
+0x9E46=>0x66E6,
+0x9E47=>0x66E9,
+0x9E48=>0x66F0,
+0x9E49=>0x66F5,
+0x9E4A=>0x66F7,
+0x9E4B=>0x670F,
+0x9E4C=>0x6716,
+0x9E4D=>0x671E,
+0x9E4E=>0x6726,
+0x9E4F=>0x6727,
+0x9E50=>0x9738,
+0x9E51=>0x672E,
+0x9E52=>0x673F,
+0x9E53=>0x6736,
+0x9E54=>0x6741,
+0x9E55=>0x6738,
+0x9E56=>0x6737,
+0x9E57=>0x6746,
+0x9E58=>0x675E,
+0x9E59=>0x6760,
+0x9E5A=>0x6759,
+0x9E5B=>0x6763,
+0x9E5C=>0x6764,
+0x9E5D=>0x6789,
+0x9E5E=>0x6770,
+0x9E5F=>0x67A9,
+0x9E60=>0x677C,
+0x9E61=>0x676A,
+0x9E62=>0x678C,
+0x9E63=>0x678B,
+0x9E64=>0x67A6,
+0x9E65=>0x67A1,
+0x9E66=>0x6785,
+0x9E67=>0x67B7,
+0x9E68=>0x67EF,
+0x9E69=>0x67B4,
+0x9E6A=>0x67EC,
+0x9E6B=>0x67B3,
+0x9E6C=>0x67E9,
+0x9E6D=>0x67B8,
+0x9E6E=>0x67E4,
+0x9E6F=>0x67DE,
+0x9E70=>0x67DD,
+0x9E71=>0x67E2,
+0x9E72=>0x67EE,
+0x9E73=>0x67B9,
+0x9E74=>0x67CE,
+0x9E75=>0x67C6,
+0x9E76=>0x67E7,
+0x9E77=>0x6A9C,
+0x9E78=>0x681E,
+0x9E79=>0x6846,
+0x9E7A=>0x6829,
+0x9E7B=>0x6840,
+0x9E7C=>0x684D,
+0x9E7D=>0x6832,
+0x9E7E=>0x684E,
+0x9E80=>0x68B3,
+0x9E81=>0x682B,
+0x9E82=>0x6859,
+0x9E83=>0x6863,
+0x9E84=>0x6877,
+0x9E85=>0x687F,
+0x9E86=>0x689F,
+0x9E87=>0x688F,
+0x9E88=>0x68AD,
+0x9E89=>0x6894,
+0x9E8A=>0x689D,
+0x9E8B=>0x689B,
+0x9E8C=>0x6883,
+0x9E8D=>0x6AAE,
+0x9E8E=>0x68B9,
+0x9E8F=>0x6874,
+0x9E90=>0x68B5,
+0x9E91=>0x68A0,
+0x9E92=>0x68BA,
+0x9E93=>0x690F,
+0x9E94=>0x688D,
+0x9E95=>0x687E,
+0x9E96=>0x6901,
+0x9E97=>0x68CA,
+0x9E98=>0x6908,
+0x9E99=>0x68D8,
+0x9E9A=>0x6922,
+0x9E9B=>0x6926,
+0x9E9C=>0x68E1,
+0x9E9D=>0x690C,
+0x9E9E=>0x68CD,
+0x9E9F=>0x68D4,
+0x9EA0=>0x68E7,
+0x9EA1=>0x68D5,
+0x9EA2=>0x6936,
+0x9EA3=>0x6912,
+0x9EA4=>0x6904,
+0x9EA5=>0x68D7,
+0x9EA6=>0x68E3,
+0x9EA7=>0x6925,
+0x9EA8=>0x68F9,
+0x9EA9=>0x68E0,
+0x9EAA=>0x68EF,
+0x9EAB=>0x6928,
+0x9EAC=>0x692A,
+0x9EAD=>0x691A,
+0x9EAE=>0x6923,
+0x9EAF=>0x6921,
+0x9EB0=>0x68C6,
+0x9EB1=>0x6979,
+0x9EB2=>0x6977,
+0x9EB3=>0x695C,
+0x9EB4=>0x6978,
+0x9EB5=>0x696B,
+0x9EB6=>0x6954,
+0x9EB7=>0x697E,
+0x9EB8=>0x696E,
+0x9EB9=>0x6939,
+0x9EBA=>0x6974,
+0x9EBB=>0x693D,
+0x9EBC=>0x6959,
+0x9EBD=>0x6930,
+0x9EBE=>0x6961,
+0x9EBF=>0x695E,
+0x9EC0=>0x695D,
+0x9EC1=>0x6981,
+0x9EC2=>0x696A,
+0x9EC3=>0x69B2,
+0x9EC4=>0x69AE,
+0x9EC5=>0x69D0,
+0x9EC6=>0x69BF,
+0x9EC7=>0x69C1,
+0x9EC8=>0x69D3,
+0x9EC9=>0x69BE,
+0x9ECA=>0x69CE,
+0x9ECB=>0x5BE8,
+0x9ECC=>0x69CA,
+0x9ECD=>0x69DD,
+0x9ECE=>0x69BB,
+0x9ECF=>0x69C3,
+0x9ED0=>0x69A7,
+0x9ED1=>0x6A2E,
+0x9ED2=>0x6991,
+0x9ED3=>0x69A0,
+0x9ED4=>0x699C,
+0x9ED5=>0x6995,
+0x9ED6=>0x69B4,
+0x9ED7=>0x69DE,
+0x9ED8=>0x69E8,
+0x9ED9=>0x6A02,
+0x9EDA=>0x6A1B,
+0x9EDB=>0x69FF,
+0x9EDC=>0x6B0A,
+0x9EDD=>0x69F9,
+0x9EDE=>0x69F2,
+0x9EDF=>0x69E7,
+0x9EE0=>0x6A05,
+0x9EE1=>0x69B1,
+0x9EE2=>0x6A1E,
+0x9EE3=>0x69ED,
+0x9EE4=>0x6A14,
+0x9EE5=>0x69EB,
+0x9EE6=>0x6A0A,
+0x9EE7=>0x6A12,
+0x9EE8=>0x6AC1,
+0x9EE9=>0x6A23,
+0x9EEA=>0x6A13,
+0x9EEB=>0x6A44,
+0x9EEC=>0x6A0C,
+0x9EED=>0x6A72,
+0x9EEE=>0x6A36,
+0x9EEF=>0x6A78,
+0x9EF0=>0x6A47,
+0x9EF1=>0x6A62,
+0x9EF2=>0x6A59,
+0x9EF3=>0x6A66,
+0x9EF4=>0x6A48,
+0x9EF5=>0x6A38,
+0x9EF6=>0x6A22,
+0x9EF7=>0x6A90,
+0x9EF8=>0x6A8D,
+0x9EF9=>0x6AA0,
+0x9EFA=>0x6A84,
+0x9EFB=>0x6AA2,
+0x9EFC=>0x6AA3,
+0x9F40=>0x6A97,
+0x9F41=>0x8617,
+0x9F42=>0x6ABB,
+0x9F43=>0x6AC3,
+0x9F44=>0x6AC2,
+0x9F45=>0x6AB8,
+0x9F46=>0x6AB3,
+0x9F47=>0x6AAC,
+0x9F48=>0x6ADE,
+0x9F49=>0x6AD1,
+0x9F4A=>0x6ADF,
+0x9F4B=>0x6AAA,
+0x9F4C=>0x6ADA,
+0x9F4D=>0x6AEA,
+0x9F4E=>0x6AFB,
+0x9F4F=>0x6B05,
+0x9F50=>0x8616,
+0x9F51=>0x6AFA,
+0x9F52=>0x6B12,
+0x9F53=>0x6B16,
+0x9F54=>0x9B31,
+0x9F55=>0x6B1F,
+0x9F56=>0x6B38,
+0x9F57=>0x6B37,
+0x9F58=>0x76DC,
+0x9F59=>0x6B39,
+0x9F5A=>0x98EE,
+0x9F5B=>0x6B47,
+0x9F5C=>0x6B43,
+0x9F5D=>0x6B49,
+0x9F5E=>0x6B50,
+0x9F5F=>0x6B59,
+0x9F60=>0x6B54,
+0x9F61=>0x6B5B,
+0x9F62=>0x6B5F,
+0x9F63=>0x6B61,
+0x9F64=>0x6B78,
+0x9F65=>0x6B79,
+0x9F66=>0x6B7F,
+0x9F67=>0x6B80,
+0x9F68=>0x6B84,
+0x9F69=>0x6B83,
+0x9F6A=>0x6B8D,
+0x9F6B=>0x6B98,
+0x9F6C=>0x6B95,
+0x9F6D=>0x6B9E,
+0x9F6E=>0x6BA4,
+0x9F6F=>0x6BAA,
+0x9F70=>0x6BAB,
+0x9F71=>0x6BAF,
+0x9F72=>0x6BB2,
+0x9F73=>0x6BB1,
+0x9F74=>0x6BB3,
+0x9F75=>0x6BB7,
+0x9F76=>0x6BBC,
+0x9F77=>0x6BC6,
+0x9F78=>0x6BCB,
+0x9F79=>0x6BD3,
+0x9F7A=>0x6BDF,
+0x9F7B=>0x6BEC,
+0x9F7C=>0x6BEB,
+0x9F7D=>0x6BF3,
+0x9F7E=>0x6BEF,
+0x9F80=>0x9EBE,
+0x9F81=>0x6C08,
+0x9F82=>0x6C13,
+0x9F83=>0x6C14,
+0x9F84=>0x6C1B,
+0x9F85=>0x6C24,
+0x9F86=>0x6C23,
+0x9F87=>0x6C5E,
+0x9F88=>0x6C55,
+0x9F89=>0x6C62,
+0x9F8A=>0x6C6A,
+0x9F8B=>0x6C82,
+0x9F8C=>0x6C8D,
+0x9F8D=>0x6C9A,
+0x9F8E=>0x6C81,
+0x9F8F=>0x6C9B,
+0x9F90=>0x6C7E,
+0x9F91=>0x6C68,
+0x9F92=>0x6C73,
+0x9F93=>0x6C92,
+0x9F94=>0x6C90,
+0x9F95=>0x6CC4,
+0x9F96=>0x6CF1,
+0x9F97=>0x6CD3,
+0x9F98=>0x6CBD,
+0x9F99=>0x6CD7,
+0x9F9A=>0x6CC5,
+0x9F9B=>0x6CDD,
+0x9F9C=>0x6CAE,
+0x9F9D=>0x6CB1,
+0x9F9E=>0x6CBE,
+0x9F9F=>0x6CBA,
+0x9FA0=>0x6CDB,
+0x9FA1=>0x6CEF,
+0x9FA2=>0x6CD9,
+0x9FA3=>0x6CEA,
+0x9FA4=>0x6D1F,
+0x9FA5=>0x884D,
+0x9FA6=>0x6D36,
+0x9FA7=>0x6D2B,
+0x9FA8=>0x6D3D,
+0x9FA9=>0x6D38,
+0x9FAA=>0x6D19,
+0x9FAB=>0x6D35,
+0x9FAC=>0x6D33,
+0x9FAD=>0x6D12,
+0x9FAE=>0x6D0C,
+0x9FAF=>0x6D63,
+0x9FB0=>0x6D93,
+0x9FB1=>0x6D64,
+0x9FB2=>0x6D5A,
+0x9FB3=>0x6D79,
+0x9FB4=>0x6D59,
+0x9FB5=>0x6D8E,
+0x9FB6=>0x6D95,
+0x9FB7=>0x6FE4,
+0x9FB8=>0x6D85,
+0x9FB9=>0x6DF9,
+0x9FBA=>0x6E15,
+0x9FBB=>0x6E0A,
+0x9FBC=>0x6DB5,
+0x9FBD=>0x6DC7,
+0x9FBE=>0x6DE6,
+0x9FBF=>0x6DB8,
+0x9FC0=>0x6DC6,
+0x9FC1=>0x6DEC,
+0x9FC2=>0x6DDE,
+0x9FC3=>0x6DCC,
+0x9FC4=>0x6DE8,
+0x9FC5=>0x6DD2,
+0x9FC6=>0x6DC5,
+0x9FC7=>0x6DFA,
+0x9FC8=>0x6DD9,
+0x9FC9=>0x6DE4,
+0x9FCA=>0x6DD5,
+0x9FCB=>0x6DEA,
+0x9FCC=>0x6DEE,
+0x9FCD=>0x6E2D,
+0x9FCE=>0x6E6E,
+0x9FCF=>0x6E2E,
+0x9FD0=>0x6E19,
+0x9FD1=>0x6E72,
+0x9FD2=>0x6E5F,
+0x9FD3=>0x6E3E,
+0x9FD4=>0x6E23,
+0x9FD5=>0x6E6B,
+0x9FD6=>0x6E2B,
+0x9FD7=>0x6E76,
+0x9FD8=>0x6E4D,
+0x9FD9=>0x6E1F,
+0x9FDA=>0x6E43,
+0x9FDB=>0x6E3A,
+0x9FDC=>0x6E4E,
+0x9FDD=>0x6E24,
+0x9FDE=>0x6EFF,
+0x9FDF=>0x6E1D,
+0x9FE0=>0x6E38,
+0x9FE1=>0x6E82,
+0x9FE2=>0x6EAA,
+0x9FE3=>0x6E98,
+0x9FE4=>0x6EC9,
+0x9FE5=>0x6EB7,
+0x9FE6=>0x6ED3,
+0x9FE7=>0x6EBD,
+0x9FE8=>0x6EAF,
+0x9FE9=>0x6EC4,
+0x9FEA=>0x6EB2,
+0x9FEB=>0x6ED4,
+0x9FEC=>0x6ED5,
+0x9FED=>0x6E8F,
+0x9FEE=>0x6EA5,
+0x9FEF=>0x6EC2,
+0x9FF0=>0x6E9F,
+0x9FF1=>0x6F41,
+0x9FF2=>0x6F11,
+0x9FF3=>0x704C,
+0x9FF4=>0x6EEC,
+0x9FF5=>0x6EF8,
+0x9FF6=>0x6EFE,
+0x9FF7=>0x6F3F,
+0x9FF8=>0x6EF2,
+0x9FF9=>0x6F31,
+0x9FFA=>0x6EEF,
+0x9FFB=>0x6F32,
+0x9FFC=>0x6ECC,
+0xE040=>0x6F3E,
+0xE041=>0x6F13,
+0xE042=>0x6EF7,
+0xE043=>0x6F86,
+0xE044=>0x6F7A,
+0xE045=>0x6F78,
+0xE046=>0x6F81,
+0xE047=>0x6F80,
+0xE048=>0x6F6F,
+0xE049=>0x6F5B,
+0xE04A=>0x6FF3,
+0xE04B=>0x6F6D,
+0xE04C=>0x6F82,
+0xE04D=>0x6F7C,
+0xE04E=>0x6F58,
+0xE04F=>0x6F8E,
+0xE050=>0x6F91,
+0xE051=>0x6FC2,
+0xE052=>0x6F66,
+0xE053=>0x6FB3,
+0xE054=>0x6FA3,
+0xE055=>0x6FA1,
+0xE056=>0x6FA4,
+0xE057=>0x6FB9,
+0xE058=>0x6FC6,
+0xE059=>0x6FAA,
+0xE05A=>0x6FDF,
+0xE05B=>0x6FD5,
+0xE05C=>0x6FEC,
+0xE05D=>0x6FD4,
+0xE05E=>0x6FD8,
+0xE05F=>0x6FF1,
+0xE060=>0x6FEE,
+0xE061=>0x6FDB,
+0xE062=>0x7009,
+0xE063=>0x700B,
+0xE064=>0x6FFA,
+0xE065=>0x7011,
+0xE066=>0x7001,
+0xE067=>0x700F,
+0xE068=>0x6FFE,
+0xE069=>0x701B,
+0xE06A=>0x701A,
+0xE06B=>0x6F74,
+0xE06C=>0x701D,
+0xE06D=>0x7018,
+0xE06E=>0x701F,
+0xE06F=>0x7030,
+0xE070=>0x703E,
+0xE071=>0x7032,
+0xE072=>0x7051,
+0xE073=>0x7063,
+0xE074=>0x7099,
+0xE075=>0x7092,
+0xE076=>0x70AF,
+0xE077=>0x70F1,
+0xE078=>0x70AC,
+0xE079=>0x70B8,
+0xE07A=>0x70B3,
+0xE07B=>0x70AE,
+0xE07C=>0x70DF,
+0xE07D=>0x70CB,
+0xE07E=>0x70DD,
+0xE080=>0x70D9,
+0xE081=>0x7109,
+0xE082=>0x70FD,
+0xE083=>0x711C,
+0xE084=>0x7119,
+0xE085=>0x7165,
+0xE086=>0x7155,
+0xE087=>0x7188,
+0xE088=>0x7166,
+0xE089=>0x7162,
+0xE08A=>0x714C,
+0xE08B=>0x7156,
+0xE08C=>0x716C,
+0xE08D=>0x718F,
+0xE08E=>0x71FB,
+0xE08F=>0x7184,
+0xE090=>0x7195,
+0xE091=>0x71A8,
+0xE092=>0x71AC,
+0xE093=>0x71D7,
+0xE094=>0x71B9,
+0xE095=>0x71BE,
+0xE096=>0x71D2,
+0xE097=>0x71C9,
+0xE098=>0x71D4,
+0xE099=>0x71CE,
+0xE09A=>0x71E0,
+0xE09B=>0x71EC,
+0xE09C=>0x71E7,
+0xE09D=>0x71F5,
+0xE09E=>0x71FC,
+0xE09F=>0x71F9,
+0xE0A0=>0x71FF,
+0xE0A1=>0x720D,
+0xE0A2=>0x7210,
+0xE0A3=>0x721B,
+0xE0A4=>0x7228,
+0xE0A5=>0x722D,
+0xE0A6=>0x722C,
+0xE0A7=>0x7230,
+0xE0A8=>0x7232,
+0xE0A9=>0x723B,
+0xE0AA=>0x723C,
+0xE0AB=>0x723F,
+0xE0AC=>0x7240,
+0xE0AD=>0x7246,
+0xE0AE=>0x724B,
+0xE0AF=>0x7258,
+0xE0B0=>0x7274,
+0xE0B1=>0x727E,
+0xE0B2=>0x7282,
+0xE0B3=>0x7281,
+0xE0B4=>0x7287,
+0xE0B5=>0x7292,
+0xE0B6=>0x7296,
+0xE0B7=>0x72A2,
+0xE0B8=>0x72A7,
+0xE0B9=>0x72B9,
+0xE0BA=>0x72B2,
+0xE0BB=>0x72C3,
+0xE0BC=>0x72C6,
+0xE0BD=>0x72C4,
+0xE0BE=>0x72CE,
+0xE0BF=>0x72D2,
+0xE0C0=>0x72E2,
+0xE0C1=>0x72E0,
+0xE0C2=>0x72E1,
+0xE0C3=>0x72F9,
+0xE0C4=>0x72F7,
+0xE0C5=>0x500F,
+0xE0C6=>0x7317,
+0xE0C7=>0x730A,
+0xE0C8=>0x731C,
+0xE0C9=>0x7316,
+0xE0CA=>0x731D,
+0xE0CB=>0x7334,
+0xE0CC=>0x732F,
+0xE0CD=>0x7329,
+0xE0CE=>0x7325,
+0xE0CF=>0x733E,
+0xE0D0=>0x734E,
+0xE0D1=>0x734F,
+0xE0D2=>0x9ED8,
+0xE0D3=>0x7357,
+0xE0D4=>0x736A,
+0xE0D5=>0x7368,
+0xE0D6=>0x7370,
+0xE0D7=>0x7378,
+0xE0D8=>0x7375,
+0xE0D9=>0x737B,
+0xE0DA=>0x737A,
+0xE0DB=>0x73C8,
+0xE0DC=>0x73B3,
+0xE0DD=>0x73CE,
+0xE0DE=>0x73BB,
+0xE0DF=>0x73C0,
+0xE0E0=>0x73E5,
+0xE0E1=>0x73EE,
+0xE0E2=>0x73DE,
+0xE0E3=>0x74A2,
+0xE0E4=>0x7405,
+0xE0E5=>0x746F,
+0xE0E6=>0x7425,
+0xE0E7=>0x73F8,
+0xE0E8=>0x7432,
+0xE0E9=>0x743A,
+0xE0EA=>0x7455,
+0xE0EB=>0x743F,
+0xE0EC=>0x745F,
+0xE0ED=>0x7459,
+0xE0EE=>0x7441,
+0xE0EF=>0x745C,
+0xE0F0=>0x7469,
+0xE0F1=>0x7470,
+0xE0F2=>0x7463,
+0xE0F3=>0x746A,
+0xE0F4=>0x7476,
+0xE0F5=>0x747E,
+0xE0F6=>0x748B,
+0xE0F7=>0x749E,
+0xE0F8=>0x74A7,
+0xE0F9=>0x74CA,
+0xE0FA=>0x74CF,
+0xE0FB=>0x74D4,
+0xE0FC=>0x73F1,
+0xE140=>0x74E0,
+0xE141=>0x74E3,
+0xE142=>0x74E7,
+0xE143=>0x74E9,
+0xE144=>0x74EE,
+0xE145=>0x74F2,
+0xE146=>0x74F0,
+0xE147=>0x74F1,
+0xE148=>0x74F8,
+0xE149=>0x74F7,
+0xE14A=>0x7504,
+0xE14B=>0x7503,
+0xE14C=>0x7505,
+0xE14D=>0x750C,
+0xE14E=>0x750E,
+0xE14F=>0x750D,
+0xE150=>0x7515,
+0xE151=>0x7513,
+0xE152=>0x751E,
+0xE153=>0x7526,
+0xE154=>0x752C,
+0xE155=>0x753C,
+0xE156=>0x7544,
+0xE157=>0x754D,
+0xE158=>0x754A,
+0xE159=>0x7549,
+0xE15A=>0x755B,
+0xE15B=>0x7546,
+0xE15C=>0x755A,
+0xE15D=>0x7569,
+0xE15E=>0x7564,
+0xE15F=>0x7567,
+0xE160=>0x756B,
+0xE161=>0x756D,
+0xE162=>0x7578,
+0xE163=>0x7576,
+0xE164=>0x7586,
+0xE165=>0x7587,
+0xE166=>0x7574,
+0xE167=>0x758A,
+0xE168=>0x7589,
+0xE169=>0x7582,
+0xE16A=>0x7594,
+0xE16B=>0x759A,
+0xE16C=>0x759D,
+0xE16D=>0x75A5,
+0xE16E=>0x75A3,
+0xE16F=>0x75C2,
+0xE170=>0x75B3,
+0xE171=>0x75C3,
+0xE172=>0x75B5,
+0xE173=>0x75BD,
+0xE174=>0x75B8,
+0xE175=>0x75BC,
+0xE176=>0x75B1,
+0xE177=>0x75CD,
+0xE178=>0x75CA,
+0xE179=>0x75D2,
+0xE17A=>0x75D9,
+0xE17B=>0x75E3,
+0xE17C=>0x75DE,
+0xE17D=>0x75FE,
+0xE17E=>0x75FF,
+0xE180=>0x75FC,
+0xE181=>0x7601,
+0xE182=>0x75F0,
+0xE183=>0x75FA,
+0xE184=>0x75F2,
+0xE185=>0x75F3,
+0xE186=>0x760B,
+0xE187=>0x760D,
+0xE188=>0x7609,
+0xE189=>0x761F,
+0xE18A=>0x7627,
+0xE18B=>0x7620,
+0xE18C=>0x7621,
+0xE18D=>0x7622,
+0xE18E=>0x7624,
+0xE18F=>0x7634,
+0xE190=>0x7630,
+0xE191=>0x763B,
+0xE192=>0x7647,
+0xE193=>0x7648,
+0xE194=>0x7646,
+0xE195=>0x765C,
+0xE196=>0x7658,
+0xE197=>0x7661,
+0xE198=>0x7662,
+0xE199=>0x7668,
+0xE19A=>0x7669,
+0xE19B=>0x766A,
+0xE19C=>0x7667,
+0xE19D=>0x766C,
+0xE19E=>0x7670,
+0xE19F=>0x7672,
+0xE1A0=>0x7676,
+0xE1A1=>0x7678,
+0xE1A2=>0x767C,
+0xE1A3=>0x7680,
+0xE1A4=>0x7683,
+0xE1A5=>0x7688,
+0xE1A6=>0x768B,
+0xE1A7=>0x768E,
+0xE1A8=>0x7696,
+0xE1A9=>0x7693,
+0xE1AA=>0x7699,
+0xE1AB=>0x769A,
+0xE1AC=>0x76B0,
+0xE1AD=>0x76B4,
+0xE1AE=>0x76B8,
+0xE1AF=>0x76B9,
+0xE1B0=>0x76BA,
+0xE1B1=>0x76C2,
+0xE1B2=>0x76CD,
+0xE1B3=>0x76D6,
+0xE1B4=>0x76D2,
+0xE1B5=>0x76DE,
+0xE1B6=>0x76E1,
+0xE1B7=>0x76E5,
+0xE1B8=>0x76E7,
+0xE1B9=>0x76EA,
+0xE1BA=>0x862F,
+0xE1BB=>0x76FB,
+0xE1BC=>0x7708,
+0xE1BD=>0x7707,
+0xE1BE=>0x7704,
+0xE1BF=>0x7729,
+0xE1C0=>0x7724,
+0xE1C1=>0x771E,
+0xE1C2=>0x7725,
+0xE1C3=>0x7726,
+0xE1C4=>0x771B,
+0xE1C5=>0x7737,
+0xE1C6=>0x7738,
+0xE1C7=>0x7747,
+0xE1C8=>0x775A,
+0xE1C9=>0x7768,
+0xE1CA=>0x776B,
+0xE1CB=>0x775B,
+0xE1CC=>0x7765,
+0xE1CD=>0x777F,
+0xE1CE=>0x777E,
+0xE1CF=>0x7779,
+0xE1D0=>0x778E,
+0xE1D1=>0x778B,
+0xE1D2=>0x7791,
+0xE1D3=>0x77A0,
+0xE1D4=>0x779E,
+0xE1D5=>0x77B0,
+0xE1D6=>0x77B6,
+0xE1D7=>0x77B9,
+0xE1D8=>0x77BF,
+0xE1D9=>0x77BC,
+0xE1DA=>0x77BD,
+0xE1DB=>0x77BB,
+0xE1DC=>0x77C7,
+0xE1DD=>0x77CD,
+0xE1DE=>0x77D7,
+0xE1DF=>0x77DA,
+0xE1E0=>0x77DC,
+0xE1E1=>0x77E3,
+0xE1E2=>0x77EE,
+0xE1E3=>0x77FC,
+0xE1E4=>0x780C,
+0xE1E5=>0x7812,
+0xE1E6=>0x7926,
+0xE1E7=>0x7820,
+0xE1E8=>0x792A,
+0xE1E9=>0x7845,
+0xE1EA=>0x788E,
+0xE1EB=>0x7874,
+0xE1EC=>0x7886,
+0xE1ED=>0x787C,
+0xE1EE=>0x789A,
+0xE1EF=>0x788C,
+0xE1F0=>0x78A3,
+0xE1F1=>0x78B5,
+0xE1F2=>0x78AA,
+0xE1F3=>0x78AF,
+0xE1F4=>0x78D1,
+0xE1F5=>0x78C6,
+0xE1F6=>0x78CB,
+0xE1F7=>0x78D4,
+0xE1F8=>0x78BE,
+0xE1F9=>0x78BC,
+0xE1FA=>0x78C5,
+0xE1FB=>0x78CA,
+0xE1FC=>0x78EC,
+0xE240=>0x78E7,
+0xE241=>0x78DA,
+0xE242=>0x78FD,
+0xE243=>0x78F4,
+0xE244=>0x7907,
+0xE245=>0x7912,
+0xE246=>0x7911,
+0xE247=>0x7919,
+0xE248=>0x792C,
+0xE249=>0x792B,
+0xE24A=>0x7940,
+0xE24B=>0x7960,
+0xE24C=>0x7957,
+0xE24D=>0x795F,
+0xE24E=>0x795A,
+0xE24F=>0x7955,
+0xE250=>0x7953,
+0xE251=>0x797A,
+0xE252=>0x797F,
+0xE253=>0x798A,
+0xE254=>0x799D,
+0xE255=>0x79A7,
+0xE256=>0x9F4B,
+0xE257=>0x79AA,
+0xE258=>0x79AE,
+0xE259=>0x79B3,
+0xE25A=>0x79B9,
+0xE25B=>0x79BA,
+0xE25C=>0x79C9,
+0xE25D=>0x79D5,
+0xE25E=>0x79E7,
+0xE25F=>0x79EC,
+0xE260=>0x79E1,
+0xE261=>0x79E3,
+0xE262=>0x7A08,
+0xE263=>0x7A0D,
+0xE264=>0x7A18,
+0xE265=>0x7A19,
+0xE266=>0x7A20,
+0xE267=>0x7A1F,
+0xE268=>0x7980,
+0xE269=>0x7A31,
+0xE26A=>0x7A3B,
+0xE26B=>0x7A3E,
+0xE26C=>0x7A37,
+0xE26D=>0x7A43,
+0xE26E=>0x7A57,
+0xE26F=>0x7A49,
+0xE270=>0x7A61,
+0xE271=>0x7A62,
+0xE272=>0x7A69,
+0xE273=>0x9F9D,
+0xE274=>0x7A70,
+0xE275=>0x7A79,
+0xE276=>0x7A7D,
+0xE277=>0x7A88,
+0xE278=>0x7A97,
+0xE279=>0x7A95,
+0xE27A=>0x7A98,
+0xE27B=>0x7A96,
+0xE27C=>0x7AA9,
+0xE27D=>0x7AC8,
+0xE27E=>0x7AB0,
+0xE280=>0x7AB6,
+0xE281=>0x7AC5,
+0xE282=>0x7AC4,
+0xE283=>0x7ABF,
+0xE284=>0x9083,
+0xE285=>0x7AC7,
+0xE286=>0x7ACA,
+0xE287=>0x7ACD,
+0xE288=>0x7ACF,
+0xE289=>0x7AD5,
+0xE28A=>0x7AD3,
+0xE28B=>0x7AD9,
+0xE28C=>0x7ADA,
+0xE28D=>0x7ADD,
+0xE28E=>0x7AE1,
+0xE28F=>0x7AE2,
+0xE290=>0x7AE6,
+0xE291=>0x7AED,
+0xE292=>0x7AF0,
+0xE293=>0x7B02,
+0xE294=>0x7B0F,
+0xE295=>0x7B0A,
+0xE296=>0x7B06,
+0xE297=>0x7B33,
+0xE298=>0x7B18,
+0xE299=>0x7B19,
+0xE29A=>0x7B1E,
+0xE29B=>0x7B35,
+0xE29C=>0x7B28,
+0xE29D=>0x7B36,
+0xE29E=>0x7B50,
+0xE29F=>0x7B7A,
+0xE2A0=>0x7B04,
+0xE2A1=>0x7B4D,
+0xE2A2=>0x7B0B,
+0xE2A3=>0x7B4C,
+0xE2A4=>0x7B45,
+0xE2A5=>0x7B75,
+0xE2A6=>0x7B65,
+0xE2A7=>0x7B74,
+0xE2A8=>0x7B67,
+0xE2A9=>0x7B70,
+0xE2AA=>0x7B71,
+0xE2AB=>0x7B6C,
+0xE2AC=>0x7B6E,
+0xE2AD=>0x7B9D,
+0xE2AE=>0x7B98,
+0xE2AF=>0x7B9F,
+0xE2B0=>0x7B8D,
+0xE2B1=>0x7B9C,
+0xE2B2=>0x7B9A,
+0xE2B3=>0x7B8B,
+0xE2B4=>0x7B92,
+0xE2B5=>0x7B8F,
+0xE2B6=>0x7B5D,
+0xE2B7=>0x7B99,
+0xE2B8=>0x7BCB,
+0xE2B9=>0x7BC1,
+0xE2BA=>0x7BCC,
+0xE2BB=>0x7BCF,
+0xE2BC=>0x7BB4,
+0xE2BD=>0x7BC6,
+0xE2BE=>0x7BDD,
+0xE2BF=>0x7BE9,
+0xE2C0=>0x7C11,
+0xE2C1=>0x7C14,
+0xE2C2=>0x7BE6,
+0xE2C3=>0x7BE5,
+0xE2C4=>0x7C60,
+0xE2C5=>0x7C00,
+0xE2C6=>0x7C07,
+0xE2C7=>0x7C13,
+0xE2C8=>0x7BF3,
+0xE2C9=>0x7BF7,
+0xE2CA=>0x7C17,
+0xE2CB=>0x7C0D,
+0xE2CC=>0x7BF6,
+0xE2CD=>0x7C23,
+0xE2CE=>0x7C27,
+0xE2CF=>0x7C2A,
+0xE2D0=>0x7C1F,
+0xE2D1=>0x7C37,
+0xE2D2=>0x7C2B,
+0xE2D3=>0x7C3D,
+0xE2D4=>0x7C4C,
+0xE2D5=>0x7C43,
+0xE2D6=>0x7C54,
+0xE2D7=>0x7C4F,
+0xE2D8=>0x7C40,
+0xE2D9=>0x7C50,
+0xE2DA=>0x7C58,
+0xE2DB=>0x7C5F,
+0xE2DC=>0x7C64,
+0xE2DD=>0x7C56,
+0xE2DE=>0x7C65,
+0xE2DF=>0x7C6C,
+0xE2E0=>0x7C75,
+0xE2E1=>0x7C83,
+0xE2E2=>0x7C90,
+0xE2E3=>0x7CA4,
+0xE2E4=>0x7CAD,
+0xE2E5=>0x7CA2,
+0xE2E6=>0x7CAB,
+0xE2E7=>0x7CA1,
+0xE2E8=>0x7CA8,
+0xE2E9=>0x7CB3,
+0xE2EA=>0x7CB2,
+0xE2EB=>0x7CB1,
+0xE2EC=>0x7CAE,
+0xE2ED=>0x7CB9,
+0xE2EE=>0x7CBD,
+0xE2EF=>0x7CC0,
+0xE2F0=>0x7CC5,
+0xE2F1=>0x7CC2,
+0xE2F2=>0x7CD8,
+0xE2F3=>0x7CD2,
+0xE2F4=>0x7CDC,
+0xE2F5=>0x7CE2,
+0xE2F6=>0x9B3B,
+0xE2F7=>0x7CEF,
+0xE2F8=>0x7CF2,
+0xE2F9=>0x7CF4,
+0xE2FA=>0x7CF6,
+0xE2FB=>0x7CFA,
+0xE2FC=>0x7D06,
+0xE340=>0x7D02,
+0xE341=>0x7D1C,
+0xE342=>0x7D15,
+0xE343=>0x7D0A,
+0xE344=>0x7D45,
+0xE345=>0x7D4B,
+0xE346=>0x7D2E,
+0xE347=>0x7D32,
+0xE348=>0x7D3F,
+0xE349=>0x7D35,
+0xE34A=>0x7D46,
+0xE34B=>0x7D73,
+0xE34C=>0x7D56,
+0xE34D=>0x7D4E,
+0xE34E=>0x7D72,
+0xE34F=>0x7D68,
+0xE350=>0x7D6E,
+0xE351=>0x7D4F,
+0xE352=>0x7D63,
+0xE353=>0x7D93,
+0xE354=>0x7D89,
+0xE355=>0x7D5B,
+0xE356=>0x7D8F,
+0xE357=>0x7D7D,
+0xE358=>0x7D9B,
+0xE359=>0x7DBA,
+0xE35A=>0x7DAE,
+0xE35B=>0x7DA3,
+0xE35C=>0x7DB5,
+0xE35D=>0x7DC7,
+0xE35E=>0x7DBD,
+0xE35F=>0x7DAB,
+0xE360=>0x7E3D,
+0xE361=>0x7DA2,
+0xE362=>0x7DAF,
+0xE363=>0x7DDC,
+0xE364=>0x7DB8,
+0xE365=>0x7D9F,
+0xE366=>0x7DB0,
+0xE367=>0x7DD8,
+0xE368=>0x7DDD,
+0xE369=>0x7DE4,
+0xE36A=>0x7DDE,
+0xE36B=>0x7DFB,
+0xE36C=>0x7DF2,
+0xE36D=>0x7DE1,
+0xE36E=>0x7E05,
+0xE36F=>0x7E0A,
+0xE370=>0x7E23,
+0xE371=>0x7E21,
+0xE372=>0x7E12,
+0xE373=>0x7E31,
+0xE374=>0x7E1F,
+0xE375=>0x7E09,
+0xE376=>0x7E0B,
+0xE377=>0x7E22,
+0xE378=>0x7E46,
+0xE379=>0x7E66,
+0xE37A=>0x7E3B,
+0xE37B=>0x7E35,
+0xE37C=>0x7E39,
+0xE37D=>0x7E43,
+0xE37E=>0x7E37,
+0xE380=>0x7E32,
+0xE381=>0x7E3A,
+0xE382=>0x7E67,
+0xE383=>0x7E5D,
+0xE384=>0x7E56,
+0xE385=>0x7E5E,
+0xE386=>0x7E59,
+0xE387=>0x7E5A,
+0xE388=>0x7E79,
+0xE389=>0x7E6A,
+0xE38A=>0x7E69,
+0xE38B=>0x7E7C,
+0xE38C=>0x7E7B,
+0xE38D=>0x7E83,
+0xE38E=>0x7DD5,
+0xE38F=>0x7E7D,
+0xE390=>0x8FAE,
+0xE391=>0x7E7F,
+0xE392=>0x7E88,
+0xE393=>0x7E89,
+0xE394=>0x7E8C,
+0xE395=>0x7E92,
+0xE396=>0x7E90,
+0xE397=>0x7E93,
+0xE398=>0x7E94,
+0xE399=>0x7E96,
+0xE39A=>0x7E8E,
+0xE39B=>0x7E9B,
+0xE39C=>0x7E9C,
+0xE39D=>0x7F38,
+0xE39E=>0x7F3A,
+0xE39F=>0x7F45,
+0xE3A0=>0x7F4C,
+0xE3A1=>0x7F4D,
+0xE3A2=>0x7F4E,
+0xE3A3=>0x7F50,
+0xE3A4=>0x7F51,
+0xE3A5=>0x7F55,
+0xE3A6=>0x7F54,
+0xE3A7=>0x7F58,
+0xE3A8=>0x7F5F,
+0xE3A9=>0x7F60,
+0xE3AA=>0x7F68,
+0xE3AB=>0x7F69,
+0xE3AC=>0x7F67,
+0xE3AD=>0x7F78,
+0xE3AE=>0x7F82,
+0xE3AF=>0x7F86,
+0xE3B0=>0x7F83,
+0xE3B1=>0x7F88,
+0xE3B2=>0x7F87,
+0xE3B3=>0x7F8C,
+0xE3B4=>0x7F94,
+0xE3B5=>0x7F9E,
+0xE3B6=>0x7F9D,
+0xE3B7=>0x7F9A,
+0xE3B8=>0x7FA3,
+0xE3B9=>0x7FAF,
+0xE3BA=>0x7FB2,
+0xE3BB=>0x7FB9,
+0xE3BC=>0x7FAE,
+0xE3BD=>0x7FB6,
+0xE3BE=>0x7FB8,
+0xE3BF=>0x8B71,
+0xE3C0=>0x7FC5,
+0xE3C1=>0x7FC6,
+0xE3C2=>0x7FCA,
+0xE3C3=>0x7FD5,
+0xE3C4=>0x7FD4,
+0xE3C5=>0x7FE1,
+0xE3C6=>0x7FE6,
+0xE3C7=>0x7FE9,
+0xE3C8=>0x7FF3,
+0xE3C9=>0x7FF9,
+0xE3CA=>0x98DC,
+0xE3CB=>0x8006,
+0xE3CC=>0x8004,
+0xE3CD=>0x800B,
+0xE3CE=>0x8012,
+0xE3CF=>0x8018,
+0xE3D0=>0x8019,
+0xE3D1=>0x801C,
+0xE3D2=>0x8021,
+0xE3D3=>0x8028,
+0xE3D4=>0x803F,
+0xE3D5=>0x803B,
+0xE3D6=>0x804A,
+0xE3D7=>0x8046,
+0xE3D8=>0x8052,
+0xE3D9=>0x8058,
+0xE3DA=>0x805A,
+0xE3DB=>0x805F,
+0xE3DC=>0x8062,
+0xE3DD=>0x8068,
+0xE3DE=>0x8073,
+0xE3DF=>0x8072,
+0xE3E0=>0x8070,
+0xE3E1=>0x8076,
+0xE3E2=>0x8079,
+0xE3E3=>0x807D,
+0xE3E4=>0x807F,
+0xE3E5=>0x8084,
+0xE3E6=>0x8086,
+0xE3E7=>0x8085,
+0xE3E8=>0x809B,
+0xE3E9=>0x8093,
+0xE3EA=>0x809A,
+0xE3EB=>0x80AD,
+0xE3EC=>0x5190,
+0xE3ED=>0x80AC,
+0xE3EE=>0x80DB,
+0xE3EF=>0x80E5,
+0xE3F0=>0x80D9,
+0xE3F1=>0x80DD,
+0xE3F2=>0x80C4,
+0xE3F3=>0x80DA,
+0xE3F4=>0x80D6,
+0xE3F5=>0x8109,
+0xE3F6=>0x80EF,
+0xE3F7=>0x80F1,
+0xE3F8=>0x811B,
+0xE3F9=>0x8129,
+0xE3FA=>0x8123,
+0xE3FB=>0x812F,
+0xE3FC=>0x814B,
+0xE440=>0x968B,
+0xE441=>0x8146,
+0xE442=>0x813E,
+0xE443=>0x8153,
+0xE444=>0x8151,
+0xE445=>0x80FC,
+0xE446=>0x8171,
+0xE447=>0x816E,
+0xE448=>0x8165,
+0xE449=>0x8166,
+0xE44A=>0x8174,
+0xE44B=>0x8183,
+0xE44C=>0x8188,
+0xE44D=>0x818A,
+0xE44E=>0x8180,
+0xE44F=>0x8182,
+0xE450=>0x81A0,
+0xE451=>0x8195,
+0xE452=>0x81A4,
+0xE453=>0x81A3,
+0xE454=>0x815F,
+0xE455=>0x8193,
+0xE456=>0x81A9,
+0xE457=>0x81B0,
+0xE458=>0x81B5,
+0xE459=>0x81BE,
+0xE45A=>0x81B8,
+0xE45B=>0x81BD,
+0xE45C=>0x81C0,
+0xE45D=>0x81C2,
+0xE45E=>0x81BA,
+0xE45F=>0x81C9,
+0xE460=>0x81CD,
+0xE461=>0x81D1,
+0xE462=>0x81D9,
+0xE463=>0x81D8,
+0xE464=>0x81C8,
+0xE465=>0x81DA,
+0xE466=>0x81DF,
+0xE467=>0x81E0,
+0xE468=>0x81E7,
+0xE469=>0x81FA,
+0xE46A=>0x81FB,
+0xE46B=>0x81FE,
+0xE46C=>0x8201,
+0xE46D=>0x8202,
+0xE46E=>0x8205,
+0xE46F=>0x8207,
+0xE470=>0x820A,
+0xE471=>0x820D,
+0xE472=>0x8210,
+0xE473=>0x8216,
+0xE474=>0x8229,
+0xE475=>0x822B,
+0xE476=>0x8238,
+0xE477=>0x8233,
+0xE478=>0x8240,
+0xE479=>0x8259,
+0xE47A=>0x8258,
+0xE47B=>0x825D,
+0xE47C=>0x825A,
+0xE47D=>0x825F,
+0xE47E=>0x8264,
+0xE480=>0x8262,
+0xE481=>0x8268,
+0xE482=>0x826A,
+0xE483=>0x826B,
+0xE484=>0x822E,
+0xE485=>0x8271,
+0xE486=>0x8277,
+0xE487=>0x8278,
+0xE488=>0x827E,
+0xE489=>0x828D,
+0xE48A=>0x8292,
+0xE48B=>0x82AB,
+0xE48C=>0x829F,
+0xE48D=>0x82BB,
+0xE48E=>0x82AC,
+0xE48F=>0x82E1,
+0xE490=>0x82E3,
+0xE491=>0x82DF,
+0xE492=>0x82D2,
+0xE493=>0x82F4,
+0xE494=>0x82F3,
+0xE495=>0x82FA,
+0xE496=>0x8393,
+0xE497=>0x8303,
+0xE498=>0x82FB,
+0xE499=>0x82F9,
+0xE49A=>0x82DE,
+0xE49B=>0x8306,
+0xE49C=>0x82DC,
+0xE49D=>0x8309,
+0xE49E=>0x82D9,
+0xE49F=>0x8335,
+0xE4A0=>0x8334,
+0xE4A1=>0x8316,
+0xE4A2=>0x8332,
+0xE4A3=>0x8331,
+0xE4A4=>0x8340,
+0xE4A5=>0x8339,
+0xE4A6=>0x8350,
+0xE4A7=>0x8345,
+0xE4A8=>0x832F,
+0xE4A9=>0x832B,
+0xE4AA=>0x8317,
+0xE4AB=>0x8318,
+0xE4AC=>0x8385,
+0xE4AD=>0x839A,
+0xE4AE=>0x83AA,
+0xE4AF=>0x839F,
+0xE4B0=>0x83A2,
+0xE4B1=>0x8396,
+0xE4B2=>0x8323,
+0xE4B3=>0x838E,
+0xE4B4=>0x8387,
+0xE4B5=>0x838A,
+0xE4B6=>0x837C,
+0xE4B7=>0x83B5,
+0xE4B8=>0x8373,
+0xE4B9=>0x8375,
+0xE4BA=>0x83A0,
+0xE4BB=>0x8389,
+0xE4BC=>0x83A8,
+0xE4BD=>0x83F4,
+0xE4BE=>0x8413,
+0xE4BF=>0x83EB,
+0xE4C0=>0x83CE,
+0xE4C1=>0x83FD,
+0xE4C2=>0x8403,
+0xE4C3=>0x83D8,
+0xE4C4=>0x840B,
+0xE4C5=>0x83C1,
+0xE4C6=>0x83F7,
+0xE4C7=>0x8407,
+0xE4C8=>0x83E0,
+0xE4C9=>0x83F2,
+0xE4CA=>0x840D,
+0xE4CB=>0x8422,
+0xE4CC=>0x8420,
+0xE4CD=>0x83BD,
+0xE4CE=>0x8438,
+0xE4CF=>0x8506,
+0xE4D0=>0x83FB,
+0xE4D1=>0x846D,
+0xE4D2=>0x842A,
+0xE4D3=>0x843C,
+0xE4D4=>0x855A,
+0xE4D5=>0x8484,
+0xE4D6=>0x8477,
+0xE4D7=>0x846B,
+0xE4D8=>0x84AD,
+0xE4D9=>0x846E,
+0xE4DA=>0x8482,
+0xE4DB=>0x8469,
+0xE4DC=>0x8446,
+0xE4DD=>0x842C,
+0xE4DE=>0x846F,
+0xE4DF=>0x8479,
+0xE4E0=>0x8435,
+0xE4E1=>0x84CA,
+0xE4E2=>0x8462,
+0xE4E3=>0x84B9,
+0xE4E4=>0x84BF,
+0xE4E5=>0x849F,
+0xE4E6=>0x84D9,
+0xE4E7=>0x84CD,
+0xE4E8=>0x84BB,
+0xE4E9=>0x84DA,
+0xE4EA=>0x84D0,
+0xE4EB=>0x84C1,
+0xE4EC=>0x84C6,
+0xE4ED=>0x84D6,
+0xE4EE=>0x84A1,
+0xE4EF=>0x8521,
+0xE4F0=>0x84FF,
+0xE4F1=>0x84F4,
+0xE4F2=>0x8517,
+0xE4F3=>0x8518,
+0xE4F4=>0x852C,
+0xE4F5=>0x851F,
+0xE4F6=>0x8515,
+0xE4F7=>0x8514,
+0xE4F8=>0x84FC,
+0xE4F9=>0x8540,
+0xE4FA=>0x8563,
+0xE4FB=>0x8558,
+0xE4FC=>0x8548,
+0xE540=>0x8541,
+0xE541=>0x8602,
+0xE542=>0x854B,
+0xE543=>0x8555,
+0xE544=>0x8580,
+0xE545=>0x85A4,
+0xE546=>0x8588,
+0xE547=>0x8591,
+0xE548=>0x858A,
+0xE549=>0x85A8,
+0xE54A=>0x856D,
+0xE54B=>0x8594,
+0xE54C=>0x859B,
+0xE54D=>0x85EA,
+0xE54E=>0x8587,
+0xE54F=>0x859C,
+0xE550=>0x8577,
+0xE551=>0x857E,
+0xE552=>0x8590,
+0xE553=>0x85C9,
+0xE554=>0x85BA,
+0xE555=>0x85CF,
+0xE556=>0x85B9,
+0xE557=>0x85D0,
+0xE558=>0x85D5,
+0xE559=>0x85DD,
+0xE55A=>0x85E5,
+0xE55B=>0x85DC,
+0xE55C=>0x85F9,
+0xE55D=>0x860A,
+0xE55E=>0x8613,
+0xE55F=>0x860B,
+0xE560=>0x85FE,
+0xE561=>0x85FA,
+0xE562=>0x8606,
+0xE563=>0x8622,
+0xE564=>0x861A,
+0xE565=>0x8630,
+0xE566=>0x863F,
+0xE567=>0x864D,
+0xE568=>0x4E55,
+0xE569=>0x8654,
+0xE56A=>0x865F,
+0xE56B=>0x8667,
+0xE56C=>0x8671,
+0xE56D=>0x8693,
+0xE56E=>0x86A3,
+0xE56F=>0x86A9,
+0xE570=>0x86AA,
+0xE571=>0x868B,
+0xE572=>0x868C,
+0xE573=>0x86B6,
+0xE574=>0x86AF,
+0xE575=>0x86C4,
+0xE576=>0x86C6,
+0xE577=>0x86B0,
+0xE578=>0x86C9,
+0xE579=>0x8823,
+0xE57A=>0x86AB,
+0xE57B=>0x86D4,
+0xE57C=>0x86DE,
+0xE57D=>0x86E9,
+0xE57E=>0x86EC,
+0xE580=>0x86DF,
+0xE581=>0x86DB,
+0xE582=>0x86EF,
+0xE583=>0x8712,
+0xE584=>0x8706,
+0xE585=>0x8708,
+0xE586=>0x8700,
+0xE587=>0x8703,
+0xE588=>0x86FB,
+0xE589=>0x8711,
+0xE58A=>0x8709,
+0xE58B=>0x870D,
+0xE58C=>0x86F9,
+0xE58D=>0x870A,
+0xE58E=>0x8734,
+0xE58F=>0x873F,
+0xE590=>0x8737,
+0xE591=>0x873B,
+0xE592=>0x8725,
+0xE593=>0x8729,
+0xE594=>0x871A,
+0xE595=>0x8760,
+0xE596=>0x875F,
+0xE597=>0x8778,
+0xE598=>0x874C,
+0xE599=>0x874E,
+0xE59A=>0x8774,
+0xE59B=>0x8757,
+0xE59C=>0x8768,
+0xE59D=>0x876E,
+0xE59E=>0x8759,
+0xE59F=>0x8753,
+0xE5A0=>0x8763,
+0xE5A1=>0x876A,
+0xE5A2=>0x8805,
+0xE5A3=>0x87A2,
+0xE5A4=>0x879F,
+0xE5A5=>0x8782,
+0xE5A6=>0x87AF,
+0xE5A7=>0x87CB,
+0xE5A8=>0x87BD,
+0xE5A9=>0x87C0,
+0xE5AA=>0x87D0,
+0xE5AB=>0x96D6,
+0xE5AC=>0x87AB,
+0xE5AD=>0x87C4,
+0xE5AE=>0x87B3,
+0xE5AF=>0x87C7,
+0xE5B0=>0x87C6,
+0xE5B1=>0x87BB,
+0xE5B2=>0x87EF,
+0xE5B3=>0x87F2,
+0xE5B4=>0x87E0,
+0xE5B5=>0x880F,
+0xE5B6=>0x880D,
+0xE5B7=>0x87FE,
+0xE5B8=>0x87F6,
+0xE5B9=>0x87F7,
+0xE5BA=>0x880E,
+0xE5BB=>0x87D2,
+0xE5BC=>0x8811,
+0xE5BD=>0x8816,
+0xE5BE=>0x8815,
+0xE5BF=>0x8822,
+0xE5C0=>0x8821,
+0xE5C1=>0x8831,
+0xE5C2=>0x8836,
+0xE5C3=>0x8839,
+0xE5C4=>0x8827,
+0xE5C5=>0x883B,
+0xE5C6=>0x8844,
+0xE5C7=>0x8842,
+0xE5C8=>0x8852,
+0xE5C9=>0x8859,
+0xE5CA=>0x885E,
+0xE5CB=>0x8862,
+0xE5CC=>0x886B,
+0xE5CD=>0x8881,
+0xE5CE=>0x887E,
+0xE5CF=>0x889E,
+0xE5D0=>0x8875,
+0xE5D1=>0x887D,
+0xE5D2=>0x88B5,
+0xE5D3=>0x8872,
+0xE5D4=>0x8882,
+0xE5D5=>0x8897,
+0xE5D6=>0x8892,
+0xE5D7=>0x88AE,
+0xE5D8=>0x8899,
+0xE5D9=>0x88A2,
+0xE5DA=>0x888D,
+0xE5DB=>0x88A4,
+0xE5DC=>0x88B0,
+0xE5DD=>0x88BF,
+0xE5DE=>0x88B1,
+0xE5DF=>0x88C3,
+0xE5E0=>0x88C4,
+0xE5E1=>0x88D4,
+0xE5E2=>0x88D8,
+0xE5E3=>0x88D9,
+0xE5E4=>0x88DD,
+0xE5E5=>0x88F9,
+0xE5E6=>0x8902,
+0xE5E7=>0x88FC,
+0xE5E8=>0x88F4,
+0xE5E9=>0x88E8,
+0xE5EA=>0x88F2,
+0xE5EB=>0x8904,
+0xE5EC=>0x890C,
+0xE5ED=>0x890A,
+0xE5EE=>0x8913,
+0xE5EF=>0x8943,
+0xE5F0=>0x891E,
+0xE5F1=>0x8925,
+0xE5F2=>0x892A,
+0xE5F3=>0x892B,
+0xE5F4=>0x8941,
+0xE5F5=>0x8944,
+0xE5F6=>0x893B,
+0xE5F7=>0x8936,
+0xE5F8=>0x8938,
+0xE5F9=>0x894C,
+0xE5FA=>0x891D,
+0xE5FB=>0x8960,
+0xE5FC=>0x895E,
+0xE640=>0x8966,
+0xE641=>0x8964,
+0xE642=>0x896D,
+0xE643=>0x896A,
+0xE644=>0x896F,
+0xE645=>0x8974,
+0xE646=>0x8977,
+0xE647=>0x897E,
+0xE648=>0x8983,
+0xE649=>0x8988,
+0xE64A=>0x898A,
+0xE64B=>0x8993,
+0xE64C=>0x8998,
+0xE64D=>0x89A1,
+0xE64E=>0x89A9,
+0xE64F=>0x89A6,
+0xE650=>0x89AC,
+0xE651=>0x89AF,
+0xE652=>0x89B2,
+0xE653=>0x89BA,
+0xE654=>0x89BD,
+0xE655=>0x89BF,
+0xE656=>0x89C0,
+0xE657=>0x89DA,
+0xE658=>0x89DC,
+0xE659=>0x89DD,
+0xE65A=>0x89E7,
+0xE65B=>0x89F4,
+0xE65C=>0x89F8,
+0xE65D=>0x8A03,
+0xE65E=>0x8A16,
+0xE65F=>0x8A10,
+0xE660=>0x8A0C,
+0xE661=>0x8A1B,
+0xE662=>0x8A1D,
+0xE663=>0x8A25,
+0xE664=>0x8A36,
+0xE665=>0x8A41,
+0xE666=>0x8A5B,
+0xE667=>0x8A52,
+0xE668=>0x8A46,
+0xE669=>0x8A48,
+0xE66A=>0x8A7C,
+0xE66B=>0x8A6D,
+0xE66C=>0x8A6C,
+0xE66D=>0x8A62,
+0xE66E=>0x8A85,
+0xE66F=>0x8A82,
+0xE670=>0x8A84,
+0xE671=>0x8AA8,
+0xE672=>0x8AA1,
+0xE673=>0x8A91,
+0xE674=>0x8AA5,
+0xE675=>0x8AA6,
+0xE676=>0x8A9A,
+0xE677=>0x8AA3,
+0xE678=>0x8AC4,
+0xE679=>0x8ACD,
+0xE67A=>0x8AC2,
+0xE67B=>0x8ADA,
+0xE67C=>0x8AEB,
+0xE67D=>0x8AF3,
+0xE67E=>0x8AE7,
+0xE680=>0x8AE4,
+0xE681=>0x8AF1,
+0xE682=>0x8B14,
+0xE683=>0x8AE0,
+0xE684=>0x8AE2,
+0xE685=>0x8AF7,
+0xE686=>0x8ADE,
+0xE687=>0x8ADB,
+0xE688=>0x8B0C,
+0xE689=>0x8B07,
+0xE68A=>0x8B1A,
+0xE68B=>0x8AE1,
+0xE68C=>0x8B16,
+0xE68D=>0x8B10,
+0xE68E=>0x8B17,
+0xE68F=>0x8B20,
+0xE690=>0x8B33,
+0xE691=>0x97AB,
+0xE692=>0x8B26,
+0xE693=>0x8B2B,
+0xE694=>0x8B3E,
+0xE695=>0x8B28,
+0xE696=>0x8B41,
+0xE697=>0x8B4C,
+0xE698=>0x8B4F,
+0xE699=>0x8B4E,
+0xE69A=>0x8B49,
+0xE69B=>0x8B56,
+0xE69C=>0x8B5B,
+0xE69D=>0x8B5A,
+0xE69E=>0x8B6B,
+0xE69F=>0x8B5F,
+0xE6A0=>0x8B6C,
+0xE6A1=>0x8B6F,
+0xE6A2=>0x8B74,
+0xE6A3=>0x8B7D,
+0xE6A4=>0x8B80,
+0xE6A5=>0x8B8C,
+0xE6A6=>0x8B8E,
+0xE6A7=>0x8B92,
+0xE6A8=>0x8B93,
+0xE6A9=>0x8B96,
+0xE6AA=>0x8B99,
+0xE6AB=>0x8B9A,
+0xE6AC=>0x8C3A,
+0xE6AD=>0x8C41,
+0xE6AE=>0x8C3F,
+0xE6AF=>0x8C48,
+0xE6B0=>0x8C4C,
+0xE6B1=>0x8C4E,
+0xE6B2=>0x8C50,
+0xE6B3=>0x8C55,
+0xE6B4=>0x8C62,
+0xE6B5=>0x8C6C,
+0xE6B6=>0x8C78,
+0xE6B7=>0x8C7A,
+0xE6B8=>0x8C82,
+0xE6B9=>0x8C89,
+0xE6BA=>0x8C85,
+0xE6BB=>0x8C8A,
+0xE6BC=>0x8C8D,
+0xE6BD=>0x8C8E,
+0xE6BE=>0x8C94,
+0xE6BF=>0x8C7C,
+0xE6C0=>0x8C98,
+0xE6C1=>0x621D,
+0xE6C2=>0x8CAD,
+0xE6C3=>0x8CAA,
+0xE6C4=>0x8CBD,
+0xE6C5=>0x8CB2,
+0xE6C6=>0x8CB3,
+0xE6C7=>0x8CAE,
+0xE6C8=>0x8CB6,
+0xE6C9=>0x8CC8,
+0xE6CA=>0x8CC1,
+0xE6CB=>0x8CE4,
+0xE6CC=>0x8CE3,
+0xE6CD=>0x8CDA,
+0xE6CE=>0x8CFD,
+0xE6CF=>0x8CFA,
+0xE6D0=>0x8CFB,
+0xE6D1=>0x8D04,
+0xE6D2=>0x8D05,
+0xE6D3=>0x8D0A,
+0xE6D4=>0x8D07,
+0xE6D5=>0x8D0F,
+0xE6D6=>0x8D0D,
+0xE6D7=>0x8D10,
+0xE6D8=>0x9F4E,
+0xE6D9=>0x8D13,
+0xE6DA=>0x8CCD,
+0xE6DB=>0x8D14,
+0xE6DC=>0x8D16,
+0xE6DD=>0x8D67,
+0xE6DE=>0x8D6D,
+0xE6DF=>0x8D71,
+0xE6E0=>0x8D73,
+0xE6E1=>0x8D81,
+0xE6E2=>0x8D99,
+0xE6E3=>0x8DC2,
+0xE6E4=>0x8DBE,
+0xE6E5=>0x8DBA,
+0xE6E6=>0x8DCF,
+0xE6E7=>0x8DDA,
+0xE6E8=>0x8DD6,
+0xE6E9=>0x8DCC,
+0xE6EA=>0x8DDB,
+0xE6EB=>0x8DCB,
+0xE6EC=>0x8DEA,
+0xE6ED=>0x8DEB,
+0xE6EE=>0x8DDF,
+0xE6EF=>0x8DE3,
+0xE6F0=>0x8DFC,
+0xE6F1=>0x8E08,
+0xE6F2=>0x8E09,
+0xE6F3=>0x8DFF,
+0xE6F4=>0x8E1D,
+0xE6F5=>0x8E1E,
+0xE6F6=>0x8E10,
+0xE6F7=>0x8E1F,
+0xE6F8=>0x8E42,
+0xE6F9=>0x8E35,
+0xE6FA=>0x8E30,
+0xE6FB=>0x8E34,
+0xE6FC=>0x8E4A,
+0xE740=>0x8E47,
+0xE741=>0x8E49,
+0xE742=>0x8E4C,
+0xE743=>0x8E50,
+0xE744=>0x8E48,
+0xE745=>0x8E59,
+0xE746=>0x8E64,
+0xE747=>0x8E60,
+0xE748=>0x8E2A,
+0xE749=>0x8E63,
+0xE74A=>0x8E55,
+0xE74B=>0x8E76,
+0xE74C=>0x8E72,
+0xE74D=>0x8E7C,
+0xE74E=>0x8E81,
+0xE74F=>0x8E87,
+0xE750=>0x8E85,
+0xE751=>0x8E84,
+0xE752=>0x8E8B,
+0xE753=>0x8E8A,
+0xE754=>0x8E93,
+0xE755=>0x8E91,
+0xE756=>0x8E94,
+0xE757=>0x8E99,
+0xE758=>0x8EAA,
+0xE759=>0x8EA1,
+0xE75A=>0x8EAC,
+0xE75B=>0x8EB0,
+0xE75C=>0x8EC6,
+0xE75D=>0x8EB1,
+0xE75E=>0x8EBE,
+0xE75F=>0x8EC5,
+0xE760=>0x8EC8,
+0xE761=>0x8ECB,
+0xE762=>0x8EDB,
+0xE763=>0x8EE3,
+0xE764=>0x8EFC,
+0xE765=>0x8EFB,
+0xE766=>0x8EEB,
+0xE767=>0x8EFE,
+0xE768=>0x8F0A,
+0xE769=>0x8F05,
+0xE76A=>0x8F15,
+0xE76B=>0x8F12,
+0xE76C=>0x8F19,
+0xE76D=>0x8F13,
+0xE76E=>0x8F1C,
+0xE76F=>0x8F1F,
+0xE770=>0x8F1B,
+0xE771=>0x8F0C,
+0xE772=>0x8F26,
+0xE773=>0x8F33,
+0xE774=>0x8F3B,
+0xE775=>0x8F39,
+0xE776=>0x8F45,
+0xE777=>0x8F42,
+0xE778=>0x8F3E,
+0xE779=>0x8F4C,
+0xE77A=>0x8F49,
+0xE77B=>0x8F46,
+0xE77C=>0x8F4E,
+0xE77D=>0x8F57,
+0xE77E=>0x8F5C,
+0xE780=>0x8F62,
+0xE781=>0x8F63,
+0xE782=>0x8F64,
+0xE783=>0x8F9C,
+0xE784=>0x8F9F,
+0xE785=>0x8FA3,
+0xE786=>0x8FAD,
+0xE787=>0x8FAF,
+0xE788=>0x8FB7,
+0xE789=>0x8FDA,
+0xE78A=>0x8FE5,
+0xE78B=>0x8FE2,
+0xE78C=>0x8FEA,
+0xE78D=>0x8FEF,
+0xE78E=>0x9087,
+0xE78F=>0x8FF4,
+0xE790=>0x9005,
+0xE791=>0x8FF9,
+0xE792=>0x8FFA,
+0xE793=>0x9011,
+0xE794=>0x9015,
+0xE795=>0x9021,
+0xE796=>0x900D,
+0xE797=>0x901E,
+0xE798=>0x9016,
+0xE799=>0x900B,
+0xE79A=>0x9027,
+0xE79B=>0x9036,
+0xE79C=>0x9035,
+0xE79D=>0x9039,
+0xE79E=>0x8FF8,
+0xE79F=>0x904F,
+0xE7A0=>0x9050,
+0xE7A1=>0x9051,
+0xE7A2=>0x9052,
+0xE7A3=>0x900E,
+0xE7A4=>0x9049,
+0xE7A5=>0x903E,
+0xE7A6=>0x9056,
+0xE7A7=>0x9058,
+0xE7A8=>0x905E,
+0xE7A9=>0x9068,
+0xE7AA=>0x906F,
+0xE7AB=>0x9076,
+0xE7AC=>0x96A8,
+0xE7AD=>0x9072,
+0xE7AE=>0x9082,
+0xE7AF=>0x907D,
+0xE7B0=>0x9081,
+0xE7B1=>0x9080,
+0xE7B2=>0x908A,
+0xE7B3=>0x9089,
+0xE7B4=>0x908F,
+0xE7B5=>0x90A8,
+0xE7B6=>0x90AF,
+0xE7B7=>0x90B1,
+0xE7B8=>0x90B5,
+0xE7B9=>0x90E2,
+0xE7BA=>0x90E4,
+0xE7BB=>0x6248,
+0xE7BC=>0x90DB,
+0xE7BD=>0x9102,
+0xE7BE=>0x9112,
+0xE7BF=>0x9119,
+0xE7C0=>0x9132,
+0xE7C1=>0x9130,
+0xE7C2=>0x914A,
+0xE7C3=>0x9156,
+0xE7C4=>0x9158,
+0xE7C5=>0x9163,
+0xE7C6=>0x9165,
+0xE7C7=>0x9169,
+0xE7C8=>0x9173,
+0xE7C9=>0x9172,
+0xE7CA=>0x918B,
+0xE7CB=>0x9189,
+0xE7CC=>0x9182,
+0xE7CD=>0x91A2,
+0xE7CE=>0x91AB,
+0xE7CF=>0x91AF,
+0xE7D0=>0x91AA,
+0xE7D1=>0x91B5,
+0xE7D2=>0x91B4,
+0xE7D3=>0x91BA,
+0xE7D4=>0x91C0,
+0xE7D5=>0x91C1,
+0xE7D6=>0x91C9,
+0xE7D7=>0x91CB,
+0xE7D8=>0x91D0,
+0xE7D9=>0x91D6,
+0xE7DA=>0x91DF,
+0xE7DB=>0x91E1,
+0xE7DC=>0x91DB,
+0xE7DD=>0x91FC,
+0xE7DE=>0x91F5,
+0xE7DF=>0x91F6,
+0xE7E0=>0x921E,
+0xE7E1=>0x91FF,
+0xE7E2=>0x9214,
+0xE7E3=>0x922C,
+0xE7E4=>0x9215,
+0xE7E5=>0x9211,
+0xE7E6=>0x925E,
+0xE7E7=>0x9257,
+0xE7E8=>0x9245,
+0xE7E9=>0x9249,
+0xE7EA=>0x9264,
+0xE7EB=>0x9248,
+0xE7EC=>0x9295,
+0xE7ED=>0x923F,
+0xE7EE=>0x924B,
+0xE7EF=>0x9250,
+0xE7F0=>0x929C,
+0xE7F1=>0x9296,
+0xE7F2=>0x9293,
+0xE7F3=>0x929B,
+0xE7F4=>0x925A,
+0xE7F5=>0x92CF,
+0xE7F6=>0x92B9,
+0xE7F7=>0x92B7,
+0xE7F8=>0x92E9,
+0xE7F9=>0x930F,
+0xE7FA=>0x92FA,
+0xE7FB=>0x9344,
+0xE7FC=>0x932E,
+0xE840=>0x9319,
+0xE841=>0x9322,
+0xE842=>0x931A,
+0xE843=>0x9323,
+0xE844=>0x933A,
+0xE845=>0x9335,
+0xE846=>0x933B,
+0xE847=>0x935C,
+0xE848=>0x9360,
+0xE849=>0x937C,
+0xE84A=>0x936E,
+0xE84B=>0x9356,
+0xE84C=>0x93B0,
+0xE84D=>0x93AC,
+0xE84E=>0x93AD,
+0xE84F=>0x9394,
+0xE850=>0x93B9,
+0xE851=>0x93D6,
+0xE852=>0x93D7,
+0xE853=>0x93E8,
+0xE854=>0x93E5,
+0xE855=>0x93D8,
+0xE856=>0x93C3,
+0xE857=>0x93DD,
+0xE858=>0x93D0,
+0xE859=>0x93C8,
+0xE85A=>0x93E4,
+0xE85B=>0x941A,
+0xE85C=>0x9414,
+0xE85D=>0x9413,
+0xE85E=>0x9403,
+0xE85F=>0x9407,
+0xE860=>0x9410,
+0xE861=>0x9436,
+0xE862=>0x942B,
+0xE863=>0x9435,
+0xE864=>0x9421,
+0xE865=>0x943A,
+0xE866=>0x9441,
+0xE867=>0x9452,
+0xE868=>0x9444,
+0xE869=>0x945B,
+0xE86A=>0x9460,
+0xE86B=>0x9462,
+0xE86C=>0x945E,
+0xE86D=>0x946A,
+0xE86E=>0x9229,
+0xE86F=>0x9470,
+0xE870=>0x9475,
+0xE871=>0x9477,
+0xE872=>0x947D,
+0xE873=>0x945A,
+0xE874=>0x947C,
+0xE875=>0x947E,
+0xE876=>0x9481,
+0xE877=>0x947F,
+0xE878=>0x9582,
+0xE879=>0x9587,
+0xE87A=>0x958A,
+0xE87B=>0x9594,
+0xE87C=>0x9596,
+0xE87D=>0x9598,
+0xE87E=>0x9599,
+0xE880=>0x95A0,
+0xE881=>0x95A8,
+0xE882=>0x95A7,
+0xE883=>0x95AD,
+0xE884=>0x95BC,
+0xE885=>0x95BB,
+0xE886=>0x95B9,
+0xE887=>0x95BE,
+0xE888=>0x95CA,
+0xE889=>0x6FF6,
+0xE88A=>0x95C3,
+0xE88B=>0x95CD,
+0xE88C=>0x95CC,
+0xE88D=>0x95D5,
+0xE88E=>0x95D4,
+0xE88F=>0x95D6,
+0xE890=>0x95DC,
+0xE891=>0x95E1,
+0xE892=>0x95E5,
+0xE893=>0x95E2,
+0xE894=>0x9621,
+0xE895=>0x9628,
+0xE896=>0x962E,
+0xE897=>0x962F,
+0xE898=>0x9642,
+0xE899=>0x964C,
+0xE89A=>0x964F,
+0xE89B=>0x964B,
+0xE89C=>0x9677,
+0xE89D=>0x965C,
+0xE89E=>0x965E,
+0xE89F=>0x965D,
+0xE8A0=>0x965F,
+0xE8A1=>0x9666,
+0xE8A2=>0x9672,
+0xE8A3=>0x966C,
+0xE8A4=>0x968D,
+0xE8A5=>0x9698,
+0xE8A6=>0x9695,
+0xE8A7=>0x9697,
+0xE8A8=>0x96AA,
+0xE8A9=>0x96A7,
+0xE8AA=>0x96B1,
+0xE8AB=>0x96B2,
+0xE8AC=>0x96B0,
+0xE8AD=>0x96B4,
+0xE8AE=>0x96B6,
+0xE8AF=>0x96B8,
+0xE8B0=>0x96B9,
+0xE8B1=>0x96CE,
+0xE8B2=>0x96CB,
+0xE8B3=>0x96C9,
+0xE8B4=>0x96CD,
+0xE8B5=>0x894D,
+0xE8B6=>0x96DC,
+0xE8B7=>0x970D,
+0xE8B8=>0x96D5,
+0xE8B9=>0x96F9,
+0xE8BA=>0x9704,
+0xE8BB=>0x9706,
+0xE8BC=>0x9708,
+0xE8BD=>0x9713,
+0xE8BE=>0x970E,
+0xE8BF=>0x9711,
+0xE8C0=>0x970F,
+0xE8C1=>0x9716,
+0xE8C2=>0x9719,
+0xE8C3=>0x9724,
+0xE8C4=>0x972A,
+0xE8C5=>0x9730,
+0xE8C6=>0x9739,
+0xE8C7=>0x973D,
+0xE8C8=>0x973E,
+0xE8C9=>0x9744,
+0xE8CA=>0x9746,
+0xE8CB=>0x9748,
+0xE8CC=>0x9742,
+0xE8CD=>0x9749,
+0xE8CE=>0x975C,
+0xE8CF=>0x9760,
+0xE8D0=>0x9764,
+0xE8D1=>0x9766,
+0xE8D2=>0x9768,
+0xE8D3=>0x52D2,
+0xE8D4=>0x976B,
+0xE8D5=>0x9771,
+0xE8D6=>0x9779,
+0xE8D7=>0x9785,
+0xE8D8=>0x977C,
+0xE8D9=>0x9781,
+0xE8DA=>0x977A,
+0xE8DB=>0x9786,
+0xE8DC=>0x978B,
+0xE8DD=>0x978F,
+0xE8DE=>0x9790,
+0xE8DF=>0x979C,
+0xE8E0=>0x97A8,
+0xE8E1=>0x97A6,
+0xE8E2=>0x97A3,
+0xE8E3=>0x97B3,
+0xE8E4=>0x97B4,
+0xE8E5=>0x97C3,
+0xE8E6=>0x97C6,
+0xE8E7=>0x97C8,
+0xE8E8=>0x97CB,
+0xE8E9=>0x97DC,
+0xE8EA=>0x97ED,
+0xE8EB=>0x9F4F,
+0xE8EC=>0x97F2,
+0xE8ED=>0x7ADF,
+0xE8EE=>0x97F6,
+0xE8EF=>0x97F5,
+0xE8F0=>0x980F,
+0xE8F1=>0x980C,
+0xE8F2=>0x9838,
+0xE8F3=>0x9824,
+0xE8F4=>0x9821,
+0xE8F5=>0x9837,
+0xE8F6=>0x983D,
+0xE8F7=>0x9846,
+0xE8F8=>0x984F,
+0xE8F9=>0x984B,
+0xE8FA=>0x986B,
+0xE8FB=>0x986F,
+0xE8FC=>0x9870,
+0xE940=>0x9871,
+0xE941=>0x9874,
+0xE942=>0x9873,
+0xE943=>0x98AA,
+0xE944=>0x98AF,
+0xE945=>0x98B1,
+0xE946=>0x98B6,
+0xE947=>0x98C4,
+0xE948=>0x98C3,
+0xE949=>0x98C6,
+0xE94A=>0x98E9,
+0xE94B=>0x98EB,
+0xE94C=>0x9903,
+0xE94D=>0x9909,
+0xE94E=>0x9912,
+0xE94F=>0x9914,
+0xE950=>0x9918,
+0xE951=>0x9921,
+0xE952=>0x991D,
+0xE953=>0x991E,
+0xE954=>0x9924,
+0xE955=>0x9920,
+0xE956=>0x992C,
+0xE957=>0x992E,
+0xE958=>0x993D,
+0xE959=>0x993E,
+0xE95A=>0x9942,
+0xE95B=>0x9949,
+0xE95C=>0x9945,
+0xE95D=>0x9950,
+0xE95E=>0x994B,
+0xE95F=>0x9951,
+0xE960=>0x9952,
+0xE961=>0x994C,
+0xE962=>0x9955,
+0xE963=>0x9997,
+0xE964=>0x9998,
+0xE965=>0x99A5,
+0xE966=>0x99AD,
+0xE967=>0x99AE,
+0xE968=>0x99BC,
+0xE969=>0x99DF,
+0xE96A=>0x99DB,
+0xE96B=>0x99DD,
+0xE96C=>0x99D8,
+0xE96D=>0x99D1,
+0xE96E=>0x99ED,
+0xE96F=>0x99EE,
+0xE970=>0x99F1,
+0xE971=>0x99F2,
+0xE972=>0x99FB,
+0xE973=>0x99F8,
+0xE974=>0x9A01,
+0xE975=>0x9A0F,
+0xE976=>0x9A05,
+0xE977=>0x99E2,
+0xE978=>0x9A19,
+0xE979=>0x9A2B,
+0xE97A=>0x9A37,
+0xE97B=>0x9A45,
+0xE97C=>0x9A42,
+0xE97D=>0x9A40,
+0xE97E=>0x9A43,
+0xE980=>0x9A3E,
+0xE981=>0x9A55,
+0xE982=>0x9A4D,
+0xE983=>0x9A5B,
+0xE984=>0x9A57,
+0xE985=>0x9A5F,
+0xE986=>0x9A62,
+0xE987=>0x9A65,
+0xE988=>0x9A64,
+0xE989=>0x9A69,
+0xE98A=>0x9A6B,
+0xE98B=>0x9A6A,
+0xE98C=>0x9AAD,
+0xE98D=>0x9AB0,
+0xE98E=>0x9ABC,
+0xE98F=>0x9AC0,
+0xE990=>0x9ACF,
+0xE991=>0x9AD1,
+0xE992=>0x9AD3,
+0xE993=>0x9AD4,
+0xE994=>0x9ADE,
+0xE995=>0x9ADF,
+0xE996=>0x9AE2,
+0xE997=>0x9AE3,
+0xE998=>0x9AE6,
+0xE999=>0x9AEF,
+0xE99A=>0x9AEB,
+0xE99B=>0x9AEE,
+0xE99C=>0x9AF4,
+0xE99D=>0x9AF1,
+0xE99E=>0x9AF7,
+0xE99F=>0x9AFB,
+0xE9A0=>0x9B06,
+0xE9A1=>0x9B18,
+0xE9A2=>0x9B1A,
+0xE9A3=>0x9B1F,
+0xE9A4=>0x9B22,
+0xE9A5=>0x9B23,
+0xE9A6=>0x9B25,
+0xE9A7=>0x9B27,
+0xE9A8=>0x9B28,
+0xE9A9=>0x9B29,
+0xE9AA=>0x9B2A,
+0xE9AB=>0x9B2E,
+0xE9AC=>0x9B2F,
+0xE9AD=>0x9B32,
+0xE9AE=>0x9B44,
+0xE9AF=>0x9B43,
+0xE9B0=>0x9B4F,
+0xE9B1=>0x9B4D,
+0xE9B2=>0x9B4E,
+0xE9B3=>0x9B51,
+0xE9B4=>0x9B58,
+0xE9B5=>0x9B74,
+0xE9B6=>0x9B93,
+0xE9B7=>0x9B83,
+0xE9B8=>0x9B91,
+0xE9B9=>0x9B96,
+0xE9BA=>0x9B97,
+0xE9BB=>0x9B9F,
+0xE9BC=>0x9BA0,
+0xE9BD=>0x9BA8,
+0xE9BE=>0x9BB4,
+0xE9BF=>0x9BC0,
+0xE9C0=>0x9BCA,
+0xE9C1=>0x9BB9,
+0xE9C2=>0x9BC6,
+0xE9C3=>0x9BCF,
+0xE9C4=>0x9BD1,
+0xE9C5=>0x9BD2,
+0xE9C6=>0x9BE3,
+0xE9C7=>0x9BE2,
+0xE9C8=>0x9BE4,
+0xE9C9=>0x9BD4,
+0xE9CA=>0x9BE1,
+0xE9CB=>0x9C3A,
+0xE9CC=>0x9BF2,
+0xE9CD=>0x9BF1,
+0xE9CE=>0x9BF0,
+0xE9CF=>0x9C15,
+0xE9D0=>0x9C14,
+0xE9D1=>0x9C09,
+0xE9D2=>0x9C13,
+0xE9D3=>0x9C0C,
+0xE9D4=>0x9C06,
+0xE9D5=>0x9C08,
+0xE9D6=>0x9C12,
+0xE9D7=>0x9C0A,
+0xE9D8=>0x9C04,
+0xE9D9=>0x9C2E,
+0xE9DA=>0x9C1B,
+0xE9DB=>0x9C25,
+0xE9DC=>0x9C24,
+0xE9DD=>0x9C21,
+0xE9DE=>0x9C30,
+0xE9DF=>0x9C47,
+0xE9E0=>0x9C32,
+0xE9E1=>0x9C46,
+0xE9E2=>0x9C3E,
+0xE9E3=>0x9C5A,
+0xE9E4=>0x9C60,
+0xE9E5=>0x9C67,
+0xE9E6=>0x9C76,
+0xE9E7=>0x9C78,
+0xE9E8=>0x9CE7,
+0xE9E9=>0x9CEC,
+0xE9EA=>0x9CF0,
+0xE9EB=>0x9D09,
+0xE9EC=>0x9D08,
+0xE9ED=>0x9CEB,
+0xE9EE=>0x9D03,
+0xE9EF=>0x9D06,
+0xE9F0=>0x9D2A,
+0xE9F1=>0x9D26,
+0xE9F2=>0x9DAF,
+0xE9F3=>0x9D23,
+0xE9F4=>0x9D1F,
+0xE9F5=>0x9D44,
+0xE9F6=>0x9D15,
+0xE9F7=>0x9D12,
+0xE9F8=>0x9D41,
+0xE9F9=>0x9D3F,
+0xE9FA=>0x9D3E,
+0xE9FB=>0x9D46,
+0xE9FC=>0x9D48,
+0xEA40=>0x9D5D,
+0xEA41=>0x9D5E,
+0xEA42=>0x9D64,
+0xEA43=>0x9D51,
+0xEA44=>0x9D50,
+0xEA45=>0x9D59,
+0xEA46=>0x9D72,
+0xEA47=>0x9D89,
+0xEA48=>0x9D87,
+0xEA49=>0x9DAB,
+0xEA4A=>0x9D6F,
+0xEA4B=>0x9D7A,
+0xEA4C=>0x9D9A,
+0xEA4D=>0x9DA4,
+0xEA4E=>0x9DA9,
+0xEA4F=>0x9DB2,
+0xEA50=>0x9DC4,
+0xEA51=>0x9DC1,
+0xEA52=>0x9DBB,
+0xEA53=>0x9DB8,
+0xEA54=>0x9DBA,
+0xEA55=>0x9DC6,
+0xEA56=>0x9DCF,
+0xEA57=>0x9DC2,
+0xEA58=>0x9DD9,
+0xEA59=>0x9DD3,
+0xEA5A=>0x9DF8,
+0xEA5B=>0x9DE6,
+0xEA5C=>0x9DED,
+0xEA5D=>0x9DEF,
+0xEA5E=>0x9DFD,
+0xEA5F=>0x9E1A,
+0xEA60=>0x9E1B,
+0xEA61=>0x9E1E,
+0xEA62=>0x9E75,
+0xEA63=>0x9E79,
+0xEA64=>0x9E7D,
+0xEA65=>0x9E81,
+0xEA66=>0x9E88,
+0xEA67=>0x9E8B,
+0xEA68=>0x9E8C,
+0xEA69=>0x9E92,
+0xEA6A=>0x9E95,
+0xEA6B=>0x9E91,
+0xEA6C=>0x9E9D,
+0xEA6D=>0x9EA5,
+0xEA6E=>0x9EA9,
+0xEA6F=>0x9EB8,
+0xEA70=>0x9EAA,
+0xEA71=>0x9EAD,
+0xEA72=>0x9761,
+0xEA73=>0x9ECC,
+0xEA74=>0x9ECE,
+0xEA75=>0x9ECF,
+0xEA76=>0x9ED0,
+0xEA77=>0x9ED4,
+0xEA78=>0x9EDC,
+0xEA79=>0x9EDE,
+0xEA7A=>0x9EDD,
+0xEA7B=>0x9EE0,
+0xEA7C=>0x9EE5,
+0xEA7D=>0x9EE8,
+0xEA7E=>0x9EEF,
+0xEA80=>0x9EF4,
+0xEA81=>0x9EF6,
+0xEA82=>0x9EF7,
+0xEA83=>0x9EF9,
+0xEA84=>0x9EFB,
+0xEA85=>0x9EFC,
+0xEA86=>0x9EFD,
+0xEA87=>0x9F07,
+0xEA88=>0x9F08,
+0xEA89=>0x76B7,
+0xEA8A=>0x9F15,
+0xEA8B=>0x9F21,
+0xEA8C=>0x9F2C,
+0xEA8D=>0x9F3E,
+0xEA8E=>0x9F4A,
+0xEA8F=>0x9F52,
+0xEA90=>0x9F54,
+0xEA91=>0x9F63,
+0xEA92=>0x9F5F,
+0xEA93=>0x9F60,
+0xEA94=>0x9F61,
+0xEA95=>0x9F66,
+0xEA96=>0x9F67,
+0xEA97=>0x9F6C,
+0xEA98=>0x9F6A,
+0xEA99=>0x9F77,
+0xEA9A=>0x9F72,
+0xEA9B=>0x9F76,
+0xEA9C=>0x9F95,
+0xEA9D=>0x9F9C,
+0xEA9E=>0x9FA0,
+0xEA9F=>0x582F,
+0xEAA0=>0x69C7,
+0xEAA1=>0x9059,
+0xEAA2=>0x7464,
+0xEAA3=>0x51DC,
+0xEAA4=>0x7199,
+0xED40=>0x7E8A,
+0xED41=>0x891C,
+0xED42=>0x9348,
+0xED43=>0x9288,
+0xED44=>0x84DC,
+0xED45=>0x4FC9,
+0xED46=>0x70BB,
+0xED47=>0x6631,
+0xED48=>0x68C8,
+0xED49=>0x92F9,
+0xED4A=>0x66FB,
+0xED4B=>0x5F45,
+0xED4C=>0x4E28,
+0xED4D=>0x4EE1,
+0xED4E=>0x4EFC,
+0xED4F=>0x4F00,
+0xED50=>0x4F03,
+0xED51=>0x4F39,
+0xED52=>0x4F56,
+0xED53=>0x4F92,
+0xED54=>0x4F8A,
+0xED55=>0x4F9A,
+0xED56=>0x4F94,
+0xED57=>0x4FCD,
+0xED58=>0x5040,
+0xED59=>0x5022,
+0xED5A=>0x4FFF,
+0xED5B=>0x501E,
+0xED5C=>0x5046,
+0xED5D=>0x5070,
+0xED5E=>0x5042,
+0xED5F=>0x5094,
+0xED60=>0x50F4,
+0xED61=>0x50D8,
+0xED62=>0x514A,
+0xED63=>0x5164,
+0xED64=>0x519D,
+0xED65=>0x51BE,
+0xED66=>0x51EC,
+0xED67=>0x5215,
+0xED68=>0x529C,
+0xED69=>0x52A6,
+0xED6A=>0x52C0,
+0xED6B=>0x52DB,
+0xED6C=>0x5300,
+0xED6D=>0x5307,
+0xED6E=>0x5324,
+0xED6F=>0x5372,
+0xED70=>0x5393,
+0xED71=>0x53B2,
+0xED72=>0x53DD,
+0xED73=>0xFA0E,
+0xED74=>0x549C,
+0xED75=>0x548A,
+0xED76=>0x54A9,
+0xED77=>0x54FF,
+0xED78=>0x5586,
+0xED79=>0x5759,
+0xED7A=>0x5765,
+0xED7B=>0x57AC,
+0xED7C=>0x57C8,
+0xED7D=>0x57C7,
+0xED7E=>0xFA0F,
+0xED80=>0xFA10,
+0xED81=>0x589E,
+0xED82=>0x58B2,
+0xED83=>0x590B,
+0xED84=>0x5953,
+0xED85=>0x595B,
+0xED86=>0x595D,
+0xED87=>0x5963,
+0xED88=>0x59A4,
+0xED89=>0x59BA,
+0xED8A=>0x5B56,
+0xED8B=>0x5BC0,
+0xED8C=>0x752F,
+0xED8D=>0x5BD8,
+0xED8E=>0x5BEC,
+0xED8F=>0x5C1E,
+0xED90=>0x5CA6,
+0xED91=>0x5CBA,
+0xED92=>0x5CF5,
+0xED93=>0x5D27,
+0xED94=>0x5D53,
+0xED95=>0xFA11,
+0xED96=>0x5D42,
+0xED97=>0x5D6D,
+0xED98=>0x5DB8,
+0xED99=>0x5DB9,
+0xED9A=>0x5DD0,
+0xED9B=>0x5F21,
+0xED9C=>0x5F34,
+0xED9D=>0x5F67,
+0xED9E=>0x5FB7,
+0xED9F=>0x5FDE,
+0xEDA0=>0x605D,
+0xEDA1=>0x6085,
+0xEDA2=>0x608A,
+0xEDA3=>0x60DE,
+0xEDA4=>0x60D5,
+0xEDA5=>0x6120,
+0xEDA6=>0x60F2,
+0xEDA7=>0x6111,
+0xEDA8=>0x6137,
+0xEDA9=>0x6130,
+0xEDAA=>0x6198,
+0xEDAB=>0x6213,
+0xEDAC=>0x62A6,
+0xEDAD=>0x63F5,
+0xEDAE=>0x6460,
+0xEDAF=>0x649D,
+0xEDB0=>0x64CE,
+0xEDB1=>0x654E,
+0xEDB2=>0x6600,
+0xEDB3=>0x6615,
+0xEDB4=>0x663B,
+0xEDB5=>0x6609,
+0xEDB6=>0x662E,
+0xEDB7=>0x661E,
+0xEDB8=>0x6624,
+0xEDB9=>0x6665,
+0xEDBA=>0x6657,
+0xEDBB=>0x6659,
+0xEDBC=>0xFA12,
+0xEDBD=>0x6673,
+0xEDBE=>0x6699,
+0xEDBF=>0x66A0,
+0xEDC0=>0x66B2,
+0xEDC1=>0x66BF,
+0xEDC2=>0x66FA,
+0xEDC3=>0x670E,
+0xEDC4=>0xF929,
+0xEDC5=>0x6766,
+0xEDC6=>0x67BB,
+0xEDC7=>0x6852,
+0xEDC8=>0x67C0,
+0xEDC9=>0x6801,
+0xEDCA=>0x6844,
+0xEDCB=>0x68CF,
+0xEDCC=>0xFA13,
+0xEDCD=>0x6968,
+0xEDCE=>0xFA14,
+0xEDCF=>0x6998,
+0xEDD0=>0x69E2,
+0xEDD1=>0x6A30,
+0xEDD2=>0x6A6B,
+0xEDD3=>0x6A46,
+0xEDD4=>0x6A73,
+0xEDD5=>0x6A7E,
+0xEDD6=>0x6AE2,
+0xEDD7=>0x6AE4,
+0xEDD8=>0x6BD6,
+0xEDD9=>0x6C3F,
+0xEDDA=>0x6C5C,
+0xEDDB=>0x6C86,
+0xEDDC=>0x6C6F,
+0xEDDD=>0x6CDA,
+0xEDDE=>0x6D04,
+0xEDDF=>0x6D87,
+0xEDE0=>0x6D6F,
+0xEDE1=>0x6D96,
+0xEDE2=>0x6DAC,
+0xEDE3=>0x6DCF,
+0xEDE4=>0x6DF8,
+0xEDE5=>0x6DF2,
+0xEDE6=>0x6DFC,
+0xEDE7=>0x6E39,
+0xEDE8=>0x6E5C,
+0xEDE9=>0x6E27,
+0xEDEA=>0x6E3C,
+0xEDEB=>0x6EBF,
+0xEDEC=>0x6F88,
+0xEDED=>0x6FB5,
+0xEDEE=>0x6FF5,
+0xEDEF=>0x7005,
+0xEDF0=>0x7007,
+0xEDF1=>0x7028,
+0xEDF2=>0x7085,
+0xEDF3=>0x70AB,
+0xEDF4=>0x710F,
+0xEDF5=>0x7104,
+0xEDF6=>0x715C,
+0xEDF7=>0x7146,
+0xEDF8=>0x7147,
+0xEDF9=>0xFA15,
+0xEDFA=>0x71C1,
+0xEDFB=>0x71FE,
+0xEDFC=>0x72B1,
+0xEE40=>0x72BE,
+0xEE41=>0x7324,
+0xEE42=>0xFA16,
+0xEE43=>0x7377,
+0xEE44=>0x73BD,
+0xEE45=>0x73C9,
+0xEE46=>0x73D6,
+0xEE47=>0x73E3,
+0xEE48=>0x73D2,
+0xEE49=>0x7407,
+0xEE4A=>0x73F5,
+0xEE4B=>0x7426,
+0xEE4C=>0x742A,
+0xEE4D=>0x7429,
+0xEE4E=>0x742E,
+0xEE4F=>0x7462,
+0xEE50=>0x7489,
+0xEE51=>0x749F,
+0xEE52=>0x7501,
+0xEE53=>0x756F,
+0xEE54=>0x7682,
+0xEE55=>0x769C,
+0xEE56=>0x769E,
+0xEE57=>0x769B,
+0xEE58=>0x76A6,
+0xEE59=>0xFA17,
+0xEE5A=>0x7746,
+0xEE5B=>0x52AF,
+0xEE5C=>0x7821,
+0xEE5D=>0x784E,
+0xEE5E=>0x7864,
+0xEE5F=>0x787A,
+0xEE60=>0x7930,
+0xEE61=>0xFA18,
+0xEE62=>0xFA19,
+0xEE63=>0xFA1A,
+0xEE64=>0x7994,
+0xEE65=>0xFA1B,
+0xEE66=>0x799B,
+0xEE67=>0x7AD1,
+0xEE68=>0x7AE7,
+0xEE69=>0xFA1C,
+0xEE6A=>0x7AEB,
+0xEE6B=>0x7B9E,
+0xEE6C=>0xFA1D,
+0xEE6D=>0x7D48,
+0xEE6E=>0x7D5C,
+0xEE6F=>0x7DB7,
+0xEE70=>0x7DA0,
+0xEE71=>0x7DD6,
+0xEE72=>0x7E52,
+0xEE73=>0x7F47,
+0xEE74=>0x7FA1,
+0xEE75=>0xFA1E,
+0xEE76=>0x8301,
+0xEE77=>0x8362,
+0xEE78=>0x837F,
+0xEE79=>0x83C7,
+0xEE7A=>0x83F6,
+0xEE7B=>0x8448,
+0xEE7C=>0x84B4,
+0xEE7D=>0x8553,
+0xEE7E=>0x8559,
+0xEE80=>0x856B,
+0xEE81=>0xFA1F,
+0xEE82=>0x85B0,
+0xEE83=>0xFA20,
+0xEE84=>0xFA21,
+0xEE85=>0x8807,
+0xEE86=>0x88F5,
+0xEE87=>0x8A12,
+0xEE88=>0x8A37,
+0xEE89=>0x8A79,
+0xEE8A=>0x8AA7,
+0xEE8B=>0x8ABE,
+0xEE8C=>0x8ADF,
+0xEE8D=>0xFA22,
+0xEE8E=>0x8AF6,
+0xEE8F=>0x8B53,
+0xEE90=>0x8B7F,
+0xEE91=>0x8CF0,
+0xEE92=>0x8CF4,
+0xEE93=>0x8D12,
+0xEE94=>0x8D76,
+0xEE95=>0xFA23,
+0xEE96=>0x8ECF,
+0xEE97=>0xFA24,
+0xEE98=>0xFA25,
+0xEE99=>0x9067,
+0xEE9A=>0x90DE,
+0xEE9B=>0xFA26,
+0xEE9C=>0x9115,
+0xEE9D=>0x9127,
+0xEE9E=>0x91DA,
+0xEE9F=>0x91D7,
+0xEEA0=>0x91DE,
+0xEEA1=>0x91ED,
+0xEEA2=>0x91EE,
+0xEEA3=>0x91E4,
+0xEEA4=>0x91E5,
+0xEEA5=>0x9206,
+0xEEA6=>0x9210,
+0xEEA7=>0x920A,
+0xEEA8=>0x923A,
+0xEEA9=>0x9240,
+0xEEAA=>0x923C,
+0xEEAB=>0x924E,
+0xEEAC=>0x9259,
+0xEEAD=>0x9251,
+0xEEAE=>0x9239,
+0xEEAF=>0x9267,
+0xEEB0=>0x92A7,
+0xEEB1=>0x9277,
+0xEEB2=>0x9278,
+0xEEB3=>0x92E7,
+0xEEB4=>0x92D7,
+0xEEB5=>0x92D9,
+0xEEB6=>0x92D0,
+0xEEB7=>0xFA27,
+0xEEB8=>0x92D5,
+0xEEB9=>0x92E0,
+0xEEBA=>0x92D3,
+0xEEBB=>0x9325,
+0xEEBC=>0x9321,
+0xEEBD=>0x92FB,
+0xEEBE=>0xFA28,
+0xEEBF=>0x931E,
+0xEEC0=>0x92FF,
+0xEEC1=>0x931D,
+0xEEC2=>0x9302,
+0xEEC3=>0x9370,
+0xEEC4=>0x9357,
+0xEEC5=>0x93A4,
+0xEEC6=>0x93C6,
+0xEEC7=>0x93DE,
+0xEEC8=>0x93F8,
+0xEEC9=>0x9431,
+0xEECA=>0x9445,
+0xEECB=>0x9448,
+0xEECC=>0x9592,
+0xEECD=>0xF9DC,
+0xEECE=>0xFA29,
+0xEECF=>0x969D,
+0xEED0=>0x96AF,
+0xEED1=>0x9733,
+0xEED2=>0x973B,
+0xEED3=>0x9743,
+0xEED4=>0x974D,
+0xEED5=>0x974F,
+0xEED6=>0x9751,
+0xEED7=>0x9755,
+0xEED8=>0x9857,
+0xEED9=>0x9865,
+0xEEDA=>0xFA2A,
+0xEEDB=>0xFA2B,
+0xEEDC=>0x9927,
+0xEEDD=>0xFA2C,
+0xEEDE=>0x999E,
+0xEEDF=>0x9A4E,
+0xEEE0=>0x9AD9,
+0xEEE1=>0x9ADC,
+0xEEE2=>0x9B75,
+0xEEE3=>0x9B72,
+0xEEE4=>0x9B8F,
+0xEEE5=>0x9BB1,
+0xEEE6=>0x9BBB,
+0xEEE7=>0x9C00,
+0xEEE8=>0x9D70,
+0xEEE9=>0x9D6B,
+0xEEEA=>0xFA2D,
+0xEEEB=>0x9E19,
+0xEEEC=>0x9ED1,
+0xEEEF=>0x2170,
+0xEEF0=>0x2171,
+0xEEF1=>0x2172,
+0xEEF2=>0x2173,
+0xEEF3=>0x2174,
+0xEEF4=>0x2175,
+0xEEF5=>0x2176,
+0xEEF6=>0x2177,
+0xEEF7=>0x2178,
+0xEEF8=>0x2179,
+0xEEF9=>0xFFE2,
+0xEEFA=>0xFFE4,
+0xEEFB=>0xFF07,
+0xEEFC=>0xFF02,
+0xF040=>0xE000,
+0xF041=>0xE001,
+0xF042=>0xE002,
+0xF043=>0xE003,
+0xF044=>0xE004,
+0xF045=>0xE005,
+0xF046=>0xE006,
+0xF047=>0xE007,
+0xF048=>0xE008,
+0xF049=>0xE009,
+0xF04A=>0xE00A,
+0xF04B=>0xE00B,
+0xF04C=>0xE00C,
+0xF04D=>0xE00D,
+0xF04E=>0xE00E,
+0xF04F=>0xE00F,
+0xF050=>0xE010,
+0xF051=>0xE011,
+0xF052=>0xE012,
+0xF053=>0xE013,
+0xF054=>0xE014,
+0xF055=>0xE015,
+0xF056=>0xE016,
+0xF057=>0xE017,
+0xF058=>0xE018,
+0xF059=>0xE019,
+0xF05A=>0xE01A,
+0xF05B=>0xE01B,
+0xF05C=>0xE01C,
+0xF05D=>0xE01D,
+0xF05E=>0xE01E,
+0xF05F=>0xE01F,
+0xF060=>0xE020,
+0xF061=>0xE021,
+0xF062=>0xE022,
+0xF063=>0xE023,
+0xF064=>0xE024,
+0xF065=>0xE025,
+0xF066=>0xE026,
+0xF067=>0xE027,
+0xF068=>0xE028,
+0xF069=>0xE029,
+0xF06A=>0xE02A,
+0xF06B=>0xE02B,
+0xF06C=>0xE02C,
+0xF06D=>0xE02D,
+0xF06E=>0xE02E,
+0xF06F=>0xE02F,
+0xF070=>0xE030,
+0xF071=>0xE031,
+0xF072=>0xE032,
+0xF073=>0xE033,
+0xF074=>0xE034,
+0xF075=>0xE035,
+0xF076=>0xE036,
+0xF077=>0xE037,
+0xF078=>0xE038,
+0xF079=>0xE039,
+0xF07A=>0xE03A,
+0xF07B=>0xE03B,
+0xF07C=>0xE03C,
+0xF07D=>0xE03D,
+0xF07E=>0xE03E,
+0xF080=>0xE03F,
+0xF081=>0xE040,
+0xF082=>0xE041,
+0xF083=>0xE042,
+0xF084=>0xE043,
+0xF085=>0xE044,
+0xF086=>0xE045,
+0xF087=>0xE046,
+0xF088=>0xE047,
+0xF089=>0xE048,
+0xF08A=>0xE049,
+0xF08B=>0xE04A,
+0xF08C=>0xE04B,
+0xF08D=>0xE04C,
+0xF08E=>0xE04D,
+0xF08F=>0xE04E,
+0xF090=>0xE04F,
+0xF091=>0xE050,
+0xF092=>0xE051,
+0xF093=>0xE052,
+0xF094=>0xE053,
+0xF095=>0xE054,
+0xF096=>0xE055,
+0xF097=>0xE056,
+0xF098=>0xE057,
+0xF099=>0xE058,
+0xF09A=>0xE059,
+0xF09B=>0xE05A,
+0xF09C=>0xE05B,
+0xF09D=>0xE05C,
+0xF09E=>0xE05D,
+0xF09F=>0xE05E,
+0xF0A0=>0xE05F,
+0xF0A1=>0xE060,
+0xF0A2=>0xE061,
+0xF0A3=>0xE062,
+0xF0A4=>0xE063,
+0xF0A5=>0xE064,
+0xF0A6=>0xE065,
+0xF0A7=>0xE066,
+0xF0A8=>0xE067,
+0xF0A9=>0xE068,
+0xF0AA=>0xE069,
+0xF0AB=>0xE06A,
+0xF0AC=>0xE06B,
+0xF0AD=>0xE06C,
+0xF0AE=>0xE06D,
+0xF0AF=>0xE06E,
+0xF0B0=>0xE06F,
+0xF0B1=>0xE070,
+0xF0B2=>0xE071,
+0xF0B3=>0xE072,
+0xF0B4=>0xE073,
+0xF0B5=>0xE074,
+0xF0B6=>0xE075,
+0xF0B7=>0xE076,
+0xF0B8=>0xE077,
+0xF0B9=>0xE078,
+0xF0BA=>0xE079,
+0xF0BB=>0xE07A,
+0xF0BC=>0xE07B,
+0xF0BD=>0xE07C,
+0xF0BE=>0xE07D,
+0xF0BF=>0xE07E,
+0xF0C0=>0xE07F,
+0xF0C1=>0xE080,
+0xF0C2=>0xE081,
+0xF0C3=>0xE082,
+0xF0C4=>0xE083,
+0xF0C5=>0xE084,
+0xF0C6=>0xE085,
+0xF0C7=>0xE086,
+0xF0C8=>0xE087,
+0xF0C9=>0xE088,
+0xF0CA=>0xE089,
+0xF0CB=>0xE08A,
+0xF0CC=>0xE08B,
+0xF0CD=>0xE08C,
+0xF0CE=>0xE08D,
+0xF0CF=>0xE08E,
+0xF0D0=>0xE08F,
+0xF0D1=>0xE090,
+0xF0D2=>0xE091,
+0xF0D3=>0xE092,
+0xF0D4=>0xE093,
+0xF0D5=>0xE094,
+0xF0D6=>0xE095,
+0xF0D7=>0xE096,
+0xF0D8=>0xE097,
+0xF0D9=>0xE098,
+0xF0DA=>0xE099,
+0xF0DB=>0xE09A,
+0xF0DC=>0xE09B,
+0xF0DD=>0xE09C,
+0xF0DE=>0xE09D,
+0xF0DF=>0xE09E,
+0xF0E0=>0xE09F,
+0xF0E1=>0xE0A0,
+0xF0E2=>0xE0A1,
+0xF0E3=>0xE0A2,
+0xF0E4=>0xE0A3,
+0xF0E5=>0xE0A4,
+0xF0E6=>0xE0A5,
+0xF0E7=>0xE0A6,
+0xF0E8=>0xE0A7,
+0xF0E9=>0xE0A8,
+0xF0EA=>0xE0A9,
+0xF0EB=>0xE0AA,
+0xF0EC=>0xE0AB,
+0xF0ED=>0xE0AC,
+0xF0EE=>0xE0AD,
+0xF0EF=>0xE0AE,
+0xF0F0=>0xE0AF,
+0xF0F1=>0xE0B0,
+0xF0F2=>0xE0B1,
+0xF0F3=>0xE0B2,
+0xF0F4=>0xE0B3,
+0xF0F5=>0xE0B4,
+0xF0F6=>0xE0B5,
+0xF0F7=>0xE0B6,
+0xF0F8=>0xE0B7,
+0xF0F9=>0xE0B8,
+0xF0FA=>0xE0B9,
+0xF0FB=>0xE0BA,
+0xF0FC=>0xE0BB,
+0xF140=>0xE0BC,
+0xF141=>0xE0BD,
+0xF142=>0xE0BE,
+0xF143=>0xE0BF,
+0xF144=>0xE0C0,
+0xF145=>0xE0C1,
+0xF146=>0xE0C2,
+0xF147=>0xE0C3,
+0xF148=>0xE0C4,
+0xF149=>0xE0C5,
+0xF14A=>0xE0C6,
+0xF14B=>0xE0C7,
+0xF14C=>0xE0C8,
+0xF14D=>0xE0C9,
+0xF14E=>0xE0CA,
+0xF14F=>0xE0CB,
+0xF150=>0xE0CC,
+0xF151=>0xE0CD,
+0xF152=>0xE0CE,
+0xF153=>0xE0CF,
+0xF154=>0xE0D0,
+0xF155=>0xE0D1,
+0xF156=>0xE0D2,
+0xF157=>0xE0D3,
+0xF158=>0xE0D4,
+0xF159=>0xE0D5,
+0xF15A=>0xE0D6,
+0xF15B=>0xE0D7,
+0xF15C=>0xE0D8,
+0xF15D=>0xE0D9,
+0xF15E=>0xE0DA,
+0xF15F=>0xE0DB,
+0xF160=>0xE0DC,
+0xF161=>0xE0DD,
+0xF162=>0xE0DE,
+0xF163=>0xE0DF,
+0xF164=>0xE0E0,
+0xF165=>0xE0E1,
+0xF166=>0xE0E2,
+0xF167=>0xE0E3,
+0xF168=>0xE0E4,
+0xF169=>0xE0E5,
+0xF16A=>0xE0E6,
+0xF16B=>0xE0E7,
+0xF16C=>0xE0E8,
+0xF16D=>0xE0E9,
+0xF16E=>0xE0EA,
+0xF16F=>0xE0EB,
+0xF170=>0xE0EC,
+0xF171=>0xE0ED,
+0xF172=>0xE0EE,
+0xF173=>0xE0EF,
+0xF174=>0xE0F0,
+0xF175=>0xE0F1,
+0xF176=>0xE0F2,
+0xF177=>0xE0F3,
+0xF178=>0xE0F4,
+0xF179=>0xE0F5,
+0xF17A=>0xE0F6,
+0xF17B=>0xE0F7,
+0xF17C=>0xE0F8,
+0xF17D=>0xE0F9,
+0xF17E=>0xE0FA,
+0xF180=>0xE0FB,
+0xF181=>0xE0FC,
+0xF182=>0xE0FD,
+0xF183=>0xE0FE,
+0xF184=>0xE0FF,
+0xF185=>0xE100,
+0xF186=>0xE101,
+0xF187=>0xE102,
+0xF188=>0xE103,
+0xF189=>0xE104,
+0xF18A=>0xE105,
+0xF18B=>0xE106,
+0xF18C=>0xE107,
+0xF18D=>0xE108,
+0xF18E=>0xE109,
+0xF18F=>0xE10A,
+0xF190=>0xE10B,
+0xF191=>0xE10C,
+0xF192=>0xE10D,
+0xF193=>0xE10E,
+0xF194=>0xE10F,
+0xF195=>0xE110,
+0xF196=>0xE111,
+0xF197=>0xE112,
+0xF198=>0xE113,
+0xF199=>0xE114,
+0xF19A=>0xE115,
+0xF19B=>0xE116,
+0xF19C=>0xE117,
+0xF19D=>0xE118,
+0xF19E=>0xE119,
+0xF19F=>0xE11A,
+0xF1A0=>0xE11B,
+0xF1A1=>0xE11C,
+0xF1A2=>0xE11D,
+0xF1A3=>0xE11E,
+0xF1A4=>0xE11F,
+0xF1A5=>0xE120,
+0xF1A6=>0xE121,
+0xF1A7=>0xE122,
+0xF1A8=>0xE123,
+0xF1A9=>0xE124,
+0xF1AA=>0xE125,
+0xF1AB=>0xE126,
+0xF1AC=>0xE127,
+0xF1AD=>0xE128,
+0xF1AE=>0xE129,
+0xF1AF=>0xE12A,
+0xF1B0=>0xE12B,
+0xF1B1=>0xE12C,
+0xF1B2=>0xE12D,
+0xF1B3=>0xE12E,
+0xF1B4=>0xE12F,
+0xF1B5=>0xE130,
+0xF1B6=>0xE131,
+0xF1B7=>0xE132,
+0xF1B8=>0xE133,
+0xF1B9=>0xE134,
+0xF1BA=>0xE135,
+0xF1BB=>0xE136,
+0xF1BC=>0xE137,
+0xF1BD=>0xE138,
+0xF1BE=>0xE139,
+0xF1BF=>0xE13A,
+0xF1C0=>0xE13B,
+0xF1C1=>0xE13C,
+0xF1C2=>0xE13D,
+0xF1C3=>0xE13E,
+0xF1C4=>0xE13F,
+0xF1C5=>0xE140,
+0xF1C6=>0xE141,
+0xF1C7=>0xE142,
+0xF1C8=>0xE143,
+0xF1C9=>0xE144,
+0xF1CA=>0xE145,
+0xF1CB=>0xE146,
+0xF1CC=>0xE147,
+0xF1CD=>0xE148,
+0xF1CE=>0xE149,
+0xF1CF=>0xE14A,
+0xF1D0=>0xE14B,
+0xF1D1=>0xE14C,
+0xF1D2=>0xE14D,
+0xF1D3=>0xE14E,
+0xF1D4=>0xE14F,
+0xF1D5=>0xE150,
+0xF1D6=>0xE151,
+0xF1D7=>0xE152,
+0xF1D8=>0xE153,
+0xF1D9=>0xE154,
+0xF1DA=>0xE155,
+0xF1DB=>0xE156,
+0xF1DC=>0xE157,
+0xF1DD=>0xE158,
+0xF1DE=>0xE159,
+0xF1DF=>0xE15A,
+0xF1E0=>0xE15B,
+0xF1E1=>0xE15C,
+0xF1E2=>0xE15D,
+0xF1E3=>0xE15E,
+0xF1E4=>0xE15F,
+0xF1E5=>0xE160,
+0xF1E6=>0xE161,
+0xF1E7=>0xE162,
+0xF1E8=>0xE163,
+0xF1E9=>0xE164,
+0xF1EA=>0xE165,
+0xF1EB=>0xE166,
+0xF1EC=>0xE167,
+0xF1ED=>0xE168,
+0xF1EE=>0xE169,
+0xF1EF=>0xE16A,
+0xF1F0=>0xE16B,
+0xF1F1=>0xE16C,
+0xF1F2=>0xE16D,
+0xF1F3=>0xE16E,
+0xF1F4=>0xE16F,
+0xF1F5=>0xE170,
+0xF1F6=>0xE171,
+0xF1F7=>0xE172,
+0xF1F8=>0xE173,
+0xF1F9=>0xE174,
+0xF1FA=>0xE175,
+0xF1FB=>0xE176,
+0xF1FC=>0xE177,
+0xF240=>0xE178,
+0xF241=>0xE179,
+0xF242=>0xE17A,
+0xF243=>0xE17B,
+0xF244=>0xE17C,
+0xF245=>0xE17D,
+0xF246=>0xE17E,
+0xF247=>0xE17F,
+0xF248=>0xE180,
+0xF249=>0xE181,
+0xF24A=>0xE182,
+0xF24B=>0xE183,
+0xF24C=>0xE184,
+0xF24D=>0xE185,
+0xF24E=>0xE186,
+0xF24F=>0xE187,
+0xF250=>0xE188,
+0xF251=>0xE189,
+0xF252=>0xE18A,
+0xF253=>0xE18B,
+0xF254=>0xE18C,
+0xF255=>0xE18D,
+0xF256=>0xE18E,
+0xF257=>0xE18F,
+0xF258=>0xE190,
+0xF259=>0xE191,
+0xF25A=>0xE192,
+0xF25B=>0xE193,
+0xF25C=>0xE194,
+0xF25D=>0xE195,
+0xF25E=>0xE196,
+0xF25F=>0xE197,
+0xF260=>0xE198,
+0xF261=>0xE199,
+0xF262=>0xE19A,
+0xF263=>0xE19B,
+0xF264=>0xE19C,
+0xF265=>0xE19D,
+0xF266=>0xE19E,
+0xF267=>0xE19F,
+0xF268=>0xE1A0,
+0xF269=>0xE1A1,
+0xF26A=>0xE1A2,
+0xF26B=>0xE1A3,
+0xF26C=>0xE1A4,
+0xF26D=>0xE1A5,
+0xF26E=>0xE1A6,
+0xF26F=>0xE1A7,
+0xF270=>0xE1A8,
+0xF271=>0xE1A9,
+0xF272=>0xE1AA,
+0xF273=>0xE1AB,
+0xF274=>0xE1AC,
+0xF275=>0xE1AD,
+0xF276=>0xE1AE,
+0xF277=>0xE1AF,
+0xF278=>0xE1B0,
+0xF279=>0xE1B1,
+0xF27A=>0xE1B2,
+0xF27B=>0xE1B3,
+0xF27C=>0xE1B4,
+0xF27D=>0xE1B5,
+0xF27E=>0xE1B6,
+0xF280=>0xE1B7,
+0xF281=>0xE1B8,
+0xF282=>0xE1B9,
+0xF283=>0xE1BA,
+0xF284=>0xE1BB,
+0xF285=>0xE1BC,
+0xF286=>0xE1BD,
+0xF287=>0xE1BE,
+0xF288=>0xE1BF,
+0xF289=>0xE1C0,
+0xF28A=>0xE1C1,
+0xF28B=>0xE1C2,
+0xF28C=>0xE1C3,
+0xF28D=>0xE1C4,
+0xF28E=>0xE1C5,
+0xF28F=>0xE1C6,
+0xF290=>0xE1C7,
+0xF291=>0xE1C8,
+0xF292=>0xE1C9,
+0xF293=>0xE1CA,
+0xF294=>0xE1CB,
+0xF295=>0xE1CC,
+0xF296=>0xE1CD,
+0xF297=>0xE1CE,
+0xF298=>0xE1CF,
+0xF299=>0xE1D0,
+0xF29A=>0xE1D1,
+0xF29B=>0xE1D2,
+0xF29C=>0xE1D3,
+0xF29D=>0xE1D4,
+0xF29E=>0xE1D5,
+0xF29F=>0xE1D6,
+0xF2A0=>0xE1D7,
+0xF2A1=>0xE1D8,
+0xF2A2=>0xE1D9,
+0xF2A3=>0xE1DA,
+0xF2A4=>0xE1DB,
+0xF2A5=>0xE1DC,
+0xF2A6=>0xE1DD,
+0xF2A7=>0xE1DE,
+0xF2A8=>0xE1DF,
+0xF2A9=>0xE1E0,
+0xF2AA=>0xE1E1,
+0xF2AB=>0xE1E2,
+0xF2AC=>0xE1E3,
+0xF2AD=>0xE1E4,
+0xF2AE=>0xE1E5,
+0xF2AF=>0xE1E6,
+0xF2B0=>0xE1E7,
+0xF2B1=>0xE1E8,
+0xF2B2=>0xE1E9,
+0xF2B3=>0xE1EA,
+0xF2B4=>0xE1EB,
+0xF2B5=>0xE1EC,
+0xF2B6=>0xE1ED,
+0xF2B7=>0xE1EE,
+0xF2B8=>0xE1EF,
+0xF2B9=>0xE1F0,
+0xF2BA=>0xE1F1,
+0xF2BB=>0xE1F2,
+0xF2BC=>0xE1F3,
+0xF2BD=>0xE1F4,
+0xF2BE=>0xE1F5,
+0xF2BF=>0xE1F6,
+0xF2C0=>0xE1F7,
+0xF2C1=>0xE1F8,
+0xF2C2=>0xE1F9,
+0xF2C3=>0xE1FA,
+0xF2C4=>0xE1FB,
+0xF2C5=>0xE1FC,
+0xF2C6=>0xE1FD,
+0xF2C7=>0xE1FE,
+0xF2C8=>0xE1FF,
+0xF2C9=>0xE200,
+0xF2CA=>0xE201,
+0xF2CB=>0xE202,
+0xF2CC=>0xE203,
+0xF2CD=>0xE204,
+0xF2CE=>0xE205,
+0xF2CF=>0xE206,
+0xF2D0=>0xE207,
+0xF2D1=>0xE208,
+0xF2D2=>0xE209,
+0xF2D3=>0xE20A,
+0xF2D4=>0xE20B,
+0xF2D5=>0xE20C,
+0xF2D6=>0xE20D,
+0xF2D7=>0xE20E,
+0xF2D8=>0xE20F,
+0xF2D9=>0xE210,
+0xF2DA=>0xE211,
+0xF2DB=>0xE212,
+0xF2DC=>0xE213,
+0xF2DD=>0xE214,
+0xF2DE=>0xE215,
+0xF2DF=>0xE216,
+0xF2E0=>0xE217,
+0xF2E1=>0xE218,
+0xF2E2=>0xE219,
+0xF2E3=>0xE21A,
+0xF2E4=>0xE21B,
+0xF2E5=>0xE21C,
+0xF2E6=>0xE21D,
+0xF2E7=>0xE21E,
+0xF2E8=>0xE21F,
+0xF2E9=>0xE220,
+0xF2EA=>0xE221,
+0xF2EB=>0xE222,
+0xF2EC=>0xE223,
+0xF2ED=>0xE224,
+0xF2EE=>0xE225,
+0xF2EF=>0xE226,
+0xF2F0=>0xE227,
+0xF2F1=>0xE228,
+0xF2F2=>0xE229,
+0xF2F3=>0xE22A,
+0xF2F4=>0xE22B,
+0xF2F5=>0xE22C,
+0xF2F6=>0xE22D,
+0xF2F7=>0xE22E,
+0xF2F8=>0xE22F,
+0xF2F9=>0xE230,
+0xF2FA=>0xE231,
+0xF2FB=>0xE232,
+0xF2FC=>0xE233,
+0xF340=>0xE234,
+0xF341=>0xE235,
+0xF342=>0xE236,
+0xF343=>0xE237,
+0xF344=>0xE238,
+0xF345=>0xE239,
+0xF346=>0xE23A,
+0xF347=>0xE23B,
+0xF348=>0xE23C,
+0xF349=>0xE23D,
+0xF34A=>0xE23E,
+0xF34B=>0xE23F,
+0xF34C=>0xE240,
+0xF34D=>0xE241,
+0xF34E=>0xE242,
+0xF34F=>0xE243,
+0xF350=>0xE244,
+0xF351=>0xE245,
+0xF352=>0xE246,
+0xF353=>0xE247,
+0xF354=>0xE248,
+0xF355=>0xE249,
+0xF356=>0xE24A,
+0xF357=>0xE24B,
+0xF358=>0xE24C,
+0xF359=>0xE24D,
+0xF35A=>0xE24E,
+0xF35B=>0xE24F,
+0xF35C=>0xE250,
+0xF35D=>0xE251,
+0xF35E=>0xE252,
+0xF35F=>0xE253,
+0xF360=>0xE254,
+0xF361=>0xE255,
+0xF362=>0xE256,
+0xF363=>0xE257,
+0xF364=>0xE258,
+0xF365=>0xE259,
+0xF366=>0xE25A,
+0xF367=>0xE25B,
+0xF368=>0xE25C,
+0xF369=>0xE25D,
+0xF36A=>0xE25E,
+0xF36B=>0xE25F,
+0xF36C=>0xE260,
+0xF36D=>0xE261,
+0xF36E=>0xE262,
+0xF36F=>0xE263,
+0xF370=>0xE264,
+0xF371=>0xE265,
+0xF372=>0xE266,
+0xF373=>0xE267,
+0xF374=>0xE268,
+0xF375=>0xE269,
+0xF376=>0xE26A,
+0xF377=>0xE26B,
+0xF378=>0xE26C,
+0xF379=>0xE26D,
+0xF37A=>0xE26E,
+0xF37B=>0xE26F,
+0xF37C=>0xE270,
+0xF37D=>0xE271,
+0xF37E=>0xE272,
+0xF380=>0xE273,
+0xF381=>0xE274,
+0xF382=>0xE275,
+0xF383=>0xE276,
+0xF384=>0xE277,
+0xF385=>0xE278,
+0xF386=>0xE279,
+0xF387=>0xE27A,
+0xF388=>0xE27B,
+0xF389=>0xE27C,
+0xF38A=>0xE27D,
+0xF38B=>0xE27E,
+0xF38C=>0xE27F,
+0xF38D=>0xE280,
+0xF38E=>0xE281,
+0xF38F=>0xE282,
+0xF390=>0xE283,
+0xF391=>0xE284,
+0xF392=>0xE285,
+0xF393=>0xE286,
+0xF394=>0xE287,
+0xF395=>0xE288,
+0xF396=>0xE289,
+0xF397=>0xE28A,
+0xF398=>0xE28B,
+0xF399=>0xE28C,
+0xF39A=>0xE28D,
+0xF39B=>0xE28E,
+0xF39C=>0xE28F,
+0xF39D=>0xE290,
+0xF39E=>0xE291,
+0xF39F=>0xE292,
+0xF3A0=>0xE293,
+0xF3A1=>0xE294,
+0xF3A2=>0xE295,
+0xF3A3=>0xE296,
+0xF3A4=>0xE297,
+0xF3A5=>0xE298,
+0xF3A6=>0xE299,
+0xF3A7=>0xE29A,
+0xF3A8=>0xE29B,
+0xF3A9=>0xE29C,
+0xF3AA=>0xE29D,
+0xF3AB=>0xE29E,
+0xF3AC=>0xE29F,
+0xF3AD=>0xE2A0,
+0xF3AE=>0xE2A1,
+0xF3AF=>0xE2A2,
+0xF3B0=>0xE2A3,
+0xF3B1=>0xE2A4,
+0xF3B2=>0xE2A5,
+0xF3B3=>0xE2A6,
+0xF3B4=>0xE2A7,
+0xF3B5=>0xE2A8,
+0xF3B6=>0xE2A9,
+0xF3B7=>0xE2AA,
+0xF3B8=>0xE2AB,
+0xF3B9=>0xE2AC,
+0xF3BA=>0xE2AD,
+0xF3BB=>0xE2AE,
+0xF3BC=>0xE2AF,
+0xF3BD=>0xE2B0,
+0xF3BE=>0xE2B1,
+0xF3BF=>0xE2B2,
+0xF3C0=>0xE2B3,
+0xF3C1=>0xE2B4,
+0xF3C2=>0xE2B5,
+0xF3C3=>0xE2B6,
+0xF3C4=>0xE2B7,
+0xF3C5=>0xE2B8,
+0xF3C6=>0xE2B9,
+0xF3C7=>0xE2BA,
+0xF3C8=>0xE2BB,
+0xF3C9=>0xE2BC,
+0xF3CA=>0xE2BD,
+0xF3CB=>0xE2BE,
+0xF3CC=>0xE2BF,
+0xF3CD=>0xE2C0,
+0xF3CE=>0xE2C1,
+0xF3CF=>0xE2C2,
+0xF3D0=>0xE2C3,
+0xF3D1=>0xE2C4,
+0xF3D2=>0xE2C5,
+0xF3D3=>0xE2C6,
+0xF3D4=>0xE2C7,
+0xF3D5=>0xE2C8,
+0xF3D6=>0xE2C9,
+0xF3D7=>0xE2CA,
+0xF3D8=>0xE2CB,
+0xF3D9=>0xE2CC,
+0xF3DA=>0xE2CD,
+0xF3DB=>0xE2CE,
+0xF3DC=>0xE2CF,
+0xF3DD=>0xE2D0,
+0xF3DE=>0xE2D1,
+0xF3DF=>0xE2D2,
+0xF3E0=>0xE2D3,
+0xF3E1=>0xE2D4,
+0xF3E2=>0xE2D5,
+0xF3E3=>0xE2D6,
+0xF3E4=>0xE2D7,
+0xF3E5=>0xE2D8,
+0xF3E6=>0xE2D9,
+0xF3E7=>0xE2DA,
+0xF3E8=>0xE2DB,
+0xF3E9=>0xE2DC,
+0xF3EA=>0xE2DD,
+0xF3EB=>0xE2DE,
+0xF3EC=>0xE2DF,
+0xF3ED=>0xE2E0,
+0xF3EE=>0xE2E1,
+0xF3EF=>0xE2E2,
+0xF3F0=>0xE2E3,
+0xF3F1=>0xE2E4,
+0xF3F2=>0xE2E5,
+0xF3F3=>0xE2E6,
+0xF3F4=>0xE2E7,
+0xF3F5=>0xE2E8,
+0xF3F6=>0xE2E9,
+0xF3F7=>0xE2EA,
+0xF3F8=>0xE2EB,
+0xF3F9=>0xE2EC,
+0xF3FA=>0xE2ED,
+0xF3FB=>0xE2EE,
+0xF3FC=>0xE2EF,
+0xF440=>0xE2F0,
+0xF441=>0xE2F1,
+0xF442=>0xE2F2,
+0xF443=>0xE2F3,
+0xF444=>0xE2F4,
+0xF445=>0xE2F5,
+0xF446=>0xE2F6,
+0xF447=>0xE2F7,
+0xF448=>0xE2F8,
+0xF449=>0xE2F9,
+0xF44A=>0xE2FA,
+0xF44B=>0xE2FB,
+0xF44C=>0xE2FC,
+0xF44D=>0xE2FD,
+0xF44E=>0xE2FE,
+0xF44F=>0xE2FF,
+0xF450=>0xE300,
+0xF451=>0xE301,
+0xF452=>0xE302,
+0xF453=>0xE303,
+0xF454=>0xE304,
+0xF455=>0xE305,
+0xF456=>0xE306,
+0xF457=>0xE307,
+0xF458=>0xE308,
+0xF459=>0xE309,
+0xF45A=>0xE30A,
+0xF45B=>0xE30B,
+0xF45C=>0xE30C,
+0xF45D=>0xE30D,
+0xF45E=>0xE30E,
+0xF45F=>0xE30F,
+0xF460=>0xE310,
+0xF461=>0xE311,
+0xF462=>0xE312,
+0xF463=>0xE313,
+0xF464=>0xE314,
+0xF465=>0xE315,
+0xF466=>0xE316,
+0xF467=>0xE317,
+0xF468=>0xE318,
+0xF469=>0xE319,
+0xF46A=>0xE31A,
+0xF46B=>0xE31B,
+0xF46C=>0xE31C,
+0xF46D=>0xE31D,
+0xF46E=>0xE31E,
+0xF46F=>0xE31F,
+0xF470=>0xE320,
+0xF471=>0xE321,
+0xF472=>0xE322,
+0xF473=>0xE323,
+0xF474=>0xE324,
+0xF475=>0xE325,
+0xF476=>0xE326,
+0xF477=>0xE327,
+0xF478=>0xE328,
+0xF479=>0xE329,
+0xF47A=>0xE32A,
+0xF47B=>0xE32B,
+0xF47C=>0xE32C,
+0xF47D=>0xE32D,
+0xF47E=>0xE32E,
+0xF480=>0xE32F,
+0xF481=>0xE330,
+0xF482=>0xE331,
+0xF483=>0xE332,
+0xF484=>0xE333,
+0xF485=>0xE334,
+0xF486=>0xE335,
+0xF487=>0xE336,
+0xF488=>0xE337,
+0xF489=>0xE338,
+0xF48A=>0xE339,
+0xF48B=>0xE33A,
+0xF48C=>0xE33B,
+0xF48D=>0xE33C,
+0xF48E=>0xE33D,
+0xF48F=>0xE33E,
+0xF490=>0xE33F,
+0xF491=>0xE340,
+0xF492=>0xE341,
+0xF493=>0xE342,
+0xF494=>0xE343,
+0xF495=>0xE344,
+0xF496=>0xE345,
+0xF497=>0xE346,
+0xF498=>0xE347,
+0xF499=>0xE348,
+0xF49A=>0xE349,
+0xF49B=>0xE34A,
+0xF49C=>0xE34B,
+0xF49D=>0xE34C,
+0xF49E=>0xE34D,
+0xF49F=>0xE34E,
+0xF4A0=>0xE34F,
+0xF4A1=>0xE350,
+0xF4A2=>0xE351,
+0xF4A3=>0xE352,
+0xF4A4=>0xE353,
+0xF4A5=>0xE354,
+0xF4A6=>0xE355,
+0xF4A7=>0xE356,
+0xF4A8=>0xE357,
+0xF4A9=>0xE358,
+0xF4AA=>0xE359,
+0xF4AB=>0xE35A,
+0xF4AC=>0xE35B,
+0xF4AD=>0xE35C,
+0xF4AE=>0xE35D,
+0xF4AF=>0xE35E,
+0xF4B0=>0xE35F,
+0xF4B1=>0xE360,
+0xF4B2=>0xE361,
+0xF4B3=>0xE362,
+0xF4B4=>0xE363,
+0xF4B5=>0xE364,
+0xF4B6=>0xE365,
+0xF4B7=>0xE366,
+0xF4B8=>0xE367,
+0xF4B9=>0xE368,
+0xF4BA=>0xE369,
+0xF4BB=>0xE36A,
+0xF4BC=>0xE36B,
+0xF4BD=>0xE36C,
+0xF4BE=>0xE36D,
+0xF4BF=>0xE36E,
+0xF4C0=>0xE36F,
+0xF4C1=>0xE370,
+0xF4C2=>0xE371,
+0xF4C3=>0xE372,
+0xF4C4=>0xE373,
+0xF4C5=>0xE374,
+0xF4C6=>0xE375,
+0xF4C7=>0xE376,
+0xF4C8=>0xE377,
+0xF4C9=>0xE378,
+0xF4CA=>0xE379,
+0xF4CB=>0xE37A,
+0xF4CC=>0xE37B,
+0xF4CD=>0xE37C,
+0xF4CE=>0xE37D,
+0xF4CF=>0xE37E,
+0xF4D0=>0xE37F,
+0xF4D1=>0xE380,
+0xF4D2=>0xE381,
+0xF4D3=>0xE382,
+0xF4D4=>0xE383,
+0xF4D5=>0xE384,
+0xF4D6=>0xE385,
+0xF4D7=>0xE386,
+0xF4D8=>0xE387,
+0xF4D9=>0xE388,
+0xF4DA=>0xE389,
+0xF4DB=>0xE38A,
+0xF4DC=>0xE38B,
+0xF4DD=>0xE38C,
+0xF4DE=>0xE38D,
+0xF4DF=>0xE38E,
+0xF4E0=>0xE38F,
+0xF4E1=>0xE390,
+0xF4E2=>0xE391,
+0xF4E3=>0xE392,
+0xF4E4=>0xE393,
+0xF4E5=>0xE394,
+0xF4E6=>0xE395,
+0xF4E7=>0xE396,
+0xF4E8=>0xE397,
+0xF4E9=>0xE398,
+0xF4EA=>0xE399,
+0xF4EB=>0xE39A,
+0xF4EC=>0xE39B,
+0xF4ED=>0xE39C,
+0xF4EE=>0xE39D,
+0xF4EF=>0xE39E,
+0xF4F0=>0xE39F,
+0xF4F1=>0xE3A0,
+0xF4F2=>0xE3A1,
+0xF4F3=>0xE3A2,
+0xF4F4=>0xE3A3,
+0xF4F5=>0xE3A4,
+0xF4F6=>0xE3A5,
+0xF4F7=>0xE3A6,
+0xF4F8=>0xE3A7,
+0xF4F9=>0xE3A8,
+0xF4FA=>0xE3A9,
+0xF4FB=>0xE3AA,
+0xF4FC=>0xE3AB,
+0xF540=>0xE3AC,
+0xF541=>0xE3AD,
+0xF542=>0xE3AE,
+0xF543=>0xE3AF,
+0xF544=>0xE3B0,
+0xF545=>0xE3B1,
+0xF546=>0xE3B2,
+0xF547=>0xE3B3,
+0xF548=>0xE3B4,
+0xF549=>0xE3B5,
+0xF54A=>0xE3B6,
+0xF54B=>0xE3B7,
+0xF54C=>0xE3B8,
+0xF54D=>0xE3B9,
+0xF54E=>0xE3BA,
+0xF54F=>0xE3BB,
+0xF550=>0xE3BC,
+0xF551=>0xE3BD,
+0xF552=>0xE3BE,
+0xF553=>0xE3BF,
+0xF554=>0xE3C0,
+0xF555=>0xE3C1,
+0xF556=>0xE3C2,
+0xF557=>0xE3C3,
+0xF558=>0xE3C4,
+0xF559=>0xE3C5,
+0xF55A=>0xE3C6,
+0xF55B=>0xE3C7,
+0xF55C=>0xE3C8,
+0xF55D=>0xE3C9,
+0xF55E=>0xE3CA,
+0xF55F=>0xE3CB,
+0xF560=>0xE3CC,
+0xF561=>0xE3CD,
+0xF562=>0xE3CE,
+0xF563=>0xE3CF,
+0xF564=>0xE3D0,
+0xF565=>0xE3D1,
+0xF566=>0xE3D2,
+0xF567=>0xE3D3,
+0xF568=>0xE3D4,
+0xF569=>0xE3D5,
+0xF56A=>0xE3D6,
+0xF56B=>0xE3D7,
+0xF56C=>0xE3D8,
+0xF56D=>0xE3D9,
+0xF56E=>0xE3DA,
+0xF56F=>0xE3DB,
+0xF570=>0xE3DC,
+0xF571=>0xE3DD,
+0xF572=>0xE3DE,
+0xF573=>0xE3DF,
+0xF574=>0xE3E0,
+0xF575=>0xE3E1,
+0xF576=>0xE3E2,
+0xF577=>0xE3E3,
+0xF578=>0xE3E4,
+0xF579=>0xE3E5,
+0xF57A=>0xE3E6,
+0xF57B=>0xE3E7,
+0xF57C=>0xE3E8,
+0xF57D=>0xE3E9,
+0xF57E=>0xE3EA,
+0xF580=>0xE3EB,
+0xF581=>0xE3EC,
+0xF582=>0xE3ED,
+0xF583=>0xE3EE,
+0xF584=>0xE3EF,
+0xF585=>0xE3F0,
+0xF586=>0xE3F1,
+0xF587=>0xE3F2,
+0xF588=>0xE3F3,
+0xF589=>0xE3F4,
+0xF58A=>0xE3F5,
+0xF58B=>0xE3F6,
+0xF58C=>0xE3F7,
+0xF58D=>0xE3F8,
+0xF58E=>0xE3F9,
+0xF58F=>0xE3FA,
+0xF590=>0xE3FB,
+0xF591=>0xE3FC,
+0xF592=>0xE3FD,
+0xF593=>0xE3FE,
+0xF594=>0xE3FF,
+0xF595=>0xE400,
+0xF596=>0xE401,
+0xF597=>0xE402,
+0xF598=>0xE403,
+0xF599=>0xE404,
+0xF59A=>0xE405,
+0xF59B=>0xE406,
+0xF59C=>0xE407,
+0xF59D=>0xE408,
+0xF59E=>0xE409,
+0xF59F=>0xE40A,
+0xF5A0=>0xE40B,
+0xF5A1=>0xE40C,
+0xF5A2=>0xE40D,
+0xF5A3=>0xE40E,
+0xF5A4=>0xE40F,
+0xF5A5=>0xE410,
+0xF5A6=>0xE411,
+0xF5A7=>0xE412,
+0xF5A8=>0xE413,
+0xF5A9=>0xE414,
+0xF5AA=>0xE415,
+0xF5AB=>0xE416,
+0xF5AC=>0xE417,
+0xF5AD=>0xE418,
+0xF5AE=>0xE419,
+0xF5AF=>0xE41A,
+0xF5B0=>0xE41B,
+0xF5B1=>0xE41C,
+0xF5B2=>0xE41D,
+0xF5B3=>0xE41E,
+0xF5B4=>0xE41F,
+0xF5B5=>0xE420,
+0xF5B6=>0xE421,
+0xF5B7=>0xE422,
+0xF5B8=>0xE423,
+0xF5B9=>0xE424,
+0xF5BA=>0xE425,
+0xF5BB=>0xE426,
+0xF5BC=>0xE427,
+0xF5BD=>0xE428,
+0xF5BE=>0xE429,
+0xF5BF=>0xE42A,
+0xF5C0=>0xE42B,
+0xF5C1=>0xE42C,
+0xF5C2=>0xE42D,
+0xF5C3=>0xE42E,
+0xF5C4=>0xE42F,
+0xF5C5=>0xE430,
+0xF5C6=>0xE431,
+0xF5C7=>0xE432,
+0xF5C8=>0xE433,
+0xF5C9=>0xE434,
+0xF5CA=>0xE435,
+0xF5CB=>0xE436,
+0xF5CC=>0xE437,
+0xF5CD=>0xE438,
+0xF5CE=>0xE439,
+0xF5CF=>0xE43A,
+0xF5D0=>0xE43B,
+0xF5D1=>0xE43C,
+0xF5D2=>0xE43D,
+0xF5D3=>0xE43E,
+0xF5D4=>0xE43F,
+0xF5D5=>0xE440,
+0xF5D6=>0xE441,
+0xF5D7=>0xE442,
+0xF5D8=>0xE443,
+0xF5D9=>0xE444,
+0xF5DA=>0xE445,
+0xF5DB=>0xE446,
+0xF5DC=>0xE447,
+0xF5DD=>0xE448,
+0xF5DE=>0xE449,
+0xF5DF=>0xE44A,
+0xF5E0=>0xE44B,
+0xF5E1=>0xE44C,
+0xF5E2=>0xE44D,
+0xF5E3=>0xE44E,
+0xF5E4=>0xE44F,
+0xF5E5=>0xE450,
+0xF5E6=>0xE451,
+0xF5E7=>0xE452,
+0xF5E8=>0xE453,
+0xF5E9=>0xE454,
+0xF5EA=>0xE455,
+0xF5EB=>0xE456,
+0xF5EC=>0xE457,
+0xF5ED=>0xE458,
+0xF5EE=>0xE459,
+0xF5EF=>0xE45A,
+0xF5F0=>0xE45B,
+0xF5F1=>0xE45C,
+0xF5F2=>0xE45D,
+0xF5F3=>0xE45E,
+0xF5F4=>0xE45F,
+0xF5F5=>0xE460,
+0xF5F6=>0xE461,
+0xF5F7=>0xE462,
+0xF5F8=>0xE463,
+0xF5F9=>0xE464,
+0xF5FA=>0xE465,
+0xF5FB=>0xE466,
+0xF5FC=>0xE467,
+0xF640=>0xE468,
+0xF641=>0xE469,
+0xF642=>0xE46A,
+0xF643=>0xE46B,
+0xF644=>0xE46C,
+0xF645=>0xE46D,
+0xF646=>0xE46E,
+0xF647=>0xE46F,
+0xF648=>0xE470,
+0xF649=>0xE471,
+0xF64A=>0xE472,
+0xF64B=>0xE473,
+0xF64C=>0xE474,
+0xF64D=>0xE475,
+0xF64E=>0xE476,
+0xF64F=>0xE477,
+0xF650=>0xE478,
+0xF651=>0xE479,
+0xF652=>0xE47A,
+0xF653=>0xE47B,
+0xF654=>0xE47C,
+0xF655=>0xE47D,
+0xF656=>0xE47E,
+0xF657=>0xE47F,
+0xF658=>0xE480,
+0xF659=>0xE481,
+0xF65A=>0xE482,
+0xF65B=>0xE483,
+0xF65C=>0xE484,
+0xF65D=>0xE485,
+0xF65E=>0xE486,
+0xF65F=>0xE487,
+0xF660=>0xE488,
+0xF661=>0xE489,
+0xF662=>0xE48A,
+0xF663=>0xE48B,
+0xF664=>0xE48C,
+0xF665=>0xE48D,
+0xF666=>0xE48E,
+0xF667=>0xE48F,
+0xF668=>0xE490,
+0xF669=>0xE491,
+0xF66A=>0xE492,
+0xF66B=>0xE493,
+0xF66C=>0xE494,
+0xF66D=>0xE495,
+0xF66E=>0xE496,
+0xF66F=>0xE497,
+0xF670=>0xE498,
+0xF671=>0xE499,
+0xF672=>0xE49A,
+0xF673=>0xE49B,
+0xF674=>0xE49C,
+0xF675=>0xE49D,
+0xF676=>0xE49E,
+0xF677=>0xE49F,
+0xF678=>0xE4A0,
+0xF679=>0xE4A1,
+0xF67A=>0xE4A2,
+0xF67B=>0xE4A3,
+0xF67C=>0xE4A4,
+0xF67D=>0xE4A5,
+0xF67E=>0xE4A6,
+0xF680=>0xE4A7,
+0xF681=>0xE4A8,
+0xF682=>0xE4A9,
+0xF683=>0xE4AA,
+0xF684=>0xE4AB,
+0xF685=>0xE4AC,
+0xF686=>0xE4AD,
+0xF687=>0xE4AE,
+0xF688=>0xE4AF,
+0xF689=>0xE4B0,
+0xF68A=>0xE4B1,
+0xF68B=>0xE4B2,
+0xF68C=>0xE4B3,
+0xF68D=>0xE4B4,
+0xF68E=>0xE4B5,
+0xF68F=>0xE4B6,
+0xF690=>0xE4B7,
+0xF691=>0xE4B8,
+0xF692=>0xE4B9,
+0xF693=>0xE4BA,
+0xF694=>0xE4BB,
+0xF695=>0xE4BC,
+0xF696=>0xE4BD,
+0xF697=>0xE4BE,
+0xF698=>0xE4BF,
+0xF699=>0xE4C0,
+0xF69A=>0xE4C1,
+0xF69B=>0xE4C2,
+0xF69C=>0xE4C3,
+0xF69D=>0xE4C4,
+0xF69E=>0xE4C5,
+0xF69F=>0xE4C6,
+0xF6A0=>0xE4C7,
+0xF6A1=>0xE4C8,
+0xF6A2=>0xE4C9,
+0xF6A3=>0xE4CA,
+0xF6A4=>0xE4CB,
+0xF6A5=>0xE4CC,
+0xF6A6=>0xE4CD,
+0xF6A7=>0xE4CE,
+0xF6A8=>0xE4CF,
+0xF6A9=>0xE4D0,
+0xF6AA=>0xE4D1,
+0xF6AB=>0xE4D2,
+0xF6AC=>0xE4D3,
+0xF6AD=>0xE4D4,
+0xF6AE=>0xE4D5,
+0xF6AF=>0xE4D6,
+0xF6B0=>0xE4D7,
+0xF6B1=>0xE4D8,
+0xF6B2=>0xE4D9,
+0xF6B3=>0xE4DA,
+0xF6B4=>0xE4DB,
+0xF6B5=>0xE4DC,
+0xF6B6=>0xE4DD,
+0xF6B7=>0xE4DE,
+0xF6B8=>0xE4DF,
+0xF6B9=>0xE4E0,
+0xF6BA=>0xE4E1,
+0xF6BB=>0xE4E2,
+0xF6BC=>0xE4E3,
+0xF6BD=>0xE4E4,
+0xF6BE=>0xE4E5,
+0xF6BF=>0xE4E6,
+0xF6C0=>0xE4E7,
+0xF6C1=>0xE4E8,
+0xF6C2=>0xE4E9,
+0xF6C3=>0xE4EA,
+0xF6C4=>0xE4EB,
+0xF6C5=>0xE4EC,
+0xF6C6=>0xE4ED,
+0xF6C7=>0xE4EE,
+0xF6C8=>0xE4EF,
+0xF6C9=>0xE4F0,
+0xF6CA=>0xE4F1,
+0xF6CB=>0xE4F2,
+0xF6CC=>0xE4F3,
+0xF6CD=>0xE4F4,
+0xF6CE=>0xE4F5,
+0xF6CF=>0xE4F6,
+0xF6D0=>0xE4F7,
+0xF6D1=>0xE4F8,
+0xF6D2=>0xE4F9,
+0xF6D3=>0xE4FA,
+0xF6D4=>0xE4FB,
+0xF6D5=>0xE4FC,
+0xF6D6=>0xE4FD,
+0xF6D7=>0xE4FE,
+0xF6D8=>0xE4FF,
+0xF6D9=>0xE500,
+0xF6DA=>0xE501,
+0xF6DB=>0xE502,
+0xF6DC=>0xE503,
+0xF6DD=>0xE504,
+0xF6DE=>0xE505,
+0xF6DF=>0xE506,
+0xF6E0=>0xE507,
+0xF6E1=>0xE508,
+0xF6E2=>0xE509,
+0xF6E3=>0xE50A,
+0xF6E4=>0xE50B,
+0xF6E5=>0xE50C,
+0xF6E6=>0xE50D,
+0xF6E7=>0xE50E,
+0xF6E8=>0xE50F,
+0xF6E9=>0xE510,
+0xF6EA=>0xE511,
+0xF6EB=>0xE512,
+0xF6EC=>0xE513,
+0xF6ED=>0xE514,
+0xF6EE=>0xE515,
+0xF6EF=>0xE516,
+0xF6F0=>0xE517,
+0xF6F1=>0xE518,
+0xF6F2=>0xE519,
+0xF6F3=>0xE51A,
+0xF6F4=>0xE51B,
+0xF6F5=>0xE51C,
+0xF6F6=>0xE51D,
+0xF6F7=>0xE51E,
+0xF6F8=>0xE51F,
+0xF6F9=>0xE520,
+0xF6FA=>0xE521,
+0xF6FB=>0xE522,
+0xF6FC=>0xE523,
+0xF740=>0xE524,
+0xF741=>0xE525,
+0xF742=>0xE526,
+0xF743=>0xE527,
+0xF744=>0xE528,
+0xF745=>0xE529,
+0xF746=>0xE52A,
+0xF747=>0xE52B,
+0xF748=>0xE52C,
+0xF749=>0xE52D,
+0xF74A=>0xE52E,
+0xF74B=>0xE52F,
+0xF74C=>0xE530,
+0xF74D=>0xE531,
+0xF74E=>0xE532,
+0xF74F=>0xE533,
+0xF750=>0xE534,
+0xF751=>0xE535,
+0xF752=>0xE536,
+0xF753=>0xE537,
+0xF754=>0xE538,
+0xF755=>0xE539,
+0xF756=>0xE53A,
+0xF757=>0xE53B,
+0xF758=>0xE53C,
+0xF759=>0xE53D,
+0xF75A=>0xE53E,
+0xF75B=>0xE53F,
+0xF75C=>0xE540,
+0xF75D=>0xE541,
+0xF75E=>0xE542,
+0xF75F=>0xE543,
+0xF760=>0xE544,
+0xF761=>0xE545,
+0xF762=>0xE546,
+0xF763=>0xE547,
+0xF764=>0xE548,
+0xF765=>0xE549,
+0xF766=>0xE54A,
+0xF767=>0xE54B,
+0xF768=>0xE54C,
+0xF769=>0xE54D,
+0xF76A=>0xE54E,
+0xF76B=>0xE54F,
+0xF76C=>0xE550,
+0xF76D=>0xE551,
+0xF76E=>0xE552,
+0xF76F=>0xE553,
+0xF770=>0xE554,
+0xF771=>0xE555,
+0xF772=>0xE556,
+0xF773=>0xE557,
+0xF774=>0xE558,
+0xF775=>0xE559,
+0xF776=>0xE55A,
+0xF777=>0xE55B,
+0xF778=>0xE55C,
+0xF779=>0xE55D,
+0xF77A=>0xE55E,
+0xF77B=>0xE55F,
+0xF77C=>0xE560,
+0xF77D=>0xE561,
+0xF77E=>0xE562,
+0xF780=>0xE563,
+0xF781=>0xE564,
+0xF782=>0xE565,
+0xF783=>0xE566,
+0xF784=>0xE567,
+0xF785=>0xE568,
+0xF786=>0xE569,
+0xF787=>0xE56A,
+0xF788=>0xE56B,
+0xF789=>0xE56C,
+0xF78A=>0xE56D,
+0xF78B=>0xE56E,
+0xF78C=>0xE56F,
+0xF78D=>0xE570,
+0xF78E=>0xE571,
+0xF78F=>0xE572,
+0xF790=>0xE573,
+0xF791=>0xE574,
+0xF792=>0xE575,
+0xF793=>0xE576,
+0xF794=>0xE577,
+0xF795=>0xE578,
+0xF796=>0xE579,
+0xF797=>0xE57A,
+0xF798=>0xE57B,
+0xF799=>0xE57C,
+0xF79A=>0xE57D,
+0xF79B=>0xE57E,
+0xF79C=>0xE57F,
+0xF79D=>0xE580,
+0xF79E=>0xE581,
+0xF79F=>0xE582,
+0xF7A0=>0xE583,
+0xF7A1=>0xE584,
+0xF7A2=>0xE585,
+0xF7A3=>0xE586,
+0xF7A4=>0xE587,
+0xF7A5=>0xE588,
+0xF7A6=>0xE589,
+0xF7A7=>0xE58A,
+0xF7A8=>0xE58B,
+0xF7A9=>0xE58C,
+0xF7AA=>0xE58D,
+0xF7AB=>0xE58E,
+0xF7AC=>0xE58F,
+0xF7AD=>0xE590,
+0xF7AE=>0xE591,
+0xF7AF=>0xE592,
+0xF7B0=>0xE593,
+0xF7B1=>0xE594,
+0xF7B2=>0xE595,
+0xF7B3=>0xE596,
+0xF7B4=>0xE597,
+0xF7B5=>0xE598,
+0xF7B6=>0xE599,
+0xF7B7=>0xE59A,
+0xF7B8=>0xE59B,
+0xF7B9=>0xE59C,
+0xF7BA=>0xE59D,
+0xF7BB=>0xE59E,
+0xF7BC=>0xE59F,
+0xF7BD=>0xE5A0,
+0xF7BE=>0xE5A1,
+0xF7BF=>0xE5A2,
+0xF7C0=>0xE5A3,
+0xF7C1=>0xE5A4,
+0xF7C2=>0xE5A5,
+0xF7C3=>0xE5A6,
+0xF7C4=>0xE5A7,
+0xF7C5=>0xE5A8,
+0xF7C6=>0xE5A9,
+0xF7C7=>0xE5AA,
+0xF7C8=>0xE5AB,
+0xF7C9=>0xE5AC,
+0xF7CA=>0xE5AD,
+0xF7CB=>0xE5AE,
+0xF7CC=>0xE5AF,
+0xF7CD=>0xE5B0,
+0xF7CE=>0xE5B1,
+0xF7CF=>0xE5B2,
+0xF7D0=>0xE5B3,
+0xF7D1=>0xE5B4,
+0xF7D2=>0xE5B5,
+0xF7D3=>0xE5B6,
+0xF7D4=>0xE5B7,
+0xF7D5=>0xE5B8,
+0xF7D6=>0xE5B9,
+0xF7D7=>0xE5BA,
+0xF7D8=>0xE5BB,
+0xF7D9=>0xE5BC,
+0xF7DA=>0xE5BD,
+0xF7DB=>0xE5BE,
+0xF7DC=>0xE5BF,
+0xF7DD=>0xE5C0,
+0xF7DE=>0xE5C1,
+0xF7DF=>0xE5C2,
+0xF7E0=>0xE5C3,
+0xF7E1=>0xE5C4,
+0xF7E2=>0xE5C5,
+0xF7E3=>0xE5C6,
+0xF7E4=>0xE5C7,
+0xF7E5=>0xE5C8,
+0xF7E6=>0xE5C9,
+0xF7E7=>0xE5CA,
+0xF7E8=>0xE5CB,
+0xF7E9=>0xE5CC,
+0xF7EA=>0xE5CD,
+0xF7EB=>0xE5CE,
+0xF7EC=>0xE5CF,
+0xF7ED=>0xE5D0,
+0xF7EE=>0xE5D1,
+0xF7EF=>0xE5D2,
+0xF7F0=>0xE5D3,
+0xF7F1=>0xE5D4,
+0xF7F2=>0xE5D5,
+0xF7F3=>0xE5D6,
+0xF7F4=>0xE5D7,
+0xF7F5=>0xE5D8,
+0xF7F6=>0xE5D9,
+0xF7F7=>0xE5DA,
+0xF7F8=>0xE5DB,
+0xF7F9=>0xE5DC,
+0xF7FA=>0xE5DD,
+0xF7FB=>0xE5DE,
+0xF7FC=>0xE5DF,
+0xF840=>0xE5E0,
+0xF841=>0xE5E1,
+0xF842=>0xE5E2,
+0xF843=>0xE5E3,
+0xF844=>0xE5E4,
+0xF845=>0xE5E5,
+0xF846=>0xE5E6,
+0xF847=>0xE5E7,
+0xF848=>0xE5E8,
+0xF849=>0xE5E9,
+0xF84A=>0xE5EA,
+0xF84B=>0xE5EB,
+0xF84C=>0xE5EC,
+0xF84D=>0xE5ED,
+0xF84E=>0xE5EE,
+0xF84F=>0xE5EF,
+0xF850=>0xE5F0,
+0xF851=>0xE5F1,
+0xF852=>0xE5F2,
+0xF853=>0xE5F3,
+0xF854=>0xE5F4,
+0xF855=>0xE5F5,
+0xF856=>0xE5F6,
+0xF857=>0xE5F7,
+0xF858=>0xE5F8,
+0xF859=>0xE5F9,
+0xF85A=>0xE5FA,
+0xF85B=>0xE5FB,
+0xF85C=>0xE5FC,
+0xF85D=>0xE5FD,
+0xF85E=>0xE5FE,
+0xF85F=>0xE5FF,
+0xF860=>0xE600,
+0xF861=>0xE601,
+0xF862=>0xE602,
+0xF863=>0xE603,
+0xF864=>0xE604,
+0xF865=>0xE605,
+0xF866=>0xE606,
+0xF867=>0xE607,
+0xF868=>0xE608,
+0xF869=>0xE609,
+0xF86A=>0xE60A,
+0xF86B=>0xE60B,
+0xF86C=>0xE60C,
+0xF86D=>0xE60D,
+0xF86E=>0xE60E,
+0xF86F=>0xE60F,
+0xF870=>0xE610,
+0xF871=>0xE611,
+0xF872=>0xE612,
+0xF873=>0xE613,
+0xF874=>0xE614,
+0xF875=>0xE615,
+0xF876=>0xE616,
+0xF877=>0xE617,
+0xF878=>0xE618,
+0xF879=>0xE619,
+0xF87A=>0xE61A,
+0xF87B=>0xE61B,
+0xF87C=>0xE61C,
+0xF87D=>0xE61D,
+0xF87E=>0xE61E,
+0xF880=>0xE61F,
+0xF881=>0xE620,
+0xF882=>0xE621,
+0xF883=>0xE622,
+0xF884=>0xE623,
+0xF885=>0xE624,
+0xF886=>0xE625,
+0xF887=>0xE626,
+0xF888=>0xE627,
+0xF889=>0xE628,
+0xF88A=>0xE629,
+0xF88B=>0xE62A,
+0xF88C=>0xE62B,
+0xF88D=>0xE62C,
+0xF88E=>0xE62D,
+0xF88F=>0xE62E,
+0xF890=>0xE62F,
+0xF891=>0xE630,
+0xF892=>0xE631,
+0xF893=>0xE632,
+0xF894=>0xE633,
+0xF895=>0xE634,
+0xF896=>0xE635,
+0xF897=>0xE636,
+0xF898=>0xE637,
+0xF899=>0xE638,
+0xF89A=>0xE639,
+0xF89B=>0xE63A,
+0xF89C=>0xE63B,
+0xF89D=>0xE63C,
+0xF89E=>0xE63D,
+0xF89F=>0xE63E,
+0xF8A0=>0xE63F,
+0xF8A1=>0xE640,
+0xF8A2=>0xE641,
+0xF8A3=>0xE642,
+0xF8A4=>0xE643,
+0xF8A5=>0xE644,
+0xF8A6=>0xE645,
+0xF8A7=>0xE646,
+0xF8A8=>0xE647,
+0xF8A9=>0xE648,
+0xF8AA=>0xE649,
+0xF8AB=>0xE64A,
+0xF8AC=>0xE64B,
+0xF8AD=>0xE64C,
+0xF8AE=>0xE64D,
+0xF8AF=>0xE64E,
+0xF8B0=>0xE64F,
+0xF8B1=>0xE650,
+0xF8B2=>0xE651,
+0xF8B3=>0xE652,
+0xF8B4=>0xE653,
+0xF8B5=>0xE654,
+0xF8B6=>0xE655,
+0xF8B7=>0xE656,
+0xF8B8=>0xE657,
+0xF8B9=>0xE658,
+0xF8BA=>0xE659,
+0xF8BB=>0xE65A,
+0xF8BC=>0xE65B,
+0xF8BD=>0xE65C,
+0xF8BE=>0xE65D,
+0xF8BF=>0xE65E,
+0xF8C0=>0xE65F,
+0xF8C1=>0xE660,
+0xF8C2=>0xE661,
+0xF8C3=>0xE662,
+0xF8C4=>0xE663,
+0xF8C5=>0xE664,
+0xF8C6=>0xE665,
+0xF8C7=>0xE666,
+0xF8C8=>0xE667,
+0xF8C9=>0xE668,
+0xF8CA=>0xE669,
+0xF8CB=>0xE66A,
+0xF8CC=>0xE66B,
+0xF8CD=>0xE66C,
+0xF8CE=>0xE66D,
+0xF8CF=>0xE66E,
+0xF8D0=>0xE66F,
+0xF8D1=>0xE670,
+0xF8D2=>0xE671,
+0xF8D3=>0xE672,
+0xF8D4=>0xE673,
+0xF8D5=>0xE674,
+0xF8D6=>0xE675,
+0xF8D7=>0xE676,
+0xF8D8=>0xE677,
+0xF8D9=>0xE678,
+0xF8DA=>0xE679,
+0xF8DB=>0xE67A,
+0xF8DC=>0xE67B,
+0xF8DD=>0xE67C,
+0xF8DE=>0xE67D,
+0xF8DF=>0xE67E,
+0xF8E0=>0xE67F,
+0xF8E1=>0xE680,
+0xF8E2=>0xE681,
+0xF8E3=>0xE682,
+0xF8E4=>0xE683,
+0xF8E5=>0xE684,
+0xF8E6=>0xE685,
+0xF8E7=>0xE686,
+0xF8E8=>0xE687,
+0xF8E9=>0xE688,
+0xF8EA=>0xE689,
+0xF8EB=>0xE68A,
+0xF8EC=>0xE68B,
+0xF8ED=>0xE68C,
+0xF8EE=>0xE68D,
+0xF8EF=>0xE68E,
+0xF8F0=>0xE68F,
+0xF8F1=>0xE690,
+0xF8F2=>0xE691,
+0xF8F3=>0xE692,
+0xF8F4=>0xE693,
+0xF8F5=>0xE694,
+0xF8F6=>0xE695,
+0xF8F7=>0xE696,
+0xF8F8=>0xE697,
+0xF8F9=>0xE698,
+0xF8FA=>0xE699,
+0xF8FB=>0xE69A,
+0xF8FC=>0xE69B,
+0xF940=>0xE69C,
+0xF941=>0xE69D,
+0xF942=>0xE69E,
+0xF943=>0xE69F,
+0xF944=>0xE6A0,
+0xF945=>0xE6A1,
+0xF946=>0xE6A2,
+0xF947=>0xE6A3,
+0xF948=>0xE6A4,
+0xF949=>0xE6A5,
+0xF94A=>0xE6A6,
+0xF94B=>0xE6A7,
+0xF94C=>0xE6A8,
+0xF94D=>0xE6A9,
+0xF94E=>0xE6AA,
+0xF94F=>0xE6AB,
+0xF950=>0xE6AC,
+0xF951=>0xE6AD,
+0xF952=>0xE6AE,
+0xF953=>0xE6AF,
+0xF954=>0xE6B0,
+0xF955=>0xE6B1,
+0xF956=>0xE6B2,
+0xF957=>0xE6B3,
+0xF958=>0xE6B4,
+0xF959=>0xE6B5,
+0xF95A=>0xE6B6,
+0xF95B=>0xE6B7,
+0xF95C=>0xE6B8,
+0xF95D=>0xE6B9,
+0xF95E=>0xE6BA,
+0xF95F=>0xE6BB,
+0xF960=>0xE6BC,
+0xF961=>0xE6BD,
+0xF962=>0xE6BE,
+0xF963=>0xE6BF,
+0xF964=>0xE6C0,
+0xF965=>0xE6C1,
+0xF966=>0xE6C2,
+0xF967=>0xE6C3,
+0xF968=>0xE6C4,
+0xF969=>0xE6C5,
+0xF96A=>0xE6C6,
+0xF96B=>0xE6C7,
+0xF96C=>0xE6C8,
+0xF96D=>0xE6C9,
+0xF96E=>0xE6CA,
+0xF96F=>0xE6CB,
+0xF970=>0xE6CC,
+0xF971=>0xE6CD,
+0xF972=>0xE6CE,
+0xF973=>0xE6CF,
+0xF974=>0xE6D0,
+0xF975=>0xE6D1,
+0xF976=>0xE6D2,
+0xF977=>0xE6D3,
+0xF978=>0xE6D4,
+0xF979=>0xE6D5,
+0xF97A=>0xE6D6,
+0xF97B=>0xE6D7,
+0xF97C=>0xE6D8,
+0xF97D=>0xE6D9,
+0xF97E=>0xE6DA,
+0xF980=>0xE6DB,
+0xF981=>0xE6DC,
+0xF982=>0xE6DD,
+0xF983=>0xE6DE,
+0xF984=>0xE6DF,
+0xF985=>0xE6E0,
+0xF986=>0xE6E1,
+0xF987=>0xE6E2,
+0xF988=>0xE6E3,
+0xF989=>0xE6E4,
+0xF98A=>0xE6E5,
+0xF98B=>0xE6E6,
+0xF98C=>0xE6E7,
+0xF98D=>0xE6E8,
+0xF98E=>0xE6E9,
+0xF98F=>0xE6EA,
+0xF990=>0xE6EB,
+0xF991=>0xE6EC,
+0xF992=>0xE6ED,
+0xF993=>0xE6EE,
+0xF994=>0xE6EF,
+0xF995=>0xE6F0,
+0xF996=>0xE6F1,
+0xF997=>0xE6F2,
+0xF998=>0xE6F3,
+0xF999=>0xE6F4,
+0xF99A=>0xE6F5,
+0xF99B=>0xE6F6,
+0xF99C=>0xE6F7,
+0xF99D=>0xE6F8,
+0xF99E=>0xE6F9,
+0xF99F=>0xE6FA,
+0xF9A0=>0xE6FB,
+0xF9A1=>0xE6FC,
+0xF9A2=>0xE6FD,
+0xF9A3=>0xE6FE,
+0xF9A4=>0xE6FF,
+0xF9A5=>0xE700,
+0xF9A6=>0xE701,
+0xF9A7=>0xE702,
+0xF9A8=>0xE703,
+0xF9A9=>0xE704,
+0xF9AA=>0xE705,
+0xF9AB=>0xE706,
+0xF9AC=>0xE707,
+0xF9AD=>0xE708,
+0xF9AE=>0xE709,
+0xF9AF=>0xE70A,
+0xF9B0=>0xE70B,
+0xF9B1=>0xE70C,
+0xF9B2=>0xE70D,
+0xF9B3=>0xE70E,
+0xF9B4=>0xE70F,
+0xF9B5=>0xE710,
+0xF9B6=>0xE711,
+0xF9B7=>0xE712,
+0xF9B8=>0xE713,
+0xF9B9=>0xE714,
+0xF9BA=>0xE715,
+0xF9BB=>0xE716,
+0xF9BC=>0xE717,
+0xF9BD=>0xE718,
+0xF9BE=>0xE719,
+0xF9BF=>0xE71A,
+0xF9C0=>0xE71B,
+0xF9C1=>0xE71C,
+0xF9C2=>0xE71D,
+0xF9C3=>0xE71E,
+0xF9C4=>0xE71F,
+0xF9C5=>0xE720,
+0xF9C6=>0xE721,
+0xF9C7=>0xE722,
+0xF9C8=>0xE723,
+0xF9C9=>0xE724,
+0xF9CA=>0xE725,
+0xF9CB=>0xE726,
+0xF9CC=>0xE727,
+0xF9CD=>0xE728,
+0xF9CE=>0xE729,
+0xF9CF=>0xE72A,
+0xF9D0=>0xE72B,
+0xF9D1=>0xE72C,
+0xF9D2=>0xE72D,
+0xF9D3=>0xE72E,
+0xF9D4=>0xE72F,
+0xF9D5=>0xE730,
+0xF9D6=>0xE731,
+0xF9D7=>0xE732,
+0xF9D8=>0xE733,
+0xF9D9=>0xE734,
+0xF9DA=>0xE735,
+0xF9DB=>0xE736,
+0xF9DC=>0xE737,
+0xF9DD=>0xE738,
+0xF9DE=>0xE739,
+0xF9DF=>0xE73A,
+0xF9E0=>0xE73B,
+0xF9E1=>0xE73C,
+0xF9E2=>0xE73D,
+0xF9E3=>0xE73E,
+0xF9E4=>0xE73F,
+0xF9E5=>0xE740,
+0xF9E6=>0xE741,
+0xF9E7=>0xE742,
+0xF9E8=>0xE743,
+0xF9E9=>0xE744,
+0xF9EA=>0xE745,
+0xF9EB=>0xE746,
+0xF9EC=>0xE747,
+0xF9ED=>0xE748,
+0xF9EE=>0xE749,
+0xF9EF=>0xE74A,
+0xF9F0=>0xE74B,
+0xF9F1=>0xE74C,
+0xF9F2=>0xE74D,
+0xF9F3=>0xE74E,
+0xF9F4=>0xE74F,
+0xF9F5=>0xE750,
+0xF9F6=>0xE751,
+0xF9F7=>0xE752,
+0xF9F8=>0xE753,
+0xF9F9=>0xE754,
+0xF9FA=>0xE755,
+0xF9FB=>0xE756,
+0xF9FC=>0xE757,
+0xFA40=>0x2170,
+0xFA41=>0x2171,
+0xFA42=>0x2172,
+0xFA43=>0x2173,
+0xFA44=>0x2174,
+0xFA45=>0x2175,
+0xFA46=>0x2176,
+0xFA47=>0x2177,
+0xFA48=>0x2178,
+0xFA49=>0x2179,
+0xFA4A=>0x2160,
+0xFA4B=>0x2161,
+0xFA4C=>0x2162,
+0xFA4D=>0x2163,
+0xFA4E=>0x2164,
+0xFA4F=>0x2165,
+0xFA50=>0x2166,
+0xFA51=>0x2167,
+0xFA52=>0x2168,
+0xFA53=>0x2169,
+0xFA54=>0xFFE2,
+0xFA55=>0xFFE4,
+0xFA56=>0xFF07,
+0xFA57=>0xFF02,
+0xFA58=>0x3231,
+0xFA59=>0x2116,
+0xFA5A=>0x2121,
+0xFA5B=>0x2235,
+0xFA5C=>0x7E8A,
+0xFA5D=>0x891C,
+0xFA5E=>0x9348,
+0xFA5F=>0x9288,
+0xFA60=>0x84DC,
+0xFA61=>0x4FC9,
+0xFA62=>0x70BB,
+0xFA63=>0x6631,
+0xFA64=>0x68C8,
+0xFA65=>0x92F9,
+0xFA66=>0x66FB,
+0xFA67=>0x5F45,
+0xFA68=>0x4E28,
+0xFA69=>0x4EE1,
+0xFA6A=>0x4EFC,
+0xFA6B=>0x4F00,
+0xFA6C=>0x4F03,
+0xFA6D=>0x4F39,
+0xFA6E=>0x4F56,
+0xFA6F=>0x4F92,
+0xFA70=>0x4F8A,
+0xFA71=>0x4F9A,
+0xFA72=>0x4F94,
+0xFA73=>0x4FCD,
+0xFA74=>0x5040,
+0xFA75=>0x5022,
+0xFA76=>0x4FFF,
+0xFA77=>0x501E,
+0xFA78=>0x5046,
+0xFA79=>0x5070,
+0xFA7A=>0x5042,
+0xFA7B=>0x5094,
+0xFA7C=>0x50F4,
+0xFA7D=>0x50D8,
+0xFA7E=>0x514A,
+0xFA80=>0x5164,
+0xFA81=>0x519D,
+0xFA82=>0x51BE,
+0xFA83=>0x51EC,
+0xFA84=>0x5215,
+0xFA85=>0x529C,
+0xFA86=>0x52A6,
+0xFA87=>0x52C0,
+0xFA88=>0x52DB,
+0xFA89=>0x5300,
+0xFA8A=>0x5307,
+0xFA8B=>0x5324,
+0xFA8C=>0x5372,
+0xFA8D=>0x5393,
+0xFA8E=>0x53B2,
+0xFA8F=>0x53DD,
+0xFA90=>0xFA0E,
+0xFA91=>0x549C,
+0xFA92=>0x548A,
+0xFA93=>0x54A9,
+0xFA94=>0x54FF,
+0xFA95=>0x5586,
+0xFA96=>0x5759,
+0xFA97=>0x5765,
+0xFA98=>0x57AC,
+0xFA99=>0x57C8,
+0xFA9A=>0x57C7,
+0xFA9B=>0xFA0F,
+0xFA9C=>0xFA10,
+0xFA9D=>0x589E,
+0xFA9E=>0x58B2,
+0xFA9F=>0x590B,
+0xFAA0=>0x5953,
+0xFAA1=>0x595B,
+0xFAA2=>0x595D,
+0xFAA3=>0x5963,
+0xFAA4=>0x59A4,
+0xFAA5=>0x59BA,
+0xFAA6=>0x5B56,
+0xFAA7=>0x5BC0,
+0xFAA8=>0x752F,
+0xFAA9=>0x5BD8,
+0xFAAA=>0x5BEC,
+0xFAAB=>0x5C1E,
+0xFAAC=>0x5CA6,
+0xFAAD=>0x5CBA,
+0xFAAE=>0x5CF5,
+0xFAAF=>0x5D27,
+0xFAB0=>0x5D53,
+0xFAB1=>0xFA11,
+0xFAB2=>0x5D42,
+0xFAB3=>0x5D6D,
+0xFAB4=>0x5DB8,
+0xFAB5=>0x5DB9,
+0xFAB6=>0x5DD0,
+0xFAB7=>0x5F21,
+0xFAB8=>0x5F34,
+0xFAB9=>0x5F67,
+0xFABA=>0x5FB7,
+0xFABB=>0x5FDE,
+0xFABC=>0x605D,
+0xFABD=>0x6085,
+0xFABE=>0x608A,
+0xFABF=>0x60DE,
+0xFAC0=>0x60D5,
+0xFAC1=>0x6120,
+0xFAC2=>0x60F2,
+0xFAC3=>0x6111,
+0xFAC4=>0x6137,
+0xFAC5=>0x6130,
+0xFAC6=>0x6198,
+0xFAC7=>0x6213,
+0xFAC8=>0x62A6,
+0xFAC9=>0x63F5,
+0xFACA=>0x6460,
+0xFACB=>0x649D,
+0xFACC=>0x64CE,
+0xFACD=>0x654E,
+0xFACE=>0x6600,
+0xFACF=>0x6615,
+0xFAD0=>0x663B,
+0xFAD1=>0x6609,
+0xFAD2=>0x662E,
+0xFAD3=>0x661E,
+0xFAD4=>0x6624,
+0xFAD5=>0x6665,
+0xFAD6=>0x6657,
+0xFAD7=>0x6659,
+0xFAD8=>0xFA12,
+0xFAD9=>0x6673,
+0xFADA=>0x6699,
+0xFADB=>0x66A0,
+0xFADC=>0x66B2,
+0xFADD=>0x66BF,
+0xFADE=>0x66FA,
+0xFADF=>0x670E,
+0xFAE0=>0xF929,
+0xFAE1=>0x6766,
+0xFAE2=>0x67BB,
+0xFAE3=>0x6852,
+0xFAE4=>0x67C0,
+0xFAE5=>0x6801,
+0xFAE6=>0x6844,
+0xFAE7=>0x68CF,
+0xFAE8=>0xFA13,
+0xFAE9=>0x6968,
+0xFAEA=>0xFA14,
+0xFAEB=>0x6998,
+0xFAEC=>0x69E2,
+0xFAED=>0x6A30,
+0xFAEE=>0x6A6B,
+0xFAEF=>0x6A46,
+0xFAF0=>0x6A73,
+0xFAF1=>0x6A7E,
+0xFAF2=>0x6AE2,
+0xFAF3=>0x6AE4,
+0xFAF4=>0x6BD6,
+0xFAF5=>0x6C3F,
+0xFAF6=>0x6C5C,
+0xFAF7=>0x6C86,
+0xFAF8=>0x6C6F,
+0xFAF9=>0x6CDA,
+0xFAFA=>0x6D04,
+0xFAFB=>0x6D87,
+0xFAFC=>0x6D6F,
+0xFB40=>0x6D96,
+0xFB41=>0x6DAC,
+0xFB42=>0x6DCF,
+0xFB43=>0x6DF8,
+0xFB44=>0x6DF2,
+0xFB45=>0x6DFC,
+0xFB46=>0x6E39,
+0xFB47=>0x6E5C,
+0xFB48=>0x6E27,
+0xFB49=>0x6E3C,
+0xFB4A=>0x6EBF,
+0xFB4B=>0x6F88,
+0xFB4C=>0x6FB5,
+0xFB4D=>0x6FF5,
+0xFB4E=>0x7005,
+0xFB4F=>0x7007,
+0xFB50=>0x7028,
+0xFB51=>0x7085,
+0xFB52=>0x70AB,
+0xFB53=>0x710F,
+0xFB54=>0x7104,
+0xFB55=>0x715C,
+0xFB56=>0x7146,
+0xFB57=>0x7147,
+0xFB58=>0xFA15,
+0xFB59=>0x71C1,
+0xFB5A=>0x71FE,
+0xFB5B=>0x72B1,
+0xFB5C=>0x72BE,
+0xFB5D=>0x7324,
+0xFB5E=>0xFA16,
+0xFB5F=>0x7377,
+0xFB60=>0x73BD,
+0xFB61=>0x73C9,
+0xFB62=>0x73D6,
+0xFB63=>0x73E3,
+0xFB64=>0x73D2,
+0xFB65=>0x7407,
+0xFB66=>0x73F5,
+0xFB67=>0x7426,
+0xFB68=>0x742A,
+0xFB69=>0x7429,
+0xFB6A=>0x742E,
+0xFB6B=>0x7462,
+0xFB6C=>0x7489,
+0xFB6D=>0x749F,
+0xFB6E=>0x7501,
+0xFB6F=>0x756F,
+0xFB70=>0x7682,
+0xFB71=>0x769C,
+0xFB72=>0x769E,
+0xFB73=>0x769B,
+0xFB74=>0x76A6,
+0xFB75=>0xFA17,
+0xFB76=>0x7746,
+0xFB77=>0x52AF,
+0xFB78=>0x7821,
+0xFB79=>0x784E,
+0xFB7A=>0x7864,
+0xFB7B=>0x787A,
+0xFB7C=>0x7930,
+0xFB7D=>0xFA18,
+0xFB7E=>0xFA19,
+0xFB80=>0xFA1A,
+0xFB81=>0x7994,
+0xFB82=>0xFA1B,
+0xFB83=>0x799B,
+0xFB84=>0x7AD1,
+0xFB85=>0x7AE7,
+0xFB86=>0xFA1C,
+0xFB87=>0x7AEB,
+0xFB88=>0x7B9E,
+0xFB89=>0xFA1D,
+0xFB8A=>0x7D48,
+0xFB8B=>0x7D5C,
+0xFB8C=>0x7DB7,
+0xFB8D=>0x7DA0,
+0xFB8E=>0x7DD6,
+0xFB8F=>0x7E52,
+0xFB90=>0x7F47,
+0xFB91=>0x7FA1,
+0xFB92=>0xFA1E,
+0xFB93=>0x8301,
+0xFB94=>0x8362,
+0xFB95=>0x837F,
+0xFB96=>0x83C7,
+0xFB97=>0x83F6,
+0xFB98=>0x8448,
+0xFB99=>0x84B4,
+0xFB9A=>0x8553,
+0xFB9B=>0x8559,
+0xFB9C=>0x856B,
+0xFB9D=>0xFA1F,
+0xFB9E=>0x85B0,
+0xFB9F=>0xFA20,
+0xFBA0=>0xFA21,
+0xFBA1=>0x8807,
+0xFBA2=>0x88F5,
+0xFBA3=>0x8A12,
+0xFBA4=>0x8A37,
+0xFBA5=>0x8A79,
+0xFBA6=>0x8AA7,
+0xFBA7=>0x8ABE,
+0xFBA8=>0x8ADF,
+0xFBA9=>0xFA22,
+0xFBAA=>0x8AF6,
+0xFBAB=>0x8B53,
+0xFBAC=>0x8B7F,
+0xFBAD=>0x8CF0,
+0xFBAE=>0x8CF4,
+0xFBAF=>0x8D12,
+0xFBB0=>0x8D76,
+0xFBB1=>0xFA23,
+0xFBB2=>0x8ECF,
+0xFBB3=>0xFA24,
+0xFBB4=>0xFA25,
+0xFBB5=>0x9067,
+0xFBB6=>0x90DE,
+0xFBB7=>0xFA26,
+0xFBB8=>0x9115,
+0xFBB9=>0x9127,
+0xFBBA=>0x91DA,
+0xFBBB=>0x91D7,
+0xFBBC=>0x91DE,
+0xFBBD=>0x91ED,
+0xFBBE=>0x91EE,
+0xFBBF=>0x91E4,
+0xFBC0=>0x91E5,
+0xFBC1=>0x9206,
+0xFBC2=>0x9210,
+0xFBC3=>0x920A,
+0xFBC4=>0x923A,
+0xFBC5=>0x9240,
+0xFBC6=>0x923C,
+0xFBC7=>0x924E,
+0xFBC8=>0x9259,
+0xFBC9=>0x9251,
+0xFBCA=>0x9239,
+0xFBCB=>0x9267,
+0xFBCC=>0x92A7,
+0xFBCD=>0x9277,
+0xFBCE=>0x9278,
+0xFBCF=>0x92E7,
+0xFBD0=>0x92D7,
+0xFBD1=>0x92D9,
+0xFBD2=>0x92D0,
+0xFBD3=>0xFA27,
+0xFBD4=>0x92D5,
+0xFBD5=>0x92E0,
+0xFBD6=>0x92D3,
+0xFBD7=>0x9325,
+0xFBD8=>0x9321,
+0xFBD9=>0x92FB,
+0xFBDA=>0xFA28,
+0xFBDB=>0x931E,
+0xFBDC=>0x92FF,
+0xFBDD=>0x931D,
+0xFBDE=>0x9302,
+0xFBDF=>0x9370,
+0xFBE0=>0x9357,
+0xFBE1=>0x93A4,
+0xFBE2=>0x93C6,
+0xFBE3=>0x93DE,
+0xFBE4=>0x93F8,
+0xFBE5=>0x9431,
+0xFBE6=>0x9445,
+0xFBE7=>0x9448,
+0xFBE8=>0x9592,
+0xFBE9=>0xF9DC,
+0xFBEA=>0xFA29,
+0xFBEB=>0x969D,
+0xFBEC=>0x96AF,
+0xFBED=>0x9733,
+0xFBEE=>0x973B,
+0xFBEF=>0x9743,
+0xFBF0=>0x974D,
+0xFBF1=>0x974F,
+0xFBF2=>0x9751,
+0xFBF3=>0x9755,
+0xFBF4=>0x9857,
+0xFBF5=>0x9865,
+0xFBF6=>0xFA2A,
+0xFBF7=>0xFA2B,
+0xFBF8=>0x9927,
+0xFBF9=>0xFA2C,
+0xFBFA=>0x999E,
+0xFBFB=>0x9A4E,
+0xFBFC=>0x9AD9,
+0xFC40=>0x9ADC,
+0xFC41=>0x9B75,
+0xFC42=>0x9B72,
+0xFC43=>0x9B8F,
+0xFC44=>0x9BB1,
+0xFC45=>0x9BBB,
+0xFC46=>0x9C00,
+0xFC47=>0x9D70,
+0xFC48=>0x9D6B,
+0xFC49=>0xFA2D,
+0xFC4A=>0x9E19,
+0xFC4B=>0x9ED1
+);
 ?>
\ No newline at end of file
index d231567..6e0e043 100755 (executable)
-<?php\r
-$ucs2tosjis = array(\r
-0x3000=>0x8140,\r
-0x3001=>0x8141,\r
-0x3002=>0x8142,\r
-0xFF0C=>0x8143,\r
-0xFF0E=>0x8144,\r
-0x30FB=>0x8145,\r
-0xFF1A=>0x8146,\r
-0xFF1B=>0x8147,\r
-0xFF1F=>0x8148,\r
-0xFF01=>0x8149,\r
-0x309B=>0x814A,\r
-0x309C=>0x814B,\r
-0x00B4=>0x814C,\r
-0xFF40=>0x814D,\r
-0x00A8=>0x814E,\r
-0xFF3E=>0x814F,\r
-0xFFE3=>0x8150,\r
-0xFF3F=>0x8151,\r
-0x30FD=>0x8152,\r
-0x30FE=>0x8153,\r
-0x309D=>0x8154,\r
-0x309E=>0x8155,\r
-0x3003=>0x8156,\r
-0x4EDD=>0x8157,\r
-0x3005=>0x8158,\r
-0x3006=>0x8159,\r
-0x3007=>0x815A,\r
-0x30FC=>0x815B,\r
-0x2015=>0x815C,\r
-0x2010=>0x815D,\r
-0xFF0F=>0x815E,\r
-0xFF3C=>0x815F,\r
-0xFF5E=>0x8160,\r
-0x2225=>0x8161,\r
-0xFF5C=>0x8162,\r
-0x2026=>0x8163,\r
-0x2025=>0x8164,\r
-0x2018=>0x8165,\r
-0x2019=>0x8166,\r
-0x201C=>0x8167,\r
-0x201D=>0x8168,\r
-0xFF08=>0x8169,\r
-0xFF09=>0x816A,\r
-0x3014=>0x816B,\r
-0x3015=>0x816C,\r
-0xFF3B=>0x816D,\r
-0xFF3D=>0x816E,\r
-0xFF5B=>0x816F,\r
-0xFF5D=>0x8170,\r
-0x3008=>0x8171,\r
-0x3009=>0x8172,\r
-0x300A=>0x8173,\r
-0x300B=>0x8174,\r
-0x300C=>0x8175,\r
-0x300D=>0x8176,\r
-0x300E=>0x8177,\r
-0x300F=>0x8178,\r
-0x3010=>0x8179,\r
-0x3011=>0x817A,\r
-0xFF0B=>0x817B,\r
-0xFF0D=>0x817C,\r
-0x00B1=>0x817D,\r
-0x00D7=>0x817E,\r
-0x00F7=>0x8180,\r
-0xFF1D=>0x8181,\r
-0x2260=>0x8182,\r
-0xFF1C=>0x8183,\r
-0xFF1E=>0x8184,\r
-0x2266=>0x8185,\r
-0x2267=>0x8186,\r
-0x221E=>0x8187,\r
-0x2234=>0x8188,\r
-0x2642=>0x8189,\r
-0x2640=>0x818A,\r
-0x00B0=>0x818B,\r
-0x2032=>0x818C,\r
-0x2033=>0x818D,\r
-0x2103=>0x818E,\r
-0xFFE5=>0x818F,\r
-0xFF04=>0x8190,\r
-0xFFE0=>0x8191,\r
-0xFFE1=>0x8192,\r
-0xFF05=>0x8193,\r
-0xFF03=>0x8194,\r
-0xFF06=>0x8195,\r
-0xFF0A=>0x8196,\r
-0xFF20=>0x8197,\r
-0x00A7=>0x8198,\r
-0x2606=>0x8199,\r
-0x2605=>0x819A,\r
-0x25CB=>0x819B,\r
-0x25CF=>0x819C,\r
-0x25CE=>0x819D,\r
-0x25C7=>0x819E,\r
-0x25C6=>0x819F,\r
-0x25A1=>0x81A0,\r
-0x25A0=>0x81A1,\r
-0x25B3=>0x81A2,\r
-0x25B2=>0x81A3,\r
-0x25BD=>0x81A4,\r
-0x25BC=>0x81A5,\r
-0x203B=>0x81A6,\r
-0x3012=>0x81A7,\r
-0x2192=>0x81A8,\r
-0x2190=>0x81A9,\r
-0x2191=>0x81AA,\r
-0x2193=>0x81AB,\r
-0x3013=>0x81AC,\r
-0x2208=>0x81B8,\r
-0x220B=>0x81B9,\r
-0x2286=>0x81BA,\r
-0x2287=>0x81BB,\r
-0x2282=>0x81BC,\r
-0x2283=>0x81BD,\r
-0x222A=>0x81BE,\r
-0x2229=>0x81BF,\r
-0x2227=>0x81C8,\r
-0x2228=>0x81C9,\r
-0xFFE2=>0x81CA,\r
-0x21D2=>0x81CB,\r
-0x21D4=>0x81CC,\r
-0x2200=>0x81CD,\r
-0x2203=>0x81CE,\r
-0x2220=>0x81DA,\r
-0x22A5=>0x81DB,\r
-0x2312=>0x81DC,\r
-0x2202=>0x81DD,\r
-0x2207=>0x81DE,\r
-0x2261=>0x81DF,\r
-0x2252=>0x81E0,\r
-0x226A=>0x81E1,\r
-0x226B=>0x81E2,\r
-0x221A=>0x81E3,\r
-0x223D=>0x81E4,\r
-0x221D=>0x81E5,\r
-0x2235=>0x81E6,\r
-0x222B=>0x81E7,\r
-0x222C=>0x81E8,\r
-0x212B=>0x81F0,\r
-0x2030=>0x81F1,\r
-0x266F=>0x81F2,\r
-0x266D=>0x81F3,\r
-0x266A=>0x81F4,\r
-0x2020=>0x81F5,\r
-0x2021=>0x81F6,\r
-0x00B6=>0x81F7,\r
-0x25EF=>0x81FC,\r
-0xFF10=>0x824F,\r
-0xFF11=>0x8250,\r
-0xFF12=>0x8251,\r
-0xFF13=>0x8252,\r
-0xFF14=>0x8253,\r
-0xFF15=>0x8254,\r
-0xFF16=>0x8255,\r
-0xFF17=>0x8256,\r
-0xFF18=>0x8257,\r
-0xFF19=>0x8258,\r
-0xFF21=>0x8260,\r
-0xFF22=>0x8261,\r
-0xFF23=>0x8262,\r
-0xFF24=>0x8263,\r
-0xFF25=>0x8264,\r
-0xFF26=>0x8265,\r
-0xFF27=>0x8266,\r
-0xFF28=>0x8267,\r
-0xFF29=>0x8268,\r
-0xFF2A=>0x8269,\r
-0xFF2B=>0x826A,\r
-0xFF2C=>0x826B,\r
-0xFF2D=>0x826C,\r
-0xFF2E=>0x826D,\r
-0xFF2F=>0x826E,\r
-0xFF30=>0x826F,\r
-0xFF31=>0x8270,\r
-0xFF32=>0x8271,\r
-0xFF33=>0x8272,\r
-0xFF34=>0x8273,\r
-0xFF35=>0x8274,\r
-0xFF36=>0x8275,\r
-0xFF37=>0x8276,\r
-0xFF38=>0x8277,\r
-0xFF39=>0x8278,\r
-0xFF3A=>0x8279,\r
-0xFF41=>0x8281,\r
-0xFF42=>0x8282,\r
-0xFF43=>0x8283,\r
-0xFF44=>0x8284,\r
-0xFF45=>0x8285,\r
-0xFF46=>0x8286,\r
-0xFF47=>0x8287,\r
-0xFF48=>0x8288,\r
-0xFF49=>0x8289,\r
-0xFF4A=>0x828A,\r
-0xFF4B=>0x828B,\r
-0xFF4C=>0x828C,\r
-0xFF4D=>0x828D,\r
-0xFF4E=>0x828E,\r
-0xFF4F=>0x828F,\r
-0xFF50=>0x8290,\r
-0xFF51=>0x8291,\r
-0xFF52=>0x8292,\r
-0xFF53=>0x8293,\r
-0xFF54=>0x8294,\r
-0xFF55=>0x8295,\r
-0xFF56=>0x8296,\r
-0xFF57=>0x8297,\r
-0xFF58=>0x8298,\r
-0xFF59=>0x8299,\r
-0xFF5A=>0x829A,\r
-0x3041=>0x829F,\r
-0x3042=>0x82A0,\r
-0x3043=>0x82A1,\r
-0x3044=>0x82A2,\r
-0x3045=>0x82A3,\r
-0x3046=>0x82A4,\r
-0x3047=>0x82A5,\r
-0x3048=>0x82A6,\r
-0x3049=>0x82A7,\r
-0x304A=>0x82A8,\r
-0x304B=>0x82A9,\r
-0x304C=>0x82AA,\r
-0x304D=>0x82AB,\r
-0x304E=>0x82AC,\r
-0x304F=>0x82AD,\r
-0x3050=>0x82AE,\r
-0x3051=>0x82AF,\r
-0x3052=>0x82B0,\r
-0x3053=>0x82B1,\r
-0x3054=>0x82B2,\r
-0x3055=>0x82B3,\r
-0x3056=>0x82B4,\r
-0x3057=>0x82B5,\r
-0x3058=>0x82B6,\r
-0x3059=>0x82B7,\r
-0x305A=>0x82B8,\r
-0x305B=>0x82B9,\r
-0x305C=>0x82BA,\r
-0x305D=>0x82BB,\r
-0x305E=>0x82BC,\r
-0x305F=>0x82BD,\r
-0x3060=>0x82BE,\r
-0x3061=>0x82BF,\r
-0x3062=>0x82C0,\r
-0x3063=>0x82C1,\r
-0x3064=>0x82C2,\r
-0x3065=>0x82C3,\r
-0x3066=>0x82C4,\r
-0x3067=>0x82C5,\r
-0x3068=>0x82C6,\r
-0x3069=>0x82C7,\r
-0x306A=>0x82C8,\r
-0x306B=>0x82C9,\r
-0x306C=>0x82CA,\r
-0x306D=>0x82CB,\r
-0x306E=>0x82CC,\r
-0x306F=>0x82CD,\r
-0x3070=>0x82CE,\r
-0x3071=>0x82CF,\r
-0x3072=>0x82D0,\r
-0x3073=>0x82D1,\r
-0x3074=>0x82D2,\r
-0x3075=>0x82D3,\r
-0x3076=>0x82D4,\r
-0x3077=>0x82D5,\r
-0x3078=>0x82D6,\r
-0x3079=>0x82D7,\r
-0x307A=>0x82D8,\r
-0x307B=>0x82D9,\r
-0x307C=>0x82DA,\r
-0x307D=>0x82DB,\r
-0x307E=>0x82DC,\r
-0x307F=>0x82DD,\r
-0x3080=>0x82DE,\r
-0x3081=>0x82DF,\r
-0x3082=>0x82E0,\r
-0x3083=>0x82E1,\r
-0x3084=>0x82E2,\r
-0x3085=>0x82E3,\r
-0x3086=>0x82E4,\r
-0x3087=>0x82E5,\r
-0x3088=>0x82E6,\r
-0x3089=>0x82E7,\r
-0x308A=>0x82E8,\r
-0x308B=>0x82E9,\r
-0x308C=>0x82EA,\r
-0x308D=>0x82EB,\r
-0x308E=>0x82EC,\r
-0x308F=>0x82ED,\r
-0x3090=>0x82EE,\r
-0x3091=>0x82EF,\r
-0x3092=>0x82F0,\r
-0x3093=>0x82F1,\r
-0x30A1=>0x8340,\r
-0x30A2=>0x8341,\r
-0x30A3=>0x8342,\r
-0x30A4=>0x8343,\r
-0x30A5=>0x8344,\r
-0x30A6=>0x8345,\r
-0x30A7=>0x8346,\r
-0x30A8=>0x8347,\r
-0x30A9=>0x8348,\r
-0x30AA=>0x8349,\r
-0x30AB=>0x834A,\r
-0x30AC=>0x834B,\r
-0x30AD=>0x834C,\r
-0x30AE=>0x834D,\r
-0x30AF=>0x834E,\r
-0x30B0=>0x834F,\r
-0x30B1=>0x8350,\r
-0x30B2=>0x8351,\r
-0x30B3=>0x8352,\r
-0x30B4=>0x8353,\r
-0x30B5=>0x8354,\r
-0x30B6=>0x8355,\r
-0x30B7=>0x8356,\r
-0x30B8=>0x8357,\r
-0x30B9=>0x8358,\r
-0x30BA=>0x8359,\r
-0x30BB=>0x835A,\r
-0x30BC=>0x835B,\r
-0x30BD=>0x835C,\r
-0x30BE=>0x835D,\r
-0x30BF=>0x835E,\r
-0x30C0=>0x835F,\r
-0x30C1=>0x8360,\r
-0x30C2=>0x8361,\r
-0x30C3=>0x8362,\r
-0x30C4=>0x8363,\r
-0x30C5=>0x8364,\r
-0x30C6=>0x8365,\r
-0x30C7=>0x8366,\r
-0x30C8=>0x8367,\r
-0x30C9=>0x8368,\r
-0x30CA=>0x8369,\r
-0x30CB=>0x836A,\r
-0x30CC=>0x836B,\r
-0x30CD=>0x836C,\r
-0x30CE=>0x836D,\r
-0x30CF=>0x836E,\r
-0x30D0=>0x836F,\r
-0x30D1=>0x8370,\r
-0x30D2=>0x8371,\r
-0x30D3=>0x8372,\r
-0x30D4=>0x8373,\r
-0x30D5=>0x8374,\r
-0x30D6=>0x8375,\r
-0x30D7=>0x8376,\r
-0x30D8=>0x8377,\r
-0x30D9=>0x8378,\r
-0x30DA=>0x8379,\r
-0x30DB=>0x837A,\r
-0x30DC=>0x837B,\r
-0x30DD=>0x837C,\r
-0x30DE=>0x837D,\r
-0x30DF=>0x837E,\r
-0x30E0=>0x8380,\r
-0x30E1=>0x8381,\r
-0x30E2=>0x8382,\r
-0x30E3=>0x8383,\r
-0x30E4=>0x8384,\r
-0x30E5=>0x8385,\r
-0x30E6=>0x8386,\r
-0x30E7=>0x8387,\r
-0x30E8=>0x8388,\r
-0x30E9=>0x8389,\r
-0x30EA=>0x838A,\r
-0x30EB=>0x838B,\r
-0x30EC=>0x838C,\r
-0x30ED=>0x838D,\r
-0x30EE=>0x838E,\r
-0x30EF=>0x838F,\r
-0x30F0=>0x8390,\r
-0x30F1=>0x8391,\r
-0x30F2=>0x8392,\r
-0x30F3=>0x8393,\r
-0x30F4=>0x8394,\r
-0x30F5=>0x8395,\r
-0x30F6=>0x8396,\r
-0x0391=>0x839F,\r
-0x0392=>0x83A0,\r
-0x0393=>0x83A1,\r
-0x0394=>0x83A2,\r
-0x0395=>0x83A3,\r
-0x0396=>0x83A4,\r
-0x0397=>0x83A5,\r
-0x0398=>0x83A6,\r
-0x0399=>0x83A7,\r
-0x039A=>0x83A8,\r
-0x039B=>0x83A9,\r
-0x039C=>0x83AA,\r
-0x039D=>0x83AB,\r
-0x039E=>0x83AC,\r
-0x039F=>0x83AD,\r
-0x03A0=>0x83AE,\r
-0x03A1=>0x83AF,\r
-0x03A3=>0x83B0,\r
-0x03A4=>0x83B1,\r
-0x03A5=>0x83B2,\r
-0x03A6=>0x83B3,\r
-0x03A7=>0x83B4,\r
-0x03A8=>0x83B5,\r
-0x03A9=>0x83B6,\r
-0x03B1=>0x83BF,\r
-0x03B2=>0x83C0,\r
-0x03B3=>0x83C1,\r
-0x03B4=>0x83C2,\r
-0x03B5=>0x83C3,\r
-0x03B6=>0x83C4,\r
-0x03B7=>0x83C5,\r
-0x03B8=>0x83C6,\r
-0x03B9=>0x83C7,\r
-0x03BA=>0x83C8,\r
-0x03BB=>0x83C9,\r
-0x03BC=>0x83CA,\r
-0x03BD=>0x83CB,\r
-0x03BE=>0x83CC,\r
-0x03BF=>0x83CD,\r
-0x03C0=>0x83CE,\r
-0x03C1=>0x83CF,\r
-0x03C3=>0x83D0,\r
-0x03C4=>0x83D1,\r
-0x03C5=>0x83D2,\r
-0x03C6=>0x83D3,\r
-0x03C7=>0x83D4,\r
-0x03C8=>0x83D5,\r
-0x03C9=>0x83D6,\r
-0x0410=>0x8440,\r
-0x0411=>0x8441,\r
-0x0412=>0x8442,\r
-0x0413=>0x8443,\r
-0x0414=>0x8444,\r
-0x0415=>0x8445,\r
-0x0401=>0x8446,\r
-0x0416=>0x8447,\r
-0x0417=>0x8448,\r
-0x0418=>0x8449,\r
-0x0419=>0x844A,\r
-0x041A=>0x844B,\r
-0x041B=>0x844C,\r
-0x041C=>0x844D,\r
-0x041D=>0x844E,\r
-0x041E=>0x844F,\r
-0x041F=>0x8450,\r
-0x0420=>0x8451,\r
-0x0421=>0x8452,\r
-0x0422=>0x8453,\r
-0x0423=>0x8454,\r
-0x0424=>0x8455,\r
-0x0425=>0x8456,\r
-0x0426=>0x8457,\r
-0x0427=>0x8458,\r
-0x0428=>0x8459,\r
-0x0429=>0x845A,\r
-0x042A=>0x845B,\r
-0x042B=>0x845C,\r
-0x042C=>0x845D,\r
-0x042D=>0x845E,\r
-0x042E=>0x845F,\r
-0x042F=>0x8460,\r
-0x0430=>0x8470,\r
-0x0431=>0x8471,\r
-0x0432=>0x8472,\r
-0x0433=>0x8473,\r
-0x0434=>0x8474,\r
-0x0435=>0x8475,\r
-0x0451=>0x8476,\r
-0x0436=>0x8477,\r
-0x0437=>0x8478,\r
-0x0438=>0x8479,\r
-0x0439=>0x847A,\r
-0x043A=>0x847B,\r
-0x043B=>0x847C,\r
-0x043C=>0x847D,\r
-0x043D=>0x847E,\r
-0x043E=>0x8480,\r
-0x043F=>0x8481,\r
-0x0440=>0x8482,\r
-0x0441=>0x8483,\r
-0x0442=>0x8484,\r
-0x0443=>0x8485,\r
-0x0444=>0x8486,\r
-0x0445=>0x8487,\r
-0x0446=>0x8488,\r
-0x0447=>0x8489,\r
-0x0448=>0x848A,\r
-0x0449=>0x848B,\r
-0x044A=>0x848C,\r
-0x044B=>0x848D,\r
-0x044C=>0x848E,\r
-0x044D=>0x848F,\r
-0x044E=>0x8490,\r
-0x044F=>0x8491,\r
-0x2500=>0x849F,\r
-0x2502=>0x84A0,\r
-0x250C=>0x84A1,\r
-0x2510=>0x84A2,\r
-0x2518=>0x84A3,\r
-0x2514=>0x84A4,\r
-0x251C=>0x84A5,\r
-0x252C=>0x84A6,\r
-0x2524=>0x84A7,\r
-0x2534=>0x84A8,\r
-0x253C=>0x84A9,\r
-0x2501=>0x84AA,\r
-0x2503=>0x84AB,\r
-0x250F=>0x84AC,\r
-0x2513=>0x84AD,\r
-0x251B=>0x84AE,\r
-0x2517=>0x84AF,\r
-0x2523=>0x84B0,\r
-0x2533=>0x84B1,\r
-0x252B=>0x84B2,\r
-0x253B=>0x84B3,\r
-0x254B=>0x84B4,\r
-0x2520=>0x84B5,\r
-0x252F=>0x84B6,\r
-0x2528=>0x84B7,\r
-0x2537=>0x84B8,\r
-0x253F=>0x84B9,\r
-0x251D=>0x84BA,\r
-0x2530=>0x84BB,\r
-0x2525=>0x84BC,\r
-0x2538=>0x84BD,\r
-0x2542=>0x84BE,\r
-0x2460=>0x8740,\r
-0x2461=>0x8741,\r
-0x2462=>0x8742,\r
-0x2463=>0x8743,\r
-0x2464=>0x8744,\r
-0x2465=>0x8745,\r
-0x2466=>0x8746,\r
-0x2467=>0x8747,\r
-0x2468=>0x8748,\r
-0x2469=>0x8749,\r
-0x246A=>0x874A,\r
-0x246B=>0x874B,\r
-0x246C=>0x874C,\r
-0x246D=>0x874D,\r
-0x246E=>0x874E,\r
-0x246F=>0x874F,\r
-0x2470=>0x8750,\r
-0x2471=>0x8751,\r
-0x2472=>0x8752,\r
-0x2473=>0x8753,\r
-0x2160=>0x8754,\r
-0x2161=>0x8755,\r
-0x2162=>0x8756,\r
-0x2163=>0x8757,\r
-0x2164=>0x8758,\r
-0x2165=>0x8759,\r
-0x2166=>0x875A,\r
-0x2167=>0x875B,\r
-0x2168=>0x875C,\r
-0x2169=>0x875D,\r
-0x3349=>0x875F,\r
-0x3314=>0x8760,\r
-0x3322=>0x8761,\r
-0x334D=>0x8762,\r
-0x3318=>0x8763,\r
-0x3327=>0x8764,\r
-0x3303=>0x8765,\r
-0x3336=>0x8766,\r
-0x3351=>0x8767,\r
-0x3357=>0x8768,\r
-0x330D=>0x8769,\r
-0x3326=>0x876A,\r
-0x3323=>0x876B,\r
-0x332B=>0x876C,\r
-0x334A=>0x876D,\r
-0x333B=>0x876E,\r
-0x339C=>0x876F,\r
-0x339D=>0x8770,\r
-0x339E=>0x8771,\r
-0x338E=>0x8772,\r
-0x338F=>0x8773,\r
-0x33C4=>0x8774,\r
-0x33A1=>0x8775,\r
-0x337B=>0x877E,\r
-0x301D=>0x8780,\r
-0x301F=>0x8781,\r
-0x2116=>0x8782,\r
-0x33CD=>0x8783,\r
-0x2121=>0x8784,\r
-0x32A4=>0x8785,\r
-0x32A5=>0x8786,\r
-0x32A6=>0x8787,\r
-0x32A7=>0x8788,\r
-0x32A8=>0x8789,\r
-0x3231=>0x878A,\r
-0x3232=>0x878B,\r
-0x3239=>0x878C,\r
-0x337E=>0x878D,\r
-0x337D=>0x878E,\r
-0x337C=>0x878F,\r
-0x2252=>0x8790,\r
-0x2261=>0x8791,\r
-0x222B=>0x8792,\r
-0x222E=>0x8793,\r
-0x2211=>0x8794,\r
-0x221A=>0x8795,\r
-0x22A5=>0x8796,\r
-0x2220=>0x8797,\r
-0x221F=>0x8798,\r
-0x22BF=>0x8799,\r
-0x2235=>0x879A,\r
-0x2229=>0x879B,\r
-0x222A=>0x879C,\r
-0x4E9C=>0x889F,\r
-0x5516=>0x88A0,\r
-0x5A03=>0x88A1,\r
-0x963F=>0x88A2,\r
-0x54C0=>0x88A3,\r
-0x611B=>0x88A4,\r
-0x6328=>0x88A5,\r
-0x59F6=>0x88A6,\r
-0x9022=>0x88A7,\r
-0x8475=>0x88A8,\r
-0x831C=>0x88A9,\r
-0x7A50=>0x88AA,\r
-0x60AA=>0x88AB,\r
-0x63E1=>0x88AC,\r
-0x6E25=>0x88AD,\r
-0x65ED=>0x88AE,\r
-0x8466=>0x88AF,\r
-0x82A6=>0x88B0,\r
-0x9BF5=>0x88B1,\r
-0x6893=>0x88B2,\r
-0x5727=>0x88B3,\r
-0x65A1=>0x88B4,\r
-0x6271=>0x88B5,\r
-0x5B9B=>0x88B6,\r
-0x59D0=>0x88B7,\r
-0x867B=>0x88B8,\r
-0x98F4=>0x88B9,\r
-0x7D62=>0x88BA,\r
-0x7DBE=>0x88BB,\r
-0x9B8E=>0x88BC,\r
-0x6216=>0x88BD,\r
-0x7C9F=>0x88BE,\r
-0x88B7=>0x88BF,\r
-0x5B89=>0x88C0,\r
-0x5EB5=>0x88C1,\r
-0x6309=>0x88C2,\r
-0x6697=>0x88C3,\r
-0x6848=>0x88C4,\r
-0x95C7=>0x88C5,\r
-0x978D=>0x88C6,\r
-0x674F=>0x88C7,\r
-0x4EE5=>0x88C8,\r
-0x4F0A=>0x88C9,\r
-0x4F4D=>0x88CA,\r
-0x4F9D=>0x88CB,\r
-0x5049=>0x88CC,\r
-0x56F2=>0x88CD,\r
-0x5937=>0x88CE,\r
-0x59D4=>0x88CF,\r
-0x5A01=>0x88D0,\r
-0x5C09=>0x88D1,\r
-0x60DF=>0x88D2,\r
-0x610F=>0x88D3,\r
-0x6170=>0x88D4,\r
-0x6613=>0x88D5,\r
-0x6905=>0x88D6,\r
-0x70BA=>0x88D7,\r
-0x754F=>0x88D8,\r
-0x7570=>0x88D9,\r
-0x79FB=>0x88DA,\r
-0x7DAD=>0x88DB,\r
-0x7DEF=>0x88DC,\r
-0x80C3=>0x88DD,\r
-0x840E=>0x88DE,\r
-0x8863=>0x88DF,\r
-0x8B02=>0x88E0,\r
-0x9055=>0x88E1,\r
-0x907A=>0x88E2,\r
-0x533B=>0x88E3,\r
-0x4E95=>0x88E4,\r
-0x4EA5=>0x88E5,\r
-0x57DF=>0x88E6,\r
-0x80B2=>0x88E7,\r
-0x90C1=>0x88E8,\r
-0x78EF=>0x88E9,\r
-0x4E00=>0x88EA,\r
-0x58F1=>0x88EB,\r
-0x6EA2=>0x88EC,\r
-0x9038=>0x88ED,\r
-0x7A32=>0x88EE,\r
-0x8328=>0x88EF,\r
-0x828B=>0x88F0,\r
-0x9C2F=>0x88F1,\r
-0x5141=>0x88F2,\r
-0x5370=>0x88F3,\r
-0x54BD=>0x88F4,\r
-0x54E1=>0x88F5,\r
-0x56E0=>0x88F6,\r
-0x59FB=>0x88F7,\r
-0x5F15=>0x88F8,\r
-0x98F2=>0x88F9,\r
-0x6DEB=>0x88FA,\r
-0x80E4=>0x88FB,\r
-0x852D=>0x88FC,\r
-0x9662=>0x8940,\r
-0x9670=>0x8941,\r
-0x96A0=>0x8942,\r
-0x97FB=>0x8943,\r
-0x540B=>0x8944,\r
-0x53F3=>0x8945,\r
-0x5B87=>0x8946,\r
-0x70CF=>0x8947,\r
-0x7FBD=>0x8948,\r
-0x8FC2=>0x8949,\r
-0x96E8=>0x894A,\r
-0x536F=>0x894B,\r
-0x9D5C=>0x894C,\r
-0x7ABA=>0x894D,\r
-0x4E11=>0x894E,\r
-0x7893=>0x894F,\r
-0x81FC=>0x8950,\r
-0x6E26=>0x8951,\r
-0x5618=>0x8952,\r
-0x5504=>0x8953,\r
-0x6B1D=>0x8954,\r
-0x851A=>0x8955,\r
-0x9C3B=>0x8956,\r
-0x59E5=>0x8957,\r
-0x53A9=>0x8958,\r
-0x6D66=>0x8959,\r
-0x74DC=>0x895A,\r
-0x958F=>0x895B,\r
-0x5642=>0x895C,\r
-0x4E91=>0x895D,\r
-0x904B=>0x895E,\r
-0x96F2=>0x895F,\r
-0x834F=>0x8960,\r
-0x990C=>0x8961,\r
-0x53E1=>0x8962,\r
-0x55B6=>0x8963,\r
-0x5B30=>0x8964,\r
-0x5F71=>0x8965,\r
-0x6620=>0x8966,\r
-0x66F3=>0x8967,\r
-0x6804=>0x8968,\r
-0x6C38=>0x8969,\r
-0x6CF3=>0x896A,\r
-0x6D29=>0x896B,\r
-0x745B=>0x896C,\r
-0x76C8=>0x896D,\r
-0x7A4E=>0x896E,\r
-0x9834=>0x896F,\r
-0x82F1=>0x8970,\r
-0x885B=>0x8971,\r
-0x8A60=>0x8972,\r
-0x92ED=>0x8973,\r
-0x6DB2=>0x8974,\r
-0x75AB=>0x8975,\r
-0x76CA=>0x8976,\r
-0x99C5=>0x8977,\r
-0x60A6=>0x8978,\r
-0x8B01=>0x8979,\r
-0x8D8A=>0x897A,\r
-0x95B2=>0x897B,\r
-0x698E=>0x897C,\r
-0x53AD=>0x897D,\r
-0x5186=>0x897E,\r
-0x5712=>0x8980,\r
-0x5830=>0x8981,\r
-0x5944=>0x8982,\r
-0x5BB4=>0x8983,\r
-0x5EF6=>0x8984,\r
-0x6028=>0x8985,\r
-0x63A9=>0x8986,\r
-0x63F4=>0x8987,\r
-0x6CBF=>0x8988,\r
-0x6F14=>0x8989,\r
-0x708E=>0x898A,\r
-0x7114=>0x898B,\r
-0x7159=>0x898C,\r
-0x71D5=>0x898D,\r
-0x733F=>0x898E,\r
-0x7E01=>0x898F,\r
-0x8276=>0x8990,\r
-0x82D1=>0x8991,\r
-0x8597=>0x8992,\r
-0x9060=>0x8993,\r
-0x925B=>0x8994,\r
-0x9D1B=>0x8995,\r
-0x5869=>0x8996,\r
-0x65BC=>0x8997,\r
-0x6C5A=>0x8998,\r
-0x7525=>0x8999,\r
-0x51F9=>0x899A,\r
-0x592E=>0x899B,\r
-0x5965=>0x899C,\r
-0x5F80=>0x899D,\r
-0x5FDC=>0x899E,\r
-0x62BC=>0x899F,\r
-0x65FA=>0x89A0,\r
-0x6A2A=>0x89A1,\r
-0x6B27=>0x89A2,\r
-0x6BB4=>0x89A3,\r
-0x738B=>0x89A4,\r
-0x7FC1=>0x89A5,\r
-0x8956=>0x89A6,\r
-0x9D2C=>0x89A7,\r
-0x9D0E=>0x89A8,\r
-0x9EC4=>0x89A9,\r
-0x5CA1=>0x89AA,\r
-0x6C96=>0x89AB,\r
-0x837B=>0x89AC,\r
-0x5104=>0x89AD,\r
-0x5C4B=>0x89AE,\r
-0x61B6=>0x89AF,\r
-0x81C6=>0x89B0,\r
-0x6876=>0x89B1,\r
-0x7261=>0x89B2,\r
-0x4E59=>0x89B3,\r
-0x4FFA=>0x89B4,\r
-0x5378=>0x89B5,\r
-0x6069=>0x89B6,\r
-0x6E29=>0x89B7,\r
-0x7A4F=>0x89B8,\r
-0x97F3=>0x89B9,\r
-0x4E0B=>0x89BA,\r
-0x5316=>0x89BB,\r
-0x4EEE=>0x89BC,\r
-0x4F55=>0x89BD,\r
-0x4F3D=>0x89BE,\r
-0x4FA1=>0x89BF,\r
-0x4F73=>0x89C0,\r
-0x52A0=>0x89C1,\r
-0x53EF=>0x89C2,\r
-0x5609=>0x89C3,\r
-0x590F=>0x89C4,\r
-0x5AC1=>0x89C5,\r
-0x5BB6=>0x89C6,\r
-0x5BE1=>0x89C7,\r
-0x79D1=>0x89C8,\r
-0x6687=>0x89C9,\r
-0x679C=>0x89CA,\r
-0x67B6=>0x89CB,\r
-0x6B4C=>0x89CC,\r
-0x6CB3=>0x89CD,\r
-0x706B=>0x89CE,\r
-0x73C2=>0x89CF,\r
-0x798D=>0x89D0,\r
-0x79BE=>0x89D1,\r
-0x7A3C=>0x89D2,\r
-0x7B87=>0x89D3,\r
-0x82B1=>0x89D4,\r
-0x82DB=>0x89D5,\r
-0x8304=>0x89D6,\r
-0x8377=>0x89D7,\r
-0x83EF=>0x89D8,\r
-0x83D3=>0x89D9,\r
-0x8766=>0x89DA,\r
-0x8AB2=>0x89DB,\r
-0x5629=>0x89DC,\r
-0x8CA8=>0x89DD,\r
-0x8FE6=>0x89DE,\r
-0x904E=>0x89DF,\r
-0x971E=>0x89E0,\r
-0x868A=>0x89E1,\r
-0x4FC4=>0x89E2,\r
-0x5CE8=>0x89E3,\r
-0x6211=>0x89E4,\r
-0x7259=>0x89E5,\r
-0x753B=>0x89E6,\r
-0x81E5=>0x89E7,\r
-0x82BD=>0x89E8,\r
-0x86FE=>0x89E9,\r
-0x8CC0=>0x89EA,\r
-0x96C5=>0x89EB,\r
-0x9913=>0x89EC,\r
-0x99D5=>0x89ED,\r
-0x4ECB=>0x89EE,\r
-0x4F1A=>0x89EF,\r
-0x89E3=>0x89F0,\r
-0x56DE=>0x89F1,\r
-0x584A=>0x89F2,\r
-0x58CA=>0x89F3,\r
-0x5EFB=>0x89F4,\r
-0x5FEB=>0x89F5,\r
-0x602A=>0x89F6,\r
-0x6094=>0x89F7,\r
-0x6062=>0x89F8,\r
-0x61D0=>0x89F9,\r
-0x6212=>0x89FA,\r
-0x62D0=>0x89FB,\r
-0x6539=>0x89FC,\r
-0x9B41=>0x8A40,\r
-0x6666=>0x8A41,\r
-0x68B0=>0x8A42,\r
-0x6D77=>0x8A43,\r
-0x7070=>0x8A44,\r
-0x754C=>0x8A45,\r
-0x7686=>0x8A46,\r
-0x7D75=>0x8A47,\r
-0x82A5=>0x8A48,\r
-0x87F9=>0x8A49,\r
-0x958B=>0x8A4A,\r
-0x968E=>0x8A4B,\r
-0x8C9D=>0x8A4C,\r
-0x51F1=>0x8A4D,\r
-0x52BE=>0x8A4E,\r
-0x5916=>0x8A4F,\r
-0x54B3=>0x8A50,\r
-0x5BB3=>0x8A51,\r
-0x5D16=>0x8A52,\r
-0x6168=>0x8A53,\r
-0x6982=>0x8A54,\r
-0x6DAF=>0x8A55,\r
-0x788D=>0x8A56,\r
-0x84CB=>0x8A57,\r
-0x8857=>0x8A58,\r
-0x8A72=>0x8A59,\r
-0x93A7=>0x8A5A,\r
-0x9AB8=>0x8A5B,\r
-0x6D6C=>0x8A5C,\r
-0x99A8=>0x8A5D,\r
-0x86D9=>0x8A5E,\r
-0x57A3=>0x8A5F,\r
-0x67FF=>0x8A60,\r
-0x86CE=>0x8A61,\r
-0x920E=>0x8A62,\r
-0x5283=>0x8A63,\r
-0x5687=>0x8A64,\r
-0x5404=>0x8A65,\r
-0x5ED3=>0x8A66,\r
-0x62E1=>0x8A67,\r
-0x64B9=>0x8A68,\r
-0x683C=>0x8A69,\r
-0x6838=>0x8A6A,\r
-0x6BBB=>0x8A6B,\r
-0x7372=>0x8A6C,\r
-0x78BA=>0x8A6D,\r
-0x7A6B=>0x8A6E,\r
-0x899A=>0x8A6F,\r
-0x89D2=>0x8A70,\r
-0x8D6B=>0x8A71,\r
-0x8F03=>0x8A72,\r
-0x90ED=>0x8A73,\r
-0x95A3=>0x8A74,\r
-0x9694=>0x8A75,\r
-0x9769=>0x8A76,\r
-0x5B66=>0x8A77,\r
-0x5CB3=>0x8A78,\r
-0x697D=>0x8A79,\r
-0x984D=>0x8A7A,\r
-0x984E=>0x8A7B,\r
-0x639B=>0x8A7C,\r
-0x7B20=>0x8A7D,\r
-0x6A2B=>0x8A7E,\r
-0x6A7F=>0x8A80,\r
-0x68B6=>0x8A81,\r
-0x9C0D=>0x8A82,\r
-0x6F5F=>0x8A83,\r
-0x5272=>0x8A84,\r
-0x559D=>0x8A85,\r
-0x6070=>0x8A86,\r
-0x62EC=>0x8A87,\r
-0x6D3B=>0x8A88,\r
-0x6E07=>0x8A89,\r
-0x6ED1=>0x8A8A,\r
-0x845B=>0x8A8B,\r
-0x8910=>0x8A8C,\r
-0x8F44=>0x8A8D,\r
-0x4E14=>0x8A8E,\r
-0x9C39=>0x8A8F,\r
-0x53F6=>0x8A90,\r
-0x691B=>0x8A91,\r
-0x6A3A=>0x8A92,\r
-0x9784=>0x8A93,\r
-0x682A=>0x8A94,\r
-0x515C=>0x8A95,\r
-0x7AC3=>0x8A96,\r
-0x84B2=>0x8A97,\r
-0x91DC=>0x8A98,\r
-0x938C=>0x8A99,\r
-0x565B=>0x8A9A,\r
-0x9D28=>0x8A9B,\r
-0x6822=>0x8A9C,\r
-0x8305=>0x8A9D,\r
-0x8431=>0x8A9E,\r
-0x7CA5=>0x8A9F,\r
-0x5208=>0x8AA0,\r
-0x82C5=>0x8AA1,\r
-0x74E6=>0x8AA2,\r
-0x4E7E=>0x8AA3,\r
-0x4F83=>0x8AA4,\r
-0x51A0=>0x8AA5,\r
-0x5BD2=>0x8AA6,\r
-0x520A=>0x8AA7,\r
-0x52D8=>0x8AA8,\r
-0x52E7=>0x8AA9,\r
-0x5DFB=>0x8AAA,\r
-0x559A=>0x8AAB,\r
-0x582A=>0x8AAC,\r
-0x59E6=>0x8AAD,\r
-0x5B8C=>0x8AAE,\r
-0x5B98=>0x8AAF,\r
-0x5BDB=>0x8AB0,\r
-0x5E72=>0x8AB1,\r
-0x5E79=>0x8AB2,\r
-0x60A3=>0x8AB3,\r
-0x611F=>0x8AB4,\r
-0x6163=>0x8AB5,\r
-0x61BE=>0x8AB6,\r
-0x63DB=>0x8AB7,\r
-0x6562=>0x8AB8,\r
-0x67D1=>0x8AB9,\r
-0x6853=>0x8ABA,\r
-0x68FA=>0x8ABB,\r
-0x6B3E=>0x8ABC,\r
-0x6B53=>0x8ABD,\r
-0x6C57=>0x8ABE,\r
-0x6F22=>0x8ABF,\r
-0x6F97=>0x8AC0,\r
-0x6F45=>0x8AC1,\r
-0x74B0=>0x8AC2,\r
-0x7518=>0x8AC3,\r
-0x76E3=>0x8AC4,\r
-0x770B=>0x8AC5,\r
-0x7AFF=>0x8AC6,\r
-0x7BA1=>0x8AC7,\r
-0x7C21=>0x8AC8,\r
-0x7DE9=>0x8AC9,\r
-0x7F36=>0x8ACA,\r
-0x7FF0=>0x8ACB,\r
-0x809D=>0x8ACC,\r
-0x8266=>0x8ACD,\r
-0x839E=>0x8ACE,\r
-0x89B3=>0x8ACF,\r
-0x8ACC=>0x8AD0,\r
-0x8CAB=>0x8AD1,\r
-0x9084=>0x8AD2,\r
-0x9451=>0x8AD3,\r
-0x9593=>0x8AD4,\r
-0x9591=>0x8AD5,\r
-0x95A2=>0x8AD6,\r
-0x9665=>0x8AD7,\r
-0x97D3=>0x8AD8,\r
-0x9928=>0x8AD9,\r
-0x8218=>0x8ADA,\r
-0x4E38=>0x8ADB,\r
-0x542B=>0x8ADC,\r
-0x5CB8=>0x8ADD,\r
-0x5DCC=>0x8ADE,\r
-0x73A9=>0x8ADF,\r
-0x764C=>0x8AE0,\r
-0x773C=>0x8AE1,\r
-0x5CA9=>0x8AE2,\r
-0x7FEB=>0x8AE3,\r
-0x8D0B=>0x8AE4,\r
-0x96C1=>0x8AE5,\r
-0x9811=>0x8AE6,\r
-0x9854=>0x8AE7,\r
-0x9858=>0x8AE8,\r
-0x4F01=>0x8AE9,\r
-0x4F0E=>0x8AEA,\r
-0x5371=>0x8AEB,\r
-0x559C=>0x8AEC,\r
-0x5668=>0x8AED,\r
-0x57FA=>0x8AEE,\r
-0x5947=>0x8AEF,\r
-0x5B09=>0x8AF0,\r
-0x5BC4=>0x8AF1,\r
-0x5C90=>0x8AF2,\r
-0x5E0C=>0x8AF3,\r
-0x5E7E=>0x8AF4,\r
-0x5FCC=>0x8AF5,\r
-0x63EE=>0x8AF6,\r
-0x673A=>0x8AF7,\r
-0x65D7=>0x8AF8,\r
-0x65E2=>0x8AF9,\r
-0x671F=>0x8AFA,\r
-0x68CB=>0x8AFB,\r
-0x68C4=>0x8AFC,\r
-0x6A5F=>0x8B40,\r
-0x5E30=>0x8B41,\r
-0x6BC5=>0x8B42,\r
-0x6C17=>0x8B43,\r
-0x6C7D=>0x8B44,\r
-0x757F=>0x8B45,\r
-0x7948=>0x8B46,\r
-0x5B63=>0x8B47,\r
-0x7A00=>0x8B48,\r
-0x7D00=>0x8B49,\r
-0x5FBD=>0x8B4A,\r
-0x898F=>0x8B4B,\r
-0x8A18=>0x8B4C,\r
-0x8CB4=>0x8B4D,\r
-0x8D77=>0x8B4E,\r
-0x8ECC=>0x8B4F,\r
-0x8F1D=>0x8B50,\r
-0x98E2=>0x8B51,\r
-0x9A0E=>0x8B52,\r
-0x9B3C=>0x8B53,\r
-0x4E80=>0x8B54,\r
-0x507D=>0x8B55,\r
-0x5100=>0x8B56,\r
-0x5993=>0x8B57,\r
-0x5B9C=>0x8B58,\r
-0x622F=>0x8B59,\r
-0x6280=>0x8B5A,\r
-0x64EC=>0x8B5B,\r
-0x6B3A=>0x8B5C,\r
-0x72A0=>0x8B5D,\r
-0x7591=>0x8B5E,\r
-0x7947=>0x8B5F,\r
-0x7FA9=>0x8B60,\r
-0x87FB=>0x8B61,\r
-0x8ABC=>0x8B62,\r
-0x8B70=>0x8B63,\r
-0x63AC=>0x8B64,\r
-0x83CA=>0x8B65,\r
-0x97A0=>0x8B66,\r
-0x5409=>0x8B67,\r
-0x5403=>0x8B68,\r
-0x55AB=>0x8B69,\r
-0x6854=>0x8B6A,\r
-0x6A58=>0x8B6B,\r
-0x8A70=>0x8B6C,\r
-0x7827=>0x8B6D,\r
-0x6775=>0x8B6E,\r
-0x9ECD=>0x8B6F,\r
-0x5374=>0x8B70,\r
-0x5BA2=>0x8B71,\r
-0x811A=>0x8B72,\r
-0x8650=>0x8B73,\r
-0x9006=>0x8B74,\r
-0x4E18=>0x8B75,\r
-0x4E45=>0x8B76,\r
-0x4EC7=>0x8B77,\r
-0x4F11=>0x8B78,\r
-0x53CA=>0x8B79,\r
-0x5438=>0x8B7A,\r
-0x5BAE=>0x8B7B,\r
-0x5F13=>0x8B7C,\r
-0x6025=>0x8B7D,\r
-0x6551=>0x8B7E,\r
-0x673D=>0x8B80,\r
-0x6C42=>0x8B81,\r
-0x6C72=>0x8B82,\r
-0x6CE3=>0x8B83,\r
-0x7078=>0x8B84,\r
-0x7403=>0x8B85,\r
-0x7A76=>0x8B86,\r
-0x7AAE=>0x8B87,\r
-0x7B08=>0x8B88,\r
-0x7D1A=>0x8B89,\r
-0x7CFE=>0x8B8A,\r
-0x7D66=>0x8B8B,\r
-0x65E7=>0x8B8C,\r
-0x725B=>0x8B8D,\r
-0x53BB=>0x8B8E,\r
-0x5C45=>0x8B8F,\r
-0x5DE8=>0x8B90,\r
-0x62D2=>0x8B91,\r
-0x62E0=>0x8B92,\r
-0x6319=>0x8B93,\r
-0x6E20=>0x8B94,\r
-0x865A=>0x8B95,\r
-0x8A31=>0x8B96,\r
-0x8DDD=>0x8B97,\r
-0x92F8=>0x8B98,\r
-0x6F01=>0x8B99,\r
-0x79A6=>0x8B9A,\r
-0x9B5A=>0x8B9B,\r
-0x4EA8=>0x8B9C,\r
-0x4EAB=>0x8B9D,\r
-0x4EAC=>0x8B9E,\r
-0x4F9B=>0x8B9F,\r
-0x4FA0=>0x8BA0,\r
-0x50D1=>0x8BA1,\r
-0x5147=>0x8BA2,\r
-0x7AF6=>0x8BA3,\r
-0x5171=>0x8BA4,\r
-0x51F6=>0x8BA5,\r
-0x5354=>0x8BA6,\r
-0x5321=>0x8BA7,\r
-0x537F=>0x8BA8,\r
-0x53EB=>0x8BA9,\r
-0x55AC=>0x8BAA,\r
-0x5883=>0x8BAB,\r
-0x5CE1=>0x8BAC,\r
-0x5F37=>0x8BAD,\r
-0x5F4A=>0x8BAE,\r
-0x602F=>0x8BAF,\r
-0x6050=>0x8BB0,\r
-0x606D=>0x8BB1,\r
-0x631F=>0x8BB2,\r
-0x6559=>0x8BB3,\r
-0x6A4B=>0x8BB4,\r
-0x6CC1=>0x8BB5,\r
-0x72C2=>0x8BB6,\r
-0x72ED=>0x8BB7,\r
-0x77EF=>0x8BB8,\r
-0x80F8=>0x8BB9,\r
-0x8105=>0x8BBA,\r
-0x8208=>0x8BBB,\r
-0x854E=>0x8BBC,\r
-0x90F7=>0x8BBD,\r
-0x93E1=>0x8BBE,\r
-0x97FF=>0x8BBF,\r
-0x9957=>0x8BC0,\r
-0x9A5A=>0x8BC1,\r
-0x4EF0=>0x8BC2,\r
-0x51DD=>0x8BC3,\r
-0x5C2D=>0x8BC4,\r
-0x6681=>0x8BC5,\r
-0x696D=>0x8BC6,\r
-0x5C40=>0x8BC7,\r
-0x66F2=>0x8BC8,\r
-0x6975=>0x8BC9,\r
-0x7389=>0x8BCA,\r
-0x6850=>0x8BCB,\r
-0x7C81=>0x8BCC,\r
-0x50C5=>0x8BCD,\r
-0x52E4=>0x8BCE,\r
-0x5747=>0x8BCF,\r
-0x5DFE=>0x8BD0,\r
-0x9326=>0x8BD1,\r
-0x65A4=>0x8BD2,\r
-0x6B23=>0x8BD3,\r
-0x6B3D=>0x8BD4,\r
-0x7434=>0x8BD5,\r
-0x7981=>0x8BD6,\r
-0x79BD=>0x8BD7,\r
-0x7B4B=>0x8BD8,\r
-0x7DCA=>0x8BD9,\r
-0x82B9=>0x8BDA,\r
-0x83CC=>0x8BDB,\r
-0x887F=>0x8BDC,\r
-0x895F=>0x8BDD,\r
-0x8B39=>0x8BDE,\r
-0x8FD1=>0x8BDF,\r
-0x91D1=>0x8BE0,\r
-0x541F=>0x8BE1,\r
-0x9280=>0x8BE2,\r
-0x4E5D=>0x8BE3,\r
-0x5036=>0x8BE4,\r
-0x53E5=>0x8BE5,\r
-0x533A=>0x8BE6,\r
-0x72D7=>0x8BE7,\r
-0x7396=>0x8BE8,\r
-0x77E9=>0x8BE9,\r
-0x82E6=>0x8BEA,\r
-0x8EAF=>0x8BEB,\r
-0x99C6=>0x8BEC,\r
-0x99C8=>0x8BED,\r
-0x99D2=>0x8BEE,\r
-0x5177=>0x8BEF,\r
-0x611A=>0x8BF0,\r
-0x865E=>0x8BF1,\r
-0x55B0=>0x8BF2,\r
-0x7A7A=>0x8BF3,\r
-0x5076=>0x8BF4,\r
-0x5BD3=>0x8BF5,\r
-0x9047=>0x8BF6,\r
-0x9685=>0x8BF7,\r
-0x4E32=>0x8BF8,\r
-0x6ADB=>0x8BF9,\r
-0x91E7=>0x8BFA,\r
-0x5C51=>0x8BFB,\r
-0x5C48=>0x8BFC,\r
-0x6398=>0x8C40,\r
-0x7A9F=>0x8C41,\r
-0x6C93=>0x8C42,\r
-0x9774=>0x8C43,\r
-0x8F61=>0x8C44,\r
-0x7AAA=>0x8C45,\r
-0x718A=>0x8C46,\r
-0x9688=>0x8C47,\r
-0x7C82=>0x8C48,\r
-0x6817=>0x8C49,\r
-0x7E70=>0x8C4A,\r
-0x6851=>0x8C4B,\r
-0x936C=>0x8C4C,\r
-0x52F2=>0x8C4D,\r
-0x541B=>0x8C4E,\r
-0x85AB=>0x8C4F,\r
-0x8A13=>0x8C50,\r
-0x7FA4=>0x8C51,\r
-0x8ECD=>0x8C52,\r
-0x90E1=>0x8C53,\r
-0x5366=>0x8C54,\r
-0x8888=>0x8C55,\r
-0x7941=>0x8C56,\r
-0x4FC2=>0x8C57,\r
-0x50BE=>0x8C58,\r
-0x5211=>0x8C59,\r
-0x5144=>0x8C5A,\r
-0x5553=>0x8C5B,\r
-0x572D=>0x8C5C,\r
-0x73EA=>0x8C5D,\r
-0x578B=>0x8C5E,\r
-0x5951=>0x8C5F,\r
-0x5F62=>0x8C60,\r
-0x5F84=>0x8C61,\r
-0x6075=>0x8C62,\r
-0x6176=>0x8C63,\r
-0x6167=>0x8C64,\r
-0x61A9=>0x8C65,\r
-0x63B2=>0x8C66,\r
-0x643A=>0x8C67,\r
-0x656C=>0x8C68,\r
-0x666F=>0x8C69,\r
-0x6842=>0x8C6A,\r
-0x6E13=>0x8C6B,\r
-0x7566=>0x8C6C,\r
-0x7A3D=>0x8C6D,\r
-0x7CFB=>0x8C6E,\r
-0x7D4C=>0x8C6F,\r
-0x7D99=>0x8C70,\r
-0x7E4B=>0x8C71,\r
-0x7F6B=>0x8C72,\r
-0x830E=>0x8C73,\r
-0x834A=>0x8C74,\r
-0x86CD=>0x8C75,\r
-0x8A08=>0x8C76,\r
-0x8A63=>0x8C77,\r
-0x8B66=>0x8C78,\r
-0x8EFD=>0x8C79,\r
-0x981A=>0x8C7A,\r
-0x9D8F=>0x8C7B,\r
-0x82B8=>0x8C7C,\r
-0x8FCE=>0x8C7D,\r
-0x9BE8=>0x8C7E,\r
-0x5287=>0x8C80,\r
-0x621F=>0x8C81,\r
-0x6483=>0x8C82,\r
-0x6FC0=>0x8C83,\r
-0x9699=>0x8C84,\r
-0x6841=>0x8C85,\r
-0x5091=>0x8C86,\r
-0x6B20=>0x8C87,\r
-0x6C7A=>0x8C88,\r
-0x6F54=>0x8C89,\r
-0x7A74=>0x8C8A,\r
-0x7D50=>0x8C8B,\r
-0x8840=>0x8C8C,\r
-0x8A23=>0x8C8D,\r
-0x6708=>0x8C8E,\r
-0x4EF6=>0x8C8F,\r
-0x5039=>0x8C90,\r
-0x5026=>0x8C91,\r
-0x5065=>0x8C92,\r
-0x517C=>0x8C93,\r
-0x5238=>0x8C94,\r
-0x5263=>0x8C95,\r
-0x55A7=>0x8C96,\r
-0x570F=>0x8C97,\r
-0x5805=>0x8C98,\r
-0x5ACC=>0x8C99,\r
-0x5EFA=>0x8C9A,\r
-0x61B2=>0x8C9B,\r
-0x61F8=>0x8C9C,\r
-0x62F3=>0x8C9D,\r
-0x6372=>0x8C9E,\r
-0x691C=>0x8C9F,\r
-0x6A29=>0x8CA0,\r
-0x727D=>0x8CA1,\r
-0x72AC=>0x8CA2,\r
-0x732E=>0x8CA3,\r
-0x7814=>0x8CA4,\r
-0x786F=>0x8CA5,\r
-0x7D79=>0x8CA6,\r
-0x770C=>0x8CA7,\r
-0x80A9=>0x8CA8,\r
-0x898B=>0x8CA9,\r
-0x8B19=>0x8CAA,\r
-0x8CE2=>0x8CAB,\r
-0x8ED2=>0x8CAC,\r
-0x9063=>0x8CAD,\r
-0x9375=>0x8CAE,\r
-0x967A=>0x8CAF,\r
-0x9855=>0x8CB0,\r
-0x9A13=>0x8CB1,\r
-0x9E78=>0x8CB2,\r
-0x5143=>0x8CB3,\r
-0x539F=>0x8CB4,\r
-0x53B3=>0x8CB5,\r
-0x5E7B=>0x8CB6,\r
-0x5F26=>0x8CB7,\r
-0x6E1B=>0x8CB8,\r
-0x6E90=>0x8CB9,\r
-0x7384=>0x8CBA,\r
-0x73FE=>0x8CBB,\r
-0x7D43=>0x8CBC,\r
-0x8237=>0x8CBD,\r
-0x8A00=>0x8CBE,\r
-0x8AFA=>0x8CBF,\r
-0x9650=>0x8CC0,\r
-0x4E4E=>0x8CC1,\r
-0x500B=>0x8CC2,\r
-0x53E4=>0x8CC3,\r
-0x547C=>0x8CC4,\r
-0x56FA=>0x8CC5,\r
-0x59D1=>0x8CC6,\r
-0x5B64=>0x8CC7,\r
-0x5DF1=>0x8CC8,\r
-0x5EAB=>0x8CC9,\r
-0x5F27=>0x8CCA,\r
-0x6238=>0x8CCB,\r
-0x6545=>0x8CCC,\r
-0x67AF=>0x8CCD,\r
-0x6E56=>0x8CCE,\r
-0x72D0=>0x8CCF,\r
-0x7CCA=>0x8CD0,\r
-0x88B4=>0x8CD1,\r
-0x80A1=>0x8CD2,\r
-0x80E1=>0x8CD3,\r
-0x83F0=>0x8CD4,\r
-0x864E=>0x8CD5,\r
-0x8A87=>0x8CD6,\r
-0x8DE8=>0x8CD7,\r
-0x9237=>0x8CD8,\r
-0x96C7=>0x8CD9,\r
-0x9867=>0x8CDA,\r
-0x9F13=>0x8CDB,\r
-0x4E94=>0x8CDC,\r
-0x4E92=>0x8CDD,\r
-0x4F0D=>0x8CDE,\r
-0x5348=>0x8CDF,\r
-0x5449=>0x8CE0,\r
-0x543E=>0x8CE1,\r
-0x5A2F=>0x8CE2,\r
-0x5F8C=>0x8CE3,\r
-0x5FA1=>0x8CE4,\r
-0x609F=>0x8CE5,\r
-0x68A7=>0x8CE6,\r
-0x6A8E=>0x8CE7,\r
-0x745A=>0x8CE8,\r
-0x7881=>0x8CE9,\r
-0x8A9E=>0x8CEA,\r
-0x8AA4=>0x8CEB,\r
-0x8B77=>0x8CEC,\r
-0x9190=>0x8CED,\r
-0x4E5E=>0x8CEE,\r
-0x9BC9=>0x8CEF,\r
-0x4EA4=>0x8CF0,\r
-0x4F7C=>0x8CF1,\r
-0x4FAF=>0x8CF2,\r
-0x5019=>0x8CF3,\r
-0x5016=>0x8CF4,\r
-0x5149=>0x8CF5,\r
-0x516C=>0x8CF6,\r
-0x529F=>0x8CF7,\r
-0x52B9=>0x8CF8,\r
-0x52FE=>0x8CF9,\r
-0x539A=>0x8CFA,\r
-0x53E3=>0x8CFB,\r
-0x5411=>0x8CFC,\r
-0x540E=>0x8D40,\r
-0x5589=>0x8D41,\r
-0x5751=>0x8D42,\r
-0x57A2=>0x8D43,\r
-0x597D=>0x8D44,\r
-0x5B54=>0x8D45,\r
-0x5B5D=>0x8D46,\r
-0x5B8F=>0x8D47,\r
-0x5DE5=>0x8D48,\r
-0x5DE7=>0x8D49,\r
-0x5DF7=>0x8D4A,\r
-0x5E78=>0x8D4B,\r
-0x5E83=>0x8D4C,\r
-0x5E9A=>0x8D4D,\r
-0x5EB7=>0x8D4E,\r
-0x5F18=>0x8D4F,\r
-0x6052=>0x8D50,\r
-0x614C=>0x8D51,\r
-0x6297=>0x8D52,\r
-0x62D8=>0x8D53,\r
-0x63A7=>0x8D54,\r
-0x653B=>0x8D55,\r
-0x6602=>0x8D56,\r
-0x6643=>0x8D57,\r
-0x66F4=>0x8D58,\r
-0x676D=>0x8D59,\r
-0x6821=>0x8D5A,\r
-0x6897=>0x8D5B,\r
-0x69CB=>0x8D5C,\r
-0x6C5F=>0x8D5D,\r
-0x6D2A=>0x8D5E,\r
-0x6D69=>0x8D5F,\r
-0x6E2F=>0x8D60,\r
-0x6E9D=>0x8D61,\r
-0x7532=>0x8D62,\r
-0x7687=>0x8D63,\r
-0x786C=>0x8D64,\r
-0x7A3F=>0x8D65,\r
-0x7CE0=>0x8D66,\r
-0x7D05=>0x8D67,\r
-0x7D18=>0x8D68,\r
-0x7D5E=>0x8D69,\r
-0x7DB1=>0x8D6A,\r
-0x8015=>0x8D6B,\r
-0x8003=>0x8D6C,\r
-0x80AF=>0x8D6D,\r
-0x80B1=>0x8D6E,\r
-0x8154=>0x8D6F,\r
-0x818F=>0x8D70,\r
-0x822A=>0x8D71,\r
-0x8352=>0x8D72,\r
-0x884C=>0x8D73,\r
-0x8861=>0x8D74,\r
-0x8B1B=>0x8D75,\r
-0x8CA2=>0x8D76,\r
-0x8CFC=>0x8D77,\r
-0x90CA=>0x8D78,\r
-0x9175=>0x8D79,\r
-0x9271=>0x8D7A,\r
-0x783F=>0x8D7B,\r
-0x92FC=>0x8D7C,\r
-0x95A4=>0x8D7D,\r
-0x964D=>0x8D7E,\r
-0x9805=>0x8D80,\r
-0x9999=>0x8D81,\r
-0x9AD8=>0x8D82,\r
-0x9D3B=>0x8D83,\r
-0x525B=>0x8D84,\r
-0x52AB=>0x8D85,\r
-0x53F7=>0x8D86,\r
-0x5408=>0x8D87,\r
-0x58D5=>0x8D88,\r
-0x62F7=>0x8D89,\r
-0x6FE0=>0x8D8A,\r
-0x8C6A=>0x8D8B,\r
-0x8F5F=>0x8D8C,\r
-0x9EB9=>0x8D8D,\r
-0x514B=>0x8D8E,\r
-0x523B=>0x8D8F,\r
-0x544A=>0x8D90,\r
-0x56FD=>0x8D91,\r
-0x7A40=>0x8D92,\r
-0x9177=>0x8D93,\r
-0x9D60=>0x8D94,\r
-0x9ED2=>0x8D95,\r
-0x7344=>0x8D96,\r
-0x6F09=>0x8D97,\r
-0x8170=>0x8D98,\r
-0x7511=>0x8D99,\r
-0x5FFD=>0x8D9A,\r
-0x60DA=>0x8D9B,\r
-0x9AA8=>0x8D9C,\r
-0x72DB=>0x8D9D,\r
-0x8FBC=>0x8D9E,\r
-0x6B64=>0x8D9F,\r
-0x9803=>0x8DA0,\r
-0x4ECA=>0x8DA1,\r
-0x56F0=>0x8DA2,\r
-0x5764=>0x8DA3,\r
-0x58BE=>0x8DA4,\r
-0x5A5A=>0x8DA5,\r
-0x6068=>0x8DA6,\r
-0x61C7=>0x8DA7,\r
-0x660F=>0x8DA8,\r
-0x6606=>0x8DA9,\r
-0x6839=>0x8DAA,\r
-0x68B1=>0x8DAB,\r
-0x6DF7=>0x8DAC,\r
-0x75D5=>0x8DAD,\r
-0x7D3A=>0x8DAE,\r
-0x826E=>0x8DAF,\r
-0x9B42=>0x8DB0,\r
-0x4E9B=>0x8DB1,\r
-0x4F50=>0x8DB2,\r
-0x53C9=>0x8DB3,\r
-0x5506=>0x8DB4,\r
-0x5D6F=>0x8DB5,\r
-0x5DE6=>0x8DB6,\r
-0x5DEE=>0x8DB7,\r
-0x67FB=>0x8DB8,\r
-0x6C99=>0x8DB9,\r
-0x7473=>0x8DBA,\r
-0x7802=>0x8DBB,\r
-0x8A50=>0x8DBC,\r
-0x9396=>0x8DBD,\r
-0x88DF=>0x8DBE,\r
-0x5750=>0x8DBF,\r
-0x5EA7=>0x8DC0,\r
-0x632B=>0x8DC1,\r
-0x50B5=>0x8DC2,\r
-0x50AC=>0x8DC3,\r
-0x518D=>0x8DC4,\r
-0x6700=>0x8DC5,\r
-0x54C9=>0x8DC6,\r
-0x585E=>0x8DC7,\r
-0x59BB=>0x8DC8,\r
-0x5BB0=>0x8DC9,\r
-0x5F69=>0x8DCA,\r
-0x624D=>0x8DCB,\r
-0x63A1=>0x8DCC,\r
-0x683D=>0x8DCD,\r
-0x6B73=>0x8DCE,\r
-0x6E08=>0x8DCF,\r
-0x707D=>0x8DD0,\r
-0x91C7=>0x8DD1,\r
-0x7280=>0x8DD2,\r
-0x7815=>0x8DD3,\r
-0x7826=>0x8DD4,\r
-0x796D=>0x8DD5,\r
-0x658E=>0x8DD6,\r
-0x7D30=>0x8DD7,\r
-0x83DC=>0x8DD8,\r
-0x88C1=>0x8DD9,\r
-0x8F09=>0x8DDA,\r
-0x969B=>0x8DDB,\r
-0x5264=>0x8DDC,\r
-0x5728=>0x8DDD,\r
-0x6750=>0x8DDE,\r
-0x7F6A=>0x8DDF,\r
-0x8CA1=>0x8DE0,\r
-0x51B4=>0x8DE1,\r
-0x5742=>0x8DE2,\r
-0x962A=>0x8DE3,\r
-0x583A=>0x8DE4,\r
-0x698A=>0x8DE5,\r
-0x80B4=>0x8DE6,\r
-0x54B2=>0x8DE7,\r
-0x5D0E=>0x8DE8,\r
-0x57FC=>0x8DE9,\r
-0x7895=>0x8DEA,\r
-0x9DFA=>0x8DEB,\r
-0x4F5C=>0x8DEC,\r
-0x524A=>0x8DED,\r
-0x548B=>0x8DEE,\r
-0x643E=>0x8DEF,\r
-0x6628=>0x8DF0,\r
-0x6714=>0x8DF1,\r
-0x67F5=>0x8DF2,\r
-0x7A84=>0x8DF3,\r
-0x7B56=>0x8DF4,\r
-0x7D22=>0x8DF5,\r
-0x932F=>0x8DF6,\r
-0x685C=>0x8DF7,\r
-0x9BAD=>0x8DF8,\r
-0x7B39=>0x8DF9,\r
-0x5319=>0x8DFA,\r
-0x518A=>0x8DFB,\r
-0x5237=>0x8DFC,\r
-0x5BDF=>0x8E40,\r
-0x62F6=>0x8E41,\r
-0x64AE=>0x8E42,\r
-0x64E6=>0x8E43,\r
-0x672D=>0x8E44,\r
-0x6BBA=>0x8E45,\r
-0x85A9=>0x8E46,\r
-0x96D1=>0x8E47,\r
-0x7690=>0x8E48,\r
-0x9BD6=>0x8E49,\r
-0x634C=>0x8E4A,\r
-0x9306=>0x8E4B,\r
-0x9BAB=>0x8E4C,\r
-0x76BF=>0x8E4D,\r
-0x6652=>0x8E4E,\r
-0x4E09=>0x8E4F,\r
-0x5098=>0x8E50,\r
-0x53C2=>0x8E51,\r
-0x5C71=>0x8E52,\r
-0x60E8=>0x8E53,\r
-0x6492=>0x8E54,\r
-0x6563=>0x8E55,\r
-0x685F=>0x8E56,\r
-0x71E6=>0x8E57,\r
-0x73CA=>0x8E58,\r
-0x7523=>0x8E59,\r
-0x7B97=>0x8E5A,\r
-0x7E82=>0x8E5B,\r
-0x8695=>0x8E5C,\r
-0x8B83=>0x8E5D,\r
-0x8CDB=>0x8E5E,\r
-0x9178=>0x8E5F,\r
-0x9910=>0x8E60,\r
-0x65AC=>0x8E61,\r
-0x66AB=>0x8E62,\r
-0x6B8B=>0x8E63,\r
-0x4ED5=>0x8E64,\r
-0x4ED4=>0x8E65,\r
-0x4F3A=>0x8E66,\r
-0x4F7F=>0x8E67,\r
-0x523A=>0x8E68,\r
-0x53F8=>0x8E69,\r
-0x53F2=>0x8E6A,\r
-0x55E3=>0x8E6B,\r
-0x56DB=>0x8E6C,\r
-0x58EB=>0x8E6D,\r
-0x59CB=>0x8E6E,\r
-0x59C9=>0x8E6F,\r
-0x59FF=>0x8E70,\r
-0x5B50=>0x8E71,\r
-0x5C4D=>0x8E72,\r
-0x5E02=>0x8E73,\r
-0x5E2B=>0x8E74,\r
-0x5FD7=>0x8E75,\r
-0x601D=>0x8E76,\r
-0x6307=>0x8E77,\r
-0x652F=>0x8E78,\r
-0x5B5C=>0x8E79,\r
-0x65AF=>0x8E7A,\r
-0x65BD=>0x8E7B,\r
-0x65E8=>0x8E7C,\r
-0x679D=>0x8E7D,\r
-0x6B62=>0x8E7E,\r
-0x6B7B=>0x8E80,\r
-0x6C0F=>0x8E81,\r
-0x7345=>0x8E82,\r
-0x7949=>0x8E83,\r
-0x79C1=>0x8E84,\r
-0x7CF8=>0x8E85,\r
-0x7D19=>0x8E86,\r
-0x7D2B=>0x8E87,\r
-0x80A2=>0x8E88,\r
-0x8102=>0x8E89,\r
-0x81F3=>0x8E8A,\r
-0x8996=>0x8E8B,\r
-0x8A5E=>0x8E8C,\r
-0x8A69=>0x8E8D,\r
-0x8A66=>0x8E8E,\r
-0x8A8C=>0x8E8F,\r
-0x8AEE=>0x8E90,\r
-0x8CC7=>0x8E91,\r
-0x8CDC=>0x8E92,\r
-0x96CC=>0x8E93,\r
-0x98FC=>0x8E94,\r
-0x6B6F=>0x8E95,\r
-0x4E8B=>0x8E96,\r
-0x4F3C=>0x8E97,\r
-0x4F8D=>0x8E98,\r
-0x5150=>0x8E99,\r
-0x5B57=>0x8E9A,\r
-0x5BFA=>0x8E9B,\r
-0x6148=>0x8E9C,\r
-0x6301=>0x8E9D,\r
-0x6642=>0x8E9E,\r
-0x6B21=>0x8E9F,\r
-0x6ECB=>0x8EA0,\r
-0x6CBB=>0x8EA1,\r
-0x723E=>0x8EA2,\r
-0x74BD=>0x8EA3,\r
-0x75D4=>0x8EA4,\r
-0x78C1=>0x8EA5,\r
-0x793A=>0x8EA6,\r
-0x800C=>0x8EA7,\r
-0x8033=>0x8EA8,\r
-0x81EA=>0x8EA9,\r
-0x8494=>0x8EAA,\r
-0x8F9E=>0x8EAB,\r
-0x6C50=>0x8EAC,\r
-0x9E7F=>0x8EAD,\r
-0x5F0F=>0x8EAE,\r
-0x8B58=>0x8EAF,\r
-0x9D2B=>0x8EB0,\r
-0x7AFA=>0x8EB1,\r
-0x8EF8=>0x8EB2,\r
-0x5B8D=>0x8EB3,\r
-0x96EB=>0x8EB4,\r
-0x4E03=>0x8EB5,\r
-0x53F1=>0x8EB6,\r
-0x57F7=>0x8EB7,\r
-0x5931=>0x8EB8,\r
-0x5AC9=>0x8EB9,\r
-0x5BA4=>0x8EBA,\r
-0x6089=>0x8EBB,\r
-0x6E7F=>0x8EBC,\r
-0x6F06=>0x8EBD,\r
-0x75BE=>0x8EBE,\r
-0x8CEA=>0x8EBF,\r
-0x5B9F=>0x8EC0,\r
-0x8500=>0x8EC1,\r
-0x7BE0=>0x8EC2,\r
-0x5072=>0x8EC3,\r
-0x67F4=>0x8EC4,\r
-0x829D=>0x8EC5,\r
-0x5C61=>0x8EC6,\r
-0x854A=>0x8EC7,\r
-0x7E1E=>0x8EC8,\r
-0x820E=>0x8EC9,\r
-0x5199=>0x8ECA,\r
-0x5C04=>0x8ECB,\r
-0x6368=>0x8ECC,\r
-0x8D66=>0x8ECD,\r
-0x659C=>0x8ECE,\r
-0x716E=>0x8ECF,\r
-0x793E=>0x8ED0,\r
-0x7D17=>0x8ED1,\r
-0x8005=>0x8ED2,\r
-0x8B1D=>0x8ED3,\r
-0x8ECA=>0x8ED4,\r
-0x906E=>0x8ED5,\r
-0x86C7=>0x8ED6,\r
-0x90AA=>0x8ED7,\r
-0x501F=>0x8ED8,\r
-0x52FA=>0x8ED9,\r
-0x5C3A=>0x8EDA,\r
-0x6753=>0x8EDB,\r
-0x707C=>0x8EDC,\r
-0x7235=>0x8EDD,\r
-0x914C=>0x8EDE,\r
-0x91C8=>0x8EDF,\r
-0x932B=>0x8EE0,\r
-0x82E5=>0x8EE1,\r
-0x5BC2=>0x8EE2,\r
-0x5F31=>0x8EE3,\r
-0x60F9=>0x8EE4,\r
-0x4E3B=>0x8EE5,\r
-0x53D6=>0x8EE6,\r
-0x5B88=>0x8EE7,\r
-0x624B=>0x8EE8,\r
-0x6731=>0x8EE9,\r
-0x6B8A=>0x8EEA,\r
-0x72E9=>0x8EEB,\r
-0x73E0=>0x8EEC,\r
-0x7A2E=>0x8EED,\r
-0x816B=>0x8EEE,\r
-0x8DA3=>0x8EEF,\r
-0x9152=>0x8EF0,\r
-0x9996=>0x8EF1,\r
-0x5112=>0x8EF2,\r
-0x53D7=>0x8EF3,\r
-0x546A=>0x8EF4,\r
-0x5BFF=>0x8EF5,\r
-0x6388=>0x8EF6,\r
-0x6A39=>0x8EF7,\r
-0x7DAC=>0x8EF8,\r
-0x9700=>0x8EF9,\r
-0x56DA=>0x8EFA,\r
-0x53CE=>0x8EFB,\r
-0x5468=>0x8EFC,\r
-0x5B97=>0x8F40,\r
-0x5C31=>0x8F41,\r
-0x5DDE=>0x8F42,\r
-0x4FEE=>0x8F43,\r
-0x6101=>0x8F44,\r
-0x62FE=>0x8F45,\r
-0x6D32=>0x8F46,\r
-0x79C0=>0x8F47,\r
-0x79CB=>0x8F48,\r
-0x7D42=>0x8F49,\r
-0x7E4D=>0x8F4A,\r
-0x7FD2=>0x8F4B,\r
-0x81ED=>0x8F4C,\r
-0x821F=>0x8F4D,\r
-0x8490=>0x8F4E,\r
-0x8846=>0x8F4F,\r
-0x8972=>0x8F50,\r
-0x8B90=>0x8F51,\r
-0x8E74=>0x8F52,\r
-0x8F2F=>0x8F53,\r
-0x9031=>0x8F54,\r
-0x914B=>0x8F55,\r
-0x916C=>0x8F56,\r
-0x96C6=>0x8F57,\r
-0x919C=>0x8F58,\r
-0x4EC0=>0x8F59,\r
-0x4F4F=>0x8F5A,\r
-0x5145=>0x8F5B,\r
-0x5341=>0x8F5C,\r
-0x5F93=>0x8F5D,\r
-0x620E=>0x8F5E,\r
-0x67D4=>0x8F5F,\r
-0x6C41=>0x8F60,\r
-0x6E0B=>0x8F61,\r
-0x7363=>0x8F62,\r
-0x7E26=>0x8F63,\r
-0x91CD=>0x8F64,\r
-0x9283=>0x8F65,\r
-0x53D4=>0x8F66,\r
-0x5919=>0x8F67,\r
-0x5BBF=>0x8F68,\r
-0x6DD1=>0x8F69,\r
-0x795D=>0x8F6A,\r
-0x7E2E=>0x8F6B,\r
-0x7C9B=>0x8F6C,\r
-0x587E=>0x8F6D,\r
-0x719F=>0x8F6E,\r
-0x51FA=>0x8F6F,\r
-0x8853=>0x8F70,\r
-0x8FF0=>0x8F71,\r
-0x4FCA=>0x8F72,\r
-0x5CFB=>0x8F73,\r
-0x6625=>0x8F74,\r
-0x77AC=>0x8F75,\r
-0x7AE3=>0x8F76,\r
-0x821C=>0x8F77,\r
-0x99FF=>0x8F78,\r
-0x51C6=>0x8F79,\r
-0x5FAA=>0x8F7A,\r
-0x65EC=>0x8F7B,\r
-0x696F=>0x8F7C,\r
-0x6B89=>0x8F7D,\r
-0x6DF3=>0x8F7E,\r
-0x6E96=>0x8F80,\r
-0x6F64=>0x8F81,\r
-0x76FE=>0x8F82,\r
-0x7D14=>0x8F83,\r
-0x5DE1=>0x8F84,\r
-0x9075=>0x8F85,\r
-0x9187=>0x8F86,\r
-0x9806=>0x8F87,\r
-0x51E6=>0x8F88,\r
-0x521D=>0x8F89,\r
-0x6240=>0x8F8A,\r
-0x6691=>0x8F8B,\r
-0x66D9=>0x8F8C,\r
-0x6E1A=>0x8F8D,\r
-0x5EB6=>0x8F8E,\r
-0x7DD2=>0x8F8F,\r
-0x7F72=>0x8F90,\r
-0x66F8=>0x8F91,\r
-0x85AF=>0x8F92,\r
-0x85F7=>0x8F93,\r
-0x8AF8=>0x8F94,\r
-0x52A9=>0x8F95,\r
-0x53D9=>0x8F96,\r
-0x5973=>0x8F97,\r
-0x5E8F=>0x8F98,\r
-0x5F90=>0x8F99,\r
-0x6055=>0x8F9A,\r
-0x92E4=>0x8F9B,\r
-0x9664=>0x8F9C,\r
-0x50B7=>0x8F9D,\r
-0x511F=>0x8F9E,\r
-0x52DD=>0x8F9F,\r
-0x5320=>0x8FA0,\r
-0x5347=>0x8FA1,\r
-0x53EC=>0x8FA2,\r
-0x54E8=>0x8FA3,\r
-0x5546=>0x8FA4,\r
-0x5531=>0x8FA5,\r
-0x5617=>0x8FA6,\r
-0x5968=>0x8FA7,\r
-0x59BE=>0x8FA8,\r
-0x5A3C=>0x8FA9,\r
-0x5BB5=>0x8FAA,\r
-0x5C06=>0x8FAB,\r
-0x5C0F=>0x8FAC,\r
-0x5C11=>0x8FAD,\r
-0x5C1A=>0x8FAE,\r
-0x5E84=>0x8FAF,\r
-0x5E8A=>0x8FB0,\r
-0x5EE0=>0x8FB1,\r
-0x5F70=>0x8FB2,\r
-0x627F=>0x8FB3,\r
-0x6284=>0x8FB4,\r
-0x62DB=>0x8FB5,\r
-0x638C=>0x8FB6,\r
-0x6377=>0x8FB7,\r
-0x6607=>0x8FB8,\r
-0x660C=>0x8FB9,\r
-0x662D=>0x8FBA,\r
-0x6676=>0x8FBB,\r
-0x677E=>0x8FBC,\r
-0x68A2=>0x8FBD,\r
-0x6A1F=>0x8FBE,\r
-0x6A35=>0x8FBF,\r
-0x6CBC=>0x8FC0,\r
-0x6D88=>0x8FC1,\r
-0x6E09=>0x8FC2,\r
-0x6E58=>0x8FC3,\r
-0x713C=>0x8FC4,\r
-0x7126=>0x8FC5,\r
-0x7167=>0x8FC6,\r
-0x75C7=>0x8FC7,\r
-0x7701=>0x8FC8,\r
-0x785D=>0x8FC9,\r
-0x7901=>0x8FCA,\r
-0x7965=>0x8FCB,\r
-0x79F0=>0x8FCC,\r
-0x7AE0=>0x8FCD,\r
-0x7B11=>0x8FCE,\r
-0x7CA7=>0x8FCF,\r
-0x7D39=>0x8FD0,\r
-0x8096=>0x8FD1,\r
-0x83D6=>0x8FD2,\r
-0x848B=>0x8FD3,\r
-0x8549=>0x8FD4,\r
-0x885D=>0x8FD5,\r
-0x88F3=>0x8FD6,\r
-0x8A1F=>0x8FD7,\r
-0x8A3C=>0x8FD8,\r
-0x8A54=>0x8FD9,\r
-0x8A73=>0x8FDA,\r
-0x8C61=>0x8FDB,\r
-0x8CDE=>0x8FDC,\r
-0x91A4=>0x8FDD,\r
-0x9266=>0x8FDE,\r
-0x937E=>0x8FDF,\r
-0x9418=>0x8FE0,\r
-0x969C=>0x8FE1,\r
-0x9798=>0x8FE2,\r
-0x4E0A=>0x8FE3,\r
-0x4E08=>0x8FE4,\r
-0x4E1E=>0x8FE5,\r
-0x4E57=>0x8FE6,\r
-0x5197=>0x8FE7,\r
-0x5270=>0x8FE8,\r
-0x57CE=>0x8FE9,\r
-0x5834=>0x8FEA,\r
-0x58CC=>0x8FEB,\r
-0x5B22=>0x8FEC,\r
-0x5E38=>0x8FED,\r
-0x60C5=>0x8FEE,\r
-0x64FE=>0x8FEF,\r
-0x6761=>0x8FF0,\r
-0x6756=>0x8FF1,\r
-0x6D44=>0x8FF2,\r
-0x72B6=>0x8FF3,\r
-0x7573=>0x8FF4,\r
-0x7A63=>0x8FF5,\r
-0x84B8=>0x8FF6,\r
-0x8B72=>0x8FF7,\r
-0x91B8=>0x8FF8,\r
-0x9320=>0x8FF9,\r
-0x5631=>0x8FFA,\r
-0x57F4=>0x8FFB,\r
-0x98FE=>0x8FFC,\r
-0x62ED=>0x9040,\r
-0x690D=>0x9041,\r
-0x6B96=>0x9042,\r
-0x71ED=>0x9043,\r
-0x7E54=>0x9044,\r
-0x8077=>0x9045,\r
-0x8272=>0x9046,\r
-0x89E6=>0x9047,\r
-0x98DF=>0x9048,\r
-0x8755=>0x9049,\r
-0x8FB1=>0x904A,\r
-0x5C3B=>0x904B,\r
-0x4F38=>0x904C,\r
-0x4FE1=>0x904D,\r
-0x4FB5=>0x904E,\r
-0x5507=>0x904F,\r
-0x5A20=>0x9050,\r
-0x5BDD=>0x9051,\r
-0x5BE9=>0x9052,\r
-0x5FC3=>0x9053,\r
-0x614E=>0x9054,\r
-0x632F=>0x9055,\r
-0x65B0=>0x9056,\r
-0x664B=>0x9057,\r
-0x68EE=>0x9058,\r
-0x699B=>0x9059,\r
-0x6D78=>0x905A,\r
-0x6DF1=>0x905B,\r
-0x7533=>0x905C,\r
-0x75B9=>0x905D,\r
-0x771F=>0x905E,\r
-0x795E=>0x905F,\r
-0x79E6=>0x9060,\r
-0x7D33=>0x9061,\r
-0x81E3=>0x9062,\r
-0x82AF=>0x9063,\r
-0x85AA=>0x9064,\r
-0x89AA=>0x9065,\r
-0x8A3A=>0x9066,\r
-0x8EAB=>0x9067,\r
-0x8F9B=>0x9068,\r
-0x9032=>0x9069,\r
-0x91DD=>0x906A,\r
-0x9707=>0x906B,\r
-0x4EBA=>0x906C,\r
-0x4EC1=>0x906D,\r
-0x5203=>0x906E,\r
-0x5875=>0x906F,\r
-0x58EC=>0x9070,\r
-0x5C0B=>0x9071,\r
-0x751A=>0x9072,\r
-0x5C3D=>0x9073,\r
-0x814E=>0x9074,\r
-0x8A0A=>0x9075,\r
-0x8FC5=>0x9076,\r
-0x9663=>0x9077,\r
-0x976D=>0x9078,\r
-0x7B25=>0x9079,\r
-0x8ACF=>0x907A,\r
-0x9808=>0x907B,\r
-0x9162=>0x907C,\r
-0x56F3=>0x907D,\r
-0x53A8=>0x907E,\r
-0x9017=>0x9080,\r
-0x5439=>0x9081,\r
-0x5782=>0x9082,\r
-0x5E25=>0x9083,\r
-0x63A8=>0x9084,\r
-0x6C34=>0x9085,\r
-0x708A=>0x9086,\r
-0x7761=>0x9087,\r
-0x7C8B=>0x9088,\r
-0x7FE0=>0x9089,\r
-0x8870=>0x908A,\r
-0x9042=>0x908B,\r
-0x9154=>0x908C,\r
-0x9310=>0x908D,\r
-0x9318=>0x908E,\r
-0x968F=>0x908F,\r
-0x745E=>0x9090,\r
-0x9AC4=>0x9091,\r
-0x5D07=>0x9092,\r
-0x5D69=>0x9093,\r
-0x6570=>0x9094,\r
-0x67A2=>0x9095,\r
-0x8DA8=>0x9096,\r
-0x96DB=>0x9097,\r
-0x636E=>0x9098,\r
-0x6749=>0x9099,\r
-0x6919=>0x909A,\r
-0x83C5=>0x909B,\r
-0x9817=>0x909C,\r
-0x96C0=>0x909D,\r
-0x88FE=>0x909E,\r
-0x6F84=>0x909F,\r
-0x647A=>0x90A0,\r
-0x5BF8=>0x90A1,\r
-0x4E16=>0x90A2,\r
-0x702C=>0x90A3,\r
-0x755D=>0x90A4,\r
-0x662F=>0x90A5,\r
-0x51C4=>0x90A6,\r
-0x5236=>0x90A7,\r
-0x52E2=>0x90A8,\r
-0x59D3=>0x90A9,\r
-0x5F81=>0x90AA,\r
-0x6027=>0x90AB,\r
-0x6210=>0x90AC,\r
-0x653F=>0x90AD,\r
-0x6574=>0x90AE,\r
-0x661F=>0x90AF,\r
-0x6674=>0x90B0,\r
-0x68F2=>0x90B1,\r
-0x6816=>0x90B2,\r
-0x6B63=>0x90B3,\r
-0x6E05=>0x90B4,\r
-0x7272=>0x90B5,\r
-0x751F=>0x90B6,\r
-0x76DB=>0x90B7,\r
-0x7CBE=>0x90B8,\r
-0x8056=>0x90B9,\r
-0x58F0=>0x90BA,\r
-0x88FD=>0x90BB,\r
-0x897F=>0x90BC,\r
-0x8AA0=>0x90BD,\r
-0x8A93=>0x90BE,\r
-0x8ACB=>0x90BF,\r
-0x901D=>0x90C0,\r
-0x9192=>0x90C1,\r
-0x9752=>0x90C2,\r
-0x9759=>0x90C3,\r
-0x6589=>0x90C4,\r
-0x7A0E=>0x90C5,\r
-0x8106=>0x90C6,\r
-0x96BB=>0x90C7,\r
-0x5E2D=>0x90C8,\r
-0x60DC=>0x90C9,\r
-0x621A=>0x90CA,\r
-0x65A5=>0x90CB,\r
-0x6614=>0x90CC,\r
-0x6790=>0x90CD,\r
-0x77F3=>0x90CE,\r
-0x7A4D=>0x90CF,\r
-0x7C4D=>0x90D0,\r
-0x7E3E=>0x90D1,\r
-0x810A=>0x90D2,\r
-0x8CAC=>0x90D3,\r
-0x8D64=>0x90D4,\r
-0x8DE1=>0x90D5,\r
-0x8E5F=>0x90D6,\r
-0x78A9=>0x90D7,\r
-0x5207=>0x90D8,\r
-0x62D9=>0x90D9,\r
-0x63A5=>0x90DA,\r
-0x6442=>0x90DB,\r
-0x6298=>0x90DC,\r
-0x8A2D=>0x90DD,\r
-0x7A83=>0x90DE,\r
-0x7BC0=>0x90DF,\r
-0x8AAC=>0x90E0,\r
-0x96EA=>0x90E1,\r
-0x7D76=>0x90E2,\r
-0x820C=>0x90E3,\r
-0x8749=>0x90E4,\r
-0x4ED9=>0x90E5,\r
-0x5148=>0x90E6,\r
-0x5343=>0x90E7,\r
-0x5360=>0x90E8,\r
-0x5BA3=>0x90E9,\r
-0x5C02=>0x90EA,\r
-0x5C16=>0x90EB,\r
-0x5DDD=>0x90EC,\r
-0x6226=>0x90ED,\r
-0x6247=>0x90EE,\r
-0x64B0=>0x90EF,\r
-0x6813=>0x90F0,\r
-0x6834=>0x90F1,\r
-0x6CC9=>0x90F2,\r
-0x6D45=>0x90F3,\r
-0x6D17=>0x90F4,\r
-0x67D3=>0x90F5,\r
-0x6F5C=>0x90F6,\r
-0x714E=>0x90F7,\r
-0x717D=>0x90F8,\r
-0x65CB=>0x90F9,\r
-0x7A7F=>0x90FA,\r
-0x7BAD=>0x90FB,\r
-0x7DDA=>0x90FC,\r
-0x7E4A=>0x9140,\r
-0x7FA8=>0x9141,\r
-0x817A=>0x9142,\r
-0x821B=>0x9143,\r
-0x8239=>0x9144,\r
-0x85A6=>0x9145,\r
-0x8A6E=>0x9146,\r
-0x8CCE=>0x9147,\r
-0x8DF5=>0x9148,\r
-0x9078=>0x9149,\r
-0x9077=>0x914A,\r
-0x92AD=>0x914B,\r
-0x9291=>0x914C,\r
-0x9583=>0x914D,\r
-0x9BAE=>0x914E,\r
-0x524D=>0x914F,\r
-0x5584=>0x9150,\r
-0x6F38=>0x9151,\r
-0x7136=>0x9152,\r
-0x5168=>0x9153,\r
-0x7985=>0x9154,\r
-0x7E55=>0x9155,\r
-0x81B3=>0x9156,\r
-0x7CCE=>0x9157,\r
-0x564C=>0x9158,\r
-0x5851=>0x9159,\r
-0x5CA8=>0x915A,\r
-0x63AA=>0x915B,\r
-0x66FE=>0x915C,\r
-0x66FD=>0x915D,\r
-0x695A=>0x915E,\r
-0x72D9=>0x915F,\r
-0x758F=>0x9160,\r
-0x758E=>0x9161,\r
-0x790E=>0x9162,\r
-0x7956=>0x9163,\r
-0x79DF=>0x9164,\r
-0x7C97=>0x9165,\r
-0x7D20=>0x9166,\r
-0x7D44=>0x9167,\r
-0x8607=>0x9168,\r
-0x8A34=>0x9169,\r
-0x963B=>0x916A,\r
-0x9061=>0x916B,\r
-0x9F20=>0x916C,\r
-0x50E7=>0x916D,\r
-0x5275=>0x916E,\r
-0x53CC=>0x916F,\r
-0x53E2=>0x9170,\r
-0x5009=>0x9171,\r
-0x55AA=>0x9172,\r
-0x58EE=>0x9173,\r
-0x594F=>0x9174,\r
-0x723D=>0x9175,\r
-0x5B8B=>0x9176,\r
-0x5C64=>0x9177,\r
-0x531D=>0x9178,\r
-0x60E3=>0x9179,\r
-0x60F3=>0x917A,\r
-0x635C=>0x917B,\r
-0x6383=>0x917C,\r
-0x633F=>0x917D,\r
-0x63BB=>0x917E,\r
-0x64CD=>0x9180,\r
-0x65E9=>0x9181,\r
-0x66F9=>0x9182,\r
-0x5DE3=>0x9183,\r
-0x69CD=>0x9184,\r
-0x69FD=>0x9185,\r
-0x6F15=>0x9186,\r
-0x71E5=>0x9187,\r
-0x4E89=>0x9188,\r
-0x75E9=>0x9189,\r
-0x76F8=>0x918A,\r
-0x7A93=>0x918B,\r
-0x7CDF=>0x918C,\r
-0x7DCF=>0x918D,\r
-0x7D9C=>0x918E,\r
-0x8061=>0x918F,\r
-0x8349=>0x9190,\r
-0x8358=>0x9191,\r
-0x846C=>0x9192,\r
-0x84BC=>0x9193,\r
-0x85FB=>0x9194,\r
-0x88C5=>0x9195,\r
-0x8D70=>0x9196,\r
-0x9001=>0x9197,\r
-0x906D=>0x9198,\r
-0x9397=>0x9199,\r
-0x971C=>0x919A,\r
-0x9A12=>0x919B,\r
-0x50CF=>0x919C,\r
-0x5897=>0x919D,\r
-0x618E=>0x919E,\r
-0x81D3=>0x919F,\r
-0x8535=>0x91A0,\r
-0x8D08=>0x91A1,\r
-0x9020=>0x91A2,\r
-0x4FC3=>0x91A3,\r
-0x5074=>0x91A4,\r
-0x5247=>0x91A5,\r
-0x5373=>0x91A6,\r
-0x606F=>0x91A7,\r
-0x6349=>0x91A8,\r
-0x675F=>0x91A9,\r
-0x6E2C=>0x91AA,\r
-0x8DB3=>0x91AB,\r
-0x901F=>0x91AC,\r
-0x4FD7=>0x91AD,\r
-0x5C5E=>0x91AE,\r
-0x8CCA=>0x91AF,\r
-0x65CF=>0x91B0,\r
-0x7D9A=>0x91B1,\r
-0x5352=>0x91B2,\r
-0x8896=>0x91B3,\r
-0x5176=>0x91B4,\r
-0x63C3=>0x91B5,\r
-0x5B58=>0x91B6,\r
-0x5B6B=>0x91B7,\r
-0x5C0A=>0x91B8,\r
-0x640D=>0x91B9,\r
-0x6751=>0x91BA,\r
-0x905C=>0x91BB,\r
-0x4ED6=>0x91BC,\r
-0x591A=>0x91BD,\r
-0x592A=>0x91BE,\r
-0x6C70=>0x91BF,\r
-0x8A51=>0x91C0,\r
-0x553E=>0x91C1,\r
-0x5815=>0x91C2,\r
-0x59A5=>0x91C3,\r
-0x60F0=>0x91C4,\r
-0x6253=>0x91C5,\r
-0x67C1=>0x91C6,\r
-0x8235=>0x91C7,\r
-0x6955=>0x91C8,\r
-0x9640=>0x91C9,\r
-0x99C4=>0x91CA,\r
-0x9A28=>0x91CB,\r
-0x4F53=>0x91CC,\r
-0x5806=>0x91CD,\r
-0x5BFE=>0x91CE,\r
-0x8010=>0x91CF,\r
-0x5CB1=>0x91D0,\r
-0x5E2F=>0x91D1,\r
-0x5F85=>0x91D2,\r
-0x6020=>0x91D3,\r
-0x614B=>0x91D4,\r
-0x6234=>0x91D5,\r
-0x66FF=>0x91D6,\r
-0x6CF0=>0x91D7,\r
-0x6EDE=>0x91D8,\r
-0x80CE=>0x91D9,\r
-0x817F=>0x91DA,\r
-0x82D4=>0x91DB,\r
-0x888B=>0x91DC,\r
-0x8CB8=>0x91DD,\r
-0x9000=>0x91DE,\r
-0x902E=>0x91DF,\r
-0x968A=>0x91E0,\r
-0x9EDB=>0x91E1,\r
-0x9BDB=>0x91E2,\r
-0x4EE3=>0x91E3,\r
-0x53F0=>0x91E4,\r
-0x5927=>0x91E5,\r
-0x7B2C=>0x91E6,\r
-0x918D=>0x91E7,\r
-0x984C=>0x91E8,\r
-0x9DF9=>0x91E9,\r
-0x6EDD=>0x91EA,\r
-0x7027=>0x91EB,\r
-0x5353=>0x91EC,\r
-0x5544=>0x91ED,\r
-0x5B85=>0x91EE,\r
-0x6258=>0x91EF,\r
-0x629E=>0x91F0,\r
-0x62D3=>0x91F1,\r
-0x6CA2=>0x91F2,\r
-0x6FEF=>0x91F3,\r
-0x7422=>0x91F4,\r
-0x8A17=>0x91F5,\r
-0x9438=>0x91F6,\r
-0x6FC1=>0x91F7,\r
-0x8AFE=>0x91F8,\r
-0x8338=>0x91F9,\r
-0x51E7=>0x91FA,\r
-0x86F8=>0x91FB,\r
-0x53EA=>0x91FC,\r
-0x53E9=>0x9240,\r
-0x4F46=>0x9241,\r
-0x9054=>0x9242,\r
-0x8FB0=>0x9243,\r
-0x596A=>0x9244,\r
-0x8131=>0x9245,\r
-0x5DFD=>0x9246,\r
-0x7AEA=>0x9247,\r
-0x8FBF=>0x9248,\r
-0x68DA=>0x9249,\r
-0x8C37=>0x924A,\r
-0x72F8=>0x924B,\r
-0x9C48=>0x924C,\r
-0x6A3D=>0x924D,\r
-0x8AB0=>0x924E,\r
-0x4E39=>0x924F,\r
-0x5358=>0x9250,\r
-0x5606=>0x9251,\r
-0x5766=>0x9252,\r
-0x62C5=>0x9253,\r
-0x63A2=>0x9254,\r
-0x65E6=>0x9255,\r
-0x6B4E=>0x9256,\r
-0x6DE1=>0x9257,\r
-0x6E5B=>0x9258,\r
-0x70AD=>0x9259,\r
-0x77ED=>0x925A,\r
-0x7AEF=>0x925B,\r
-0x7BAA=>0x925C,\r
-0x7DBB=>0x925D,\r
-0x803D=>0x925E,\r
-0x80C6=>0x925F,\r
-0x86CB=>0x9260,\r
-0x8A95=>0x9261,\r
-0x935B=>0x9262,\r
-0x56E3=>0x9263,\r
-0x58C7=>0x9264,\r
-0x5F3E=>0x9265,\r
-0x65AD=>0x9266,\r
-0x6696=>0x9267,\r
-0x6A80=>0x9268,\r
-0x6BB5=>0x9269,\r
-0x7537=>0x926A,\r
-0x8AC7=>0x926B,\r
-0x5024=>0x926C,\r
-0x77E5=>0x926D,\r
-0x5730=>0x926E,\r
-0x5F1B=>0x926F,\r
-0x6065=>0x9270,\r
-0x667A=>0x9271,\r
-0x6C60=>0x9272,\r
-0x75F4=>0x9273,\r
-0x7A1A=>0x9274,\r
-0x7F6E=>0x9275,\r
-0x81F4=>0x9276,\r
-0x8718=>0x9277,\r
-0x9045=>0x9278,\r
-0x99B3=>0x9279,\r
-0x7BC9=>0x927A,\r
-0x755C=>0x927B,\r
-0x7AF9=>0x927C,\r
-0x7B51=>0x927D,\r
-0x84C4=>0x927E,\r
-0x9010=>0x9280,\r
-0x79E9=>0x9281,\r
-0x7A92=>0x9282,\r
-0x8336=>0x9283,\r
-0x5AE1=>0x9284,\r
-0x7740=>0x9285,\r
-0x4E2D=>0x9286,\r
-0x4EF2=>0x9287,\r
-0x5B99=>0x9288,\r
-0x5FE0=>0x9289,\r
-0x62BD=>0x928A,\r
-0x663C=>0x928B,\r
-0x67F1=>0x928C,\r
-0x6CE8=>0x928D,\r
-0x866B=>0x928E,\r
-0x8877=>0x928F,\r
-0x8A3B=>0x9290,\r
-0x914E=>0x9291,\r
-0x92F3=>0x9292,\r
-0x99D0=>0x9293,\r
-0x6A17=>0x9294,\r
-0x7026=>0x9295,\r
-0x732A=>0x9296,\r
-0x82E7=>0x9297,\r
-0x8457=>0x9298,\r
-0x8CAF=>0x9299,\r
-0x4E01=>0x929A,\r
-0x5146=>0x929B,\r
-0x51CB=>0x929C,\r
-0x558B=>0x929D,\r
-0x5BF5=>0x929E,\r
-0x5E16=>0x929F,\r
-0x5E33=>0x92A0,\r
-0x5E81=>0x92A1,\r
-0x5F14=>0x92A2,\r
-0x5F35=>0x92A3,\r
-0x5F6B=>0x92A4,\r
-0x5FB4=>0x92A5,\r
-0x61F2=>0x92A6,\r
-0x6311=>0x92A7,\r
-0x66A2=>0x92A8,\r
-0x671D=>0x92A9,\r
-0x6F6E=>0x92AA,\r
-0x7252=>0x92AB,\r
-0x753A=>0x92AC,\r
-0x773A=>0x92AD,\r
-0x8074=>0x92AE,\r
-0x8139=>0x92AF,\r
-0x8178=>0x92B0,\r
-0x8776=>0x92B1,\r
-0x8ABF=>0x92B2,\r
-0x8ADC=>0x92B3,\r
-0x8D85=>0x92B4,\r
-0x8DF3=>0x92B5,\r
-0x929A=>0x92B6,\r
-0x9577=>0x92B7,\r
-0x9802=>0x92B8,\r
-0x9CE5=>0x92B9,\r
-0x52C5=>0x92BA,\r
-0x6357=>0x92BB,\r
-0x76F4=>0x92BC,\r
-0x6715=>0x92BD,\r
-0x6C88=>0x92BE,\r
-0x73CD=>0x92BF,\r
-0x8CC3=>0x92C0,\r
-0x93AE=>0x92C1,\r
-0x9673=>0x92C2,\r
-0x6D25=>0x92C3,\r
-0x589C=>0x92C4,\r
-0x690E=>0x92C5,\r
-0x69CC=>0x92C6,\r
-0x8FFD=>0x92C7,\r
-0x939A=>0x92C8,\r
-0x75DB=>0x92C9,\r
-0x901A=>0x92CA,\r
-0x585A=>0x92CB,\r
-0x6802=>0x92CC,\r
-0x63B4=>0x92CD,\r
-0x69FB=>0x92CE,\r
-0x4F43=>0x92CF,\r
-0x6F2C=>0x92D0,\r
-0x67D8=>0x92D1,\r
-0x8FBB=>0x92D2,\r
-0x8526=>0x92D3,\r
-0x7DB4=>0x92D4,\r
-0x9354=>0x92D5,\r
-0x693F=>0x92D6,\r
-0x6F70=>0x92D7,\r
-0x576A=>0x92D8,\r
-0x58F7=>0x92D9,\r
-0x5B2C=>0x92DA,\r
-0x7D2C=>0x92DB,\r
-0x722A=>0x92DC,\r
-0x540A=>0x92DD,\r
-0x91E3=>0x92DE,\r
-0x9DB4=>0x92DF,\r
-0x4EAD=>0x92E0,\r
-0x4F4E=>0x92E1,\r
-0x505C=>0x92E2,\r
-0x5075=>0x92E3,\r
-0x5243=>0x92E4,\r
-0x8C9E=>0x92E5,\r
-0x5448=>0x92E6,\r
-0x5824=>0x92E7,\r
-0x5B9A=>0x92E8,\r
-0x5E1D=>0x92E9,\r
-0x5E95=>0x92EA,\r
-0x5EAD=>0x92EB,\r
-0x5EF7=>0x92EC,\r
-0x5F1F=>0x92ED,\r
-0x608C=>0x92EE,\r
-0x62B5=>0x92EF,\r
-0x633A=>0x92F0,\r
-0x63D0=>0x92F1,\r
-0x68AF=>0x92F2,\r
-0x6C40=>0x92F3,\r
-0x7887=>0x92F4,\r
-0x798E=>0x92F5,\r
-0x7A0B=>0x92F6,\r
-0x7DE0=>0x92F7,\r
-0x8247=>0x92F8,\r
-0x8A02=>0x92F9,\r
-0x8AE6=>0x92FA,\r
-0x8E44=>0x92FB,\r
-0x9013=>0x92FC,\r
-0x90B8=>0x9340,\r
-0x912D=>0x9341,\r
-0x91D8=>0x9342,\r
-0x9F0E=>0x9343,\r
-0x6CE5=>0x9344,\r
-0x6458=>0x9345,\r
-0x64E2=>0x9346,\r
-0x6575=>0x9347,\r
-0x6EF4=>0x9348,\r
-0x7684=>0x9349,\r
-0x7B1B=>0x934A,\r
-0x9069=>0x934B,\r
-0x93D1=>0x934C,\r
-0x6EBA=>0x934D,\r
-0x54F2=>0x934E,\r
-0x5FB9=>0x934F,\r
-0x64A4=>0x9350,\r
-0x8F4D=>0x9351,\r
-0x8FED=>0x9352,\r
-0x9244=>0x9353,\r
-0x5178=>0x9354,\r
-0x586B=>0x9355,\r
-0x5929=>0x9356,\r
-0x5C55=>0x9357,\r
-0x5E97=>0x9358,\r
-0x6DFB=>0x9359,\r
-0x7E8F=>0x935A,\r
-0x751C=>0x935B,\r
-0x8CBC=>0x935C,\r
-0x8EE2=>0x935D,\r
-0x985B=>0x935E,\r
-0x70B9=>0x935F,\r
-0x4F1D=>0x9360,\r
-0x6BBF=>0x9361,\r
-0x6FB1=>0x9362,\r
-0x7530=>0x9363,\r
-0x96FB=>0x9364,\r
-0x514E=>0x9365,\r
-0x5410=>0x9366,\r
-0x5835=>0x9367,\r
-0x5857=>0x9368,\r
-0x59AC=>0x9369,\r
-0x5C60=>0x936A,\r
-0x5F92=>0x936B,\r
-0x6597=>0x936C,\r
-0x675C=>0x936D,\r
-0x6E21=>0x936E,\r
-0x767B=>0x936F,\r
-0x83DF=>0x9370,\r
-0x8CED=>0x9371,\r
-0x9014=>0x9372,\r
-0x90FD=>0x9373,\r
-0x934D=>0x9374,\r
-0x7825=>0x9375,\r
-0x783A=>0x9376,\r
-0x52AA=>0x9377,\r
-0x5EA6=>0x9378,\r
-0x571F=>0x9379,\r
-0x5974=>0x937A,\r
-0x6012=>0x937B,\r
-0x5012=>0x937C,\r
-0x515A=>0x937D,\r
-0x51AC=>0x937E,\r
-0x51CD=>0x9380,\r
-0x5200=>0x9381,\r
-0x5510=>0x9382,\r
-0x5854=>0x9383,\r
-0x5858=>0x9384,\r
-0x5957=>0x9385,\r
-0x5B95=>0x9386,\r
-0x5CF6=>0x9387,\r
-0x5D8B=>0x9388,\r
-0x60BC=>0x9389,\r
-0x6295=>0x938A,\r
-0x642D=>0x938B,\r
-0x6771=>0x938C,\r
-0x6843=>0x938D,\r
-0x68BC=>0x938E,\r
-0x68DF=>0x938F,\r
-0x76D7=>0x9390,\r
-0x6DD8=>0x9391,\r
-0x6E6F=>0x9392,\r
-0x6D9B=>0x9393,\r
-0x706F=>0x9394,\r
-0x71C8=>0x9395,\r
-0x5F53=>0x9396,\r
-0x75D8=>0x9397,\r
-0x7977=>0x9398,\r
-0x7B49=>0x9399,\r
-0x7B54=>0x939A,\r
-0x7B52=>0x939B,\r
-0x7CD6=>0x939C,\r
-0x7D71=>0x939D,\r
-0x5230=>0x939E,\r
-0x8463=>0x939F,\r
-0x8569=>0x93A0,\r
-0x85E4=>0x93A1,\r
-0x8A0E=>0x93A2,\r
-0x8B04=>0x93A3,\r
-0x8C46=>0x93A4,\r
-0x8E0F=>0x93A5,\r
-0x9003=>0x93A6,\r
-0x900F=>0x93A7,\r
-0x9419=>0x93A8,\r
-0x9676=>0x93A9,\r
-0x982D=>0x93AA,\r
-0x9A30=>0x93AB,\r
-0x95D8=>0x93AC,\r
-0x50CD=>0x93AD,\r
-0x52D5=>0x93AE,\r
-0x540C=>0x93AF,\r
-0x5802=>0x93B0,\r
-0x5C0E=>0x93B1,\r
-0x61A7=>0x93B2,\r
-0x649E=>0x93B3,\r
-0x6D1E=>0x93B4,\r
-0x77B3=>0x93B5,\r
-0x7AE5=>0x93B6,\r
-0x80F4=>0x93B7,\r
-0x8404=>0x93B8,\r
-0x9053=>0x93B9,\r
-0x9285=>0x93BA,\r
-0x5CE0=>0x93BB,\r
-0x9D07=>0x93BC,\r
-0x533F=>0x93BD,\r
-0x5F97=>0x93BE,\r
-0x5FB3=>0x93BF,\r
-0x6D9C=>0x93C0,\r
-0x7279=>0x93C1,\r
-0x7763=>0x93C2,\r
-0x79BF=>0x93C3,\r
-0x7BE4=>0x93C4,\r
-0x6BD2=>0x93C5,\r
-0x72EC=>0x93C6,\r
-0x8AAD=>0x93C7,\r
-0x6803=>0x93C8,\r
-0x6A61=>0x93C9,\r
-0x51F8=>0x93CA,\r
-0x7A81=>0x93CB,\r
-0x6934=>0x93CC,\r
-0x5C4A=>0x93CD,\r
-0x9CF6=>0x93CE,\r
-0x82EB=>0x93CF,\r
-0x5BC5=>0x93D0,\r
-0x9149=>0x93D1,\r
-0x701E=>0x93D2,\r
-0x5678=>0x93D3,\r
-0x5C6F=>0x93D4,\r
-0x60C7=>0x93D5,\r
-0x6566=>0x93D6,\r
-0x6C8C=>0x93D7,\r
-0x8C5A=>0x93D8,\r
-0x9041=>0x93D9,\r
-0x9813=>0x93DA,\r
-0x5451=>0x93DB,\r
-0x66C7=>0x93DC,\r
-0x920D=>0x93DD,\r
-0x5948=>0x93DE,\r
-0x90A3=>0x93DF,\r
-0x5185=>0x93E0,\r
-0x4E4D=>0x93E1,\r
-0x51EA=>0x93E2,\r
-0x8599=>0x93E3,\r
-0x8B0E=>0x93E4,\r
-0x7058=>0x93E5,\r
-0x637A=>0x93E6,\r
-0x934B=>0x93E7,\r
-0x6962=>0x93E8,\r
-0x99B4=>0x93E9,\r
-0x7E04=>0x93EA,\r
-0x7577=>0x93EB,\r
-0x5357=>0x93EC,\r
-0x6960=>0x93ED,\r
-0x8EDF=>0x93EE,\r
-0x96E3=>0x93EF,\r
-0x6C5D=>0x93F0,\r
-0x4E8C=>0x93F1,\r
-0x5C3C=>0x93F2,\r
-0x5F10=>0x93F3,\r
-0x8FE9=>0x93F4,\r
-0x5302=>0x93F5,\r
-0x8CD1=>0x93F6,\r
-0x8089=>0x93F7,\r
-0x8679=>0x93F8,\r
-0x5EFF=>0x93F9,\r
-0x65E5=>0x93FA,\r
-0x4E73=>0x93FB,\r
-0x5165=>0x93FC,\r
-0x5982=>0x9440,\r
-0x5C3F=>0x9441,\r
-0x97EE=>0x9442,\r
-0x4EFB=>0x9443,\r
-0x598A=>0x9444,\r
-0x5FCD=>0x9445,\r
-0x8A8D=>0x9446,\r
-0x6FE1=>0x9447,\r
-0x79B0=>0x9448,\r
-0x7962=>0x9449,\r
-0x5BE7=>0x944A,\r
-0x8471=>0x944B,\r
-0x732B=>0x944C,\r
-0x71B1=>0x944D,\r
-0x5E74=>0x944E,\r
-0x5FF5=>0x944F,\r
-0x637B=>0x9450,\r
-0x649A=>0x9451,\r
-0x71C3=>0x9452,\r
-0x7C98=>0x9453,\r
-0x4E43=>0x9454,\r
-0x5EFC=>0x9455,\r
-0x4E4B=>0x9456,\r
-0x57DC=>0x9457,\r
-0x56A2=>0x9458,\r
-0x60A9=>0x9459,\r
-0x6FC3=>0x945A,\r
-0x7D0D=>0x945B,\r
-0x80FD=>0x945C,\r
-0x8133=>0x945D,\r
-0x81BF=>0x945E,\r
-0x8FB2=>0x945F,\r
-0x8997=>0x9460,\r
-0x86A4=>0x9461,\r
-0x5DF4=>0x9462,\r
-0x628A=>0x9463,\r
-0x64AD=>0x9464,\r
-0x8987=>0x9465,\r
-0x6777=>0x9466,\r
-0x6CE2=>0x9467,\r
-0x6D3E=>0x9468,\r
-0x7436=>0x9469,\r
-0x7834=>0x946A,\r
-0x5A46=>0x946B,\r
-0x7F75=>0x946C,\r
-0x82AD=>0x946D,\r
-0x99AC=>0x946E,\r
-0x4FF3=>0x946F,\r
-0x5EC3=>0x9470,\r
-0x62DD=>0x9471,\r
-0x6392=>0x9472,\r
-0x6557=>0x9473,\r
-0x676F=>0x9474,\r
-0x76C3=>0x9475,\r
-0x724C=>0x9476,\r
-0x80CC=>0x9477,\r
-0x80BA=>0x9478,\r
-0x8F29=>0x9479,\r
-0x914D=>0x947A,\r
-0x500D=>0x947B,\r
-0x57F9=>0x947C,\r
-0x5A92=>0x947D,\r
-0x6885=>0x947E,\r
-0x6973=>0x9480,\r
-0x7164=>0x9481,\r
-0x72FD=>0x9482,\r
-0x8CB7=>0x9483,\r
-0x58F2=>0x9484,\r
-0x8CE0=>0x9485,\r
-0x966A=>0x9486,\r
-0x9019=>0x9487,\r
-0x877F=>0x9488,\r
-0x79E4=>0x9489,\r
-0x77E7=>0x948A,\r
-0x8429=>0x948B,\r
-0x4F2F=>0x948C,\r
-0x5265=>0x948D,\r
-0x535A=>0x948E,\r
-0x62CD=>0x948F,\r
-0x67CF=>0x9490,\r
-0x6CCA=>0x9491,\r
-0x767D=>0x9492,\r
-0x7B94=>0x9493,\r
-0x7C95=>0x9494,\r
-0x8236=>0x9495,\r
-0x8584=>0x9496,\r
-0x8FEB=>0x9497,\r
-0x66DD=>0x9498,\r
-0x6F20=>0x9499,\r
-0x7206=>0x949A,\r
-0x7E1B=>0x949B,\r
-0x83AB=>0x949C,\r
-0x99C1=>0x949D,\r
-0x9EA6=>0x949E,\r
-0x51FD=>0x949F,\r
-0x7BB1=>0x94A0,\r
-0x7872=>0x94A1,\r
-0x7BB8=>0x94A2,\r
-0x8087=>0x94A3,\r
-0x7B48=>0x94A4,\r
-0x6AE8=>0x94A5,\r
-0x5E61=>0x94A6,\r
-0x808C=>0x94A7,\r
-0x7551=>0x94A8,\r
-0x7560=>0x94A9,\r
-0x516B=>0x94AA,\r
-0x9262=>0x94AB,\r
-0x6E8C=>0x94AC,\r
-0x767A=>0x94AD,\r
-0x9197=>0x94AE,\r
-0x9AEA=>0x94AF,\r
-0x4F10=>0x94B0,\r
-0x7F70=>0x94B1,\r
-0x629C=>0x94B2,\r
-0x7B4F=>0x94B3,\r
-0x95A5=>0x94B4,\r
-0x9CE9=>0x94B5,\r
-0x567A=>0x94B6,\r
-0x5859=>0x94B7,\r
-0x86E4=>0x94B8,\r
-0x96BC=>0x94B9,\r
-0x4F34=>0x94BA,\r
-0x5224=>0x94BB,\r
-0x534A=>0x94BC,\r
-0x53CD=>0x94BD,\r
-0x53DB=>0x94BE,\r
-0x5E06=>0x94BF,\r
-0x642C=>0x94C0,\r
-0x6591=>0x94C1,\r
-0x677F=>0x94C2,\r
-0x6C3E=>0x94C3,\r
-0x6C4E=>0x94C4,\r
-0x7248=>0x94C5,\r
-0x72AF=>0x94C6,\r
-0x73ED=>0x94C7,\r
-0x7554=>0x94C8,\r
-0x7E41=>0x94C9,\r
-0x822C=>0x94CA,\r
-0x85E9=>0x94CB,\r
-0x8CA9=>0x94CC,\r
-0x7BC4=>0x94CD,\r
-0x91C6=>0x94CE,\r
-0x7169=>0x94CF,\r
-0x9812=>0x94D0,\r
-0x98EF=>0x94D1,\r
-0x633D=>0x94D2,\r
-0x6669=>0x94D3,\r
-0x756A=>0x94D4,\r
-0x76E4=>0x94D5,\r
-0x78D0=>0x94D6,\r
-0x8543=>0x94D7,\r
-0x86EE=>0x94D8,\r
-0x532A=>0x94D9,\r
-0x5351=>0x94DA,\r
-0x5426=>0x94DB,\r
-0x5983=>0x94DC,\r
-0x5E87=>0x94DD,\r
-0x5F7C=>0x94DE,\r
-0x60B2=>0x94DF,\r
-0x6249=>0x94E0,\r
-0x6279=>0x94E1,\r
-0x62AB=>0x94E2,\r
-0x6590=>0x94E3,\r
-0x6BD4=>0x94E4,\r
-0x6CCC=>0x94E5,\r
-0x75B2=>0x94E6,\r
-0x76AE=>0x94E7,\r
-0x7891=>0x94E8,\r
-0x79D8=>0x94E9,\r
-0x7DCB=>0x94EA,\r
-0x7F77=>0x94EB,\r
-0x80A5=>0x94EC,\r
-0x88AB=>0x94ED,\r
-0x8AB9=>0x94EE,\r
-0x8CBB=>0x94EF,\r
-0x907F=>0x94F0,\r
-0x975E=>0x94F1,\r
-0x98DB=>0x94F2,\r
-0x6A0B=>0x94F3,\r
-0x7C38=>0x94F4,\r
-0x5099=>0x94F5,\r
-0x5C3E=>0x94F6,\r
-0x5FAE=>0x94F7,\r
-0x6787=>0x94F8,\r
-0x6BD8=>0x94F9,\r
-0x7435=>0x94FA,\r
-0x7709=>0x94FB,\r
-0x7F8E=>0x94FC,\r
-0x9F3B=>0x9540,\r
-0x67CA=>0x9541,\r
-0x7A17=>0x9542,\r
-0x5339=>0x9543,\r
-0x758B=>0x9544,\r
-0x9AED=>0x9545,\r
-0x5F66=>0x9546,\r
-0x819D=>0x9547,\r
-0x83F1=>0x9548,\r
-0x8098=>0x9549,\r
-0x5F3C=>0x954A,\r
-0x5FC5=>0x954B,\r
-0x7562=>0x954C,\r
-0x7B46=>0x954D,\r
-0x903C=>0x954E,\r
-0x6867=>0x954F,\r
-0x59EB=>0x9550,\r
-0x5A9B=>0x9551,\r
-0x7D10=>0x9552,\r
-0x767E=>0x9553,\r
-0x8B2C=>0x9554,\r
-0x4FF5=>0x9555,\r
-0x5F6A=>0x9556,\r
-0x6A19=>0x9557,\r
-0x6C37=>0x9558,\r
-0x6F02=>0x9559,\r
-0x74E2=>0x955A,\r
-0x7968=>0x955B,\r
-0x8868=>0x955C,\r
-0x8A55=>0x955D,\r
-0x8C79=>0x955E,\r
-0x5EDF=>0x955F,\r
-0x63CF=>0x9560,\r
-0x75C5=>0x9561,\r
-0x79D2=>0x9562,\r
-0x82D7=>0x9563,\r
-0x9328=>0x9564,\r
-0x92F2=>0x9565,\r
-0x849C=>0x9566,\r
-0x86ED=>0x9567,\r
-0x9C2D=>0x9568,\r
-0x54C1=>0x9569,\r
-0x5F6C=>0x956A,\r
-0x658C=>0x956B,\r
-0x6D5C=>0x956C,\r
-0x7015=>0x956D,\r
-0x8CA7=>0x956E,\r
-0x8CD3=>0x956F,\r
-0x983B=>0x9570,\r
-0x654F=>0x9571,\r
-0x74F6=>0x9572,\r
-0x4E0D=>0x9573,\r
-0x4ED8=>0x9574,\r
-0x57E0=>0x9575,\r
-0x592B=>0x9576,\r
-0x5A66=>0x9577,\r
-0x5BCC=>0x9578,\r
-0x51A8=>0x9579,\r
-0x5E03=>0x957A,\r
-0x5E9C=>0x957B,\r
-0x6016=>0x957C,\r
-0x6276=>0x957D,\r
-0x6577=>0x957E,\r
-0x65A7=>0x9580,\r
-0x666E=>0x9581,\r
-0x6D6E=>0x9582,\r
-0x7236=>0x9583,\r
-0x7B26=>0x9584,\r
-0x8150=>0x9585,\r
-0x819A=>0x9586,\r
-0x8299=>0x9587,\r
-0x8B5C=>0x9588,\r
-0x8CA0=>0x9589,\r
-0x8CE6=>0x958A,\r
-0x8D74=>0x958B,\r
-0x961C=>0x958C,\r
-0x9644=>0x958D,\r
-0x4FAE=>0x958E,\r
-0x64AB=>0x958F,\r
-0x6B66=>0x9590,\r
-0x821E=>0x9591,\r
-0x8461=>0x9592,\r
-0x856A=>0x9593,\r
-0x90E8=>0x9594,\r
-0x5C01=>0x9595,\r
-0x6953=>0x9596,\r
-0x98A8=>0x9597,\r
-0x847A=>0x9598,\r
-0x8557=>0x9599,\r
-0x4F0F=>0x959A,\r
-0x526F=>0x959B,\r
-0x5FA9=>0x959C,\r
-0x5E45=>0x959D,\r
-0x670D=>0x959E,\r
-0x798F=>0x959F,\r
-0x8179=>0x95A0,\r
-0x8907=>0x95A1,\r
-0x8986=>0x95A2,\r
-0x6DF5=>0x95A3,\r
-0x5F17=>0x95A4,\r
-0x6255=>0x95A5,\r
-0x6CB8=>0x95A6,\r
-0x4ECF=>0x95A7,\r
-0x7269=>0x95A8,\r
-0x9B92=>0x95A9,\r
-0x5206=>0x95AA,\r
-0x543B=>0x95AB,\r
-0x5674=>0x95AC,\r
-0x58B3=>0x95AD,\r
-0x61A4=>0x95AE,\r
-0x626E=>0x95AF,\r
-0x711A=>0x95B0,\r
-0x596E=>0x95B1,\r
-0x7C89=>0x95B2,\r
-0x7CDE=>0x95B3,\r
-0x7D1B=>0x95B4,\r
-0x96F0=>0x95B5,\r
-0x6587=>0x95B6,\r
-0x805E=>0x95B7,\r
-0x4E19=>0x95B8,\r
-0x4F75=>0x95B9,\r
-0x5175=>0x95BA,\r
-0x5840=>0x95BB,\r
-0x5E63=>0x95BC,\r
-0x5E73=>0x95BD,\r
-0x5F0A=>0x95BE,\r
-0x67C4=>0x95BF,\r
-0x4E26=>0x95C0,\r
-0x853D=>0x95C1,\r
-0x9589=>0x95C2,\r
-0x965B=>0x95C3,\r
-0x7C73=>0x95C4,\r
-0x9801=>0x95C5,\r
-0x50FB=>0x95C6,\r
-0x58C1=>0x95C7,\r
-0x7656=>0x95C8,\r
-0x78A7=>0x95C9,\r
-0x5225=>0x95CA,\r
-0x77A5=>0x95CB,\r
-0x8511=>0x95CC,\r
-0x7B86=>0x95CD,\r
-0x504F=>0x95CE,\r
-0x5909=>0x95CF,\r
-0x7247=>0x95D0,\r
-0x7BC7=>0x95D1,\r
-0x7DE8=>0x95D2,\r
-0x8FBA=>0x95D3,\r
-0x8FD4=>0x95D4,\r
-0x904D=>0x95D5,\r
-0x4FBF=>0x95D6,\r
-0x52C9=>0x95D7,\r
-0x5A29=>0x95D8,\r
-0x5F01=>0x95D9,\r
-0x97AD=>0x95DA,\r
-0x4FDD=>0x95DB,\r
-0x8217=>0x95DC,\r
-0x92EA=>0x95DD,\r
-0x5703=>0x95DE,\r
-0x6355=>0x95DF,\r
-0x6B69=>0x95E0,\r
-0x752B=>0x95E1,\r
-0x88DC=>0x95E2,\r
-0x8F14=>0x95E3,\r
-0x7A42=>0x95E4,\r
-0x52DF=>0x95E5,\r
-0x5893=>0x95E6,\r
-0x6155=>0x95E7,\r
-0x620A=>0x95E8,\r
-0x66AE=>0x95E9,\r
-0x6BCD=>0x95EA,\r
-0x7C3F=>0x95EB,\r
-0x83E9=>0x95EC,\r
-0x5023=>0x95ED,\r
-0x4FF8=>0x95EE,\r
-0x5305=>0x95EF,\r
-0x5446=>0x95F0,\r
-0x5831=>0x95F1,\r
-0x5949=>0x95F2,\r
-0x5B9D=>0x95F3,\r
-0x5CF0=>0x95F4,\r
-0x5CEF=>0x95F5,\r
-0x5D29=>0x95F6,\r
-0x5E96=>0x95F7,\r
-0x62B1=>0x95F8,\r
-0x6367=>0x95F9,\r
-0x653E=>0x95FA,\r
-0x65B9=>0x95FB,\r
-0x670B=>0x95FC,\r
-0x6CD5=>0x9640,\r
-0x6CE1=>0x9641,\r
-0x70F9=>0x9642,\r
-0x7832=>0x9643,\r
-0x7E2B=>0x9644,\r
-0x80DE=>0x9645,\r
-0x82B3=>0x9646,\r
-0x840C=>0x9647,\r
-0x84EC=>0x9648,\r
-0x8702=>0x9649,\r
-0x8912=>0x964A,\r
-0x8A2A=>0x964B,\r
-0x8C4A=>0x964C,\r
-0x90A6=>0x964D,\r
-0x92D2=>0x964E,\r
-0x98FD=>0x964F,\r
-0x9CF3=>0x9650,\r
-0x9D6C=>0x9651,\r
-0x4E4F=>0x9652,\r
-0x4EA1=>0x9653,\r
-0x508D=>0x9654,\r
-0x5256=>0x9655,\r
-0x574A=>0x9656,\r
-0x59A8=>0x9657,\r
-0x5E3D=>0x9658,\r
-0x5FD8=>0x9659,\r
-0x5FD9=>0x965A,\r
-0x623F=>0x965B,\r
-0x66B4=>0x965C,\r
-0x671B=>0x965D,\r
-0x67D0=>0x965E,\r
-0x68D2=>0x965F,\r
-0x5192=>0x9660,\r
-0x7D21=>0x9661,\r
-0x80AA=>0x9662,\r
-0x81A8=>0x9663,\r
-0x8B00=>0x9664,\r
-0x8C8C=>0x9665,\r
-0x8CBF=>0x9666,\r
-0x927E=>0x9667,\r
-0x9632=>0x9668,\r
-0x5420=>0x9669,\r
-0x982C=>0x966A,\r
-0x5317=>0x966B,\r
-0x50D5=>0x966C,\r
-0x535C=>0x966D,\r
-0x58A8=>0x966E,\r
-0x64B2=>0x966F,\r
-0x6734=>0x9670,\r
-0x7267=>0x9671,\r
-0x7766=>0x9672,\r
-0x7A46=>0x9673,\r
-0x91E6=>0x9674,\r
-0x52C3=>0x9675,\r
-0x6CA1=>0x9676,\r
-0x6B86=>0x9677,\r
-0x5800=>0x9678,\r
-0x5E4C=>0x9679,\r
-0x5954=>0x967A,\r
-0x672C=>0x967B,\r
-0x7FFB=>0x967C,\r
-0x51E1=>0x967D,\r
-0x76C6=>0x967E,\r
-0x6469=>0x9680,\r
-0x78E8=>0x9681,\r
-0x9B54=>0x9682,\r
-0x9EBB=>0x9683,\r
-0x57CB=>0x9684,\r
-0x59B9=>0x9685,\r
-0x6627=>0x9686,\r
-0x679A=>0x9687,\r
-0x6BCE=>0x9688,\r
-0x54E9=>0x9689,\r
-0x69D9=>0x968A,\r
-0x5E55=>0x968B,\r
-0x819C=>0x968C,\r
-0x6795=>0x968D,\r
-0x9BAA=>0x968E,\r
-0x67FE=>0x968F,\r
-0x9C52=>0x9690,\r
-0x685D=>0x9691,\r
-0x4EA6=>0x9692,\r
-0x4FE3=>0x9693,\r
-0x53C8=>0x9694,\r
-0x62B9=>0x9695,\r
-0x672B=>0x9696,\r
-0x6CAB=>0x9697,\r
-0x8FC4=>0x9698,\r
-0x4FAD=>0x9699,\r
-0x7E6D=>0x969A,\r
-0x9EBF=>0x969B,\r
-0x4E07=>0x969C,\r
-0x6162=>0x969D,\r
-0x6E80=>0x969E,\r
-0x6F2B=>0x969F,\r
-0x8513=>0x96A0,\r
-0x5473=>0x96A1,\r
-0x672A=>0x96A2,\r
-0x9B45=>0x96A3,\r
-0x5DF3=>0x96A4,\r
-0x7B95=>0x96A5,\r
-0x5CAC=>0x96A6,\r
-0x5BC6=>0x96A7,\r
-0x871C=>0x96A8,\r
-0x6E4A=>0x96A9,\r
-0x84D1=>0x96AA,\r
-0x7A14=>0x96AB,\r
-0x8108=>0x96AC,\r
-0x5999=>0x96AD,\r
-0x7C8D=>0x96AE,\r
-0x6C11=>0x96AF,\r
-0x7720=>0x96B0,\r
-0x52D9=>0x96B1,\r
-0x5922=>0x96B2,\r
-0x7121=>0x96B3,\r
-0x725F=>0x96B4,\r
-0x77DB=>0x96B5,\r
-0x9727=>0x96B6,\r
-0x9D61=>0x96B7,\r
-0x690B=>0x96B8,\r
-0x5A7F=>0x96B9,\r
-0x5A18=>0x96BA,\r
-0x51A5=>0x96BB,\r
-0x540D=>0x96BC,\r
-0x547D=>0x96BD,\r
-0x660E=>0x96BE,\r
-0x76DF=>0x96BF,\r
-0x8FF7=>0x96C0,\r
-0x9298=>0x96C1,\r
-0x9CF4=>0x96C2,\r
-0x59EA=>0x96C3,\r
-0x725D=>0x96C4,\r
-0x6EC5=>0x96C5,\r
-0x514D=>0x96C6,\r
-0x68C9=>0x96C7,\r
-0x7DBF=>0x96C8,\r
-0x7DEC=>0x96C9,\r
-0x9762=>0x96CA,\r
-0x9EBA=>0x96CB,\r
-0x6478=>0x96CC,\r
-0x6A21=>0x96CD,\r
-0x8302=>0x96CE,\r
-0x5984=>0x96CF,\r
-0x5B5F=>0x96D0,\r
-0x6BDB=>0x96D1,\r
-0x731B=>0x96D2,\r
-0x76F2=>0x96D3,\r
-0x7DB2=>0x96D4,\r
-0x8017=>0x96D5,\r
-0x8499=>0x96D6,\r
-0x5132=>0x96D7,\r
-0x6728=>0x96D8,\r
-0x9ED9=>0x96D9,\r
-0x76EE=>0x96DA,\r
-0x6762=>0x96DB,\r
-0x52FF=>0x96DC,\r
-0x9905=>0x96DD,\r
-0x5C24=>0x96DE,\r
-0x623B=>0x96DF,\r
-0x7C7E=>0x96E0,\r
-0x8CB0=>0x96E1,\r
-0x554F=>0x96E2,\r
-0x60B6=>0x96E3,\r
-0x7D0B=>0x96E4,\r
-0x9580=>0x96E5,\r
-0x5301=>0x96E6,\r
-0x4E5F=>0x96E7,\r
-0x51B6=>0x96E8,\r
-0x591C=>0x96E9,\r
-0x723A=>0x96EA,\r
-0x8036=>0x96EB,\r
-0x91CE=>0x96EC,\r
-0x5F25=>0x96ED,\r
-0x77E2=>0x96EE,\r
-0x5384=>0x96EF,\r
-0x5F79=>0x96F0,\r
-0x7D04=>0x96F1,\r
-0x85AC=>0x96F2,\r
-0x8A33=>0x96F3,\r
-0x8E8D=>0x96F4,\r
-0x9756=>0x96F5,\r
-0x67F3=>0x96F6,\r
-0x85AE=>0x96F7,\r
-0x9453=>0x96F8,\r
-0x6109=>0x96F9,\r
-0x6108=>0x96FA,\r
-0x6CB9=>0x96FB,\r
-0x7652=>0x96FC,\r
-0x8AED=>0x9740,\r
-0x8F38=>0x9741,\r
-0x552F=>0x9742,\r
-0x4F51=>0x9743,\r
-0x512A=>0x9744,\r
-0x52C7=>0x9745,\r
-0x53CB=>0x9746,\r
-0x5BA5=>0x9747,\r
-0x5E7D=>0x9748,\r
-0x60A0=>0x9749,\r
-0x6182=>0x974A,\r
-0x63D6=>0x974B,\r
-0x6709=>0x974C,\r
-0x67DA=>0x974D,\r
-0x6E67=>0x974E,\r
-0x6D8C=>0x974F,\r
-0x7336=>0x9750,\r
-0x7337=>0x9751,\r
-0x7531=>0x9752,\r
-0x7950=>0x9753,\r
-0x88D5=>0x9754,\r
-0x8A98=>0x9755,\r
-0x904A=>0x9756,\r
-0x9091=>0x9757,\r
-0x90F5=>0x9758,\r
-0x96C4=>0x9759,\r
-0x878D=>0x975A,\r
-0x5915=>0x975B,\r
-0x4E88=>0x975C,\r
-0x4F59=>0x975D,\r
-0x4E0E=>0x975E,\r
-0x8A89=>0x975F,\r
-0x8F3F=>0x9760,\r
-0x9810=>0x9761,\r
-0x50AD=>0x9762,\r
-0x5E7C=>0x9763,\r
-0x5996=>0x9764,\r
-0x5BB9=>0x9765,\r
-0x5EB8=>0x9766,\r
-0x63DA=>0x9767,\r
-0x63FA=>0x9768,\r
-0x64C1=>0x9769,\r
-0x66DC=>0x976A,\r
-0x694A=>0x976B,\r
-0x69D8=>0x976C,\r
-0x6D0B=>0x976D,\r
-0x6EB6=>0x976E,\r
-0x7194=>0x976F,\r
-0x7528=>0x9770,\r
-0x7AAF=>0x9771,\r
-0x7F8A=>0x9772,\r
-0x8000=>0x9773,\r
-0x8449=>0x9774,\r
-0x84C9=>0x9775,\r
-0x8981=>0x9776,\r
-0x8B21=>0x9777,\r
-0x8E0A=>0x9778,\r
-0x9065=>0x9779,\r
-0x967D=>0x977A,\r
-0x990A=>0x977B,\r
-0x617E=>0x977C,\r
-0x6291=>0x977D,\r
-0x6B32=>0x977E,\r
-0x6C83=>0x9780,\r
-0x6D74=>0x9781,\r
-0x7FCC=>0x9782,\r
-0x7FFC=>0x9783,\r
-0x6DC0=>0x9784,\r
-0x7F85=>0x9785,\r
-0x87BA=>0x9786,\r
-0x88F8=>0x9787,\r
-0x6765=>0x9788,\r
-0x83B1=>0x9789,\r
-0x983C=>0x978A,\r
-0x96F7=>0x978B,\r
-0x6D1B=>0x978C,\r
-0x7D61=>0x978D,\r
-0x843D=>0x978E,\r
-0x916A=>0x978F,\r
-0x4E71=>0x9790,\r
-0x5375=>0x9791,\r
-0x5D50=>0x9792,\r
-0x6B04=>0x9793,\r
-0x6FEB=>0x9794,\r
-0x85CD=>0x9795,\r
-0x862D=>0x9796,\r
-0x89A7=>0x9797,\r
-0x5229=>0x9798,\r
-0x540F=>0x9799,\r
-0x5C65=>0x979A,\r
-0x674E=>0x979B,\r
-0x68A8=>0x979C,\r
-0x7406=>0x979D,\r
-0x7483=>0x979E,\r
-0x75E2=>0x979F,\r
-0x88CF=>0x97A0,\r
-0x88E1=>0x97A1,\r
-0x91CC=>0x97A2,\r
-0x96E2=>0x97A3,\r
-0x9678=>0x97A4,\r
-0x5F8B=>0x97A5,\r
-0x7387=>0x97A6,\r
-0x7ACB=>0x97A7,\r
-0x844E=>0x97A8,\r
-0x63A0=>0x97A9,\r
-0x7565=>0x97AA,\r
-0x5289=>0x97AB,\r
-0x6D41=>0x97AC,\r
-0x6E9C=>0x97AD,\r
-0x7409=>0x97AE,\r
-0x7559=>0x97AF,\r
-0x786B=>0x97B0,\r
-0x7C92=>0x97B1,\r
-0x9686=>0x97B2,\r
-0x7ADC=>0x97B3,\r
-0x9F8D=>0x97B4,\r
-0x4FB6=>0x97B5,\r
-0x616E=>0x97B6,\r
-0x65C5=>0x97B7,\r
-0x865C=>0x97B8,\r
-0x4E86=>0x97B9,\r
-0x4EAE=>0x97BA,\r
-0x50DA=>0x97BB,\r
-0x4E21=>0x97BC,\r
-0x51CC=>0x97BD,\r
-0x5BEE=>0x97BE,\r
-0x6599=>0x97BF,\r
-0x6881=>0x97C0,\r
-0x6DBC=>0x97C1,\r
-0x731F=>0x97C2,\r
-0x7642=>0x97C3,\r
-0x77AD=>0x97C4,\r
-0x7A1C=>0x97C5,\r
-0x7CE7=>0x97C6,\r
-0x826F=>0x97C7,\r
-0x8AD2=>0x97C8,\r
-0x907C=>0x97C9,\r
-0x91CF=>0x97CA,\r
-0x9675=>0x97CB,\r
-0x9818=>0x97CC,\r
-0x529B=>0x97CD,\r
-0x7DD1=>0x97CE,\r
-0x502B=>0x97CF,\r
-0x5398=>0x97D0,\r
-0x6797=>0x97D1,\r
-0x6DCB=>0x97D2,\r
-0x71D0=>0x97D3,\r
-0x7433=>0x97D4,\r
-0x81E8=>0x97D5,\r
-0x8F2A=>0x97D6,\r
-0x96A3=>0x97D7,\r
-0x9C57=>0x97D8,\r
-0x9E9F=>0x97D9,\r
-0x7460=>0x97DA,\r
-0x5841=>0x97DB,\r
-0x6D99=>0x97DC,\r
-0x7D2F=>0x97DD,\r
-0x985E=>0x97DE,\r
-0x4EE4=>0x97DF,\r
-0x4F36=>0x97E0,\r
-0x4F8B=>0x97E1,\r
-0x51B7=>0x97E2,\r
-0x52B1=>0x97E3,\r
-0x5DBA=>0x97E4,\r
-0x601C=>0x97E5,\r
-0x73B2=>0x97E6,\r
-0x793C=>0x97E7,\r
-0x82D3=>0x97E8,\r
-0x9234=>0x97E9,\r
-0x96B7=>0x97EA,\r
-0x96F6=>0x97EB,\r
-0x970A=>0x97EC,\r
-0x9E97=>0x97ED,\r
-0x9F62=>0x97EE,\r
-0x66A6=>0x97EF,\r
-0x6B74=>0x97F0,\r
-0x5217=>0x97F1,\r
-0x52A3=>0x97F2,\r
-0x70C8=>0x97F3,\r
-0x88C2=>0x97F4,\r
-0x5EC9=>0x97F5,\r
-0x604B=>0x97F6,\r
-0x6190=>0x97F7,\r
-0x6F23=>0x97F8,\r
-0x7149=>0x97F9,\r
-0x7C3E=>0x97FA,\r
-0x7DF4=>0x97FB,\r
-0x806F=>0x97FC,\r
-0x84EE=>0x9840,\r
-0x9023=>0x9841,\r
-0x932C=>0x9842,\r
-0x5442=>0x9843,\r
-0x9B6F=>0x9844,\r
-0x6AD3=>0x9845,\r
-0x7089=>0x9846,\r
-0x8CC2=>0x9847,\r
-0x8DEF=>0x9848,\r
-0x9732=>0x9849,\r
-0x52B4=>0x984A,\r
-0x5A41=>0x984B,\r
-0x5ECA=>0x984C,\r
-0x5F04=>0x984D,\r
-0x6717=>0x984E,\r
-0x697C=>0x984F,\r
-0x6994=>0x9850,\r
-0x6D6A=>0x9851,\r
-0x6F0F=>0x9852,\r
-0x7262=>0x9853,\r
-0x72FC=>0x9854,\r
-0x7BED=>0x9855,\r
-0x8001=>0x9856,\r
-0x807E=>0x9857,\r
-0x874B=>0x9858,\r
-0x90CE=>0x9859,\r
-0x516D=>0x985A,\r
-0x9E93=>0x985B,\r
-0x7984=>0x985C,\r
-0x808B=>0x985D,\r
-0x9332=>0x985E,\r
-0x8AD6=>0x985F,\r
-0x502D=>0x9860,\r
-0x548C=>0x9861,\r
-0x8A71=>0x9862,\r
-0x6B6A=>0x9863,\r
-0x8CC4=>0x9864,\r
-0x8107=>0x9865,\r
-0x60D1=>0x9866,\r
-0x67A0=>0x9867,\r
-0x9DF2=>0x9868,\r
-0x4E99=>0x9869,\r
-0x4E98=>0x986A,\r
-0x9C10=>0x986B,\r
-0x8A6B=>0x986C,\r
-0x85C1=>0x986D,\r
-0x8568=>0x986E,\r
-0x6900=>0x986F,\r
-0x6E7E=>0x9870,\r
-0x7897=>0x9871,\r
-0x8155=>0x9872,\r
-0x5F0C=>0x989F,\r
-0x4E10=>0x98A0,\r
-0x4E15=>0x98A1,\r
-0x4E2A=>0x98A2,\r
-0x4E31=>0x98A3,\r
-0x4E36=>0x98A4,\r
-0x4E3C=>0x98A5,\r
-0x4E3F=>0x98A6,\r
-0x4E42=>0x98A7,\r
-0x4E56=>0x98A8,\r
-0x4E58=>0x98A9,\r
-0x4E82=>0x98AA,\r
-0x4E85=>0x98AB,\r
-0x8C6B=>0x98AC,\r
-0x4E8A=>0x98AD,\r
-0x8212=>0x98AE,\r
-0x5F0D=>0x98AF,\r
-0x4E8E=>0x98B0,\r
-0x4E9E=>0x98B1,\r
-0x4E9F=>0x98B2,\r
-0x4EA0=>0x98B3,\r
-0x4EA2=>0x98B4,\r
-0x4EB0=>0x98B5,\r
-0x4EB3=>0x98B6,\r
-0x4EB6=>0x98B7,\r
-0x4ECE=>0x98B8,\r
-0x4ECD=>0x98B9,\r
-0x4EC4=>0x98BA,\r
-0x4EC6=>0x98BB,\r
-0x4EC2=>0x98BC,\r
-0x4ED7=>0x98BD,\r
-0x4EDE=>0x98BE,\r
-0x4EED=>0x98BF,\r
-0x4EDF=>0x98C0,\r
-0x4EF7=>0x98C1,\r
-0x4F09=>0x98C2,\r
-0x4F5A=>0x98C3,\r
-0x4F30=>0x98C4,\r
-0x4F5B=>0x98C5,\r
-0x4F5D=>0x98C6,\r
-0x4F57=>0x98C7,\r
-0x4F47=>0x98C8,\r
-0x4F76=>0x98C9,\r
-0x4F88=>0x98CA,\r
-0x4F8F=>0x98CB,\r
-0x4F98=>0x98CC,\r
-0x4F7B=>0x98CD,\r
-0x4F69=>0x98CE,\r
-0x4F70=>0x98CF,\r
-0x4F91=>0x98D0,\r
-0x4F6F=>0x98D1,\r
-0x4F86=>0x98D2,\r
-0x4F96=>0x98D3,\r
-0x5118=>0x98D4,\r
-0x4FD4=>0x98D5,\r
-0x4FDF=>0x98D6,\r
-0x4FCE=>0x98D7,\r
-0x4FD8=>0x98D8,\r
-0x4FDB=>0x98D9,\r
-0x4FD1=>0x98DA,\r
-0x4FDA=>0x98DB,\r
-0x4FD0=>0x98DC,\r
-0x4FE4=>0x98DD,\r
-0x4FE5=>0x98DE,\r
-0x501A=>0x98DF,\r
-0x5028=>0x98E0,\r
-0x5014=>0x98E1,\r
-0x502A=>0x98E2,\r
-0x5025=>0x98E3,\r
-0x5005=>0x98E4,\r
-0x4F1C=>0x98E5,\r
-0x4FF6=>0x98E6,\r
-0x5021=>0x98E7,\r
-0x5029=>0x98E8,\r
-0x502C=>0x98E9,\r
-0x4FFE=>0x98EA,\r
-0x4FEF=>0x98EB,\r
-0x5011=>0x98EC,\r
-0x5006=>0x98ED,\r
-0x5043=>0x98EE,\r
-0x5047=>0x98EF,\r
-0x6703=>0x98F0,\r
-0x5055=>0x98F1,\r
-0x5050=>0x98F2,\r
-0x5048=>0x98F3,\r
-0x505A=>0x98F4,\r
-0x5056=>0x98F5,\r
-0x506C=>0x98F6,\r
-0x5078=>0x98F7,\r
-0x5080=>0x98F8,\r
-0x509A=>0x98F9,\r
-0x5085=>0x98FA,\r
-0x50B4=>0x98FB,\r
-0x50B2=>0x98FC,\r
-0x50C9=>0x9940,\r
-0x50CA=>0x9941,\r
-0x50B3=>0x9942,\r
-0x50C2=>0x9943,\r
-0x50D6=>0x9944,\r
-0x50DE=>0x9945,\r
-0x50E5=>0x9946,\r
-0x50ED=>0x9947,\r
-0x50E3=>0x9948,\r
-0x50EE=>0x9949,\r
-0x50F9=>0x994A,\r
-0x50F5=>0x994B,\r
-0x5109=>0x994C,\r
-0x5101=>0x994D,\r
-0x5102=>0x994E,\r
-0x5116=>0x994F,\r
-0x5115=>0x9950,\r
-0x5114=>0x9951,\r
-0x511A=>0x9952,\r
-0x5121=>0x9953,\r
-0x513A=>0x9954,\r
-0x5137=>0x9955,\r
-0x513C=>0x9956,\r
-0x513B=>0x9957,\r
-0x513F=>0x9958,\r
-0x5140=>0x9959,\r
-0x5152=>0x995A,\r
-0x514C=>0x995B,\r
-0x5154=>0x995C,\r
-0x5162=>0x995D,\r
-0x7AF8=>0x995E,\r
-0x5169=>0x995F,\r
-0x516A=>0x9960,\r
-0x516E=>0x9961,\r
-0x5180=>0x9962,\r
-0x5182=>0x9963,\r
-0x56D8=>0x9964,\r
-0x518C=>0x9965,\r
-0x5189=>0x9966,\r
-0x518F=>0x9967,\r
-0x5191=>0x9968,\r
-0x5193=>0x9969,\r
-0x5195=>0x996A,\r
-0x5196=>0x996B,\r
-0x51A4=>0x996C,\r
-0x51A6=>0x996D,\r
-0x51A2=>0x996E,\r
-0x51A9=>0x996F,\r
-0x51AA=>0x9970,\r
-0x51AB=>0x9971,\r
-0x51B3=>0x9972,\r
-0x51B1=>0x9973,\r
-0x51B2=>0x9974,\r
-0x51B0=>0x9975,\r
-0x51B5=>0x9976,\r
-0x51BD=>0x9977,\r
-0x51C5=>0x9978,\r
-0x51C9=>0x9979,\r
-0x51DB=>0x997A,\r
-0x51E0=>0x997B,\r
-0x8655=>0x997C,\r
-0x51E9=>0x997D,\r
-0x51ED=>0x997E,\r
-0x51F0=>0x9980,\r
-0x51F5=>0x9981,\r
-0x51FE=>0x9982,\r
-0x5204=>0x9983,\r
-0x520B=>0x9984,\r
-0x5214=>0x9985,\r
-0x520E=>0x9986,\r
-0x5227=>0x9987,\r
-0x522A=>0x9988,\r
-0x522E=>0x9989,\r
-0x5233=>0x998A,\r
-0x5239=>0x998B,\r
-0x524F=>0x998C,\r
-0x5244=>0x998D,\r
-0x524B=>0x998E,\r
-0x524C=>0x998F,\r
-0x525E=>0x9990,\r
-0x5254=>0x9991,\r
-0x526A=>0x9992,\r
-0x5274=>0x9993,\r
-0x5269=>0x9994,\r
-0x5273=>0x9995,\r
-0x527F=>0x9996,\r
-0x527D=>0x9997,\r
-0x528D=>0x9998,\r
-0x5294=>0x9999,\r
-0x5292=>0x999A,\r
-0x5271=>0x999B,\r
-0x5288=>0x999C,\r
-0x5291=>0x999D,\r
-0x8FA8=>0x999E,\r
-0x8FA7=>0x999F,\r
-0x52AC=>0x99A0,\r
-0x52AD=>0x99A1,\r
-0x52BC=>0x99A2,\r
-0x52B5=>0x99A3,\r
-0x52C1=>0x99A4,\r
-0x52CD=>0x99A5,\r
-0x52D7=>0x99A6,\r
-0x52DE=>0x99A7,\r
-0x52E3=>0x99A8,\r
-0x52E6=>0x99A9,\r
-0x98ED=>0x99AA,\r
-0x52E0=>0x99AB,\r
-0x52F3=>0x99AC,\r
-0x52F5=>0x99AD,\r
-0x52F8=>0x99AE,\r
-0x52F9=>0x99AF,\r
-0x5306=>0x99B0,\r
-0x5308=>0x99B1,\r
-0x7538=>0x99B2,\r
-0x530D=>0x99B3,\r
-0x5310=>0x99B4,\r
-0x530F=>0x99B5,\r
-0x5315=>0x99B6,\r
-0x531A=>0x99B7,\r
-0x5323=>0x99B8,\r
-0x532F=>0x99B9,\r
-0x5331=>0x99BA,\r
-0x5333=>0x99BB,\r
-0x5338=>0x99BC,\r
-0x5340=>0x99BD,\r
-0x5346=>0x99BE,\r
-0x5345=>0x99BF,\r
-0x4E17=>0x99C0,\r
-0x5349=>0x99C1,\r
-0x534D=>0x99C2,\r
-0x51D6=>0x99C3,\r
-0x535E=>0x99C4,\r
-0x5369=>0x99C5,\r
-0x536E=>0x99C6,\r
-0x5918=>0x99C7,\r
-0x537B=>0x99C8,\r
-0x5377=>0x99C9,\r
-0x5382=>0x99CA,\r
-0x5396=>0x99CB,\r
-0x53A0=>0x99CC,\r
-0x53A6=>0x99CD,\r
-0x53A5=>0x99CE,\r
-0x53AE=>0x99CF,\r
-0x53B0=>0x99D0,\r
-0x53B6=>0x99D1,\r
-0x53C3=>0x99D2,\r
-0x7C12=>0x99D3,\r
-0x96D9=>0x99D4,\r
-0x53DF=>0x99D5,\r
-0x66FC=>0x99D6,\r
-0x71EE=>0x99D7,\r
-0x53EE=>0x99D8,\r
-0x53E8=>0x99D9,\r
-0x53ED=>0x99DA,\r
-0x53FA=>0x99DB,\r
-0x5401=>0x99DC,\r
-0x543D=>0x99DD,\r
-0x5440=>0x99DE,\r
-0x542C=>0x99DF,\r
-0x542D=>0x99E0,\r
-0x543C=>0x99E1,\r
-0x542E=>0x99E2,\r
-0x5436=>0x99E3,\r
-0x5429=>0x99E4,\r
-0x541D=>0x99E5,\r
-0x544E=>0x99E6,\r
-0x548F=>0x99E7,\r
-0x5475=>0x99E8,\r
-0x548E=>0x99E9,\r
-0x545F=>0x99EA,\r
-0x5471=>0x99EB,\r
-0x5477=>0x99EC,\r
-0x5470=>0x99ED,\r
-0x5492=>0x99EE,\r
-0x547B=>0x99EF,\r
-0x5480=>0x99F0,\r
-0x5476=>0x99F1,\r
-0x5484=>0x99F2,\r
-0x5490=>0x99F3,\r
-0x5486=>0x99F4,\r
-0x54C7=>0x99F5,\r
-0x54A2=>0x99F6,\r
-0x54B8=>0x99F7,\r
-0x54A5=>0x99F8,\r
-0x54AC=>0x99F9,\r
-0x54C4=>0x99FA,\r
-0x54C8=>0x99FB,\r
-0x54A8=>0x99FC,\r
-0x54AB=>0x9A40,\r
-0x54C2=>0x9A41,\r
-0x54A4=>0x9A42,\r
-0x54BE=>0x9A43,\r
-0x54BC=>0x9A44,\r
-0x54D8=>0x9A45,\r
-0x54E5=>0x9A46,\r
-0x54E6=>0x9A47,\r
-0x550F=>0x9A48,\r
-0x5514=>0x9A49,\r
-0x54FD=>0x9A4A,\r
-0x54EE=>0x9A4B,\r
-0x54ED=>0x9A4C,\r
-0x54FA=>0x9A4D,\r
-0x54E2=>0x9A4E,\r
-0x5539=>0x9A4F,\r
-0x5540=>0x9A50,\r
-0x5563=>0x9A51,\r
-0x554C=>0x9A52,\r
-0x552E=>0x9A53,\r
-0x555C=>0x9A54,\r
-0x5545=>0x9A55,\r
-0x5556=>0x9A56,\r
-0x5557=>0x9A57,\r
-0x5538=>0x9A58,\r
-0x5533=>0x9A59,\r
-0x555D=>0x9A5A,\r
-0x5599=>0x9A5B,\r
-0x5580=>0x9A5C,\r
-0x54AF=>0x9A5D,\r
-0x558A=>0x9A5E,\r
-0x559F=>0x9A5F,\r
-0x557B=>0x9A60,\r
-0x557E=>0x9A61,\r
-0x5598=>0x9A62,\r
-0x559E=>0x9A63,\r
-0x55AE=>0x9A64,\r
-0x557C=>0x9A65,\r
-0x5583=>0x9A66,\r
-0x55A9=>0x9A67,\r
-0x5587=>0x9A68,\r
-0x55A8=>0x9A69,\r
-0x55DA=>0x9A6A,\r
-0x55C5=>0x9A6B,\r
-0x55DF=>0x9A6C,\r
-0x55C4=>0x9A6D,\r
-0x55DC=>0x9A6E,\r
-0x55E4=>0x9A6F,\r
-0x55D4=>0x9A70,\r
-0x5614=>0x9A71,\r
-0x55F7=>0x9A72,\r
-0x5616=>0x9A73,\r
-0x55FE=>0x9A74,\r
-0x55FD=>0x9A75,\r
-0x561B=>0x9A76,\r
-0x55F9=>0x9A77,\r
-0x564E=>0x9A78,\r
-0x5650=>0x9A79,\r
-0x71DF=>0x9A7A,\r
-0x5634=>0x9A7B,\r
-0x5636=>0x9A7C,\r
-0x5632=>0x9A7D,\r
-0x5638=>0x9A7E,\r
-0x566B=>0x9A80,\r
-0x5664=>0x9A81,\r
-0x562F=>0x9A82,\r
-0x566C=>0x9A83,\r
-0x566A=>0x9A84,\r
-0x5686=>0x9A85,\r
-0x5680=>0x9A86,\r
-0x568A=>0x9A87,\r
-0x56A0=>0x9A88,\r
-0x5694=>0x9A89,\r
-0x568F=>0x9A8A,\r
-0x56A5=>0x9A8B,\r
-0x56AE=>0x9A8C,\r
-0x56B6=>0x9A8D,\r
-0x56B4=>0x9A8E,\r
-0x56C2=>0x9A8F,\r
-0x56BC=>0x9A90,\r
-0x56C1=>0x9A91,\r
-0x56C3=>0x9A92,\r
-0x56C0=>0x9A93,\r
-0x56C8=>0x9A94,\r
-0x56CE=>0x9A95,\r
-0x56D1=>0x9A96,\r
-0x56D3=>0x9A97,\r
-0x56D7=>0x9A98,\r
-0x56EE=>0x9A99,\r
-0x56F9=>0x9A9A,\r
-0x5700=>0x9A9B,\r
-0x56FF=>0x9A9C,\r
-0x5704=>0x9A9D,\r
-0x5709=>0x9A9E,\r
-0x5708=>0x9A9F,\r
-0x570B=>0x9AA0,\r
-0x570D=>0x9AA1,\r
-0x5713=>0x9AA2,\r
-0x5718=>0x9AA3,\r
-0x5716=>0x9AA4,\r
-0x55C7=>0x9AA5,\r
-0x571C=>0x9AA6,\r
-0x5726=>0x9AA7,\r
-0x5737=>0x9AA8,\r
-0x5738=>0x9AA9,\r
-0x574E=>0x9AAA,\r
-0x573B=>0x9AAB,\r
-0x5740=>0x9AAC,\r
-0x574F=>0x9AAD,\r
-0x5769=>0x9AAE,\r
-0x57C0=>0x9AAF,\r
-0x5788=>0x9AB0,\r
-0x5761=>0x9AB1,\r
-0x577F=>0x9AB2,\r
-0x5789=>0x9AB3,\r
-0x5793=>0x9AB4,\r
-0x57A0=>0x9AB5,\r
-0x57B3=>0x9AB6,\r
-0x57A4=>0x9AB7,\r
-0x57AA=>0x9AB8,\r
-0x57B0=>0x9AB9,\r
-0x57C3=>0x9ABA,\r
-0x57C6=>0x9ABB,\r
-0x57D4=>0x9ABC,\r
-0x57D2=>0x9ABD,\r
-0x57D3=>0x9ABE,\r
-0x580A=>0x9ABF,\r
-0x57D6=>0x9AC0,\r
-0x57E3=>0x9AC1,\r
-0x580B=>0x9AC2,\r
-0x5819=>0x9AC3,\r
-0x581D=>0x9AC4,\r
-0x5872=>0x9AC5,\r
-0x5821=>0x9AC6,\r
-0x5862=>0x9AC7,\r
-0x584B=>0x9AC8,\r
-0x5870=>0x9AC9,\r
-0x6BC0=>0x9ACA,\r
-0x5852=>0x9ACB,\r
-0x583D=>0x9ACC,\r
-0x5879=>0x9ACD,\r
-0x5885=>0x9ACE,\r
-0x58B9=>0x9ACF,\r
-0x589F=>0x9AD0,\r
-0x58AB=>0x9AD1,\r
-0x58BA=>0x9AD2,\r
-0x58DE=>0x9AD3,\r
-0x58BB=>0x9AD4,\r
-0x58B8=>0x9AD5,\r
-0x58AE=>0x9AD6,\r
-0x58C5=>0x9AD7,\r
-0x58D3=>0x9AD8,\r
-0x58D1=>0x9AD9,\r
-0x58D7=>0x9ADA,\r
-0x58D9=>0x9ADB,\r
-0x58D8=>0x9ADC,\r
-0x58E5=>0x9ADD,\r
-0x58DC=>0x9ADE,\r
-0x58E4=>0x9ADF,\r
-0x58DF=>0x9AE0,\r
-0x58EF=>0x9AE1,\r
-0x58FA=>0x9AE2,\r
-0x58F9=>0x9AE3,\r
-0x58FB=>0x9AE4,\r
-0x58FC=>0x9AE5,\r
-0x58FD=>0x9AE6,\r
-0x5902=>0x9AE7,\r
-0x590A=>0x9AE8,\r
-0x5910=>0x9AE9,\r
-0x591B=>0x9AEA,\r
-0x68A6=>0x9AEB,\r
-0x5925=>0x9AEC,\r
-0x592C=>0x9AED,\r
-0x592D=>0x9AEE,\r
-0x5932=>0x9AEF,\r
-0x5938=>0x9AF0,\r
-0x593E=>0x9AF1,\r
-0x7AD2=>0x9AF2,\r
-0x5955=>0x9AF3,\r
-0x5950=>0x9AF4,\r
-0x594E=>0x9AF5,\r
-0x595A=>0x9AF6,\r
-0x5958=>0x9AF7,\r
-0x5962=>0x9AF8,\r
-0x5960=>0x9AF9,\r
-0x5967=>0x9AFA,\r
-0x596C=>0x9AFB,\r
-0x5969=>0x9AFC,\r
-0x5978=>0x9B40,\r
-0x5981=>0x9B41,\r
-0x599D=>0x9B42,\r
-0x4F5E=>0x9B43,\r
-0x4FAB=>0x9B44,\r
-0x59A3=>0x9B45,\r
-0x59B2=>0x9B46,\r
-0x59C6=>0x9B47,\r
-0x59E8=>0x9B48,\r
-0x59DC=>0x9B49,\r
-0x598D=>0x9B4A,\r
-0x59D9=>0x9B4B,\r
-0x59DA=>0x9B4C,\r
-0x5A25=>0x9B4D,\r
-0x5A1F=>0x9B4E,\r
-0x5A11=>0x9B4F,\r
-0x5A1C=>0x9B50,\r
-0x5A09=>0x9B51,\r
-0x5A1A=>0x9B52,\r
-0x5A40=>0x9B53,\r
-0x5A6C=>0x9B54,\r
-0x5A49=>0x9B55,\r
-0x5A35=>0x9B56,\r
-0x5A36=>0x9B57,\r
-0x5A62=>0x9B58,\r
-0x5A6A=>0x9B59,\r
-0x5A9A=>0x9B5A,\r
-0x5ABC=>0x9B5B,\r
-0x5ABE=>0x9B5C,\r
-0x5ACB=>0x9B5D,\r
-0x5AC2=>0x9B5E,\r
-0x5ABD=>0x9B5F,\r
-0x5AE3=>0x9B60,\r
-0x5AD7=>0x9B61,\r
-0x5AE6=>0x9B62,\r
-0x5AE9=>0x9B63,\r
-0x5AD6=>0x9B64,\r
-0x5AFA=>0x9B65,\r
-0x5AFB=>0x9B66,\r
-0x5B0C=>0x9B67,\r
-0x5B0B=>0x9B68,\r
-0x5B16=>0x9B69,\r
-0x5B32=>0x9B6A,\r
-0x5AD0=>0x9B6B,\r
-0x5B2A=>0x9B6C,\r
-0x5B36=>0x9B6D,\r
-0x5B3E=>0x9B6E,\r
-0x5B43=>0x9B6F,\r
-0x5B45=>0x9B70,\r
-0x5B40=>0x9B71,\r
-0x5B51=>0x9B72,\r
-0x5B55=>0x9B73,\r
-0x5B5A=>0x9B74,\r
-0x5B5B=>0x9B75,\r
-0x5B65=>0x9B76,\r
-0x5B69=>0x9B77,\r
-0x5B70=>0x9B78,\r
-0x5B73=>0x9B79,\r
-0x5B75=>0x9B7A,\r
-0x5B78=>0x9B7B,\r
-0x6588=>0x9B7C,\r
-0x5B7A=>0x9B7D,\r
-0x5B80=>0x9B7E,\r
-0x5B83=>0x9B80,\r
-0x5BA6=>0x9B81,\r
-0x5BB8=>0x9B82,\r
-0x5BC3=>0x9B83,\r
-0x5BC7=>0x9B84,\r
-0x5BC9=>0x9B85,\r
-0x5BD4=>0x9B86,\r
-0x5BD0=>0x9B87,\r
-0x5BE4=>0x9B88,\r
-0x5BE6=>0x9B89,\r
-0x5BE2=>0x9B8A,\r
-0x5BDE=>0x9B8B,\r
-0x5BE5=>0x9B8C,\r
-0x5BEB=>0x9B8D,\r
-0x5BF0=>0x9B8E,\r
-0x5BF6=>0x9B8F,\r
-0x5BF3=>0x9B90,\r
-0x5C05=>0x9B91,\r
-0x5C07=>0x9B92,\r
-0x5C08=>0x9B93,\r
-0x5C0D=>0x9B94,\r
-0x5C13=>0x9B95,\r
-0x5C20=>0x9B96,\r
-0x5C22=>0x9B97,\r
-0x5C28=>0x9B98,\r
-0x5C38=>0x9B99,\r
-0x5C39=>0x9B9A,\r
-0x5C41=>0x9B9B,\r
-0x5C46=>0x9B9C,\r
-0x5C4E=>0x9B9D,\r
-0x5C53=>0x9B9E,\r
-0x5C50=>0x9B9F,\r
-0x5C4F=>0x9BA0,\r
-0x5B71=>0x9BA1,\r
-0x5C6C=>0x9BA2,\r
-0x5C6E=>0x9BA3,\r
-0x4E62=>0x9BA4,\r
-0x5C76=>0x9BA5,\r
-0x5C79=>0x9BA6,\r
-0x5C8C=>0x9BA7,\r
-0x5C91=>0x9BA8,\r
-0x5C94=>0x9BA9,\r
-0x599B=>0x9BAA,\r
-0x5CAB=>0x9BAB,\r
-0x5CBB=>0x9BAC,\r
-0x5CB6=>0x9BAD,\r
-0x5CBC=>0x9BAE,\r
-0x5CB7=>0x9BAF,\r
-0x5CC5=>0x9BB0,\r
-0x5CBE=>0x9BB1,\r
-0x5CC7=>0x9BB2,\r
-0x5CD9=>0x9BB3,\r
-0x5CE9=>0x9BB4,\r
-0x5CFD=>0x9BB5,\r
-0x5CFA=>0x9BB6,\r
-0x5CED=>0x9BB7,\r
-0x5D8C=>0x9BB8,\r
-0x5CEA=>0x9BB9,\r
-0x5D0B=>0x9BBA,\r
-0x5D15=>0x9BBB,\r
-0x5D17=>0x9BBC,\r
-0x5D5C=>0x9BBD,\r
-0x5D1F=>0x9BBE,\r
-0x5D1B=>0x9BBF,\r
-0x5D11=>0x9BC0,\r
-0x5D14=>0x9BC1,\r
-0x5D22=>0x9BC2,\r
-0x5D1A=>0x9BC3,\r
-0x5D19=>0x9BC4,\r
-0x5D18=>0x9BC5,\r
-0x5D4C=>0x9BC6,\r
-0x5D52=>0x9BC7,\r
-0x5D4E=>0x9BC8,\r
-0x5D4B=>0x9BC9,\r
-0x5D6C=>0x9BCA,\r
-0x5D73=>0x9BCB,\r
-0x5D76=>0x9BCC,\r
-0x5D87=>0x9BCD,\r
-0x5D84=>0x9BCE,\r
-0x5D82=>0x9BCF,\r
-0x5DA2=>0x9BD0,\r
-0x5D9D=>0x9BD1,\r
-0x5DAC=>0x9BD2,\r
-0x5DAE=>0x9BD3,\r
-0x5DBD=>0x9BD4,\r
-0x5D90=>0x9BD5,\r
-0x5DB7=>0x9BD6,\r
-0x5DBC=>0x9BD7,\r
-0x5DC9=>0x9BD8,\r
-0x5DCD=>0x9BD9,\r
-0x5DD3=>0x9BDA,\r
-0x5DD2=>0x9BDB,\r
-0x5DD6=>0x9BDC,\r
-0x5DDB=>0x9BDD,\r
-0x5DEB=>0x9BDE,\r
-0x5DF2=>0x9BDF,\r
-0x5DF5=>0x9BE0,\r
-0x5E0B=>0x9BE1,\r
-0x5E1A=>0x9BE2,\r
-0x5E19=>0x9BE3,\r
-0x5E11=>0x9BE4,\r
-0x5E1B=>0x9BE5,\r
-0x5E36=>0x9BE6,\r
-0x5E37=>0x9BE7,\r
-0x5E44=>0x9BE8,\r
-0x5E43=>0x9BE9,\r
-0x5E40=>0x9BEA,\r
-0x5E4E=>0x9BEB,\r
-0x5E57=>0x9BEC,\r
-0x5E54=>0x9BED,\r
-0x5E5F=>0x9BEE,\r
-0x5E62=>0x9BEF,\r
-0x5E64=>0x9BF0,\r
-0x5E47=>0x9BF1,\r
-0x5E75=>0x9BF2,\r
-0x5E76=>0x9BF3,\r
-0x5E7A=>0x9BF4,\r
-0x9EBC=>0x9BF5,\r
-0x5E7F=>0x9BF6,\r
-0x5EA0=>0x9BF7,\r
-0x5EC1=>0x9BF8,\r
-0x5EC2=>0x9BF9,\r
-0x5EC8=>0x9BFA,\r
-0x5ED0=>0x9BFB,\r
-0x5ECF=>0x9BFC,\r
-0x5ED6=>0x9C40,\r
-0x5EE3=>0x9C41,\r
-0x5EDD=>0x9C42,\r
-0x5EDA=>0x9C43,\r
-0x5EDB=>0x9C44,\r
-0x5EE2=>0x9C45,\r
-0x5EE1=>0x9C46,\r
-0x5EE8=>0x9C47,\r
-0x5EE9=>0x9C48,\r
-0x5EEC=>0x9C49,\r
-0x5EF1=>0x9C4A,\r
-0x5EF3=>0x9C4B,\r
-0x5EF0=>0x9C4C,\r
-0x5EF4=>0x9C4D,\r
-0x5EF8=>0x9C4E,\r
-0x5EFE=>0x9C4F,\r
-0x5F03=>0x9C50,\r
-0x5F09=>0x9C51,\r
-0x5F5D=>0x9C52,\r
-0x5F5C=>0x9C53,\r
-0x5F0B=>0x9C54,\r
-0x5F11=>0x9C55,\r
-0x5F16=>0x9C56,\r
-0x5F29=>0x9C57,\r
-0x5F2D=>0x9C58,\r
-0x5F38=>0x9C59,\r
-0x5F41=>0x9C5A,\r
-0x5F48=>0x9C5B,\r
-0x5F4C=>0x9C5C,\r
-0x5F4E=>0x9C5D,\r
-0x5F2F=>0x9C5E,\r
-0x5F51=>0x9C5F,\r
-0x5F56=>0x9C60,\r
-0x5F57=>0x9C61,\r
-0x5F59=>0x9C62,\r
-0x5F61=>0x9C63,\r
-0x5F6D=>0x9C64,\r
-0x5F73=>0x9C65,\r
-0x5F77=>0x9C66,\r
-0x5F83=>0x9C67,\r
-0x5F82=>0x9C68,\r
-0x5F7F=>0x9C69,\r
-0x5F8A=>0x9C6A,\r
-0x5F88=>0x9C6B,\r
-0x5F91=>0x9C6C,\r
-0x5F87=>0x9C6D,\r
-0x5F9E=>0x9C6E,\r
-0x5F99=>0x9C6F,\r
-0x5F98=>0x9C70,\r
-0x5FA0=>0x9C71,\r
-0x5FA8=>0x9C72,\r
-0x5FAD=>0x9C73,\r
-0x5FBC=>0x9C74,\r
-0x5FD6=>0x9C75,\r
-0x5FFB=>0x9C76,\r
-0x5FE4=>0x9C77,\r
-0x5FF8=>0x9C78,\r
-0x5FF1=>0x9C79,\r
-0x5FDD=>0x9C7A,\r
-0x60B3=>0x9C7B,\r
-0x5FFF=>0x9C7C,\r
-0x6021=>0x9C7D,\r
-0x6060=>0x9C7E,\r
-0x6019=>0x9C80,\r
-0x6010=>0x9C81,\r
-0x6029=>0x9C82,\r
-0x600E=>0x9C83,\r
-0x6031=>0x9C84,\r
-0x601B=>0x9C85,\r
-0x6015=>0x9C86,\r
-0x602B=>0x9C87,\r
-0x6026=>0x9C88,\r
-0x600F=>0x9C89,\r
-0x603A=>0x9C8A,\r
-0x605A=>0x9C8B,\r
-0x6041=>0x9C8C,\r
-0x606A=>0x9C8D,\r
-0x6077=>0x9C8E,\r
-0x605F=>0x9C8F,\r
-0x604A=>0x9C90,\r
-0x6046=>0x9C91,\r
-0x604D=>0x9C92,\r
-0x6063=>0x9C93,\r
-0x6043=>0x9C94,\r
-0x6064=>0x9C95,\r
-0x6042=>0x9C96,\r
-0x606C=>0x9C97,\r
-0x606B=>0x9C98,\r
-0x6059=>0x9C99,\r
-0x6081=>0x9C9A,\r
-0x608D=>0x9C9B,\r
-0x60E7=>0x9C9C,\r
-0x6083=>0x9C9D,\r
-0x609A=>0x9C9E,\r
-0x6084=>0x9C9F,\r
-0x609B=>0x9CA0,\r
-0x6096=>0x9CA1,\r
-0x6097=>0x9CA2,\r
-0x6092=>0x9CA3,\r
-0x60A7=>0x9CA4,\r
-0x608B=>0x9CA5,\r
-0x60E1=>0x9CA6,\r
-0x60B8=>0x9CA7,\r
-0x60E0=>0x9CA8,\r
-0x60D3=>0x9CA9,\r
-0x60B4=>0x9CAA,\r
-0x5FF0=>0x9CAB,\r
-0x60BD=>0x9CAC,\r
-0x60C6=>0x9CAD,\r
-0x60B5=>0x9CAE,\r
-0x60D8=>0x9CAF,\r
-0x614D=>0x9CB0,\r
-0x6115=>0x9CB1,\r
-0x6106=>0x9CB2,\r
-0x60F6=>0x9CB3,\r
-0x60F7=>0x9CB4,\r
-0x6100=>0x9CB5,\r
-0x60F4=>0x9CB6,\r
-0x60FA=>0x9CB7,\r
-0x6103=>0x9CB8,\r
-0x6121=>0x9CB9,\r
-0x60FB=>0x9CBA,\r
-0x60F1=>0x9CBB,\r
-0x610D=>0x9CBC,\r
-0x610E=>0x9CBD,\r
-0x6147=>0x9CBE,\r
-0x613E=>0x9CBF,\r
-0x6128=>0x9CC0,\r
-0x6127=>0x9CC1,\r
-0x614A=>0x9CC2,\r
-0x613F=>0x9CC3,\r
-0x613C=>0x9CC4,\r
-0x612C=>0x9CC5,\r
-0x6134=>0x9CC6,\r
-0x613D=>0x9CC7,\r
-0x6142=>0x9CC8,\r
-0x6144=>0x9CC9,\r
-0x6173=>0x9CCA,\r
-0x6177=>0x9CCB,\r
-0x6158=>0x9CCC,\r
-0x6159=>0x9CCD,\r
-0x615A=>0x9CCE,\r
-0x616B=>0x9CCF,\r
-0x6174=>0x9CD0,\r
-0x616F=>0x9CD1,\r
-0x6165=>0x9CD2,\r
-0x6171=>0x9CD3,\r
-0x615F=>0x9CD4,\r
-0x615D=>0x9CD5,\r
-0x6153=>0x9CD6,\r
-0x6175=>0x9CD7,\r
-0x6199=>0x9CD8,\r
-0x6196=>0x9CD9,\r
-0x6187=>0x9CDA,\r
-0x61AC=>0x9CDB,\r
-0x6194=>0x9CDC,\r
-0x619A=>0x9CDD,\r
-0x618A=>0x9CDE,\r
-0x6191=>0x9CDF,\r
-0x61AB=>0x9CE0,\r
-0x61AE=>0x9CE1,\r
-0x61CC=>0x9CE2,\r
-0x61CA=>0x9CE3,\r
-0x61C9=>0x9CE4,\r
-0x61F7=>0x9CE5,\r
-0x61C8=>0x9CE6,\r
-0x61C3=>0x9CE7,\r
-0x61C6=>0x9CE8,\r
-0x61BA=>0x9CE9,\r
-0x61CB=>0x9CEA,\r
-0x7F79=>0x9CEB,\r
-0x61CD=>0x9CEC,\r
-0x61E6=>0x9CED,\r
-0x61E3=>0x9CEE,\r
-0x61F6=>0x9CEF,\r
-0x61FA=>0x9CF0,\r
-0x61F4=>0x9CF1,\r
-0x61FF=>0x9CF2,\r
-0x61FD=>0x9CF3,\r
-0x61FC=>0x9CF4,\r
-0x61FE=>0x9CF5,\r
-0x6200=>0x9CF6,\r
-0x6208=>0x9CF7,\r
-0x6209=>0x9CF8,\r
-0x620D=>0x9CF9,\r
-0x620C=>0x9CFA,\r
-0x6214=>0x9CFB,\r
-0x621B=>0x9CFC,\r
-0x621E=>0x9D40,\r
-0x6221=>0x9D41,\r
-0x622A=>0x9D42,\r
-0x622E=>0x9D43,\r
-0x6230=>0x9D44,\r
-0x6232=>0x9D45,\r
-0x6233=>0x9D46,\r
-0x6241=>0x9D47,\r
-0x624E=>0x9D48,\r
-0x625E=>0x9D49,\r
-0x6263=>0x9D4A,\r
-0x625B=>0x9D4B,\r
-0x6260=>0x9D4C,\r
-0x6268=>0x9D4D,\r
-0x627C=>0x9D4E,\r
-0x6282=>0x9D4F,\r
-0x6289=>0x9D50,\r
-0x627E=>0x9D51,\r
-0x6292=>0x9D52,\r
-0x6293=>0x9D53,\r
-0x6296=>0x9D54,\r
-0x62D4=>0x9D55,\r
-0x6283=>0x9D56,\r
-0x6294=>0x9D57,\r
-0x62D7=>0x9D58,\r
-0x62D1=>0x9D59,\r
-0x62BB=>0x9D5A,\r
-0x62CF=>0x9D5B,\r
-0x62FF=>0x9D5C,\r
-0x62C6=>0x9D5D,\r
-0x64D4=>0x9D5E,\r
-0x62C8=>0x9D5F,\r
-0x62DC=>0x9D60,\r
-0x62CC=>0x9D61,\r
-0x62CA=>0x9D62,\r
-0x62C2=>0x9D63,\r
-0x62C7=>0x9D64,\r
-0x629B=>0x9D65,\r
-0x62C9=>0x9D66,\r
-0x630C=>0x9D67,\r
-0x62EE=>0x9D68,\r
-0x62F1=>0x9D69,\r
-0x6327=>0x9D6A,\r
-0x6302=>0x9D6B,\r
-0x6308=>0x9D6C,\r
-0x62EF=>0x9D6D,\r
-0x62F5=>0x9D6E,\r
-0x6350=>0x9D6F,\r
-0x633E=>0x9D70,\r
-0x634D=>0x9D71,\r
-0x641C=>0x9D72,\r
-0x634F=>0x9D73,\r
-0x6396=>0x9D74,\r
-0x638E=>0x9D75,\r
-0x6380=>0x9D76,\r
-0x63AB=>0x9D77,\r
-0x6376=>0x9D78,\r
-0x63A3=>0x9D79,\r
-0x638F=>0x9D7A,\r
-0x6389=>0x9D7B,\r
-0x639F=>0x9D7C,\r
-0x63B5=>0x9D7D,\r
-0x636B=>0x9D7E,\r
-0x6369=>0x9D80,\r
-0x63BE=>0x9D81,\r
-0x63E9=>0x9D82,\r
-0x63C0=>0x9D83,\r
-0x63C6=>0x9D84,\r
-0x63E3=>0x9D85,\r
-0x63C9=>0x9D86,\r
-0x63D2=>0x9D87,\r
-0x63F6=>0x9D88,\r
-0x63C4=>0x9D89,\r
-0x6416=>0x9D8A,\r
-0x6434=>0x9D8B,\r
-0x6406=>0x9D8C,\r
-0x6413=>0x9D8D,\r
-0x6426=>0x9D8E,\r
-0x6436=>0x9D8F,\r
-0x651D=>0x9D90,\r
-0x6417=>0x9D91,\r
-0x6428=>0x9D92,\r
-0x640F=>0x9D93,\r
-0x6467=>0x9D94,\r
-0x646F=>0x9D95,\r
-0x6476=>0x9D96,\r
-0x644E=>0x9D97,\r
-0x652A=>0x9D98,\r
-0x6495=>0x9D99,\r
-0x6493=>0x9D9A,\r
-0x64A5=>0x9D9B,\r
-0x64A9=>0x9D9C,\r
-0x6488=>0x9D9D,\r
-0x64BC=>0x9D9E,\r
-0x64DA=>0x9D9F,\r
-0x64D2=>0x9DA0,\r
-0x64C5=>0x9DA1,\r
-0x64C7=>0x9DA2,\r
-0x64BB=>0x9DA3,\r
-0x64D8=>0x9DA4,\r
-0x64C2=>0x9DA5,\r
-0x64F1=>0x9DA6,\r
-0x64E7=>0x9DA7,\r
-0x8209=>0x9DA8,\r
-0x64E0=>0x9DA9,\r
-0x64E1=>0x9DAA,\r
-0x62AC=>0x9DAB,\r
-0x64E3=>0x9DAC,\r
-0x64EF=>0x9DAD,\r
-0x652C=>0x9DAE,\r
-0x64F6=>0x9DAF,\r
-0x64F4=>0x9DB0,\r
-0x64F2=>0x9DB1,\r
-0x64FA=>0x9DB2,\r
-0x6500=>0x9DB3,\r
-0x64FD=>0x9DB4,\r
-0x6518=>0x9DB5,\r
-0x651C=>0x9DB6,\r
-0x6505=>0x9DB7,\r
-0x6524=>0x9DB8,\r
-0x6523=>0x9DB9,\r
-0x652B=>0x9DBA,\r
-0x6534=>0x9DBB,\r
-0x6535=>0x9DBC,\r
-0x6537=>0x9DBD,\r
-0x6536=>0x9DBE,\r
-0x6538=>0x9DBF,\r
-0x754B=>0x9DC0,\r
-0x6548=>0x9DC1,\r
-0x6556=>0x9DC2,\r
-0x6555=>0x9DC3,\r
-0x654D=>0x9DC4,\r
-0x6558=>0x9DC5,\r
-0x655E=>0x9DC6,\r
-0x655D=>0x9DC7,\r
-0x6572=>0x9DC8,\r
-0x6578=>0x9DC9,\r
-0x6582=>0x9DCA,\r
-0x6583=>0x9DCB,\r
-0x8B8A=>0x9DCC,\r
-0x659B=>0x9DCD,\r
-0x659F=>0x9DCE,\r
-0x65AB=>0x9DCF,\r
-0x65B7=>0x9DD0,\r
-0x65C3=>0x9DD1,\r
-0x65C6=>0x9DD2,\r
-0x65C1=>0x9DD3,\r
-0x65C4=>0x9DD4,\r
-0x65CC=>0x9DD5,\r
-0x65D2=>0x9DD6,\r
-0x65DB=>0x9DD7,\r
-0x65D9=>0x9DD8,\r
-0x65E0=>0x9DD9,\r
-0x65E1=>0x9DDA,\r
-0x65F1=>0x9DDB,\r
-0x6772=>0x9DDC,\r
-0x660A=>0x9DDD,\r
-0x6603=>0x9DDE,\r
-0x65FB=>0x9DDF,\r
-0x6773=>0x9DE0,\r
-0x6635=>0x9DE1,\r
-0x6636=>0x9DE2,\r
-0x6634=>0x9DE3,\r
-0x661C=>0x9DE4,\r
-0x664F=>0x9DE5,\r
-0x6644=>0x9DE6,\r
-0x6649=>0x9DE7,\r
-0x6641=>0x9DE8,\r
-0x665E=>0x9DE9,\r
-0x665D=>0x9DEA,\r
-0x6664=>0x9DEB,\r
-0x6667=>0x9DEC,\r
-0x6668=>0x9DED,\r
-0x665F=>0x9DEE,\r
-0x6662=>0x9DEF,\r
-0x6670=>0x9DF0,\r
-0x6683=>0x9DF1,\r
-0x6688=>0x9DF2,\r
-0x668E=>0x9DF3,\r
-0x6689=>0x9DF4,\r
-0x6684=>0x9DF5,\r
-0x6698=>0x9DF6,\r
-0x669D=>0x9DF7,\r
-0x66C1=>0x9DF8,\r
-0x66B9=>0x9DF9,\r
-0x66C9=>0x9DFA,\r
-0x66BE=>0x9DFB,\r
-0x66BC=>0x9DFC,\r
-0x66C4=>0x9E40,\r
-0x66B8=>0x9E41,\r
-0x66D6=>0x9E42,\r
-0x66DA=>0x9E43,\r
-0x66E0=>0x9E44,\r
-0x663F=>0x9E45,\r
-0x66E6=>0x9E46,\r
-0x66E9=>0x9E47,\r
-0x66F0=>0x9E48,\r
-0x66F5=>0x9E49,\r
-0x66F7=>0x9E4A,\r
-0x670F=>0x9E4B,\r
-0x6716=>0x9E4C,\r
-0x671E=>0x9E4D,\r
-0x6726=>0x9E4E,\r
-0x6727=>0x9E4F,\r
-0x9738=>0x9E50,\r
-0x672E=>0x9E51,\r
-0x673F=>0x9E52,\r
-0x6736=>0x9E53,\r
-0x6741=>0x9E54,\r
-0x6738=>0x9E55,\r
-0x6737=>0x9E56,\r
-0x6746=>0x9E57,\r
-0x675E=>0x9E58,\r
-0x6760=>0x9E59,\r
-0x6759=>0x9E5A,\r
-0x6763=>0x9E5B,\r
-0x6764=>0x9E5C,\r
-0x6789=>0x9E5D,\r
-0x6770=>0x9E5E,\r
-0x67A9=>0x9E5F,\r
-0x677C=>0x9E60,\r
-0x676A=>0x9E61,\r
-0x678C=>0x9E62,\r
-0x678B=>0x9E63,\r
-0x67A6=>0x9E64,\r
-0x67A1=>0x9E65,\r
-0x6785=>0x9E66,\r
-0x67B7=>0x9E67,\r
-0x67EF=>0x9E68,\r
-0x67B4=>0x9E69,\r
-0x67EC=>0x9E6A,\r
-0x67B3=>0x9E6B,\r
-0x67E9=>0x9E6C,\r
-0x67B8=>0x9E6D,\r
-0x67E4=>0x9E6E,\r
-0x67DE=>0x9E6F,\r
-0x67DD=>0x9E70,\r
-0x67E2=>0x9E71,\r
-0x67EE=>0x9E72,\r
-0x67B9=>0x9E73,\r
-0x67CE=>0x9E74,\r
-0x67C6=>0x9E75,\r
-0x67E7=>0x9E76,\r
-0x6A9C=>0x9E77,\r
-0x681E=>0x9E78,\r
-0x6846=>0x9E79,\r
-0x6829=>0x9E7A,\r
-0x6840=>0x9E7B,\r
-0x684D=>0x9E7C,\r
-0x6832=>0x9E7D,\r
-0x684E=>0x9E7E,\r
-0x68B3=>0x9E80,\r
-0x682B=>0x9E81,\r
-0x6859=>0x9E82,\r
-0x6863=>0x9E83,\r
-0x6877=>0x9E84,\r
-0x687F=>0x9E85,\r
-0x689F=>0x9E86,\r
-0x688F=>0x9E87,\r
-0x68AD=>0x9E88,\r
-0x6894=>0x9E89,\r
-0x689D=>0x9E8A,\r
-0x689B=>0x9E8B,\r
-0x6883=>0x9E8C,\r
-0x6AAE=>0x9E8D,\r
-0x68B9=>0x9E8E,\r
-0x6874=>0x9E8F,\r
-0x68B5=>0x9E90,\r
-0x68A0=>0x9E91,\r
-0x68BA=>0x9E92,\r
-0x690F=>0x9E93,\r
-0x688D=>0x9E94,\r
-0x687E=>0x9E95,\r
-0x6901=>0x9E96,\r
-0x68CA=>0x9E97,\r
-0x6908=>0x9E98,\r
-0x68D8=>0x9E99,\r
-0x6922=>0x9E9A,\r
-0x6926=>0x9E9B,\r
-0x68E1=>0x9E9C,\r
-0x690C=>0x9E9D,\r
-0x68CD=>0x9E9E,\r
-0x68D4=>0x9E9F,\r
-0x68E7=>0x9EA0,\r
-0x68D5=>0x9EA1,\r
-0x6936=>0x9EA2,\r
-0x6912=>0x9EA3,\r
-0x6904=>0x9EA4,\r
-0x68D7=>0x9EA5,\r
-0x68E3=>0x9EA6,\r
-0x6925=>0x9EA7,\r
-0x68F9=>0x9EA8,\r
-0x68E0=>0x9EA9,\r
-0x68EF=>0x9EAA,\r
-0x6928=>0x9EAB,\r
-0x692A=>0x9EAC,\r
-0x691A=>0x9EAD,\r
-0x6923=>0x9EAE,\r
-0x6921=>0x9EAF,\r
-0x68C6=>0x9EB0,\r
-0x6979=>0x9EB1,\r
-0x6977=>0x9EB2,\r
-0x695C=>0x9EB3,\r
-0x6978=>0x9EB4,\r
-0x696B=>0x9EB5,\r
-0x6954=>0x9EB6,\r
-0x697E=>0x9EB7,\r
-0x696E=>0x9EB8,\r
-0x6939=>0x9EB9,\r
-0x6974=>0x9EBA,\r
-0x693D=>0x9EBB,\r
-0x6959=>0x9EBC,\r
-0x6930=>0x9EBD,\r
-0x6961=>0x9EBE,\r
-0x695E=>0x9EBF,\r
-0x695D=>0x9EC0,\r
-0x6981=>0x9EC1,\r
-0x696A=>0x9EC2,\r
-0x69B2=>0x9EC3,\r
-0x69AE=>0x9EC4,\r
-0x69D0=>0x9EC5,\r
-0x69BF=>0x9EC6,\r
-0x69C1=>0x9EC7,\r
-0x69D3=>0x9EC8,\r
-0x69BE=>0x9EC9,\r
-0x69CE=>0x9ECA,\r
-0x5BE8=>0x9ECB,\r
-0x69CA=>0x9ECC,\r
-0x69DD=>0x9ECD,\r
-0x69BB=>0x9ECE,\r
-0x69C3=>0x9ECF,\r
-0x69A7=>0x9ED0,\r
-0x6A2E=>0x9ED1,\r
-0x6991=>0x9ED2,\r
-0x69A0=>0x9ED3,\r
-0x699C=>0x9ED4,\r
-0x6995=>0x9ED5,\r
-0x69B4=>0x9ED6,\r
-0x69DE=>0x9ED7,\r
-0x69E8=>0x9ED8,\r
-0x6A02=>0x9ED9,\r
-0x6A1B=>0x9EDA,\r
-0x69FF=>0x9EDB,\r
-0x6B0A=>0x9EDC,\r
-0x69F9=>0x9EDD,\r
-0x69F2=>0x9EDE,\r
-0x69E7=>0x9EDF,\r
-0x6A05=>0x9EE0,\r
-0x69B1=>0x9EE1,\r
-0x6A1E=>0x9EE2,\r
-0x69ED=>0x9EE3,\r
-0x6A14=>0x9EE4,\r
-0x69EB=>0x9EE5,\r
-0x6A0A=>0x9EE6,\r
-0x6A12=>0x9EE7,\r
-0x6AC1=>0x9EE8,\r
-0x6A23=>0x9EE9,\r
-0x6A13=>0x9EEA,\r
-0x6A44=>0x9EEB,\r
-0x6A0C=>0x9EEC,\r
-0x6A72=>0x9EED,\r
-0x6A36=>0x9EEE,\r
-0x6A78=>0x9EEF,\r
-0x6A47=>0x9EF0,\r
-0x6A62=>0x9EF1,\r
-0x6A59=>0x9EF2,\r
-0x6A66=>0x9EF3,\r
-0x6A48=>0x9EF4,\r
-0x6A38=>0x9EF5,\r
-0x6A22=>0x9EF6,\r
-0x6A90=>0x9EF7,\r
-0x6A8D=>0x9EF8,\r
-0x6AA0=>0x9EF9,\r
-0x6A84=>0x9EFA,\r
-0x6AA2=>0x9EFB,\r
-0x6AA3=>0x9EFC,\r
-0x6A97=>0x9F40,\r
-0x8617=>0x9F41,\r
-0x6ABB=>0x9F42,\r
-0x6AC3=>0x9F43,\r
-0x6AC2=>0x9F44,\r
-0x6AB8=>0x9F45,\r
-0x6AB3=>0x9F46,\r
-0x6AAC=>0x9F47,\r
-0x6ADE=>0x9F48,\r
-0x6AD1=>0x9F49,\r
-0x6ADF=>0x9F4A,\r
-0x6AAA=>0x9F4B,\r
-0x6ADA=>0x9F4C,\r
-0x6AEA=>0x9F4D,\r
-0x6AFB=>0x9F4E,\r
-0x6B05=>0x9F4F,\r
-0x8616=>0x9F50,\r
-0x6AFA=>0x9F51,\r
-0x6B12=>0x9F52,\r
-0x6B16=>0x9F53,\r
-0x9B31=>0x9F54,\r
-0x6B1F=>0x9F55,\r
-0x6B38=>0x9F56,\r
-0x6B37=>0x9F57,\r
-0x76DC=>0x9F58,\r
-0x6B39=>0x9F59,\r
-0x98EE=>0x9F5A,\r
-0x6B47=>0x9F5B,\r
-0x6B43=>0x9F5C,\r
-0x6B49=>0x9F5D,\r
-0x6B50=>0x9F5E,\r
-0x6B59=>0x9F5F,\r
-0x6B54=>0x9F60,\r
-0x6B5B=>0x9F61,\r
-0x6B5F=>0x9F62,\r
-0x6B61=>0x9F63,\r
-0x6B78=>0x9F64,\r
-0x6B79=>0x9F65,\r
-0x6B7F=>0x9F66,\r
-0x6B80=>0x9F67,\r
-0x6B84=>0x9F68,\r
-0x6B83=>0x9F69,\r
-0x6B8D=>0x9F6A,\r
-0x6B98=>0x9F6B,\r
-0x6B95=>0x9F6C,\r
-0x6B9E=>0x9F6D,\r
-0x6BA4=>0x9F6E,\r
-0x6BAA=>0x9F6F,\r
-0x6BAB=>0x9F70,\r
-0x6BAF=>0x9F71,\r
-0x6BB2=>0x9F72,\r
-0x6BB1=>0x9F73,\r
-0x6BB3=>0x9F74,\r
-0x6BB7=>0x9F75,\r
-0x6BBC=>0x9F76,\r
-0x6BC6=>0x9F77,\r
-0x6BCB=>0x9F78,\r
-0x6BD3=>0x9F79,\r
-0x6BDF=>0x9F7A,\r
-0x6BEC=>0x9F7B,\r
-0x6BEB=>0x9F7C,\r
-0x6BF3=>0x9F7D,\r
-0x6BEF=>0x9F7E,\r
-0x9EBE=>0x9F80,\r
-0x6C08=>0x9F81,\r
-0x6C13=>0x9F82,\r
-0x6C14=>0x9F83,\r
-0x6C1B=>0x9F84,\r
-0x6C24=>0x9F85,\r
-0x6C23=>0x9F86,\r
-0x6C5E=>0x9F87,\r
-0x6C55=>0x9F88,\r
-0x6C62=>0x9F89,\r
-0x6C6A=>0x9F8A,\r
-0x6C82=>0x9F8B,\r
-0x6C8D=>0x9F8C,\r
-0x6C9A=>0x9F8D,\r
-0x6C81=>0x9F8E,\r
-0x6C9B=>0x9F8F,\r
-0x6C7E=>0x9F90,\r
-0x6C68=>0x9F91,\r
-0x6C73=>0x9F92,\r
-0x6C92=>0x9F93,\r
-0x6C90=>0x9F94,\r
-0x6CC4=>0x9F95,\r
-0x6CF1=>0x9F96,\r
-0x6CD3=>0x9F97,\r
-0x6CBD=>0x9F98,\r
-0x6CD7=>0x9F99,\r
-0x6CC5=>0x9F9A,\r
-0x6CDD=>0x9F9B,\r
-0x6CAE=>0x9F9C,\r
-0x6CB1=>0x9F9D,\r
-0x6CBE=>0x9F9E,\r
-0x6CBA=>0x9F9F,\r
-0x6CDB=>0x9FA0,\r
-0x6CEF=>0x9FA1,\r
-0x6CD9=>0x9FA2,\r
-0x6CEA=>0x9FA3,\r
-0x6D1F=>0x9FA4,\r
-0x884D=>0x9FA5,\r
-0x6D36=>0x9FA6,\r
-0x6D2B=>0x9FA7,\r
-0x6D3D=>0x9FA8,\r
-0x6D38=>0x9FA9,\r
-0x6D19=>0x9FAA,\r
-0x6D35=>0x9FAB,\r
-0x6D33=>0x9FAC,\r
-0x6D12=>0x9FAD,\r
-0x6D0C=>0x9FAE,\r
-0x6D63=>0x9FAF,\r
-0x6D93=>0x9FB0,\r
-0x6D64=>0x9FB1,\r
-0x6D5A=>0x9FB2,\r
-0x6D79=>0x9FB3,\r
-0x6D59=>0x9FB4,\r
-0x6D8E=>0x9FB5,\r
-0x6D95=>0x9FB6,\r
-0x6FE4=>0x9FB7,\r
-0x6D85=>0x9FB8,\r
-0x6DF9=>0x9FB9,\r
-0x6E15=>0x9FBA,\r
-0x6E0A=>0x9FBB,\r
-0x6DB5=>0x9FBC,\r
-0x6DC7=>0x9FBD,\r
-0x6DE6=>0x9FBE,\r
-0x6DB8=>0x9FBF,\r
-0x6DC6=>0x9FC0,\r
-0x6DEC=>0x9FC1,\r
-0x6DDE=>0x9FC2,\r
-0x6DCC=>0x9FC3,\r
-0x6DE8=>0x9FC4,\r
-0x6DD2=>0x9FC5,\r
-0x6DC5=>0x9FC6,\r
-0x6DFA=>0x9FC7,\r
-0x6DD9=>0x9FC8,\r
-0x6DE4=>0x9FC9,\r
-0x6DD5=>0x9FCA,\r
-0x6DEA=>0x9FCB,\r
-0x6DEE=>0x9FCC,\r
-0x6E2D=>0x9FCD,\r
-0x6E6E=>0x9FCE,\r
-0x6E2E=>0x9FCF,\r
-0x6E19=>0x9FD0,\r
-0x6E72=>0x9FD1,\r
-0x6E5F=>0x9FD2,\r
-0x6E3E=>0x9FD3,\r
-0x6E23=>0x9FD4,\r
-0x6E6B=>0x9FD5,\r
-0x6E2B=>0x9FD6,\r
-0x6E76=>0x9FD7,\r
-0x6E4D=>0x9FD8,\r
-0x6E1F=>0x9FD9,\r
-0x6E43=>0x9FDA,\r
-0x6E3A=>0x9FDB,\r
-0x6E4E=>0x9FDC,\r
-0x6E24=>0x9FDD,\r
-0x6EFF=>0x9FDE,\r
-0x6E1D=>0x9FDF,\r
-0x6E38=>0x9FE0,\r
-0x6E82=>0x9FE1,\r
-0x6EAA=>0x9FE2,\r
-0x6E98=>0x9FE3,\r
-0x6EC9=>0x9FE4,\r
-0x6EB7=>0x9FE5,\r
-0x6ED3=>0x9FE6,\r
-0x6EBD=>0x9FE7,\r
-0x6EAF=>0x9FE8,\r
-0x6EC4=>0x9FE9,\r
-0x6EB2=>0x9FEA,\r
-0x6ED4=>0x9FEB,\r
-0x6ED5=>0x9FEC,\r
-0x6E8F=>0x9FED,\r
-0x6EA5=>0x9FEE,\r
-0x6EC2=>0x9FEF,\r
-0x6E9F=>0x9FF0,\r
-0x6F41=>0x9FF1,\r
-0x6F11=>0x9FF2,\r
-0x704C=>0x9FF3,\r
-0x6EEC=>0x9FF4,\r
-0x6EF8=>0x9FF5,\r
-0x6EFE=>0x9FF6,\r
-0x6F3F=>0x9FF7,\r
-0x6EF2=>0x9FF8,\r
-0x6F31=>0x9FF9,\r
-0x6EEF=>0x9FFA,\r
-0x6F32=>0x9FFB,\r
-0x6ECC=>0x9FFC,\r
-0x6F3E=>0xE040,\r
-0x6F13=>0xE041,\r
-0x6EF7=>0xE042,\r
-0x6F86=>0xE043,\r
-0x6F7A=>0xE044,\r
-0x6F78=>0xE045,\r
-0x6F81=>0xE046,\r
-0x6F80=>0xE047,\r
-0x6F6F=>0xE048,\r
-0x6F5B=>0xE049,\r
-0x6FF3=>0xE04A,\r
-0x6F6D=>0xE04B,\r
-0x6F82=>0xE04C,\r
-0x6F7C=>0xE04D,\r
-0x6F58=>0xE04E,\r
-0x6F8E=>0xE04F,\r
-0x6F91=>0xE050,\r
-0x6FC2=>0xE051,\r
-0x6F66=>0xE052,\r
-0x6FB3=>0xE053,\r
-0x6FA3=>0xE054,\r
-0x6FA1=>0xE055,\r
-0x6FA4=>0xE056,\r
-0x6FB9=>0xE057,\r
-0x6FC6=>0xE058,\r
-0x6FAA=>0xE059,\r
-0x6FDF=>0xE05A,\r
-0x6FD5=>0xE05B,\r
-0x6FEC=>0xE05C,\r
-0x6FD4=>0xE05D,\r
-0x6FD8=>0xE05E,\r
-0x6FF1=>0xE05F,\r
-0x6FEE=>0xE060,\r
-0x6FDB=>0xE061,\r
-0x7009=>0xE062,\r
-0x700B=>0xE063,\r
-0x6FFA=>0xE064,\r
-0x7011=>0xE065,\r
-0x7001=>0xE066,\r
-0x700F=>0xE067,\r
-0x6FFE=>0xE068,\r
-0x701B=>0xE069,\r
-0x701A=>0xE06A,\r
-0x6F74=>0xE06B,\r
-0x701D=>0xE06C,\r
-0x7018=>0xE06D,\r
-0x701F=>0xE06E,\r
-0x7030=>0xE06F,\r
-0x703E=>0xE070,\r
-0x7032=>0xE071,\r
-0x7051=>0xE072,\r
-0x7063=>0xE073,\r
-0x7099=>0xE074,\r
-0x7092=>0xE075,\r
-0x70AF=>0xE076,\r
-0x70F1=>0xE077,\r
-0x70AC=>0xE078,\r
-0x70B8=>0xE079,\r
-0x70B3=>0xE07A,\r
-0x70AE=>0xE07B,\r
-0x70DF=>0xE07C,\r
-0x70CB=>0xE07D,\r
-0x70DD=>0xE07E,\r
-0x70D9=>0xE080,\r
-0x7109=>0xE081,\r
-0x70FD=>0xE082,\r
-0x711C=>0xE083,\r
-0x7119=>0xE084,\r
-0x7165=>0xE085,\r
-0x7155=>0xE086,\r
-0x7188=>0xE087,\r
-0x7166=>0xE088,\r
-0x7162=>0xE089,\r
-0x714C=>0xE08A,\r
-0x7156=>0xE08B,\r
-0x716C=>0xE08C,\r
-0x718F=>0xE08D,\r
-0x71FB=>0xE08E,\r
-0x7184=>0xE08F,\r
-0x7195=>0xE090,\r
-0x71A8=>0xE091,\r
-0x71AC=>0xE092,\r
-0x71D7=>0xE093,\r
-0x71B9=>0xE094,\r
-0x71BE=>0xE095,\r
-0x71D2=>0xE096,\r
-0x71C9=>0xE097,\r
-0x71D4=>0xE098,\r
-0x71CE=>0xE099,\r
-0x71E0=>0xE09A,\r
-0x71EC=>0xE09B,\r
-0x71E7=>0xE09C,\r
-0x71F5=>0xE09D,\r
-0x71FC=>0xE09E,\r
-0x71F9=>0xE09F,\r
-0x71FF=>0xE0A0,\r
-0x720D=>0xE0A1,\r
-0x7210=>0xE0A2,\r
-0x721B=>0xE0A3,\r
-0x7228=>0xE0A4,\r
-0x722D=>0xE0A5,\r
-0x722C=>0xE0A6,\r
-0x7230=>0xE0A7,\r
-0x7232=>0xE0A8,\r
-0x723B=>0xE0A9,\r
-0x723C=>0xE0AA,\r
-0x723F=>0xE0AB,\r
-0x7240=>0xE0AC,\r
-0x7246=>0xE0AD,\r
-0x724B=>0xE0AE,\r
-0x7258=>0xE0AF,\r
-0x7274=>0xE0B0,\r
-0x727E=>0xE0B1,\r
-0x7282=>0xE0B2,\r
-0x7281=>0xE0B3,\r
-0x7287=>0xE0B4,\r
-0x7292=>0xE0B5,\r
-0x7296=>0xE0B6,\r
-0x72A2=>0xE0B7,\r
-0x72A7=>0xE0B8,\r
-0x72B9=>0xE0B9,\r
-0x72B2=>0xE0BA,\r
-0x72C3=>0xE0BB,\r
-0x72C6=>0xE0BC,\r
-0x72C4=>0xE0BD,\r
-0x72CE=>0xE0BE,\r
-0x72D2=>0xE0BF,\r
-0x72E2=>0xE0C0,\r
-0x72E0=>0xE0C1,\r
-0x72E1=>0xE0C2,\r
-0x72F9=>0xE0C3,\r
-0x72F7=>0xE0C4,\r
-0x500F=>0xE0C5,\r
-0x7317=>0xE0C6,\r
-0x730A=>0xE0C7,\r
-0x731C=>0xE0C8,\r
-0x7316=>0xE0C9,\r
-0x731D=>0xE0CA,\r
-0x7334=>0xE0CB,\r
-0x732F=>0xE0CC,\r
-0x7329=>0xE0CD,\r
-0x7325=>0xE0CE,\r
-0x733E=>0xE0CF,\r
-0x734E=>0xE0D0,\r
-0x734F=>0xE0D1,\r
-0x9ED8=>0xE0D2,\r
-0x7357=>0xE0D3,\r
-0x736A=>0xE0D4,\r
-0x7368=>0xE0D5,\r
-0x7370=>0xE0D6,\r
-0x7378=>0xE0D7,\r
-0x7375=>0xE0D8,\r
-0x737B=>0xE0D9,\r
-0x737A=>0xE0DA,\r
-0x73C8=>0xE0DB,\r
-0x73B3=>0xE0DC,\r
-0x73CE=>0xE0DD,\r
-0x73BB=>0xE0DE,\r
-0x73C0=>0xE0DF,\r
-0x73E5=>0xE0E0,\r
-0x73EE=>0xE0E1,\r
-0x73DE=>0xE0E2,\r
-0x74A2=>0xE0E3,\r
-0x7405=>0xE0E4,\r
-0x746F=>0xE0E5,\r
-0x7425=>0xE0E6,\r
-0x73F8=>0xE0E7,\r
-0x7432=>0xE0E8,\r
-0x743A=>0xE0E9,\r
-0x7455=>0xE0EA,\r
-0x743F=>0xE0EB,\r
-0x745F=>0xE0EC,\r
-0x7459=>0xE0ED,\r
-0x7441=>0xE0EE,\r
-0x745C=>0xE0EF,\r
-0x7469=>0xE0F0,\r
-0x7470=>0xE0F1,\r
-0x7463=>0xE0F2,\r
-0x746A=>0xE0F3,\r
-0x7476=>0xE0F4,\r
-0x747E=>0xE0F5,\r
-0x748B=>0xE0F6,\r
-0x749E=>0xE0F7,\r
-0x74A7=>0xE0F8,\r
-0x74CA=>0xE0F9,\r
-0x74CF=>0xE0FA,\r
-0x74D4=>0xE0FB,\r
-0x73F1=>0xE0FC,\r
-0x74E0=>0xE140,\r
-0x74E3=>0xE141,\r
-0x74E7=>0xE142,\r
-0x74E9=>0xE143,\r
-0x74EE=>0xE144,\r
-0x74F2=>0xE145,\r
-0x74F0=>0xE146,\r
-0x74F1=>0xE147,\r
-0x74F8=>0xE148,\r
-0x74F7=>0xE149,\r
-0x7504=>0xE14A,\r
-0x7503=>0xE14B,\r
-0x7505=>0xE14C,\r
-0x750C=>0xE14D,\r
-0x750E=>0xE14E,\r
-0x750D=>0xE14F,\r
-0x7515=>0xE150,\r
-0x7513=>0xE151,\r
-0x751E=>0xE152,\r
-0x7526=>0xE153,\r
-0x752C=>0xE154,\r
-0x753C=>0xE155,\r
-0x7544=>0xE156,\r
-0x754D=>0xE157,\r
-0x754A=>0xE158,\r
-0x7549=>0xE159,\r
-0x755B=>0xE15A,\r
-0x7546=>0xE15B,\r
-0x755A=>0xE15C,\r
-0x7569=>0xE15D,\r
-0x7564=>0xE15E,\r
-0x7567=>0xE15F,\r
-0x756B=>0xE160,\r
-0x756D=>0xE161,\r
-0x7578=>0xE162,\r
-0x7576=>0xE163,\r
-0x7586=>0xE164,\r
-0x7587=>0xE165,\r
-0x7574=>0xE166,\r
-0x758A=>0xE167,\r
-0x7589=>0xE168,\r
-0x7582=>0xE169,\r
-0x7594=>0xE16A,\r
-0x759A=>0xE16B,\r
-0x759D=>0xE16C,\r
-0x75A5=>0xE16D,\r
-0x75A3=>0xE16E,\r
-0x75C2=>0xE16F,\r
-0x75B3=>0xE170,\r
-0x75C3=>0xE171,\r
-0x75B5=>0xE172,\r
-0x75BD=>0xE173,\r
-0x75B8=>0xE174,\r
-0x75BC=>0xE175,\r
-0x75B1=>0xE176,\r
-0x75CD=>0xE177,\r
-0x75CA=>0xE178,\r
-0x75D2=>0xE179,\r
-0x75D9=>0xE17A,\r
-0x75E3=>0xE17B,\r
-0x75DE=>0xE17C,\r
-0x75FE=>0xE17D,\r
-0x75FF=>0xE17E,\r
-0x75FC=>0xE180,\r
-0x7601=>0xE181,\r
-0x75F0=>0xE182,\r
-0x75FA=>0xE183,\r
-0x75F2=>0xE184,\r
-0x75F3=>0xE185,\r
-0x760B=>0xE186,\r
-0x760D=>0xE187,\r
-0x7609=>0xE188,\r
-0x761F=>0xE189,\r
-0x7627=>0xE18A,\r
-0x7620=>0xE18B,\r
-0x7621=>0xE18C,\r
-0x7622=>0xE18D,\r
-0x7624=>0xE18E,\r
-0x7634=>0xE18F,\r
-0x7630=>0xE190,\r
-0x763B=>0xE191,\r
-0x7647=>0xE192,\r
-0x7648=>0xE193,\r
-0x7646=>0xE194,\r
-0x765C=>0xE195,\r
-0x7658=>0xE196,\r
-0x7661=>0xE197,\r
-0x7662=>0xE198,\r
-0x7668=>0xE199,\r
-0x7669=>0xE19A,\r
-0x766A=>0xE19B,\r
-0x7667=>0xE19C,\r
-0x766C=>0xE19D,\r
-0x7670=>0xE19E,\r
-0x7672=>0xE19F,\r
-0x7676=>0xE1A0,\r
-0x7678=>0xE1A1,\r
-0x767C=>0xE1A2,\r
-0x7680=>0xE1A3,\r
-0x7683=>0xE1A4,\r
-0x7688=>0xE1A5,\r
-0x768B=>0xE1A6,\r
-0x768E=>0xE1A7,\r
-0x7696=>0xE1A8,\r
-0x7693=>0xE1A9,\r
-0x7699=>0xE1AA,\r
-0x769A=>0xE1AB,\r
-0x76B0=>0xE1AC,\r
-0x76B4=>0xE1AD,\r
-0x76B8=>0xE1AE,\r
-0x76B9=>0xE1AF,\r
-0x76BA=>0xE1B0,\r
-0x76C2=>0xE1B1,\r
-0x76CD=>0xE1B2,\r
-0x76D6=>0xE1B3,\r
-0x76D2=>0xE1B4,\r
-0x76DE=>0xE1B5,\r
-0x76E1=>0xE1B6,\r
-0x76E5=>0xE1B7,\r
-0x76E7=>0xE1B8,\r
-0x76EA=>0xE1B9,\r
-0x862F=>0xE1BA,\r
-0x76FB=>0xE1BB,\r
-0x7708=>0xE1BC,\r
-0x7707=>0xE1BD,\r
-0x7704=>0xE1BE,\r
-0x7729=>0xE1BF,\r
-0x7724=>0xE1C0,\r
-0x771E=>0xE1C1,\r
-0x7725=>0xE1C2,\r
-0x7726=>0xE1C3,\r
-0x771B=>0xE1C4,\r
-0x7737=>0xE1C5,\r
-0x7738=>0xE1C6,\r
-0x7747=>0xE1C7,\r
-0x775A=>0xE1C8,\r
-0x7768=>0xE1C9,\r
-0x776B=>0xE1CA,\r
-0x775B=>0xE1CB,\r
-0x7765=>0xE1CC,\r
-0x777F=>0xE1CD,\r
-0x777E=>0xE1CE,\r
-0x7779=>0xE1CF,\r
-0x778E=>0xE1D0,\r
-0x778B=>0xE1D1,\r
-0x7791=>0xE1D2,\r
-0x77A0=>0xE1D3,\r
-0x779E=>0xE1D4,\r
-0x77B0=>0xE1D5,\r
-0x77B6=>0xE1D6,\r
-0x77B9=>0xE1D7,\r
-0x77BF=>0xE1D8,\r
-0x77BC=>0xE1D9,\r
-0x77BD=>0xE1DA,\r
-0x77BB=>0xE1DB,\r
-0x77C7=>0xE1DC,\r
-0x77CD=>0xE1DD,\r
-0x77D7=>0xE1DE,\r
-0x77DA=>0xE1DF,\r
-0x77DC=>0xE1E0,\r
-0x77E3=>0xE1E1,\r
-0x77EE=>0xE1E2,\r
-0x77FC=>0xE1E3,\r
-0x780C=>0xE1E4,\r
-0x7812=>0xE1E5,\r
-0x7926=>0xE1E6,\r
-0x7820=>0xE1E7,\r
-0x792A=>0xE1E8,\r
-0x7845=>0xE1E9,\r
-0x788E=>0xE1EA,\r
-0x7874=>0xE1EB,\r
-0x7886=>0xE1EC,\r
-0x787C=>0xE1ED,\r
-0x789A=>0xE1EE,\r
-0x788C=>0xE1EF,\r
-0x78A3=>0xE1F0,\r
-0x78B5=>0xE1F1,\r
-0x78AA=>0xE1F2,\r
-0x78AF=>0xE1F3,\r
-0x78D1=>0xE1F4,\r
-0x78C6=>0xE1F5,\r
-0x78CB=>0xE1F6,\r
-0x78D4=>0xE1F7,\r
-0x78BE=>0xE1F8,\r
-0x78BC=>0xE1F9,\r
-0x78C5=>0xE1FA,\r
-0x78CA=>0xE1FB,\r
-0x78EC=>0xE1FC,\r
-0x78E7=>0xE240,\r
-0x78DA=>0xE241,\r
-0x78FD=>0xE242,\r
-0x78F4=>0xE243,\r
-0x7907=>0xE244,\r
-0x7912=>0xE245,\r
-0x7911=>0xE246,\r
-0x7919=>0xE247,\r
-0x792C=>0xE248,\r
-0x792B=>0xE249,\r
-0x7940=>0xE24A,\r
-0x7960=>0xE24B,\r
-0x7957=>0xE24C,\r
-0x795F=>0xE24D,\r
-0x795A=>0xE24E,\r
-0x7955=>0xE24F,\r
-0x7953=>0xE250,\r
-0x797A=>0xE251,\r
-0x797F=>0xE252,\r
-0x798A=>0xE253,\r
-0x799D=>0xE254,\r
-0x79A7=>0xE255,\r
-0x9F4B=>0xE256,\r
-0x79AA=>0xE257,\r
-0x79AE=>0xE258,\r
-0x79B3=>0xE259,\r
-0x79B9=>0xE25A,\r
-0x79BA=>0xE25B,\r
-0x79C9=>0xE25C,\r
-0x79D5=>0xE25D,\r
-0x79E7=>0xE25E,\r
-0x79EC=>0xE25F,\r
-0x79E1=>0xE260,\r
-0x79E3=>0xE261,\r
-0x7A08=>0xE262,\r
-0x7A0D=>0xE263,\r
-0x7A18=>0xE264,\r
-0x7A19=>0xE265,\r
-0x7A20=>0xE266,\r
-0x7A1F=>0xE267,\r
-0x7980=>0xE268,\r
-0x7A31=>0xE269,\r
-0x7A3B=>0xE26A,\r
-0x7A3E=>0xE26B,\r
-0x7A37=>0xE26C,\r
-0x7A43=>0xE26D,\r
-0x7A57=>0xE26E,\r
-0x7A49=>0xE26F,\r
-0x7A61=>0xE270,\r
-0x7A62=>0xE271,\r
-0x7A69=>0xE272,\r
-0x9F9D=>0xE273,\r
-0x7A70=>0xE274,\r
-0x7A79=>0xE275,\r
-0x7A7D=>0xE276,\r
-0x7A88=>0xE277,\r
-0x7A97=>0xE278,\r
-0x7A95=>0xE279,\r
-0x7A98=>0xE27A,\r
-0x7A96=>0xE27B,\r
-0x7AA9=>0xE27C,\r
-0x7AC8=>0xE27D,\r
-0x7AB0=>0xE27E,\r
-0x7AB6=>0xE280,\r
-0x7AC5=>0xE281,\r
-0x7AC4=>0xE282,\r
-0x7ABF=>0xE283,\r
-0x9083=>0xE284,\r
-0x7AC7=>0xE285,\r
-0x7ACA=>0xE286,\r
-0x7ACD=>0xE287,\r
-0x7ACF=>0xE288,\r
-0x7AD5=>0xE289,\r
-0x7AD3=>0xE28A,\r
-0x7AD9=>0xE28B,\r
-0x7ADA=>0xE28C,\r
-0x7ADD=>0xE28D,\r
-0x7AE1=>0xE28E,\r
-0x7AE2=>0xE28F,\r
-0x7AE6=>0xE290,\r
-0x7AED=>0xE291,\r
-0x7AF0=>0xE292,\r
-0x7B02=>0xE293,\r
-0x7B0F=>0xE294,\r
-0x7B0A=>0xE295,\r
-0x7B06=>0xE296,\r
-0x7B33=>0xE297,\r
-0x7B18=>0xE298,\r
-0x7B19=>0xE299,\r
-0x7B1E=>0xE29A,\r
-0x7B35=>0xE29B,\r
-0x7B28=>0xE29C,\r
-0x7B36=>0xE29D,\r
-0x7B50=>0xE29E,\r
-0x7B7A=>0xE29F,\r
-0x7B04=>0xE2A0,\r
-0x7B4D=>0xE2A1,\r
-0x7B0B=>0xE2A2,\r
-0x7B4C=>0xE2A3,\r
-0x7B45=>0xE2A4,\r
-0x7B75=>0xE2A5,\r
-0x7B65=>0xE2A6,\r
-0x7B74=>0xE2A7,\r
-0x7B67=>0xE2A8,\r
-0x7B70=>0xE2A9,\r
-0x7B71=>0xE2AA,\r
-0x7B6C=>0xE2AB,\r
-0x7B6E=>0xE2AC,\r
-0x7B9D=>0xE2AD,\r
-0x7B98=>0xE2AE,\r
-0x7B9F=>0xE2AF,\r
-0x7B8D=>0xE2B0,\r
-0x7B9C=>0xE2B1,\r
-0x7B9A=>0xE2B2,\r
-0x7B8B=>0xE2B3,\r
-0x7B92=>0xE2B4,\r
-0x7B8F=>0xE2B5,\r
-0x7B5D=>0xE2B6,\r
-0x7B99=>0xE2B7,\r
-0x7BCB=>0xE2B8,\r
-0x7BC1=>0xE2B9,\r
-0x7BCC=>0xE2BA,\r
-0x7BCF=>0xE2BB,\r
-0x7BB4=>0xE2BC,\r
-0x7BC6=>0xE2BD,\r
-0x7BDD=>0xE2BE,\r
-0x7BE9=>0xE2BF,\r
-0x7C11=>0xE2C0,\r
-0x7C14=>0xE2C1,\r
-0x7BE6=>0xE2C2,\r
-0x7BE5=>0xE2C3,\r
-0x7C60=>0xE2C4,\r
-0x7C00=>0xE2C5,\r
-0x7C07=>0xE2C6,\r
-0x7C13=>0xE2C7,\r
-0x7BF3=>0xE2C8,\r
-0x7BF7=>0xE2C9,\r
-0x7C17=>0xE2CA,\r
-0x7C0D=>0xE2CB,\r
-0x7BF6=>0xE2CC,\r
-0x7C23=>0xE2CD,\r
-0x7C27=>0xE2CE,\r
-0x7C2A=>0xE2CF,\r
-0x7C1F=>0xE2D0,\r
-0x7C37=>0xE2D1,\r
-0x7C2B=>0xE2D2,\r
-0x7C3D=>0xE2D3,\r
-0x7C4C=>0xE2D4,\r
-0x7C43=>0xE2D5,\r
-0x7C54=>0xE2D6,\r
-0x7C4F=>0xE2D7,\r
-0x7C40=>0xE2D8,\r
-0x7C50=>0xE2D9,\r
-0x7C58=>0xE2DA,\r
-0x7C5F=>0xE2DB,\r
-0x7C64=>0xE2DC,\r
-0x7C56=>0xE2DD,\r
-0x7C65=>0xE2DE,\r
-0x7C6C=>0xE2DF,\r
-0x7C75=>0xE2E0,\r
-0x7C83=>0xE2E1,\r
-0x7C90=>0xE2E2,\r
-0x7CA4=>0xE2E3,\r
-0x7CAD=>0xE2E4,\r
-0x7CA2=>0xE2E5,\r
-0x7CAB=>0xE2E6,\r
-0x7CA1=>0xE2E7,\r
-0x7CA8=>0xE2E8,\r
-0x7CB3=>0xE2E9,\r
-0x7CB2=>0xE2EA,\r
-0x7CB1=>0xE2EB,\r
-0x7CAE=>0xE2EC,\r
-0x7CB9=>0xE2ED,\r
-0x7CBD=>0xE2EE,\r
-0x7CC0=>0xE2EF,\r
-0x7CC5=>0xE2F0,\r
-0x7CC2=>0xE2F1,\r
-0x7CD8=>0xE2F2,\r
-0x7CD2=>0xE2F3,\r
-0x7CDC=>0xE2F4,\r
-0x7CE2=>0xE2F5,\r
-0x9B3B=>0xE2F6,\r
-0x7CEF=>0xE2F7,\r
-0x7CF2=>0xE2F8,\r
-0x7CF4=>0xE2F9,\r
-0x7CF6=>0xE2FA,\r
-0x7CFA=>0xE2FB,\r
-0x7D06=>0xE2FC,\r
-0x7D02=>0xE340,\r
-0x7D1C=>0xE341,\r
-0x7D15=>0xE342,\r
-0x7D0A=>0xE343,\r
-0x7D45=>0xE344,\r
-0x7D4B=>0xE345,\r
-0x7D2E=>0xE346,\r
-0x7D32=>0xE347,\r
-0x7D3F=>0xE348,\r
-0x7D35=>0xE349,\r
-0x7D46=>0xE34A,\r
-0x7D73=>0xE34B,\r
-0x7D56=>0xE34C,\r
-0x7D4E=>0xE34D,\r
-0x7D72=>0xE34E,\r
-0x7D68=>0xE34F,\r
-0x7D6E=>0xE350,\r
-0x7D4F=>0xE351,\r
-0x7D63=>0xE352,\r
-0x7D93=>0xE353,\r
-0x7D89=>0xE354,\r
-0x7D5B=>0xE355,\r
-0x7D8F=>0xE356,\r
-0x7D7D=>0xE357,\r
-0x7D9B=>0xE358,\r
-0x7DBA=>0xE359,\r
-0x7DAE=>0xE35A,\r
-0x7DA3=>0xE35B,\r
-0x7DB5=>0xE35C,\r
-0x7DC7=>0xE35D,\r
-0x7DBD=>0xE35E,\r
-0x7DAB=>0xE35F,\r
-0x7E3D=>0xE360,\r
-0x7DA2=>0xE361,\r
-0x7DAF=>0xE362,\r
-0x7DDC=>0xE363,\r
-0x7DB8=>0xE364,\r
-0x7D9F=>0xE365,\r
-0x7DB0=>0xE366,\r
-0x7DD8=>0xE367,\r
-0x7DDD=>0xE368,\r
-0x7DE4=>0xE369,\r
-0x7DDE=>0xE36A,\r
-0x7DFB=>0xE36B,\r
-0x7DF2=>0xE36C,\r
-0x7DE1=>0xE36D,\r
-0x7E05=>0xE36E,\r
-0x7E0A=>0xE36F,\r
-0x7E23=>0xE370,\r
-0x7E21=>0xE371,\r
-0x7E12=>0xE372,\r
-0x7E31=>0xE373,\r
-0x7E1F=>0xE374,\r
-0x7E09=>0xE375,\r
-0x7E0B=>0xE376,\r
-0x7E22=>0xE377,\r
-0x7E46=>0xE378,\r
-0x7E66=>0xE379,\r
-0x7E3B=>0xE37A,\r
-0x7E35=>0xE37B,\r
-0x7E39=>0xE37C,\r
-0x7E43=>0xE37D,\r
-0x7E37=>0xE37E,\r
-0x7E32=>0xE380,\r
-0x7E3A=>0xE381,\r
-0x7E67=>0xE382,\r
-0x7E5D=>0xE383,\r
-0x7E56=>0xE384,\r
-0x7E5E=>0xE385,\r
-0x7E59=>0xE386,\r
-0x7E5A=>0xE387,\r
-0x7E79=>0xE388,\r
-0x7E6A=>0xE389,\r
-0x7E69=>0xE38A,\r
-0x7E7C=>0xE38B,\r
-0x7E7B=>0xE38C,\r
-0x7E83=>0xE38D,\r
-0x7DD5=>0xE38E,\r
-0x7E7D=>0xE38F,\r
-0x8FAE=>0xE390,\r
-0x7E7F=>0xE391,\r
-0x7E88=>0xE392,\r
-0x7E89=>0xE393,\r
-0x7E8C=>0xE394,\r
-0x7E92=>0xE395,\r
-0x7E90=>0xE396,\r
-0x7E93=>0xE397,\r
-0x7E94=>0xE398,\r
-0x7E96=>0xE399,\r
-0x7E8E=>0xE39A,\r
-0x7E9B=>0xE39B,\r
-0x7E9C=>0xE39C,\r
-0x7F38=>0xE39D,\r
-0x7F3A=>0xE39E,\r
-0x7F45=>0xE39F,\r
-0x7F4C=>0xE3A0,\r
-0x7F4D=>0xE3A1,\r
-0x7F4E=>0xE3A2,\r
-0x7F50=>0xE3A3,\r
-0x7F51=>0xE3A4,\r
-0x7F55=>0xE3A5,\r
-0x7F54=>0xE3A6,\r
-0x7F58=>0xE3A7,\r
-0x7F5F=>0xE3A8,\r
-0x7F60=>0xE3A9,\r
-0x7F68=>0xE3AA,\r
-0x7F69=>0xE3AB,\r
-0x7F67=>0xE3AC,\r
-0x7F78=>0xE3AD,\r
-0x7F82=>0xE3AE,\r
-0x7F86=>0xE3AF,\r
-0x7F83=>0xE3B0,\r
-0x7F88=>0xE3B1,\r
-0x7F87=>0xE3B2,\r
-0x7F8C=>0xE3B3,\r
-0x7F94=>0xE3B4,\r
-0x7F9E=>0xE3B5,\r
-0x7F9D=>0xE3B6,\r
-0x7F9A=>0xE3B7,\r
-0x7FA3=>0xE3B8,\r
-0x7FAF=>0xE3B9,\r
-0x7FB2=>0xE3BA,\r
-0x7FB9=>0xE3BB,\r
-0x7FAE=>0xE3BC,\r
-0x7FB6=>0xE3BD,\r
-0x7FB8=>0xE3BE,\r
-0x8B71=>0xE3BF,\r
-0x7FC5=>0xE3C0,\r
-0x7FC6=>0xE3C1,\r
-0x7FCA=>0xE3C2,\r
-0x7FD5=>0xE3C3,\r
-0x7FD4=>0xE3C4,\r
-0x7FE1=>0xE3C5,\r
-0x7FE6=>0xE3C6,\r
-0x7FE9=>0xE3C7,\r
-0x7FF3=>0xE3C8,\r
-0x7FF9=>0xE3C9,\r
-0x98DC=>0xE3CA,\r
-0x8006=>0xE3CB,\r
-0x8004=>0xE3CC,\r
-0x800B=>0xE3CD,\r
-0x8012=>0xE3CE,\r
-0x8018=>0xE3CF,\r
-0x8019=>0xE3D0,\r
-0x801C=>0xE3D1,\r
-0x8021=>0xE3D2,\r
-0x8028=>0xE3D3,\r
-0x803F=>0xE3D4,\r
-0x803B=>0xE3D5,\r
-0x804A=>0xE3D6,\r
-0x8046=>0xE3D7,\r
-0x8052=>0xE3D8,\r
-0x8058=>0xE3D9,\r
-0x805A=>0xE3DA,\r
-0x805F=>0xE3DB,\r
-0x8062=>0xE3DC,\r
-0x8068=>0xE3DD,\r
-0x8073=>0xE3DE,\r
-0x8072=>0xE3DF,\r
-0x8070=>0xE3E0,\r
-0x8076=>0xE3E1,\r
-0x8079=>0xE3E2,\r
-0x807D=>0xE3E3,\r
-0x807F=>0xE3E4,\r
-0x8084=>0xE3E5,\r
-0x8086=>0xE3E6,\r
-0x8085=>0xE3E7,\r
-0x809B=>0xE3E8,\r
-0x8093=>0xE3E9,\r
-0x809A=>0xE3EA,\r
-0x80AD=>0xE3EB,\r
-0x5190=>0xE3EC,\r
-0x80AC=>0xE3ED,\r
-0x80DB=>0xE3EE,\r
-0x80E5=>0xE3EF,\r
-0x80D9=>0xE3F0,\r
-0x80DD=>0xE3F1,\r
-0x80C4=>0xE3F2,\r
-0x80DA=>0xE3F3,\r
-0x80D6=>0xE3F4,\r
-0x8109=>0xE3F5,\r
-0x80EF=>0xE3F6,\r
-0x80F1=>0xE3F7,\r
-0x811B=>0xE3F8,\r
-0x8129=>0xE3F9,\r
-0x8123=>0xE3FA,\r
-0x812F=>0xE3FB,\r
-0x814B=>0xE3FC,\r
-0x968B=>0xE440,\r
-0x8146=>0xE441,\r
-0x813E=>0xE442,\r
-0x8153=>0xE443,\r
-0x8151=>0xE444,\r
-0x80FC=>0xE445,\r
-0x8171=>0xE446,\r
-0x816E=>0xE447,\r
-0x8165=>0xE448,\r
-0x8166=>0xE449,\r
-0x8174=>0xE44A,\r
-0x8183=>0xE44B,\r
-0x8188=>0xE44C,\r
-0x818A=>0xE44D,\r
-0x8180=>0xE44E,\r
-0x8182=>0xE44F,\r
-0x81A0=>0xE450,\r
-0x8195=>0xE451,\r
-0x81A4=>0xE452,\r
-0x81A3=>0xE453,\r
-0x815F=>0xE454,\r
-0x8193=>0xE455,\r
-0x81A9=>0xE456,\r
-0x81B0=>0xE457,\r
-0x81B5=>0xE458,\r
-0x81BE=>0xE459,\r
-0x81B8=>0xE45A,\r
-0x81BD=>0xE45B,\r
-0x81C0=>0xE45C,\r
-0x81C2=>0xE45D,\r
-0x81BA=>0xE45E,\r
-0x81C9=>0xE45F,\r
-0x81CD=>0xE460,\r
-0x81D1=>0xE461,\r
-0x81D9=>0xE462,\r
-0x81D8=>0xE463,\r
-0x81C8=>0xE464,\r
-0x81DA=>0xE465,\r
-0x81DF=>0xE466,\r
-0x81E0=>0xE467,\r
-0x81E7=>0xE468,\r
-0x81FA=>0xE469,\r
-0x81FB=>0xE46A,\r
-0x81FE=>0xE46B,\r
-0x8201=>0xE46C,\r
-0x8202=>0xE46D,\r
-0x8205=>0xE46E,\r
-0x8207=>0xE46F,\r
-0x820A=>0xE470,\r
-0x820D=>0xE471,\r
-0x8210=>0xE472,\r
-0x8216=>0xE473,\r
-0x8229=>0xE474,\r
-0x822B=>0xE475,\r
-0x8238=>0xE476,\r
-0x8233=>0xE477,\r
-0x8240=>0xE478,\r
-0x8259=>0xE479,\r
-0x8258=>0xE47A,\r
-0x825D=>0xE47B,\r
-0x825A=>0xE47C,\r
-0x825F=>0xE47D,\r
-0x8264=>0xE47E,\r
-0x8262=>0xE480,\r
-0x8268=>0xE481,\r
-0x826A=>0xE482,\r
-0x826B=>0xE483,\r
-0x822E=>0xE484,\r
-0x8271=>0xE485,\r
-0x8277=>0xE486,\r
-0x8278=>0xE487,\r
-0x827E=>0xE488,\r
-0x828D=>0xE489,\r
-0x8292=>0xE48A,\r
-0x82AB=>0xE48B,\r
-0x829F=>0xE48C,\r
-0x82BB=>0xE48D,\r
-0x82AC=>0xE48E,\r
-0x82E1=>0xE48F,\r
-0x82E3=>0xE490,\r
-0x82DF=>0xE491,\r
-0x82D2=>0xE492,\r
-0x82F4=>0xE493,\r
-0x82F3=>0xE494,\r
-0x82FA=>0xE495,\r
-0x8393=>0xE496,\r
-0x8303=>0xE497,\r
-0x82FB=>0xE498,\r
-0x82F9=>0xE499,\r
-0x82DE=>0xE49A,\r
-0x8306=>0xE49B,\r
-0x82DC=>0xE49C,\r
-0x8309=>0xE49D,\r
-0x82D9=>0xE49E,\r
-0x8335=>0xE49F,\r
-0x8334=>0xE4A0,\r
-0x8316=>0xE4A1,\r
-0x8332=>0xE4A2,\r
-0x8331=>0xE4A3,\r
-0x8340=>0xE4A4,\r
-0x8339=>0xE4A5,\r
-0x8350=>0xE4A6,\r
-0x8345=>0xE4A7,\r
-0x832F=>0xE4A8,\r
-0x832B=>0xE4A9,\r
-0x8317=>0xE4AA,\r
-0x8318=>0xE4AB,\r
-0x8385=>0xE4AC,\r
-0x839A=>0xE4AD,\r
-0x83AA=>0xE4AE,\r
-0x839F=>0xE4AF,\r
-0x83A2=>0xE4B0,\r
-0x8396=>0xE4B1,\r
-0x8323=>0xE4B2,\r
-0x838E=>0xE4B3,\r
-0x8387=>0xE4B4,\r
-0x838A=>0xE4B5,\r
-0x837C=>0xE4B6,\r
-0x83B5=>0xE4B7,\r
-0x8373=>0xE4B8,\r
-0x8375=>0xE4B9,\r
-0x83A0=>0xE4BA,\r
-0x8389=>0xE4BB,\r
-0x83A8=>0xE4BC,\r
-0x83F4=>0xE4BD,\r
-0x8413=>0xE4BE,\r
-0x83EB=>0xE4BF,\r
-0x83CE=>0xE4C0,\r
-0x83FD=>0xE4C1,\r
-0x8403=>0xE4C2,\r
-0x83D8=>0xE4C3,\r
-0x840B=>0xE4C4,\r
-0x83C1=>0xE4C5,\r
-0x83F7=>0xE4C6,\r
-0x8407=>0xE4C7,\r
-0x83E0=>0xE4C8,\r
-0x83F2=>0xE4C9,\r
-0x840D=>0xE4CA,\r
-0x8422=>0xE4CB,\r
-0x8420=>0xE4CC,\r
-0x83BD=>0xE4CD,\r
-0x8438=>0xE4CE,\r
-0x8506=>0xE4CF,\r
-0x83FB=>0xE4D0,\r
-0x846D=>0xE4D1,\r
-0x842A=>0xE4D2,\r
-0x843C=>0xE4D3,\r
-0x855A=>0xE4D4,\r
-0x8484=>0xE4D5,\r
-0x8477=>0xE4D6,\r
-0x846B=>0xE4D7,\r
-0x84AD=>0xE4D8,\r
-0x846E=>0xE4D9,\r
-0x8482=>0xE4DA,\r
-0x8469=>0xE4DB,\r
-0x8446=>0xE4DC,\r
-0x842C=>0xE4DD,\r
-0x846F=>0xE4DE,\r
-0x8479=>0xE4DF,\r
-0x8435=>0xE4E0,\r
-0x84CA=>0xE4E1,\r
-0x8462=>0xE4E2,\r
-0x84B9=>0xE4E3,\r
-0x84BF=>0xE4E4,\r
-0x849F=>0xE4E5,\r
-0x84D9=>0xE4E6,\r
-0x84CD=>0xE4E7,\r
-0x84BB=>0xE4E8,\r
-0x84DA=>0xE4E9,\r
-0x84D0=>0xE4EA,\r
-0x84C1=>0xE4EB,\r
-0x84C6=>0xE4EC,\r
-0x84D6=>0xE4ED,\r
-0x84A1=>0xE4EE,\r
-0x8521=>0xE4EF,\r
-0x84FF=>0xE4F0,\r
-0x84F4=>0xE4F1,\r
-0x8517=>0xE4F2,\r
-0x8518=>0xE4F3,\r
-0x852C=>0xE4F4,\r
-0x851F=>0xE4F5,\r
-0x8515=>0xE4F6,\r
-0x8514=>0xE4F7,\r
-0x84FC=>0xE4F8,\r
-0x8540=>0xE4F9,\r
-0x8563=>0xE4FA,\r
-0x8558=>0xE4FB,\r
-0x8548=>0xE4FC,\r
-0x8541=>0xE540,\r
-0x8602=>0xE541,\r
-0x854B=>0xE542,\r
-0x8555=>0xE543,\r
-0x8580=>0xE544,\r
-0x85A4=>0xE545,\r
-0x8588=>0xE546,\r
-0x8591=>0xE547,\r
-0x858A=>0xE548,\r
-0x85A8=>0xE549,\r
-0x856D=>0xE54A,\r
-0x8594=>0xE54B,\r
-0x859B=>0xE54C,\r
-0x85EA=>0xE54D,\r
-0x8587=>0xE54E,\r
-0x859C=>0xE54F,\r
-0x8577=>0xE550,\r
-0x857E=>0xE551,\r
-0x8590=>0xE552,\r
-0x85C9=>0xE553,\r
-0x85BA=>0xE554,\r
-0x85CF=>0xE555,\r
-0x85B9=>0xE556,\r
-0x85D0=>0xE557,\r
-0x85D5=>0xE558,\r
-0x85DD=>0xE559,\r
-0x85E5=>0xE55A,\r
-0x85DC=>0xE55B,\r
-0x85F9=>0xE55C,\r
-0x860A=>0xE55D,\r
-0x8613=>0xE55E,\r
-0x860B=>0xE55F,\r
-0x85FE=>0xE560,\r
-0x85FA=>0xE561,\r
-0x8606=>0xE562,\r
-0x8622=>0xE563,\r
-0x861A=>0xE564,\r
-0x8630=>0xE565,\r
-0x863F=>0xE566,\r
-0x864D=>0xE567,\r
-0x4E55=>0xE568,\r
-0x8654=>0xE569,\r
-0x865F=>0xE56A,\r
-0x8667=>0xE56B,\r
-0x8671=>0xE56C,\r
-0x8693=>0xE56D,\r
-0x86A3=>0xE56E,\r
-0x86A9=>0xE56F,\r
-0x86AA=>0xE570,\r
-0x868B=>0xE571,\r
-0x868C=>0xE572,\r
-0x86B6=>0xE573,\r
-0x86AF=>0xE574,\r
-0x86C4=>0xE575,\r
-0x86C6=>0xE576,\r
-0x86B0=>0xE577,\r
-0x86C9=>0xE578,\r
-0x8823=>0xE579,\r
-0x86AB=>0xE57A,\r
-0x86D4=>0xE57B,\r
-0x86DE=>0xE57C,\r
-0x86E9=>0xE57D,\r
-0x86EC=>0xE57E,\r
-0x86DF=>0xE580,\r
-0x86DB=>0xE581,\r
-0x86EF=>0xE582,\r
-0x8712=>0xE583,\r
-0x8706=>0xE584,\r
-0x8708=>0xE585,\r
-0x8700=>0xE586,\r
-0x8703=>0xE587,\r
-0x86FB=>0xE588,\r
-0x8711=>0xE589,\r
-0x8709=>0xE58A,\r
-0x870D=>0xE58B,\r
-0x86F9=>0xE58C,\r
-0x870A=>0xE58D,\r
-0x8734=>0xE58E,\r
-0x873F=>0xE58F,\r
-0x8737=>0xE590,\r
-0x873B=>0xE591,\r
-0x8725=>0xE592,\r
-0x8729=>0xE593,\r
-0x871A=>0xE594,\r
-0x8760=>0xE595,\r
-0x875F=>0xE596,\r
-0x8778=>0xE597,\r
-0x874C=>0xE598,\r
-0x874E=>0xE599,\r
-0x8774=>0xE59A,\r
-0x8757=>0xE59B,\r
-0x8768=>0xE59C,\r
-0x876E=>0xE59D,\r
-0x8759=>0xE59E,\r
-0x8753=>0xE59F,\r
-0x8763=>0xE5A0,\r
-0x876A=>0xE5A1,\r
-0x8805=>0xE5A2,\r
-0x87A2=>0xE5A3,\r
-0x879F=>0xE5A4,\r
-0x8782=>0xE5A5,\r
-0x87AF=>0xE5A6,\r
-0x87CB=>0xE5A7,\r
-0x87BD=>0xE5A8,\r
-0x87C0=>0xE5A9,\r
-0x87D0=>0xE5AA,\r
-0x96D6=>0xE5AB,\r
-0x87AB=>0xE5AC,\r
-0x87C4=>0xE5AD,\r
-0x87B3=>0xE5AE,\r
-0x87C7=>0xE5AF,\r
-0x87C6=>0xE5B0,\r
-0x87BB=>0xE5B1,\r
-0x87EF=>0xE5B2,\r
-0x87F2=>0xE5B3,\r
-0x87E0=>0xE5B4,\r
-0x880F=>0xE5B5,\r
-0x880D=>0xE5B6,\r
-0x87FE=>0xE5B7,\r
-0x87F6=>0xE5B8,\r
-0x87F7=>0xE5B9,\r
-0x880E=>0xE5BA,\r
-0x87D2=>0xE5BB,\r
-0x8811=>0xE5BC,\r
-0x8816=>0xE5BD,\r
-0x8815=>0xE5BE,\r
-0x8822=>0xE5BF,\r
-0x8821=>0xE5C0,\r
-0x8831=>0xE5C1,\r
-0x8836=>0xE5C2,\r
-0x8839=>0xE5C3,\r
-0x8827=>0xE5C4,\r
-0x883B=>0xE5C5,\r
-0x8844=>0xE5C6,\r
-0x8842=>0xE5C7,\r
-0x8852=>0xE5C8,\r
-0x8859=>0xE5C9,\r
-0x885E=>0xE5CA,\r
-0x8862=>0xE5CB,\r
-0x886B=>0xE5CC,\r
-0x8881=>0xE5CD,\r
-0x887E=>0xE5CE,\r
-0x889E=>0xE5CF,\r
-0x8875=>0xE5D0,\r
-0x887D=>0xE5D1,\r
-0x88B5=>0xE5D2,\r
-0x8872=>0xE5D3,\r
-0x8882=>0xE5D4,\r
-0x8897=>0xE5D5,\r
-0x8892=>0xE5D6,\r
-0x88AE=>0xE5D7,\r
-0x8899=>0xE5D8,\r
-0x88A2=>0xE5D9,\r
-0x888D=>0xE5DA,\r
-0x88A4=>0xE5DB,\r
-0x88B0=>0xE5DC,\r
-0x88BF=>0xE5DD,\r
-0x88B1=>0xE5DE,\r
-0x88C3=>0xE5DF,\r
-0x88C4=>0xE5E0,\r
-0x88D4=>0xE5E1,\r
-0x88D8=>0xE5E2,\r
-0x88D9=>0xE5E3,\r
-0x88DD=>0xE5E4,\r
-0x88F9=>0xE5E5,\r
-0x8902=>0xE5E6,\r
-0x88FC=>0xE5E7,\r
-0x88F4=>0xE5E8,\r
-0x88E8=>0xE5E9,\r
-0x88F2=>0xE5EA,\r
-0x8904=>0xE5EB,\r
-0x890C=>0xE5EC,\r
-0x890A=>0xE5ED,\r
-0x8913=>0xE5EE,\r
-0x8943=>0xE5EF,\r
-0x891E=>0xE5F0,\r
-0x8925=>0xE5F1,\r
-0x892A=>0xE5F2,\r
-0x892B=>0xE5F3,\r
-0x8941=>0xE5F4,\r
-0x8944=>0xE5F5,\r
-0x893B=>0xE5F6,\r
-0x8936=>0xE5F7,\r
-0x8938=>0xE5F8,\r
-0x894C=>0xE5F9,\r
-0x891D=>0xE5FA,\r
-0x8960=>0xE5FB,\r
-0x895E=>0xE5FC,\r
-0x8966=>0xE640,\r
-0x8964=>0xE641,\r
-0x896D=>0xE642,\r
-0x896A=>0xE643,\r
-0x896F=>0xE644,\r
-0x8974=>0xE645,\r
-0x8977=>0xE646,\r
-0x897E=>0xE647,\r
-0x8983=>0xE648,\r
-0x8988=>0xE649,\r
-0x898A=>0xE64A,\r
-0x8993=>0xE64B,\r
-0x8998=>0xE64C,\r
-0x89A1=>0xE64D,\r
-0x89A9=>0xE64E,\r
-0x89A6=>0xE64F,\r
-0x89AC=>0xE650,\r
-0x89AF=>0xE651,\r
-0x89B2=>0xE652,\r
-0x89BA=>0xE653,\r
-0x89BD=>0xE654,\r
-0x89BF=>0xE655,\r
-0x89C0=>0xE656,\r
-0x89DA=>0xE657,\r
-0x89DC=>0xE658,\r
-0x89DD=>0xE659,\r
-0x89E7=>0xE65A,\r
-0x89F4=>0xE65B,\r
-0x89F8=>0xE65C,\r
-0x8A03=>0xE65D,\r
-0x8A16=>0xE65E,\r
-0x8A10=>0xE65F,\r
-0x8A0C=>0xE660,\r
-0x8A1B=>0xE661,\r
-0x8A1D=>0xE662,\r
-0x8A25=>0xE663,\r
-0x8A36=>0xE664,\r
-0x8A41=>0xE665,\r
-0x8A5B=>0xE666,\r
-0x8A52=>0xE667,\r
-0x8A46=>0xE668,\r
-0x8A48=>0xE669,\r
-0x8A7C=>0xE66A,\r
-0x8A6D=>0xE66B,\r
-0x8A6C=>0xE66C,\r
-0x8A62=>0xE66D,\r
-0x8A85=>0xE66E,\r
-0x8A82=>0xE66F,\r
-0x8A84=>0xE670,\r
-0x8AA8=>0xE671,\r
-0x8AA1=>0xE672,\r
-0x8A91=>0xE673,\r
-0x8AA5=>0xE674,\r
-0x8AA6=>0xE675,\r
-0x8A9A=>0xE676,\r
-0x8AA3=>0xE677,\r
-0x8AC4=>0xE678,\r
-0x8ACD=>0xE679,\r
-0x8AC2=>0xE67A,\r
-0x8ADA=>0xE67B,\r
-0x8AEB=>0xE67C,\r
-0x8AF3=>0xE67D,\r
-0x8AE7=>0xE67E,\r
-0x8AE4=>0xE680,\r
-0x8AF1=>0xE681,\r
-0x8B14=>0xE682,\r
-0x8AE0=>0xE683,\r
-0x8AE2=>0xE684,\r
-0x8AF7=>0xE685,\r
-0x8ADE=>0xE686,\r
-0x8ADB=>0xE687,\r
-0x8B0C=>0xE688,\r
-0x8B07=>0xE689,\r
-0x8B1A=>0xE68A,\r
-0x8AE1=>0xE68B,\r
-0x8B16=>0xE68C,\r
-0x8B10=>0xE68D,\r
-0x8B17=>0xE68E,\r
-0x8B20=>0xE68F,\r
-0x8B33=>0xE690,\r
-0x97AB=>0xE691,\r
-0x8B26=>0xE692,\r
-0x8B2B=>0xE693,\r
-0x8B3E=>0xE694,\r
-0x8B28=>0xE695,\r
-0x8B41=>0xE696,\r
-0x8B4C=>0xE697,\r
-0x8B4F=>0xE698,\r
-0x8B4E=>0xE699,\r
-0x8B49=>0xE69A,\r
-0x8B56=>0xE69B,\r
-0x8B5B=>0xE69C,\r
-0x8B5A=>0xE69D,\r
-0x8B6B=>0xE69E,\r
-0x8B5F=>0xE69F,\r
-0x8B6C=>0xE6A0,\r
-0x8B6F=>0xE6A1,\r
-0x8B74=>0xE6A2,\r
-0x8B7D=>0xE6A3,\r
-0x8B80=>0xE6A4,\r
-0x8B8C=>0xE6A5,\r
-0x8B8E=>0xE6A6,\r
-0x8B92=>0xE6A7,\r
-0x8B93=>0xE6A8,\r
-0x8B96=>0xE6A9,\r
-0x8B99=>0xE6AA,\r
-0x8B9A=>0xE6AB,\r
-0x8C3A=>0xE6AC,\r
-0x8C41=>0xE6AD,\r
-0x8C3F=>0xE6AE,\r
-0x8C48=>0xE6AF,\r
-0x8C4C=>0xE6B0,\r
-0x8C4E=>0xE6B1,\r
-0x8C50=>0xE6B2,\r
-0x8C55=>0xE6B3,\r
-0x8C62=>0xE6B4,\r
-0x8C6C=>0xE6B5,\r
-0x8C78=>0xE6B6,\r
-0x8C7A=>0xE6B7,\r
-0x8C82=>0xE6B8,\r
-0x8C89=>0xE6B9,\r
-0x8C85=>0xE6BA,\r
-0x8C8A=>0xE6BB,\r
-0x8C8D=>0xE6BC,\r
-0x8C8E=>0xE6BD,\r
-0x8C94=>0xE6BE,\r
-0x8C7C=>0xE6BF,\r
-0x8C98=>0xE6C0,\r
-0x621D=>0xE6C1,\r
-0x8CAD=>0xE6C2,\r
-0x8CAA=>0xE6C3,\r
-0x8CBD=>0xE6C4,\r
-0x8CB2=>0xE6C5,\r
-0x8CB3=>0xE6C6,\r
-0x8CAE=>0xE6C7,\r
-0x8CB6=>0xE6C8,\r
-0x8CC8=>0xE6C9,\r
-0x8CC1=>0xE6CA,\r
-0x8CE4=>0xE6CB,\r
-0x8CE3=>0xE6CC,\r
-0x8CDA=>0xE6CD,\r
-0x8CFD=>0xE6CE,\r
-0x8CFA=>0xE6CF,\r
-0x8CFB=>0xE6D0,\r
-0x8D04=>0xE6D1,\r
-0x8D05=>0xE6D2,\r
-0x8D0A=>0xE6D3,\r
-0x8D07=>0xE6D4,\r
-0x8D0F=>0xE6D5,\r
-0x8D0D=>0xE6D6,\r
-0x8D10=>0xE6D7,\r
-0x9F4E=>0xE6D8,\r
-0x8D13=>0xE6D9,\r
-0x8CCD=>0xE6DA,\r
-0x8D14=>0xE6DB,\r
-0x8D16=>0xE6DC,\r
-0x8D67=>0xE6DD,\r
-0x8D6D=>0xE6DE,\r
-0x8D71=>0xE6DF,\r
-0x8D73=>0xE6E0,\r
-0x8D81=>0xE6E1,\r
-0x8D99=>0xE6E2,\r
-0x8DC2=>0xE6E3,\r
-0x8DBE=>0xE6E4,\r
-0x8DBA=>0xE6E5,\r
-0x8DCF=>0xE6E6,\r
-0x8DDA=>0xE6E7,\r
-0x8DD6=>0xE6E8,\r
-0x8DCC=>0xE6E9,\r
-0x8DDB=>0xE6EA,\r
-0x8DCB=>0xE6EB,\r
-0x8DEA=>0xE6EC,\r
-0x8DEB=>0xE6ED,\r
-0x8DDF=>0xE6EE,\r
-0x8DE3=>0xE6EF,\r
-0x8DFC=>0xE6F0,\r
-0x8E08=>0xE6F1,\r
-0x8E09=>0xE6F2,\r
-0x8DFF=>0xE6F3,\r
-0x8E1D=>0xE6F4,\r
-0x8E1E=>0xE6F5,\r
-0x8E10=>0xE6F6,\r
-0x8E1F=>0xE6F7,\r
-0x8E42=>0xE6F8,\r
-0x8E35=>0xE6F9,\r
-0x8E30=>0xE6FA,\r
-0x8E34=>0xE6FB,\r
-0x8E4A=>0xE6FC,\r
-0x8E47=>0xE740,\r
-0x8E49=>0xE741,\r
-0x8E4C=>0xE742,\r
-0x8E50=>0xE743,\r
-0x8E48=>0xE744,\r
-0x8E59=>0xE745,\r
-0x8E64=>0xE746,\r
-0x8E60=>0xE747,\r
-0x8E2A=>0xE748,\r
-0x8E63=>0xE749,\r
-0x8E55=>0xE74A,\r
-0x8E76=>0xE74B,\r
-0x8E72=>0xE74C,\r
-0x8E7C=>0xE74D,\r
-0x8E81=>0xE74E,\r
-0x8E87=>0xE74F,\r
-0x8E85=>0xE750,\r
-0x8E84=>0xE751,\r
-0x8E8B=>0xE752,\r
-0x8E8A=>0xE753,\r
-0x8E93=>0xE754,\r
-0x8E91=>0xE755,\r
-0x8E94=>0xE756,\r
-0x8E99=>0xE757,\r
-0x8EAA=>0xE758,\r
-0x8EA1=>0xE759,\r
-0x8EAC=>0xE75A,\r
-0x8EB0=>0xE75B,\r
-0x8EC6=>0xE75C,\r
-0x8EB1=>0xE75D,\r
-0x8EBE=>0xE75E,\r
-0x8EC5=>0xE75F,\r
-0x8EC8=>0xE760,\r
-0x8ECB=>0xE761,\r
-0x8EDB=>0xE762,\r
-0x8EE3=>0xE763,\r
-0x8EFC=>0xE764,\r
-0x8EFB=>0xE765,\r
-0x8EEB=>0xE766,\r
-0x8EFE=>0xE767,\r
-0x8F0A=>0xE768,\r
-0x8F05=>0xE769,\r
-0x8F15=>0xE76A,\r
-0x8F12=>0xE76B,\r
-0x8F19=>0xE76C,\r
-0x8F13=>0xE76D,\r
-0x8F1C=>0xE76E,\r
-0x8F1F=>0xE76F,\r
-0x8F1B=>0xE770,\r
-0x8F0C=>0xE771,\r
-0x8F26=>0xE772,\r
-0x8F33=>0xE773,\r
-0x8F3B=>0xE774,\r
-0x8F39=>0xE775,\r
-0x8F45=>0xE776,\r
-0x8F42=>0xE777,\r
-0x8F3E=>0xE778,\r
-0x8F4C=>0xE779,\r
-0x8F49=>0xE77A,\r
-0x8F46=>0xE77B,\r
-0x8F4E=>0xE77C,\r
-0x8F57=>0xE77D,\r
-0x8F5C=>0xE77E,\r
-0x8F62=>0xE780,\r
-0x8F63=>0xE781,\r
-0x8F64=>0xE782,\r
-0x8F9C=>0xE783,\r
-0x8F9F=>0xE784,\r
-0x8FA3=>0xE785,\r
-0x8FAD=>0xE786,\r
-0x8FAF=>0xE787,\r
-0x8FB7=>0xE788,\r
-0x8FDA=>0xE789,\r
-0x8FE5=>0xE78A,\r
-0x8FE2=>0xE78B,\r
-0x8FEA=>0xE78C,\r
-0x8FEF=>0xE78D,\r
-0x9087=>0xE78E,\r
-0x8FF4=>0xE78F,\r
-0x9005=>0xE790,\r
-0x8FF9=>0xE791,\r
-0x8FFA=>0xE792,\r
-0x9011=>0xE793,\r
-0x9015=>0xE794,\r
-0x9021=>0xE795,\r
-0x900D=>0xE796,\r
-0x901E=>0xE797,\r
-0x9016=>0xE798,\r
-0x900B=>0xE799,\r
-0x9027=>0xE79A,\r
-0x9036=>0xE79B,\r
-0x9035=>0xE79C,\r
-0x9039=>0xE79D,\r
-0x8FF8=>0xE79E,\r
-0x904F=>0xE79F,\r
-0x9050=>0xE7A0,\r
-0x9051=>0xE7A1,\r
-0x9052=>0xE7A2,\r
-0x900E=>0xE7A3,\r
-0x9049=>0xE7A4,\r
-0x903E=>0xE7A5,\r
-0x9056=>0xE7A6,\r
-0x9058=>0xE7A7,\r
-0x905E=>0xE7A8,\r
-0x9068=>0xE7A9,\r
-0x906F=>0xE7AA,\r
-0x9076=>0xE7AB,\r
-0x96A8=>0xE7AC,\r
-0x9072=>0xE7AD,\r
-0x9082=>0xE7AE,\r
-0x907D=>0xE7AF,\r
-0x9081=>0xE7B0,\r
-0x9080=>0xE7B1,\r
-0x908A=>0xE7B2,\r
-0x9089=>0xE7B3,\r
-0x908F=>0xE7B4,\r
-0x90A8=>0xE7B5,\r
-0x90AF=>0xE7B6,\r
-0x90B1=>0xE7B7,\r
-0x90B5=>0xE7B8,\r
-0x90E2=>0xE7B9,\r
-0x90E4=>0xE7BA,\r
-0x6248=>0xE7BB,\r
-0x90DB=>0xE7BC,\r
-0x9102=>0xE7BD,\r
-0x9112=>0xE7BE,\r
-0x9119=>0xE7BF,\r
-0x9132=>0xE7C0,\r
-0x9130=>0xE7C1,\r
-0x914A=>0xE7C2,\r
-0x9156=>0xE7C3,\r
-0x9158=>0xE7C4,\r
-0x9163=>0xE7C5,\r
-0x9165=>0xE7C6,\r
-0x9169=>0xE7C7,\r
-0x9173=>0xE7C8,\r
-0x9172=>0xE7C9,\r
-0x918B=>0xE7CA,\r
-0x9189=>0xE7CB,\r
-0x9182=>0xE7CC,\r
-0x91A2=>0xE7CD,\r
-0x91AB=>0xE7CE,\r
-0x91AF=>0xE7CF,\r
-0x91AA=>0xE7D0,\r
-0x91B5=>0xE7D1,\r
-0x91B4=>0xE7D2,\r
-0x91BA=>0xE7D3,\r
-0x91C0=>0xE7D4,\r
-0x91C1=>0xE7D5,\r
-0x91C9=>0xE7D6,\r
-0x91CB=>0xE7D7,\r
-0x91D0=>0xE7D8,\r
-0x91D6=>0xE7D9,\r
-0x91DF=>0xE7DA,\r
-0x91E1=>0xE7DB,\r
-0x91DB=>0xE7DC,\r
-0x91FC=>0xE7DD,\r
-0x91F5=>0xE7DE,\r
-0x91F6=>0xE7DF,\r
-0x921E=>0xE7E0,\r
-0x91FF=>0xE7E1,\r
-0x9214=>0xE7E2,\r
-0x922C=>0xE7E3,\r
-0x9215=>0xE7E4,\r
-0x9211=>0xE7E5,\r
-0x925E=>0xE7E6,\r
-0x9257=>0xE7E7,\r
-0x9245=>0xE7E8,\r
-0x9249=>0xE7E9,\r
-0x9264=>0xE7EA,\r
-0x9248=>0xE7EB,\r
-0x9295=>0xE7EC,\r
-0x923F=>0xE7ED,\r
-0x924B=>0xE7EE,\r
-0x9250=>0xE7EF,\r
-0x929C=>0xE7F0,\r
-0x9296=>0xE7F1,\r
-0x9293=>0xE7F2,\r
-0x929B=>0xE7F3,\r
-0x925A=>0xE7F4,\r
-0x92CF=>0xE7F5,\r
-0x92B9=>0xE7F6,\r
-0x92B7=>0xE7F7,\r
-0x92E9=>0xE7F8,\r
-0x930F=>0xE7F9,\r
-0x92FA=>0xE7FA,\r
-0x9344=>0xE7FB,\r
-0x932E=>0xE7FC,\r
-0x9319=>0xE840,\r
-0x9322=>0xE841,\r
-0x931A=>0xE842,\r
-0x9323=>0xE843,\r
-0x933A=>0xE844,\r
-0x9335=>0xE845,\r
-0x933B=>0xE846,\r
-0x935C=>0xE847,\r
-0x9360=>0xE848,\r
-0x937C=>0xE849,\r
-0x936E=>0xE84A,\r
-0x9356=>0xE84B,\r
-0x93B0=>0xE84C,\r
-0x93AC=>0xE84D,\r
-0x93AD=>0xE84E,\r
-0x9394=>0xE84F,\r
-0x93B9=>0xE850,\r
-0x93D6=>0xE851,\r
-0x93D7=>0xE852,\r
-0x93E8=>0xE853,\r
-0x93E5=>0xE854,\r
-0x93D8=>0xE855,\r
-0x93C3=>0xE856,\r
-0x93DD=>0xE857,\r
-0x93D0=>0xE858,\r
-0x93C8=>0xE859,\r
-0x93E4=>0xE85A,\r
-0x941A=>0xE85B,\r
-0x9414=>0xE85C,\r
-0x9413=>0xE85D,\r
-0x9403=>0xE85E,\r
-0x9407=>0xE85F,\r
-0x9410=>0xE860,\r
-0x9436=>0xE861,\r
-0x942B=>0xE862,\r
-0x9435=>0xE863,\r
-0x9421=>0xE864,\r
-0x943A=>0xE865,\r
-0x9441=>0xE866,\r
-0x9452=>0xE867,\r
-0x9444=>0xE868,\r
-0x945B=>0xE869,\r
-0x9460=>0xE86A,\r
-0x9462=>0xE86B,\r
-0x945E=>0xE86C,\r
-0x946A=>0xE86D,\r
-0x9229=>0xE86E,\r
-0x9470=>0xE86F,\r
-0x9475=>0xE870,\r
-0x9477=>0xE871,\r
-0x947D=>0xE872,\r
-0x945A=>0xE873,\r
-0x947C=>0xE874,\r
-0x947E=>0xE875,\r
-0x9481=>0xE876,\r
-0x947F=>0xE877,\r
-0x9582=>0xE878,\r
-0x9587=>0xE879,\r
-0x958A=>0xE87A,\r
-0x9594=>0xE87B,\r
-0x9596=>0xE87C,\r
-0x9598=>0xE87D,\r
-0x9599=>0xE87E,\r
-0x95A0=>0xE880,\r
-0x95A8=>0xE881,\r
-0x95A7=>0xE882,\r
-0x95AD=>0xE883,\r
-0x95BC=>0xE884,\r
-0x95BB=>0xE885,\r
-0x95B9=>0xE886,\r
-0x95BE=>0xE887,\r
-0x95CA=>0xE888,\r
-0x6FF6=>0xE889,\r
-0x95C3=>0xE88A,\r
-0x95CD=>0xE88B,\r
-0x95CC=>0xE88C,\r
-0x95D5=>0xE88D,\r
-0x95D4=>0xE88E,\r
-0x95D6=>0xE88F,\r
-0x95DC=>0xE890,\r
-0x95E1=>0xE891,\r
-0x95E5=>0xE892,\r
-0x95E2=>0xE893,\r
-0x9621=>0xE894,\r
-0x9628=>0xE895,\r
-0x962E=>0xE896,\r
-0x962F=>0xE897,\r
-0x9642=>0xE898,\r
-0x964C=>0xE899,\r
-0x964F=>0xE89A,\r
-0x964B=>0xE89B,\r
-0x9677=>0xE89C,\r
-0x965C=>0xE89D,\r
-0x965E=>0xE89E,\r
-0x965D=>0xE89F,\r
-0x965F=>0xE8A0,\r
-0x9666=>0xE8A1,\r
-0x9672=>0xE8A2,\r
-0x966C=>0xE8A3,\r
-0x968D=>0xE8A4,\r
-0x9698=>0xE8A5,\r
-0x9695=>0xE8A6,\r
-0x9697=>0xE8A7,\r
-0x96AA=>0xE8A8,\r
-0x96A7=>0xE8A9,\r
-0x96B1=>0xE8AA,\r
-0x96B2=>0xE8AB,\r
-0x96B0=>0xE8AC,\r
-0x96B4=>0xE8AD,\r
-0x96B6=>0xE8AE,\r
-0x96B8=>0xE8AF,\r
-0x96B9=>0xE8B0,\r
-0x96CE=>0xE8B1,\r
-0x96CB=>0xE8B2,\r
-0x96C9=>0xE8B3,\r
-0x96CD=>0xE8B4,\r
-0x894D=>0xE8B5,\r
-0x96DC=>0xE8B6,\r
-0x970D=>0xE8B7,\r
-0x96D5=>0xE8B8,\r
-0x96F9=>0xE8B9,\r
-0x9704=>0xE8BA,\r
-0x9706=>0xE8BB,\r
-0x9708=>0xE8BC,\r
-0x9713=>0xE8BD,\r
-0x970E=>0xE8BE,\r
-0x9711=>0xE8BF,\r
-0x970F=>0xE8C0,\r
-0x9716=>0xE8C1,\r
-0x9719=>0xE8C2,\r
-0x9724=>0xE8C3,\r
-0x972A=>0xE8C4,\r
-0x9730=>0xE8C5,\r
-0x9739=>0xE8C6,\r
-0x973D=>0xE8C7,\r
-0x973E=>0xE8C8,\r
-0x9744=>0xE8C9,\r
-0x9746=>0xE8CA,\r
-0x9748=>0xE8CB,\r
-0x9742=>0xE8CC,\r
-0x9749=>0xE8CD,\r
-0x975C=>0xE8CE,\r
-0x9760=>0xE8CF,\r
-0x9764=>0xE8D0,\r
-0x9766=>0xE8D1,\r
-0x9768=>0xE8D2,\r
-0x52D2=>0xE8D3,\r
-0x976B=>0xE8D4,\r
-0x9771=>0xE8D5,\r
-0x9779=>0xE8D6,\r
-0x9785=>0xE8D7,\r
-0x977C=>0xE8D8,\r
-0x9781=>0xE8D9,\r
-0x977A=>0xE8DA,\r
-0x9786=>0xE8DB,\r
-0x978B=>0xE8DC,\r
-0x978F=>0xE8DD,\r
-0x9790=>0xE8DE,\r
-0x979C=>0xE8DF,\r
-0x97A8=>0xE8E0,\r
-0x97A6=>0xE8E1,\r
-0x97A3=>0xE8E2,\r
-0x97B3=>0xE8E3,\r
-0x97B4=>0xE8E4,\r
-0x97C3=>0xE8E5,\r
-0x97C6=>0xE8E6,\r
-0x97C8=>0xE8E7,\r
-0x97CB=>0xE8E8,\r
-0x97DC=>0xE8E9,\r
-0x97ED=>0xE8EA,\r
-0x9F4F=>0xE8EB,\r
-0x97F2=>0xE8EC,\r
-0x7ADF=>0xE8ED,\r
-0x97F6=>0xE8EE,\r
-0x97F5=>0xE8EF,\r
-0x980F=>0xE8F0,\r
-0x980C=>0xE8F1,\r
-0x9838=>0xE8F2,\r
-0x9824=>0xE8F3,\r
-0x9821=>0xE8F4,\r
-0x9837=>0xE8F5,\r
-0x983D=>0xE8F6,\r
-0x9846=>0xE8F7,\r
-0x984F=>0xE8F8,\r
-0x984B=>0xE8F9,\r
-0x986B=>0xE8FA,\r
-0x986F=>0xE8FB,\r
-0x9870=>0xE8FC,\r
-0x9871=>0xE940,\r
-0x9874=>0xE941,\r
-0x9873=>0xE942,\r
-0x98AA=>0xE943,\r
-0x98AF=>0xE944,\r
-0x98B1=>0xE945,\r
-0x98B6=>0xE946,\r
-0x98C4=>0xE947,\r
-0x98C3=>0xE948,\r
-0x98C6=>0xE949,\r
-0x98E9=>0xE94A,\r
-0x98EB=>0xE94B,\r
-0x9903=>0xE94C,\r
-0x9909=>0xE94D,\r
-0x9912=>0xE94E,\r
-0x9914=>0xE94F,\r
-0x9918=>0xE950,\r
-0x9921=>0xE951,\r
-0x991D=>0xE952,\r
-0x991E=>0xE953,\r
-0x9924=>0xE954,\r
-0x9920=>0xE955,\r
-0x992C=>0xE956,\r
-0x992E=>0xE957,\r
-0x993D=>0xE958,\r
-0x993E=>0xE959,\r
-0x9942=>0xE95A,\r
-0x9949=>0xE95B,\r
-0x9945=>0xE95C,\r
-0x9950=>0xE95D,\r
-0x994B=>0xE95E,\r
-0x9951=>0xE95F,\r
-0x9952=>0xE960,\r
-0x994C=>0xE961,\r
-0x9955=>0xE962,\r
-0x9997=>0xE963,\r
-0x9998=>0xE964,\r
-0x99A5=>0xE965,\r
-0x99AD=>0xE966,\r
-0x99AE=>0xE967,\r
-0x99BC=>0xE968,\r
-0x99DF=>0xE969,\r
-0x99DB=>0xE96A,\r
-0x99DD=>0xE96B,\r
-0x99D8=>0xE96C,\r
-0x99D1=>0xE96D,\r
-0x99ED=>0xE96E,\r
-0x99EE=>0xE96F,\r
-0x99F1=>0xE970,\r
-0x99F2=>0xE971,\r
-0x99FB=>0xE972,\r
-0x99F8=>0xE973,\r
-0x9A01=>0xE974,\r
-0x9A0F=>0xE975,\r
-0x9A05=>0xE976,\r
-0x99E2=>0xE977,\r
-0x9A19=>0xE978,\r
-0x9A2B=>0xE979,\r
-0x9A37=>0xE97A,\r
-0x9A45=>0xE97B,\r
-0x9A42=>0xE97C,\r
-0x9A40=>0xE97D,\r
-0x9A43=>0xE97E,\r
-0x9A3E=>0xE980,\r
-0x9A55=>0xE981,\r
-0x9A4D=>0xE982,\r
-0x9A5B=>0xE983,\r
-0x9A57=>0xE984,\r
-0x9A5F=>0xE985,\r
-0x9A62=>0xE986,\r
-0x9A65=>0xE987,\r
-0x9A64=>0xE988,\r
-0x9A69=>0xE989,\r
-0x9A6B=>0xE98A,\r
-0x9A6A=>0xE98B,\r
-0x9AAD=>0xE98C,\r
-0x9AB0=>0xE98D,\r
-0x9ABC=>0xE98E,\r
-0x9AC0=>0xE98F,\r
-0x9ACF=>0xE990,\r
-0x9AD1=>0xE991,\r
-0x9AD3=>0xE992,\r
-0x9AD4=>0xE993,\r
-0x9ADE=>0xE994,\r
-0x9ADF=>0xE995,\r
-0x9AE2=>0xE996,\r
-0x9AE3=>0xE997,\r
-0x9AE6=>0xE998,\r
-0x9AEF=>0xE999,\r
-0x9AEB=>0xE99A,\r
-0x9AEE=>0xE99B,\r
-0x9AF4=>0xE99C,\r
-0x9AF1=>0xE99D,\r
-0x9AF7=>0xE99E,\r
-0x9AFB=>0xE99F,\r
-0x9B06=>0xE9A0,\r
-0x9B18=>0xE9A1,\r
-0x9B1A=>0xE9A2,\r
-0x9B1F=>0xE9A3,\r
-0x9B22=>0xE9A4,\r
-0x9B23=>0xE9A5,\r
-0x9B25=>0xE9A6,\r
-0x9B27=>0xE9A7,\r
-0x9B28=>0xE9A8,\r
-0x9B29=>0xE9A9,\r
-0x9B2A=>0xE9AA,\r
-0x9B2E=>0xE9AB,\r
-0x9B2F=>0xE9AC,\r
-0x9B32=>0xE9AD,\r
-0x9B44=>0xE9AE,\r
-0x9B43=>0xE9AF,\r
-0x9B4F=>0xE9B0,\r
-0x9B4D=>0xE9B1,\r
-0x9B4E=>0xE9B2,\r
-0x9B51=>0xE9B3,\r
-0x9B58=>0xE9B4,\r
-0x9B74=>0xE9B5,\r
-0x9B93=>0xE9B6,\r
-0x9B83=>0xE9B7,\r
-0x9B91=>0xE9B8,\r
-0x9B96=>0xE9B9,\r
-0x9B97=>0xE9BA,\r
-0x9B9F=>0xE9BB,\r
-0x9BA0=>0xE9BC,\r
-0x9BA8=>0xE9BD,\r
-0x9BB4=>0xE9BE,\r
-0x9BC0=>0xE9BF,\r
-0x9BCA=>0xE9C0,\r
-0x9BB9=>0xE9C1,\r
-0x9BC6=>0xE9C2,\r
-0x9BCF=>0xE9C3,\r
-0x9BD1=>0xE9C4,\r
-0x9BD2=>0xE9C5,\r
-0x9BE3=>0xE9C6,\r
-0x9BE2=>0xE9C7,\r
-0x9BE4=>0xE9C8,\r
-0x9BD4=>0xE9C9,\r
-0x9BE1=>0xE9CA,\r
-0x9C3A=>0xE9CB,\r
-0x9BF2=>0xE9CC,\r
-0x9BF1=>0xE9CD,\r
-0x9BF0=>0xE9CE,\r
-0x9C15=>0xE9CF,\r
-0x9C14=>0xE9D0,\r
-0x9C09=>0xE9D1,\r
-0x9C13=>0xE9D2,\r
-0x9C0C=>0xE9D3,\r
-0x9C06=>0xE9D4,\r
-0x9C08=>0xE9D5,\r
-0x9C12=>0xE9D6,\r
-0x9C0A=>0xE9D7,\r
-0x9C04=>0xE9D8,\r
-0x9C2E=>0xE9D9,\r
-0x9C1B=>0xE9DA,\r
-0x9C25=>0xE9DB,\r
-0x9C24=>0xE9DC,\r
-0x9C21=>0xE9DD,\r
-0x9C30=>0xE9DE,\r
-0x9C47=>0xE9DF,\r
-0x9C32=>0xE9E0,\r
-0x9C46=>0xE9E1,\r
-0x9C3E=>0xE9E2,\r
-0x9C5A=>0xE9E3,\r
-0x9C60=>0xE9E4,\r
-0x9C67=>0xE9E5,\r
-0x9C76=>0xE9E6,\r
-0x9C78=>0xE9E7,\r
-0x9CE7=>0xE9E8,\r
-0x9CEC=>0xE9E9,\r
-0x9CF0=>0xE9EA,\r
-0x9D09=>0xE9EB,\r
-0x9D08=>0xE9EC,\r
-0x9CEB=>0xE9ED,\r
-0x9D03=>0xE9EE,\r
-0x9D06=>0xE9EF,\r
-0x9D2A=>0xE9F0,\r
-0x9D26=>0xE9F1,\r
-0x9DAF=>0xE9F2,\r
-0x9D23=>0xE9F3,\r
-0x9D1F=>0xE9F4,\r
-0x9D44=>0xE9F5,\r
-0x9D15=>0xE9F6,\r
-0x9D12=>0xE9F7,\r
-0x9D41=>0xE9F8,\r
-0x9D3F=>0xE9F9,\r
-0x9D3E=>0xE9FA,\r
-0x9D46=>0xE9FB,\r
-0x9D48=>0xE9FC,\r
-0x9D5D=>0xEA40,\r
-0x9D5E=>0xEA41,\r
-0x9D64=>0xEA42,\r
-0x9D51=>0xEA43,\r
-0x9D50=>0xEA44,\r
-0x9D59=>0xEA45,\r
-0x9D72=>0xEA46,\r
-0x9D89=>0xEA47,\r
-0x9D87=>0xEA48,\r
-0x9DAB=>0xEA49,\r
-0x9D6F=>0xEA4A,\r
-0x9D7A=>0xEA4B,\r
-0x9D9A=>0xEA4C,\r
-0x9DA4=>0xEA4D,\r
-0x9DA9=>0xEA4E,\r
-0x9DB2=>0xEA4F,\r
-0x9DC4=>0xEA50,\r
-0x9DC1=>0xEA51,\r
-0x9DBB=>0xEA52,\r
-0x9DB8=>0xEA53,\r
-0x9DBA=>0xEA54,\r
-0x9DC6=>0xEA55,\r
-0x9DCF=>0xEA56,\r
-0x9DC2=>0xEA57,\r
-0x9DD9=>0xEA58,\r
-0x9DD3=>0xEA59,\r
-0x9DF8=>0xEA5A,\r
-0x9DE6=>0xEA5B,\r
-0x9DED=>0xEA5C,\r
-0x9DEF=>0xEA5D,\r
-0x9DFD=>0xEA5E,\r
-0x9E1A=>0xEA5F,\r
-0x9E1B=>0xEA60,\r
-0x9E1E=>0xEA61,\r
-0x9E75=>0xEA62,\r
-0x9E79=>0xEA63,\r
-0x9E7D=>0xEA64,\r
-0x9E81=>0xEA65,\r
-0x9E88=>0xEA66,\r
-0x9E8B=>0xEA67,\r
-0x9E8C=>0xEA68,\r
-0x9E92=>0xEA69,\r
-0x9E95=>0xEA6A,\r
-0x9E91=>0xEA6B,\r
-0x9E9D=>0xEA6C,\r
-0x9EA5=>0xEA6D,\r
-0x9EA9=>0xEA6E,\r
-0x9EB8=>0xEA6F,\r
-0x9EAA=>0xEA70,\r
-0x9EAD=>0xEA71,\r
-0x9761=>0xEA72,\r
-0x9ECC=>0xEA73,\r
-0x9ECE=>0xEA74,\r
-0x9ECF=>0xEA75,\r
-0x9ED0=>0xEA76,\r
-0x9ED4=>0xEA77,\r
-0x9EDC=>0xEA78,\r
-0x9EDE=>0xEA79,\r
-0x9EDD=>0xEA7A,\r
-0x9EE0=>0xEA7B,\r
-0x9EE5=>0xEA7C,\r
-0x9EE8=>0xEA7D,\r
-0x9EEF=>0xEA7E,\r
-0x9EF4=>0xEA80,\r
-0x9EF6=>0xEA81,\r
-0x9EF7=>0xEA82,\r
-0x9EF9=>0xEA83,\r
-0x9EFB=>0xEA84,\r
-0x9EFC=>0xEA85,\r
-0x9EFD=>0xEA86,\r
-0x9F07=>0xEA87,\r
-0x9F08=>0xEA88,\r
-0x76B7=>0xEA89,\r
-0x9F15=>0xEA8A,\r
-0x9F21=>0xEA8B,\r
-0x9F2C=>0xEA8C,\r
-0x9F3E=>0xEA8D,\r
-0x9F4A=>0xEA8E,\r
-0x9F52=>0xEA8F,\r
-0x9F54=>0xEA90,\r
-0x9F63=>0xEA91,\r
-0x9F5F=>0xEA92,\r
-0x9F60=>0xEA93,\r
-0x9F61=>0xEA94,\r
-0x9F66=>0xEA95,\r
-0x9F67=>0xEA96,\r
-0x9F6C=>0xEA97,\r
-0x9F6A=>0xEA98,\r
-0x9F77=>0xEA99,\r
-0x9F72=>0xEA9A,\r
-0x9F76=>0xEA9B,\r
-0x9F95=>0xEA9C,\r
-0x9F9C=>0xEA9D,\r
-0x9FA0=>0xEA9E,\r
-0x582F=>0xEA9F,\r
-0x69C7=>0xEAA0,\r
-0x9059=>0xEAA1,\r
-0x7464=>0xEAA2,\r
-0x51DC=>0xEAA3,\r
-0x7199=>0xEAA4,\r
-0x7E8A=>0xED40,\r
-0x891C=>0xED41,\r
-0x9348=>0xED42,\r
-0x9288=>0xED43,\r
-0x84DC=>0xED44,\r
-0x4FC9=>0xED45,\r
-0x70BB=>0xED46,\r
-0x6631=>0xED47,\r
-0x68C8=>0xED48,\r
-0x92F9=>0xED49,\r
-0x66FB=>0xED4A,\r
-0x5F45=>0xED4B,\r
-0x4E28=>0xED4C,\r
-0x4EE1=>0xED4D,\r
-0x4EFC=>0xED4E,\r
-0x4F00=>0xED4F,\r
-0x4F03=>0xED50,\r
-0x4F39=>0xED51,\r
-0x4F56=>0xED52,\r
-0x4F92=>0xED53,\r
-0x4F8A=>0xED54,\r
-0x4F9A=>0xED55,\r
-0x4F94=>0xED56,\r
-0x4FCD=>0xED57,\r
-0x5040=>0xED58,\r
-0x5022=>0xED59,\r
-0x4FFF=>0xED5A,\r
-0x501E=>0xED5B,\r
-0x5046=>0xED5C,\r
-0x5070=>0xED5D,\r
-0x5042=>0xED5E,\r
-0x5094=>0xED5F,\r
-0x50F4=>0xED60,\r
-0x50D8=>0xED61,\r
-0x514A=>0xED62,\r
-0x5164=>0xED63,\r
-0x519D=>0xED64,\r
-0x51BE=>0xED65,\r
-0x51EC=>0xED66,\r
-0x5215=>0xED67,\r
-0x529C=>0xED68,\r
-0x52A6=>0xED69,\r
-0x52C0=>0xED6A,\r
-0x52DB=>0xED6B,\r
-0x5300=>0xED6C,\r
-0x5307=>0xED6D,\r
-0x5324=>0xED6E,\r
-0x5372=>0xED6F,\r
-0x5393=>0xED70,\r
-0x53B2=>0xED71,\r
-0x53DD=>0xED72,\r
-0xFA0E=>0xED73,\r
-0x549C=>0xED74,\r
-0x548A=>0xED75,\r
-0x54A9=>0xED76,\r
-0x54FF=>0xED77,\r
-0x5586=>0xED78,\r
-0x5759=>0xED79,\r
-0x5765=>0xED7A,\r
-0x57AC=>0xED7B,\r
-0x57C8=>0xED7C,\r
-0x57C7=>0xED7D,\r
-0xFA0F=>0xED7E,\r
-0xFA10=>0xED80,\r
-0x589E=>0xED81,\r
-0x58B2=>0xED82,\r
-0x590B=>0xED83,\r
-0x5953=>0xED84,\r
-0x595B=>0xED85,\r
-0x595D=>0xED86,\r
-0x5963=>0xED87,\r
-0x59A4=>0xED88,\r
-0x59BA=>0xED89,\r
-0x5B56=>0xED8A,\r
-0x5BC0=>0xED8B,\r
-0x752F=>0xED8C,\r
-0x5BD8=>0xED8D,\r
-0x5BEC=>0xED8E,\r
-0x5C1E=>0xED8F,\r
-0x5CA6=>0xED90,\r
-0x5CBA=>0xED91,\r
-0x5CF5=>0xED92,\r
-0x5D27=>0xED93,\r
-0x5D53=>0xED94,\r
-0xFA11=>0xED95,\r
-0x5D42=>0xED96,\r
-0x5D6D=>0xED97,\r
-0x5DB8=>0xED98,\r
-0x5DB9=>0xED99,\r
-0x5DD0=>0xED9A,\r
-0x5F21=>0xED9B,\r
-0x5F34=>0xED9C,\r
-0x5F67=>0xED9D,\r
-0x5FB7=>0xED9E,\r
-0x5FDE=>0xED9F,\r
-0x605D=>0xEDA0,\r
-0x6085=>0xEDA1,\r
-0x608A=>0xEDA2,\r
-0x60DE=>0xEDA3,\r
-0x60D5=>0xEDA4,\r
-0x6120=>0xEDA5,\r
-0x60F2=>0xEDA6,\r
-0x6111=>0xEDA7,\r
-0x6137=>0xEDA8,\r
-0x6130=>0xEDA9,\r
-0x6198=>0xEDAA,\r
-0x6213=>0xEDAB,\r
-0x62A6=>0xEDAC,\r
-0x63F5=>0xEDAD,\r
-0x6460=>0xEDAE,\r
-0x649D=>0xEDAF,\r
-0x64CE=>0xEDB0,\r
-0x654E=>0xEDB1,\r
-0x6600=>0xEDB2,\r
-0x6615=>0xEDB3,\r
-0x663B=>0xEDB4,\r
-0x6609=>0xEDB5,\r
-0x662E=>0xEDB6,\r
-0x661E=>0xEDB7,\r
-0x6624=>0xEDB8,\r
-0x6665=>0xEDB9,\r
-0x6657=>0xEDBA,\r
-0x6659=>0xEDBB,\r
-0xFA12=>0xEDBC,\r
-0x6673=>0xEDBD,\r
-0x6699=>0xEDBE,\r
-0x66A0=>0xEDBF,\r
-0x66B2=>0xEDC0,\r
-0x66BF=>0xEDC1,\r
-0x66FA=>0xEDC2,\r
-0x670E=>0xEDC3,\r
-0xF929=>0xEDC4,\r
-0x6766=>0xEDC5,\r
-0x67BB=>0xEDC6,\r
-0x6852=>0xEDC7,\r
-0x67C0=>0xEDC8,\r
-0x6801=>0xEDC9,\r
-0x6844=>0xEDCA,\r
-0x68CF=>0xEDCB,\r
-0xFA13=>0xEDCC,\r
-0x6968=>0xEDCD,\r
-0xFA14=>0xEDCE,\r
-0x6998=>0xEDCF,\r
-0x69E2=>0xEDD0,\r
-0x6A30=>0xEDD1,\r
-0x6A6B=>0xEDD2,\r
-0x6A46=>0xEDD3,\r
-0x6A73=>0xEDD4,\r
-0x6A7E=>0xEDD5,\r
-0x6AE2=>0xEDD6,\r
-0x6AE4=>0xEDD7,\r
-0x6BD6=>0xEDD8,\r
-0x6C3F=>0xEDD9,\r
-0x6C5C=>0xEDDA,\r
-0x6C86=>0xEDDB,\r
-0x6C6F=>0xEDDC,\r
-0x6CDA=>0xEDDD,\r
-0x6D04=>0xEDDE,\r
-0x6D87=>0xEDDF,\r
-0x6D6F=>0xEDE0,\r
-0x6D96=>0xEDE1,\r
-0x6DAC=>0xEDE2,\r
-0x6DCF=>0xEDE3,\r
-0x6DF8=>0xEDE4,\r
-0x6DF2=>0xEDE5,\r
-0x6DFC=>0xEDE6,\r
-0x6E39=>0xEDE7,\r
-0x6E5C=>0xEDE8,\r
-0x6E27=>0xEDE9,\r
-0x6E3C=>0xEDEA,\r
-0x6EBF=>0xEDEB,\r
-0x6F88=>0xEDEC,\r
-0x6FB5=>0xEDED,\r
-0x6FF5=>0xEDEE,\r
-0x7005=>0xEDEF,\r
-0x7007=>0xEDF0,\r
-0x7028=>0xEDF1,\r
-0x7085=>0xEDF2,\r
-0x70AB=>0xEDF3,\r
-0x710F=>0xEDF4,\r
-0x7104=>0xEDF5,\r
-0x715C=>0xEDF6,\r
-0x7146=>0xEDF7,\r
-0x7147=>0xEDF8,\r
-0xFA15=>0xEDF9,\r
-0x71C1=>0xEDFA,\r
-0x71FE=>0xEDFB,\r
-0x72B1=>0xEDFC,\r
-0x72BE=>0xEE40,\r
-0x7324=>0xEE41,\r
-0xFA16=>0xEE42,\r
-0x7377=>0xEE43,\r
-0x73BD=>0xEE44,\r
-0x73C9=>0xEE45,\r
-0x73D6=>0xEE46,\r
-0x73E3=>0xEE47,\r
-0x73D2=>0xEE48,\r
-0x7407=>0xEE49,\r
-0x73F5=>0xEE4A,\r
-0x7426=>0xEE4B,\r
-0x742A=>0xEE4C,\r
-0x7429=>0xEE4D,\r
-0x742E=>0xEE4E,\r
-0x7462=>0xEE4F,\r
-0x7489=>0xEE50,\r
-0x749F=>0xEE51,\r
-0x7501=>0xEE52,\r
-0x756F=>0xEE53,\r
-0x7682=>0xEE54,\r
-0x769C=>0xEE55,\r
-0x769E=>0xEE56,\r
-0x769B=>0xEE57,\r
-0x76A6=>0xEE58,\r
-0xFA17=>0xEE59,\r
-0x7746=>0xEE5A,\r
-0x52AF=>0xEE5B,\r
-0x7821=>0xEE5C,\r
-0x784E=>0xEE5D,\r
-0x7864=>0xEE5E,\r
-0x787A=>0xEE5F,\r
-0x7930=>0xEE60,\r
-0xFA18=>0xEE61,\r
-0xFA19=>0xEE62,\r
-0xFA1A=>0xEE63,\r
-0x7994=>0xEE64,\r
-0xFA1B=>0xEE65,\r
-0x799B=>0xEE66,\r
-0x7AD1=>0xEE67,\r
-0x7AE7=>0xEE68,\r
-0xFA1C=>0xEE69,\r
-0x7AEB=>0xEE6A,\r
-0x7B9E=>0xEE6B,\r
-0xFA1D=>0xEE6C,\r
-0x7D48=>0xEE6D,\r
-0x7D5C=>0xEE6E,\r
-0x7DB7=>0xEE6F,\r
-0x7DA0=>0xEE70,\r
-0x7DD6=>0xEE71,\r
-0x7E52=>0xEE72,\r
-0x7F47=>0xEE73,\r
-0x7FA1=>0xEE74,\r
-0xFA1E=>0xEE75,\r
-0x8301=>0xEE76,\r
-0x8362=>0xEE77,\r
-0x837F=>0xEE78,\r
-0x83C7=>0xEE79,\r
-0x83F6=>0xEE7A,\r
-0x8448=>0xEE7B,\r
-0x84B4=>0xEE7C,\r
-0x8553=>0xEE7D,\r
-0x8559=>0xEE7E,\r
-0x856B=>0xEE80,\r
-0xFA1F=>0xEE81,\r
-0x85B0=>0xEE82,\r
-0xFA20=>0xEE83,\r
-0xFA21=>0xEE84,\r
-0x8807=>0xEE85,\r
-0x88F5=>0xEE86,\r
-0x8A12=>0xEE87,\r
-0x8A37=>0xEE88,\r
-0x8A79=>0xEE89,\r
-0x8AA7=>0xEE8A,\r
-0x8ABE=>0xEE8B,\r
-0x8ADF=>0xEE8C,\r
-0xFA22=>0xEE8D,\r
-0x8AF6=>0xEE8E,\r
-0x8B53=>0xEE8F,\r
-0x8B7F=>0xEE90,\r
-0x8CF0=>0xEE91,\r
-0x8CF4=>0xEE92,\r
-0x8D12=>0xEE93,\r
-0x8D76=>0xEE94,\r
-0xFA23=>0xEE95,\r
-0x8ECF=>0xEE96,\r
-0xFA24=>0xEE97,\r
-0xFA25=>0xEE98,\r
-0x9067=>0xEE99,\r
-0x90DE=>0xEE9A,\r
-0xFA26=>0xEE9B,\r
-0x9115=>0xEE9C,\r
-0x9127=>0xEE9D,\r
-0x91DA=>0xEE9E,\r
-0x91D7=>0xEE9F,\r
-0x91DE=>0xEEA0,\r
-0x91ED=>0xEEA1,\r
-0x91EE=>0xEEA2,\r
-0x91E4=>0xEEA3,\r
-0x91E5=>0xEEA4,\r
-0x9206=>0xEEA5,\r
-0x9210=>0xEEA6,\r
-0x920A=>0xEEA7,\r
-0x923A=>0xEEA8,\r
-0x9240=>0xEEA9,\r
-0x923C=>0xEEAA,\r
-0x924E=>0xEEAB,\r
-0x9259=>0xEEAC,\r
-0x9251=>0xEEAD,\r
-0x9239=>0xEEAE,\r
-0x9267=>0xEEAF,\r
-0x92A7=>0xEEB0,\r
-0x9277=>0xEEB1,\r
-0x9278=>0xEEB2,\r
-0x92E7=>0xEEB3,\r
-0x92D7=>0xEEB4,\r
-0x92D9=>0xEEB5,\r
-0x92D0=>0xEEB6,\r
-0xFA27=>0xEEB7,\r
-0x92D5=>0xEEB8,\r
-0x92E0=>0xEEB9,\r
-0x92D3=>0xEEBA,\r
-0x9325=>0xEEBB,\r
-0x9321=>0xEEBC,\r
-0x92FB=>0xEEBD,\r
-0xFA28=>0xEEBE,\r
-0x931E=>0xEEBF,\r
-0x92FF=>0xEEC0,\r
-0x931D=>0xEEC1,\r
-0x9302=>0xEEC2,\r
-0x9370=>0xEEC3,\r
-0x9357=>0xEEC4,\r
-0x93A4=>0xEEC5,\r
-0x93C6=>0xEEC6,\r
-0x93DE=>0xEEC7,\r
-0x93F8=>0xEEC8,\r
-0x9431=>0xEEC9,\r
-0x9445=>0xEECA,\r
-0x9448=>0xEECB,\r
-0x9592=>0xEECC,\r
-0xF9DC=>0xEECD,\r
-0xFA29=>0xEECE,\r
-0x969D=>0xEECF,\r
-0x96AF=>0xEED0,\r
-0x9733=>0xEED1,\r
-0x973B=>0xEED2,\r
-0x9743=>0xEED3,\r
-0x974D=>0xEED4,\r
-0x974F=>0xEED5,\r
-0x9751=>0xEED6,\r
-0x9755=>0xEED7,\r
-0x9857=>0xEED8,\r
-0x9865=>0xEED9,\r
-0xFA2A=>0xEEDA,\r
-0xFA2B=>0xEEDB,\r
-0x9927=>0xEEDC,\r
-0xFA2C=>0xEEDD,\r
-0x999E=>0xEEDE,\r
-0x9A4E=>0xEEDF,\r
-0x9AD9=>0xEEE0,\r
-0x9ADC=>0xEEE1,\r
-0x9B75=>0xEEE2,\r
-0x9B72=>0xEEE3,\r
-0x9B8F=>0xEEE4,\r
-0x9BB1=>0xEEE5,\r
-0x9BBB=>0xEEE6,\r
-0x9C00=>0xEEE7,\r
-0x9D70=>0xEEE8,\r
-0x9D6B=>0xEEE9,\r
-0xFA2D=>0xEEEA,\r
-0x9E19=>0xEEEB,\r
-0x9ED1=>0xEEEC,\r
-0x2170=>0xEEEF,\r
-0x2171=>0xEEF0,\r
-0x2172=>0xEEF1,\r
-0x2173=>0xEEF2,\r
-0x2174=>0xEEF3,\r
-0x2175=>0xEEF4,\r
-0x2176=>0xEEF5,\r
-0x2177=>0xEEF6,\r
-0x2178=>0xEEF7,\r
-0x2179=>0xEEF8,\r
-0xFFE2=>0xEEF9,\r
-0xFFE4=>0xEEFA,\r
-0xFF07=>0xEEFB,\r
-0xFF02=>0xEEFC,\r
-0xE000=>0xF040,\r
-0xE001=>0xF041,\r
-0xE002=>0xF042,\r
-0xE003=>0xF043,\r
-0xE004=>0xF044,\r
-0xE005=>0xF045,\r
-0xE006=>0xF046,\r
-0xE007=>0xF047,\r
-0xE008=>0xF048,\r
-0xE009=>0xF049,\r
-0xE00A=>0xF04A,\r
-0xE00B=>0xF04B,\r
-0xE00C=>0xF04C,\r
-0xE00D=>0xF04D,\r
-0xE00E=>0xF04E,\r
-0xE00F=>0xF04F,\r
-0xE010=>0xF050,\r
-0xE011=>0xF051,\r
-0xE012=>0xF052,\r
-0xE013=>0xF053,\r
-0xE014=>0xF054,\r
-0xE015=>0xF055,\r
-0xE016=>0xF056,\r
-0xE017=>0xF057,\r
-0xE018=>0xF058,\r
-0xE019=>0xF059,\r
-0xE01A=>0xF05A,\r
-0xE01B=>0xF05B,\r
-0xE01C=>0xF05C,\r
-0xE01D=>0xF05D,\r
-0xE01E=>0xF05E,\r
-0xE01F=>0xF05F,\r
-0xE020=>0xF060,\r
-0xE021=>0xF061,\r
-0xE022=>0xF062,\r
-0xE023=>0xF063,\r
-0xE024=>0xF064,\r
-0xE025=>0xF065,\r
-0xE026=>0xF066,\r
-0xE027=>0xF067,\r
-0xE028=>0xF068,\r
-0xE029=>0xF069,\r
-0xE02A=>0xF06A,\r
-0xE02B=>0xF06B,\r
-0xE02C=>0xF06C,\r
-0xE02D=>0xF06D,\r
-0xE02E=>0xF06E,\r
-0xE02F=>0xF06F,\r
-0xE030=>0xF070,\r
-0xE031=>0xF071,\r
-0xE032=>0xF072,\r
-0xE033=>0xF073,\r
-0xE034=>0xF074,\r
-0xE035=>0xF075,\r
-0xE036=>0xF076,\r
-0xE037=>0xF077,\r
-0xE038=>0xF078,\r
-0xE039=>0xF079,\r
-0xE03A=>0xF07A,\r
-0xE03B=>0xF07B,\r
-0xE03C=>0xF07C,\r
-0xE03D=>0xF07D,\r
-0xE03E=>0xF07E,\r
-0xE03F=>0xF080,\r
-0xE040=>0xF081,\r
-0xE041=>0xF082,\r
-0xE042=>0xF083,\r
-0xE043=>0xF084,\r
-0xE044=>0xF085,\r
-0xE045=>0xF086,\r
-0xE046=>0xF087,\r
-0xE047=>0xF088,\r
-0xE048=>0xF089,\r
-0xE049=>0xF08A,\r
-0xE04A=>0xF08B,\r
-0xE04B=>0xF08C,\r
-0xE04C=>0xF08D,\r
-0xE04D=>0xF08E,\r
-0xE04E=>0xF08F,\r
-0xE04F=>0xF090,\r
-0xE050=>0xF091,\r
-0xE051=>0xF092,\r
-0xE052=>0xF093,\r
-0xE053=>0xF094,\r
-0xE054=>0xF095,\r
-0xE055=>0xF096,\r
-0xE056=>0xF097,\r
-0xE057=>0xF098,\r
-0xE058=>0xF099,\r
-0xE059=>0xF09A,\r
-0xE05A=>0xF09B,\r
-0xE05B=>0xF09C,\r
-0xE05C=>0xF09D,\r
-0xE05D=>0xF09E,\r
-0xE05E=>0xF09F,\r
-0xE05F=>0xF0A0,\r
-0xE060=>0xF0A1,\r
-0xE061=>0xF0A2,\r
-0xE062=>0xF0A3,\r
-0xE063=>0xF0A4,\r
-0xE064=>0xF0A5,\r
-0xE065=>0xF0A6,\r
-0xE066=>0xF0A7,\r
-0xE067=>0xF0A8,\r
-0xE068=>0xF0A9,\r
-0xE069=>0xF0AA,\r
-0xE06A=>0xF0AB,\r
-0xE06B=>0xF0AC,\r
-0xE06C=>0xF0AD,\r
-0xE06D=>0xF0AE,\r
-0xE06E=>0xF0AF,\r
-0xE06F=>0xF0B0,\r
-0xE070=>0xF0B1,\r
-0xE071=>0xF0B2,\r
-0xE072=>0xF0B3,\r
-0xE073=>0xF0B4,\r
-0xE074=>0xF0B5,\r
-0xE075=>0xF0B6,\r
-0xE076=>0xF0B7,\r
-0xE077=>0xF0B8,\r
-0xE078=>0xF0B9,\r
-0xE079=>0xF0BA,\r
-0xE07A=>0xF0BB,\r
-0xE07B=>0xF0BC,\r
-0xE07C=>0xF0BD,\r
-0xE07D=>0xF0BE,\r
-0xE07E=>0xF0BF,\r
-0xE07F=>0xF0C0,\r
-0xE080=>0xF0C1,\r
-0xE081=>0xF0C2,\r
-0xE082=>0xF0C3,\r
-0xE083=>0xF0C4,\r
-0xE084=>0xF0C5,\r
-0xE085=>0xF0C6,\r
-0xE086=>0xF0C7,\r
-0xE087=>0xF0C8,\r
-0xE088=>0xF0C9,\r
-0xE089=>0xF0CA,\r
-0xE08A=>0xF0CB,\r
-0xE08B=>0xF0CC,\r
-0xE08C=>0xF0CD,\r
-0xE08D=>0xF0CE,\r
-0xE08E=>0xF0CF,\r
-0xE08F=>0xF0D0,\r
-0xE090=>0xF0D1,\r
-0xE091=>0xF0D2,\r
-0xE092=>0xF0D3,\r
-0xE093=>0xF0D4,\r
-0xE094=>0xF0D5,\r
-0xE095=>0xF0D6,\r
-0xE096=>0xF0D7,\r
-0xE097=>0xF0D8,\r
-0xE098=>0xF0D9,\r
-0xE099=>0xF0DA,\r
-0xE09A=>0xF0DB,\r
-0xE09B=>0xF0DC,\r
-0xE09C=>0xF0DD,\r
-0xE09D=>0xF0DE,\r
-0xE09E=>0xF0DF,\r
-0xE09F=>0xF0E0,\r
-0xE0A0=>0xF0E1,\r
-0xE0A1=>0xF0E2,\r
-0xE0A2=>0xF0E3,\r
-0xE0A3=>0xF0E4,\r
-0xE0A4=>0xF0E5,\r
-0xE0A5=>0xF0E6,\r
-0xE0A6=>0xF0E7,\r
-0xE0A7=>0xF0E8,\r
-0xE0A8=>0xF0E9,\r
-0xE0A9=>0xF0EA,\r
-0xE0AA=>0xF0EB,\r
-0xE0AB=>0xF0EC,\r
-0xE0AC=>0xF0ED,\r
-0xE0AD=>0xF0EE,\r
-0xE0AE=>0xF0EF,\r
-0xE0AF=>0xF0F0,\r
-0xE0B0=>0xF0F1,\r
-0xE0B1=>0xF0F2,\r
-0xE0B2=>0xF0F3,\r
-0xE0B3=>0xF0F4,\r
-0xE0B4=>0xF0F5,\r
-0xE0B5=>0xF0F6,\r
-0xE0B6=>0xF0F7,\r
-0xE0B7=>0xF0F8,\r
-0xE0B8=>0xF0F9,\r
-0xE0B9=>0xF0FA,\r
-0xE0BA=>0xF0FB,\r
-0xE0BB=>0xF0FC,\r
-0xE0BC=>0xF140,\r
-0xE0BD=>0xF141,\r
-0xE0BE=>0xF142,\r
-0xE0BF=>0xF143,\r
-0xE0C0=>0xF144,\r
-0xE0C1=>0xF145,\r
-0xE0C2=>0xF146,\r
-0xE0C3=>0xF147,\r
-0xE0C4=>0xF148,\r
-0xE0C5=>0xF149,\r
-0xE0C6=>0xF14A,\r
-0xE0C7=>0xF14B,\r
-0xE0C8=>0xF14C,\r
-0xE0C9=>0xF14D,\r
-0xE0CA=>0xF14E,\r
-0xE0CB=>0xF14F,\r
-0xE0CC=>0xF150,\r
-0xE0CD=>0xF151,\r
-0xE0CE=>0xF152,\r
-0xE0CF=>0xF153,\r
-0xE0D0=>0xF154,\r
-0xE0D1=>0xF155,\r
-0xE0D2=>0xF156,\r
-0xE0D3=>0xF157,\r
-0xE0D4=>0xF158,\r
-0xE0D5=>0xF159,\r
-0xE0D6=>0xF15A,\r
-0xE0D7=>0xF15B,\r
-0xE0D8=>0xF15C,\r
-0xE0D9=>0xF15D,\r
-0xE0DA=>0xF15E,\r
-0xE0DB=>0xF15F,\r
-0xE0DC=>0xF160,\r
-0xE0DD=>0xF161,\r
-0xE0DE=>0xF162,\r
-0xE0DF=>0xF163,\r
-0xE0E0=>0xF164,\r
-0xE0E1=>0xF165,\r
-0xE0E2=>0xF166,\r
-0xE0E3=>0xF167,\r
-0xE0E4=>0xF168,\r
-0xE0E5=>0xF169,\r
-0xE0E6=>0xF16A,\r
-0xE0E7=>0xF16B,\r
-0xE0E8=>0xF16C,\r
-0xE0E9=>0xF16D,\r
-0xE0EA=>0xF16E,\r
-0xE0EB=>0xF16F,\r
-0xE0EC=>0xF170,\r
-0xE0ED=>0xF171,\r
-0xE0EE=>0xF172,\r
-0xE0EF=>0xF173,\r
-0xE0F0=>0xF174,\r
-0xE0F1=>0xF175,\r
-0xE0F2=>0xF176,\r
-0xE0F3=>0xF177,\r
-0xE0F4=>0xF178,\r
-0xE0F5=>0xF179,\r
-0xE0F6=>0xF17A,\r
-0xE0F7=>0xF17B,\r
-0xE0F8=>0xF17C,\r
-0xE0F9=>0xF17D,\r
-0xE0FA=>0xF17E,\r
-0xE0FB=>0xF180,\r
-0xE0FC=>0xF181,\r
-0xE0FD=>0xF182,\r
-0xE0FE=>0xF183,\r
-0xE0FF=>0xF184,\r
-0xE100=>0xF185,\r
-0xE101=>0xF186,\r
-0xE102=>0xF187,\r
-0xE103=>0xF188,\r
-0xE104=>0xF189,\r
-0xE105=>0xF18A,\r
-0xE106=>0xF18B,\r
-0xE107=>0xF18C,\r
-0xE108=>0xF18D,\r
-0xE109=>0xF18E,\r
-0xE10A=>0xF18F,\r
-0xE10B=>0xF190,\r
-0xE10C=>0xF191,\r
-0xE10D=>0xF192,\r
-0xE10E=>0xF193,\r
-0xE10F=>0xF194,\r
-0xE110=>0xF195,\r
-0xE111=>0xF196,\r
-0xE112=>0xF197,\r
-0xE113=>0xF198,\r
-0xE114=>0xF199,\r
-0xE115=>0xF19A,\r
-0xE116=>0xF19B,\r
-0xE117=>0xF19C,\r
-0xE118=>0xF19D,\r
-0xE119=>0xF19E,\r
-0xE11A=>0xF19F,\r
-0xE11B=>0xF1A0,\r
-0xE11C=>0xF1A1,\r
-0xE11D=>0xF1A2,\r
-0xE11E=>0xF1A3,\r
-0xE11F=>0xF1A4,\r
-0xE120=>0xF1A5,\r
-0xE121=>0xF1A6,\r
-0xE122=>0xF1A7,\r
-0xE123=>0xF1A8,\r
-0xE124=>0xF1A9,\r
-0xE125=>0xF1AA,\r
-0xE126=>0xF1AB,\r
-0xE127=>0xF1AC,\r
-0xE128=>0xF1AD,\r
-0xE129=>0xF1AE,\r
-0xE12A=>0xF1AF,\r
-0xE12B=>0xF1B0,\r
-0xE12C=>0xF1B1,\r
-0xE12D=>0xF1B2,\r
-0xE12E=>0xF1B3,\r
-0xE12F=>0xF1B4,\r
-0xE130=>0xF1B5,\r
-0xE131=>0xF1B6,\r
-0xE132=>0xF1B7,\r
-0xE133=>0xF1B8,\r
-0xE134=>0xF1B9,\r
-0xE135=>0xF1BA,\r
-0xE136=>0xF1BB,\r
-0xE137=>0xF1BC,\r
-0xE138=>0xF1BD,\r
-0xE139=>0xF1BE,\r
-0xE13A=>0xF1BF,\r
-0xE13B=>0xF1C0,\r
-0xE13C=>0xF1C1,\r
-0xE13D=>0xF1C2,\r
-0xE13E=>0xF1C3,\r
-0xE13F=>0xF1C4,\r
-0xE140=>0xF1C5,\r
-0xE141=>0xF1C6,\r
-0xE142=>0xF1C7,\r
-0xE143=>0xF1C8,\r
-0xE144=>0xF1C9,\r
-0xE145=>0xF1CA,\r
-0xE146=>0xF1CB,\r
-0xE147=>0xF1CC,\r
-0xE148=>0xF1CD,\r
-0xE149=>0xF1CE,\r
-0xE14A=>0xF1CF,\r
-0xE14B=>0xF1D0,\r
-0xE14C=>0xF1D1,\r
-0xE14D=>0xF1D2,\r
-0xE14E=>0xF1D3,\r
-0xE14F=>0xF1D4,\r
-0xE150=>0xF1D5,\r
-0xE151=>0xF1D6,\r
-0xE152=>0xF1D7,\r
-0xE153=>0xF1D8,\r
-0xE154=>0xF1D9,\r
-0xE155=>0xF1DA,\r
-0xE156=>0xF1DB,\r
-0xE157=>0xF1DC,\r
-0xE158=>0xF1DD,\r
-0xE159=>0xF1DE,\r
-0xE15A=>0xF1DF,\r
-0xE15B=>0xF1E0,\r
-0xE15C=>0xF1E1,\r
-0xE15D=>0xF1E2,\r
-0xE15E=>0xF1E3,\r
-0xE15F=>0xF1E4,\r
-0xE160=>0xF1E5,\r
-0xE161=>0xF1E6,\r
-0xE162=>0xF1E7,\r
-0xE163=>0xF1E8,\r
-0xE164=>0xF1E9,\r
-0xE165=>0xF1EA,\r
-0xE166=>0xF1EB,\r
-0xE167=>0xF1EC,\r
-0xE168=>0xF1ED,\r
-0xE169=>0xF1EE,\r
-0xE16A=>0xF1EF,\r
-0xE16B=>0xF1F0,\r
-0xE16C=>0xF1F1,\r
-0xE16D=>0xF1F2,\r
-0xE16E=>0xF1F3,\r
-0xE16F=>0xF1F4,\r
-0xE170=>0xF1F5,\r
-0xE171=>0xF1F6,\r
-0xE172=>0xF1F7,\r
-0xE173=>0xF1F8,\r
-0xE174=>0xF1F9,\r
-0xE175=>0xF1FA,\r
-0xE176=>0xF1FB,\r
-0xE177=>0xF1FC,\r
-0xE178=>0xF240,\r
-0xE179=>0xF241,\r
-0xE17A=>0xF242,\r
-0xE17B=>0xF243,\r
-0xE17C=>0xF244,\r
-0xE17D=>0xF245,\r
-0xE17E=>0xF246,\r
-0xE17F=>0xF247,\r
-0xE180=>0xF248,\r
-0xE181=>0xF249,\r
-0xE182=>0xF24A,\r
-0xE183=>0xF24B,\r
-0xE184=>0xF24C,\r
-0xE185=>0xF24D,\r
-0xE186=>0xF24E,\r
-0xE187=>0xF24F,\r
-0xE188=>0xF250,\r
-0xE189=>0xF251,\r
-0xE18A=>0xF252,\r
-0xE18B=>0xF253,\r
-0xE18C=>0xF254,\r
-0xE18D=>0xF255,\r
-0xE18E=>0xF256,\r
-0xE18F=>0xF257,\r
-0xE190=>0xF258,\r
-0xE191=>0xF259,\r
-0xE192=>0xF25A,\r
-0xE193=>0xF25B,\r
-0xE194=>0xF25C,\r
-0xE195=>0xF25D,\r
-0xE196=>0xF25E,\r
-0xE197=>0xF25F,\r
-0xE198=>0xF260,\r
-0xE199=>0xF261,\r
-0xE19A=>0xF262,\r
-0xE19B=>0xF263,\r
-0xE19C=>0xF264,\r
-0xE19D=>0xF265,\r
-0xE19E=>0xF266,\r
-0xE19F=>0xF267,\r
-0xE1A0=>0xF268,\r
-0xE1A1=>0xF269,\r
-0xE1A2=>0xF26A,\r
-0xE1A3=>0xF26B,\r
-0xE1A4=>0xF26C,\r
-0xE1A5=>0xF26D,\r
-0xE1A6=>0xF26E,\r
-0xE1A7=>0xF26F,\r
-0xE1A8=>0xF270,\r
-0xE1A9=>0xF271,\r
-0xE1AA=>0xF272,\r
-0xE1AB=>0xF273,\r
-0xE1AC=>0xF274,\r
-0xE1AD=>0xF275,\r
-0xE1AE=>0xF276,\r
-0xE1AF=>0xF277,\r
-0xE1B0=>0xF278,\r
-0xE1B1=>0xF279,\r
-0xE1B2=>0xF27A,\r
-0xE1B3=>0xF27B,\r
-0xE1B4=>0xF27C,\r
-0xE1B5=>0xF27D,\r
-0xE1B6=>0xF27E,\r
-0xE1B7=>0xF280,\r
-0xE1B8=>0xF281,\r
-0xE1B9=>0xF282,\r
-0xE1BA=>0xF283,\r
-0xE1BB=>0xF284,\r
-0xE1BC=>0xF285,\r
-0xE1BD=>0xF286,\r
-0xE1BE=>0xF287,\r
-0xE1BF=>0xF288,\r
-0xE1C0=>0xF289,\r
-0xE1C1=>0xF28A,\r
-0xE1C2=>0xF28B,\r
-0xE1C3=>0xF28C,\r
-0xE1C4=>0xF28D,\r
-0xE1C5=>0xF28E,\r
-0xE1C6=>0xF28F,\r
-0xE1C7=>0xF290,\r
-0xE1C8=>0xF291,\r
-0xE1C9=>0xF292,\r
-0xE1CA=>0xF293,\r
-0xE1CB=>0xF294,\r
-0xE1CC=>0xF295,\r
-0xE1CD=>0xF296,\r
-0xE1CE=>0xF297,\r
-0xE1CF=>0xF298,\r
-0xE1D0=>0xF299,\r
-0xE1D1=>0xF29A,\r
-0xE1D2=>0xF29B,\r
-0xE1D3=>0xF29C,\r
-0xE1D4=>0xF29D,\r
-0xE1D5=>0xF29E,\r
-0xE1D6=>0xF29F,\r
-0xE1D7=>0xF2A0,\r
-0xE1D8=>0xF2A1,\r
-0xE1D9=>0xF2A2,\r
-0xE1DA=>0xF2A3,\r
-0xE1DB=>0xF2A4,\r
-0xE1DC=>0xF2A5,\r
-0xE1DD=>0xF2A6,\r
-0xE1DE=>0xF2A7,\r
-0xE1DF=>0xF2A8,\r
-0xE1E0=>0xF2A9,\r
-0xE1E1=>0xF2AA,\r
-0xE1E2=>0xF2AB,\r
-0xE1E3=>0xF2AC,\r
-0xE1E4=>0xF2AD,\r
-0xE1E5=>0xF2AE,\r
-0xE1E6=>0xF2AF,\r
-0xE1E7=>0xF2B0,\r
-0xE1E8=>0xF2B1,\r
-0xE1E9=>0xF2B2,\r
-0xE1EA=>0xF2B3,\r
-0xE1EB=>0xF2B4,\r
-0xE1EC=>0xF2B5,\r
-0xE1ED=>0xF2B6,\r
-0xE1EE=>0xF2B7,\r
-0xE1EF=>0xF2B8,\r
-0xE1F0=>0xF2B9,\r
-0xE1F1=>0xF2BA,\r
-0xE1F2=>0xF2BB,\r
-0xE1F3=>0xF2BC,\r
-0xE1F4=>0xF2BD,\r
-0xE1F5=>0xF2BE,\r
-0xE1F6=>0xF2BF,\r
-0xE1F7=>0xF2C0,\r
-0xE1F8=>0xF2C1,\r
-0xE1F9=>0xF2C2,\r
-0xE1FA=>0xF2C3,\r
-0xE1FB=>0xF2C4,\r
-0xE1FC=>0xF2C5,\r
-0xE1FD=>0xF2C6,\r
-0xE1FE=>0xF2C7,\r
-0xE1FF=>0xF2C8,\r
-0xE200=>0xF2C9,\r
-0xE201=>0xF2CA,\r
-0xE202=>0xF2CB,\r
-0xE203=>0xF2CC,\r
-0xE204=>0xF2CD,\r
-0xE205=>0xF2CE,\r
-0xE206=>0xF2CF,\r
-0xE207=>0xF2D0,\r
-0xE208=>0xF2D1,\r
-0xE209=>0xF2D2,\r
-0xE20A=>0xF2D3,\r
-0xE20B=>0xF2D4,\r
-0xE20C=>0xF2D5,\r
-0xE20D=>0xF2D6,\r
-0xE20E=>0xF2D7,\r
-0xE20F=>0xF2D8,\r
-0xE210=>0xF2D9,\r
-0xE211=>0xF2DA,\r
-0xE212=>0xF2DB,\r
-0xE213=>0xF2DC,\r
-0xE214=>0xF2DD,\r
-0xE215=>0xF2DE,\r
-0xE216=>0xF2DF,\r
-0xE217=>0xF2E0,\r
-0xE218=>0xF2E1,\r
-0xE219=>0xF2E2,\r
-0xE21A=>0xF2E3,\r
-0xE21B=>0xF2E4,\r
-0xE21C=>0xF2E5,\r
-0xE21D=>0xF2E6,\r
-0xE21E=>0xF2E7,\r
-0xE21F=>0xF2E8,\r
-0xE220=>0xF2E9,\r
-0xE221=>0xF2EA,\r
-0xE222=>0xF2EB,\r
-0xE223=>0xF2EC,\r
-0xE224=>0xF2ED,\r
-0xE225=>0xF2EE,\r
-0xE226=>0xF2EF,\r
-0xE227=>0xF2F0,\r
-0xE228=>0xF2F1,\r
-0xE229=>0xF2F2,\r
-0xE22A=>0xF2F3,\r
-0xE22B=>0xF2F4,\r
-0xE22C=>0xF2F5,\r
-0xE22D=>0xF2F6,\r
-0xE22E=>0xF2F7,\r
-0xE22F=>0xF2F8,\r
-0xE230=>0xF2F9,\r
-0xE231=>0xF2FA,\r
-0xE232=>0xF2FB,\r
-0xE233=>0xF2FC,\r
-0xE234=>0xF340,\r
-0xE235=>0xF341,\r
-0xE236=>0xF342,\r
-0xE237=>0xF343,\r
-0xE238=>0xF344,\r
-0xE239=>0xF345,\r
-0xE23A=>0xF346,\r
-0xE23B=>0xF347,\r
-0xE23C=>0xF348,\r
-0xE23D=>0xF349,\r
-0xE23E=>0xF34A,\r
-0xE23F=>0xF34B,\r
-0xE240=>0xF34C,\r
-0xE241=>0xF34D,\r
-0xE242=>0xF34E,\r
-0xE243=>0xF34F,\r
-0xE244=>0xF350,\r
-0xE245=>0xF351,\r
-0xE246=>0xF352,\r
-0xE247=>0xF353,\r
-0xE248=>0xF354,\r
-0xE249=>0xF355,\r
-0xE24A=>0xF356,\r
-0xE24B=>0xF357,\r
-0xE24C=>0xF358,\r
-0xE24D=>0xF359,\r
-0xE24E=>0xF35A,\r
-0xE24F=>0xF35B,\r
-0xE250=>0xF35C,\r
-0xE251=>0xF35D,\r
-0xE252=>0xF35E,\r
-0xE253=>0xF35F,\r
-0xE254=>0xF360,\r
-0xE255=>0xF361,\r
-0xE256=>0xF362,\r
-0xE257=>0xF363,\r
-0xE258=>0xF364,\r
-0xE259=>0xF365,\r
-0xE25A=>0xF366,\r
-0xE25B=>0xF367,\r
-0xE25C=>0xF368,\r
-0xE25D=>0xF369,\r
-0xE25E=>0xF36A,\r
-0xE25F=>0xF36B,\r
-0xE260=>0xF36C,\r
-0xE261=>0xF36D,\r
-0xE262=>0xF36E,\r
-0xE263=>0xF36F,\r
-0xE264=>0xF370,\r
-0xE265=>0xF371,\r
-0xE266=>0xF372,\r
-0xE267=>0xF373,\r
-0xE268=>0xF374,\r
-0xE269=>0xF375,\r
-0xE26A=>0xF376,\r
-0xE26B=>0xF377,\r
-0xE26C=>0xF378,\r
-0xE26D=>0xF379,\r
-0xE26E=>0xF37A,\r
-0xE26F=>0xF37B,\r
-0xE270=>0xF37C,\r
-0xE271=>0xF37D,\r
-0xE272=>0xF37E,\r
-0xE273=>0xF380,\r
-0xE274=>0xF381,\r
-0xE275=>0xF382,\r
-0xE276=>0xF383,\r
-0xE277=>0xF384,\r
-0xE278=>0xF385,\r
-0xE279=>0xF386,\r
-0xE27A=>0xF387,\r
-0xE27B=>0xF388,\r
-0xE27C=>0xF389,\r
-0xE27D=>0xF38A,\r
-0xE27E=>0xF38B,\r
-0xE27F=>0xF38C,\r
-0xE280=>0xF38D,\r
-0xE281=>0xF38E,\r
-0xE282=>0xF38F,\r
-0xE283=>0xF390,\r
-0xE284=>0xF391,\r
-0xE285=>0xF392,\r
-0xE286=>0xF393,\r
-0xE287=>0xF394,\r
-0xE288=>0xF395,\r
-0xE289=>0xF396,\r
-0xE28A=>0xF397,\r
-0xE28B=>0xF398,\r
-0xE28C=>0xF399,\r
-0xE28D=>0xF39A,\r
-0xE28E=>0xF39B,\r
-0xE28F=>0xF39C,\r
-0xE290=>0xF39D,\r
-0xE291=>0xF39E,\r
-0xE292=>0xF39F,\r
-0xE293=>0xF3A0,\r
-0xE294=>0xF3A1,\r
-0xE295=>0xF3A2,\r
-0xE296=>0xF3A3,\r
-0xE297=>0xF3A4,\r
-0xE298=>0xF3A5,\r
-0xE299=>0xF3A6,\r
-0xE29A=>0xF3A7,\r
-0xE29B=>0xF3A8,\r
-0xE29C=>0xF3A9,\r
-0xE29D=>0xF3AA,\r
-0xE29E=>0xF3AB,\r
-0xE29F=>0xF3AC,\r
-0xE2A0=>0xF3AD,\r
-0xE2A1=>0xF3AE,\r
-0xE2A2=>0xF3AF,\r
-0xE2A3=>0xF3B0,\r
-0xE2A4=>0xF3B1,\r
-0xE2A5=>0xF3B2,\r
-0xE2A6=>0xF3B3,\r
-0xE2A7=>0xF3B4,\r
-0xE2A8=>0xF3B5,\r
-0xE2A9=>0xF3B6,\r
-0xE2AA=>0xF3B7,\r
-0xE2AB=>0xF3B8,\r
-0xE2AC=>0xF3B9,\r
-0xE2AD=>0xF3BA,\r
-0xE2AE=>0xF3BB,\r
-0xE2AF=>0xF3BC,\r
-0xE2B0=>0xF3BD,\r
-0xE2B1=>0xF3BE,\r
-0xE2B2=>0xF3BF,\r
-0xE2B3=>0xF3C0,\r
-0xE2B4=>0xF3C1,\r
-0xE2B5=>0xF3C2,\r
-0xE2B6=>0xF3C3,\r
-0xE2B7=>0xF3C4,\r
-0xE2B8=>0xF3C5,\r
-0xE2B9=>0xF3C6,\r
-0xE2BA=>0xF3C7,\r
-0xE2BB=>0xF3C8,\r
-0xE2BC=>0xF3C9,\r
-0xE2BD=>0xF3CA,\r
-0xE2BE=>0xF3CB,\r
-0xE2BF=>0xF3CC,\r
-0xE2C0=>0xF3CD,\r
-0xE2C1=>0xF3CE,\r
-0xE2C2=>0xF3CF,\r
-0xE2C3=>0xF3D0,\r
-0xE2C4=>0xF3D1,\r
-0xE2C5=>0xF3D2,\r
-0xE2C6=>0xF3D3,\r
-0xE2C7=>0xF3D4,\r
-0xE2C8=>0xF3D5,\r
-0xE2C9=>0xF3D6,\r
-0xE2CA=>0xF3D7,\r
-0xE2CB=>0xF3D8,\r
-0xE2CC=>0xF3D9,\r
-0xE2CD=>0xF3DA,\r
-0xE2CE=>0xF3DB,\r
-0xE2CF=>0xF3DC,\r
-0xE2D0=>0xF3DD,\r
-0xE2D1=>0xF3DE,\r
-0xE2D2=>0xF3DF,\r
-0xE2D3=>0xF3E0,\r
-0xE2D4=>0xF3E1,\r
-0xE2D5=>0xF3E2,\r
-0xE2D6=>0xF3E3,\r
-0xE2D7=>0xF3E4,\r
-0xE2D8=>0xF3E5,\r
-0xE2D9=>0xF3E6,\r
-0xE2DA=>0xF3E7,\r
-0xE2DB=>0xF3E8,\r
-0xE2DC=>0xF3E9,\r
-0xE2DD=>0xF3EA,\r
-0xE2DE=>0xF3EB,\r
-0xE2DF=>0xF3EC,\r
-0xE2E0=>0xF3ED,\r
-0xE2E1=>0xF3EE,\r
-0xE2E2=>0xF3EF,\r
-0xE2E3=>0xF3F0,\r
-0xE2E4=>0xF3F1,\r
-0xE2E5=>0xF3F2,\r
-0xE2E6=>0xF3F3,\r
-0xE2E7=>0xF3F4,\r
-0xE2E8=>0xF3F5,\r
-0xE2E9=>0xF3F6,\r
-0xE2EA=>0xF3F7,\r
-0xE2EB=>0xF3F8,\r
-0xE2EC=>0xF3F9,\r
-0xE2ED=>0xF3FA,\r
-0xE2EE=>0xF3FB,\r
-0xE2EF=>0xF3FC,\r
-0xE2F0=>0xF440,\r
-0xE2F1=>0xF441,\r
-0xE2F2=>0xF442,\r
-0xE2F3=>0xF443,\r
-0xE2F4=>0xF444,\r
-0xE2F5=>0xF445,\r
-0xE2F6=>0xF446,\r
-0xE2F7=>0xF447,\r
-0xE2F8=>0xF448,\r
-0xE2F9=>0xF449,\r
-0xE2FA=>0xF44A,\r
-0xE2FB=>0xF44B,\r
-0xE2FC=>0xF44C,\r
-0xE2FD=>0xF44D,\r
-0xE2FE=>0xF44E,\r
-0xE2FF=>0xF44F,\r
-0xE300=>0xF450,\r
-0xE301=>0xF451,\r
-0xE302=>0xF452,\r
-0xE303=>0xF453,\r
-0xE304=>0xF454,\r
-0xE305=>0xF455,\r
-0xE306=>0xF456,\r
-0xE307=>0xF457,\r
-0xE308=>0xF458,\r
-0xE309=>0xF459,\r
-0xE30A=>0xF45A,\r
-0xE30B=>0xF45B,\r
-0xE30C=>0xF45C,\r
-0xE30D=>0xF45D,\r
-0xE30E=>0xF45E,\r
-0xE30F=>0xF45F,\r
-0xE310=>0xF460,\r
-0xE311=>0xF461,\r
-0xE312=>0xF462,\r
-0xE313=>0xF463,\r
-0xE314=>0xF464,\r
-0xE315=>0xF465,\r
-0xE316=>0xF466,\r
-0xE317=>0xF467,\r
-0xE318=>0xF468,\r
-0xE319=>0xF469,\r
-0xE31A=>0xF46A,\r
-0xE31B=>0xF46B,\r
-0xE31C=>0xF46C,\r
-0xE31D=>0xF46D,\r
-0xE31E=>0xF46E,\r
-0xE31F=>0xF46F,\r
-0xE320=>0xF470,\r
-0xE321=>0xF471,\r
-0xE322=>0xF472,\r
-0xE323=>0xF473,\r
-0xE324=>0xF474,\r
-0xE325=>0xF475,\r
-0xE326=>0xF476,\r
-0xE327=>0xF477,\r
-0xE328=>0xF478,\r
-0xE329=>0xF479,\r
-0xE32A=>0xF47A,\r
-0xE32B=>0xF47B,\r
-0xE32C=>0xF47C,\r
-0xE32D=>0xF47D,\r
-0xE32E=>0xF47E,\r
-0xE32F=>0xF480,\r
-0xE330=>0xF481,\r
-0xE331=>0xF482,\r
-0xE332=>0xF483,\r
-0xE333=>0xF484,\r
-0xE334=>0xF485,\r
-0xE335=>0xF486,\r
-0xE336=>0xF487,\r
-0xE337=>0xF488,\r
-0xE338=>0xF489,\r
-0xE339=>0xF48A,\r
-0xE33A=>0xF48B,\r
-0xE33B=>0xF48C,\r
-0xE33C=>0xF48D,\r
-0xE33D=>0xF48E,\r
-0xE33E=>0xF48F,\r
-0xE33F=>0xF490,\r
-0xE340=>0xF491,\r
-0xE341=>0xF492,\r
-0xE342=>0xF493,\r
-0xE343=>0xF494,\r
-0xE344=>0xF495,\r
-0xE345=>0xF496,\r
-0xE346=>0xF497,\r
-0xE347=>0xF498,\r
-0xE348=>0xF499,\r
-0xE349=>0xF49A,\r
-0xE34A=>0xF49B,\r
-0xE34B=>0xF49C,\r
-0xE34C=>0xF49D,\r
-0xE34D=>0xF49E,\r
-0xE34E=>0xF49F,\r
-0xE34F=>0xF4A0,\r
-0xE350=>0xF4A1,\r
-0xE351=>0xF4A2,\r
-0xE352=>0xF4A3,\r
-0xE353=>0xF4A4,\r
-0xE354=>0xF4A5,\r
-0xE355=>0xF4A6,\r
-0xE356=>0xF4A7,\r
-0xE357=>0xF4A8,\r
-0xE358=>0xF4A9,\r
-0xE359=>0xF4AA,\r
-0xE35A=>0xF4AB,\r
-0xE35B=>0xF4AC,\r
-0xE35C=>0xF4AD,\r
-0xE35D=>0xF4AE,\r
-0xE35E=>0xF4AF,\r
-0xE35F=>0xF4B0,\r
-0xE360=>0xF4B1,\r
-0xE361=>0xF4B2,\r
-0xE362=>0xF4B3,\r
-0xE363=>0xF4B4,\r
-0xE364=>0xF4B5,\r
-0xE365=>0xF4B6,\r
-0xE366=>0xF4B7,\r
-0xE367=>0xF4B8,\r
-0xE368=>0xF4B9,\r
-0xE369=>0xF4BA,\r
-0xE36A=>0xF4BB,\r
-0xE36B=>0xF4BC,\r
-0xE36C=>0xF4BD,\r
-0xE36D=>0xF4BE,\r
-0xE36E=>0xF4BF,\r
-0xE36F=>0xF4C0,\r
-0xE370=>0xF4C1,\r
-0xE371=>0xF4C2,\r
-0xE372=>0xF4C3,\r
-0xE373=>0xF4C4,\r
-0xE374=>0xF4C5,\r
-0xE375=>0xF4C6,\r
-0xE376=>0xF4C7,\r
-0xE377=>0xF4C8,\r
-0xE378=>0xF4C9,\r
-0xE379=>0xF4CA,\r
-0xE37A=>0xF4CB,\r
-0xE37B=>0xF4CC,\r
-0xE37C=>0xF4CD,\r
-0xE37D=>0xF4CE,\r
-0xE37E=>0xF4CF,\r
-0xE37F=>0xF4D0,\r
-0xE380=>0xF4D1,\r
-0xE381=>0xF4D2,\r
-0xE382=>0xF4D3,\r
-0xE383=>0xF4D4,\r
-0xE384=>0xF4D5,\r
-0xE385=>0xF4D6,\r
-0xE386=>0xF4D7,\r
-0xE387=>0xF4D8,\r
-0xE388=>0xF4D9,\r
-0xE389=>0xF4DA,\r
-0xE38A=>0xF4DB,\r
-0xE38B=>0xF4DC,\r
-0xE38C=>0xF4DD,\r
-0xE38D=>0xF4DE,\r
-0xE38E=>0xF4DF,\r
-0xE38F=>0xF4E0,\r
-0xE390=>0xF4E1,\r
-0xE391=>0xF4E2,\r
-0xE392=>0xF4E3,\r
-0xE393=>0xF4E4,\r
-0xE394=>0xF4E5,\r
-0xE395=>0xF4E6,\r
-0xE396=>0xF4E7,\r
-0xE397=>0xF4E8,\r
-0xE398=>0xF4E9,\r
-0xE399=>0xF4EA,\r
-0xE39A=>0xF4EB,\r
-0xE39B=>0xF4EC,\r
-0xE39C=>0xF4ED,\r
-0xE39D=>0xF4EE,\r
-0xE39E=>0xF4EF,\r
-0xE39F=>0xF4F0,\r
-0xE3A0=>0xF4F1,\r
-0xE3A1=>0xF4F2,\r
-0xE3A2=>0xF4F3,\r
-0xE3A3=>0xF4F4,\r
-0xE3A4=>0xF4F5,\r
-0xE3A5=>0xF4F6,\r
-0xE3A6=>0xF4F7,\r
-0xE3A7=>0xF4F8,\r
-0xE3A8=>0xF4F9,\r
-0xE3A9=>0xF4FA,\r
-0xE3AA=>0xF4FB,\r
-0xE3AB=>0xF4FC,\r
-0xE3AC=>0xF540,\r
-0xE3AD=>0xF541,\r
-0xE3AE=>0xF542,\r
-0xE3AF=>0xF543,\r
-0xE3B0=>0xF544,\r
-0xE3B1=>0xF545,\r
-0xE3B2=>0xF546,\r
-0xE3B3=>0xF547,\r
-0xE3B4=>0xF548,\r
-0xE3B5=>0xF549,\r
-0xE3B6=>0xF54A,\r
-0xE3B7=>0xF54B,\r
-0xE3B8=>0xF54C,\r
-0xE3B9=>0xF54D,\r
-0xE3BA=>0xF54E,\r
-0xE3BB=>0xF54F,\r
-0xE3BC=>0xF550,\r
-0xE3BD=>0xF551,\r
-0xE3BE=>0xF552,\r
-0xE3BF=>0xF553,\r
-0xE3C0=>0xF554,\r
-0xE3C1=>0xF555,\r
-0xE3C2=>0xF556,\r
-0xE3C3=>0xF557,\r
-0xE3C4=>0xF558,\r
-0xE3C5=>0xF559,\r
-0xE3C6=>0xF55A,\r
-0xE3C7=>0xF55B,\r
-0xE3C8=>0xF55C,\r
-0xE3C9=>0xF55D,\r
-0xE3CA=>0xF55E,\r
-0xE3CB=>0xF55F,\r
-0xE3CC=>0xF560,\r
-0xE3CD=>0xF561,\r
-0xE3CE=>0xF562,\r
-0xE3CF=>0xF563,\r
-0xE3D0=>0xF564,\r
-0xE3D1=>0xF565,\r
-0xE3D2=>0xF566,\r
-0xE3D3=>0xF567,\r
-0xE3D4=>0xF568,\r
-0xE3D5=>0xF569,\r
-0xE3D6=>0xF56A,\r
-0xE3D7=>0xF56B,\r
-0xE3D8=>0xF56C,\r
-0xE3D9=>0xF56D,\r
-0xE3DA=>0xF56E,\r
-0xE3DB=>0xF56F,\r
-0xE3DC=>0xF570,\r
-0xE3DD=>0xF571,\r
-0xE3DE=>0xF572,\r
-0xE3DF=>0xF573,\r
-0xE3E0=>0xF574,\r
-0xE3E1=>0xF575,\r
-0xE3E2=>0xF576,\r
-0xE3E3=>0xF577,\r
-0xE3E4=>0xF578,\r
-0xE3E5=>0xF579,\r
-0xE3E6=>0xF57A,\r
-0xE3E7=>0xF57B,\r
-0xE3E8=>0xF57C,\r
-0xE3E9=>0xF57D,\r
-0xE3EA=>0xF57E,\r
-0xE3EB=>0xF580,\r
-0xE3EC=>0xF581,\r
-0xE3ED=>0xF582,\r
-0xE3EE=>0xF583,\r
-0xE3EF=>0xF584,\r
-0xE3F0=>0xF585,\r
-0xE3F1=>0xF586,\r
-0xE3F2=>0xF587,\r
-0xE3F3=>0xF588,\r
-0xE3F4=>0xF589,\r
-0xE3F5=>0xF58A,\r
-0xE3F6=>0xF58B,\r
-0xE3F7=>0xF58C,\r
-0xE3F8=>0xF58D,\r
-0xE3F9=>0xF58E,\r
-0xE3FA=>0xF58F,\r
-0xE3FB=>0xF590,\r
-0xE3FC=>0xF591,\r
-0xE3FD=>0xF592,\r
-0xE3FE=>0xF593,\r
-0xE3FF=>0xF594,\r
-0xE400=>0xF595,\r
-0xE401=>0xF596,\r
-0xE402=>0xF597,\r
-0xE403=>0xF598,\r
-0xE404=>0xF599,\r
-0xE405=>0xF59A,\r
-0xE406=>0xF59B,\r
-0xE407=>0xF59C,\r
-0xE408=>0xF59D,\r
-0xE409=>0xF59E,\r
-0xE40A=>0xF59F,\r
-0xE40B=>0xF5A0,\r
-0xE40C=>0xF5A1,\r
-0xE40D=>0xF5A2,\r
-0xE40E=>0xF5A3,\r
-0xE40F=>0xF5A4,\r
-0xE410=>0xF5A5,\r
-0xE411=>0xF5A6,\r
-0xE412=>0xF5A7,\r
-0xE413=>0xF5A8,\r
-0xE414=>0xF5A9,\r
-0xE415=>0xF5AA,\r
-0xE416=>0xF5AB,\r
-0xE417=>0xF5AC,\r
-0xE418=>0xF5AD,\r
-0xE419=>0xF5AE,\r
-0xE41A=>0xF5AF,\r
-0xE41B=>0xF5B0,\r
-0xE41C=>0xF5B1,\r
-0xE41D=>0xF5B2,\r
-0xE41E=>0xF5B3,\r
-0xE41F=>0xF5B4,\r
-0xE420=>0xF5B5,\r
-0xE421=>0xF5B6,\r
-0xE422=>0xF5B7,\r
-0xE423=>0xF5B8,\r
-0xE424=>0xF5B9,\r
-0xE425=>0xF5BA,\r
-0xE426=>0xF5BB,\r
-0xE427=>0xF5BC,\r
-0xE428=>0xF5BD,\r
-0xE429=>0xF5BE,\r
-0xE42A=>0xF5BF,\r
-0xE42B=>0xF5C0,\r
-0xE42C=>0xF5C1,\r
-0xE42D=>0xF5C2,\r
-0xE42E=>0xF5C3,\r
-0xE42F=>0xF5C4,\r
-0xE430=>0xF5C5,\r
-0xE431=>0xF5C6,\r
-0xE432=>0xF5C7,\r
-0xE433=>0xF5C8,\r
-0xE434=>0xF5C9,\r
-0xE435=>0xF5CA,\r
-0xE436=>0xF5CB,\r
-0xE437=>0xF5CC,\r
-0xE438=>0xF5CD,\r
-0xE439=>0xF5CE,\r
-0xE43A=>0xF5CF,\r
-0xE43B=>0xF5D0,\r
-0xE43C=>0xF5D1,\r
-0xE43D=>0xF5D2,\r
-0xE43E=>0xF5D3,\r
-0xE43F=>0xF5D4,\r
-0xE440=>0xF5D5,\r
-0xE441=>0xF5D6,\r
-0xE442=>0xF5D7,\r
-0xE443=>0xF5D8,\r
-0xE444=>0xF5D9,\r
-0xE445=>0xF5DA,\r
-0xE446=>0xF5DB,\r
-0xE447=>0xF5DC,\r
-0xE448=>0xF5DD,\r
-0xE449=>0xF5DE,\r
-0xE44A=>0xF5DF,\r
-0xE44B=>0xF5E0,\r
-0xE44C=>0xF5E1,\r
-0xE44D=>0xF5E2,\r
-0xE44E=>0xF5E3,\r
-0xE44F=>0xF5E4,\r
-0xE450=>0xF5E5,\r
-0xE451=>0xF5E6,\r
-0xE452=>0xF5E7,\r
-0xE453=>0xF5E8,\r
-0xE454=>0xF5E9,\r
-0xE455=>0xF5EA,\r
-0xE456=>0xF5EB,\r
-0xE457=>0xF5EC,\r
-0xE458=>0xF5ED,\r
-0xE459=>0xF5EE,\r
-0xE45A=>0xF5EF,\r
-0xE45B=>0xF5F0,\r
-0xE45C=>0xF5F1,\r
-0xE45D=>0xF5F2,\r
-0xE45E=>0xF5F3,\r
-0xE45F=>0xF5F4,\r
-0xE460=>0xF5F5,\r
-0xE461=>0xF5F6,\r
-0xE462=>0xF5F7,\r
-0xE463=>0xF5F8,\r
-0xE464=>0xF5F9,\r
-0xE465=>0xF5FA,\r
-0xE466=>0xF5FB,\r
-0xE467=>0xF5FC,\r
-0xE468=>0xF640,\r
-0xE469=>0xF641,\r
-0xE46A=>0xF642,\r
-0xE46B=>0xF643,\r
-0xE46C=>0xF644,\r
-0xE46D=>0xF645,\r
-0xE46E=>0xF646,\r
-0xE46F=>0xF647,\r
-0xE470=>0xF648,\r
-0xE471=>0xF649,\r
-0xE472=>0xF64A,\r
-0xE473=>0xF64B,\r
-0xE474=>0xF64C,\r
-0xE475=>0xF64D,\r
-0xE476=>0xF64E,\r
-0xE477=>0xF64F,\r
-0xE478=>0xF650,\r
-0xE479=>0xF651,\r
-0xE47A=>0xF652,\r
-0xE47B=>0xF653,\r
-0xE47C=>0xF654,\r
-0xE47D=>0xF655,\r
-0xE47E=>0xF656,\r
-0xE47F=>0xF657,\r
-0xE480=>0xF658,\r
-0xE481=>0xF659,\r
-0xE482=>0xF65A,\r
-0xE483=>0xF65B,\r
-0xE484=>0xF65C,\r
-0xE485=>0xF65D,\r
-0xE486=>0xF65E,\r
-0xE487=>0xF65F,\r
-0xE488=>0xF660,\r
-0xE489=>0xF661,\r
-0xE48A=>0xF662,\r
-0xE48B=>0xF663,\r
-0xE48C=>0xF664,\r
-0xE48D=>0xF665,\r
-0xE48E=>0xF666,\r
-0xE48F=>0xF667,\r
-0xE490=>0xF668,\r
-0xE491=>0xF669,\r
-0xE492=>0xF66A,\r
-0xE493=>0xF66B,\r
-0xE494=>0xF66C,\r
-0xE495=>0xF66D,\r
-0xE496=>0xF66E,\r
-0xE497=>0xF66F,\r
-0xE498=>0xF670,\r
-0xE499=>0xF671,\r
-0xE49A=>0xF672,\r
-0xE49B=>0xF673,\r
-0xE49C=>0xF674,\r
-0xE49D=>0xF675,\r
-0xE49E=>0xF676,\r
-0xE49F=>0xF677,\r
-0xE4A0=>0xF678,\r
-0xE4A1=>0xF679,\r
-0xE4A2=>0xF67A,\r
-0xE4A3=>0xF67B,\r
-0xE4A4=>0xF67C,\r
-0xE4A5=>0xF67D,\r
-0xE4A6=>0xF67E,\r
-0xE4A7=>0xF680,\r
-0xE4A8=>0xF681,\r
-0xE4A9=>0xF682,\r
-0xE4AA=>0xF683,\r
-0xE4AB=>0xF684,\r
-0xE4AC=>0xF685,\r
-0xE4AD=>0xF686,\r
-0xE4AE=>0xF687,\r
-0xE4AF=>0xF688,\r
-0xE4B0=>0xF689,\r
-0xE4B1=>0xF68A,\r
-0xE4B2=>0xF68B,\r
-0xE4B3=>0xF68C,\r
-0xE4B4=>0xF68D,\r
-0xE4B5=>0xF68E,\r
-0xE4B6=>0xF68F,\r
-0xE4B7=>0xF690,\r
-0xE4B8=>0xF691,\r
-0xE4B9=>0xF692,\r
-0xE4BA=>0xF693,\r
-0xE4BB=>0xF694,\r
-0xE4BC=>0xF695,\r
-0xE4BD=>0xF696,\r
-0xE4BE=>0xF697,\r
-0xE4BF=>0xF698,\r
-0xE4C0=>0xF699,\r
-0xE4C1=>0xF69A,\r
-0xE4C2=>0xF69B,\r
-0xE4C3=>0xF69C,\r
-0xE4C4=>0xF69D,\r
-0xE4C5=>0xF69E,\r
-0xE4C6=>0xF69F,\r
-0xE4C7=>0xF6A0,\r
-0xE4C8=>0xF6A1,\r
-0xE4C9=>0xF6A2,\r
-0xE4CA=>0xF6A3,\r
-0xE4CB=>0xF6A4,\r
-0xE4CC=>0xF6A5,\r
-0xE4CD=>0xF6A6,\r
-0xE4CE=>0xF6A7,\r
-0xE4CF=>0xF6A8,\r
-0xE4D0=>0xF6A9,\r
-0xE4D1=>0xF6AA,\r
-0xE4D2=>0xF6AB,\r
-0xE4D3=>0xF6AC,\r
-0xE4D4=>0xF6AD,\r
-0xE4D5=>0xF6AE,\r
-0xE4D6=>0xF6AF,\r
-0xE4D7=>0xF6B0,\r
-0xE4D8=>0xF6B1,\r
-0xE4D9=>0xF6B2,\r
-0xE4DA=>0xF6B3,\r
-0xE4DB=>0xF6B4,\r
-0xE4DC=>0xF6B5,\r
-0xE4DD=>0xF6B6,\r
-0xE4DE=>0xF6B7,\r
-0xE4DF=>0xF6B8,\r
-0xE4E0=>0xF6B9,\r
-0xE4E1=>0xF6BA,\r
-0xE4E2=>0xF6BB,\r
-0xE4E3=>0xF6BC,\r
-0xE4E4=>0xF6BD,\r
-0xE4E5=>0xF6BE,\r
-0xE4E6=>0xF6BF,\r
-0xE4E7=>0xF6C0,\r
-0xE4E8=>0xF6C1,\r
-0xE4E9=>0xF6C2,\r
-0xE4EA=>0xF6C3,\r
-0xE4EB=>0xF6C4,\r
-0xE4EC=>0xF6C5,\r
-0xE4ED=>0xF6C6,\r
-0xE4EE=>0xF6C7,\r
-0xE4EF=>0xF6C8,\r
-0xE4F0=>0xF6C9,\r
-0xE4F1=>0xF6CA,\r
-0xE4F2=>0xF6CB,\r
-0xE4F3=>0xF6CC,\r
-0xE4F4=>0xF6CD,\r
-0xE4F5=>0xF6CE,\r
-0xE4F6=>0xF6CF,\r
-0xE4F7=>0xF6D0,\r
-0xE4F8=>0xF6D1,\r
-0xE4F9=>0xF6D2,\r
-0xE4FA=>0xF6D3,\r
-0xE4FB=>0xF6D4,\r
-0xE4FC=>0xF6D5,\r
-0xE4FD=>0xF6D6,\r
-0xE4FE=>0xF6D7,\r
-0xE4FF=>0xF6D8,\r
-0xE500=>0xF6D9,\r
-0xE501=>0xF6DA,\r
-0xE502=>0xF6DB,\r
-0xE503=>0xF6DC,\r
-0xE504=>0xF6DD,\r
-0xE505=>0xF6DE,\r
-0xE506=>0xF6DF,\r
-0xE507=>0xF6E0,\r
-0xE508=>0xF6E1,\r
-0xE509=>0xF6E2,\r
-0xE50A=>0xF6E3,\r
-0xE50B=>0xF6E4,\r
-0xE50C=>0xF6E5,\r
-0xE50D=>0xF6E6,\r
-0xE50E=>0xF6E7,\r
-0xE50F=>0xF6E8,\r
-0xE510=>0xF6E9,\r
-0xE511=>0xF6EA,\r
-0xE512=>0xF6EB,\r
-0xE513=>0xF6EC,\r
-0xE514=>0xF6ED,\r
-0xE515=>0xF6EE,\r
-0xE516=>0xF6EF,\r
-0xE517=>0xF6F0,\r
-0xE518=>0xF6F1,\r
-0xE519=>0xF6F2,\r
-0xE51A=>0xF6F3,\r
-0xE51B=>0xF6F4,\r
-0xE51C=>0xF6F5,\r
-0xE51D=>0xF6F6,\r
-0xE51E=>0xF6F7,\r
-0xE51F=>0xF6F8,\r
-0xE520=>0xF6F9,\r
-0xE521=>0xF6FA,\r
-0xE522=>0xF6FB,\r
-0xE523=>0xF6FC,\r
-0xE524=>0xF740,\r
-0xE525=>0xF741,\r
-0xE526=>0xF742,\r
-0xE527=>0xF743,\r
-0xE528=>0xF744,\r
-0xE529=>0xF745,\r
-0xE52A=>0xF746,\r
-0xE52B=>0xF747,\r
-0xE52C=>0xF748,\r
-0xE52D=>0xF749,\r
-0xE52E=>0xF74A,\r
-0xE52F=>0xF74B,\r
-0xE530=>0xF74C,\r
-0xE531=>0xF74D,\r
-0xE532=>0xF74E,\r
-0xE533=>0xF74F,\r
-0xE534=>0xF750,\r
-0xE535=>0xF751,\r
-0xE536=>0xF752,\r
-0xE537=>0xF753,\r
-0xE538=>0xF754,\r
-0xE539=>0xF755,\r
-0xE53A=>0xF756,\r
-0xE53B=>0xF757,\r
-0xE53C=>0xF758,\r
-0xE53D=>0xF759,\r
-0xE53E=>0xF75A,\r
-0xE53F=>0xF75B,\r
-0xE540=>0xF75C,\r
-0xE541=>0xF75D,\r
-0xE542=>0xF75E,\r
-0xE543=>0xF75F,\r
-0xE544=>0xF760,\r
-0xE545=>0xF761,\r
-0xE546=>0xF762,\r
-0xE547=>0xF763,\r
-0xE548=>0xF764,\r
-0xE549=>0xF765,\r
-0xE54A=>0xF766,\r
-0xE54B=>0xF767,\r
-0xE54C=>0xF768,\r
-0xE54D=>0xF769,\r
-0xE54E=>0xF76A,\r
-0xE54F=>0xF76B,\r
-0xE550=>0xF76C,\r
-0xE551=>0xF76D,\r
-0xE552=>0xF76E,\r
-0xE553=>0xF76F,\r
-0xE554=>0xF770,\r
-0xE555=>0xF771,\r
-0xE556=>0xF772,\r
-0xE557=>0xF773,\r
-0xE558=>0xF774,\r
-0xE559=>0xF775,\r
-0xE55A=>0xF776,\r
-0xE55B=>0xF777,\r
-0xE55C=>0xF778,\r
-0xE55D=>0xF779,\r
-0xE55E=>0xF77A,\r
-0xE55F=>0xF77B,\r
-0xE560=>0xF77C,\r
-0xE561=>0xF77D,\r
-0xE562=>0xF77E,\r
-0xE563=>0xF780,\r
-0xE564=>0xF781,\r
-0xE565=>0xF782,\r
-0xE566=>0xF783,\r
-0xE567=>0xF784,\r
-0xE568=>0xF785,\r
-0xE569=>0xF786,\r
-0xE56A=>0xF787,\r
-0xE56B=>0xF788,\r
-0xE56C=>0xF789,\r
-0xE56D=>0xF78A,\r
-0xE56E=>0xF78B,\r
-0xE56F=>0xF78C,\r
-0xE570=>0xF78D,\r
-0xE571=>0xF78E,\r
-0xE572=>0xF78F,\r
-0xE573=>0xF790,\r
-0xE574=>0xF791,\r
-0xE575=>0xF792,\r
-0xE576=>0xF793,\r
-0xE577=>0xF794,\r
-0xE578=>0xF795,\r
-0xE579=>0xF796,\r
-0xE57A=>0xF797,\r
-0xE57B=>0xF798,\r
-0xE57C=>0xF799,\r
-0xE57D=>0xF79A,\r
-0xE57E=>0xF79B,\r
-0xE57F=>0xF79C,\r
-0xE580=>0xF79D,\r
-0xE581=>0xF79E,\r
-0xE582=>0xF79F,\r
-0xE583=>0xF7A0,\r
-0xE584=>0xF7A1,\r
-0xE585=>0xF7A2,\r
-0xE586=>0xF7A3,\r
-0xE587=>0xF7A4,\r
-0xE588=>0xF7A5,\r
-0xE589=>0xF7A6,\r
-0xE58A=>0xF7A7,\r
-0xE58B=>0xF7A8,\r
-0xE58C=>0xF7A9,\r
-0xE58D=>0xF7AA,\r
-0xE58E=>0xF7AB,\r
-0xE58F=>0xF7AC,\r
-0xE590=>0xF7AD,\r
-0xE591=>0xF7AE,\r
-0xE592=>0xF7AF,\r
-0xE593=>0xF7B0,\r
-0xE594=>0xF7B1,\r
-0xE595=>0xF7B2,\r
-0xE596=>0xF7B3,\r
-0xE597=>0xF7B4,\r
-0xE598=>0xF7B5,\r
-0xE599=>0xF7B6,\r
-0xE59A=>0xF7B7,\r
-0xE59B=>0xF7B8,\r
-0xE59C=>0xF7B9,\r
-0xE59D=>0xF7BA,\r
-0xE59E=>0xF7BB,\r
-0xE59F=>0xF7BC,\r
-0xE5A0=>0xF7BD,\r
-0xE5A1=>0xF7BE,\r
-0xE5A2=>0xF7BF,\r
-0xE5A3=>0xF7C0,\r
-0xE5A4=>0xF7C1,\r
-0xE5A5=>0xF7C2,\r
-0xE5A6=>0xF7C3,\r
-0xE5A7=>0xF7C4,\r
-0xE5A8=>0xF7C5,\r
-0xE5A9=>0xF7C6,\r
-0xE5AA=>0xF7C7,\r
-0xE5AB=>0xF7C8,\r
-0xE5AC=>0xF7C9,\r
-0xE5AD=>0xF7CA,\r
-0xE5AE=>0xF7CB,\r
-0xE5AF=>0xF7CC,\r
-0xE5B0=>0xF7CD,\r
-0xE5B1=>0xF7CE,\r
-0xE5B2=>0xF7CF,\r
-0xE5B3=>0xF7D0,\r
-0xE5B4=>0xF7D1,\r
-0xE5B5=>0xF7D2,\r
-0xE5B6=>0xF7D3,\r
-0xE5B7=>0xF7D4,\r
-0xE5B8=>0xF7D5,\r
-0xE5B9=>0xF7D6,\r
-0xE5BA=>0xF7D7,\r
-0xE5BB=>0xF7D8,\r
-0xE5BC=>0xF7D9,\r
-0xE5BD=>0xF7DA,\r
-0xE5BE=>0xF7DB,\r
-0xE5BF=>0xF7DC,\r
-0xE5C0=>0xF7DD,\r
-0xE5C1=>0xF7DE,\r
-0xE5C2=>0xF7DF,\r
-0xE5C3=>0xF7E0,\r
-0xE5C4=>0xF7E1,\r
-0xE5C5=>0xF7E2,\r
-0xE5C6=>0xF7E3,\r
-0xE5C7=>0xF7E4,\r
-0xE5C8=>0xF7E5,\r
-0xE5C9=>0xF7E6,\r
-0xE5CA=>0xF7E7,\r
-0xE5CB=>0xF7E8,\r
-0xE5CC=>0xF7E9,\r
-0xE5CD=>0xF7EA,\r
-0xE5CE=>0xF7EB,\r
-0xE5CF=>0xF7EC,\r
-0xE5D0=>0xF7ED,\r
-0xE5D1=>0xF7EE,\r
-0xE5D2=>0xF7EF,\r
-0xE5D3=>0xF7F0,\r
-0xE5D4=>0xF7F1,\r
-0xE5D5=>0xF7F2,\r
-0xE5D6=>0xF7F3,\r
-0xE5D7=>0xF7F4,\r
-0xE5D8=>0xF7F5,\r
-0xE5D9=>0xF7F6,\r
-0xE5DA=>0xF7F7,\r
-0xE5DB=>0xF7F8,\r
-0xE5DC=>0xF7F9,\r
-0xE5DD=>0xF7FA,\r
-0xE5DE=>0xF7FB,\r
-0xE5DF=>0xF7FC,\r
-0xE5E0=>0xF840,\r
-0xE5E1=>0xF841,\r
-0xE5E2=>0xF842,\r
-0xE5E3=>0xF843,\r
-0xE5E4=>0xF844,\r
-0xE5E5=>0xF845,\r
-0xE5E6=>0xF846,\r
-0xE5E7=>0xF847,\r
-0xE5E8=>0xF848,\r
-0xE5E9=>0xF849,\r
-0xE5EA=>0xF84A,\r
-0xE5EB=>0xF84B,\r
-0xE5EC=>0xF84C,\r
-0xE5ED=>0xF84D,\r
-0xE5EE=>0xF84E,\r
-0xE5EF=>0xF84F,\r
-0xE5F0=>0xF850,\r
-0xE5F1=>0xF851,\r
-0xE5F2=>0xF852,\r
-0xE5F3=>0xF853,\r
-0xE5F4=>0xF854,\r
-0xE5F5=>0xF855,\r
-0xE5F6=>0xF856,\r
-0xE5F7=>0xF857,\r
-0xE5F8=>0xF858,\r
-0xE5F9=>0xF859,\r
-0xE5FA=>0xF85A,\r
-0xE5FB=>0xF85B,\r
-0xE5FC=>0xF85C,\r
-0xE5FD=>0xF85D,\r
-0xE5FE=>0xF85E,\r
-0xE5FF=>0xF85F,\r
-0xE600=>0xF860,\r
-0xE601=>0xF861,\r
-0xE602=>0xF862,\r
-0xE603=>0xF863,\r
-0xE604=>0xF864,\r
-0xE605=>0xF865,\r
-0xE606=>0xF866,\r
-0xE607=>0xF867,\r
-0xE608=>0xF868,\r
-0xE609=>0xF869,\r
-0xE60A=>0xF86A,\r
-0xE60B=>0xF86B,\r
-0xE60C=>0xF86C,\r
-0xE60D=>0xF86D,\r
-0xE60E=>0xF86E,\r
-0xE60F=>0xF86F,\r
-0xE610=>0xF870,\r
-0xE611=>0xF871,\r
-0xE612=>0xF872,\r
-0xE613=>0xF873,\r
-0xE614=>0xF874,\r
-0xE615=>0xF875,\r
-0xE616=>0xF876,\r
-0xE617=>0xF877,\r
-0xE618=>0xF878,\r
-0xE619=>0xF879,\r
-0xE61A=>0xF87A,\r
-0xE61B=>0xF87B,\r
-0xE61C=>0xF87C,\r
-0xE61D=>0xF87D,\r
-0xE61E=>0xF87E,\r
-0xE61F=>0xF880,\r
-0xE620=>0xF881,\r
-0xE621=>0xF882,\r
-0xE622=>0xF883,\r
-0xE623=>0xF884,\r
-0xE624=>0xF885,\r
-0xE625=>0xF886,\r
-0xE626=>0xF887,\r
-0xE627=>0xF888,\r
-0xE628=>0xF889,\r
-0xE629=>0xF88A,\r
-0xE62A=>0xF88B,\r
-0xE62B=>0xF88C,\r
-0xE62C=>0xF88D,\r
-0xE62D=>0xF88E,\r
-0xE62E=>0xF88F,\r
-0xE62F=>0xF890,\r
-0xE630=>0xF891,\r
-0xE631=>0xF892,\r
-0xE632=>0xF893,\r
-0xE633=>0xF894,\r
-0xE634=>0xF895,\r
-0xE635=>0xF896,\r
-0xE636=>0xF897,\r
-0xE637=>0xF898,\r
-0xE638=>0xF899,\r
-0xE639=>0xF89A,\r
-0xE63A=>0xF89B,\r
-0xE63B=>0xF89C,\r
-0xE63C=>0xF89D,\r
-0xE63D=>0xF89E,\r
-0xE63E=>0xF89F,\r
-0xE63F=>0xF8A0,\r
-0xE640=>0xF8A1,\r
-0xE641=>0xF8A2,\r
-0xE642=>0xF8A3,\r
-0xE643=>0xF8A4,\r
-0xE644=>0xF8A5,\r
-0xE645=>0xF8A6,\r
-0xE646=>0xF8A7,\r
-0xE647=>0xF8A8,\r
-0xE648=>0xF8A9,\r
-0xE649=>0xF8AA,\r
-0xE64A=>0xF8AB,\r
-0xE64B=>0xF8AC,\r
-0xE64C=>0xF8AD,\r
-0xE64D=>0xF8AE,\r
-0xE64E=>0xF8AF,\r
-0xE64F=>0xF8B0,\r
-0xE650=>0xF8B1,\r
-0xE651=>0xF8B2,\r
-0xE652=>0xF8B3,\r
-0xE653=>0xF8B4,\r
-0xE654=>0xF8B5,\r
-0xE655=>0xF8B6,\r
-0xE656=>0xF8B7,\r
-0xE657=>0xF8B8,\r
-0xE658=>0xF8B9,\r
-0xE659=>0xF8BA,\r
-0xE65A=>0xF8BB,\r
-0xE65B=>0xF8BC,\r
-0xE65C=>0xF8BD,\r
-0xE65D=>0xF8BE,\r
-0xE65E=>0xF8BF,\r
-0xE65F=>0xF8C0,\r
-0xE660=>0xF8C1,\r
-0xE661=>0xF8C2,\r
-0xE662=>0xF8C3,\r
-0xE663=>0xF8C4,\r
-0xE664=>0xF8C5,\r
-0xE665=>0xF8C6,\r
-0xE666=>0xF8C7,\r
-0xE667=>0xF8C8,\r
-0xE668=>0xF8C9,\r
-0xE669=>0xF8CA,\r
-0xE66A=>0xF8CB,\r
-0xE66B=>0xF8CC,\r
-0xE66C=>0xF8CD,\r
-0xE66D=>0xF8CE,\r
-0xE66E=>0xF8CF,\r
-0xE66F=>0xF8D0,\r
-0xE670=>0xF8D1,\r
-0xE671=>0xF8D2,\r
-0xE672=>0xF8D3,\r
-0xE673=>0xF8D4,\r
-0xE674=>0xF8D5,\r
-0xE675=>0xF8D6,\r
-0xE676=>0xF8D7,\r
-0xE677=>0xF8D8,\r
-0xE678=>0xF8D9,\r
-0xE679=>0xF8DA,\r
-0xE67A=>0xF8DB,\r
-0xE67B=>0xF8DC,\r
-0xE67C=>0xF8DD,\r
-0xE67D=>0xF8DE,\r
-0xE67E=>0xF8DF,\r
-0xE67F=>0xF8E0,\r
-0xE680=>0xF8E1,\r
-0xE681=>0xF8E2,\r
-0xE682=>0xF8E3,\r
-0xE683=>0xF8E4,\r
-0xE684=>0xF8E5,\r
-0xE685=>0xF8E6,\r
-0xE686=>0xF8E7,\r
-0xE687=>0xF8E8,\r
-0xE688=>0xF8E9,\r
-0xE689=>0xF8EA,\r
-0xE68A=>0xF8EB,\r
-0xE68B=>0xF8EC,\r
-0xE68C=>0xF8ED,\r
-0xE68D=>0xF8EE,\r
-0xE68E=>0xF8EF,\r
-0xE68F=>0xF8F0,\r
-0xE690=>0xF8F1,\r
-0xE691=>0xF8F2,\r
-0xE692=>0xF8F3,\r
-0xE693=>0xF8F4,\r
-0xE694=>0xF8F5,\r
-0xE695=>0xF8F6,\r
-0xE696=>0xF8F7,\r
-0xE697=>0xF8F8,\r
-0xE698=>0xF8F9,\r
-0xE699=>0xF8FA,\r
-0xE69A=>0xF8FB,\r
-0xE69B=>0xF8FC,\r
-0xE69C=>0xF940,\r
-0xE69D=>0xF941,\r
-0xE69E=>0xF942,\r
-0xE69F=>0xF943,\r
-0xE6A0=>0xF944,\r
-0xE6A1=>0xF945,\r
-0xE6A2=>0xF946,\r
-0xE6A3=>0xF947,\r
-0xE6A4=>0xF948,\r
-0xE6A5=>0xF949,\r
-0xE6A6=>0xF94A,\r
-0xE6A7=>0xF94B,\r
-0xE6A8=>0xF94C,\r
-0xE6A9=>0xF94D,\r
-0xE6AA=>0xF94E,\r
-0xE6AB=>0xF94F,\r
-0xE6AC=>0xF950,\r
-0xE6AD=>0xF951,\r
-0xE6AE=>0xF952,\r
-0xE6AF=>0xF953,\r
-0xE6B0=>0xF954,\r
-0xE6B1=>0xF955,\r
-0xE6B2=>0xF956,\r
-0xE6B3=>0xF957,\r
-0xE6B4=>0xF958,\r
-0xE6B5=>0xF959,\r
-0xE6B6=>0xF95A,\r
-0xE6B7=>0xF95B,\r
-0xE6B8=>0xF95C,\r
-0xE6B9=>0xF95D,\r
-0xE6BA=>0xF95E,\r
-0xE6BB=>0xF95F,\r
-0xE6BC=>0xF960,\r
-0xE6BD=>0xF961,\r
-0xE6BE=>0xF962,\r
-0xE6BF=>0xF963,\r
-0xE6C0=>0xF964,\r
-0xE6C1=>0xF965,\r
-0xE6C2=>0xF966,\r
-0xE6C3=>0xF967,\r
-0xE6C4=>0xF968,\r
-0xE6C5=>0xF969,\r
-0xE6C6=>0xF96A,\r
-0xE6C7=>0xF96B,\r
-0xE6C8=>0xF96C,\r
-0xE6C9=>0xF96D,\r
-0xE6CA=>0xF96E,\r
-0xE6CB=>0xF96F,\r
-0xE6CC=>0xF970,\r
-0xE6CD=>0xF971,\r
-0xE6CE=>0xF972,\r
-0xE6CF=>0xF973,\r
-0xE6D0=>0xF974,\r
-0xE6D1=>0xF975,\r
-0xE6D2=>0xF976,\r
-0xE6D3=>0xF977,\r
-0xE6D4=>0xF978,\r
-0xE6D5=>0xF979,\r
-0xE6D6=>0xF97A,\r
-0xE6D7=>0xF97B,\r
-0xE6D8=>0xF97C,\r
-0xE6D9=>0xF97D,\r
-0xE6DA=>0xF97E,\r
-0xE6DB=>0xF980,\r
-0xE6DC=>0xF981,\r
-0xE6DD=>0xF982,\r
-0xE6DE=>0xF983,\r
-0xE6DF=>0xF984,\r
-0xE6E0=>0xF985,\r
-0xE6E1=>0xF986,\r
-0xE6E2=>0xF987,\r
-0xE6E3=>0xF988,\r
-0xE6E4=>0xF989,\r
-0xE6E5=>0xF98A,\r
-0xE6E6=>0xF98B,\r
-0xE6E7=>0xF98C,\r
-0xE6E8=>0xF98D,\r
-0xE6E9=>0xF98E,\r
-0xE6EA=>0xF98F,\r
-0xE6EB=>0xF990,\r
-0xE6EC=>0xF991,\r
-0xE6ED=>0xF992,\r
-0xE6EE=>0xF993,\r
-0xE6EF=>0xF994,\r
-0xE6F0=>0xF995,\r
-0xE6F1=>0xF996,\r
-0xE6F2=>0xF997,\r
-0xE6F3=>0xF998,\r
-0xE6F4=>0xF999,\r
-0xE6F5=>0xF99A,\r
-0xE6F6=>0xF99B,\r
-0xE6F7=>0xF99C,\r
-0xE6F8=>0xF99D,\r
-0xE6F9=>0xF99E,\r
-0xE6FA=>0xF99F,\r
-0xE6FB=>0xF9A0,\r
-0xE6FC=>0xF9A1,\r
-0xE6FD=>0xF9A2,\r
-0xE6FE=>0xF9A3,\r
-0xE6FF=>0xF9A4,\r
-0xE700=>0xF9A5,\r
-0xE701=>0xF9A6,\r
-0xE702=>0xF9A7,\r
-0xE703=>0xF9A8,\r
-0xE704=>0xF9A9,\r
-0xE705=>0xF9AA,\r
-0xE706=>0xF9AB,\r
-0xE707=>0xF9AC,\r
-0xE708=>0xF9AD,\r
-0xE709=>0xF9AE,\r
-0xE70A=>0xF9AF,\r
-0xE70B=>0xF9B0,\r
-0xE70C=>0xF9B1,\r
-0xE70D=>0xF9B2,\r
-0xE70E=>0xF9B3,\r
-0xE70F=>0xF9B4,\r
-0xE710=>0xF9B5,\r
-0xE711=>0xF9B6,\r
-0xE712=>0xF9B7,\r
-0xE713=>0xF9B8,\r
-0xE714=>0xF9B9,\r
-0xE715=>0xF9BA,\r
-0xE716=>0xF9BB,\r
-0xE717=>0xF9BC,\r
-0xE718=>0xF9BD,\r
-0xE719=>0xF9BE,\r
-0xE71A=>0xF9BF,\r
-0xE71B=>0xF9C0,\r
-0xE71C=>0xF9C1,\r
-0xE71D=>0xF9C2,\r
-0xE71E=>0xF9C3,\r
-0xE71F=>0xF9C4,\r
-0xE720=>0xF9C5,\r
-0xE721=>0xF9C6,\r
-0xE722=>0xF9C7,\r
-0xE723=>0xF9C8,\r
-0xE724=>0xF9C9,\r
-0xE725=>0xF9CA,\r
-0xE726=>0xF9CB,\r
-0xE727=>0xF9CC,\r
-0xE728=>0xF9CD,\r
-0xE729=>0xF9CE,\r
-0xE72A=>0xF9CF,\r
-0xE72B=>0xF9D0,\r
-0xE72C=>0xF9D1,\r
-0xE72D=>0xF9D2,\r
-0xE72E=>0xF9D3,\r
-0xE72F=>0xF9D4,\r
-0xE730=>0xF9D5,\r
-0xE731=>0xF9D6,\r
-0xE732=>0xF9D7,\r
-0xE733=>0xF9D8,\r
-0xE734=>0xF9D9,\r
-0xE735=>0xF9DA,\r
-0xE736=>0xF9DB,\r
-0xE737=>0xF9DC,\r
-0xE738=>0xF9DD,\r
-0xE739=>0xF9DE,\r
-0xE73A=>0xF9DF,\r
-0xE73B=>0xF9E0,\r
-0xE73C=>0xF9E1,\r
-0xE73D=>0xF9E2,\r
-0xE73E=>0xF9E3,\r
-0xE73F=>0xF9E4,\r
-0xE740=>0xF9E5,\r
-0xE741=>0xF9E6,\r
-0xE742=>0xF9E7,\r
-0xE743=>0xF9E8,\r
-0xE744=>0xF9E9,\r
-0xE745=>0xF9EA,\r
-0xE746=>0xF9EB,\r
-0xE747=>0xF9EC,\r
-0xE748=>0xF9ED,\r
-0xE749=>0xF9EE,\r
-0xE74A=>0xF9EF,\r
-0xE74B=>0xF9F0,\r
-0xE74C=>0xF9F1,\r
-0xE74D=>0xF9F2,\r
-0xE74E=>0xF9F3,\r
-0xE74F=>0xF9F4,\r
-0xE750=>0xF9F5,\r
-0xE751=>0xF9F6,\r
-0xE752=>0xF9F7,\r
-0xE753=>0xF9F8,\r
-0xE754=>0xF9F9,\r
-0xE755=>0xF9FA,\r
-0xE756=>0xF9FB,\r
-0xE757=>0xF9FC,\r
-0x2170=>0xFA40,\r
-0x2171=>0xFA41,\r
-0x2172=>0xFA42,\r
-0x2173=>0xFA43,\r
-0x2174=>0xFA44,\r
-0x2175=>0xFA45,\r
-0x2176=>0xFA46,\r
-0x2177=>0xFA47,\r
-0x2178=>0xFA48,\r
-0x2179=>0xFA49,\r
-0x2160=>0xFA4A,\r
-0x2161=>0xFA4B,\r
-0x2162=>0xFA4C,\r
-0x2163=>0xFA4D,\r
-0x2164=>0xFA4E,\r
-0x2165=>0xFA4F,\r
-0x2166=>0xFA50,\r
-0x2167=>0xFA51,\r
-0x2168=>0xFA52,\r
-0x2169=>0xFA53,\r
-0xFFE2=>0xFA54,\r
-0xFFE4=>0xFA55,\r
-0xFF07=>0xFA56,\r
-0xFF02=>0xFA57,\r
-0x3231=>0xFA58,\r
-0x2116=>0xFA59,\r
-0x2121=>0xFA5A,\r
-0x2235=>0xFA5B,\r
-0x7E8A=>0xFA5C,\r
-0x891C=>0xFA5D,\r
-0x9348=>0xFA5E,\r
-0x9288=>0xFA5F,\r
-0x84DC=>0xFA60,\r
-0x4FC9=>0xFA61,\r
-0x70BB=>0xFA62,\r
-0x6631=>0xFA63,\r
-0x68C8=>0xFA64,\r
-0x92F9=>0xFA65,\r
-0x66FB=>0xFA66,\r
-0x5F45=>0xFA67,\r
-0x4E28=>0xFA68,\r
-0x4EE1=>0xFA69,\r
-0x4EFC=>0xFA6A,\r
-0x4F00=>0xFA6B,\r
-0x4F03=>0xFA6C,\r
-0x4F39=>0xFA6D,\r
-0x4F56=>0xFA6E,\r
-0x4F92=>0xFA6F,\r
-0x4F8A=>0xFA70,\r
-0x4F9A=>0xFA71,\r
-0x4F94=>0xFA72,\r
-0x4FCD=>0xFA73,\r
-0x5040=>0xFA74,\r
-0x5022=>0xFA75,\r
-0x4FFF=>0xFA76,\r
-0x501E=>0xFA77,\r
-0x5046=>0xFA78,\r
-0x5070=>0xFA79,\r
-0x5042=>0xFA7A,\r
-0x5094=>0xFA7B,\r
-0x50F4=>0xFA7C,\r
-0x50D8=>0xFA7D,\r
-0x514A=>0xFA7E,\r
-0x5164=>0xFA80,\r
-0x519D=>0xFA81,\r
-0x51BE=>0xFA82,\r
-0x51EC=>0xFA83,\r
-0x5215=>0xFA84,\r
-0x529C=>0xFA85,\r
-0x52A6=>0xFA86,\r
-0x52C0=>0xFA87,\r
-0x52DB=>0xFA88,\r
-0x5300=>0xFA89,\r
-0x5307=>0xFA8A,\r
-0x5324=>0xFA8B,\r
-0x5372=>0xFA8C,\r
-0x5393=>0xFA8D,\r
-0x53B2=>0xFA8E,\r
-0x53DD=>0xFA8F,\r
-0xFA0E=>0xFA90,\r
-0x549C=>0xFA91,\r
-0x548A=>0xFA92,\r
-0x54A9=>0xFA93,\r
-0x54FF=>0xFA94,\r
-0x5586=>0xFA95,\r
-0x5759=>0xFA96,\r
-0x5765=>0xFA97,\r
-0x57AC=>0xFA98,\r
-0x57C8=>0xFA99,\r
-0x57C7=>0xFA9A,\r
-0xFA0F=>0xFA9B,\r
-0xFA10=>0xFA9C,\r
-0x589E=>0xFA9D,\r
-0x58B2=>0xFA9E,\r
-0x590B=>0xFA9F,\r
-0x5953=>0xFAA0,\r
-0x595B=>0xFAA1,\r
-0x595D=>0xFAA2,\r
-0x5963=>0xFAA3,\r
-0x59A4=>0xFAA4,\r
-0x59BA=>0xFAA5,\r
-0x5B56=>0xFAA6,\r
-0x5BC0=>0xFAA7,\r
-0x752F=>0xFAA8,\r
-0x5BD8=>0xFAA9,\r
-0x5BEC=>0xFAAA,\r
-0x5C1E=>0xFAAB,\r
-0x5CA6=>0xFAAC,\r
-0x5CBA=>0xFAAD,\r
-0x5CF5=>0xFAAE,\r
-0x5D27=>0xFAAF,\r
-0x5D53=>0xFAB0,\r
-0xFA11=>0xFAB1,\r
-0x5D42=>0xFAB2,\r
-0x5D6D=>0xFAB3,\r
-0x5DB8=>0xFAB4,\r
-0x5DB9=>0xFAB5,\r
-0x5DD0=>0xFAB6,\r
-0x5F21=>0xFAB7,\r
-0x5F34=>0xFAB8,\r
-0x5F67=>0xFAB9,\r
-0x5FB7=>0xFABA,\r
-0x5FDE=>0xFABB,\r
-0x605D=>0xFABC,\r
-0x6085=>0xFABD,\r
-0x608A=>0xFABE,\r
-0x60DE=>0xFABF,\r
-0x60D5=>0xFAC0,\r
-0x6120=>0xFAC1,\r
-0x60F2=>0xFAC2,\r
-0x6111=>0xFAC3,\r
-0x6137=>0xFAC4,\r
-0x6130=>0xFAC5,\r
-0x6198=>0xFAC6,\r
-0x6213=>0xFAC7,\r
-0x62A6=>0xFAC8,\r
-0x63F5=>0xFAC9,\r
-0x6460=>0xFACA,\r
-0x649D=>0xFACB,\r
-0x64CE=>0xFACC,\r
-0x654E=>0xFACD,\r
-0x6600=>0xFACE,\r
-0x6615=>0xFACF,\r
-0x663B=>0xFAD0,\r
-0x6609=>0xFAD1,\r
-0x662E=>0xFAD2,\r
-0x661E=>0xFAD3,\r
-0x6624=>0xFAD4,\r
-0x6665=>0xFAD5,\r
-0x6657=>0xFAD6,\r
-0x6659=>0xFAD7,\r
-0xFA12=>0xFAD8,\r
-0x6673=>0xFAD9,\r
-0x6699=>0xFADA,\r
-0x66A0=>0xFADB,\r
-0x66B2=>0xFADC,\r
-0x66BF=>0xFADD,\r
-0x66FA=>0xFADE,\r
-0x670E=>0xFADF,\r
-0xF929=>0xFAE0,\r
-0x6766=>0xFAE1,\r
-0x67BB=>0xFAE2,\r
-0x6852=>0xFAE3,\r
-0x67C0=>0xFAE4,\r
-0x6801=>0xFAE5,\r
-0x6844=>0xFAE6,\r
-0x68CF=>0xFAE7,\r
-0xFA13=>0xFAE8,\r
-0x6968=>0xFAE9,\r
-0xFA14=>0xFAEA,\r
-0x6998=>0xFAEB,\r
-0x69E2=>0xFAEC,\r
-0x6A30=>0xFAED,\r
-0x6A6B=>0xFAEE,\r
-0x6A46=>0xFAEF,\r
-0x6A73=>0xFAF0,\r
-0x6A7E=>0xFAF1,\r
-0x6AE2=>0xFAF2,\r
-0x6AE4=>0xFAF3,\r
-0x6BD6=>0xFAF4,\r
-0x6C3F=>0xFAF5,\r
-0x6C5C=>0xFAF6,\r
-0x6C86=>0xFAF7,\r
-0x6C6F=>0xFAF8,\r
-0x6CDA=>0xFAF9,\r
-0x6D04=>0xFAFA,\r
-0x6D87=>0xFAFB,\r
-0x6D6F=>0xFAFC,\r
-0x6D96=>0xFB40,\r
-0x6DAC=>0xFB41,\r
-0x6DCF=>0xFB42,\r
-0x6DF8=>0xFB43,\r
-0x6DF2=>0xFB44,\r
-0x6DFC=>0xFB45,\r
-0x6E39=>0xFB46,\r
-0x6E5C=>0xFB47,\r
-0x6E27=>0xFB48,\r
-0x6E3C=>0xFB49,\r
-0x6EBF=>0xFB4A,\r
-0x6F88=>0xFB4B,\r
-0x6FB5=>0xFB4C,\r
-0x6FF5=>0xFB4D,\r
-0x7005=>0xFB4E,\r
-0x7007=>0xFB4F,\r
-0x7028=>0xFB50,\r
-0x7085=>0xFB51,\r
-0x70AB=>0xFB52,\r
-0x710F=>0xFB53,\r
-0x7104=>0xFB54,\r
-0x715C=>0xFB55,\r
-0x7146=>0xFB56,\r
-0x7147=>0xFB57,\r
-0xFA15=>0xFB58,\r
-0x71C1=>0xFB59,\r
-0x71FE=>0xFB5A,\r
-0x72B1=>0xFB5B,\r
-0x72BE=>0xFB5C,\r
-0x7324=>0xFB5D,\r
-0xFA16=>0xFB5E,\r
-0x7377=>0xFB5F,\r
-0x73BD=>0xFB60,\r
-0x73C9=>0xFB61,\r
-0x73D6=>0xFB62,\r
-0x73E3=>0xFB63,\r
-0x73D2=>0xFB64,\r
-0x7407=>0xFB65,\r
-0x73F5=>0xFB66,\r
-0x7426=>0xFB67,\r
-0x742A=>0xFB68,\r
-0x7429=>0xFB69,\r
-0x742E=>0xFB6A,\r
-0x7462=>0xFB6B,\r
-0x7489=>0xFB6C,\r
-0x749F=>0xFB6D,\r
-0x7501=>0xFB6E,\r
-0x756F=>0xFB6F,\r
-0x7682=>0xFB70,\r
-0x769C=>0xFB71,\r
-0x769E=>0xFB72,\r
-0x769B=>0xFB73,\r
-0x76A6=>0xFB74,\r
-0xFA17=>0xFB75,\r
-0x7746=>0xFB76,\r
-0x52AF=>0xFB77,\r
-0x7821=>0xFB78,\r
-0x784E=>0xFB79,\r
-0x7864=>0xFB7A,\r
-0x787A=>0xFB7B,\r
-0x7930=>0xFB7C,\r
-0xFA18=>0xFB7D,\r
-0xFA19=>0xFB7E,\r
-0xFA1A=>0xFB80,\r
-0x7994=>0xFB81,\r
-0xFA1B=>0xFB82,\r
-0x799B=>0xFB83,\r
-0x7AD1=>0xFB84,\r
-0x7AE7=>0xFB85,\r
-0xFA1C=>0xFB86,\r
-0x7AEB=>0xFB87,\r
-0x7B9E=>0xFB88,\r
-0xFA1D=>0xFB89,\r
-0x7D48=>0xFB8A,\r
-0x7D5C=>0xFB8B,\r
-0x7DB7=>0xFB8C,\r
-0x7DA0=>0xFB8D,\r
-0x7DD6=>0xFB8E,\r
-0x7E52=>0xFB8F,\r
-0x7F47=>0xFB90,\r
-0x7FA1=>0xFB91,\r
-0xFA1E=>0xFB92,\r
-0x8301=>0xFB93,\r
-0x8362=>0xFB94,\r
-0x837F=>0xFB95,\r
-0x83C7=>0xFB96,\r
-0x83F6=>0xFB97,\r
-0x8448=>0xFB98,\r
-0x84B4=>0xFB99,\r
-0x8553=>0xFB9A,\r
-0x8559=>0xFB9B,\r
-0x856B=>0xFB9C,\r
-0xFA1F=>0xFB9D,\r
-0x85B0=>0xFB9E,\r
-0xFA20=>0xFB9F,\r
-0xFA21=>0xFBA0,\r
-0x8807=>0xFBA1,\r
-0x88F5=>0xFBA2,\r
-0x8A12=>0xFBA3,\r
-0x8A37=>0xFBA4,\r
-0x8A79=>0xFBA5,\r
-0x8AA7=>0xFBA6,\r
-0x8ABE=>0xFBA7,\r
-0x8ADF=>0xFBA8,\r
-0xFA22=>0xFBA9,\r
-0x8AF6=>0xFBAA,\r
-0x8B53=>0xFBAB,\r
-0x8B7F=>0xFBAC,\r
-0x8CF0=>0xFBAD,\r
-0x8CF4=>0xFBAE,\r
-0x8D12=>0xFBAF,\r
-0x8D76=>0xFBB0,\r
-0xFA23=>0xFBB1,\r
-0x8ECF=>0xFBB2,\r
-0xFA24=>0xFBB3,\r
-0xFA25=>0xFBB4,\r
-0x9067=>0xFBB5,\r
-0x90DE=>0xFBB6,\r
-0xFA26=>0xFBB7,\r
-0x9115=>0xFBB8,\r
-0x9127=>0xFBB9,\r
-0x91DA=>0xFBBA,\r
-0x91D7=>0xFBBB,\r
-0x91DE=>0xFBBC,\r
-0x91ED=>0xFBBD,\r
-0x91EE=>0xFBBE,\r
-0x91E4=>0xFBBF,\r
-0x91E5=>0xFBC0,\r
-0x9206=>0xFBC1,\r
-0x9210=>0xFBC2,\r
-0x920A=>0xFBC3,\r
-0x923A=>0xFBC4,\r
-0x9240=>0xFBC5,\r
-0x923C=>0xFBC6,\r
-0x924E=>0xFBC7,\r
-0x9259=>0xFBC8,\r
-0x9251=>0xFBC9,\r
-0x9239=>0xFBCA,\r
-0x9267=>0xFBCB,\r
-0x92A7=>0xFBCC,\r
-0x9277=>0xFBCD,\r
-0x9278=>0xFBCE,\r
-0x92E7=>0xFBCF,\r
-0x92D7=>0xFBD0,\r
-0x92D9=>0xFBD1,\r
-0x92D0=>0xFBD2,\r
-0xFA27=>0xFBD3,\r
-0x92D5=>0xFBD4,\r
-0x92E0=>0xFBD5,\r
-0x92D3=>0xFBD6,\r
-0x9325=>0xFBD7,\r
-0x9321=>0xFBD8,\r
-0x92FB=>0xFBD9,\r
-0xFA28=>0xFBDA,\r
-0x931E=>0xFBDB,\r
-0x92FF=>0xFBDC,\r
-0x931D=>0xFBDD,\r
-0x9302=>0xFBDE,\r
-0x9370=>0xFBDF,\r
-0x9357=>0xFBE0,\r
-0x93A4=>0xFBE1,\r
-0x93C6=>0xFBE2,\r
-0x93DE=>0xFBE3,\r
-0x93F8=>0xFBE4,\r
-0x9431=>0xFBE5,\r
-0x9445=>0xFBE6,\r
-0x9448=>0xFBE7,\r
-0x9592=>0xFBE8,\r
-0xF9DC=>0xFBE9,\r
-0xFA29=>0xFBEA,\r
-0x969D=>0xFBEB,\r
-0x96AF=>0xFBEC,\r
-0x9733=>0xFBED,\r
-0x973B=>0xFBEE,\r
-0x9743=>0xFBEF,\r
-0x974D=>0xFBF0,\r
-0x974F=>0xFBF1,\r
-0x9751=>0xFBF2,\r
-0x9755=>0xFBF3,\r
-0x9857=>0xFBF4,\r
-0x9865=>0xFBF5,\r
-0xFA2A=>0xFBF6,\r
-0xFA2B=>0xFBF7,\r
-0x9927=>0xFBF8,\r
-0xFA2C=>0xFBF9,\r
-0x999E=>0xFBFA,\r
-0x9A4E=>0xFBFB,\r
-0x9AD9=>0xFBFC,\r
-0x9ADC=>0xFC40,\r
-0x9B75=>0xFC41,\r
-0x9B72=>0xFC42,\r
-0x9B8F=>0xFC43,\r
-0x9BB1=>0xFC44,\r
-0x9BBB=>0xFC45,\r
-0x9C00=>0xFC46,\r
-0x9D70=>0xFC47,\r
-0x9D6B=>0xFC48,\r
-0xFA2D=>0xFC49,\r
-0x9E19=>0xFC4A,\r
-0x9ED1=>0xFC4B);\r
+<?php
+$ucs2tosjis = array(
+0x3000=>0x8140,
+0x3001=>0x8141,
+0x3002=>0x8142,
+0xFF0C=>0x8143,
+0xFF0E=>0x8144,
+0x30FB=>0x8145,
+0xFF1A=>0x8146,
+0xFF1B=>0x8147,
+0xFF1F=>0x8148,
+0xFF01=>0x8149,
+0x309B=>0x814A,
+0x309C=>0x814B,
+0x00B4=>0x814C,
+0xFF40=>0x814D,
+0x00A8=>0x814E,
+0xFF3E=>0x814F,
+0xFFE3=>0x8150,
+0xFF3F=>0x8151,
+0x30FD=>0x8152,
+0x30FE=>0x8153,
+0x309D=>0x8154,
+0x309E=>0x8155,
+0x3003=>0x8156,
+0x4EDD=>0x8157,
+0x3005=>0x8158,
+0x3006=>0x8159,
+0x3007=>0x815A,
+0x30FC=>0x815B,
+0x2015=>0x815C,
+0x2010=>0x815D,
+0xFF0F=>0x815E,
+0xFF3C=>0x815F,
+0xFF5E=>0x8160,
+0x2225=>0x8161,
+0xFF5C=>0x8162,
+0x2026=>0x8163,
+0x2025=>0x8164,
+0x2018=>0x8165,
+0x2019=>0x8166,
+0x201C=>0x8167,
+0x201D=>0x8168,
+0xFF08=>0x8169,
+0xFF09=>0x816A,
+0x3014=>0x816B,
+0x3015=>0x816C,
+0xFF3B=>0x816D,
+0xFF3D=>0x816E,
+0xFF5B=>0x816F,
+0xFF5D=>0x8170,
+0x3008=>0x8171,
+0x3009=>0x8172,
+0x300A=>0x8173,
+0x300B=>0x8174,
+0x300C=>0x8175,
+0x300D=>0x8176,
+0x300E=>0x8177,
+0x300F=>0x8178,
+0x3010=>0x8179,
+0x3011=>0x817A,
+0xFF0B=>0x817B,
+0xFF0D=>0x817C,
+0x00B1=>0x817D,
+0x00D7=>0x817E,
+0x00F7=>0x8180,
+0xFF1D=>0x8181,
+0x2260=>0x8182,
+0xFF1C=>0x8183,
+0xFF1E=>0x8184,
+0x2266=>0x8185,
+0x2267=>0x8186,
+0x221E=>0x8187,
+0x2234=>0x8188,
+0x2642=>0x8189,
+0x2640=>0x818A,
+0x00B0=>0x818B,
+0x2032=>0x818C,
+0x2033=>0x818D,
+0x2103=>0x818E,
+0xFFE5=>0x818F,
+0xFF04=>0x8190,
+0xFFE0=>0x8191,
+0xFFE1=>0x8192,
+0xFF05=>0x8193,
+0xFF03=>0x8194,
+0xFF06=>0x8195,
+0xFF0A=>0x8196,
+0xFF20=>0x8197,
+0x00A7=>0x8198,
+0x2606=>0x8199,
+0x2605=>0x819A,
+0x25CB=>0x819B,
+0x25CF=>0x819C,
+0x25CE=>0x819D,
+0x25C7=>0x819E,
+0x25C6=>0x819F,
+0x25A1=>0x81A0,
+0x25A0=>0x81A1,
+0x25B3=>0x81A2,
+0x25B2=>0x81A3,
+0x25BD=>0x81A4,
+0x25BC=>0x81A5,
+0x203B=>0x81A6,
+0x3012=>0x81A7,
+0x2192=>0x81A8,
+0x2190=>0x81A9,
+0x2191=>0x81AA,
+0x2193=>0x81AB,
+0x3013=>0x81AC,
+0x2208=>0x81B8,
+0x220B=>0x81B9,
+0x2286=>0x81BA,
+0x2287=>0x81BB,
+0x2282=>0x81BC,
+0x2283=>0x81BD,
+0x222A=>0x81BE,
+0x2229=>0x81BF,
+0x2227=>0x81C8,
+0x2228=>0x81C9,
+0xFFE2=>0x81CA,
+0x21D2=>0x81CB,
+0x21D4=>0x81CC,
+0x2200=>0x81CD,
+0x2203=>0x81CE,
+0x2220=>0x81DA,
+0x22A5=>0x81DB,
+0x2312=>0x81DC,
+0x2202=>0x81DD,
+0x2207=>0x81DE,
+0x2261=>0x81DF,
+0x2252=>0x81E0,
+0x226A=>0x81E1,
+0x226B=>0x81E2,
+0x221A=>0x81E3,
+0x223D=>0x81E4,
+0x221D=>0x81E5,
+0x2235=>0x81E6,
+0x222B=>0x81E7,
+0x222C=>0x81E8,
+0x212B=>0x81F0,
+0x2030=>0x81F1,
+0x266F=>0x81F2,
+0x266D=>0x81F3,
+0x266A=>0x81F4,
+0x2020=>0x81F5,
+0x2021=>0x81F6,
+0x00B6=>0x81F7,
+0x25EF=>0x81FC,
+0xFF10=>0x824F,
+0xFF11=>0x8250,
+0xFF12=>0x8251,
+0xFF13=>0x8252,
+0xFF14=>0x8253,
+0xFF15=>0x8254,
+0xFF16=>0x8255,
+0xFF17=>0x8256,
+0xFF18=>0x8257,
+0xFF19=>0x8258,
+0xFF21=>0x8260,
+0xFF22=>0x8261,
+0xFF23=>0x8262,
+0xFF24=>0x8263,
+0xFF25=>0x8264,
+0xFF26=>0x8265,
+0xFF27=>0x8266,
+0xFF28=>0x8267,
+0xFF29=>0x8268,
+0xFF2A=>0x8269,
+0xFF2B=>0x826A,
+0xFF2C=>0x826B,
+0xFF2D=>0x826C,
+0xFF2E=>0x826D,
+0xFF2F=>0x826E,
+0xFF30=>0x826F,
+0xFF31=>0x8270,
+0xFF32=>0x8271,
+0xFF33=>0x8272,
+0xFF34=>0x8273,
+0xFF35=>0x8274,
+0xFF36=>0x8275,
+0xFF37=>0x8276,
+0xFF38=>0x8277,
+0xFF39=>0x8278,
+0xFF3A=>0x8279,
+0xFF41=>0x8281,
+0xFF42=>0x8282,
+0xFF43=>0x8283,
+0xFF44=>0x8284,
+0xFF45=>0x8285,
+0xFF46=>0x8286,
+0xFF47=>0x8287,
+0xFF48=>0x8288,
+0xFF49=>0x8289,
+0xFF4A=>0x828A,
+0xFF4B=>0x828B,
+0xFF4C=>0x828C,
+0xFF4D=>0x828D,
+0xFF4E=>0x828E,
+0xFF4F=>0x828F,
+0xFF50=>0x8290,
+0xFF51=>0x8291,
+0xFF52=>0x8292,
+0xFF53=>0x8293,
+0xFF54=>0x8294,
+0xFF55=>0x8295,
+0xFF56=>0x8296,
+0xFF57=>0x8297,
+0xFF58=>0x8298,
+0xFF59=>0x8299,
+0xFF5A=>0x829A,
+0x3041=>0x829F,
+0x3042=>0x82A0,
+0x3043=>0x82A1,
+0x3044=>0x82A2,
+0x3045=>0x82A3,
+0x3046=>0x82A4,
+0x3047=>0x82A5,
+0x3048=>0x82A6,
+0x3049=>0x82A7,
+0x304A=>0x82A8,
+0x304B=>0x82A9,
+0x304C=>0x82AA,
+0x304D=>0x82AB,
+0x304E=>0x82AC,
+0x304F=>0x82AD,
+0x3050=>0x82AE,
+0x3051=>0x82AF,
+0x3052=>0x82B0,
+0x3053=>0x82B1,
+0x3054=>0x82B2,
+0x3055=>0x82B3,
+0x3056=>0x82B4,
+0x3057=>0x82B5,
+0x3058=>0x82B6,
+0x3059=>0x82B7,
+0x305A=>0x82B8,
+0x305B=>0x82B9,
+0x305C=>0x82BA,
+0x305D=>0x82BB,
+0x305E=>0x82BC,
+0x305F=>0x82BD,
+0x3060=>0x82BE,
+0x3061=>0x82BF,
+0x3062=>0x82C0,
+0x3063=>0x82C1,
+0x3064=>0x82C2,
+0x3065=>0x82C3,
+0x3066=>0x82C4,
+0x3067=>0x82C5,
+0x3068=>0x82C6,
+0x3069=>0x82C7,
+0x306A=>0x82C8,
+0x306B=>0x82C9,
+0x306C=>0x82CA,
+0x306D=>0x82CB,
+0x306E=>0x82CC,
+0x306F=>0x82CD,
+0x3070=>0x82CE,
+0x3071=>0x82CF,
+0x3072=>0x82D0,
+0x3073=>0x82D1,
+0x3074=>0x82D2,
+0x3075=>0x82D3,
+0x3076=>0x82D4,
+0x3077=>0x82D5,
+0x3078=>0x82D6,
+0x3079=>0x82D7,
+0x307A=>0x82D8,
+0x307B=>0x82D9,
+0x307C=>0x82DA,
+0x307D=>0x82DB,
+0x307E=>0x82DC,
+0x307F=>0x82DD,
+0x3080=>0x82DE,
+0x3081=>0x82DF,
+0x3082=>0x82E0,
+0x3083=>0x82E1,
+0x3084=>0x82E2,
+0x3085=>0x82E3,
+0x3086=>0x82E4,
+0x3087=>0x82E5,
+0x3088=>0x82E6,
+0x3089=>0x82E7,
+0x308A=>0x82E8,
+0x308B=>0x82E9,
+0x308C=>0x82EA,
+0x308D=>0x82EB,
+0x308E=>0x82EC,
+0x308F=>0x82ED,
+0x3090=>0x82EE,
+0x3091=>0x82EF,
+0x3092=>0x82F0,
+0x3093=>0x82F1,
+0x30A1=>0x8340,
+0x30A2=>0x8341,
+0x30A3=>0x8342,
+0x30A4=>0x8343,
+0x30A5=>0x8344,
+0x30A6=>0x8345,
+0x30A7=>0x8346,
+0x30A8=>0x8347,
+0x30A9=>0x8348,
+0x30AA=>0x8349,
+0x30AB=>0x834A,
+0x30AC=>0x834B,
+0x30AD=>0x834C,
+0x30AE=>0x834D,
+0x30AF=>0x834E,
+0x30B0=>0x834F,
+0x30B1=>0x8350,
+0x30B2=>0x8351,
+0x30B3=>0x8352,
+0x30B4=>0x8353,
+0x30B5=>0x8354,
+0x30B6=>0x8355,
+0x30B7=>0x8356,
+0x30B8=>0x8357,
+0x30B9=>0x8358,
+0x30BA=>0x8359,
+0x30BB=>0x835A,
+0x30BC=>0x835B,
+0x30BD=>0x835C,
+0x30BE=>0x835D,
+0x30BF=>0x835E,
+0x30C0=>0x835F,
+0x30C1=>0x8360,
+0x30C2=>0x8361,
+0x30C3=>0x8362,
+0x30C4=>0x8363,
+0x30C5=>0x8364,
+0x30C6=>0x8365,
+0x30C7=>0x8366,
+0x30C8=>0x8367,
+0x30C9=>0x8368,
+0x30CA=>0x8369,
+0x30CB=>0x836A,
+0x30CC=>0x836B,
+0x30CD=>0x836C,
+0x30CE=>0x836D,
+0x30CF=>0x836E,
+0x30D0=>0x836F,
+0x30D1=>0x8370,
+0x30D2=>0x8371,
+0x30D3=>0x8372,
+0x30D4=>0x8373,
+0x30D5=>0x8374,
+0x30D6=>0x8375,
+0x30D7=>0x8376,
+0x30D8=>0x8377,
+0x30D9=>0x8378,
+0x30DA=>0x8379,
+0x30DB=>0x837A,
+0x30DC=>0x837B,
+0x30DD=>0x837C,
+0x30DE=>0x837D,
+0x30DF=>0x837E,
+0x30E0=>0x8380,
+0x30E1=>0x8381,
+0x30E2=>0x8382,
+0x30E3=>0x8383,
+0x30E4=>0x8384,
+0x30E5=>0x8385,
+0x30E6=>0x8386,
+0x30E7=>0x8387,
+0x30E8=>0x8388,
+0x30E9=>0x8389,
+0x30EA=>0x838A,
+0x30EB=>0x838B,
+0x30EC=>0x838C,
+0x30ED=>0x838D,
+0x30EE=>0x838E,
+0x30EF=>0x838F,
+0x30F0=>0x8390,
+0x30F1=>0x8391,
+0x30F2=>0x8392,
+0x30F3=>0x8393,
+0x30F4=>0x8394,
+0x30F5=>0x8395,
+0x30F6=>0x8396,
+0x0391=>0x839F,
+0x0392=>0x83A0,
+0x0393=>0x83A1,
+0x0394=>0x83A2,
+0x0395=>0x83A3,
+0x0396=>0x83A4,
+0x0397=>0x83A5,
+0x0398=>0x83A6,
+0x0399=>0x83A7,
+0x039A=>0x83A8,
+0x039B=>0x83A9,
+0x039C=>0x83AA,
+0x039D=>0x83AB,
+0x039E=>0x83AC,
+0x039F=>0x83AD,
+0x03A0=>0x83AE,
+0x03A1=>0x83AF,
+0x03A3=>0x83B0,
+0x03A4=>0x83B1,
+0x03A5=>0x83B2,
+0x03A6=>0x83B3,
+0x03A7=>0x83B4,
+0x03A8=>0x83B5,
+0x03A9=>0x83B6,
+0x03B1=>0x83BF,
+0x03B2=>0x83C0,
+0x03B3=>0x83C1,
+0x03B4=>0x83C2,
+0x03B5=>0x83C3,
+0x03B6=>0x83C4,
+0x03B7=>0x83C5,
+0x03B8=>0x83C6,
+0x03B9=>0x83C7,
+0x03BA=>0x83C8,
+0x03BB=>0x83C9,
+0x03BC=>0x83CA,
+0x03BD=>0x83CB,
+0x03BE=>0x83CC,
+0x03BF=>0x83CD,
+0x03C0=>0x83CE,
+0x03C1=>0x83CF,
+0x03C3=>0x83D0,
+0x03C4=>0x83D1,
+0x03C5=>0x83D2,
+0x03C6=>0x83D3,
+0x03C7=>0x83D4,
+0x03C8=>0x83D5,
+0x03C9=>0x83D6,
+0x0410=>0x8440,
+0x0411=>0x8441,
+0x0412=>0x8442,
+0x0413=>0x8443,
+0x0414=>0x8444,
+0x0415=>0x8445,
+0x0401=>0x8446,
+0x0416=>0x8447,
+0x0417=>0x8448,
+0x0418=>0x8449,
+0x0419=>0x844A,
+0x041A=>0x844B,
+0x041B=>0x844C,
+0x041C=>0x844D,
+0x041D=>0x844E,
+0x041E=>0x844F,
+0x041F=>0x8450,
+0x0420=>0x8451,
+0x0421=>0x8452,
+0x0422=>0x8453,
+0x0423=>0x8454,
+0x0424=>0x8455,
+0x0425=>0x8456,
+0x0426=>0x8457,
+0x0427=>0x8458,
+0x0428=>0x8459,
+0x0429=>0x845A,
+0x042A=>0x845B,
+0x042B=>0x845C,
+0x042C=>0x845D,
+0x042D=>0x845E,
+0x042E=>0x845F,
+0x042F=>0x8460,
+0x0430=>0x8470,
+0x0431=>0x8471,
+0x0432=>0x8472,
+0x0433=>0x8473,
+0x0434=>0x8474,
+0x0435=>0x8475,
+0x0451=>0x8476,
+0x0436=>0x8477,
+0x0437=>0x8478,
+0x0438=>0x8479,
+0x0439=>0x847A,
+0x043A=>0x847B,
+0x043B=>0x847C,
+0x043C=>0x847D,
+0x043D=>0x847E,
+0x043E=>0x8480,
+0x043F=>0x8481,
+0x0440=>0x8482,
+0x0441=>0x8483,
+0x0442=>0x8484,
+0x0443=>0x8485,
+0x0444=>0x8486,
+0x0445=>0x8487,
+0x0446=>0x8488,
+0x0447=>0x8489,
+0x0448=>0x848A,
+0x0449=>0x848B,
+0x044A=>0x848C,
+0x044B=>0x848D,
+0x044C=>0x848E,
+0x044D=>0x848F,
+0x044E=>0x8490,
+0x044F=>0x8491,
+0x2500=>0x849F,
+0x2502=>0x84A0,
+0x250C=>0x84A1,
+0x2510=>0x84A2,
+0x2518=>0x84A3,
+0x2514=>0x84A4,
+0x251C=>0x84A5,
+0x252C=>0x84A6,
+0x2524=>0x84A7,
+0x2534=>0x84A8,
+0x253C=>0x84A9,
+0x2501=>0x84AA,
+0x2503=>0x84AB,
+0x250F=>0x84AC,
+0x2513=>0x84AD,
+0x251B=>0x84AE,
+0x2517=>0x84AF,
+0x2523=>0x84B0,
+0x2533=>0x84B1,
+0x252B=>0x84B2,
+0x253B=>0x84B3,
+0x254B=>0x84B4,
+0x2520=>0x84B5,
+0x252F=>0x84B6,
+0x2528=>0x84B7,
+0x2537=>0x84B8,
+0x253F=>0x84B9,
+0x251D=>0x84BA,
+0x2530=>0x84BB,
+0x2525=>0x84BC,
+0x2538=>0x84BD,
+0x2542=>0x84BE,
+0x2460=>0x8740,
+0x2461=>0x8741,
+0x2462=>0x8742,
+0x2463=>0x8743,
+0x2464=>0x8744,
+0x2465=>0x8745,
+0x2466=>0x8746,
+0x2467=>0x8747,
+0x2468=>0x8748,
+0x2469=>0x8749,
+0x246A=>0x874A,
+0x246B=>0x874B,
+0x246C=>0x874C,
+0x246D=>0x874D,
+0x246E=>0x874E,
+0x246F=>0x874F,
+0x2470=>0x8750,
+0x2471=>0x8751,
+0x2472=>0x8752,
+0x2473=>0x8753,
+0x2160=>0x8754,
+0x2161=>0x8755,
+0x2162=>0x8756,
+0x2163=>0x8757,
+0x2164=>0x8758,
+0x2165=>0x8759,
+0x2166=>0x875A,
+0x2167=>0x875B,
+0x2168=>0x875C,
+0x2169=>0x875D,
+0x3349=>0x875F,
+0x3314=>0x8760,
+0x3322=>0x8761,
+0x334D=>0x8762,
+0x3318=>0x8763,
+0x3327=>0x8764,
+0x3303=>0x8765,
+0x3336=>0x8766,
+0x3351=>0x8767,
+0x3357=>0x8768,
+0x330D=>0x8769,
+0x3326=>0x876A,
+0x3323=>0x876B,
+0x332B=>0x876C,
+0x334A=>0x876D,
+0x333B=>0x876E,
+0x339C=>0x876F,
+0x339D=>0x8770,
+0x339E=>0x8771,
+0x338E=>0x8772,
+0x338F=>0x8773,
+0x33C4=>0x8774,
+0x33A1=>0x8775,
+0x337B=>0x877E,
+0x301D=>0x8780,
+0x301F=>0x8781,
+0x2116=>0x8782,
+0x33CD=>0x8783,
+0x2121=>0x8784,
+0x32A4=>0x8785,
+0x32A5=>0x8786,
+0x32A6=>0x8787,
+0x32A7=>0x8788,
+0x32A8=>0x8789,
+0x3231=>0x878A,
+0x3232=>0x878B,
+0x3239=>0x878C,
+0x337E=>0x878D,
+0x337D=>0x878E,
+0x337C=>0x878F,
+0x2252=>0x8790,
+0x2261=>0x8791,
+0x222B=>0x8792,
+0x222E=>0x8793,
+0x2211=>0x8794,
+0x221A=>0x8795,
+0x22A5=>0x8796,
+0x2220=>0x8797,
+0x221F=>0x8798,
+0x22BF=>0x8799,
+0x2235=>0x879A,
+0x2229=>0x879B,
+0x222A=>0x879C,
+0x4E9C=>0x889F,
+0x5516=>0x88A0,
+0x5A03=>0x88A1,
+0x963F=>0x88A2,
+0x54C0=>0x88A3,
+0x611B=>0x88A4,
+0x6328=>0x88A5,
+0x59F6=>0x88A6,
+0x9022=>0x88A7,
+0x8475=>0x88A8,
+0x831C=>0x88A9,
+0x7A50=>0x88AA,
+0x60AA=>0x88AB,
+0x63E1=>0x88AC,
+0x6E25=>0x88AD,
+0x65ED=>0x88AE,
+0x8466=>0x88AF,
+0x82A6=>0x88B0,
+0x9BF5=>0x88B1,
+0x6893=>0x88B2,
+0x5727=>0x88B3,
+0x65A1=>0x88B4,
+0x6271=>0x88B5,
+0x5B9B=>0x88B6,
+0x59D0=>0x88B7,
+0x867B=>0x88B8,
+0x98F4=>0x88B9,
+0x7D62=>0x88BA,
+0x7DBE=>0x88BB,
+0x9B8E=>0x88BC,
+0x6216=>0x88BD,
+0x7C9F=>0x88BE,
+0x88B7=>0x88BF,
+0x5B89=>0x88C0,
+0x5EB5=>0x88C1,
+0x6309=>0x88C2,
+0x6697=>0x88C3,
+0x6848=>0x88C4,
+0x95C7=>0x88C5,
+0x978D=>0x88C6,
+0x674F=>0x88C7,
+0x4EE5=>0x88C8,
+0x4F0A=>0x88C9,
+0x4F4D=>0x88CA,
+0x4F9D=>0x88CB,
+0x5049=>0x88CC,
+0x56F2=>0x88CD,
+0x5937=>0x88CE,
+0x59D4=>0x88CF,
+0x5A01=>0x88D0,
+0x5C09=>0x88D1,
+0x60DF=>0x88D2,
+0x610F=>0x88D3,
+0x6170=>0x88D4,
+0x6613=>0x88D5,
+0x6905=>0x88D6,
+0x70BA=>0x88D7,
+0x754F=>0x88D8,
+0x7570=>0x88D9,
+0x79FB=>0x88DA,
+0x7DAD=>0x88DB,
+0x7DEF=>0x88DC,
+0x80C3=>0x88DD,
+0x840E=>0x88DE,
+0x8863=>0x88DF,
+0x8B02=>0x88E0,
+0x9055=>0x88E1,
+0x907A=>0x88E2,
+0x533B=>0x88E3,
+0x4E95=>0x88E4,
+0x4EA5=>0x88E5,
+0x57DF=>0x88E6,
+0x80B2=>0x88E7,
+0x90C1=>0x88E8,
+0x78EF=>0x88E9,
+0x4E00=>0x88EA,
+0x58F1=>0x88EB,
+0x6EA2=>0x88EC,
+0x9038=>0x88ED,
+0x7A32=>0x88EE,
+0x8328=>0x88EF,
+0x828B=>0x88F0,
+0x9C2F=>0x88F1,
+0x5141=>0x88F2,
+0x5370=>0x88F3,
+0x54BD=>0x88F4,
+0x54E1=>0x88F5,
+0x56E0=>0x88F6,
+0x59FB=>0x88F7,
+0x5F15=>0x88F8,
+0x98F2=>0x88F9,
+0x6DEB=>0x88FA,
+0x80E4=>0x88FB,
+0x852D=>0x88FC,
+0x9662=>0x8940,
+0x9670=>0x8941,
+0x96A0=>0x8942,
+0x97FB=>0x8943,
+0x540B=>0x8944,
+0x53F3=>0x8945,
+0x5B87=>0x8946,
+0x70CF=>0x8947,
+0x7FBD=>0x8948,
+0x8FC2=>0x8949,
+0x96E8=>0x894A,
+0x536F=>0x894B,
+0x9D5C=>0x894C,
+0x7ABA=>0x894D,
+0x4E11=>0x894E,
+0x7893=>0x894F,
+0x81FC=>0x8950,
+0x6E26=>0x8951,
+0x5618=>0x8952,
+0x5504=>0x8953,
+0x6B1D=>0x8954,
+0x851A=>0x8955,
+0x9C3B=>0x8956,
+0x59E5=>0x8957,
+0x53A9=>0x8958,
+0x6D66=>0x8959,
+0x74DC=>0x895A,
+0x958F=>0x895B,
+0x5642=>0x895C,
+0x4E91=>0x895D,
+0x904B=>0x895E,
+0x96F2=>0x895F,
+0x834F=>0x8960,
+0x990C=>0x8961,
+0x53E1=>0x8962,
+0x55B6=>0x8963,
+0x5B30=>0x8964,
+0x5F71=>0x8965,
+0x6620=>0x8966,
+0x66F3=>0x8967,
+0x6804=>0x8968,
+0x6C38=>0x8969,
+0x6CF3=>0x896A,
+0x6D29=>0x896B,
+0x745B=>0x896C,
+0x76C8=>0x896D,
+0x7A4E=>0x896E,
+0x9834=>0x896F,
+0x82F1=>0x8970,
+0x885B=>0x8971,
+0x8A60=>0x8972,
+0x92ED=>0x8973,
+0x6DB2=>0x8974,
+0x75AB=>0x8975,
+0x76CA=>0x8976,
+0x99C5=>0x8977,
+0x60A6=>0x8978,
+0x8B01=>0x8979,
+0x8D8A=>0x897A,
+0x95B2=>0x897B,
+0x698E=>0x897C,
+0x53AD=>0x897D,
+0x5186=>0x897E,
+0x5712=>0x8980,
+0x5830=>0x8981,
+0x5944=>0x8982,
+0x5BB4=>0x8983,
+0x5EF6=>0x8984,
+0x6028=>0x8985,
+0x63A9=>0x8986,
+0x63F4=>0x8987,
+0x6CBF=>0x8988,
+0x6F14=>0x8989,
+0x708E=>0x898A,
+0x7114=>0x898B,
+0x7159=>0x898C,
+0x71D5=>0x898D,
+0x733F=>0x898E,
+0x7E01=>0x898F,
+0x8276=>0x8990,
+0x82D1=>0x8991,
+0x8597=>0x8992,
+0x9060=>0x8993,
+0x925B=>0x8994,
+0x9D1B=>0x8995,
+0x5869=>0x8996,
+0x65BC=>0x8997,
+0x6C5A=>0x8998,
+0x7525=>0x8999,
+0x51F9=>0x899A,
+0x592E=>0x899B,
+0x5965=>0x899C,
+0x5F80=>0x899D,
+0x5FDC=>0x899E,
+0x62BC=>0x899F,
+0x65FA=>0x89A0,
+0x6A2A=>0x89A1,
+0x6B27=>0x89A2,
+0x6BB4=>0x89A3,
+0x738B=>0x89A4,
+0x7FC1=>0x89A5,
+0x8956=>0x89A6,
+0x9D2C=>0x89A7,
+0x9D0E=>0x89A8,
+0x9EC4=>0x89A9,
+0x5CA1=>0x89AA,
+0x6C96=>0x89AB,
+0x837B=>0x89AC,
+0x5104=>0x89AD,
+0x5C4B=>0x89AE,
+0x61B6=>0x89AF,
+0x81C6=>0x89B0,
+0x6876=>0x89B1,
+0x7261=>0x89B2,
+0x4E59=>0x89B3,
+0x4FFA=>0x89B4,
+0x5378=>0x89B5,
+0x6069=>0x89B6,
+0x6E29=>0x89B7,
+0x7A4F=>0x89B8,
+0x97F3=>0x89B9,
+0x4E0B=>0x89BA,
+0x5316=>0x89BB,
+0x4EEE=>0x89BC,
+0x4F55=>0x89BD,
+0x4F3D=>0x89BE,
+0x4FA1=>0x89BF,
+0x4F73=>0x89C0,
+0x52A0=>0x89C1,
+0x53EF=>0x89C2,
+0x5609=>0x89C3,
+0x590F=>0x89C4,
+0x5AC1=>0x89C5,
+0x5BB6=>0x89C6,
+0x5BE1=>0x89C7,
+0x79D1=>0x89C8,
+0x6687=>0x89C9,
+0x679C=>0x89CA,
+0x67B6=>0x89CB,
+0x6B4C=>0x89CC,
+0x6CB3=>0x89CD,
+0x706B=>0x89CE,
+0x73C2=>0x89CF,
+0x798D=>0x89D0,
+0x79BE=>0x89D1,
+0x7A3C=>0x89D2,
+0x7B87=>0x89D3,
+0x82B1=>0x89D4,
+0x82DB=>0x89D5,
+0x8304=>0x89D6,
+0x8377=>0x89D7,
+0x83EF=>0x89D8,
+0x83D3=>0x89D9,
+0x8766=>0x89DA,
+0x8AB2=>0x89DB,
+0x5629=>0x89DC,
+0x8CA8=>0x89DD,
+0x8FE6=>0x89DE,
+0x904E=>0x89DF,
+0x971E=>0x89E0,
+0x868A=>0x89E1,
+0x4FC4=>0x89E2,
+0x5CE8=>0x89E3,
+0x6211=>0x89E4,
+0x7259=>0x89E5,
+0x753B=>0x89E6,
+0x81E5=>0x89E7,
+0x82BD=>0x89E8,
+0x86FE=>0x89E9,
+0x8CC0=>0x89EA,
+0x96C5=>0x89EB,
+0x9913=>0x89EC,
+0x99D5=>0x89ED,
+0x4ECB=>0x89EE,
+0x4F1A=>0x89EF,
+0x89E3=>0x89F0,
+0x56DE=>0x89F1,
+0x584A=>0x89F2,
+0x58CA=>0x89F3,
+0x5EFB=>0x89F4,
+0x5FEB=>0x89F5,
+0x602A=>0x89F6,
+0x6094=>0x89F7,
+0x6062=>0x89F8,
+0x61D0=>0x89F9,
+0x6212=>0x89FA,
+0x62D0=>0x89FB,
+0x6539=>0x89FC,
+0x9B41=>0x8A40,
+0x6666=>0x8A41,
+0x68B0=>0x8A42,
+0x6D77=>0x8A43,
+0x7070=>0x8A44,
+0x754C=>0x8A45,
+0x7686=>0x8A46,
+0x7D75=>0x8A47,
+0x82A5=>0x8A48,
+0x87F9=>0x8A49,
+0x958B=>0x8A4A,
+0x968E=>0x8A4B,
+0x8C9D=>0x8A4C,
+0x51F1=>0x8A4D,
+0x52BE=>0x8A4E,
+0x5916=>0x8A4F,
+0x54B3=>0x8A50,
+0x5BB3=>0x8A51,
+0x5D16=>0x8A52,
+0x6168=>0x8A53,
+0x6982=>0x8A54,
+0x6DAF=>0x8A55,
+0x788D=>0x8A56,
+0x84CB=>0x8A57,
+0x8857=>0x8A58,
+0x8A72=>0x8A59,
+0x93A7=>0x8A5A,
+0x9AB8=>0x8A5B,
+0x6D6C=>0x8A5C,
+0x99A8=>0x8A5D,
+0x86D9=>0x8A5E,
+0x57A3=>0x8A5F,
+0x67FF=>0x8A60,
+0x86CE=>0x8A61,
+0x920E=>0x8A62,
+0x5283=>0x8A63,
+0x5687=>0x8A64,
+0x5404=>0x8A65,
+0x5ED3=>0x8A66,
+0x62E1=>0x8A67,
+0x64B9=>0x8A68,
+0x683C=>0x8A69,
+0x6838=>0x8A6A,
+0x6BBB=>0x8A6B,
+0x7372=>0x8A6C,
+0x78BA=>0x8A6D,
+0x7A6B=>0x8A6E,
+0x899A=>0x8A6F,
+0x89D2=>0x8A70,
+0x8D6B=>0x8A71,
+0x8F03=>0x8A72,
+0x90ED=>0x8A73,
+0x95A3=>0x8A74,
+0x9694=>0x8A75,
+0x9769=>0x8A76,
+0x5B66=>0x8A77,
+0x5CB3=>0x8A78,
+0x697D=>0x8A79,
+0x984D=>0x8A7A,
+0x984E=>0x8A7B,
+0x639B=>0x8A7C,
+0x7B20=>0x8A7D,
+0x6A2B=>0x8A7E,
+0x6A7F=>0x8A80,
+0x68B6=>0x8A81,
+0x9C0D=>0x8A82,
+0x6F5F=>0x8A83,
+0x5272=>0x8A84,
+0x559D=>0x8A85,
+0x6070=>0x8A86,
+0x62EC=>0x8A87,
+0x6D3B=>0x8A88,
+0x6E07=>0x8A89,
+0x6ED1=>0x8A8A,
+0x845B=>0x8A8B,
+0x8910=>0x8A8C,
+0x8F44=>0x8A8D,
+0x4E14=>0x8A8E,
+0x9C39=>0x8A8F,
+0x53F6=>0x8A90,
+0x691B=>0x8A91,
+0x6A3A=>0x8A92,
+0x9784=>0x8A93,
+0x682A=>0x8A94,
+0x515C=>0x8A95,
+0x7AC3=>0x8A96,
+0x84B2=>0x8A97,
+0x91DC=>0x8A98,
+0x938C=>0x8A99,
+0x565B=>0x8A9A,
+0x9D28=>0x8A9B,
+0x6822=>0x8A9C,
+0x8305=>0x8A9D,
+0x8431=>0x8A9E,
+0x7CA5=>0x8A9F,
+0x5208=>0x8AA0,
+0x82C5=>0x8AA1,
+0x74E6=>0x8AA2,
+0x4E7E=>0x8AA3,
+0x4F83=>0x8AA4,
+0x51A0=>0x8AA5,
+0x5BD2=>0x8AA6,
+0x520A=>0x8AA7,
+0x52D8=>0x8AA8,
+0x52E7=>0x8AA9,
+0x5DFB=>0x8AAA,
+0x559A=>0x8AAB,
+0x582A=>0x8AAC,
+0x59E6=>0x8AAD,
+0x5B8C=>0x8AAE,
+0x5B98=>0x8AAF,
+0x5BDB=>0x8AB0,
+0x5E72=>0x8AB1,
+0x5E79=>0x8AB2,
+0x60A3=>0x8AB3,
+0x611F=>0x8AB4,
+0x6163=>0x8AB5,
+0x61BE=>0x8AB6,
+0x63DB=>0x8AB7,
+0x6562=>0x8AB8,
+0x67D1=>0x8AB9,
+0x6853=>0x8ABA,
+0x68FA=>0x8ABB,
+0x6B3E=>0x8ABC,
+0x6B53=>0x8ABD,
+0x6C57=>0x8ABE,
+0x6F22=>0x8ABF,
+0x6F97=>0x8AC0,
+0x6F45=>0x8AC1,
+0x74B0=>0x8AC2,
+0x7518=>0x8AC3,
+0x76E3=>0x8AC4,
+0x770B=>0x8AC5,
+0x7AFF=>0x8AC6,
+0x7BA1=>0x8AC7,
+0x7C21=>0x8AC8,
+0x7DE9=>0x8AC9,
+0x7F36=>0x8ACA,
+0x7FF0=>0x8ACB,
+0x809D=>0x8ACC,
+0x8266=>0x8ACD,
+0x839E=>0x8ACE,
+0x89B3=>0x8ACF,
+0x8ACC=>0x8AD0,
+0x8CAB=>0x8AD1,
+0x9084=>0x8AD2,
+0x9451=>0x8AD3,
+0x9593=>0x8AD4,
+0x9591=>0x8AD5,
+0x95A2=>0x8AD6,
+0x9665=>0x8AD7,
+0x97D3=>0x8AD8,
+0x9928=>0x8AD9,
+0x8218=>0x8ADA,
+0x4E38=>0x8ADB,
+0x542B=>0x8ADC,
+0x5CB8=>0x8ADD,
+0x5DCC=>0x8ADE,
+0x73A9=>0x8ADF,
+0x764C=>0x8AE0,
+0x773C=>0x8AE1,
+0x5CA9=>0x8AE2,
+0x7FEB=>0x8AE3,
+0x8D0B=>0x8AE4,
+0x96C1=>0x8AE5,
+0x9811=>0x8AE6,
+0x9854=>0x8AE7,
+0x9858=>0x8AE8,
+0x4F01=>0x8AE9,
+0x4F0E=>0x8AEA,
+0x5371=>0x8AEB,
+0x559C=>0x8AEC,
+0x5668=>0x8AED,
+0x57FA=>0x8AEE,
+0x5947=>0x8AEF,
+0x5B09=>0x8AF0,
+0x5BC4=>0x8AF1,
+0x5C90=>0x8AF2,
+0x5E0C=>0x8AF3,
+0x5E7E=>0x8AF4,
+0x5FCC=>0x8AF5,
+0x63EE=>0x8AF6,
+0x673A=>0x8AF7,
+0x65D7=>0x8AF8,
+0x65E2=>0x8AF9,
+0x671F=>0x8AFA,
+0x68CB=>0x8AFB,
+0x68C4=>0x8AFC,
+0x6A5F=>0x8B40,
+0x5E30=>0x8B41,
+0x6BC5=>0x8B42,
+0x6C17=>0x8B43,
+0x6C7D=>0x8B44,
+0x757F=>0x8B45,
+0x7948=>0x8B46,
+0x5B63=>0x8B47,
+0x7A00=>0x8B48,
+0x7D00=>0x8B49,
+0x5FBD=>0x8B4A,
+0x898F=>0x8B4B,
+0x8A18=>0x8B4C,
+0x8CB4=>0x8B4D,
+0x8D77=>0x8B4E,
+0x8ECC=>0x8B4F,
+0x8F1D=>0x8B50,
+0x98E2=>0x8B51,
+0x9A0E=>0x8B52,
+0x9B3C=>0x8B53,
+0x4E80=>0x8B54,
+0x507D=>0x8B55,
+0x5100=>0x8B56,
+0x5993=>0x8B57,
+0x5B9C=>0x8B58,
+0x622F=>0x8B59,
+0x6280=>0x8B5A,
+0x64EC=>0x8B5B,
+0x6B3A=>0x8B5C,
+0x72A0=>0x8B5D,
+0x7591=>0x8B5E,
+0x7947=>0x8B5F,
+0x7FA9=>0x8B60,
+0x87FB=>0x8B61,
+0x8ABC=>0x8B62,
+0x8B70=>0x8B63,
+0x63AC=>0x8B64,
+0x83CA=>0x8B65,
+0x97A0=>0x8B66,
+0x5409=>0x8B67,
+0x5403=>0x8B68,
+0x55AB=>0x8B69,
+0x6854=>0x8B6A,
+0x6A58=>0x8B6B,
+0x8A70=>0x8B6C,
+0x7827=>0x8B6D,
+0x6775=>0x8B6E,
+0x9ECD=>0x8B6F,
+0x5374=>0x8B70,
+0x5BA2=>0x8B71,
+0x811A=>0x8B72,
+0x8650=>0x8B73,
+0x9006=>0x8B74,
+0x4E18=>0x8B75,
+0x4E45=>0x8B76,
+0x4EC7=>0x8B77,
+0x4F11=>0x8B78,
+0x53CA=>0x8B79,
+0x5438=>0x8B7A,
+0x5BAE=>0x8B7B,
+0x5F13=>0x8B7C,
+0x6025=>0x8B7D,
+0x6551=>0x8B7E,
+0x673D=>0x8B80,
+0x6C42=>0x8B81,
+0x6C72=>0x8B82,
+0x6CE3=>0x8B83,
+0x7078=>0x8B84,
+0x7403=>0x8B85,
+0x7A76=>0x8B86,
+0x7AAE=>0x8B87,
+0x7B08=>0x8B88,
+0x7D1A=>0x8B89,
+0x7CFE=>0x8B8A,
+0x7D66=>0x8B8B,
+0x65E7=>0x8B8C,
+0x725B=>0x8B8D,
+0x53BB=>0x8B8E,
+0x5C45=>0x8B8F,
+0x5DE8=>0x8B90,
+0x62D2=>0x8B91,
+0x62E0=>0x8B92,
+0x6319=>0x8B93,
+0x6E20=>0x8B94,
+0x865A=>0x8B95,
+0x8A31=>0x8B96,
+0x8DDD=>0x8B97,
+0x92F8=>0x8B98,
+0x6F01=>0x8B99,
+0x79A6=>0x8B9A,
+0x9B5A=>0x8B9B,
+0x4EA8=>0x8B9C,
+0x4EAB=>0x8B9D,
+0x4EAC=>0x8B9E,
+0x4F9B=>0x8B9F,
+0x4FA0=>0x8BA0,
+0x50D1=>0x8BA1,
+0x5147=>0x8BA2,
+0x7AF6=>0x8BA3,
+0x5171=>0x8BA4,
+0x51F6=>0x8BA5,
+0x5354=>0x8BA6,
+0x5321=>0x8BA7,
+0x537F=>0x8BA8,
+0x53EB=>0x8BA9,
+0x55AC=>0x8BAA,
+0x5883=>0x8BAB,
+0x5CE1=>0x8BAC,
+0x5F37=>0x8BAD,
+0x5F4A=>0x8BAE,
+0x602F=>0x8BAF,
+0x6050=>0x8BB0,
+0x606D=>0x8BB1,
+0x631F=>0x8BB2,
+0x6559=>0x8BB3,
+0x6A4B=>0x8BB4,
+0x6CC1=>0x8BB5,
+0x72C2=>0x8BB6,
+0x72ED=>0x8BB7,
+0x77EF=>0x8BB8,
+0x80F8=>0x8BB9,
+0x8105=>0x8BBA,
+0x8208=>0x8BBB,
+0x854E=>0x8BBC,
+0x90F7=>0x8BBD,
+0x93E1=>0x8BBE,
+0x97FF=>0x8BBF,
+0x9957=>0x8BC0,
+0x9A5A=>0x8BC1,
+0x4EF0=>0x8BC2,
+0x51DD=>0x8BC3,
+0x5C2D=>0x8BC4,
+0x6681=>0x8BC5,
+0x696D=>0x8BC6,
+0x5C40=>0x8BC7,
+0x66F2=>0x8BC8,
+0x6975=>0x8BC9,
+0x7389=>0x8BCA,
+0x6850=>0x8BCB,
+0x7C81=>0x8BCC,
+0x50C5=>0x8BCD,
+0x52E4=>0x8BCE,
+0x5747=>0x8BCF,
+0x5DFE=>0x8BD0,
+0x9326=>0x8BD1,
+0x65A4=>0x8BD2,
+0x6B23=>0x8BD3,
+0x6B3D=>0x8BD4,
+0x7434=>0x8BD5,
+0x7981=>0x8BD6,
+0x79BD=>0x8BD7,
+0x7B4B=>0x8BD8,
+0x7DCA=>0x8BD9,
+0x82B9=>0x8BDA,
+0x83CC=>0x8BDB,
+0x887F=>0x8BDC,
+0x895F=>0x8BDD,
+0x8B39=>0x8BDE,
+0x8FD1=>0x8BDF,
+0x91D1=>0x8BE0,
+0x541F=>0x8BE1,
+0x9280=>0x8BE2,
+0x4E5D=>0x8BE3,
+0x5036=>0x8BE4,
+0x53E5=>0x8BE5,
+0x533A=>0x8BE6,
+0x72D7=>0x8BE7,
+0x7396=>0x8BE8,
+0x77E9=>0x8BE9,
+0x82E6=>0x8BEA,
+0x8EAF=>0x8BEB,
+0x99C6=>0x8BEC,
+0x99C8=>0x8BED,
+0x99D2=>0x8BEE,
+0x5177=>0x8BEF,
+0x611A=>0x8BF0,
+0x865E=>0x8BF1,
+0x55B0=>0x8BF2,
+0x7A7A=>0x8BF3,
+0x5076=>0x8BF4,
+0x5BD3=>0x8BF5,
+0x9047=>0x8BF6,
+0x9685=>0x8BF7,
+0x4E32=>0x8BF8,
+0x6ADB=>0x8BF9,
+0x91E7=>0x8BFA,
+0x5C51=>0x8BFB,
+0x5C48=>0x8BFC,
+0x6398=>0x8C40,
+0x7A9F=>0x8C41,
+0x6C93=>0x8C42,
+0x9774=>0x8C43,
+0x8F61=>0x8C44,
+0x7AAA=>0x8C45,
+0x718A=>0x8C46,
+0x9688=>0x8C47,
+0x7C82=>0x8C48,
+0x6817=>0x8C49,
+0x7E70=>0x8C4A,
+0x6851=>0x8C4B,
+0x936C=>0x8C4C,
+0x52F2=>0x8C4D,
+0x541B=>0x8C4E,
+0x85AB=>0x8C4F,
+0x8A13=>0x8C50,
+0x7FA4=>0x8C51,
+0x8ECD=>0x8C52,
+0x90E1=>0x8C53,
+0x5366=>0x8C54,
+0x8888=>0x8C55,
+0x7941=>0x8C56,
+0x4FC2=>0x8C57,
+0x50BE=>0x8C58,
+0x5211=>0x8C59,
+0x5144=>0x8C5A,
+0x5553=>0x8C5B,
+0x572D=>0x8C5C,
+0x73EA=>0x8C5D,
+0x578B=>0x8C5E,
+0x5951=>0x8C5F,
+0x5F62=>0x8C60,
+0x5F84=>0x8C61,
+0x6075=>0x8C62,
+0x6176=>0x8C63,
+0x6167=>0x8C64,
+0x61A9=>0x8C65,
+0x63B2=>0x8C66,
+0x643A=>0x8C67,
+0x656C=>0x8C68,
+0x666F=>0x8C69,
+0x6842=>0x8C6A,
+0x6E13=>0x8C6B,
+0x7566=>0x8C6C,
+0x7A3D=>0x8C6D,
+0x7CFB=>0x8C6E,
+0x7D4C=>0x8C6F,
+0x7D99=>0x8C70,
+0x7E4B=>0x8C71,
+0x7F6B=>0x8C72,
+0x830E=>0x8C73,
+0x834A=>0x8C74,
+0x86CD=>0x8C75,
+0x8A08=>0x8C76,
+0x8A63=>0x8C77,
+0x8B66=>0x8C78,
+0x8EFD=>0x8C79,
+0x981A=>0x8C7A,
+0x9D8F=>0x8C7B,
+0x82B8=>0x8C7C,
+0x8FCE=>0x8C7D,
+0x9BE8=>0x8C7E,
+0x5287=>0x8C80,
+0x621F=>0x8C81,
+0x6483=>0x8C82,
+0x6FC0=>0x8C83,
+0x9699=>0x8C84,
+0x6841=>0x8C85,
+0x5091=>0x8C86,
+0x6B20=>0x8C87,
+0x6C7A=>0x8C88,
+0x6F54=>0x8C89,
+0x7A74=>0x8C8A,
+0x7D50=>0x8C8B,
+0x8840=>0x8C8C,
+0x8A23=>0x8C8D,
+0x6708=>0x8C8E,
+0x4EF6=>0x8C8F,
+0x5039=>0x8C90,
+0x5026=>0x8C91,
+0x5065=>0x8C92,
+0x517C=>0x8C93,
+0x5238=>0x8C94,
+0x5263=>0x8C95,
+0x55A7=>0x8C96,
+0x570F=>0x8C97,
+0x5805=>0x8C98,
+0x5ACC=>0x8C99,
+0x5EFA=>0x8C9A,
+0x61B2=>0x8C9B,
+0x61F8=>0x8C9C,
+0x62F3=>0x8C9D,
+0x6372=>0x8C9E,
+0x691C=>0x8C9F,
+0x6A29=>0x8CA0,
+0x727D=>0x8CA1,
+0x72AC=>0x8CA2,
+0x732E=>0x8CA3,
+0x7814=>0x8CA4,
+0x786F=>0x8CA5,
+0x7D79=>0x8CA6,
+0x770C=>0x8CA7,
+0x80A9=>0x8CA8,
+0x898B=>0x8CA9,
+0x8B19=>0x8CAA,
+0x8CE2=>0x8CAB,
+0x8ED2=>0x8CAC,
+0x9063=>0x8CAD,
+0x9375=>0x8CAE,
+0x967A=>0x8CAF,
+0x9855=>0x8CB0,
+0x9A13=>0x8CB1,
+0x9E78=>0x8CB2,
+0x5143=>0x8CB3,
+0x539F=>0x8CB4,
+0x53B3=>0x8CB5,
+0x5E7B=>0x8CB6,
+0x5F26=>0x8CB7,
+0x6E1B=>0x8CB8,
+0x6E90=>0x8CB9,
+0x7384=>0x8CBA,
+0x73FE=>0x8CBB,
+0x7D43=>0x8CBC,
+0x8237=>0x8CBD,
+0x8A00=>0x8CBE,
+0x8AFA=>0x8CBF,
+0x9650=>0x8CC0,
+0x4E4E=>0x8CC1,
+0x500B=>0x8CC2,
+0x53E4=>0x8CC3,
+0x547C=>0x8CC4,
+0x56FA=>0x8CC5,
+0x59D1=>0x8CC6,
+0x5B64=>0x8CC7,
+0x5DF1=>0x8CC8,
+0x5EAB=>0x8CC9,
+0x5F27=>0x8CCA,
+0x6238=>0x8CCB,
+0x6545=>0x8CCC,
+0x67AF=>0x8CCD,
+0x6E56=>0x8CCE,
+0x72D0=>0x8CCF,
+0x7CCA=>0x8CD0,
+0x88B4=>0x8CD1,
+0x80A1=>0x8CD2,
+0x80E1=>0x8CD3,
+0x83F0=>0x8CD4,
+0x864E=>0x8CD5,
+0x8A87=>0x8CD6,
+0x8DE8=>0x8CD7,
+0x9237=>0x8CD8,
+0x96C7=>0x8CD9,
+0x9867=>0x8CDA,
+0x9F13=>0x8CDB,
+0x4E94=>0x8CDC,
+0x4E92=>0x8CDD,
+0x4F0D=>0x8CDE,
+0x5348=>0x8CDF,
+0x5449=>0x8CE0,
+0x543E=>0x8CE1,
+0x5A2F=>0x8CE2,
+0x5F8C=>0x8CE3,
+0x5FA1=>0x8CE4,
+0x609F=>0x8CE5,
+0x68A7=>0x8CE6,
+0x6A8E=>0x8CE7,
+0x745A=>0x8CE8,
+0x7881=>0x8CE9,
+0x8A9E=>0x8CEA,
+0x8AA4=>0x8CEB,
+0x8B77=>0x8CEC,
+0x9190=>0x8CED,
+0x4E5E=>0x8CEE,
+0x9BC9=>0x8CEF,
+0x4EA4=>0x8CF0,
+0x4F7C=>0x8CF1,
+0x4FAF=>0x8CF2,
+0x5019=>0x8CF3,
+0x5016=>0x8CF4,
+0x5149=>0x8CF5,
+0x516C=>0x8CF6,
+0x529F=>0x8CF7,
+0x52B9=>0x8CF8,
+0x52FE=>0x8CF9,
+0x539A=>0x8CFA,
+0x53E3=>0x8CFB,
+0x5411=>0x8CFC,
+0x540E=>0x8D40,
+0x5589=>0x8D41,
+0x5751=>0x8D42,
+0x57A2=>0x8D43,
+0x597D=>0x8D44,
+0x5B54=>0x8D45,
+0x5B5D=>0x8D46,
+0x5B8F=>0x8D47,
+0x5DE5=>0x8D48,
+0x5DE7=>0x8D49,
+0x5DF7=>0x8D4A,
+0x5E78=>0x8D4B,
+0x5E83=>0x8D4C,
+0x5E9A=>0x8D4D,
+0x5EB7=>0x8D4E,
+0x5F18=>0x8D4F,
+0x6052=>0x8D50,
+0x614C=>0x8D51,
+0x6297=>0x8D52,
+0x62D8=>0x8D53,
+0x63A7=>0x8D54,
+0x653B=>0x8D55,
+0x6602=>0x8D56,
+0x6643=>0x8D57,
+0x66F4=>0x8D58,
+0x676D=>0x8D59,
+0x6821=>0x8D5A,
+0x6897=>0x8D5B,
+0x69CB=>0x8D5C,
+0x6C5F=>0x8D5D,
+0x6D2A=>0x8D5E,
+0x6D69=>0x8D5F,
+0x6E2F=>0x8D60,
+0x6E9D=>0x8D61,
+0x7532=>0x8D62,
+0x7687=>0x8D63,
+0x786C=>0x8D64,
+0x7A3F=>0x8D65,
+0x7CE0=>0x8D66,
+0x7D05=>0x8D67,
+0x7D18=>0x8D68,
+0x7D5E=>0x8D69,
+0x7DB1=>0x8D6A,
+0x8015=>0x8D6B,
+0x8003=>0x8D6C,
+0x80AF=>0x8D6D,
+0x80B1=>0x8D6E,
+0x8154=>0x8D6F,
+0x818F=>0x8D70,
+0x822A=>0x8D71,
+0x8352=>0x8D72,
+0x884C=>0x8D73,
+0x8861=>0x8D74,
+0x8B1B=>0x8D75,
+0x8CA2=>0x8D76,
+0x8CFC=>0x8D77,
+0x90CA=>0x8D78,
+0x9175=>0x8D79,
+0x9271=>0x8D7A,
+0x783F=>0x8D7B,
+0x92FC=>0x8D7C,
+0x95A4=>0x8D7D,
+0x964D=>0x8D7E,
+0x9805=>0x8D80,
+0x9999=>0x8D81,
+0x9AD8=>0x8D82,
+0x9D3B=>0x8D83,
+0x525B=>0x8D84,
+0x52AB=>0x8D85,
+0x53F7=>0x8D86,
+0x5408=>0x8D87,
+0x58D5=>0x8D88,
+0x62F7=>0x8D89,
+0x6FE0=>0x8D8A,
+0x8C6A=>0x8D8B,
+0x8F5F=>0x8D8C,
+0x9EB9=>0x8D8D,
+0x514B=>0x8D8E,
+0x523B=>0x8D8F,
+0x544A=>0x8D90,
+0x56FD=>0x8D91,
+0x7A40=>0x8D92,
+0x9177=>0x8D93,
+0x9D60=>0x8D94,
+0x9ED2=>0x8D95,
+0x7344=>0x8D96,
+0x6F09=>0x8D97,
+0x8170=>0x8D98,
+0x7511=>0x8D99,
+0x5FFD=>0x8D9A,
+0x60DA=>0x8D9B,
+0x9AA8=>0x8D9C,
+0x72DB=>0x8D9D,
+0x8FBC=>0x8D9E,
+0x6B64=>0x8D9F,
+0x9803=>0x8DA0,
+0x4ECA=>0x8DA1,
+0x56F0=>0x8DA2,
+0x5764=>0x8DA3,
+0x58BE=>0x8DA4,
+0x5A5A=>0x8DA5,
+0x6068=>0x8DA6,
+0x61C7=>0x8DA7,
+0x660F=>0x8DA8,
+0x6606=>0x8DA9,
+0x6839=>0x8DAA,
+0x68B1=>0x8DAB,
+0x6DF7=>0x8DAC,
+0x75D5=>0x8DAD,
+0x7D3A=>0x8DAE,
+0x826E=>0x8DAF,
+0x9B42=>0x8DB0,
+0x4E9B=>0x8DB1,
+0x4F50=>0x8DB2,
+0x53C9=>0x8DB3,
+0x5506=>0x8DB4,
+0x5D6F=>0x8DB5,
+0x5DE6=>0x8DB6,
+0x5DEE=>0x8DB7,
+0x67FB=>0x8DB8,
+0x6C99=>0x8DB9,
+0x7473=>0x8DBA,
+0x7802=>0x8DBB,
+0x8A50=>0x8DBC,
+0x9396=>0x8DBD,
+0x88DF=>0x8DBE,
+0x5750=>0x8DBF,
+0x5EA7=>0x8DC0,
+0x632B=>0x8DC1,
+0x50B5=>0x8DC2,
+0x50AC=>0x8DC3,
+0x518D=>0x8DC4,
+0x6700=>0x8DC5,
+0x54C9=>0x8DC6,
+0x585E=>0x8DC7,
+0x59BB=>0x8DC8,
+0x5BB0=>0x8DC9,
+0x5F69=>0x8DCA,
+0x624D=>0x8DCB,
+0x63A1=>0x8DCC,
+0x683D=>0x8DCD,
+0x6B73=>0x8DCE,
+0x6E08=>0x8DCF,
+0x707D=>0x8DD0,
+0x91C7=>0x8DD1,
+0x7280=>0x8DD2,
+0x7815=>0x8DD3,
+0x7826=>0x8DD4,
+0x796D=>0x8DD5,
+0x658E=>0x8DD6,
+0x7D30=>0x8DD7,
+0x83DC=>0x8DD8,
+0x88C1=>0x8DD9,
+0x8F09=>0x8DDA,
+0x969B=>0x8DDB,
+0x5264=>0x8DDC,
+0x5728=>0x8DDD,
+0x6750=>0x8DDE,
+0x7F6A=>0x8DDF,
+0x8CA1=>0x8DE0,
+0x51B4=>0x8DE1,
+0x5742=>0x8DE2,
+0x962A=>0x8DE3,
+0x583A=>0x8DE4,
+0x698A=>0x8DE5,
+0x80B4=>0x8DE6,
+0x54B2=>0x8DE7,
+0x5D0E=>0x8DE8,
+0x57FC=>0x8DE9,
+0x7895=>0x8DEA,
+0x9DFA=>0x8DEB,
+0x4F5C=>0x8DEC,
+0x524A=>0x8DED,
+0x548B=>0x8DEE,
+0x643E=>0x8DEF,
+0x6628=>0x8DF0,
+0x6714=>0x8DF1,
+0x67F5=>0x8DF2,
+0x7A84=>0x8DF3,
+0x7B56=>0x8DF4,
+0x7D22=>0x8DF5,
+0x932F=>0x8DF6,
+0x685C=>0x8DF7,
+0x9BAD=>0x8DF8,
+0x7B39=>0x8DF9,
+0x5319=>0x8DFA,
+0x518A=>0x8DFB,
+0x5237=>0x8DFC,
+0x5BDF=>0x8E40,
+0x62F6=>0x8E41,
+0x64AE=>0x8E42,
+0x64E6=>0x8E43,
+0x672D=>0x8E44,
+0x6BBA=>0x8E45,
+0x85A9=>0x8E46,
+0x96D1=>0x8E47,
+0x7690=>0x8E48,
+0x9BD6=>0x8E49,
+0x634C=>0x8E4A,
+0x9306=>0x8E4B,
+0x9BAB=>0x8E4C,
+0x76BF=>0x8E4D,
+0x6652=>0x8E4E,
+0x4E09=>0x8E4F,
+0x5098=>0x8E50,
+0x53C2=>0x8E51,
+0x5C71=>0x8E52,
+0x60E8=>0x8E53,
+0x6492=>0x8E54,
+0x6563=>0x8E55,
+0x685F=>0x8E56,
+0x71E6=>0x8E57,
+0x73CA=>0x8E58,
+0x7523=>0x8E59,
+0x7B97=>0x8E5A,
+0x7E82=>0x8E5B,
+0x8695=>0x8E5C,
+0x8B83=>0x8E5D,
+0x8CDB=>0x8E5E,
+0x9178=>0x8E5F,
+0x9910=>0x8E60,
+0x65AC=>0x8E61,
+0x66AB=>0x8E62,
+0x6B8B=>0x8E63,
+0x4ED5=>0x8E64,
+0x4ED4=>0x8E65,
+0x4F3A=>0x8E66,
+0x4F7F=>0x8E67,
+0x523A=>0x8E68,
+0x53F8=>0x8E69,
+0x53F2=>0x8E6A,
+0x55E3=>0x8E6B,
+0x56DB=>0x8E6C,
+0x58EB=>0x8E6D,
+0x59CB=>0x8E6E,
+0x59C9=>0x8E6F,
+0x59FF=>0x8E70,
+0x5B50=>0x8E71,
+0x5C4D=>0x8E72,
+0x5E02=>0x8E73,
+0x5E2B=>0x8E74,
+0x5FD7=>0x8E75,
+0x601D=>0x8E76,
+0x6307=>0x8E77,
+0x652F=>0x8E78,
+0x5B5C=>0x8E79,
+0x65AF=>0x8E7A,
+0x65BD=>0x8E7B,
+0x65E8=>0x8E7C,
+0x679D=>0x8E7D,
+0x6B62=>0x8E7E,
+0x6B7B=>0x8E80,
+0x6C0F=>0x8E81,
+0x7345=>0x8E82,
+0x7949=>0x8E83,
+0x79C1=>0x8E84,
+0x7CF8=>0x8E85,
+0x7D19=>0x8E86,
+0x7D2B=>0x8E87,
+0x80A2=>0x8E88,
+0x8102=>0x8E89,
+0x81F3=>0x8E8A,
+0x8996=>0x8E8B,
+0x8A5E=>0x8E8C,
+0x8A69=>0x8E8D,
+0x8A66=>0x8E8E,
+0x8A8C=>0x8E8F,
+0x8AEE=>0x8E90,
+0x8CC7=>0x8E91,
+0x8CDC=>0x8E92,
+0x96CC=>0x8E93,
+0x98FC=>0x8E94,
+0x6B6F=>0x8E95,
+0x4E8B=>0x8E96,
+0x4F3C=>0x8E97,
+0x4F8D=>0x8E98,
+0x5150=>0x8E99,
+0x5B57=>0x8E9A,
+0x5BFA=>0x8E9B,
+0x6148=>0x8E9C,
+0x6301=>0x8E9D,
+0x6642=>0x8E9E,
+0x6B21=>0x8E9F,
+0x6ECB=>0x8EA0,
+0x6CBB=>0x8EA1,
+0x723E=>0x8EA2,
+0x74BD=>0x8EA3,
+0x75D4=>0x8EA4,
+0x78C1=>0x8EA5,
+0x793A=>0x8EA6,
+0x800C=>0x8EA7,
+0x8033=>0x8EA8,
+0x81EA=>0x8EA9,
+0x8494=>0x8EAA,
+0x8F9E=>0x8EAB,
+0x6C50=>0x8EAC,
+0x9E7F=>0x8EAD,
+0x5F0F=>0x8EAE,
+0x8B58=>0x8EAF,
+0x9D2B=>0x8EB0,
+0x7AFA=>0x8EB1,
+0x8EF8=>0x8EB2,
+0x5B8D=>0x8EB3,
+0x96EB=>0x8EB4,
+0x4E03=>0x8EB5,
+0x53F1=>0x8EB6,
+0x57F7=>0x8EB7,
+0x5931=>0x8EB8,
+0x5AC9=>0x8EB9,
+0x5BA4=>0x8EBA,
+0x6089=>0x8EBB,
+0x6E7F=>0x8EBC,
+0x6F06=>0x8EBD,
+0x75BE=>0x8EBE,
+0x8CEA=>0x8EBF,
+0x5B9F=>0x8EC0,
+0x8500=>0x8EC1,
+0x7BE0=>0x8EC2,
+0x5072=>0x8EC3,
+0x67F4=>0x8EC4,
+0x829D=>0x8EC5,
+0x5C61=>0x8EC6,
+0x854A=>0x8EC7,
+0x7E1E=>0x8EC8,
+0x820E=>0x8EC9,
+0x5199=>0x8ECA,
+0x5C04=>0x8ECB,
+0x6368=>0x8ECC,
+0x8D66=>0x8ECD,
+0x659C=>0x8ECE,
+0x716E=>0x8ECF,
+0x793E=>0x8ED0,
+0x7D17=>0x8ED1,
+0x8005=>0x8ED2,
+0x8B1D=>0x8ED3,
+0x8ECA=>0x8ED4,
+0x906E=>0x8ED5,
+0x86C7=>0x8ED6,
+0x90AA=>0x8ED7,
+0x501F=>0x8ED8,
+0x52FA=>0x8ED9,
+0x5C3A=>0x8EDA,
+0x6753=>0x8EDB,
+0x707C=>0x8EDC,
+0x7235=>0x8EDD,
+0x914C=>0x8EDE,
+0x91C8=>0x8EDF,
+0x932B=>0x8EE0,
+0x82E5=>0x8EE1,
+0x5BC2=>0x8EE2,
+0x5F31=>0x8EE3,
+0x60F9=>0x8EE4,
+0x4E3B=>0x8EE5,
+0x53D6=>0x8EE6,
+0x5B88=>0x8EE7,
+0x624B=>0x8EE8,
+0x6731=>0x8EE9,
+0x6B8A=>0x8EEA,
+0x72E9=>0x8EEB,
+0x73E0=>0x8EEC,
+0x7A2E=>0x8EED,
+0x816B=>0x8EEE,
+0x8DA3=>0x8EEF,
+0x9152=>0x8EF0,
+0x9996=>0x8EF1,
+0x5112=>0x8EF2,
+0x53D7=>0x8EF3,
+0x546A=>0x8EF4,
+0x5BFF=>0x8EF5,
+0x6388=>0x8EF6,
+0x6A39=>0x8EF7,
+0x7DAC=>0x8EF8,
+0x9700=>0x8EF9,
+0x56DA=>0x8EFA,
+0x53CE=>0x8EFB,
+0x5468=>0x8EFC,
+0x5B97=>0x8F40,
+0x5C31=>0x8F41,
+0x5DDE=>0x8F42,
+0x4FEE=>0x8F43,
+0x6101=>0x8F44,
+0x62FE=>0x8F45,
+0x6D32=>0x8F46,
+0x79C0=>0x8F47,
+0x79CB=>0x8F48,
+0x7D42=>0x8F49,
+0x7E4D=>0x8F4A,
+0x7FD2=>0x8F4B,
+0x81ED=>0x8F4C,
+0x821F=>0x8F4D,
+0x8490=>0x8F4E,
+0x8846=>0x8F4F,
+0x8972=>0x8F50,
+0x8B90=>0x8F51,
+0x8E74=>0x8F52,
+0x8F2F=>0x8F53,
+0x9031=>0x8F54,
+0x914B=>0x8F55,
+0x916C=>0x8F56,
+0x96C6=>0x8F57,
+0x919C=>0x8F58,
+0x4EC0=>0x8F59,
+0x4F4F=>0x8F5A,
+0x5145=>0x8F5B,
+0x5341=>0x8F5C,
+0x5F93=>0x8F5D,
+0x620E=>0x8F5E,
+0x67D4=>0x8F5F,
+0x6C41=>0x8F60,
+0x6E0B=>0x8F61,
+0x7363=>0x8F62,
+0x7E26=>0x8F63,
+0x91CD=>0x8F64,
+0x9283=>0x8F65,
+0x53D4=>0x8F66,
+0x5919=>0x8F67,
+0x5BBF=>0x8F68,
+0x6DD1=>0x8F69,
+0x795D=>0x8F6A,
+0x7E2E=>0x8F6B,
+0x7C9B=>0x8F6C,
+0x587E=>0x8F6D,
+0x719F=>0x8F6E,
+0x51FA=>0x8F6F,
+0x8853=>0x8F70,
+0x8FF0=>0x8F71,
+0x4FCA=>0x8F72,
+0x5CFB=>0x8F73,
+0x6625=>0x8F74,
+0x77AC=>0x8F75,
+0x7AE3=>0x8F76,
+0x821C=>0x8F77,
+0x99FF=>0x8F78,
+0x51C6=>0x8F79,
+0x5FAA=>0x8F7A,
+0x65EC=>0x8F7B,
+0x696F=>0x8F7C,
+0x6B89=>0x8F7D,
+0x6DF3=>0x8F7E,
+0x6E96=>0x8F80,
+0x6F64=>0x8F81,
+0x76FE=>0x8F82,
+0x7D14=>0x8F83,
+0x5DE1=>0x8F84,
+0x9075=>0x8F85,
+0x9187=>0x8F86,
+0x9806=>0x8F87,
+0x51E6=>0x8F88,
+0x521D=>0x8F89,
+0x6240=>0x8F8A,
+0x6691=>0x8F8B,
+0x66D9=>0x8F8C,
+0x6E1A=>0x8F8D,
+0x5EB6=>0x8F8E,
+0x7DD2=>0x8F8F,
+0x7F72=>0x8F90,
+0x66F8=>0x8F91,
+0x85AF=>0x8F92,
+0x85F7=>0x8F93,
+0x8AF8=>0x8F94,
+0x52A9=>0x8F95,
+0x53D9=>0x8F96,
+0x5973=>0x8F97,
+0x5E8F=>0x8F98,
+0x5F90=>0x8F99,
+0x6055=>0x8F9A,
+0x92E4=>0x8F9B,
+0x9664=>0x8F9C,
+0x50B7=>0x8F9D,
+0x511F=>0x8F9E,
+0x52DD=>0x8F9F,
+0x5320=>0x8FA0,
+0x5347=>0x8FA1,
+0x53EC=>0x8FA2,
+0x54E8=>0x8FA3,
+0x5546=>0x8FA4,
+0x5531=>0x8FA5,
+0x5617=>0x8FA6,
+0x5968=>0x8FA7,
+0x59BE=>0x8FA8,
+0x5A3C=>0x8FA9,
+0x5BB5=>0x8FAA,
+0x5C06=>0x8FAB,
+0x5C0F=>0x8FAC,
+0x5C11=>0x8FAD,
+0x5C1A=>0x8FAE,
+0x5E84=>0x8FAF,
+0x5E8A=>0x8FB0,
+0x5EE0=>0x8FB1,
+0x5F70=>0x8FB2,
+0x627F=>0x8FB3,
+0x6284=>0x8FB4,
+0x62DB=>0x8FB5,
+0x638C=>0x8FB6,
+0x6377=>0x8FB7,
+0x6607=>0x8FB8,
+0x660C=>0x8FB9,
+0x662D=>0x8FBA,
+0x6676=>0x8FBB,
+0x677E=>0x8FBC,
+0x68A2=>0x8FBD,
+0x6A1F=>0x8FBE,
+0x6A35=>0x8FBF,
+0x6CBC=>0x8FC0,
+0x6D88=>0x8FC1,
+0x6E09=>0x8FC2,
+0x6E58=>0x8FC3,
+0x713C=>0x8FC4,
+0x7126=>0x8FC5,
+0x7167=>0x8FC6,
+0x75C7=>0x8FC7,
+0x7701=>0x8FC8,
+0x785D=>0x8FC9,
+0x7901=>0x8FCA,
+0x7965=>0x8FCB,
+0x79F0=>0x8FCC,
+0x7AE0=>0x8FCD,
+0x7B11=>0x8FCE,
+0x7CA7=>0x8FCF,
+0x7D39=>0x8FD0,
+0x8096=>0x8FD1,
+0x83D6=>0x8FD2,
+0x848B=>0x8FD3,
+0x8549=>0x8FD4,
+0x885D=>0x8FD5,
+0x88F3=>0x8FD6,
+0x8A1F=>0x8FD7,
+0x8A3C=>0x8FD8,
+0x8A54=>0x8FD9,
+0x8A73=>0x8FDA,
+0x8C61=>0x8FDB,
+0x8CDE=>0x8FDC,
+0x91A4=>0x8FDD,
+0x9266=>0x8FDE,
+0x937E=>0x8FDF,
+0x9418=>0x8FE0,
+0x969C=>0x8FE1,
+0x9798=>0x8FE2,
+0x4E0A=>0x8FE3,
+0x4E08=>0x8FE4,
+0x4E1E=>0x8FE5,
+0x4E57=>0x8FE6,
+0x5197=>0x8FE7,
+0x5270=>0x8FE8,
+0x57CE=>0x8FE9,
+0x5834=>0x8FEA,
+0x58CC=>0x8FEB,
+0x5B22=>0x8FEC,
+0x5E38=>0x8FED,
+0x60C5=>0x8FEE,
+0x64FE=>0x8FEF,
+0x6761=>0x8FF0,
+0x6756=>0x8FF1,
+0x6D44=>0x8FF2,
+0x72B6=>0x8FF3,
+0x7573=>0x8FF4,
+0x7A63=>0x8FF5,
+0x84B8=>0x8FF6,
+0x8B72=>0x8FF7,
+0x91B8=>0x8FF8,
+0x9320=>0x8FF9,
+0x5631=>0x8FFA,
+0x57F4=>0x8FFB,
+0x98FE=>0x8FFC,
+0x62ED=>0x9040,
+0x690D=>0x9041,
+0x6B96=>0x9042,
+0x71ED=>0x9043,
+0x7E54=>0x9044,
+0x8077=>0x9045,
+0x8272=>0x9046,
+0x89E6=>0x9047,
+0x98DF=>0x9048,
+0x8755=>0x9049,
+0x8FB1=>0x904A,
+0x5C3B=>0x904B,
+0x4F38=>0x904C,
+0x4FE1=>0x904D,
+0x4FB5=>0x904E,
+0x5507=>0x904F,
+0x5A20=>0x9050,
+0x5BDD=>0x9051,
+0x5BE9=>0x9052,
+0x5FC3=>0x9053,
+0x614E=>0x9054,
+0x632F=>0x9055,
+0x65B0=>0x9056,
+0x664B=>0x9057,
+0x68EE=>0x9058,
+0x699B=>0x9059,
+0x6D78=>0x905A,
+0x6DF1=>0x905B,
+0x7533=>0x905C,
+0x75B9=>0x905D,
+0x771F=>0x905E,
+0x795E=>0x905F,
+0x79E6=>0x9060,
+0x7D33=>0x9061,
+0x81E3=>0x9062,
+0x82AF=>0x9063,
+0x85AA=>0x9064,
+0x89AA=>0x9065,
+0x8A3A=>0x9066,
+0x8EAB=>0x9067,
+0x8F9B=>0x9068,
+0x9032=>0x9069,
+0x91DD=>0x906A,
+0x9707=>0x906B,
+0x4EBA=>0x906C,
+0x4EC1=>0x906D,
+0x5203=>0x906E,
+0x5875=>0x906F,
+0x58EC=>0x9070,
+0x5C0B=>0x9071,
+0x751A=>0x9072,
+0x5C3D=>0x9073,
+0x814E=>0x9074,
+0x8A0A=>0x9075,
+0x8FC5=>0x9076,
+0x9663=>0x9077,
+0x976D=>0x9078,
+0x7B25=>0x9079,
+0x8ACF=>0x907A,
+0x9808=>0x907B,
+0x9162=>0x907C,
+0x56F3=>0x907D,
+0x53A8=>0x907E,
+0x9017=>0x9080,
+0x5439=>0x9081,
+0x5782=>0x9082,
+0x5E25=>0x9083,
+0x63A8=>0x9084,
+0x6C34=>0x9085,
+0x708A=>0x9086,
+0x7761=>0x9087,
+0x7C8B=>0x9088,
+0x7FE0=>0x9089,
+0x8870=>0x908A,
+0x9042=>0x908B,
+0x9154=>0x908C,
+0x9310=>0x908D,
+0x9318=>0x908E,
+0x968F=>0x908F,
+0x745E=>0x9090,
+0x9AC4=>0x9091,
+0x5D07=>0x9092,
+0x5D69=>0x9093,
+0x6570=>0x9094,
+0x67A2=>0x9095,
+0x8DA8=>0x9096,
+0x96DB=>0x9097,
+0x636E=>0x9098,
+0x6749=>0x9099,
+0x6919=>0x909A,
+0x83C5=>0x909B,
+0x9817=>0x909C,
+0x96C0=>0x909D,
+0x88FE=>0x909E,
+0x6F84=>0x909F,
+0x647A=>0x90A0,
+0x5BF8=>0x90A1,
+0x4E16=>0x90A2,
+0x702C=>0x90A3,
+0x755D=>0x90A4,
+0x662F=>0x90A5,
+0x51C4=>0x90A6,
+0x5236=>0x90A7,
+0x52E2=>0x90A8,
+0x59D3=>0x90A9,
+0x5F81=>0x90AA,
+0x6027=>0x90AB,
+0x6210=>0x90AC,
+0x653F=>0x90AD,
+0x6574=>0x90AE,
+0x661F=>0x90AF,
+0x6674=>0x90B0,
+0x68F2=>0x90B1,
+0x6816=>0x90B2,
+0x6B63=>0x90B3,
+0x6E05=>0x90B4,
+0x7272=>0x90B5,
+0x751F=>0x90B6,
+0x76DB=>0x90B7,
+0x7CBE=>0x90B8,
+0x8056=>0x90B9,
+0x58F0=>0x90BA,
+0x88FD=>0x90BB,
+0x897F=>0x90BC,
+0x8AA0=>0x90BD,
+0x8A93=>0x90BE,
+0x8ACB=>0x90BF,
+0x901D=>0x90C0,
+0x9192=>0x90C1,
+0x9752=>0x90C2,
+0x9759=>0x90C3,
+0x6589=>0x90C4,
+0x7A0E=>0x90C5,
+0x8106=>0x90C6,
+0x96BB=>0x90C7,
+0x5E2D=>0x90C8,
+0x60DC=>0x90C9,
+0x621A=>0x90CA,
+0x65A5=>0x90CB,
+0x6614=>0x90CC,
+0x6790=>0x90CD,
+0x77F3=>0x90CE,
+0x7A4D=>0x90CF,
+0x7C4D=>0x90D0,
+0x7E3E=>0x90D1,
+0x810A=>0x90D2,
+0x8CAC=>0x90D3,
+0x8D64=>0x90D4,
+0x8DE1=>0x90D5,
+0x8E5F=>0x90D6,
+0x78A9=>0x90D7,
+0x5207=>0x90D8,
+0x62D9=>0x90D9,
+0x63A5=>0x90DA,
+0x6442=>0x90DB,
+0x6298=>0x90DC,
+0x8A2D=>0x90DD,
+0x7A83=>0x90DE,
+0x7BC0=>0x90DF,
+0x8AAC=>0x90E0,
+0x96EA=>0x90E1,
+0x7D76=>0x90E2,
+0x820C=>0x90E3,
+0x8749=>0x90E4,
+0x4ED9=>0x90E5,
+0x5148=>0x90E6,
+0x5343=>0x90E7,
+0x5360=>0x90E8,
+0x5BA3=>0x90E9,
+0x5C02=>0x90EA,
+0x5C16=>0x90EB,
+0x5DDD=>0x90EC,
+0x6226=>0x90ED,
+0x6247=>0x90EE,
+0x64B0=>0x90EF,
+0x6813=>0x90F0,
+0x6834=>0x90F1,
+0x6CC9=>0x90F2,
+0x6D45=>0x90F3,
+0x6D17=>0x90F4,
+0x67D3=>0x90F5,
+0x6F5C=>0x90F6,
+0x714E=>0x90F7,
+0x717D=>0x90F8,
+0x65CB=>0x90F9,
+0x7A7F=>0x90FA,
+0x7BAD=>0x90FB,
+0x7DDA=>0x90FC,
+0x7E4A=>0x9140,
+0x7FA8=>0x9141,
+0x817A=>0x9142,
+0x821B=>0x9143,
+0x8239=>0x9144,
+0x85A6=>0x9145,
+0x8A6E=>0x9146,
+0x8CCE=>0x9147,
+0x8DF5=>0x9148,
+0x9078=>0x9149,
+0x9077=>0x914A,
+0x92AD=>0x914B,
+0x9291=>0x914C,
+0x9583=>0x914D,
+0x9BAE=>0x914E,
+0x524D=>0x914F,
+0x5584=>0x9150,
+0x6F38=>0x9151,
+0x7136=>0x9152,
+0x5168=>0x9153,
+0x7985=>0x9154,
+0x7E55=>0x9155,
+0x81B3=>0x9156,
+0x7CCE=>0x9157,
+0x564C=>0x9158,
+0x5851=>0x9159,
+0x5CA8=>0x915A,
+0x63AA=>0x915B,
+0x66FE=>0x915C,
+0x66FD=>0x915D,
+0x695A=>0x915E,
+0x72D9=>0x915F,
+0x758F=>0x9160,
+0x758E=>0x9161,
+0x790E=>0x9162,
+0x7956=>0x9163,
+0x79DF=>0x9164,
+0x7C97=>0x9165,
+0x7D20=>0x9166,
+0x7D44=>0x9167,
+0x8607=>0x9168,
+0x8A34=>0x9169,
+0x963B=>0x916A,
+0x9061=>0x916B,
+0x9F20=>0x916C,
+0x50E7=>0x916D,
+0x5275=>0x916E,
+0x53CC=>0x916F,
+0x53E2=>0x9170,
+0x5009=>0x9171,
+0x55AA=>0x9172,
+0x58EE=>0x9173,
+0x594F=>0x9174,
+0x723D=>0x9175,
+0x5B8B=>0x9176,
+0x5C64=>0x9177,
+0x531D=>0x9178,
+0x60E3=>0x9179,
+0x60F3=>0x917A,
+0x635C=>0x917B,
+0x6383=>0x917C,
+0x633F=>0x917D,
+0x63BB=>0x917E,
+0x64CD=>0x9180,
+0x65E9=>0x9181,
+0x66F9=>0x9182,
+0x5DE3=>0x9183,
+0x69CD=>0x9184,
+0x69FD=>0x9185,
+0x6F15=>0x9186,
+0x71E5=>0x9187,
+0x4E89=>0x9188,
+0x75E9=>0x9189,
+0x76F8=>0x918A,
+0x7A93=>0x918B,
+0x7CDF=>0x918C,
+0x7DCF=>0x918D,
+0x7D9C=>0x918E,
+0x8061=>0x918F,
+0x8349=>0x9190,
+0x8358=>0x9191,
+0x846C=>0x9192,
+0x84BC=>0x9193,
+0x85FB=>0x9194,
+0x88C5=>0x9195,
+0x8D70=>0x9196,
+0x9001=>0x9197,
+0x906D=>0x9198,
+0x9397=>0x9199,
+0x971C=>0x919A,
+0x9A12=>0x919B,
+0x50CF=>0x919C,
+0x5897=>0x919D,
+0x618E=>0x919E,
+0x81D3=>0x919F,
+0x8535=>0x91A0,
+0x8D08=>0x91A1,
+0x9020=>0x91A2,
+0x4FC3=>0x91A3,
+0x5074=>0x91A4,
+0x5247=>0x91A5,
+0x5373=>0x91A6,
+0x606F=>0x91A7,
+0x6349=>0x91A8,
+0x675F=>0x91A9,
+0x6E2C=>0x91AA,
+0x8DB3=>0x91AB,
+0x901F=>0x91AC,
+0x4FD7=>0x91AD,
+0x5C5E=>0x91AE,
+0x8CCA=>0x91AF,
+0x65CF=>0x91B0,
+0x7D9A=>0x91B1,
+0x5352=>0x91B2,
+0x8896=>0x91B3,
+0x5176=>0x91B4,
+0x63C3=>0x91B5,
+0x5B58=>0x91B6,
+0x5B6B=>0x91B7,
+0x5C0A=>0x91B8,
+0x640D=>0x91B9,
+0x6751=>0x91BA,
+0x905C=>0x91BB,
+0x4ED6=>0x91BC,
+0x591A=>0x91BD,
+0x592A=>0x91BE,
+0x6C70=>0x91BF,
+0x8A51=>0x91C0,
+0x553E=>0x91C1,
+0x5815=>0x91C2,
+0x59A5=>0x91C3,
+0x60F0=>0x91C4,
+0x6253=>0x91C5,
+0x67C1=>0x91C6,
+0x8235=>0x91C7,
+0x6955=>0x91C8,
+0x9640=>0x91C9,
+0x99C4=>0x91CA,
+0x9A28=>0x91CB,
+0x4F53=>0x91CC,
+0x5806=>0x91CD,
+0x5BFE=>0x91CE,
+0x8010=>0x91CF,
+0x5CB1=>0x91D0,
+0x5E2F=>0x91D1,
+0x5F85=>0x91D2,
+0x6020=>0x91D3,
+0x614B=>0x91D4,
+0x6234=>0x91D5,
+0x66FF=>0x91D6,
+0x6CF0=>0x91D7,
+0x6EDE=>0x91D8,
+0x80CE=>0x91D9,
+0x817F=>0x91DA,
+0x82D4=>0x91DB,
+0x888B=>0x91DC,
+0x8CB8=>0x91DD,
+0x9000=>0x91DE,
+0x902E=>0x91DF,
+0x968A=>0x91E0,
+0x9EDB=>0x91E1,
+0x9BDB=>0x91E2,
+0x4EE3=>0x91E3,
+0x53F0=>0x91E4,
+0x5927=>0x91E5,
+0x7B2C=>0x91E6,
+0x918D=>0x91E7,
+0x984C=>0x91E8,
+0x9DF9=>0x91E9,
+0x6EDD=>0x91EA,
+0x7027=>0x91EB,
+0x5353=>0x91EC,
+0x5544=>0x91ED,
+0x5B85=>0x91EE,
+0x6258=>0x91EF,
+0x629E=>0x91F0,
+0x62D3=>0x91F1,
+0x6CA2=>0x91F2,
+0x6FEF=>0x91F3,
+0x7422=>0x91F4,
+0x8A17=>0x91F5,
+0x9438=>0x91F6,
+0x6FC1=>0x91F7,
+0x8AFE=>0x91F8,
+0x8338=>0x91F9,
+0x51E7=>0x91FA,
+0x86F8=>0x91FB,
+0x53EA=>0x91FC,
+0x53E9=>0x9240,
+0x4F46=>0x9241,
+0x9054=>0x9242,
+0x8FB0=>0x9243,
+0x596A=>0x9244,
+0x8131=>0x9245,
+0x5DFD=>0x9246,
+0x7AEA=>0x9247,
+0x8FBF=>0x9248,
+0x68DA=>0x9249,
+0x8C37=>0x924A,
+0x72F8=>0x924B,
+0x9C48=>0x924C,
+0x6A3D=>0x924D,
+0x8AB0=>0x924E,
+0x4E39=>0x924F,
+0x5358=>0x9250,
+0x5606=>0x9251,
+0x5766=>0x9252,
+0x62C5=>0x9253,
+0x63A2=>0x9254,
+0x65E6=>0x9255,
+0x6B4E=>0x9256,
+0x6DE1=>0x9257,
+0x6E5B=>0x9258,
+0x70AD=>0x9259,
+0x77ED=>0x925A,
+0x7AEF=>0x925B,
+0x7BAA=>0x925C,
+0x7DBB=>0x925D,
+0x803D=>0x925E,
+0x80C6=>0x925F,
+0x86CB=>0x9260,
+0x8A95=>0x9261,
+0x935B=>0x9262,
+0x56E3=>0x9263,
+0x58C7=>0x9264,
+0x5F3E=>0x9265,
+0x65AD=>0x9266,
+0x6696=>0x9267,
+0x6A80=>0x9268,
+0x6BB5=>0x9269,
+0x7537=>0x926A,
+0x8AC7=>0x926B,
+0x5024=>0x926C,
+0x77E5=>0x926D,
+0x5730=>0x926E,
+0x5F1B=>0x926F,
+0x6065=>0x9270,
+0x667A=>0x9271,
+0x6C60=>0x9272,
+0x75F4=>0x9273,
+0x7A1A=>0x9274,
+0x7F6E=>0x9275,
+0x81F4=>0x9276,
+0x8718=>0x9277,
+0x9045=>0x9278,
+0x99B3=>0x9279,
+0x7BC9=>0x927A,
+0x755C=>0x927B,
+0x7AF9=>0x927C,
+0x7B51=>0x927D,
+0x84C4=>0x927E,
+0x9010=>0x9280,
+0x79E9=>0x9281,
+0x7A92=>0x9282,
+0x8336=>0x9283,
+0x5AE1=>0x9284,
+0x7740=>0x9285,
+0x4E2D=>0x9286,
+0x4EF2=>0x9287,
+0x5B99=>0x9288,
+0x5FE0=>0x9289,
+0x62BD=>0x928A,
+0x663C=>0x928B,
+0x67F1=>0x928C,
+0x6CE8=>0x928D,
+0x866B=>0x928E,
+0x8877=>0x928F,
+0x8A3B=>0x9290,
+0x914E=>0x9291,
+0x92F3=>0x9292,
+0x99D0=>0x9293,
+0x6A17=>0x9294,
+0x7026=>0x9295,
+0x732A=>0x9296,
+0x82E7=>0x9297,
+0x8457=>0x9298,
+0x8CAF=>0x9299,
+0x4E01=>0x929A,
+0x5146=>0x929B,
+0x51CB=>0x929C,
+0x558B=>0x929D,
+0x5BF5=>0x929E,
+0x5E16=>0x929F,
+0x5E33=>0x92A0,
+0x5E81=>0x92A1,
+0x5F14=>0x92A2,
+0x5F35=>0x92A3,
+0x5F6B=>0x92A4,
+0x5FB4=>0x92A5,
+0x61F2=>0x92A6,
+0x6311=>0x92A7,
+0x66A2=>0x92A8,
+0x671D=>0x92A9,
+0x6F6E=>0x92AA,
+0x7252=>0x92AB,
+0x753A=>0x92AC,
+0x773A=>0x92AD,
+0x8074=>0x92AE,
+0x8139=>0x92AF,
+0x8178=>0x92B0,
+0x8776=>0x92B1,
+0x8ABF=>0x92B2,
+0x8ADC=>0x92B3,
+0x8D85=>0x92B4,
+0x8DF3=>0x92B5,
+0x929A=>0x92B6,
+0x9577=>0x92B7,
+0x9802=>0x92B8,
+0x9CE5=>0x92B9,
+0x52C5=>0x92BA,
+0x6357=>0x92BB,
+0x76F4=>0x92BC,
+0x6715=>0x92BD,
+0x6C88=>0x92BE,
+0x73CD=>0x92BF,
+0x8CC3=>0x92C0,
+0x93AE=>0x92C1,
+0x9673=>0x92C2,
+0x6D25=>0x92C3,
+0x589C=>0x92C4,
+0x690E=>0x92C5,
+0x69CC=>0x92C6,
+0x8FFD=>0x92C7,
+0x939A=>0x92C8,
+0x75DB=>0x92C9,
+0x901A=>0x92CA,
+0x585A=>0x92CB,
+0x6802=>0x92CC,
+0x63B4=>0x92CD,
+0x69FB=>0x92CE,
+0x4F43=>0x92CF,
+0x6F2C=>0x92D0,
+0x67D8=>0x92D1,
+0x8FBB=>0x92D2,
+0x8526=>0x92D3,
+0x7DB4=>0x92D4,
+0x9354=>0x92D5,
+0x693F=>0x92D6,
+0x6F70=>0x92D7,
+0x576A=>0x92D8,
+0x58F7=>0x92D9,
+0x5B2C=>0x92DA,
+0x7D2C=>0x92DB,
+0x722A=>0x92DC,
+0x540A=>0x92DD,
+0x91E3=>0x92DE,
+0x9DB4=>0x92DF,
+0x4EAD=>0x92E0,
+0x4F4E=>0x92E1,
+0x505C=>0x92E2,
+0x5075=>0x92E3,
+0x5243=>0x92E4,
+0x8C9E=>0x92E5,
+0x5448=>0x92E6,
+0x5824=>0x92E7,
+0x5B9A=>0x92E8,
+0x5E1D=>0x92E9,
+0x5E95=>0x92EA,
+0x5EAD=>0x92EB,
+0x5EF7=>0x92EC,
+0x5F1F=>0x92ED,
+0x608C=>0x92EE,
+0x62B5=>0x92EF,
+0x633A=>0x92F0,
+0x63D0=>0x92F1,
+0x68AF=>0x92F2,
+0x6C40=>0x92F3,
+0x7887=>0x92F4,
+0x798E=>0x92F5,
+0x7A0B=>0x92F6,
+0x7DE0=>0x92F7,
+0x8247=>0x92F8,
+0x8A02=>0x92F9,
+0x8AE6=>0x92FA,
+0x8E44=>0x92FB,
+0x9013=>0x92FC,
+0x90B8=>0x9340,
+0x912D=>0x9341,
+0x91D8=>0x9342,
+0x9F0E=>0x9343,
+0x6CE5=>0x9344,
+0x6458=>0x9345,
+0x64E2=>0x9346,
+0x6575=>0x9347,
+0x6EF4=>0x9348,
+0x7684=>0x9349,
+0x7B1B=>0x934A,
+0x9069=>0x934B,
+0x93D1=>0x934C,
+0x6EBA=>0x934D,
+0x54F2=>0x934E,
+0x5FB9=>0x934F,
+0x64A4=>0x9350,
+0x8F4D=>0x9351,
+0x8FED=>0x9352,
+0x9244=>0x9353,
+0x5178=>0x9354,
+0x586B=>0x9355,
+0x5929=>0x9356,
+0x5C55=>0x9357,
+0x5E97=>0x9358,
+0x6DFB=>0x9359,
+0x7E8F=>0x935A,
+0x751C=>0x935B,
+0x8CBC=>0x935C,
+0x8EE2=>0x935D,
+0x985B=>0x935E,
+0x70B9=>0x935F,
+0x4F1D=>0x9360,
+0x6BBF=>0x9361,
+0x6FB1=>0x9362,
+0x7530=>0x9363,
+0x96FB=>0x9364,
+0x514E=>0x9365,
+0x5410=>0x9366,
+0x5835=>0x9367,
+0x5857=>0x9368,
+0x59AC=>0x9369,
+0x5C60=>0x936A,
+0x5F92=>0x936B,
+0x6597=>0x936C,
+0x675C=>0x936D,
+0x6E21=>0x936E,
+0x767B=>0x936F,
+0x83DF=>0x9370,
+0x8CED=>0x9371,
+0x9014=>0x9372,
+0x90FD=>0x9373,
+0x934D=>0x9374,
+0x7825=>0x9375,
+0x783A=>0x9376,
+0x52AA=>0x9377,
+0x5EA6=>0x9378,
+0x571F=>0x9379,
+0x5974=>0x937A,
+0x6012=>0x937B,
+0x5012=>0x937C,
+0x515A=>0x937D,
+0x51AC=>0x937E,
+0x51CD=>0x9380,
+0x5200=>0x9381,
+0x5510=>0x9382,
+0x5854=>0x9383,
+0x5858=>0x9384,
+0x5957=>0x9385,
+0x5B95=>0x9386,
+0x5CF6=>0x9387,
+0x5D8B=>0x9388,
+0x60BC=>0x9389,
+0x6295=>0x938A,
+0x642D=>0x938B,
+0x6771=>0x938C,
+0x6843=>0x938D,
+0x68BC=>0x938E,
+0x68DF=>0x938F,
+0x76D7=>0x9390,
+0x6DD8=>0x9391,
+0x6E6F=>0x9392,
+0x6D9B=>0x9393,
+0x706F=>0x9394,
+0x71C8=>0x9395,
+0x5F53=>0x9396,
+0x75D8=>0x9397,
+0x7977=>0x9398,
+0x7B49=>0x9399,
+0x7B54=>0x939A,
+0x7B52=>0x939B,
+0x7CD6=>0x939C,
+0x7D71=>0x939D,
+0x5230=>0x939E,
+0x8463=>0x939F,
+0x8569=>0x93A0,
+0x85E4=>0x93A1,
+0x8A0E=>0x93A2,
+0x8B04=>0x93A3,
+0x8C46=>0x93A4,
+0x8E0F=>0x93A5,
+0x9003=>0x93A6,
+0x900F=>0x93A7,
+0x9419=>0x93A8,
+0x9676=>0x93A9,
+0x982D=>0x93AA,
+0x9A30=>0x93AB,
+0x95D8=>0x93AC,
+0x50CD=>0x93AD,
+0x52D5=>0x93AE,
+0x540C=>0x93AF,
+0x5802=>0x93B0,
+0x5C0E=>0x93B1,
+0x61A7=>0x93B2,
+0x649E=>0x93B3,
+0x6D1E=>0x93B4,
+0x77B3=>0x93B5,
+0x7AE5=>0x93B6,
+0x80F4=>0x93B7,
+0x8404=>0x93B8,
+0x9053=>0x93B9,
+0x9285=>0x93BA,
+0x5CE0=>0x93BB,
+0x9D07=>0x93BC,
+0x533F=>0x93BD,
+0x5F97=>0x93BE,
+0x5FB3=>0x93BF,
+0x6D9C=>0x93C0,
+0x7279=>0x93C1,
+0x7763=>0x93C2,
+0x79BF=>0x93C3,
+0x7BE4=>0x93C4,
+0x6BD2=>0x93C5,
+0x72EC=>0x93C6,
+0x8AAD=>0x93C7,
+0x6803=>0x93C8,
+0x6A61=>0x93C9,
+0x51F8=>0x93CA,
+0x7A81=>0x93CB,
+0x6934=>0x93CC,
+0x5C4A=>0x93CD,
+0x9CF6=>0x93CE,
+0x82EB=>0x93CF,
+0x5BC5=>0x93D0,
+0x9149=>0x93D1,
+0x701E=>0x93D2,
+0x5678=>0x93D3,
+0x5C6F=>0x93D4,
+0x60C7=>0x93D5,
+0x6566=>0x93D6,
+0x6C8C=>0x93D7,
+0x8C5A=>0x93D8,
+0x9041=>0x93D9,
+0x9813=>0x93DA,
+0x5451=>0x93DB,
+0x66C7=>0x93DC,
+0x920D=>0x93DD,
+0x5948=>0x93DE,
+0x90A3=>0x93DF,
+0x5185=>0x93E0,
+0x4E4D=>0x93E1,
+0x51EA=>0x93E2,
+0x8599=>0x93E3,
+0x8B0E=>0x93E4,
+0x7058=>0x93E5,
+0x637A=>0x93E6,
+0x934B=>0x93E7,
+0x6962=>0x93E8,
+0x99B4=>0x93E9,
+0x7E04=>0x93EA,
+0x7577=>0x93EB,
+0x5357=>0x93EC,
+0x6960=>0x93ED,
+0x8EDF=>0x93EE,
+0x96E3=>0x93EF,
+0x6C5D=>0x93F0,
+0x4E8C=>0x93F1,
+0x5C3C=>0x93F2,
+0x5F10=>0x93F3,
+0x8FE9=>0x93F4,
+0x5302=>0x93F5,
+0x8CD1=>0x93F6,
+0x8089=>0x93F7,
+0x8679=>0x93F8,
+0x5EFF=>0x93F9,
+0x65E5=>0x93FA,
+0x4E73=>0x93FB,
+0x5165=>0x93FC,
+0x5982=>0x9440,
+0x5C3F=>0x9441,
+0x97EE=>0x9442,
+0x4EFB=>0x9443,
+0x598A=>0x9444,
+0x5FCD=>0x9445,
+0x8A8D=>0x9446,
+0x6FE1=>0x9447,
+0x79B0=>0x9448,
+0x7962=>0x9449,
+0x5BE7=>0x944A,
+0x8471=>0x944B,
+0x732B=>0x944C,
+0x71B1=>0x944D,
+0x5E74=>0x944E,
+0x5FF5=>0x944F,
+0x637B=>0x9450,
+0x649A=>0x9451,
+0x71C3=>0x9452,
+0x7C98=>0x9453,
+0x4E43=>0x9454,
+0x5EFC=>0x9455,
+0x4E4B=>0x9456,
+0x57DC=>0x9457,
+0x56A2=>0x9458,
+0x60A9=>0x9459,
+0x6FC3=>0x945A,
+0x7D0D=>0x945B,
+0x80FD=>0x945C,
+0x8133=>0x945D,
+0x81BF=>0x945E,
+0x8FB2=>0x945F,
+0x8997=>0x9460,
+0x86A4=>0x9461,
+0x5DF4=>0x9462,
+0x628A=>0x9463,
+0x64AD=>0x9464,
+0x8987=>0x9465,
+0x6777=>0x9466,
+0x6CE2=>0x9467,
+0x6D3E=>0x9468,
+0x7436=>0x9469,
+0x7834=>0x946A,
+0x5A46=>0x946B,
+0x7F75=>0x946C,
+0x82AD=>0x946D,
+0x99AC=>0x946E,
+0x4FF3=>0x946F,
+0x5EC3=>0x9470,
+0x62DD=>0x9471,
+0x6392=>0x9472,
+0x6557=>0x9473,
+0x676F=>0x9474,
+0x76C3=>0x9475,
+0x724C=>0x9476,
+0x80CC=>0x9477,
+0x80BA=>0x9478,
+0x8F29=>0x9479,
+0x914D=>0x947A,
+0x500D=>0x947B,
+0x57F9=>0x947C,
+0x5A92=>0x947D,
+0x6885=>0x947E,
+0x6973=>0x9480,
+0x7164=>0x9481,
+0x72FD=>0x9482,
+0x8CB7=>0x9483,
+0x58F2=>0x9484,
+0x8CE0=>0x9485,
+0x966A=>0x9486,
+0x9019=>0x9487,
+0x877F=>0x9488,
+0x79E4=>0x9489,
+0x77E7=>0x948A,
+0x8429=>0x948B,
+0x4F2F=>0x948C,
+0x5265=>0x948D,
+0x535A=>0x948E,
+0x62CD=>0x948F,
+0x67CF=>0x9490,
+0x6CCA=>0x9491,
+0x767D=>0x9492,
+0x7B94=>0x9493,
+0x7C95=>0x9494,
+0x8236=>0x9495,
+0x8584=>0x9496,
+0x8FEB=>0x9497,
+0x66DD=>0x9498,
+0x6F20=>0x9499,
+0x7206=>0x949A,
+0x7E1B=>0x949B,
+0x83AB=>0x949C,
+0x99C1=>0x949D,
+0x9EA6=>0x949E,
+0x51FD=>0x949F,
+0x7BB1=>0x94A0,
+0x7872=>0x94A1,
+0x7BB8=>0x94A2,
+0x8087=>0x94A3,
+0x7B48=>0x94A4,
+0x6AE8=>0x94A5,
+0x5E61=>0x94A6,
+0x808C=>0x94A7,
+0x7551=>0x94A8,
+0x7560=>0x94A9,
+0x516B=>0x94AA,
+0x9262=>0x94AB,
+0x6E8C=>0x94AC,
+0x767A=>0x94AD,
+0x9197=>0x94AE,
+0x9AEA=>0x94AF,
+0x4F10=>0x94B0,
+0x7F70=>0x94B1,
+0x629C=>0x94B2,
+0x7B4F=>0x94B3,
+0x95A5=>0x94B4,
+0x9CE9=>0x94B5,
+0x567A=>0x94B6,
+0x5859=>0x94B7,
+0x86E4=>0x94B8,
+0x96BC=>0x94B9,
+0x4F34=>0x94BA,
+0x5224=>0x94BB,
+0x534A=>0x94BC,
+0x53CD=>0x94BD,
+0x53DB=>0x94BE,
+0x5E06=>0x94BF,
+0x642C=>0x94C0,
+0x6591=>0x94C1,
+0x677F=>0x94C2,
+0x6C3E=>0x94C3,
+0x6C4E=>0x94C4,
+0x7248=>0x94C5,
+0x72AF=>0x94C6,
+0x73ED=>0x94C7,
+0x7554=>0x94C8,
+0x7E41=>0x94C9,
+0x822C=>0x94CA,
+0x85E9=>0x94CB,
+0x8CA9=>0x94CC,
+0x7BC4=>0x94CD,
+0x91C6=>0x94CE,
+0x7169=>0x94CF,
+0x9812=>0x94D0,
+0x98EF=>0x94D1,
+0x633D=>0x94D2,
+0x6669=>0x94D3,
+0x756A=>0x94D4,
+0x76E4=>0x94D5,
+0x78D0=>0x94D6,
+0x8543=>0x94D7,
+0x86EE=>0x94D8,
+0x532A=>0x94D9,
+0x5351=>0x94DA,
+0x5426=>0x94DB,
+0x5983=>0x94DC,
+0x5E87=>0x94DD,
+0x5F7C=>0x94DE,
+0x60B2=>0x94DF,
+0x6249=>0x94E0,
+0x6279=>0x94E1,
+0x62AB=>0x94E2,
+0x6590=>0x94E3,
+0x6BD4=>0x94E4,
+0x6CCC=>0x94E5,
+0x75B2=>0x94E6,
+0x76AE=>0x94E7,
+0x7891=>0x94E8,
+0x79D8=>0x94E9,
+0x7DCB=>0x94EA,
+0x7F77=>0x94EB,
+0x80A5=>0x94EC,
+0x88AB=>0x94ED,
+0x8AB9=>0x94EE,
+0x8CBB=>0x94EF,
+0x907F=>0x94F0,
+0x975E=>0x94F1,
+0x98DB=>0x94F2,
+0x6A0B=>0x94F3,
+0x7C38=>0x94F4,
+0x5099=>0x94F5,
+0x5C3E=>0x94F6,
+0x5FAE=>0x94F7,
+0x6787=>0x94F8,
+0x6BD8=>0x94F9,
+0x7435=>0x94FA,
+0x7709=>0x94FB,
+0x7F8E=>0x94FC,
+0x9F3B=>0x9540,
+0x67CA=>0x9541,
+0x7A17=>0x9542,
+0x5339=>0x9543,
+0x758B=>0x9544,
+0x9AED=>0x9545,
+0x5F66=>0x9546,
+0x819D=>0x9547,
+0x83F1=>0x9548,
+0x8098=>0x9549,
+0x5F3C=>0x954A,
+0x5FC5=>0x954B,
+0x7562=>0x954C,
+0x7B46=>0x954D,
+0x903C=>0x954E,
+0x6867=>0x954F,
+0x59EB=>0x9550,
+0x5A9B=>0x9551,
+0x7D10=>0x9552,
+0x767E=>0x9553,
+0x8B2C=>0x9554,
+0x4FF5=>0x9555,
+0x5F6A=>0x9556,
+0x6A19=>0x9557,
+0x6C37=>0x9558,
+0x6F02=>0x9559,
+0x74E2=>0x955A,
+0x7968=>0x955B,
+0x8868=>0x955C,
+0x8A55=>0x955D,
+0x8C79=>0x955E,
+0x5EDF=>0x955F,
+0x63CF=>0x9560,
+0x75C5=>0x9561,
+0x79D2=>0x9562,
+0x82D7=>0x9563,
+0x9328=>0x9564,
+0x92F2=>0x9565,
+0x849C=>0x9566,
+0x86ED=>0x9567,
+0x9C2D=>0x9568,
+0x54C1=>0x9569,
+0x5F6C=>0x956A,
+0x658C=>0x956B,
+0x6D5C=>0x956C,
+0x7015=>0x956D,
+0x8CA7=>0x956E,
+0x8CD3=>0x956F,
+0x983B=>0x9570,
+0x654F=>0x9571,
+0x74F6=>0x9572,
+0x4E0D=>0x9573,
+0x4ED8=>0x9574,
+0x57E0=>0x9575,
+0x592B=>0x9576,
+0x5A66=>0x9577,
+0x5BCC=>0x9578,
+0x51A8=>0x9579,
+0x5E03=>0x957A,
+0x5E9C=>0x957B,
+0x6016=>0x957C,
+0x6276=>0x957D,
+0x6577=>0x957E,
+0x65A7=>0x9580,
+0x666E=>0x9581,
+0x6D6E=>0x9582,
+0x7236=>0x9583,
+0x7B26=>0x9584,
+0x8150=>0x9585,
+0x819A=>0x9586,
+0x8299=>0x9587,
+0x8B5C=>0x9588,
+0x8CA0=>0x9589,
+0x8CE6=>0x958A,
+0x8D74=>0x958B,
+0x961C=>0x958C,
+0x9644=>0x958D,
+0x4FAE=>0x958E,
+0x64AB=>0x958F,
+0x6B66=>0x9590,
+0x821E=>0x9591,
+0x8461=>0x9592,
+0x856A=>0x9593,
+0x90E8=>0x9594,
+0x5C01=>0x9595,
+0x6953=>0x9596,
+0x98A8=>0x9597,
+0x847A=>0x9598,
+0x8557=>0x9599,
+0x4F0F=>0x959A,
+0x526F=>0x959B,
+0x5FA9=>0x959C,
+0x5E45=>0x959D,
+0x670D=>0x959E,
+0x798F=>0x959F,
+0x8179=>0x95A0,
+0x8907=>0x95A1,
+0x8986=>0x95A2,
+0x6DF5=>0x95A3,
+0x5F17=>0x95A4,
+0x6255=>0x95A5,
+0x6CB8=>0x95A6,
+0x4ECF=>0x95A7,
+0x7269=>0x95A8,
+0x9B92=>0x95A9,
+0x5206=>0x95AA,
+0x543B=>0x95AB,
+0x5674=>0x95AC,
+0x58B3=>0x95AD,
+0x61A4=>0x95AE,
+0x626E=>0x95AF,
+0x711A=>0x95B0,
+0x596E=>0x95B1,
+0x7C89=>0x95B2,
+0x7CDE=>0x95B3,
+0x7D1B=>0x95B4,
+0x96F0=>0x95B5,
+0x6587=>0x95B6,
+0x805E=>0x95B7,
+0x4E19=>0x95B8,
+0x4F75=>0x95B9,
+0x5175=>0x95BA,
+0x5840=>0x95BB,
+0x5E63=>0x95BC,
+0x5E73=>0x95BD,
+0x5F0A=>0x95BE,
+0x67C4=>0x95BF,
+0x4E26=>0x95C0,
+0x853D=>0x95C1,
+0x9589=>0x95C2,
+0x965B=>0x95C3,
+0x7C73=>0x95C4,
+0x9801=>0x95C5,
+0x50FB=>0x95C6,
+0x58C1=>0x95C7,
+0x7656=>0x95C8,
+0x78A7=>0x95C9,
+0x5225=>0x95CA,
+0x77A5=>0x95CB,
+0x8511=>0x95CC,
+0x7B86=>0x95CD,
+0x504F=>0x95CE,
+0x5909=>0x95CF,
+0x7247=>0x95D0,
+0x7BC7=>0x95D1,
+0x7DE8=>0x95D2,
+0x8FBA=>0x95D3,
+0x8FD4=>0x95D4,
+0x904D=>0x95D5,
+0x4FBF=>0x95D6,
+0x52C9=>0x95D7,
+0x5A29=>0x95D8,
+0x5F01=>0x95D9,
+0x97AD=>0x95DA,
+0x4FDD=>0x95DB,
+0x8217=>0x95DC,
+0x92EA=>0x95DD,
+0x5703=>0x95DE,
+0x6355=>0x95DF,
+0x6B69=>0x95E0,
+0x752B=>0x95E1,
+0x88DC=>0x95E2,
+0x8F14=>0x95E3,
+0x7A42=>0x95E4,
+0x52DF=>0x95E5,
+0x5893=>0x95E6,
+0x6155=>0x95E7,
+0x620A=>0x95E8,
+0x66AE=>0x95E9,
+0x6BCD=>0x95EA,
+0x7C3F=>0x95EB,
+0x83E9=>0x95EC,
+0x5023=>0x95ED,
+0x4FF8=>0x95EE,
+0x5305=>0x95EF,
+0x5446=>0x95F0,
+0x5831=>0x95F1,
+0x5949=>0x95F2,
+0x5B9D=>0x95F3,
+0x5CF0=>0x95F4,
+0x5CEF=>0x95F5,
+0x5D29=>0x95F6,
+0x5E96=>0x95F7,
+0x62B1=>0x95F8,
+0x6367=>0x95F9,
+0x653E=>0x95FA,
+0x65B9=>0x95FB,
+0x670B=>0x95FC,
+0x6CD5=>0x9640,
+0x6CE1=>0x9641,
+0x70F9=>0x9642,
+0x7832=>0x9643,
+0x7E2B=>0x9644,
+0x80DE=>0x9645,
+0x82B3=>0x9646,
+0x840C=>0x9647,
+0x84EC=>0x9648,
+0x8702=>0x9649,
+0x8912=>0x964A,
+0x8A2A=>0x964B,
+0x8C4A=>0x964C,
+0x90A6=>0x964D,
+0x92D2=>0x964E,
+0x98FD=>0x964F,
+0x9CF3=>0x9650,
+0x9D6C=>0x9651,
+0x4E4F=>0x9652,
+0x4EA1=>0x9653,
+0x508D=>0x9654,
+0x5256=>0x9655,
+0x574A=>0x9656,
+0x59A8=>0x9657,
+0x5E3D=>0x9658,
+0x5FD8=>0x9659,
+0x5FD9=>0x965A,
+0x623F=>0x965B,
+0x66B4=>0x965C,
+0x671B=>0x965D,
+0x67D0=>0x965E,
+0x68D2=>0x965F,
+0x5192=>0x9660,
+0x7D21=>0x9661,
+0x80AA=>0x9662,
+0x81A8=>0x9663,
+0x8B00=>0x9664,
+0x8C8C=>0x9665,
+0x8CBF=>0x9666,
+0x927E=>0x9667,
+0x9632=>0x9668,
+0x5420=>0x9669,
+0x982C=>0x966A,
+0x5317=>0x966B,
+0x50D5=>0x966C,
+0x535C=>0x966D,
+0x58A8=>0x966E,
+0x64B2=>0x966F,
+0x6734=>0x9670,
+0x7267=>0x9671,
+0x7766=>0x9672,
+0x7A46=>0x9673,
+0x91E6=>0x9674,
+0x52C3=>0x9675,
+0x6CA1=>0x9676,
+0x6B86=>0x9677,
+0x5800=>0x9678,
+0x5E4C=>0x9679,
+0x5954=>0x967A,
+0x672C=>0x967B,
+0x7FFB=>0x967C,
+0x51E1=>0x967D,
+0x76C6=>0x967E,
+0x6469=>0x9680,
+0x78E8=>0x9681,
+0x9B54=>0x9682,
+0x9EBB=>0x9683,
+0x57CB=>0x9684,
+0x59B9=>0x9685,
+0x6627=>0x9686,
+0x679A=>0x9687,
+0x6BCE=>0x9688,
+0x54E9=>0x9689,
+0x69D9=>0x968A,
+0x5E55=>0x968B,
+0x819C=>0x968C,
+0x6795=>0x968D,
+0x9BAA=>0x968E,
+0x67FE=>0x968F,
+0x9C52=>0x9690,
+0x685D=>0x9691,
+0x4EA6=>0x9692,
+0x4FE3=>0x9693,
+0x53C8=>0x9694,
+0x62B9=>0x9695,
+0x672B=>0x9696,
+0x6CAB=>0x9697,
+0x8FC4=>0x9698,
+0x4FAD=>0x9699,
+0x7E6D=>0x969A,
+0x9EBF=>0x969B,
+0x4E07=>0x969C,
+0x6162=>0x969D,
+0x6E80=>0x969E,
+0x6F2B=>0x969F,
+0x8513=>0x96A0,
+0x5473=>0x96A1,
+0x672A=>0x96A2,
+0x9B45=>0x96A3,
+0x5DF3=>0x96A4,
+0x7B95=>0x96A5,
+0x5CAC=>0x96A6,
+0x5BC6=>0x96A7,
+0x871C=>0x96A8,
+0x6E4A=>0x96A9,
+0x84D1=>0x96AA,
+0x7A14=>0x96AB,
+0x8108=>0x96AC,
+0x5999=>0x96AD,
+0x7C8D=>0x96AE,
+0x6C11=>0x96AF,
+0x7720=>0x96B0,
+0x52D9=>0x96B1,
+0x5922=>0x96B2,
+0x7121=>0x96B3,
+0x725F=>0x96B4,
+0x77DB=>0x96B5,
+0x9727=>0x96B6,
+0x9D61=>0x96B7,
+0x690B=>0x96B8,
+0x5A7F=>0x96B9,
+0x5A18=>0x96BA,
+0x51A5=>0x96BB,
+0x540D=>0x96BC,
+0x547D=>0x96BD,
+0x660E=>0x96BE,
+0x76DF=>0x96BF,
+0x8FF7=>0x96C0,
+0x9298=>0x96C1,
+0x9CF4=>0x96C2,
+0x59EA=>0x96C3,
+0x725D=>0x96C4,
+0x6EC5=>0x96C5,
+0x514D=>0x96C6,
+0x68C9=>0x96C7,
+0x7DBF=>0x96C8,
+0x7DEC=>0x96C9,
+0x9762=>0x96CA,
+0x9EBA=>0x96CB,
+0x6478=>0x96CC,
+0x6A21=>0x96CD,
+0x8302=>0x96CE,
+0x5984=>0x96CF,
+0x5B5F=>0x96D0,
+0x6BDB=>0x96D1,
+0x731B=>0x96D2,
+0x76F2=>0x96D3,
+0x7DB2=>0x96D4,
+0x8017=>0x96D5,
+0x8499=>0x96D6,
+0x5132=>0x96D7,
+0x6728=>0x96D8,
+0x9ED9=>0x96D9,
+0x76EE=>0x96DA,
+0x6762=>0x96DB,
+0x52FF=>0x96DC,
+0x9905=>0x96DD,
+0x5C24=>0x96DE,
+0x623B=>0x96DF,
+0x7C7E=>0x96E0,
+0x8CB0=>0x96E1,
+0x554F=>0x96E2,
+0x60B6=>0x96E3,
+0x7D0B=>0x96E4,
+0x9580=>0x96E5,
+0x5301=>0x96E6,
+0x4E5F=>0x96E7,
+0x51B6=>0x96E8,
+0x591C=>0x96E9,
+0x723A=>0x96EA,
+0x8036=>0x96EB,
+0x91CE=>0x96EC,
+0x5F25=>0x96ED,
+0x77E2=>0x96EE,
+0x5384=>0x96EF,
+0x5F79=>0x96F0,
+0x7D04=>0x96F1,
+0x85AC=>0x96F2,
+0x8A33=>0x96F3,
+0x8E8D=>0x96F4,
+0x9756=>0x96F5,
+0x67F3=>0x96F6,
+0x85AE=>0x96F7,
+0x9453=>0x96F8,
+0x6109=>0x96F9,
+0x6108=>0x96FA,
+0x6CB9=>0x96FB,
+0x7652=>0x96FC,
+0x8AED=>0x9740,
+0x8F38=>0x9741,
+0x552F=>0x9742,
+0x4F51=>0x9743,
+0x512A=>0x9744,
+0x52C7=>0x9745,
+0x53CB=>0x9746,
+0x5BA5=>0x9747,
+0x5E7D=>0x9748,
+0x60A0=>0x9749,
+0x6182=>0x974A,
+0x63D6=>0x974B,
+0x6709=>0x974C,
+0x67DA=>0x974D,
+0x6E67=>0x974E,
+0x6D8C=>0x974F,
+0x7336=>0x9750,
+0x7337=>0x9751,
+0x7531=>0x9752,
+0x7950=>0x9753,
+0x88D5=>0x9754,
+0x8A98=>0x9755,
+0x904A=>0x9756,
+0x9091=>0x9757,
+0x90F5=>0x9758,
+0x96C4=>0x9759,
+0x878D=>0x975A,
+0x5915=>0x975B,
+0x4E88=>0x975C,
+0x4F59=>0x975D,
+0x4E0E=>0x975E,
+0x8A89=>0x975F,
+0x8F3F=>0x9760,
+0x9810=>0x9761,
+0x50AD=>0x9762,
+0x5E7C=>0x9763,
+0x5996=>0x9764,
+0x5BB9=>0x9765,
+0x5EB8=>0x9766,
+0x63DA=>0x9767,
+0x63FA=>0x9768,
+0x64C1=>0x9769,
+0x66DC=>0x976A,
+0x694A=>0x976B,
+0x69D8=>0x976C,
+0x6D0B=>0x976D,
+0x6EB6=>0x976E,
+0x7194=>0x976F,
+0x7528=>0x9770,
+0x7AAF=>0x9771,
+0x7F8A=>0x9772,
+0x8000=>0x9773,
+0x8449=>0x9774,
+0x84C9=>0x9775,
+0x8981=>0x9776,
+0x8B21=>0x9777,
+0x8E0A=>0x9778,
+0x9065=>0x9779,
+0x967D=>0x977A,
+0x990A=>0x977B,
+0x617E=>0x977C,
+0x6291=>0x977D,
+0x6B32=>0x977E,
+0x6C83=>0x9780,
+0x6D74=>0x9781,
+0x7FCC=>0x9782,
+0x7FFC=>0x9783,
+0x6DC0=>0x9784,
+0x7F85=>0x9785,
+0x87BA=>0x9786,
+0x88F8=>0x9787,
+0x6765=>0x9788,
+0x83B1=>0x9789,
+0x983C=>0x978A,
+0x96F7=>0x978B,
+0x6D1B=>0x978C,
+0x7D61=>0x978D,
+0x843D=>0x978E,
+0x916A=>0x978F,
+0x4E71=>0x9790,
+0x5375=>0x9791,
+0x5D50=>0x9792,
+0x6B04=>0x9793,
+0x6FEB=>0x9794,
+0x85CD=>0x9795,
+0x862D=>0x9796,
+0x89A7=>0x9797,
+0x5229=>0x9798,
+0x540F=>0x9799,
+0x5C65=>0x979A,
+0x674E=>0x979B,
+0x68A8=>0x979C,
+0x7406=>0x979D,
+0x7483=>0x979E,
+0x75E2=>0x979F,
+0x88CF=>0x97A0,
+0x88E1=>0x97A1,
+0x91CC=>0x97A2,
+0x96E2=>0x97A3,
+0x9678=>0x97A4,
+0x5F8B=>0x97A5,
+0x7387=>0x97A6,
+0x7ACB=>0x97A7,
+0x844E=>0x97A8,
+0x63A0=>0x97A9,
+0x7565=>0x97AA,
+0x5289=>0x97AB,
+0x6D41=>0x97AC,
+0x6E9C=>0x97AD,
+0x7409=>0x97AE,
+0x7559=>0x97AF,
+0x786B=>0x97B0,
+0x7C92=>0x97B1,
+0x9686=>0x97B2,
+0x7ADC=>0x97B3,
+0x9F8D=>0x97B4,
+0x4FB6=>0x97B5,
+0x616E=>0x97B6,
+0x65C5=>0x97B7,
+0x865C=>0x97B8,
+0x4E86=>0x97B9,
+0x4EAE=>0x97BA,
+0x50DA=>0x97BB,
+0x4E21=>0x97BC,
+0x51CC=>0x97BD,
+0x5BEE=>0x97BE,
+0x6599=>0x97BF,
+0x6881=>0x97C0,
+0x6DBC=>0x97C1,
+0x731F=>0x97C2,
+0x7642=>0x97C3,
+0x77AD=>0x97C4,
+0x7A1C=>0x97C5,
+0x7CE7=>0x97C6,
+0x826F=>0x97C7,
+0x8AD2=>0x97C8,
+0x907C=>0x97C9,
+0x91CF=>0x97CA,
+0x9675=>0x97CB,
+0x9818=>0x97CC,
+0x529B=>0x97CD,
+0x7DD1=>0x97CE,
+0x502B=>0x97CF,
+0x5398=>0x97D0,
+0x6797=>0x97D1,
+0x6DCB=>0x97D2,
+0x71D0=>0x97D3,
+0x7433=>0x97D4,
+0x81E8=>0x97D5,
+0x8F2A=>0x97D6,
+0x96A3=>0x97D7,
+0x9C57=>0x97D8,
+0x9E9F=>0x97D9,
+0x7460=>0x97DA,
+0x5841=>0x97DB,
+0x6D99=>0x97DC,
+0x7D2F=>0x97DD,
+0x985E=>0x97DE,
+0x4EE4=>0x97DF,
+0x4F36=>0x97E0,
+0x4F8B=>0x97E1,
+0x51B7=>0x97E2,
+0x52B1=>0x97E3,
+0x5DBA=>0x97E4,
+0x601C=>0x97E5,
+0x73B2=>0x97E6,
+0x793C=>0x97E7,
+0x82D3=>0x97E8,
+0x9234=>0x97E9,
+0x96B7=>0x97EA,
+0x96F6=>0x97EB,
+0x970A=>0x97EC,
+0x9E97=>0x97ED,
+0x9F62=>0x97EE,
+0x66A6=>0x97EF,
+0x6B74=>0x97F0,
+0x5217=>0x97F1,
+0x52A3=>0x97F2,
+0x70C8=>0x97F3,
+0x88C2=>0x97F4,
+0x5EC9=>0x97F5,
+0x604B=>0x97F6,
+0x6190=>0x97F7,
+0x6F23=>0x97F8,
+0x7149=>0x97F9,
+0x7C3E=>0x97FA,
+0x7DF4=>0x97FB,
+0x806F=>0x97FC,
+0x84EE=>0x9840,
+0x9023=>0x9841,
+0x932C=>0x9842,
+0x5442=>0x9843,
+0x9B6F=>0x9844,
+0x6AD3=>0x9845,
+0x7089=>0x9846,
+0x8CC2=>0x9847,
+0x8DEF=>0x9848,
+0x9732=>0x9849,
+0x52B4=>0x984A,
+0x5A41=>0x984B,
+0x5ECA=>0x984C,
+0x5F04=>0x984D,
+0x6717=>0x984E,
+0x697C=>0x984F,
+0x6994=>0x9850,
+0x6D6A=>0x9851,
+0x6F0F=>0x9852,
+0x7262=>0x9853,
+0x72FC=>0x9854,
+0x7BED=>0x9855,
+0x8001=>0x9856,
+0x807E=>0x9857,
+0x874B=>0x9858,
+0x90CE=>0x9859,
+0x516D=>0x985A,
+0x9E93=>0x985B,
+0x7984=>0x985C,
+0x808B=>0x985D,
+0x9332=>0x985E,
+0x8AD6=>0x985F,
+0x502D=>0x9860,
+0x548C=>0x9861,
+0x8A71=>0x9862,
+0x6B6A=>0x9863,
+0x8CC4=>0x9864,
+0x8107=>0x9865,
+0x60D1=>0x9866,
+0x67A0=>0x9867,
+0x9DF2=>0x9868,
+0x4E99=>0x9869,
+0x4E98=>0x986A,
+0x9C10=>0x986B,
+0x8A6B=>0x986C,
+0x85C1=>0x986D,
+0x8568=>0x986E,
+0x6900=>0x986F,
+0x6E7E=>0x9870,
+0x7897=>0x9871,
+0x8155=>0x9872,
+0x5F0C=>0x989F,
+0x4E10=>0x98A0,
+0x4E15=>0x98A1,
+0x4E2A=>0x98A2,
+0x4E31=>0x98A3,
+0x4E36=>0x98A4,
+0x4E3C=>0x98A5,
+0x4E3F=>0x98A6,
+0x4E42=>0x98A7,
+0x4E56=>0x98A8,
+0x4E58=>0x98A9,
+0x4E82=>0x98AA,
+0x4E85=>0x98AB,
+0x8C6B=>0x98AC,
+0x4E8A=>0x98AD,
+0x8212=>0x98AE,
+0x5F0D=>0x98AF,
+0x4E8E=>0x98B0,
+0x4E9E=>0x98B1,
+0x4E9F=>0x98B2,
+0x4EA0=>0x98B3,
+0x4EA2=>0x98B4,
+0x4EB0=>0x98B5,
+0x4EB3=>0x98B6,
+0x4EB6=>0x98B7,
+0x4ECE=>0x98B8,
+0x4ECD=>0x98B9,
+0x4EC4=>0x98BA,
+0x4EC6=>0x98BB,
+0x4EC2=>0x98BC,
+0x4ED7=>0x98BD,
+0x4EDE=>0x98BE,
+0x4EED=>0x98BF,
+0x4EDF=>0x98C0,
+0x4EF7=>0x98C1,
+0x4F09=>0x98C2,
+0x4F5A=>0x98C3,
+0x4F30=>0x98C4,
+0x4F5B=>0x98C5,
+0x4F5D=>0x98C6,
+0x4F57=>0x98C7,
+0x4F47=>0x98C8,
+0x4F76=>0x98C9,
+0x4F88=>0x98CA,
+0x4F8F=>0x98CB,
+0x4F98=>0x98CC,
+0x4F7B=>0x98CD,
+0x4F69=>0x98CE,
+0x4F70=>0x98CF,
+0x4F91=>0x98D0,
+0x4F6F=>0x98D1,
+0x4F86=>0x98D2,
+0x4F96=>0x98D3,
+0x5118=>0x98D4,
+0x4FD4=>0x98D5,
+0x4FDF=>0x98D6,
+0x4FCE=>0x98D7,
+0x4FD8=>0x98D8,
+0x4FDB=>0x98D9,
+0x4FD1=>0x98DA,
+0x4FDA=>0x98DB,
+0x4FD0=>0x98DC,
+0x4FE4=>0x98DD,
+0x4FE5=>0x98DE,
+0x501A=>0x98DF,
+0x5028=>0x98E0,
+0x5014=>0x98E1,
+0x502A=>0x98E2,
+0x5025=>0x98E3,
+0x5005=>0x98E4,
+0x4F1C=>0x98E5,
+0x4FF6=>0x98E6,
+0x5021=>0x98E7,
+0x5029=>0x98E8,
+0x502C=>0x98E9,
+0x4FFE=>0x98EA,
+0x4FEF=>0x98EB,
+0x5011=>0x98EC,
+0x5006=>0x98ED,
+0x5043=>0x98EE,
+0x5047=>0x98EF,
+0x6703=>0x98F0,
+0x5055=>0x98F1,
+0x5050=>0x98F2,
+0x5048=>0x98F3,
+0x505A=>0x98F4,
+0x5056=>0x98F5,
+0x506C=>0x98F6,
+0x5078=>0x98F7,
+0x5080=>0x98F8,
+0x509A=>0x98F9,
+0x5085=>0x98FA,
+0x50B4=>0x98FB,
+0x50B2=>0x98FC,
+0x50C9=>0x9940,
+0x50CA=>0x9941,
+0x50B3=>0x9942,
+0x50C2=>0x9943,
+0x50D6=>0x9944,
+0x50DE=>0x9945,
+0x50E5=>0x9946,
+0x50ED=>0x9947,
+0x50E3=>0x9948,
+0x50EE=>0x9949,
+0x50F9=>0x994A,
+0x50F5=>0x994B,
+0x5109=>0x994C,
+0x5101=>0x994D,
+0x5102=>0x994E,
+0x5116=>0x994F,
+0x5115=>0x9950,
+0x5114=>0x9951,
+0x511A=>0x9952,
+0x5121=>0x9953,
+0x513A=>0x9954,
+0x5137=>0x9955,
+0x513C=>0x9956,
+0x513B=>0x9957,
+0x513F=>0x9958,
+0x5140=>0x9959,
+0x5152=>0x995A,
+0x514C=>0x995B,
+0x5154=>0x995C,
+0x5162=>0x995D,
+0x7AF8=>0x995E,
+0x5169=>0x995F,
+0x516A=>0x9960,
+0x516E=>0x9961,
+0x5180=>0x9962,
+0x5182=>0x9963,
+0x56D8=>0x9964,
+0x518C=>0x9965,
+0x5189=>0x9966,
+0x518F=>0x9967,
+0x5191=>0x9968,
+0x5193=>0x9969,
+0x5195=>0x996A,
+0x5196=>0x996B,
+0x51A4=>0x996C,
+0x51A6=>0x996D,
+0x51A2=>0x996E,
+0x51A9=>0x996F,
+0x51AA=>0x9970,
+0x51AB=>0x9971,
+0x51B3=>0x9972,
+0x51B1=>0x9973,
+0x51B2=>0x9974,
+0x51B0=>0x9975,
+0x51B5=>0x9976,
+0x51BD=>0x9977,
+0x51C5=>0x9978,
+0x51C9=>0x9979,
+0x51DB=>0x997A,
+0x51E0=>0x997B,
+0x8655=>0x997C,
+0x51E9=>0x997D,
+0x51ED=>0x997E,
+0x51F0=>0x9980,
+0x51F5=>0x9981,
+0x51FE=>0x9982,
+0x5204=>0x9983,
+0x520B=>0x9984,
+0x5214=>0x9985,
+0x520E=>0x9986,
+0x5227=>0x9987,
+0x522A=>0x9988,
+0x522E=>0x9989,
+0x5233=>0x998A,
+0x5239=>0x998B,
+0x524F=>0x998C,
+0x5244=>0x998D,
+0x524B=>0x998E,
+0x524C=>0x998F,
+0x525E=>0x9990,
+0x5254=>0x9991,
+0x526A=>0x9992,
+0x5274=>0x9993,
+0x5269=>0x9994,
+0x5273=>0x9995,
+0x527F=>0x9996,
+0x527D=>0x9997,
+0x528D=>0x9998,
+0x5294=>0x9999,
+0x5292=>0x999A,
+0x5271=>0x999B,
+0x5288=>0x999C,
+0x5291=>0x999D,
+0x8FA8=>0x999E,
+0x8FA7=>0x999F,
+0x52AC=>0x99A0,
+0x52AD=>0x99A1,
+0x52BC=>0x99A2,
+0x52B5=>0x99A3,
+0x52C1=>0x99A4,
+0x52CD=>0x99A5,
+0x52D7=>0x99A6,
+0x52DE=>0x99A7,
+0x52E3=>0x99A8,
+0x52E6=>0x99A9,
+0x98ED=>0x99AA,
+0x52E0=>0x99AB,
+0x52F3=>0x99AC,
+0x52F5=>0x99AD,
+0x52F8=>0x99AE,
+0x52F9=>0x99AF,
+0x5306=>0x99B0,
+0x5308=>0x99B1,
+0x7538=>0x99B2,
+0x530D=>0x99B3,
+0x5310=>0x99B4,
+0x530F=>0x99B5,
+0x5315=>0x99B6,
+0x531A=>0x99B7,
+0x5323=>0x99B8,
+0x532F=>0x99B9,
+0x5331=>0x99BA,
+0x5333=>0x99BB,
+0x5338=>0x99BC,
+0x5340=>0x99BD,
+0x5346=>0x99BE,
+0x5345=>0x99BF,
+0x4E17=>0x99C0,
+0x5349=>0x99C1,
+0x534D=>0x99C2,
+0x51D6=>0x99C3,
+0x535E=>0x99C4,
+0x5369=>0x99C5,
+0x536E=>0x99C6,
+0x5918=>0x99C7,
+0x537B=>0x99C8,
+0x5377=>0x99C9,
+0x5382=>0x99CA,
+0x5396=>0x99CB,
+0x53A0=>0x99CC,
+0x53A6=>0x99CD,
+0x53A5=>0x99CE,
+0x53AE=>0x99CF,
+0x53B0=>0x99D0,
+0x53B6=>0x99D1,
+0x53C3=>0x99D2,
+0x7C12=>0x99D3,
+0x96D9=>0x99D4,
+0x53DF=>0x99D5,
+0x66FC=>0x99D6,
+0x71EE=>0x99D7,
+0x53EE=>0x99D8,
+0x53E8=>0x99D9,
+0x53ED=>0x99DA,
+0x53FA=>0x99DB,
+0x5401=>0x99DC,
+0x543D=>0x99DD,
+0x5440=>0x99DE,
+0x542C=>0x99DF,
+0x542D=>0x99E0,
+0x543C=>0x99E1,
+0x542E=>0x99E2,
+0x5436=>0x99E3,
+0x5429=>0x99E4,
+0x541D=>0x99E5,
+0x544E=>0x99E6,
+0x548F=>0x99E7,
+0x5475=>0x99E8,
+0x548E=>0x99E9,
+0x545F=>0x99EA,
+0x5471=>0x99EB,
+0x5477=>0x99EC,
+0x5470=>0x99ED,
+0x5492=>0x99EE,
+0x547B=>0x99EF,
+0x5480=>0x99F0,
+0x5476=>0x99F1,
+0x5484=>0x99F2,
+0x5490=>0x99F3,
+0x5486=>0x99F4,
+0x54C7=>0x99F5,
+0x54A2=>0x99F6,
+0x54B8=>0x99F7,
+0x54A5=>0x99F8,
+0x54AC=>0x99F9,
+0x54C4=>0x99FA,
+0x54C8=>0x99FB,
+0x54A8=>0x99FC,
+0x54AB=>0x9A40,
+0x54C2=>0x9A41,
+0x54A4=>0x9A42,
+0x54BE=>0x9A43,
+0x54BC=>0x9A44,
+0x54D8=>0x9A45,
+0x54E5=>0x9A46,
+0x54E6=>0x9A47,
+0x550F=>0x9A48,
+0x5514=>0x9A49,
+0x54FD=>0x9A4A,
+0x54EE=>0x9A4B,
+0x54ED=>0x9A4C,
+0x54FA=>0x9A4D,
+0x54E2=>0x9A4E,
+0x5539=>0x9A4F,
+0x5540=>0x9A50,
+0x5563=>0x9A51,
+0x554C=>0x9A52,
+0x552E=>0x9A53,
+0x555C=>0x9A54,
+0x5545=>0x9A55,
+0x5556=>0x9A56,
+0x5557=>0x9A57,
+0x5538=>0x9A58,
+0x5533=>0x9A59,
+0x555D=>0x9A5A,
+0x5599=>0x9A5B,
+0x5580=>0x9A5C,
+0x54AF=>0x9A5D,
+0x558A=>0x9A5E,
+0x559F=>0x9A5F,
+0x557B=>0x9A60,
+0x557E=>0x9A61,
+0x5598=>0x9A62,
+0x559E=>0x9A63,
+0x55AE=>0x9A64,
+0x557C=>0x9A65,
+0x5583=>0x9A66,
+0x55A9=>0x9A67,
+0x5587=>0x9A68,
+0x55A8=>0x9A69,
+0x55DA=>0x9A6A,
+0x55C5=>0x9A6B,
+0x55DF=>0x9A6C,
+0x55C4=>0x9A6D,
+0x55DC=>0x9A6E,
+0x55E4=>0x9A6F,
+0x55D4=>0x9A70,
+0x5614=>0x9A71,
+0x55F7=>0x9A72,
+0x5616=>0x9A73,
+0x55FE=>0x9A74,
+0x55FD=>0x9A75,
+0x561B=>0x9A76,
+0x55F9=>0x9A77,
+0x564E=>0x9A78,
+0x5650=>0x9A79,
+0x71DF=>0x9A7A,
+0x5634=>0x9A7B,
+0x5636=>0x9A7C,
+0x5632=>0x9A7D,
+0x5638=>0x9A7E,
+0x566B=>0x9A80,
+0x5664=>0x9A81,
+0x562F=>0x9A82,
+0x566C=>0x9A83,
+0x566A=>0x9A84,
+0x5686=>0x9A85,
+0x5680=>0x9A86,
+0x568A=>0x9A87,
+0x56A0=>0x9A88,
+0x5694=>0x9A89,
+0x568F=>0x9A8A,
+0x56A5=>0x9A8B,
+0x56AE=>0x9A8C,
+0x56B6=>0x9A8D,
+0x56B4=>0x9A8E,
+0x56C2=>0x9A8F,
+0x56BC=>0x9A90,
+0x56C1=>0x9A91,
+0x56C3=>0x9A92,
+0x56C0=>0x9A93,
+0x56C8=>0x9A94,
+0x56CE=>0x9A95,
+0x56D1=>0x9A96,
+0x56D3=>0x9A97,
+0x56D7=>0x9A98,
+0x56EE=>0x9A99,
+0x56F9=>0x9A9A,
+0x5700=>0x9A9B,
+0x56FF=>0x9A9C,
+0x5704=>0x9A9D,
+0x5709=>0x9A9E,
+0x5708=>0x9A9F,
+0x570B=>0x9AA0,
+0x570D=>0x9AA1,
+0x5713=>0x9AA2,
+0x5718=>0x9AA3,
+0x5716=>0x9AA4,
+0x55C7=>0x9AA5,
+0x571C=>0x9AA6,
+0x5726=>0x9AA7,
+0x5737=>0x9AA8,
+0x5738=>0x9AA9,
+0x574E=>0x9AAA,
+0x573B=>0x9AAB,
+0x5740=>0x9AAC,
+0x574F=>0x9AAD,
+0x5769=>0x9AAE,
+0x57C0=>0x9AAF,
+0x5788=>0x9AB0,
+0x5761=>0x9AB1,
+0x577F=>0x9AB2,
+0x5789=>0x9AB3,
+0x5793=>0x9AB4,
+0x57A0=>0x9AB5,
+0x57B3=>0x9AB6,
+0x57A4=>0x9AB7,
+0x57AA=>0x9AB8,
+0x57B0=>0x9AB9,
+0x57C3=>0x9ABA,
+0x57C6=>0x9ABB,
+0x57D4=>0x9ABC,
+0x57D2=>0x9ABD,
+0x57D3=>0x9ABE,
+0x580A=>0x9ABF,
+0x57D6=>0x9AC0,
+0x57E3=>0x9AC1,
+0x580B=>0x9AC2,
+0x5819=>0x9AC3,
+0x581D=>0x9AC4,
+0x5872=>0x9AC5,
+0x5821=>0x9AC6,
+0x5862=>0x9AC7,
+0x584B=>0x9AC8,
+0x5870=>0x9AC9,
+0x6BC0=>0x9ACA,
+0x5852=>0x9ACB,
+0x583D=>0x9ACC,
+0x5879=>0x9ACD,
+0x5885=>0x9ACE,
+0x58B9=>0x9ACF,
+0x589F=>0x9AD0,
+0x58AB=>0x9AD1,
+0x58BA=>0x9AD2,
+0x58DE=>0x9AD3,
+0x58BB=>0x9AD4,
+0x58B8=>0x9AD5,
+0x58AE=>0x9AD6,
+0x58C5=>0x9AD7,
+0x58D3=>0x9AD8,
+0x58D1=>0x9AD9,
+0x58D7=>0x9ADA,
+0x58D9=>0x9ADB,
+0x58D8=>0x9ADC,
+0x58E5=>0x9ADD,
+0x58DC=>0x9ADE,
+0x58E4=>0x9ADF,
+0x58DF=>0x9AE0,
+0x58EF=>0x9AE1,
+0x58FA=>0x9AE2,
+0x58F9=>0x9AE3,
+0x58FB=>0x9AE4,
+0x58FC=>0x9AE5,
+0x58FD=>0x9AE6,
+0x5902=>0x9AE7,
+0x590A=>0x9AE8,
+0x5910=>0x9AE9,
+0x591B=>0x9AEA,
+0x68A6=>0x9AEB,
+0x5925=>0x9AEC,
+0x592C=>0x9AED,
+0x592D=>0x9AEE,
+0x5932=>0x9AEF,
+0x5938=>0x9AF0,
+0x593E=>0x9AF1,
+0x7AD2=>0x9AF2,
+0x5955=>0x9AF3,
+0x5950=>0x9AF4,
+0x594E=>0x9AF5,
+0x595A=>0x9AF6,
+0x5958=>0x9AF7,
+0x5962=>0x9AF8,
+0x5960=>0x9AF9,
+0x5967=>0x9AFA,
+0x596C=>0x9AFB,
+0x5969=>0x9AFC,
+0x5978=>0x9B40,
+0x5981=>0x9B41,
+0x599D=>0x9B42,
+0x4F5E=>0x9B43,
+0x4FAB=>0x9B44,
+0x59A3=>0x9B45,
+0x59B2=>0x9B46,
+0x59C6=>0x9B47,
+0x59E8=>0x9B48,
+0x59DC=>0x9B49,
+0x598D=>0x9B4A,
+0x59D9=>0x9B4B,
+0x59DA=>0x9B4C,
+0x5A25=>0x9B4D,
+0x5A1F=>0x9B4E,
+0x5A11=>0x9B4F,
+0x5A1C=>0x9B50,
+0x5A09=>0x9B51,
+0x5A1A=>0x9B52,
+0x5A40=>0x9B53,
+0x5A6C=>0x9B54,
+0x5A49=>0x9B55,
+0x5A35=>0x9B56,
+0x5A36=>0x9B57,
+0x5A62=>0x9B58,
+0x5A6A=>0x9B59,
+0x5A9A=>0x9B5A,
+0x5ABC=>0x9B5B,
+0x5ABE=>0x9B5C,
+0x5ACB=>0x9B5D,
+0x5AC2=>0x9B5E,
+0x5ABD=>0x9B5F,
+0x5AE3=>0x9B60,
+0x5AD7=>0x9B61,
+0x5AE6=>0x9B62,
+0x5AE9=>0x9B63,
+0x5AD6=>0x9B64,
+0x5AFA=>0x9B65,
+0x5AFB=>0x9B66,
+0x5B0C=>0x9B67,
+0x5B0B=>0x9B68,
+0x5B16=>0x9B69,
+0x5B32=>0x9B6A,
+0x5AD0=>0x9B6B,
+0x5B2A=>0x9B6C,
+0x5B36=>0x9B6D,
+0x5B3E=>0x9B6E,
+0x5B43=>0x9B6F,
+0x5B45=>0x9B70,
+0x5B40=>0x9B71,
+0x5B51=>0x9B72,
+0x5B55=>0x9B73,
+0x5B5A=>0x9B74,
+0x5B5B=>0x9B75,
+0x5B65=>0x9B76,
+0x5B69=>0x9B77,
+0x5B70=>0x9B78,
+0x5B73=>0x9B79,
+0x5B75=>0x9B7A,
+0x5B78=>0x9B7B,
+0x6588=>0x9B7C,
+0x5B7A=>0x9B7D,
+0x5B80=>0x9B7E,
+0x5B83=>0x9B80,
+0x5BA6=>0x9B81,
+0x5BB8=>0x9B82,
+0x5BC3=>0x9B83,
+0x5BC7=>0x9B84,
+0x5BC9=>0x9B85,
+0x5BD4=>0x9B86,
+0x5BD0=>0x9B87,
+0x5BE4=>0x9B88,
+0x5BE6=>0x9B89,
+0x5BE2=>0x9B8A,
+0x5BDE=>0x9B8B,
+0x5BE5=>0x9B8C,
+0x5BEB=>0x9B8D,
+0x5BF0=>0x9B8E,
+0x5BF6=>0x9B8F,
+0x5BF3=>0x9B90,
+0x5C05=>0x9B91,
+0x5C07=>0x9B92,
+0x5C08=>0x9B93,
+0x5C0D=>0x9B94,
+0x5C13=>0x9B95,
+0x5C20=>0x9B96,
+0x5C22=>0x9B97,
+0x5C28=>0x9B98,
+0x5C38=>0x9B99,
+0x5C39=>0x9B9A,
+0x5C41=>0x9B9B,
+0x5C46=>0x9B9C,
+0x5C4E=>0x9B9D,
+0x5C53=>0x9B9E,
+0x5C50=>0x9B9F,
+0x5C4F=>0x9BA0,
+0x5B71=>0x9BA1,
+0x5C6C=>0x9BA2,
+0x5C6E=>0x9BA3,
+0x4E62=>0x9BA4,
+0x5C76=>0x9BA5,
+0x5C79=>0x9BA6,
+0x5C8C=>0x9BA7,
+0x5C91=>0x9BA8,
+0x5C94=>0x9BA9,
+0x599B=>0x9BAA,
+0x5CAB=>0x9BAB,
+0x5CBB=>0x9BAC,
+0x5CB6=>0x9BAD,
+0x5CBC=>0x9BAE,
+0x5CB7=>0x9BAF,
+0x5CC5=>0x9BB0,
+0x5CBE=>0x9BB1,
+0x5CC7=>0x9BB2,
+0x5CD9=>0x9BB3,
+0x5CE9=>0x9BB4,
+0x5CFD=>0x9BB5,
+0x5CFA=>0x9BB6,
+0x5CED=>0x9BB7,
+0x5D8C=>0x9BB8,
+0x5CEA=>0x9BB9,
+0x5D0B=>0x9BBA,
+0x5D15=>0x9BBB,
+0x5D17=>0x9BBC,
+0x5D5C=>0x9BBD,
+0x5D1F=>0x9BBE,
+0x5D1B=>0x9BBF,
+0x5D11=>0x9BC0,
+0x5D14=>0x9BC1,
+0x5D22=>0x9BC2,
+0x5D1A=>0x9BC3,
+0x5D19=>0x9BC4,
+0x5D18=>0x9BC5,
+0x5D4C=>0x9BC6,
+0x5D52=>0x9BC7,
+0x5D4E=>0x9BC8,
+0x5D4B=>0x9BC9,
+0x5D6C=>0x9BCA,
+0x5D73=>0x9BCB,
+0x5D76=>0x9BCC,
+0x5D87=>0x9BCD,
+0x5D84=>0x9BCE,
+0x5D82=>0x9BCF,
+0x5DA2=>0x9BD0,
+0x5D9D=>0x9BD1,
+0x5DAC=>0x9BD2,
+0x5DAE=>0x9BD3,
+0x5DBD=>0x9BD4,
+0x5D90=>0x9BD5,
+0x5DB7=>0x9BD6,
+0x5DBC=>0x9BD7,
+0x5DC9=>0x9BD8,
+0x5DCD=>0x9BD9,
+0x5DD3=>0x9BDA,
+0x5DD2=>0x9BDB,
+0x5DD6=>0x9BDC,
+0x5DDB=>0x9BDD,
+0x5DEB=>0x9BDE,
+0x5DF2=>0x9BDF,
+0x5DF5=>0x9BE0,
+0x5E0B=>0x9BE1,
+0x5E1A=>0x9BE2,
+0x5E19=>0x9BE3,
+0x5E11=>0x9BE4,
+0x5E1B=>0x9BE5,
+0x5E36=>0x9BE6,
+0x5E37=>0x9BE7,
+0x5E44=>0x9BE8,
+0x5E43=>0x9BE9,
+0x5E40=>0x9BEA,
+0x5E4E=>0x9BEB,
+0x5E57=>0x9BEC,
+0x5E54=>0x9BED,
+0x5E5F=>0x9BEE,
+0x5E62=>0x9BEF,
+0x5E64=>0x9BF0,
+0x5E47=>0x9BF1,
+0x5E75=>0x9BF2,
+0x5E76=>0x9BF3,
+0x5E7A=>0x9BF4,
+0x9EBC=>0x9BF5,
+0x5E7F=>0x9BF6,
+0x5EA0=>0x9BF7,
+0x5EC1=>0x9BF8,
+0x5EC2=>0x9BF9,
+0x5EC8=>0x9BFA,
+0x5ED0=>0x9BFB,
+0x5ECF=>0x9BFC,
+0x5ED6=>0x9C40,
+0x5EE3=>0x9C41,
+0x5EDD=>0x9C42,
+0x5EDA=>0x9C43,
+0x5EDB=>0x9C44,
+0x5EE2=>0x9C45,
+0x5EE1=>0x9C46,
+0x5EE8=>0x9C47,
+0x5EE9=>0x9C48,
+0x5EEC=>0x9C49,
+0x5EF1=>0x9C4A,
+0x5EF3=>0x9C4B,
+0x5EF0=>0x9C4C,
+0x5EF4=>0x9C4D,
+0x5EF8=>0x9C4E,
+0x5EFE=>0x9C4F,
+0x5F03=>0x9C50,
+0x5F09=>0x9C51,
+0x5F5D=>0x9C52,
+0x5F5C=>0x9C53,
+0x5F0B=>0x9C54,
+0x5F11=>0x9C55,
+0x5F16=>0x9C56,
+0x5F29=>0x9C57,
+0x5F2D=>0x9C58,
+0x5F38=>0x9C59,
+0x5F41=>0x9C5A,
+0x5F48=>0x9C5B,
+0x5F4C=>0x9C5C,
+0x5F4E=>0x9C5D,
+0x5F2F=>0x9C5E,
+0x5F51=>0x9C5F,
+0x5F56=>0x9C60,
+0x5F57=>0x9C61,
+0x5F59=>0x9C62,
+0x5F61=>0x9C63,
+0x5F6D=>0x9C64,
+0x5F73=>0x9C65,
+0x5F77=>0x9C66,
+0x5F83=>0x9C67,
+0x5F82=>0x9C68,
+0x5F7F=>0x9C69,
+0x5F8A=>0x9C6A,
+0x5F88=>0x9C6B,
+0x5F91=>0x9C6C,
+0x5F87=>0x9C6D,
+0x5F9E=>0x9C6E,
+0x5F99=>0x9C6F,
+0x5F98=>0x9C70,
+0x5FA0=>0x9C71,
+0x5FA8=>0x9C72,
+0x5FAD=>0x9C73,
+0x5FBC=>0x9C74,
+0x5FD6=>0x9C75,
+0x5FFB=>0x9C76,
+0x5FE4=>0x9C77,
+0x5FF8=>0x9C78,
+0x5FF1=>0x9C79,
+0x5FDD=>0x9C7A,
+0x60B3=>0x9C7B,
+0x5FFF=>0x9C7C,
+0x6021=>0x9C7D,
+0x6060=>0x9C7E,
+0x6019=>0x9C80,
+0x6010=>0x9C81,
+0x6029=>0x9C82,
+0x600E=>0x9C83,
+0x6031=>0x9C84,
+0x601B=>0x9C85,
+0x6015=>0x9C86,
+0x602B=>0x9C87,
+0x6026=>0x9C88,
+0x600F=>0x9C89,
+0x603A=>0x9C8A,
+0x605A=>0x9C8B,
+0x6041=>0x9C8C,
+0x606A=>0x9C8D,
+0x6077=>0x9C8E,
+0x605F=>0x9C8F,
+0x604A=>0x9C90,
+0x6046=>0x9C91,
+0x604D=>0x9C92,
+0x6063=>0x9C93,
+0x6043=>0x9C94,
+0x6064=>0x9C95,
+0x6042=>0x9C96,
+0x606C=>0x9C97,
+0x606B=>0x9C98,
+0x6059=>0x9C99,
+0x6081=>0x9C9A,
+0x608D=>0x9C9B,
+0x60E7=>0x9C9C,
+0x6083=>0x9C9D,
+0x609A=>0x9C9E,
+0x6084=>0x9C9F,
+0x609B=>0x9CA0,
+0x6096=>0x9CA1,
+0x6097=>0x9CA2,
+0x6092=>0x9CA3,
+0x60A7=>0x9CA4,
+0x608B=>0x9CA5,
+0x60E1=>0x9CA6,
+0x60B8=>0x9CA7,
+0x60E0=>0x9CA8,
+0x60D3=>0x9CA9,
+0x60B4=>0x9CAA,
+0x5FF0=>0x9CAB,
+0x60BD=>0x9CAC,
+0x60C6=>0x9CAD,
+0x60B5=>0x9CAE,
+0x60D8=>0x9CAF,
+0x614D=>0x9CB0,
+0x6115=>0x9CB1,
+0x6106=>0x9CB2,
+0x60F6=>0x9CB3,
+0x60F7=>0x9CB4,
+0x6100=>0x9CB5,
+0x60F4=>0x9CB6,
+0x60FA=>0x9CB7,
+0x6103=>0x9CB8,
+0x6121=>0x9CB9,
+0x60FB=>0x9CBA,
+0x60F1=>0x9CBB,
+0x610D=>0x9CBC,
+0x610E=>0x9CBD,
+0x6147=>0x9CBE,
+0x613E=>0x9CBF,
+0x6128=>0x9CC0,
+0x6127=>0x9CC1,
+0x614A=>0x9CC2,
+0x613F=>0x9CC3,
+0x613C=>0x9CC4,
+0x612C=>0x9CC5,
+0x6134=>0x9CC6,
+0x613D=>0x9CC7,
+0x6142=>0x9CC8,
+0x6144=>0x9CC9,
+0x6173=>0x9CCA,
+0x6177=>0x9CCB,
+0x6158=>0x9CCC,
+0x6159=>0x9CCD,
+0x615A=>0x9CCE,
+0x616B=>0x9CCF,
+0x6174=>0x9CD0,
+0x616F=>0x9CD1,
+0x6165=>0x9CD2,
+0x6171=>0x9CD3,
+0x615F=>0x9CD4,
+0x615D=>0x9CD5,
+0x6153=>0x9CD6,
+0x6175=>0x9CD7,
+0x6199=>0x9CD8,
+0x6196=>0x9CD9,
+0x6187=>0x9CDA,
+0x61AC=>0x9CDB,
+0x6194=>0x9CDC,
+0x619A=>0x9CDD,
+0x618A=>0x9CDE,
+0x6191=>0x9CDF,
+0x61AB=>0x9CE0,
+0x61AE=>0x9CE1,
+0x61CC=>0x9CE2,
+0x61CA=>0x9CE3,
+0x61C9=>0x9CE4,
+0x61F7=>0x9CE5,
+0x61C8=>0x9CE6,
+0x61C3=>0x9CE7,
+0x61C6=>0x9CE8,
+0x61BA=>0x9CE9,
+0x61CB=>0x9CEA,
+0x7F79=>0x9CEB,
+0x61CD=>0x9CEC,
+0x61E6=>0x9CED,
+0x61E3=>0x9CEE,
+0x61F6=>0x9CEF,
+0x61FA=>0x9CF0,
+0x61F4=>0x9CF1,
+0x61FF=>0x9CF2,
+0x61FD=>0x9CF3,
+0x61FC=>0x9CF4,
+0x61FE=>0x9CF5,
+0x6200=>0x9CF6,
+0x6208=>0x9CF7,
+0x6209=>0x9CF8,
+0x620D=>0x9CF9,
+0x620C=>0x9CFA,
+0x6214=>0x9CFB,
+0x621B=>0x9CFC,
+0x621E=>0x9D40,
+0x6221=>0x9D41,
+0x622A=>0x9D42,
+0x622E=>0x9D43,
+0x6230=>0x9D44,
+0x6232=>0x9D45,
+0x6233=>0x9D46,
+0x6241=>0x9D47,
+0x624E=>0x9D48,
+0x625E=>0x9D49,
+0x6263=>0x9D4A,
+0x625B=>0x9D4B,
+0x6260=>0x9D4C,
+0x6268=>0x9D4D,
+0x627C=>0x9D4E,
+0x6282=>0x9D4F,
+0x6289=>0x9D50,
+0x627E=>0x9D51,
+0x6292=>0x9D52,
+0x6293=>0x9D53,
+0x6296=>0x9D54,
+0x62D4=>0x9D55,
+0x6283=>0x9D56,
+0x6294=>0x9D57,
+0x62D7=>0x9D58,
+0x62D1=>0x9D59,
+0x62BB=>0x9D5A,
+0x62CF=>0x9D5B,
+0x62FF=>0x9D5C,
+0x62C6=>0x9D5D,
+0x64D4=>0x9D5E,
+0x62C8=>0x9D5F,
+0x62DC=>0x9D60,
+0x62CC=>0x9D61,
+0x62CA=>0x9D62,
+0x62C2=>0x9D63,
+0x62C7=>0x9D64,
+0x629B=>0x9D65,
+0x62C9=>0x9D66,
+0x630C=>0x9D67,
+0x62EE=>0x9D68,
+0x62F1=>0x9D69,
+0x6327=>0x9D6A,
+0x6302=>0x9D6B,
+0x6308=>0x9D6C,
+0x62EF=>0x9D6D,
+0x62F5=>0x9D6E,
+0x6350=>0x9D6F,
+0x633E=>0x9D70,
+0x634D=>0x9D71,
+0x641C=>0x9D72,
+0x634F=>0x9D73,
+0x6396=>0x9D74,
+0x638E=>0x9D75,
+0x6380=>0x9D76,
+0x63AB=>0x9D77,
+0x6376=>0x9D78,
+0x63A3=>0x9D79,
+0x638F=>0x9D7A,
+0x6389=>0x9D7B,
+0x639F=>0x9D7C,
+0x63B5=>0x9D7D,
+0x636B=>0x9D7E,
+0x6369=>0x9D80,
+0x63BE=>0x9D81,
+0x63E9=>0x9D82,
+0x63C0=>0x9D83,
+0x63C6=>0x9D84,
+0x63E3=>0x9D85,
+0x63C9=>0x9D86,
+0x63D2=>0x9D87,
+0x63F6=>0x9D88,
+0x63C4=>0x9D89,
+0x6416=>0x9D8A,
+0x6434=>0x9D8B,
+0x6406=>0x9D8C,
+0x6413=>0x9D8D,
+0x6426=>0x9D8E,
+0x6436=>0x9D8F,
+0x651D=>0x9D90,
+0x6417=>0x9D91,
+0x6428=>0x9D92,
+0x640F=>0x9D93,
+0x6467=>0x9D94,
+0x646F=>0x9D95,
+0x6476=>0x9D96,
+0x644E=>0x9D97,
+0x652A=>0x9D98,
+0x6495=>0x9D99,
+0x6493=>0x9D9A,
+0x64A5=>0x9D9B,
+0x64A9=>0x9D9C,
+0x6488=>0x9D9D,
+0x64BC=>0x9D9E,
+0x64DA=>0x9D9F,
+0x64D2=>0x9DA0,
+0x64C5=>0x9DA1,
+0x64C7=>0x9DA2,
+0x64BB=>0x9DA3,
+0x64D8=>0x9DA4,
+0x64C2=>0x9DA5,
+0x64F1=>0x9DA6,
+0x64E7=>0x9DA7,
+0x8209=>0x9DA8,
+0x64E0=>0x9DA9,
+0x64E1=>0x9DAA,
+0x62AC=>0x9DAB,
+0x64E3=>0x9DAC,
+0x64EF=>0x9DAD,
+0x652C=>0x9DAE,
+0x64F6=>0x9DAF,
+0x64F4=>0x9DB0,
+0x64F2=>0x9DB1,
+0x64FA=>0x9DB2,
+0x6500=>0x9DB3,
+0x64FD=>0x9DB4,
+0x6518=>0x9DB5,
+0x651C=>0x9DB6,
+0x6505=>0x9DB7,
+0x6524=>0x9DB8,
+0x6523=>0x9DB9,
+0x652B=>0x9DBA,
+0x6534=>0x9DBB,
+0x6535=>0x9DBC,
+0x6537=>0x9DBD,
+0x6536=>0x9DBE,
+0x6538=>0x9DBF,
+0x754B=>0x9DC0,
+0x6548=>0x9DC1,
+0x6556=>0x9DC2,
+0x6555=>0x9DC3,
+0x654D=>0x9DC4,
+0x6558=>0x9DC5,
+0x655E=>0x9DC6,
+0x655D=>0x9DC7,
+0x6572=>0x9DC8,
+0x6578=>0x9DC9,
+0x6582=>0x9DCA,
+0x6583=>0x9DCB,
+0x8B8A=>0x9DCC,
+0x659B=>0x9DCD,
+0x659F=>0x9DCE,
+0x65AB=>0x9DCF,
+0x65B7=>0x9DD0,
+0x65C3=>0x9DD1,
+0x65C6=>0x9DD2,
+0x65C1=>0x9DD3,
+0x65C4=>0x9DD4,
+0x65CC=>0x9DD5,
+0x65D2=>0x9DD6,
+0x65DB=>0x9DD7,
+0x65D9=>0x9DD8,
+0x65E0=>0x9DD9,
+0x65E1=>0x9DDA,
+0x65F1=>0x9DDB,
+0x6772=>0x9DDC,
+0x660A=>0x9DDD,
+0x6603=>0x9DDE,
+0x65FB=>0x9DDF,
+0x6773=>0x9DE0,
+0x6635=>0x9DE1,
+0x6636=>0x9DE2,
+0x6634=>0x9DE3,
+0x661C=>0x9DE4,
+0x664F=>0x9DE5,
+0x6644=>0x9DE6,
+0x6649=>0x9DE7,
+0x6641=>0x9DE8,
+0x665E=>0x9DE9,
+0x665D=>0x9DEA,
+0x6664=>0x9DEB,
+0x6667=>0x9DEC,
+0x6668=>0x9DED,
+0x665F=>0x9DEE,
+0x6662=>0x9DEF,
+0x6670=>0x9DF0,
+0x6683=>0x9DF1,
+0x6688=>0x9DF2,
+0x668E=>0x9DF3,
+0x6689=>0x9DF4,
+0x6684=>0x9DF5,
+0x6698=>0x9DF6,
+0x669D=>0x9DF7,
+0x66C1=>0x9DF8,
+0x66B9=>0x9DF9,
+0x66C9=>0x9DFA,
+0x66BE=>0x9DFB,
+0x66BC=>0x9DFC,
+0x66C4=>0x9E40,
+0x66B8=>0x9E41,
+0x66D6=>0x9E42,
+0x66DA=>0x9E43,
+0x66E0=>0x9E44,
+0x663F=>0x9E45,
+0x66E6=>0x9E46,
+0x66E9=>0x9E47,
+0x66F0=>0x9E48,
+0x66F5=>0x9E49,
+0x66F7=>0x9E4A,
+0x670F=>0x9E4B,
+0x6716=>0x9E4C,
+0x671E=>0x9E4D,
+0x6726=>0x9E4E,
+0x6727=>0x9E4F,
+0x9738=>0x9E50,
+0x672E=>0x9E51,
+0x673F=>0x9E52,
+0x6736=>0x9E53,
+0x6741=>0x9E54,
+0x6738=>0x9E55,
+0x6737=>0x9E56,
+0x6746=>0x9E57,
+0x675E=>0x9E58,
+0x6760=>0x9E59,
+0x6759=>0x9E5A,
+0x6763=>0x9E5B,
+0x6764=>0x9E5C,
+0x6789=>0x9E5D,
+0x6770=>0x9E5E,
+0x67A9=>0x9E5F,
+0x677C=>0x9E60,
+0x676A=>0x9E61,
+0x678C=>0x9E62,
+0x678B=>0x9E63,
+0x67A6=>0x9E64,
+0x67A1=>0x9E65,
+0x6785=>0x9E66,
+0x67B7=>0x9E67,
+0x67EF=>0x9E68,
+0x67B4=>0x9E69,
+0x67EC=>0x9E6A,
+0x67B3=>0x9E6B,
+0x67E9=>0x9E6C,
+0x67B8=>0x9E6D,
+0x67E4=>0x9E6E,
+0x67DE=>0x9E6F,
+0x67DD=>0x9E70,
+0x67E2=>0x9E71,
+0x67EE=>0x9E72,
+0x67B9=>0x9E73,
+0x67CE=>0x9E74,
+0x67C6=>0x9E75,
+0x67E7=>0x9E76,
+0x6A9C=>0x9E77,
+0x681E=>0x9E78,
+0x6846=>0x9E79,
+0x6829=>0x9E7A,
+0x6840=>0x9E7B,
+0x684D=>0x9E7C,
+0x6832=>0x9E7D,
+0x684E=>0x9E7E,
+0x68B3=>0x9E80,
+0x682B=>0x9E81,
+0x6859=>0x9E82,
+0x6863=>0x9E83,
+0x6877=>0x9E84,
+0x687F=>0x9E85,
+0x689F=>0x9E86,
+0x688F=>0x9E87,
+0x68AD=>0x9E88,
+0x6894=>0x9E89,
+0x689D=>0x9E8A,
+0x689B=>0x9E8B,
+0x6883=>0x9E8C,
+0x6AAE=>0x9E8D,
+0x68B9=>0x9E8E,
+0x6874=>0x9E8F,
+0x68B5=>0x9E90,
+0x68A0=>0x9E91,
+0x68BA=>0x9E92,
+0x690F=>0x9E93,
+0x688D=>0x9E94,
+0x687E=>0x9E95,
+0x6901=>0x9E96,
+0x68CA=>0x9E97,
+0x6908=>0x9E98,
+0x68D8=>0x9E99,
+0x6922=>0x9E9A,
+0x6926=>0x9E9B,
+0x68E1=>0x9E9C,
+0x690C=>0x9E9D,
+0x68CD=>0x9E9E,
+0x68D4=>0x9E9F,
+0x68E7=>0x9EA0,
+0x68D5=>0x9EA1,
+0x6936=>0x9EA2,
+0x6912=>0x9EA3,
+0x6904=>0x9EA4,
+0x68D7=>0x9EA5,
+0x68E3=>0x9EA6,
+0x6925=>0x9EA7,
+0x68F9=>0x9EA8,
+0x68E0=>0x9EA9,
+0x68EF=>0x9EAA,
+0x6928=>0x9EAB,
+0x692A=>0x9EAC,
+0x691A=>0x9EAD,
+0x6923=>0x9EAE,
+0x6921=>0x9EAF,
+0x68C6=>0x9EB0,
+0x6979=>0x9EB1,
+0x6977=>0x9EB2,
+0x695C=>0x9EB3,
+0x6978=>0x9EB4,
+0x696B=>0x9EB5,
+0x6954=>0x9EB6,
+0x697E=>0x9EB7,
+0x696E=>0x9EB8,
+0x6939=>0x9EB9,
+0x6974=>0x9EBA,
+0x693D=>0x9EBB,
+0x6959=>0x9EBC,
+0x6930=>0x9EBD,
+0x6961=>0x9EBE,
+0x695E=>0x9EBF,
+0x695D=>0x9EC0,
+0x6981=>0x9EC1,
+0x696A=>0x9EC2,
+0x69B2=>0x9EC3,
+0x69AE=>0x9EC4,
+0x69D0=>0x9EC5,
+0x69BF=>0x9EC6,
+0x69C1=>0x9EC7,
+0x69D3=>0x9EC8,
+0x69BE=>0x9EC9,
+0x69CE=>0x9ECA,
+0x5BE8=>0x9ECB,
+0x69CA=>0x9ECC,
+0x69DD=>0x9ECD,
+0x69BB=>0x9ECE,
+0x69C3=>0x9ECF,
+0x69A7=>0x9ED0,
+0x6A2E=>0x9ED1,
+0x6991=>0x9ED2,
+0x69A0=>0x9ED3,
+0x699C=>0x9ED4,
+0x6995=>0x9ED5,
+0x69B4=>0x9ED6,
+0x69DE=>0x9ED7,
+0x69E8=>0x9ED8,
+0x6A02=>0x9ED9,
+0x6A1B=>0x9EDA,
+0x69FF=>0x9EDB,
+0x6B0A=>0x9EDC,
+0x69F9=>0x9EDD,
+0x69F2=>0x9EDE,
+0x69E7=>0x9EDF,
+0x6A05=>0x9EE0,
+0x69B1=>0x9EE1,
+0x6A1E=>0x9EE2,
+0x69ED=>0x9EE3,
+0x6A14=>0x9EE4,
+0x69EB=>0x9EE5,
+0x6A0A=>0x9EE6,
+0x6A12=>0x9EE7,
+0x6AC1=>0x9EE8,
+0x6A23=>0x9EE9,
+0x6A13=>0x9EEA,
+0x6A44=>0x9EEB,
+0x6A0C=>0x9EEC,
+0x6A72=>0x9EED,
+0x6A36=>0x9EEE,
+0x6A78=>0x9EEF,
+0x6A47=>0x9EF0,
+0x6A62=>0x9EF1,
+0x6A59=>0x9EF2,
+0x6A66=>0x9EF3,
+0x6A48=>0x9EF4,
+0x6A38=>0x9EF5,
+0x6A22=>0x9EF6,
+0x6A90=>0x9EF7,
+0x6A8D=>0x9EF8,
+0x6AA0=>0x9EF9,
+0x6A84=>0x9EFA,
+0x6AA2=>0x9EFB,
+0x6AA3=>0x9EFC,
+0x6A97=>0x9F40,
+0x8617=>0x9F41,
+0x6ABB=>0x9F42,
+0x6AC3=>0x9F43,
+0x6AC2=>0x9F44,
+0x6AB8=>0x9F45,
+0x6AB3=>0x9F46,
+0x6AAC=>0x9F47,
+0x6ADE=>0x9F48,
+0x6AD1=>0x9F49,
+0x6ADF=>0x9F4A,
+0x6AAA=>0x9F4B,
+0x6ADA=>0x9F4C,
+0x6AEA=>0x9F4D,
+0x6AFB=>0x9F4E,
+0x6B05=>0x9F4F,
+0x8616=>0x9F50,
+0x6AFA=>0x9F51,
+0x6B12=>0x9F52,
+0x6B16=>0x9F53,
+0x9B31=>0x9F54,
+0x6B1F=>0x9F55,
+0x6B38=>0x9F56,
+0x6B37=>0x9F57,
+0x76DC=>0x9F58,
+0x6B39=>0x9F59,
+0x98EE=>0x9F5A,
+0x6B47=>0x9F5B,
+0x6B43=>0x9F5C,
+0x6B49=>0x9F5D,
+0x6B50=>0x9F5E,
+0x6B59=>0x9F5F,
+0x6B54=>0x9F60,
+0x6B5B=>0x9F61,
+0x6B5F=>0x9F62,
+0x6B61=>0x9F63,
+0x6B78=>0x9F64,
+0x6B79=>0x9F65,
+0x6B7F=>0x9F66,
+0x6B80=>0x9F67,
+0x6B84=>0x9F68,
+0x6B83=>0x9F69,
+0x6B8D=>0x9F6A,
+0x6B98=>0x9F6B,
+0x6B95=>0x9F6C,
+0x6B9E=>0x9F6D,
+0x6BA4=>0x9F6E,
+0x6BAA=>0x9F6F,
+0x6BAB=>0x9F70,
+0x6BAF=>0x9F71,
+0x6BB2=>0x9F72,
+0x6BB1=>0x9F73,
+0x6BB3=>0x9F74,
+0x6BB7=>0x9F75,
+0x6BBC=>0x9F76,
+0x6BC6=>0x9F77,
+0x6BCB=>0x9F78,
+0x6BD3=>0x9F79,
+0x6BDF=>0x9F7A,
+0x6BEC=>0x9F7B,
+0x6BEB=>0x9F7C,
+0x6BF3=>0x9F7D,
+0x6BEF=>0x9F7E,
+0x9EBE=>0x9F80,
+0x6C08=>0x9F81,
+0x6C13=>0x9F82,
+0x6C14=>0x9F83,
+0x6C1B=>0x9F84,
+0x6C24=>0x9F85,
+0x6C23=>0x9F86,
+0x6C5E=>0x9F87,
+0x6C55=>0x9F88,
+0x6C62=>0x9F89,
+0x6C6A=>0x9F8A,
+0x6C82=>0x9F8B,
+0x6C8D=>0x9F8C,
+0x6C9A=>0x9F8D,
+0x6C81=>0x9F8E,
+0x6C9B=>0x9F8F,
+0x6C7E=>0x9F90,
+0x6C68=>0x9F91,
+0x6C73=>0x9F92,
+0x6C92=>0x9F93,
+0x6C90=>0x9F94,
+0x6CC4=>0x9F95,
+0x6CF1=>0x9F96,
+0x6CD3=>0x9F97,
+0x6CBD=>0x9F98,
+0x6CD7=>0x9F99,
+0x6CC5=>0x9F9A,
+0x6CDD=>0x9F9B,
+0x6CAE=>0x9F9C,
+0x6CB1=>0x9F9D,
+0x6CBE=>0x9F9E,
+0x6CBA=>0x9F9F,
+0x6CDB=>0x9FA0,
+0x6CEF=>0x9FA1,
+0x6CD9=>0x9FA2,
+0x6CEA=>0x9FA3,
+0x6D1F=>0x9FA4,
+0x884D=>0x9FA5,
+0x6D36=>0x9FA6,
+0x6D2B=>0x9FA7,
+0x6D3D=>0x9FA8,
+0x6D38=>0x9FA9,
+0x6D19=>0x9FAA,
+0x6D35=>0x9FAB,
+0x6D33=>0x9FAC,
+0x6D12=>0x9FAD,
+0x6D0C=>0x9FAE,
+0x6D63=>0x9FAF,
+0x6D93=>0x9FB0,
+0x6D64=>0x9FB1,
+0x6D5A=>0x9FB2,
+0x6D79=>0x9FB3,
+0x6D59=>0x9FB4,
+0x6D8E=>0x9FB5,
+0x6D95=>0x9FB6,
+0x6FE4=>0x9FB7,
+0x6D85=>0x9FB8,
+0x6DF9=>0x9FB9,
+0x6E15=>0x9FBA,
+0x6E0A=>0x9FBB,
+0x6DB5=>0x9FBC,
+0x6DC7=>0x9FBD,
+0x6DE6=>0x9FBE,
+0x6DB8=>0x9FBF,
+0x6DC6=>0x9FC0,
+0x6DEC=>0x9FC1,
+0x6DDE=>0x9FC2,
+0x6DCC=>0x9FC3,
+0x6DE8=>0x9FC4,
+0x6DD2=>0x9FC5,
+0x6DC5=>0x9FC6,
+0x6DFA=>0x9FC7,
+0x6DD9=>0x9FC8,
+0x6DE4=>0x9FC9,
+0x6DD5=>0x9FCA,
+0x6DEA=>0x9FCB,
+0x6DEE=>0x9FCC,
+0x6E2D=>0x9FCD,
+0x6E6E=>0x9FCE,
+0x6E2E=>0x9FCF,
+0x6E19=>0x9FD0,
+0x6E72=>0x9FD1,
+0x6E5F=>0x9FD2,
+0x6E3E=>0x9FD3,
+0x6E23=>0x9FD4,
+0x6E6B=>0x9FD5,
+0x6E2B=>0x9FD6,
+0x6E76=>0x9FD7,
+0x6E4D=>0x9FD8,
+0x6E1F=>0x9FD9,
+0x6E43=>0x9FDA,
+0x6E3A=>0x9FDB,
+0x6E4E=>0x9FDC,
+0x6E24=>0x9FDD,
+0x6EFF=>0x9FDE,
+0x6E1D=>0x9FDF,
+0x6E38=>0x9FE0,
+0x6E82=>0x9FE1,
+0x6EAA=>0x9FE2,
+0x6E98=>0x9FE3,
+0x6EC9=>0x9FE4,
+0x6EB7=>0x9FE5,
+0x6ED3=>0x9FE6,
+0x6EBD=>0x9FE7,
+0x6EAF=>0x9FE8,
+0x6EC4=>0x9FE9,
+0x6EB2=>0x9FEA,
+0x6ED4=>0x9FEB,
+0x6ED5=>0x9FEC,
+0x6E8F=>0x9FED,
+0x6EA5=>0x9FEE,
+0x6EC2=>0x9FEF,
+0x6E9F=>0x9FF0,
+0x6F41=>0x9FF1,
+0x6F11=>0x9FF2,
+0x704C=>0x9FF3,
+0x6EEC=>0x9FF4,
+0x6EF8=>0x9FF5,
+0x6EFE=>0x9FF6,
+0x6F3F=>0x9FF7,
+0x6EF2=>0x9FF8,
+0x6F31=>0x9FF9,
+0x6EEF=>0x9FFA,
+0x6F32=>0x9FFB,
+0x6ECC=>0x9FFC,
+0x6F3E=>0xE040,
+0x6F13=>0xE041,
+0x6EF7=>0xE042,
+0x6F86=>0xE043,
+0x6F7A=>0xE044,
+0x6F78=>0xE045,
+0x6F81=>0xE046,
+0x6F80=>0xE047,
+0x6F6F=>0xE048,
+0x6F5B=>0xE049,
+0x6FF3=>0xE04A,
+0x6F6D=>0xE04B,
+0x6F82=>0xE04C,
+0x6F7C=>0xE04D,
+0x6F58=>0xE04E,
+0x6F8E=>0xE04F,
+0x6F91=>0xE050,
+0x6FC2=>0xE051,
+0x6F66=>0xE052,
+0x6FB3=>0xE053,
+0x6FA3=>0xE054,
+0x6FA1=>0xE055,
+0x6FA4=>0xE056,
+0x6FB9=>0xE057,
+0x6FC6=>0xE058,
+0x6FAA=>0xE059,
+0x6FDF=>0xE05A,
+0x6FD5=>0xE05B,
+0x6FEC=>0xE05C,
+0x6FD4=>0xE05D,
+0x6FD8=>0xE05E,
+0x6FF1=>0xE05F,
+0x6FEE=>0xE060,
+0x6FDB=>0xE061,
+0x7009=>0xE062,
+0x700B=>0xE063,
+0x6FFA=>0xE064,
+0x7011=>0xE065,
+0x7001=>0xE066,
+0x700F=>0xE067,
+0x6FFE=>0xE068,
+0x701B=>0xE069,
+0x701A=>0xE06A,
+0x6F74=>0xE06B,
+0x701D=>0xE06C,
+0x7018=>0xE06D,
+0x701F=>0xE06E,
+0x7030=>0xE06F,
+0x703E=>0xE070,
+0x7032=>0xE071,
+0x7051=>0xE072,
+0x7063=>0xE073,
+0x7099=>0xE074,
+0x7092=>0xE075,
+0x70AF=>0xE076,
+0x70F1=>0xE077,
+0x70AC=>0xE078,
+0x70B8=>0xE079,
+0x70B3=>0xE07A,
+0x70AE=>0xE07B,
+0x70DF=>0xE07C,
+0x70CB=>0xE07D,
+0x70DD=>0xE07E,
+0x70D9=>0xE080,
+0x7109=>0xE081,
+0x70FD=>0xE082,
+0x711C=>0xE083,
+0x7119=>0xE084,
+0x7165=>0xE085,
+0x7155=>0xE086,
+0x7188=>0xE087,
+0x7166=>0xE088,
+0x7162=>0xE089,
+0x714C=>0xE08A,
+0x7156=>0xE08B,
+0x716C=>0xE08C,
+0x718F=>0xE08D,
+0x71FB=>0xE08E,
+0x7184=>0xE08F,
+0x7195=>0xE090,
+0x71A8=>0xE091,
+0x71AC=>0xE092,
+0x71D7=>0xE093,
+0x71B9=>0xE094,
+0x71BE=>0xE095,
+0x71D2=>0xE096,
+0x71C9=>0xE097,
+0x71D4=>0xE098,
+0x71CE=>0xE099,
+0x71E0=>0xE09A,
+0x71EC=>0xE09B,
+0x71E7=>0xE09C,
+0x71F5=>0xE09D,
+0x71FC=>0xE09E,
+0x71F9=>0xE09F,
+0x71FF=>0xE0A0,
+0x720D=>0xE0A1,
+0x7210=>0xE0A2,
+0x721B=>0xE0A3,
+0x7228=>0xE0A4,
+0x722D=>0xE0A5,
+0x722C=>0xE0A6,
+0x7230=>0xE0A7,
+0x7232=>0xE0A8,
+0x723B=>0xE0A9,
+0x723C=>0xE0AA,
+0x723F=>0xE0AB,
+0x7240=>0xE0AC,
+0x7246=>0xE0AD,
+0x724B=>0xE0AE,
+0x7258=>0xE0AF,
+0x7274=>0xE0B0,
+0x727E=>0xE0B1,
+0x7282=>0xE0B2,
+0x7281=>0xE0B3,
+0x7287=>0xE0B4,
+0x7292=>0xE0B5,
+0x7296=>0xE0B6,
+0x72A2=>0xE0B7,
+0x72A7=>0xE0B8,
+0x72B9=>0xE0B9,
+0x72B2=>0xE0BA,
+0x72C3=>0xE0BB,
+0x72C6=>0xE0BC,
+0x72C4=>0xE0BD,
+0x72CE=>0xE0BE,
+0x72D2=>0xE0BF,
+0x72E2=>0xE0C0,
+0x72E0=>0xE0C1,
+0x72E1=>0xE0C2,
+0x72F9=>0xE0C3,
+0x72F7=>0xE0C4,
+0x500F=>0xE0C5,
+0x7317=>0xE0C6,
+0x730A=>0xE0C7,
+0x731C=>0xE0C8,
+0x7316=>0xE0C9,
+0x731D=>0xE0CA,
+0x7334=>0xE0CB,
+0x732F=>0xE0CC,
+0x7329=>0xE0CD,
+0x7325=>0xE0CE,
+0x733E=>0xE0CF,
+0x734E=>0xE0D0,
+0x734F=>0xE0D1,
+0x9ED8=>0xE0D2,
+0x7357=>0xE0D3,
+0x736A=>0xE0D4,
+0x7368=>0xE0D5,
+0x7370=>0xE0D6,
+0x7378=>0xE0D7,
+0x7375=>0xE0D8,
+0x737B=>0xE0D9,
+0x737A=>0xE0DA,
+0x73C8=>0xE0DB,
+0x73B3=>0xE0DC,
+0x73CE=>0xE0DD,
+0x73BB=>0xE0DE,
+0x73C0=>0xE0DF,
+0x73E5=>0xE0E0,
+0x73EE=>0xE0E1,
+0x73DE=>0xE0E2,
+0x74A2=>0xE0E3,
+0x7405=>0xE0E4,
+0x746F=>0xE0E5,
+0x7425=>0xE0E6,
+0x73F8=>0xE0E7,
+0x7432=>0xE0E8,
+0x743A=>0xE0E9,
+0x7455=>0xE0EA,
+0x743F=>0xE0EB,
+0x745F=>0xE0EC,
+0x7459=>0xE0ED,
+0x7441=>0xE0EE,
+0x745C=>0xE0EF,
+0x7469=>0xE0F0,
+0x7470=>0xE0F1,
+0x7463=>0xE0F2,
+0x746A=>0xE0F3,
+0x7476=>0xE0F4,
+0x747E=>0xE0F5,
+0x748B=>0xE0F6,
+0x749E=>0xE0F7,
+0x74A7=>0xE0F8,
+0x74CA=>0xE0F9,
+0x74CF=>0xE0FA,
+0x74D4=>0xE0FB,
+0x73F1=>0xE0FC,
+0x74E0=>0xE140,
+0x74E3=>0xE141,
+0x74E7=>0xE142,
+0x74E9=>0xE143,
+0x74EE=>0xE144,
+0x74F2=>0xE145,
+0x74F0=>0xE146,
+0x74F1=>0xE147,
+0x74F8=>0xE148,
+0x74F7=>0xE149,
+0x7504=>0xE14A,
+0x7503=>0xE14B,
+0x7505=>0xE14C,
+0x750C=>0xE14D,
+0x750E=>0xE14E,
+0x750D=>0xE14F,
+0x7515=>0xE150,
+0x7513=>0xE151,
+0x751E=>0xE152,
+0x7526=>0xE153,
+0x752C=>0xE154,
+0x753C=>0xE155,
+0x7544=>0xE156,
+0x754D=>0xE157,
+0x754A=>0xE158,
+0x7549=>0xE159,
+0x755B=>0xE15A,
+0x7546=>0xE15B,
+0x755A=>0xE15C,
+0x7569=>0xE15D,
+0x7564=>0xE15E,
+0x7567=>0xE15F,
+0x756B=>0xE160,
+0x756D=>0xE161,
+0x7578=>0xE162,
+0x7576=>0xE163,
+0x7586=>0xE164,
+0x7587=>0xE165,
+0x7574=>0xE166,
+0x758A=>0xE167,
+0x7589=>0xE168,
+0x7582=>0xE169,
+0x7594=>0xE16A,
+0x759A=>0xE16B,
+0x759D=>0xE16C,
+0x75A5=>0xE16D,
+0x75A3=>0xE16E,
+0x75C2=>0xE16F,
+0x75B3=>0xE170,
+0x75C3=>0xE171,
+0x75B5=>0xE172,
+0x75BD=>0xE173,
+0x75B8=>0xE174,
+0x75BC=>0xE175,
+0x75B1=>0xE176,
+0x75CD=>0xE177,
+0x75CA=>0xE178,
+0x75D2=>0xE179,
+0x75D9=>0xE17A,
+0x75E3=>0xE17B,
+0x75DE=>0xE17C,
+0x75FE=>0xE17D,
+0x75FF=>0xE17E,
+0x75FC=>0xE180,
+0x7601=>0xE181,
+0x75F0=>0xE182,
+0x75FA=>0xE183,
+0x75F2=>0xE184,
+0x75F3=>0xE185,
+0x760B=>0xE186,
+0x760D=>0xE187,
+0x7609=>0xE188,
+0x761F=>0xE189,
+0x7627=>0xE18A,
+0x7620=>0xE18B,
+0x7621=>0xE18C,
+0x7622=>0xE18D,
+0x7624=>0xE18E,
+0x7634=>0xE18F,
+0x7630=>0xE190,
+0x763B=>0xE191,
+0x7647=>0xE192,
+0x7648=>0xE193,
+0x7646=>0xE194,
+0x765C=>0xE195,
+0x7658=>0xE196,
+0x7661=>0xE197,
+0x7662=>0xE198,
+0x7668=>0xE199,
+0x7669=>0xE19A,
+0x766A=>0xE19B,
+0x7667=>0xE19C,
+0x766C=>0xE19D,
+0x7670=>0xE19E,
+0x7672=>0xE19F,
+0x7676=>0xE1A0,
+0x7678=>0xE1A1,
+0x767C=>0xE1A2,
+0x7680=>0xE1A3,
+0x7683=>0xE1A4,
+0x7688=>0xE1A5,
+0x768B=>0xE1A6,
+0x768E=>0xE1A7,
+0x7696=>0xE1A8,
+0x7693=>0xE1A9,
+0x7699=>0xE1AA,
+0x769A=>0xE1AB,
+0x76B0=>0xE1AC,
+0x76B4=>0xE1AD,
+0x76B8=>0xE1AE,
+0x76B9=>0xE1AF,
+0x76BA=>0xE1B0,
+0x76C2=>0xE1B1,
+0x76CD=>0xE1B2,
+0x76D6=>0xE1B3,
+0x76D2=>0xE1B4,
+0x76DE=>0xE1B5,
+0x76E1=>0xE1B6,
+0x76E5=>0xE1B7,
+0x76E7=>0xE1B8,
+0x76EA=>0xE1B9,
+0x862F=>0xE1BA,
+0x76FB=>0xE1BB,
+0x7708=>0xE1BC,
+0x7707=>0xE1BD,
+0x7704=>0xE1BE,
+0x7729=>0xE1BF,
+0x7724=>0xE1C0,
+0x771E=>0xE1C1,
+0x7725=>0xE1C2,
+0x7726=>0xE1C3,
+0x771B=>0xE1C4,
+0x7737=>0xE1C5,
+0x7738=>0xE1C6,
+0x7747=>0xE1C7,
+0x775A=>0xE1C8,
+0x7768=>0xE1C9,
+0x776B=>0xE1CA,
+0x775B=>0xE1CB,
+0x7765=>0xE1CC,
+0x777F=>0xE1CD,
+0x777E=>0xE1CE,
+0x7779=>0xE1CF,
+0x778E=>0xE1D0,
+0x778B=>0xE1D1,
+0x7791=>0xE1D2,
+0x77A0=>0xE1D3,
+0x779E=>0xE1D4,
+0x77B0=>0xE1D5,
+0x77B6=>0xE1D6,
+0x77B9=>0xE1D7,
+0x77BF=>0xE1D8,
+0x77BC=>0xE1D9,
+0x77BD=>0xE1DA,
+0x77BB=>0xE1DB,
+0x77C7=>0xE1DC,
+0x77CD=>0xE1DD,
+0x77D7=>0xE1DE,
+0x77DA=>0xE1DF,
+0x77DC=>0xE1E0,
+0x77E3=>0xE1E1,
+0x77EE=>0xE1E2,
+0x77FC=>0xE1E3,
+0x780C=>0xE1E4,
+0x7812=>0xE1E5,
+0x7926=>0xE1E6,
+0x7820=>0xE1E7,
+0x792A=>0xE1E8,
+0x7845=>0xE1E9,
+0x788E=>0xE1EA,
+0x7874=>0xE1EB,
+0x7886=>0xE1EC,
+0x787C=>0xE1ED,
+0x789A=>0xE1EE,
+0x788C=>0xE1EF,
+0x78A3=>0xE1F0,
+0x78B5=>0xE1F1,
+0x78AA=>0xE1F2,
+0x78AF=>0xE1F3,
+0x78D1=>0xE1F4,
+0x78C6=>0xE1F5,
+0x78CB=>0xE1F6,
+0x78D4=>0xE1F7,
+0x78BE=>0xE1F8,
+0x78BC=>0xE1F9,
+0x78C5=>0xE1FA,
+0x78CA=>0xE1FB,
+0x78EC=>0xE1FC,
+0x78E7=>0xE240,
+0x78DA=>0xE241,
+0x78FD=>0xE242,
+0x78F4=>0xE243,
+0x7907=>0xE244,
+0x7912=>0xE245,
+0x7911=>0xE246,
+0x7919=>0xE247,
+0x792C=>0xE248,
+0x792B=>0xE249,
+0x7940=>0xE24A,
+0x7960=>0xE24B,
+0x7957=>0xE24C,
+0x795F=>0xE24D,
+0x795A=>0xE24E,
+0x7955=>0xE24F,
+0x7953=>0xE250,
+0x797A=>0xE251,
+0x797F=>0xE252,
+0x798A=>0xE253,
+0x799D=>0xE254,
+0x79A7=>0xE255,
+0x9F4B=>0xE256,
+0x79AA=>0xE257,
+0x79AE=>0xE258,
+0x79B3=>0xE259,
+0x79B9=>0xE25A,
+0x79BA=>0xE25B,
+0x79C9=>0xE25C,
+0x79D5=>0xE25D,
+0x79E7=>0xE25E,
+0x79EC=>0xE25F,
+0x79E1=>0xE260,
+0x79E3=>0xE261,
+0x7A08=>0xE262,
+0x7A0D=>0xE263,
+0x7A18=>0xE264,
+0x7A19=>0xE265,
+0x7A20=>0xE266,
+0x7A1F=>0xE267,
+0x7980=>0xE268,
+0x7A31=>0xE269,
+0x7A3B=>0xE26A,
+0x7A3E=>0xE26B,
+0x7A37=>0xE26C,
+0x7A43=>0xE26D,
+0x7A57=>0xE26E,
+0x7A49=>0xE26F,
+0x7A61=>0xE270,
+0x7A62=>0xE271,
+0x7A69=>0xE272,
+0x9F9D=>0xE273,
+0x7A70=>0xE274,
+0x7A79=>0xE275,
+0x7A7D=>0xE276,
+0x7A88=>0xE277,
+0x7A97=>0xE278,
+0x7A95=>0xE279,
+0x7A98=>0xE27A,
+0x7A96=>0xE27B,
+0x7AA9=>0xE27C,
+0x7AC8=>0xE27D,
+0x7AB0=>0xE27E,
+0x7AB6=>0xE280,
+0x7AC5=>0xE281,
+0x7AC4=>0xE282,
+0x7ABF=>0xE283,
+0x9083=>0xE284,
+0x7AC7=>0xE285,
+0x7ACA=>0xE286,
+0x7ACD=>0xE287,
+0x7ACF=>0xE288,
+0x7AD5=>0xE289,
+0x7AD3=>0xE28A,
+0x7AD9=>0xE28B,
+0x7ADA=>0xE28C,
+0x7ADD=>0xE28D,
+0x7AE1=>0xE28E,
+0x7AE2=>0xE28F,
+0x7AE6=>0xE290,
+0x7AED=>0xE291,
+0x7AF0=>0xE292,
+0x7B02=>0xE293,
+0x7B0F=>0xE294,
+0x7B0A=>0xE295,
+0x7B06=>0xE296,
+0x7B33=>0xE297,
+0x7B18=>0xE298,
+0x7B19=>0xE299,
+0x7B1E=>0xE29A,
+0x7B35=>0xE29B,
+0x7B28=>0xE29C,
+0x7B36=>0xE29D,
+0x7B50=>0xE29E,
+0x7B7A=>0xE29F,
+0x7B04=>0xE2A0,
+0x7B4D=>0xE2A1,
+0x7B0B=>0xE2A2,
+0x7B4C=>0xE2A3,
+0x7B45=>0xE2A4,
+0x7B75=>0xE2A5,
+0x7B65=>0xE2A6,
+0x7B74=>0xE2A7,
+0x7B67=>0xE2A8,
+0x7B70=>0xE2A9,
+0x7B71=>0xE2AA,
+0x7B6C=>0xE2AB,
+0x7B6E=>0xE2AC,
+0x7B9D=>0xE2AD,
+0x7B98=>0xE2AE,
+0x7B9F=>0xE2AF,
+0x7B8D=>0xE2B0,
+0x7B9C=>0xE2B1,
+0x7B9A=>0xE2B2,
+0x7B8B=>0xE2B3,
+0x7B92=>0xE2B4,
+0x7B8F=>0xE2B5,
+0x7B5D=>0xE2B6,
+0x7B99=>0xE2B7,
+0x7BCB=>0xE2B8,
+0x7BC1=>0xE2B9,
+0x7BCC=>0xE2BA,
+0x7BCF=>0xE2BB,
+0x7BB4=>0xE2BC,
+0x7BC6=>0xE2BD,
+0x7BDD=>0xE2BE,
+0x7BE9=>0xE2BF,
+0x7C11=>0xE2C0,
+0x7C14=>0xE2C1,
+0x7BE6=>0xE2C2,
+0x7BE5=>0xE2C3,
+0x7C60=>0xE2C4,
+0x7C00=>0xE2C5,
+0x7C07=>0xE2C6,
+0x7C13=>0xE2C7,
+0x7BF3=>0xE2C8,
+0x7BF7=>0xE2C9,
+0x7C17=>0xE2CA,
+0x7C0D=>0xE2CB,
+0x7BF6=>0xE2CC,
+0x7C23=>0xE2CD,
+0x7C27=>0xE2CE,
+0x7C2A=>0xE2CF,
+0x7C1F=>0xE2D0,
+0x7C37=>0xE2D1,
+0x7C2B=>0xE2D2,
+0x7C3D=>0xE2D3,
+0x7C4C=>0xE2D4,
+0x7C43=>0xE2D5,
+0x7C54=>0xE2D6,
+0x7C4F=>0xE2D7,
+0x7C40=>0xE2D8,
+0x7C50=>0xE2D9,
+0x7C58=>0xE2DA,
+0x7C5F=>0xE2DB,
+0x7C64=>0xE2DC,
+0x7C56=>0xE2DD,
+0x7C65=>0xE2DE,
+0x7C6C=>0xE2DF,
+0x7C75=>0xE2E0,
+0x7C83=>0xE2E1,
+0x7C90=>0xE2E2,
+0x7CA4=>0xE2E3,
+0x7CAD=>0xE2E4,
+0x7CA2=>0xE2E5,
+0x7CAB=>0xE2E6,
+0x7CA1=>0xE2E7,
+0x7CA8=>0xE2E8,
+0x7CB3=>0xE2E9,
+0x7CB2=>0xE2EA,
+0x7CB1=>0xE2EB,
+0x7CAE=>0xE2EC,
+0x7CB9=>0xE2ED,
+0x7CBD=>0xE2EE,
+0x7CC0=>0xE2EF,
+0x7CC5=>0xE2F0,
+0x7CC2=>0xE2F1,
+0x7CD8=>0xE2F2,
+0x7CD2=>0xE2F3,
+0x7CDC=>0xE2F4,
+0x7CE2=>0xE2F5,
+0x9B3B=>0xE2F6,
+0x7CEF=>0xE2F7,
+0x7CF2=>0xE2F8,
+0x7CF4=>0xE2F9,
+0x7CF6=>0xE2FA,
+0x7CFA=>0xE2FB,
+0x7D06=>0xE2FC,
+0x7D02=>0xE340,
+0x7D1C=>0xE341,
+0x7D15=>0xE342,
+0x7D0A=>0xE343,
+0x7D45=>0xE344,
+0x7D4B=>0xE345,
+0x7D2E=>0xE346,
+0x7D32=>0xE347,
+0x7D3F=>0xE348,
+0x7D35=>0xE349,
+0x7D46=>0xE34A,
+0x7D73=>0xE34B,
+0x7D56=>0xE34C,
+0x7D4E=>0xE34D,
+0x7D72=>0xE34E,
+0x7D68=>0xE34F,
+0x7D6E=>0xE350,
+0x7D4F=>0xE351,
+0x7D63=>0xE352,
+0x7D93=>0xE353,
+0x7D89=>0xE354,
+0x7D5B=>0xE355,
+0x7D8F=>0xE356,
+0x7D7D=>0xE357,
+0x7D9B=>0xE358,
+0x7DBA=>0xE359,
+0x7DAE=>0xE35A,
+0x7DA3=>0xE35B,
+0x7DB5=>0xE35C,
+0x7DC7=>0xE35D,
+0x7DBD=>0xE35E,
+0x7DAB=>0xE35F,
+0x7E3D=>0xE360,
+0x7DA2=>0xE361,
+0x7DAF=>0xE362,
+0x7DDC=>0xE363,
+0x7DB8=>0xE364,
+0x7D9F=>0xE365,
+0x7DB0=>0xE366,
+0x7DD8=>0xE367,
+0x7DDD=>0xE368,
+0x7DE4=>0xE369,
+0x7DDE=>0xE36A,
+0x7DFB=>0xE36B,
+0x7DF2=>0xE36C,
+0x7DE1=>0xE36D,
+0x7E05=>0xE36E,
+0x7E0A=>0xE36F,
+0x7E23=>0xE370,
+0x7E21=>0xE371,
+0x7E12=>0xE372,
+0x7E31=>0xE373,
+0x7E1F=>0xE374,
+0x7E09=>0xE375,
+0x7E0B=>0xE376,
+0x7E22=>0xE377,
+0x7E46=>0xE378,
+0x7E66=>0xE379,
+0x7E3B=>0xE37A,
+0x7E35=>0xE37B,
+0x7E39=>0xE37C,
+0x7E43=>0xE37D,
+0x7E37=>0xE37E,
+0x7E32=>0xE380,
+0x7E3A=>0xE381,
+0x7E67=>0xE382,
+0x7E5D=>0xE383,
+0x7E56=>0xE384,
+0x7E5E=>0xE385,
+0x7E59=>0xE386,
+0x7E5A=>0xE387,
+0x7E79=>0xE388,
+0x7E6A=>0xE389,
+0x7E69=>0xE38A,
+0x7E7C=>0xE38B,
+0x7E7B=>0xE38C,
+0x7E83=>0xE38D,
+0x7DD5=>0xE38E,
+0x7E7D=>0xE38F,
+0x8FAE=>0xE390,
+0x7E7F=>0xE391,
+0x7E88=>0xE392,
+0x7E89=>0xE393,
+0x7E8C=>0xE394,
+0x7E92=>0xE395,
+0x7E90=>0xE396,
+0x7E93=>0xE397,
+0x7E94=>0xE398,
+0x7E96=>0xE399,
+0x7E8E=>0xE39A,
+0x7E9B=>0xE39B,
+0x7E9C=>0xE39C,
+0x7F38=>0xE39D,
+0x7F3A=>0xE39E,
+0x7F45=>0xE39F,
+0x7F4C=>0xE3A0,
+0x7F4D=>0xE3A1,
+0x7F4E=>0xE3A2,
+0x7F50=>0xE3A3,
+0x7F51=>0xE3A4,
+0x7F55=>0xE3A5,
+0x7F54=>0xE3A6,
+0x7F58=>0xE3A7,
+0x7F5F=>0xE3A8,
+0x7F60=>0xE3A9,
+0x7F68=>0xE3AA,
+0x7F69=>0xE3AB,
+0x7F67=>0xE3AC,
+0x7F78=>0xE3AD,
+0x7F82=>0xE3AE,
+0x7F86=>0xE3AF,
+0x7F83=>0xE3B0,
+0x7F88=>0xE3B1,
+0x7F87=>0xE3B2,
+0x7F8C=>0xE3B3,
+0x7F94=>0xE3B4,
+0x7F9E=>0xE3B5,
+0x7F9D=>0xE3B6,
+0x7F9A=>0xE3B7,
+0x7FA3=>0xE3B8,
+0x7FAF=>0xE3B9,
+0x7FB2=>0xE3BA,
+0x7FB9=>0xE3BB,
+0x7FAE=>0xE3BC,
+0x7FB6=>0xE3BD,
+0x7FB8=>0xE3BE,
+0x8B71=>0xE3BF,
+0x7FC5=>0xE3C0,
+0x7FC6=>0xE3C1,
+0x7FCA=>0xE3C2,
+0x7FD5=>0xE3C3,
+0x7FD4=>0xE3C4,
+0x7FE1=>0xE3C5,
+0x7FE6=>0xE3C6,
+0x7FE9=>0xE3C7,
+0x7FF3=>0xE3C8,
+0x7FF9=>0xE3C9,
+0x98DC=>0xE3CA,
+0x8006=>0xE3CB,
+0x8004=>0xE3CC,
+0x800B=>0xE3CD,
+0x8012=>0xE3CE,
+0x8018=>0xE3CF,
+0x8019=>0xE3D0,
+0x801C=>0xE3D1,
+0x8021=>0xE3D2,
+0x8028=>0xE3D3,
+0x803F=>0xE3D4,
+0x803B=>0xE3D5,
+0x804A=>0xE3D6,
+0x8046=>0xE3D7,
+0x8052=>0xE3D8,
+0x8058=>0xE3D9,
+0x805A=>0xE3DA,
+0x805F=>0xE3DB,
+0x8062=>0xE3DC,
+0x8068=>0xE3DD,
+0x8073=>0xE3DE,
+0x8072=>0xE3DF,
+0x8070=>0xE3E0,
+0x8076=>0xE3E1,
+0x8079=>0xE3E2,
+0x807D=>0xE3E3,
+0x807F=>0xE3E4,
+0x8084=>0xE3E5,
+0x8086=>0xE3E6,
+0x8085=>0xE3E7,
+0x809B=>0xE3E8,
+0x8093=>0xE3E9,
+0x809A=>0xE3EA,
+0x80AD=>0xE3EB,
+0x5190=>0xE3EC,
+0x80AC=>0xE3ED,
+0x80DB=>0xE3EE,
+0x80E5=>0xE3EF,
+0x80D9=>0xE3F0,
+0x80DD=>0xE3F1,
+0x80C4=>0xE3F2,
+0x80DA=>0xE3F3,
+0x80D6=>0xE3F4,
+0x8109=>0xE3F5,
+0x80EF=>0xE3F6,
+0x80F1=>0xE3F7,
+0x811B=>0xE3F8,
+0x8129=>0xE3F9,
+0x8123=>0xE3FA,
+0x812F=>0xE3FB,
+0x814B=>0xE3FC,
+0x968B=>0xE440,
+0x8146=>0xE441,
+0x813E=>0xE442,
+0x8153=>0xE443,
+0x8151=>0xE444,
+0x80FC=>0xE445,
+0x8171=>0xE446,
+0x816E=>0xE447,
+0x8165=>0xE448,
+0x8166=>0xE449,
+0x8174=>0xE44A,
+0x8183=>0xE44B,
+0x8188=>0xE44C,
+0x818A=>0xE44D,
+0x8180=>0xE44E,
+0x8182=>0xE44F,
+0x81A0=>0xE450,
+0x8195=>0xE451,
+0x81A4=>0xE452,
+0x81A3=>0xE453,
+0x815F=>0xE454,
+0x8193=>0xE455,
+0x81A9=>0xE456,
+0x81B0=>0xE457,
+0x81B5=>0xE458,
+0x81BE=>0xE459,
+0x81B8=>0xE45A,
+0x81BD=>0xE45B,
+0x81C0=>0xE45C,
+0x81C2=>0xE45D,
+0x81BA=>0xE45E,
+0x81C9=>0xE45F,
+0x81CD=>0xE460,
+0x81D1=>0xE461,
+0x81D9=>0xE462,
+0x81D8=>0xE463,
+0x81C8=>0xE464,
+0x81DA=>0xE465,
+0x81DF=>0xE466,
+0x81E0=>0xE467,
+0x81E7=>0xE468,
+0x81FA=>0xE469,
+0x81FB=>0xE46A,
+0x81FE=>0xE46B,
+0x8201=>0xE46C,
+0x8202=>0xE46D,
+0x8205=>0xE46E,
+0x8207=>0xE46F,
+0x820A=>0xE470,
+0x820D=>0xE471,
+0x8210=>0xE472,
+0x8216=>0xE473,
+0x8229=>0xE474,
+0x822B=>0xE475,
+0x8238=>0xE476,
+0x8233=>0xE477,
+0x8240=>0xE478,
+0x8259=>0xE479,
+0x8258=>0xE47A,
+0x825D=>0xE47B,
+0x825A=>0xE47C,
+0x825F=>0xE47D,
+0x8264=>0xE47E,
+0x8262=>0xE480,
+0x8268=>0xE481,
+0x826A=>0xE482,
+0x826B=>0xE483,
+0x822E=>0xE484,
+0x8271=>0xE485,
+0x8277=>0xE486,
+0x8278=>0xE487,
+0x827E=>0xE488,
+0x828D=>0xE489,
+0x8292=>0xE48A,
+0x82AB=>0xE48B,
+0x829F=>0xE48C,
+0x82BB=>0xE48D,
+0x82AC=>0xE48E,
+0x82E1=>0xE48F,
+0x82E3=>0xE490,
+0x82DF=>0xE491,
+0x82D2=>0xE492,
+0x82F4=>0xE493,
+0x82F3=>0xE494,
+0x82FA=>0xE495,
+0x8393=>0xE496,
+0x8303=>0xE497,
+0x82FB=>0xE498,
+0x82F9=>0xE499,
+0x82DE=>0xE49A,
+0x8306=>0xE49B,
+0x82DC=>0xE49C,
+0x8309=>0xE49D,
+0x82D9=>0xE49E,
+0x8335=>0xE49F,
+0x8334=>0xE4A0,
+0x8316=>0xE4A1,
+0x8332=>0xE4A2,
+0x8331=>0xE4A3,
+0x8340=>0xE4A4,
+0x8339=>0xE4A5,
+0x8350=>0xE4A6,
+0x8345=>0xE4A7,
+0x832F=>0xE4A8,
+0x832B=>0xE4A9,
+0x8317=>0xE4AA,
+0x8318=>0xE4AB,
+0x8385=>0xE4AC,
+0x839A=>0xE4AD,
+0x83AA=>0xE4AE,
+0x839F=>0xE4AF,
+0x83A2=>0xE4B0,
+0x8396=>0xE4B1,
+0x8323=>0xE4B2,
+0x838E=>0xE4B3,
+0x8387=>0xE4B4,
+0x838A=>0xE4B5,
+0x837C=>0xE4B6,
+0x83B5=>0xE4B7,
+0x8373=>0xE4B8,
+0x8375=>0xE4B9,
+0x83A0=>0xE4BA,
+0x8389=>0xE4BB,
+0x83A8=>0xE4BC,
+0x83F4=>0xE4BD,
+0x8413=>0xE4BE,
+0x83EB=>0xE4BF,
+0x83CE=>0xE4C0,
+0x83FD=>0xE4C1,
+0x8403=>0xE4C2,
+0x83D8=>0xE4C3,
+0x840B=>0xE4C4,
+0x83C1=>0xE4C5,
+0x83F7=>0xE4C6,
+0x8407=>0xE4C7,
+0x83E0=>0xE4C8,
+0x83F2=>0xE4C9,
+0x840D=>0xE4CA,
+0x8422=>0xE4CB,
+0x8420=>0xE4CC,
+0x83BD=>0xE4CD,
+0x8438=>0xE4CE,
+0x8506=>0xE4CF,
+0x83FB=>0xE4D0,
+0x846D=>0xE4D1,
+0x842A=>0xE4D2,
+0x843C=>0xE4D3,
+0x855A=>0xE4D4,
+0x8484=>0xE4D5,
+0x8477=>0xE4D6,
+0x846B=>0xE4D7,
+0x84AD=>0xE4D8,
+0x846E=>0xE4D9,
+0x8482=>0xE4DA,
+0x8469=>0xE4DB,
+0x8446=>0xE4DC,
+0x842C=>0xE4DD,
+0x846F=>0xE4DE,
+0x8479=>0xE4DF,
+0x8435=>0xE4E0,
+0x84CA=>0xE4E1,
+0x8462=>0xE4E2,
+0x84B9=>0xE4E3,
+0x84BF=>0xE4E4,
+0x849F=>0xE4E5,
+0x84D9=>0xE4E6,
+0x84CD=>0xE4E7,
+0x84BB=>0xE4E8,
+0x84DA=>0xE4E9,
+0x84D0=>0xE4EA,
+0x84C1=>0xE4EB,
+0x84C6=>0xE4EC,
+0x84D6=>0xE4ED,
+0x84A1=>0xE4EE,
+0x8521=>0xE4EF,
+0x84FF=>0xE4F0,
+0x84F4=>0xE4F1,
+0x8517=>0xE4F2,
+0x8518=>0xE4F3,
+0x852C=>0xE4F4,
+0x851F=>0xE4F5,
+0x8515=>0xE4F6,
+0x8514=>0xE4F7,
+0x84FC=>0xE4F8,
+0x8540=>0xE4F9,
+0x8563=>0xE4FA,
+0x8558=>0xE4FB,
+0x8548=>0xE4FC,
+0x8541=>0xE540,
+0x8602=>0xE541,
+0x854B=>0xE542,
+0x8555=>0xE543,
+0x8580=>0xE544,
+0x85A4=>0xE545,
+0x8588=>0xE546,
+0x8591=>0xE547,
+0x858A=>0xE548,
+0x85A8=>0xE549,
+0x856D=>0xE54A,
+0x8594=>0xE54B,
+0x859B=>0xE54C,
+0x85EA=>0xE54D,
+0x8587=>0xE54E,
+0x859C=>0xE54F,
+0x8577=>0xE550,
+0x857E=>0xE551,
+0x8590=>0xE552,
+0x85C9=>0xE553,
+0x85BA=>0xE554,
+0x85CF=>0xE555,
+0x85B9=>0xE556,
+0x85D0=>0xE557,
+0x85D5=>0xE558,
+0x85DD=>0xE559,
+0x85E5=>0xE55A,
+0x85DC=>0xE55B,
+0x85F9=>0xE55C,
+0x860A=>0xE55D,
+0x8613=>0xE55E,
+0x860B=>0xE55F,
+0x85FE=>0xE560,
+0x85FA=>0xE561,
+0x8606=>0xE562,
+0x8622=>0xE563,
+0x861A=>0xE564,
+0x8630=>0xE565,
+0x863F=>0xE566,
+0x864D=>0xE567,
+0x4E55=>0xE568,
+0x8654=>0xE569,
+0x865F=>0xE56A,
+0x8667=>0xE56B,
+0x8671=>0xE56C,
+0x8693=>0xE56D,
+0x86A3=>0xE56E,
+0x86A9=>0xE56F,
+0x86AA=>0xE570,
+0x868B=>0xE571,
+0x868C=>0xE572,
+0x86B6=>0xE573,
+0x86AF=>0xE574,
+0x86C4=>0xE575,
+0x86C6=>0xE576,
+0x86B0=>0xE577,
+0x86C9=>0xE578,
+0x8823=>0xE579,
+0x86AB=>0xE57A,
+0x86D4=>0xE57B,
+0x86DE=>0xE57C,
+0x86E9=>0xE57D,
+0x86EC=>0xE57E,
+0x86DF=>0xE580,
+0x86DB=>0xE581,
+0x86EF=>0xE582,
+0x8712=>0xE583,
+0x8706=>0xE584,
+0x8708=>0xE585,
+0x8700=>0xE586,
+0x8703=>0xE587,
+0x86FB=>0xE588,
+0x8711=>0xE589,
+0x8709=>0xE58A,
+0x870D=>0xE58B,
+0x86F9=>0xE58C,
+0x870A=>0xE58D,
+0x8734=>0xE58E,
+0x873F=>0xE58F,
+0x8737=>0xE590,
+0x873B=>0xE591,
+0x8725=>0xE592,
+0x8729=>0xE593,
+0x871A=>0xE594,
+0x8760=>0xE595,
+0x875F=>0xE596,
+0x8778=>0xE597,
+0x874C=>0xE598,
+0x874E=>0xE599,
+0x8774=>0xE59A,
+0x8757=>0xE59B,
+0x8768=>0xE59C,
+0x876E=>0xE59D,
+0x8759=>0xE59E,
+0x8753=>0xE59F,
+0x8763=>0xE5A0,
+0x876A=>0xE5A1,
+0x8805=>0xE5A2,
+0x87A2=>0xE5A3,
+0x879F=>0xE5A4,
+0x8782=>0xE5A5,
+0x87AF=>0xE5A6,
+0x87CB=>0xE5A7,
+0x87BD=>0xE5A8,
+0x87C0=>0xE5A9,
+0x87D0=>0xE5AA,
+0x96D6=>0xE5AB,
+0x87AB=>0xE5AC,
+0x87C4=>0xE5AD,
+0x87B3=>0xE5AE,
+0x87C7=>0xE5AF,
+0x87C6=>0xE5B0,
+0x87BB=>0xE5B1,
+0x87EF=>0xE5B2,
+0x87F2=>0xE5B3,
+0x87E0=>0xE5B4,
+0x880F=>0xE5B5,
+0x880D=>0xE5B6,
+0x87FE=>0xE5B7,
+0x87F6=>0xE5B8,
+0x87F7=>0xE5B9,
+0x880E=>0xE5BA,
+0x87D2=>0xE5BB,
+0x8811=>0xE5BC,
+0x8816=>0xE5BD,
+0x8815=>0xE5BE,
+0x8822=>0xE5BF,
+0x8821=>0xE5C0,
+0x8831=>0xE5C1,
+0x8836=>0xE5C2,
+0x8839=>0xE5C3,
+0x8827=>0xE5C4,
+0x883B=>0xE5C5,
+0x8844=>0xE5C6,
+0x8842=>0xE5C7,
+0x8852=>0xE5C8,
+0x8859=>0xE5C9,
+0x885E=>0xE5CA,
+0x8862=>0xE5CB,
+0x886B=>0xE5CC,
+0x8881=>0xE5CD,
+0x887E=>0xE5CE,
+0x889E=>0xE5CF,
+0x8875=>0xE5D0,
+0x887D=>0xE5D1,
+0x88B5=>0xE5D2,
+0x8872=>0xE5D3,
+0x8882=>0xE5D4,
+0x8897=>0xE5D5,
+0x8892=>0xE5D6,
+0x88AE=>0xE5D7,
+0x8899=>0xE5D8,
+0x88A2=>0xE5D9,
+0x888D=>0xE5DA,
+0x88A4=>0xE5DB,
+0x88B0=>0xE5DC,
+0x88BF=>0xE5DD,
+0x88B1=>0xE5DE,
+0x88C3=>0xE5DF,
+0x88C4=>0xE5E0,
+0x88D4=>0xE5E1,
+0x88D8=>0xE5E2,
+0x88D9=>0xE5E3,
+0x88DD=>0xE5E4,
+0x88F9=>0xE5E5,
+0x8902=>0xE5E6,
+0x88FC=>0xE5E7,
+0x88F4=>0xE5E8,
+0x88E8=>0xE5E9,
+0x88F2=>0xE5EA,
+0x8904=>0xE5EB,
+0x890C=>0xE5EC,
+0x890A=>0xE5ED,
+0x8913=>0xE5EE,
+0x8943=>0xE5EF,
+0x891E=>0xE5F0,
+0x8925=>0xE5F1,
+0x892A=>0xE5F2,
+0x892B=>0xE5F3,
+0x8941=>0xE5F4,
+0x8944=>0xE5F5,
+0x893B=>0xE5F6,
+0x8936=>0xE5F7,
+0x8938=>0xE5F8,
+0x894C=>0xE5F9,
+0x891D=>0xE5FA,
+0x8960=>0xE5FB,
+0x895E=>0xE5FC,
+0x8966=>0xE640,
+0x8964=>0xE641,
+0x896D=>0xE642,
+0x896A=>0xE643,
+0x896F=>0xE644,
+0x8974=>0xE645,
+0x8977=>0xE646,
+0x897E=>0xE647,
+0x8983=>0xE648,
+0x8988=>0xE649,
+0x898A=>0xE64A,
+0x8993=>0xE64B,
+0x8998=>0xE64C,
+0x89A1=>0xE64D,
+0x89A9=>0xE64E,
+0x89A6=>0xE64F,
+0x89AC=>0xE650,
+0x89AF=>0xE651,
+0x89B2=>0xE652,
+0x89BA=>0xE653,
+0x89BD=>0xE654,
+0x89BF=>0xE655,
+0x89C0=>0xE656,
+0x89DA=>0xE657,
+0x89DC=>0xE658,
+0x89DD=>0xE659,
+0x89E7=>0xE65A,
+0x89F4=>0xE65B,
+0x89F8=>0xE65C,
+0x8A03=>0xE65D,
+0x8A16=>0xE65E,
+0x8A10=>0xE65F,
+0x8A0C=>0xE660,
+0x8A1B=>0xE661,
+0x8A1D=>0xE662,
+0x8A25=>0xE663,
+0x8A36=>0xE664,
+0x8A41=>0xE665,
+0x8A5B=>0xE666,
+0x8A52=>0xE667,
+0x8A46=>0xE668,
+0x8A48=>0xE669,
+0x8A7C=>0xE66A,
+0x8A6D=>0xE66B,
+0x8A6C=>0xE66C,
+0x8A62=>0xE66D,
+0x8A85=>0xE66E,
+0x8A82=>0xE66F,
+0x8A84=>0xE670,
+0x8AA8=>0xE671,
+0x8AA1=>0xE672,
+0x8A91=>0xE673,
+0x8AA5=>0xE674,
+0x8AA6=>0xE675,
+0x8A9A=>0xE676,
+0x8AA3=>0xE677,
+0x8AC4=>0xE678,
+0x8ACD=>0xE679,
+0x8AC2=>0xE67A,
+0x8ADA=>0xE67B,
+0x8AEB=>0xE67C,
+0x8AF3=>0xE67D,
+0x8AE7=>0xE67E,
+0x8AE4=>0xE680,
+0x8AF1=>0xE681,
+0x8B14=>0xE682,
+0x8AE0=>0xE683,
+0x8AE2=>0xE684,
+0x8AF7=>0xE685,
+0x8ADE=>0xE686,
+0x8ADB=>0xE687,
+0x8B0C=>0xE688,
+0x8B07=>0xE689,
+0x8B1A=>0xE68A,
+0x8AE1=>0xE68B,
+0x8B16=>0xE68C,
+0x8B10=>0xE68D,
+0x8B17=>0xE68E,
+0x8B20=>0xE68F,
+0x8B33=>0xE690,
+0x97AB=>0xE691,
+0x8B26=>0xE692,
+0x8B2B=>0xE693,
+0x8B3E=>0xE694,
+0x8B28=>0xE695,
+0x8B41=>0xE696,
+0x8B4C=>0xE697,
+0x8B4F=>0xE698,
+0x8B4E=>0xE699,
+0x8B49=>0xE69A,
+0x8B56=>0xE69B,
+0x8B5B=>0xE69C,
+0x8B5A=>0xE69D,
+0x8B6B=>0xE69E,
+0x8B5F=>0xE69F,
+0x8B6C=>0xE6A0,
+0x8B6F=>0xE6A1,
+0x8B74=>0xE6A2,
+0x8B7D=>0xE6A3,
+0x8B80=>0xE6A4,
+0x8B8C=>0xE6A5,
+0x8B8E=>0xE6A6,
+0x8B92=>0xE6A7,
+0x8B93=>0xE6A8,
+0x8B96=>0xE6A9,
+0x8B99=>0xE6AA,
+0x8B9A=>0xE6AB,
+0x8C3A=>0xE6AC,
+0x8C41=>0xE6AD,
+0x8C3F=>0xE6AE,
+0x8C48=>0xE6AF,
+0x8C4C=>0xE6B0,
+0x8C4E=>0xE6B1,
+0x8C50=>0xE6B2,
+0x8C55=>0xE6B3,
+0x8C62=>0xE6B4,
+0x8C6C=>0xE6B5,
+0x8C78=>0xE6B6,
+0x8C7A=>0xE6B7,
+0x8C82=>0xE6B8,
+0x8C89=>0xE6B9,
+0x8C85=>0xE6BA,
+0x8C8A=>0xE6BB,
+0x8C8D=>0xE6BC,
+0x8C8E=>0xE6BD,
+0x8C94=>0xE6BE,
+0x8C7C=>0xE6BF,
+0x8C98=>0xE6C0,
+0x621D=>0xE6C1,
+0x8CAD=>0xE6C2,
+0x8CAA=>0xE6C3,
+0x8CBD=>0xE6C4,
+0x8CB2=>0xE6C5,
+0x8CB3=>0xE6C6,
+0x8CAE=>0xE6C7,
+0x8CB6=>0xE6C8,
+0x8CC8=>0xE6C9,
+0x8CC1=>0xE6CA,
+0x8CE4=>0xE6CB,
+0x8CE3=>0xE6CC,
+0x8CDA=>0xE6CD,
+0x8CFD=>0xE6CE,
+0x8CFA=>0xE6CF,
+0x8CFB=>0xE6D0,
+0x8D04=>0xE6D1,
+0x8D05=>0xE6D2,
+0x8D0A=>0xE6D3,
+0x8D07=>0xE6D4,
+0x8D0F=>0xE6D5,
+0x8D0D=>0xE6D6,
+0x8D10=>0xE6D7,
+0x9F4E=>0xE6D8,
+0x8D13=>0xE6D9,
+0x8CCD=>0xE6DA,
+0x8D14=>0xE6DB,
+0x8D16=>0xE6DC,
+0x8D67=>0xE6DD,
+0x8D6D=>0xE6DE,
+0x8D71=>0xE6DF,
+0x8D73=>0xE6E0,
+0x8D81=>0xE6E1,
+0x8D99=>0xE6E2,
+0x8DC2=>0xE6E3,
+0x8DBE=>0xE6E4,
+0x8DBA=>0xE6E5,
+0x8DCF=>0xE6E6,
+0x8DDA=>0xE6E7,
+0x8DD6=>0xE6E8,
+0x8DCC=>0xE6E9,
+0x8DDB=>0xE6EA,
+0x8DCB=>0xE6EB,
+0x8DEA=>0xE6EC,
+0x8DEB=>0xE6ED,
+0x8DDF=>0xE6EE,
+0x8DE3=>0xE6EF,
+0x8DFC=>0xE6F0,
+0x8E08=>0xE6F1,
+0x8E09=>0xE6F2,
+0x8DFF=>0xE6F3,
+0x8E1D=>0xE6F4,
+0x8E1E=>0xE6F5,
+0x8E10=>0xE6F6,
+0x8E1F=>0xE6F7,
+0x8E42=>0xE6F8,
+0x8E35=>0xE6F9,
+0x8E30=>0xE6FA,
+0x8E34=>0xE6FB,
+0x8E4A=>0xE6FC,
+0x8E47=>0xE740,
+0x8E49=>0xE741,
+0x8E4C=>0xE742,
+0x8E50=>0xE743,
+0x8E48=>0xE744,
+0x8E59=>0xE745,
+0x8E64=>0xE746,
+0x8E60=>0xE747,
+0x8E2A=>0xE748,
+0x8E63=>0xE749,
+0x8E55=>0xE74A,
+0x8E76=>0xE74B,
+0x8E72=>0xE74C,
+0x8E7C=>0xE74D,
+0x8E81=>0xE74E,
+0x8E87=>0xE74F,
+0x8E85=>0xE750,
+0x8E84=>0xE751,
+0x8E8B=>0xE752,
+0x8E8A=>0xE753,
+0x8E93=>0xE754,
+0x8E91=>0xE755,
+0x8E94=>0xE756,
+0x8E99=>0xE757,
+0x8EAA=>0xE758,
+0x8EA1=>0xE759,
+0x8EAC=>0xE75A,
+0x8EB0=>0xE75B,
+0x8EC6=>0xE75C,
+0x8EB1=>0xE75D,
+0x8EBE=>0xE75E,
+0x8EC5=>0xE75F,
+0x8EC8=>0xE760,
+0x8ECB=>0xE761,
+0x8EDB=>0xE762,
+0x8EE3=>0xE763,
+0x8EFC=>0xE764,
+0x8EFB=>0xE765,
+0x8EEB=>0xE766,
+0x8EFE=>0xE767,
+0x8F0A=>0xE768,
+0x8F05=>0xE769,
+0x8F15=>0xE76A,
+0x8F12=>0xE76B,
+0x8F19=>0xE76C,
+0x8F13=>0xE76D,
+0x8F1C=>0xE76E,
+0x8F1F=>0xE76F,
+0x8F1B=>0xE770,
+0x8F0C=>0xE771,
+0x8F26=>0xE772,
+0x8F33=>0xE773,
+0x8F3B=>0xE774,
+0x8F39=>0xE775,
+0x8F45=>0xE776,
+0x8F42=>0xE777,
+0x8F3E=>0xE778,
+0x8F4C=>0xE779,
+0x8F49=>0xE77A,
+0x8F46=>0xE77B,
+0x8F4E=>0xE77C,
+0x8F57=>0xE77D,
+0x8F5C=>0xE77E,
+0x8F62=>0xE780,
+0x8F63=>0xE781,
+0x8F64=>0xE782,
+0x8F9C=>0xE783,
+0x8F9F=>0xE784,
+0x8FA3=>0xE785,
+0x8FAD=>0xE786,
+0x8FAF=>0xE787,
+0x8FB7=>0xE788,
+0x8FDA=>0xE789,
+0x8FE5=>0xE78A,
+0x8FE2=>0xE78B,
+0x8FEA=>0xE78C,
+0x8FEF=>0xE78D,
+0x9087=>0xE78E,
+0x8FF4=>0xE78F,
+0x9005=>0xE790,
+0x8FF9=>0xE791,
+0x8FFA=>0xE792,
+0x9011=>0xE793,
+0x9015=>0xE794,
+0x9021=>0xE795,
+0x900D=>0xE796,
+0x901E=>0xE797,
+0x9016=>0xE798,
+0x900B=>0xE799,
+0x9027=>0xE79A,
+0x9036=>0xE79B,
+0x9035=>0xE79C,
+0x9039=>0xE79D,
+0x8FF8=>0xE79E,
+0x904F=>0xE79F,
+0x9050=>0xE7A0,
+0x9051=>0xE7A1,
+0x9052=>0xE7A2,
+0x900E=>0xE7A3,
+0x9049=>0xE7A4,
+0x903E=>0xE7A5,
+0x9056=>0xE7A6,
+0x9058=>0xE7A7,
+0x905E=>0xE7A8,
+0x9068=>0xE7A9,
+0x906F=>0xE7AA,
+0x9076=>0xE7AB,
+0x96A8=>0xE7AC,
+0x9072=>0xE7AD,
+0x9082=>0xE7AE,
+0x907D=>0xE7AF,
+0x9081=>0xE7B0,
+0x9080=>0xE7B1,
+0x908A=>0xE7B2,
+0x9089=>0xE7B3,
+0x908F=>0xE7B4,
+0x90A8=>0xE7B5,
+0x90AF=>0xE7B6,
+0x90B1=>0xE7B7,
+0x90B5=>0xE7B8,
+0x90E2=>0xE7B9,
+0x90E4=>0xE7BA,
+0x6248=>0xE7BB,
+0x90DB=>0xE7BC,
+0x9102=>0xE7BD,
+0x9112=>0xE7BE,
+0x9119=>0xE7BF,
+0x9132=>0xE7C0,
+0x9130=>0xE7C1,
+0x914A=>0xE7C2,
+0x9156=>0xE7C3,
+0x9158=>0xE7C4,
+0x9163=>0xE7C5,
+0x9165=>0xE7C6,
+0x9169=>0xE7C7,
+0x9173=>0xE7C8,
+0x9172=>0xE7C9,
+0x918B=>0xE7CA,
+0x9189=>0xE7CB,
+0x9182=>0xE7CC,
+0x91A2=>0xE7CD,
+0x91AB=>0xE7CE,
+0x91AF=>0xE7CF,
+0x91AA=>0xE7D0,
+0x91B5=>0xE7D1,
+0x91B4=>0xE7D2,
+0x91BA=>0xE7D3,
+0x91C0=>0xE7D4,
+0x91C1=>0xE7D5,
+0x91C9=>0xE7D6,
+0x91CB=>0xE7D7,
+0x91D0=>0xE7D8,
+0x91D6=>0xE7D9,
+0x91DF=>0xE7DA,
+0x91E1=>0xE7DB,
+0x91DB=>0xE7DC,
+0x91FC=>0xE7DD,
+0x91F5=>0xE7DE,
+0x91F6=>0xE7DF,
+0x921E=>0xE7E0,
+0x91FF=>0xE7E1,
+0x9214=>0xE7E2,
+0x922C=>0xE7E3,
+0x9215=>0xE7E4,
+0x9211=>0xE7E5,
+0x925E=>0xE7E6,
+0x9257=>0xE7E7,
+0x9245=>0xE7E8,
+0x9249=>0xE7E9,
+0x9264=>0xE7EA,
+0x9248=>0xE7EB,
+0x9295=>0xE7EC,
+0x923F=>0xE7ED,
+0x924B=>0xE7EE,
+0x9250=>0xE7EF,
+0x929C=>0xE7F0,
+0x9296=>0xE7F1,
+0x9293=>0xE7F2,
+0x929B=>0xE7F3,
+0x925A=>0xE7F4,
+0x92CF=>0xE7F5,
+0x92B9=>0xE7F6,
+0x92B7=>0xE7F7,
+0x92E9=>0xE7F8,
+0x930F=>0xE7F9,
+0x92FA=>0xE7FA,
+0x9344=>0xE7FB,
+0x932E=>0xE7FC,
+0x9319=>0xE840,
+0x9322=>0xE841,
+0x931A=>0xE842,
+0x9323=>0xE843,
+0x933A=>0xE844,
+0x9335=>0xE845,
+0x933B=>0xE846,
+0x935C=>0xE847,
+0x9360=>0xE848,
+0x937C=>0xE849,
+0x936E=>0xE84A,
+0x9356=>0xE84B,
+0x93B0=>0xE84C,
+0x93AC=>0xE84D,
+0x93AD=>0xE84E,
+0x9394=>0xE84F,
+0x93B9=>0xE850,
+0x93D6=>0xE851,
+0x93D7=>0xE852,
+0x93E8=>0xE853,
+0x93E5=>0xE854,
+0x93D8=>0xE855,
+0x93C3=>0xE856,
+0x93DD=>0xE857,
+0x93D0=>0xE858,
+0x93C8=>0xE859,
+0x93E4=>0xE85A,
+0x941A=>0xE85B,
+0x9414=>0xE85C,
+0x9413=>0xE85D,
+0x9403=>0xE85E,
+0x9407=>0xE85F,
+0x9410=>0xE860,
+0x9436=>0xE861,
+0x942B=>0xE862,
+0x9435=>0xE863,
+0x9421=>0xE864,
+0x943A=>0xE865,
+0x9441=>0xE866,
+0x9452=>0xE867,
+0x9444=>0xE868,
+0x945B=>0xE869,
+0x9460=>0xE86A,
+0x9462=>0xE86B,
+0x945E=>0xE86C,
+0x946A=>0xE86D,
+0x9229=>0xE86E,
+0x9470=>0xE86F,
+0x9475=>0xE870,
+0x9477=>0xE871,
+0x947D=>0xE872,
+0x945A=>0xE873,
+0x947C=>0xE874,
+0x947E=>0xE875,
+0x9481=>0xE876,
+0x947F=>0xE877,
+0x9582=>0xE878,
+0x9587=>0xE879,
+0x958A=>0xE87A,
+0x9594=>0xE87B,
+0x9596=>0xE87C,
+0x9598=>0xE87D,
+0x9599=>0xE87E,
+0x95A0=>0xE880,
+0x95A8=>0xE881,
+0x95A7=>0xE882,
+0x95AD=>0xE883,
+0x95BC=>0xE884,
+0x95BB=>0xE885,
+0x95B9=>0xE886,
+0x95BE=>0xE887,
+0x95CA=>0xE888,
+0x6FF6=>0xE889,
+0x95C3=>0xE88A,
+0x95CD=>0xE88B,
+0x95CC=>0xE88C,
+0x95D5=>0xE88D,
+0x95D4=>0xE88E,
+0x95D6=>0xE88F,
+0x95DC=>0xE890,
+0x95E1=>0xE891,
+0x95E5=>0xE892,
+0x95E2=>0xE893,
+0x9621=>0xE894,
+0x9628=>0xE895,
+0x962E=>0xE896,
+0x962F=>0xE897,
+0x9642=>0xE898,
+0x964C=>0xE899,
+0x964F=>0xE89A,
+0x964B=>0xE89B,
+0x9677=>0xE89C,
+0x965C=>0xE89D,
+0x965E=>0xE89E,
+0x965D=>0xE89F,
+0x965F=>0xE8A0,
+0x9666=>0xE8A1,
+0x9672=>0xE8A2,
+0x966C=>0xE8A3,
+0x968D=>0xE8A4,
+0x9698=>0xE8A5,
+0x9695=>0xE8A6,
+0x9697=>0xE8A7,
+0x96AA=>0xE8A8,
+0x96A7=>0xE8A9,
+0x96B1=>0xE8AA,
+0x96B2=>0xE8AB,
+0x96B0=>0xE8AC,
+0x96B4=>0xE8AD,
+0x96B6=>0xE8AE,
+0x96B8=>0xE8AF,
+0x96B9=>0xE8B0,
+0x96CE=>0xE8B1,
+0x96CB=>0xE8B2,
+0x96C9=>0xE8B3,
+0x96CD=>0xE8B4,
+0x894D=>0xE8B5,
+0x96DC=>0xE8B6,
+0x970D=>0xE8B7,
+0x96D5=>0xE8B8,
+0x96F9=>0xE8B9,
+0x9704=>0xE8BA,
+0x9706=>0xE8BB,
+0x9708=>0xE8BC,
+0x9713=>0xE8BD,
+0x970E=>0xE8BE,
+0x9711=>0xE8BF,
+0x970F=>0xE8C0,
+0x9716=>0xE8C1,
+0x9719=>0xE8C2,
+0x9724=>0xE8C3,
+0x972A=>0xE8C4,
+0x9730=>0xE8C5,
+0x9739=>0xE8C6,
+0x973D=>0xE8C7,
+0x973E=>0xE8C8,
+0x9744=>0xE8C9,
+0x9746=>0xE8CA,
+0x9748=>0xE8CB,
+0x9742=>0xE8CC,
+0x9749=>0xE8CD,
+0x975C=>0xE8CE,
+0x9760=>0xE8CF,
+0x9764=>0xE8D0,
+0x9766=>0xE8D1,
+0x9768=>0xE8D2,
+0x52D2=>0xE8D3,
+0x976B=>0xE8D4,
+0x9771=>0xE8D5,
+0x9779=>0xE8D6,
+0x9785=>0xE8D7,
+0x977C=>0xE8D8,
+0x9781=>0xE8D9,
+0x977A=>0xE8DA,
+0x9786=>0xE8DB,
+0x978B=>0xE8DC,
+0x978F=>0xE8DD,
+0x9790=>0xE8DE,
+0x979C=>0xE8DF,
+0x97A8=>0xE8E0,
+0x97A6=>0xE8E1,
+0x97A3=>0xE8E2,
+0x97B3=>0xE8E3,
+0x97B4=>0xE8E4,
+0x97C3=>0xE8E5,
+0x97C6=>0xE8E6,
+0x97C8=>0xE8E7,
+0x97CB=>0xE8E8,
+0x97DC=>0xE8E9,
+0x97ED=>0xE8EA,
+0x9F4F=>0xE8EB,
+0x97F2=>0xE8EC,
+0x7ADF=>0xE8ED,
+0x97F6=>0xE8EE,
+0x97F5=>0xE8EF,
+0x980F=>0xE8F0,
+0x980C=>0xE8F1,
+0x9838=>0xE8F2,
+0x9824=>0xE8F3,
+0x9821=>0xE8F4,
+0x9837=>0xE8F5,
+0x983D=>0xE8F6,
+0x9846=>0xE8F7,
+0x984F=>0xE8F8,
+0x984B=>0xE8F9,
+0x986B=>0xE8FA,
+0x986F=>0xE8FB,
+0x9870=>0xE8FC,
+0x9871=>0xE940,
+0x9874=>0xE941,
+0x9873=>0xE942,
+0x98AA=>0xE943,
+0x98AF=>0xE944,
+0x98B1=>0xE945,
+0x98B6=>0xE946,
+0x98C4=>0xE947,
+0x98C3=>0xE948,
+0x98C6=>0xE949,
+0x98E9=>0xE94A,
+0x98EB=>0xE94B,
+0x9903=>0xE94C,
+0x9909=>0xE94D,
+0x9912=>0xE94E,
+0x9914=>0xE94F,
+0x9918=>0xE950,
+0x9921=>0xE951,
+0x991D=>0xE952,
+0x991E=>0xE953,
+0x9924=>0xE954,
+0x9920=>0xE955,
+0x992C=>0xE956,
+0x992E=>0xE957,
+0x993D=>0xE958,
+0x993E=>0xE959,
+0x9942=>0xE95A,
+0x9949=>0xE95B,
+0x9945=>0xE95C,
+0x9950=>0xE95D,
+0x994B=>0xE95E,
+0x9951=>0xE95F,
+0x9952=>0xE960,
+0x994C=>0xE961,
+0x9955=>0xE962,
+0x9997=>0xE963,
+0x9998=>0xE964,
+0x99A5=>0xE965,
+0x99AD=>0xE966,
+0x99AE=>0xE967,
+0x99BC=>0xE968,
+0x99DF=>0xE969,
+0x99DB=>0xE96A,
+0x99DD=>0xE96B,
+0x99D8=>0xE96C,
+0x99D1=>0xE96D,
+0x99ED=>0xE96E,
+0x99EE=>0xE96F,
+0x99F1=>0xE970,
+0x99F2=>0xE971,
+0x99FB=>0xE972,
+0x99F8=>0xE973,
+0x9A01=>0xE974,
+0x9A0F=>0xE975,
+0x9A05=>0xE976,
+0x99E2=>0xE977,
+0x9A19=>0xE978,
+0x9A2B=>0xE979,
+0x9A37=>0xE97A,
+0x9A45=>0xE97B,
+0x9A42=>0xE97C,
+0x9A40=>0xE97D,
+0x9A43=>0xE97E,
+0x9A3E=>0xE980,
+0x9A55=>0xE981,
+0x9A4D=>0xE982,
+0x9A5B=>0xE983,
+0x9A57=>0xE984,
+0x9A5F=>0xE985,
+0x9A62=>0xE986,
+0x9A65=>0xE987,
+0x9A64=>0xE988,
+0x9A69=>0xE989,
+0x9A6B=>0xE98A,
+0x9A6A=>0xE98B,
+0x9AAD=>0xE98C,
+0x9AB0=>0xE98D,
+0x9ABC=>0xE98E,
+0x9AC0=>0xE98F,
+0x9ACF=>0xE990,
+0x9AD1=>0xE991,
+0x9AD3=>0xE992,
+0x9AD4=>0xE993,
+0x9ADE=>0xE994,
+0x9ADF=>0xE995,
+0x9AE2=>0xE996,
+0x9AE3=>0xE997,
+0x9AE6=>0xE998,
+0x9AEF=>0xE999,
+0x9AEB=>0xE99A,
+0x9AEE=>0xE99B,
+0x9AF4=>0xE99C,
+0x9AF1=>0xE99D,
+0x9AF7=>0xE99E,
+0x9AFB=>0xE99F,
+0x9B06=>0xE9A0,
+0x9B18=>0xE9A1,
+0x9B1A=>0xE9A2,
+0x9B1F=>0xE9A3,
+0x9B22=>0xE9A4,
+0x9B23=>0xE9A5,
+0x9B25=>0xE9A6,
+0x9B27=>0xE9A7,
+0x9B28=>0xE9A8,
+0x9B29=>0xE9A9,
+0x9B2A=>0xE9AA,
+0x9B2E=>0xE9AB,
+0x9B2F=>0xE9AC,
+0x9B32=>0xE9AD,
+0x9B44=>0xE9AE,
+0x9B43=>0xE9AF,
+0x9B4F=>0xE9B0,
+0x9B4D=>0xE9B1,
+0x9B4E=>0xE9B2,
+0x9B51=>0xE9B3,
+0x9B58=>0xE9B4,
+0x9B74=>0xE9B5,
+0x9B93=>0xE9B6,
+0x9B83=>0xE9B7,
+0x9B91=>0xE9B8,
+0x9B96=>0xE9B9,
+0x9B97=>0xE9BA,
+0x9B9F=>0xE9BB,
+0x9BA0=>0xE9BC,
+0x9BA8=>0xE9BD,
+0x9BB4=>0xE9BE,
+0x9BC0=>0xE9BF,
+0x9BCA=>0xE9C0,
+0x9BB9=>0xE9C1,
+0x9BC6=>0xE9C2,
+0x9BCF=>0xE9C3,
+0x9BD1=>0xE9C4,
+0x9BD2=>0xE9C5,
+0x9BE3=>0xE9C6,
+0x9BE2=>0xE9C7,
+0x9BE4=>0xE9C8,
+0x9BD4=>0xE9C9,
+0x9BE1=>0xE9CA,
+0x9C3A=>0xE9CB,
+0x9BF2=>0xE9CC,
+0x9BF1=>0xE9CD,
+0x9BF0=>0xE9CE,
+0x9C15=>0xE9CF,
+0x9C14=>0xE9D0,
+0x9C09=>0xE9D1,
+0x9C13=>0xE9D2,
+0x9C0C=>0xE9D3,
+0x9C06=>0xE9D4,
+0x9C08=>0xE9D5,
+0x9C12=>0xE9D6,
+0x9C0A=>0xE9D7,
+0x9C04=>0xE9D8,
+0x9C2E=>0xE9D9,
+0x9C1B=>0xE9DA,
+0x9C25=>0xE9DB,
+0x9C24=>0xE9DC,
+0x9C21=>0xE9DD,
+0x9C30=>0xE9DE,
+0x9C47=>0xE9DF,
+0x9C32=>0xE9E0,
+0x9C46=>0xE9E1,
+0x9C3E=>0xE9E2,
+0x9C5A=>0xE9E3,
+0x9C60=>0xE9E4,
+0x9C67=>0xE9E5,
+0x9C76=>0xE9E6,
+0x9C78=>0xE9E7,
+0x9CE7=>0xE9E8,
+0x9CEC=>0xE9E9,
+0x9CF0=>0xE9EA,
+0x9D09=>0xE9EB,
+0x9D08=>0xE9EC,
+0x9CEB=>0xE9ED,
+0x9D03=>0xE9EE,
+0x9D06=>0xE9EF,
+0x9D2A=>0xE9F0,
+0x9D26=>0xE9F1,
+0x9DAF=>0xE9F2,
+0x9D23=>0xE9F3,
+0x9D1F=>0xE9F4,
+0x9D44=>0xE9F5,
+0x9D15=>0xE9F6,
+0x9D12=>0xE9F7,
+0x9D41=>0xE9F8,
+0x9D3F=>0xE9F9,
+0x9D3E=>0xE9FA,
+0x9D46=>0xE9FB,
+0x9D48=>0xE9FC,
+0x9D5D=>0xEA40,
+0x9D5E=>0xEA41,
+0x9D64=>0xEA42,
+0x9D51=>0xEA43,
+0x9D50=>0xEA44,
+0x9D59=>0xEA45,
+0x9D72=>0xEA46,
+0x9D89=>0xEA47,
+0x9D87=>0xEA48,
+0x9DAB=>0xEA49,
+0x9D6F=>0xEA4A,
+0x9D7A=>0xEA4B,
+0x9D9A=>0xEA4C,
+0x9DA4=>0xEA4D,
+0x9DA9=>0xEA4E,
+0x9DB2=>0xEA4F,
+0x9DC4=>0xEA50,
+0x9DC1=>0xEA51,
+0x9DBB=>0xEA52,
+0x9DB8=>0xEA53,
+0x9DBA=>0xEA54,
+0x9DC6=>0xEA55,
+0x9DCF=>0xEA56,
+0x9DC2=>0xEA57,
+0x9DD9=>0xEA58,
+0x9DD3=>0xEA59,
+0x9DF8=>0xEA5A,
+0x9DE6=>0xEA5B,
+0x9DED=>0xEA5C,
+0x9DEF=>0xEA5D,
+0x9DFD=>0xEA5E,
+0x9E1A=>0xEA5F,
+0x9E1B=>0xEA60,
+0x9E1E=>0xEA61,
+0x9E75=>0xEA62,
+0x9E79=>0xEA63,
+0x9E7D=>0xEA64,
+0x9E81=>0xEA65,
+0x9E88=>0xEA66,
+0x9E8B=>0xEA67,
+0x9E8C=>0xEA68,
+0x9E92=>0xEA69,
+0x9E95=>0xEA6A,
+0x9E91=>0xEA6B,
+0x9E9D=>0xEA6C,
+0x9EA5=>0xEA6D,
+0x9EA9=>0xEA6E,
+0x9EB8=>0xEA6F,
+0x9EAA=>0xEA70,
+0x9EAD=>0xEA71,
+0x9761=>0xEA72,
+0x9ECC=>0xEA73,
+0x9ECE=>0xEA74,
+0x9ECF=>0xEA75,
+0x9ED0=>0xEA76,
+0x9ED4=>0xEA77,
+0x9EDC=>0xEA78,
+0x9EDE=>0xEA79,
+0x9EDD=>0xEA7A,
+0x9EE0=>0xEA7B,
+0x9EE5=>0xEA7C,
+0x9EE8=>0xEA7D,
+0x9EEF=>0xEA7E,
+0x9EF4=>0xEA80,
+0x9EF6=>0xEA81,
+0x9EF7=>0xEA82,
+0x9EF9=>0xEA83,
+0x9EFB=>0xEA84,
+0x9EFC=>0xEA85,
+0x9EFD=>0xEA86,
+0x9F07=>0xEA87,
+0x9F08=>0xEA88,
+0x76B7=>0xEA89,
+0x9F15=>0xEA8A,
+0x9F21=>0xEA8B,
+0x9F2C=>0xEA8C,
+0x9F3E=>0xEA8D,
+0x9F4A=>0xEA8E,
+0x9F52=>0xEA8F,
+0x9F54=>0xEA90,
+0x9F63=>0xEA91,
+0x9F5F=>0xEA92,
+0x9F60=>0xEA93,
+0x9F61=>0xEA94,
+0x9F66=>0xEA95,
+0x9F67=>0xEA96,
+0x9F6C=>0xEA97,
+0x9F6A=>0xEA98,
+0x9F77=>0xEA99,
+0x9F72=>0xEA9A,
+0x9F76=>0xEA9B,
+0x9F95=>0xEA9C,
+0x9F9C=>0xEA9D,
+0x9FA0=>0xEA9E,
+0x582F=>0xEA9F,
+0x69C7=>0xEAA0,
+0x9059=>0xEAA1,
+0x7464=>0xEAA2,
+0x51DC=>0xEAA3,
+0x7199=>0xEAA4,
+0x7E8A=>0xED40,
+0x891C=>0xED41,
+0x9348=>0xED42,
+0x9288=>0xED43,
+0x84DC=>0xED44,
+0x4FC9=>0xED45,
+0x70BB=>0xED46,
+0x6631=>0xED47,
+0x68C8=>0xED48,
+0x92F9=>0xED49,
+0x66FB=>0xED4A,
+0x5F45=>0xED4B,
+0x4E28=>0xED4C,
+0x4EE1=>0xED4D,
+0x4EFC=>0xED4E,
+0x4F00=>0xED4F,
+0x4F03=>0xED50,
+0x4F39=>0xED51,
+0x4F56=>0xED52,
+0x4F92=>0xED53,
+0x4F8A=>0xED54,
+0x4F9A=>0xED55,
+0x4F94=>0xED56,
+0x4FCD=>0xED57,
+0x5040=>0xED58,
+0x5022=>0xED59,
+0x4FFF=>0xED5A,
+0x501E=>0xED5B,
+0x5046=>0xED5C,
+0x5070=>0xED5D,
+0x5042=>0xED5E,
+0x5094=>0xED5F,
+0x50F4=>0xED60,
+0x50D8=>0xED61,
+0x514A=>0xED62,
+0x5164=>0xED63,
+0x519D=>0xED64,
+0x51BE=>0xED65,
+0x51EC=>0xED66,
+0x5215=>0xED67,
+0x529C=>0xED68,
+0x52A6=>0xED69,
+0x52C0=>0xED6A,
+0x52DB=>0xED6B,
+0x5300=>0xED6C,
+0x5307=>0xED6D,
+0x5324=>0xED6E,
+0x5372=>0xED6F,
+0x5393=>0xED70,
+0x53B2=>0xED71,
+0x53DD=>0xED72,
+0xFA0E=>0xED73,
+0x549C=>0xED74,
+0x548A=>0xED75,
+0x54A9=>0xED76,
+0x54FF=>0xED77,
+0x5586=>0xED78,
+0x5759=>0xED79,
+0x5765=>0xED7A,
+0x57AC=>0xED7B,
+0x57C8=>0xED7C,
+0x57C7=>0xED7D,
+0xFA0F=>0xED7E,
+0xFA10=>0xED80,
+0x589E=>0xED81,
+0x58B2=>0xED82,
+0x590B=>0xED83,
+0x5953=>0xED84,
+0x595B=>0xED85,
+0x595D=>0xED86,
+0x5963=>0xED87,
+0x59A4=>0xED88,
+0x59BA=>0xED89,
+0x5B56=>0xED8A,
+0x5BC0=>0xED8B,
+0x752F=>0xED8C,
+0x5BD8=>0xED8D,
+0x5BEC=>0xED8E,
+0x5C1E=>0xED8F,
+0x5CA6=>0xED90,
+0x5CBA=>0xED91,
+0x5CF5=>0xED92,
+0x5D27=>0xED93,
+0x5D53=>0xED94,
+0xFA11=>0xED95,
+0x5D42=>0xED96,
+0x5D6D=>0xED97,
+0x5DB8=>0xED98,
+0x5DB9=>0xED99,
+0x5DD0=>0xED9A,
+0x5F21=>0xED9B,
+0x5F34=>0xED9C,
+0x5F67=>0xED9D,
+0x5FB7=>0xED9E,
+0x5FDE=>0xED9F,
+0x605D=>0xEDA0,
+0x6085=>0xEDA1,
+0x608A=>0xEDA2,
+0x60DE=>0xEDA3,
+0x60D5=>0xEDA4,
+0x6120=>0xEDA5,
+0x60F2=>0xEDA6,
+0x6111=>0xEDA7,
+0x6137=>0xEDA8,
+0x6130=>0xEDA9,
+0x6198=>0xEDAA,
+0x6213=>0xEDAB,
+0x62A6=>0xEDAC,
+0x63F5=>0xEDAD,
+0x6460=>0xEDAE,
+0x649D=>0xEDAF,
+0x64CE=>0xEDB0,
+0x654E=>0xEDB1,
+0x6600=>0xEDB2,
+0x6615=>0xEDB3,
+0x663B=>0xEDB4,
+0x6609=>0xEDB5,
+0x662E=>0xEDB6,
+0x661E=>0xEDB7,
+0x6624=>0xEDB8,
+0x6665=>0xEDB9,
+0x6657=>0xEDBA,
+0x6659=>0xEDBB,
+0xFA12=>0xEDBC,
+0x6673=>0xEDBD,
+0x6699=>0xEDBE,
+0x66A0=>0xEDBF,
+0x66B2=>0xEDC0,
+0x66BF=>0xEDC1,
+0x66FA=>0xEDC2,
+0x670E=>0xEDC3,
+0xF929=>0xEDC4,
+0x6766=>0xEDC5,
+0x67BB=>0xEDC6,
+0x6852=>0xEDC7,
+0x67C0=>0xEDC8,
+0x6801=>0xEDC9,
+0x6844=>0xEDCA,
+0x68CF=>0xEDCB,
+0xFA13=>0xEDCC,
+0x6968=>0xEDCD,
+0xFA14=>0xEDCE,
+0x6998=>0xEDCF,
+0x69E2=>0xEDD0,
+0x6A30=>0xEDD1,
+0x6A6B=>0xEDD2,
+0x6A46=>0xEDD3,
+0x6A73=>0xEDD4,
+0x6A7E=>0xEDD5,
+0x6AE2=>0xEDD6,
+0x6AE4=>0xEDD7,
+0x6BD6=>0xEDD8,
+0x6C3F=>0xEDD9,
+0x6C5C=>0xEDDA,
+0x6C86=>0xEDDB,
+0x6C6F=>0xEDDC,
+0x6CDA=>0xEDDD,
+0x6D04=>0xEDDE,
+0x6D87=>0xEDDF,
+0x6D6F=>0xEDE0,
+0x6D96=>0xEDE1,
+0x6DAC=>0xEDE2,
+0x6DCF=>0xEDE3,
+0x6DF8=>0xEDE4,
+0x6DF2=>0xEDE5,
+0x6DFC=>0xEDE6,
+0x6E39=>0xEDE7,
+0x6E5C=>0xEDE8,
+0x6E27=>0xEDE9,
+0x6E3C=>0xEDEA,
+0x6EBF=>0xEDEB,
+0x6F88=>0xEDEC,
+0x6FB5=>0xEDED,
+0x6FF5=>0xEDEE,
+0x7005=>0xEDEF,
+0x7007=>0xEDF0,
+0x7028=>0xEDF1,
+0x7085=>0xEDF2,
+0x70AB=>0xEDF3,
+0x710F=>0xEDF4,
+0x7104=>0xEDF5,
+0x715C=>0xEDF6,
+0x7146=>0xEDF7,
+0x7147=>0xEDF8,
+0xFA15=>0xEDF9,
+0x71C1=>0xEDFA,
+0x71FE=>0xEDFB,
+0x72B1=>0xEDFC,
+0x72BE=>0xEE40,
+0x7324=>0xEE41,
+0xFA16=>0xEE42,
+0x7377=>0xEE43,
+0x73BD=>0xEE44,
+0x73C9=>0xEE45,
+0x73D6=>0xEE46,
+0x73E3=>0xEE47,
+0x73D2=>0xEE48,
+0x7407=>0xEE49,
+0x73F5=>0xEE4A,
+0x7426=>0xEE4B,
+0x742A=>0xEE4C,
+0x7429=>0xEE4D,
+0x742E=>0xEE4E,
+0x7462=>0xEE4F,
+0x7489=>0xEE50,
+0x749F=>0xEE51,
+0x7501=>0xEE52,
+0x756F=>0xEE53,
+0x7682=>0xEE54,
+0x769C=>0xEE55,
+0x769E=>0xEE56,
+0x769B=>0xEE57,
+0x76A6=>0xEE58,
+0xFA17=>0xEE59,
+0x7746=>0xEE5A,
+0x52AF=>0xEE5B,
+0x7821=>0xEE5C,
+0x784E=>0xEE5D,
+0x7864=>0xEE5E,
+0x787A=>0xEE5F,
+0x7930=>0xEE60,
+0xFA18=>0xEE61,
+0xFA19=>0xEE62,
+0xFA1A=>0xEE63,
+0x7994=>0xEE64,
+0xFA1B=>0xEE65,
+0x799B=>0xEE66,
+0x7AD1=>0xEE67,
+0x7AE7=>0xEE68,
+0xFA1C=>0xEE69,
+0x7AEB=>0xEE6A,
+0x7B9E=>0xEE6B,
+0xFA1D=>0xEE6C,
+0x7D48=>0xEE6D,
+0x7D5C=>0xEE6E,
+0x7DB7=>0xEE6F,
+0x7DA0=>0xEE70,
+0x7DD6=>0xEE71,
+0x7E52=>0xEE72,
+0x7F47=>0xEE73,
+0x7FA1=>0xEE74,
+0xFA1E=>0xEE75,
+0x8301=>0xEE76,
+0x8362=>0xEE77,
+0x837F=>0xEE78,
+0x83C7=>0xEE79,
+0x83F6=>0xEE7A,
+0x8448=>0xEE7B,
+0x84B4=>0xEE7C,
+0x8553=>0xEE7D,
+0x8559=>0xEE7E,
+0x856B=>0xEE80,
+0xFA1F=>0xEE81,
+0x85B0=>0xEE82,
+0xFA20=>0xEE83,
+0xFA21=>0xEE84,
+0x8807=>0xEE85,
+0x88F5=>0xEE86,
+0x8A12=>0xEE87,
+0x8A37=>0xEE88,
+0x8A79=>0xEE89,
+0x8AA7=>0xEE8A,
+0x8ABE=>0xEE8B,
+0x8ADF=>0xEE8C,
+0xFA22=>0xEE8D,
+0x8AF6=>0xEE8E,
+0x8B53=>0xEE8F,
+0x8B7F=>0xEE90,
+0x8CF0=>0xEE91,
+0x8CF4=>0xEE92,
+0x8D12=>0xEE93,
+0x8D76=>0xEE94,
+0xFA23=>0xEE95,
+0x8ECF=>0xEE96,
+0xFA24=>0xEE97,
+0xFA25=>0xEE98,
+0x9067=>0xEE99,
+0x90DE=>0xEE9A,
+0xFA26=>0xEE9B,
+0x9115=>0xEE9C,
+0x9127=>0xEE9D,
+0x91DA=>0xEE9E,
+0x91D7=>0xEE9F,
+0x91DE=>0xEEA0,
+0x91ED=>0xEEA1,
+0x91EE=>0xEEA2,
+0x91E4=>0xEEA3,
+0x91E5=>0xEEA4,
+0x9206=>0xEEA5,
+0x9210=>0xEEA6,
+0x920A=>0xEEA7,
+0x923A=>0xEEA8,
+0x9240=>0xEEA9,
+0x923C=>0xEEAA,
+0x924E=>0xEEAB,
+0x9259=>0xEEAC,
+0x9251=>0xEEAD,
+0x9239=>0xEEAE,
+0x9267=>0xEEAF,
+0x92A7=>0xEEB0,
+0x9277=>0xEEB1,
+0x9278=>0xEEB2,
+0x92E7=>0xEEB3,
+0x92D7=>0xEEB4,
+0x92D9=>0xEEB5,
+0x92D0=>0xEEB6,
+0xFA27=>0xEEB7,
+0x92D5=>0xEEB8,
+0x92E0=>0xEEB9,
+0x92D3=>0xEEBA,
+0x9325=>0xEEBB,
+0x9321=>0xEEBC,
+0x92FB=>0xEEBD,
+0xFA28=>0xEEBE,
+0x931E=>0xEEBF,
+0x92FF=>0xEEC0,
+0x931D=>0xEEC1,
+0x9302=>0xEEC2,
+0x9370=>0xEEC3,
+0x9357=>0xEEC4,
+0x93A4=>0xEEC5,
+0x93C6=>0xEEC6,
+0x93DE=>0xEEC7,
+0x93F8=>0xEEC8,
+0x9431=>0xEEC9,
+0x9445=>0xEECA,
+0x9448=>0xEECB,
+0x9592=>0xEECC,
+0xF9DC=>0xEECD,
+0xFA29=>0xEECE,
+0x969D=>0xEECF,
+0x96AF=>0xEED0,
+0x9733=>0xEED1,
+0x973B=>0xEED2,
+0x9743=>0xEED3,
+0x974D=>0xEED4,
+0x974F=>0xEED5,
+0x9751=>0xEED6,
+0x9755=>0xEED7,
+0x9857=>0xEED8,
+0x9865=>0xEED9,
+0xFA2A=>0xEEDA,
+0xFA2B=>0xEEDB,
+0x9927=>0xEEDC,
+0xFA2C=>0xEEDD,
+0x999E=>0xEEDE,
+0x9A4E=>0xEEDF,
+0x9AD9=>0xEEE0,
+0x9ADC=>0xEEE1,
+0x9B75=>0xEEE2,
+0x9B72=>0xEEE3,
+0x9B8F=>0xEEE4,
+0x9BB1=>0xEEE5,
+0x9BBB=>0xEEE6,
+0x9C00=>0xEEE7,
+0x9D70=>0xEEE8,
+0x9D6B=>0xEEE9,
+0xFA2D=>0xEEEA,
+0x9E19=>0xEEEB,
+0x9ED1=>0xEEEC,
+0x2170=>0xEEEF,
+0x2171=>0xEEF0,
+0x2172=>0xEEF1,
+0x2173=>0xEEF2,
+0x2174=>0xEEF3,
+0x2175=>0xEEF4,
+0x2176=>0xEEF5,
+0x2177=>0xEEF6,
+0x2178=>0xEEF7,
+0x2179=>0xEEF8,
+0xFFE2=>0xEEF9,
+0xFFE4=>0xEEFA,
+0xFF07=>0xEEFB,
+0xFF02=>0xEEFC,
+0xE000=>0xF040,
+0xE001=>0xF041,
+0xE002=>0xF042,
+0xE003=>0xF043,
+0xE004=>0xF044,
+0xE005=>0xF045,
+0xE006=>0xF046,
+0xE007=>0xF047,
+0xE008=>0xF048,
+0xE009=>0xF049,
+0xE00A=>0xF04A,
+0xE00B=>0xF04B,
+0xE00C=>0xF04C,
+0xE00D=>0xF04D,
+0xE00E=>0xF04E,
+0xE00F=>0xF04F,
+0xE010=>0xF050,
+0xE011=>0xF051,
+0xE012=>0xF052,
+0xE013=>0xF053,
+0xE014=>0xF054,
+0xE015=>0xF055,
+0xE016=>0xF056,
+0xE017=>0xF057,
+0xE018=>0xF058,
+0xE019=>0xF059,
+0xE01A=>0xF05A,
+0xE01B=>0xF05B,
+0xE01C=>0xF05C,
+0xE01D=>0xF05D,
+0xE01E=>0xF05E,
+0xE01F=>0xF05F,
+0xE020=>0xF060,
+0xE021=>0xF061,
+0xE022=>0xF062,
+0xE023=>0xF063,
+0xE024=>0xF064,
+0xE025=>0xF065,
+0xE026=>0xF066,
+0xE027=>0xF067,
+0xE028=>0xF068,
+0xE029=>0xF069,
+0xE02A=>0xF06A,
+0xE02B=>0xF06B,
+0xE02C=>0xF06C,
+0xE02D=>0xF06D,
+0xE02E=>0xF06E,
+0xE02F=>0xF06F,
+0xE030=>0xF070,
+0xE031=>0xF071,
+0xE032=>0xF072,
+0xE033=>0xF073,
+0xE034=>0xF074,
+0xE035=>0xF075,
+0xE036=>0xF076,
+0xE037=>0xF077,
+0xE038=>0xF078,
+0xE039=>0xF079,
+0xE03A=>0xF07A,
+0xE03B=>0xF07B,
+0xE03C=>0xF07C,
+0xE03D=>0xF07D,
+0xE03E=>0xF07E,
+0xE03F=>0xF080,
+0xE040=>0xF081,
+0xE041=>0xF082,
+0xE042=>0xF083,
+0xE043=>0xF084,
+0xE044=>0xF085,
+0xE045=>0xF086,
+0xE046=>0xF087,
+0xE047=>0xF088,
+0xE048=>0xF089,
+0xE049=>0xF08A,
+0xE04A=>0xF08B,
+0xE04B=>0xF08C,
+0xE04C=>0xF08D,
+0xE04D=>0xF08E,
+0xE04E=>0xF08F,
+0xE04F=>0xF090,
+0xE050=>0xF091,
+0xE051=>0xF092,
+0xE052=>0xF093,
+0xE053=>0xF094,
+0xE054=>0xF095,
+0xE055=>0xF096,
+0xE056=>0xF097,
+0xE057=>0xF098,
+0xE058=>0xF099,
+0xE059=>0xF09A,
+0xE05A=>0xF09B,
+0xE05B=>0xF09C,
+0xE05C=>0xF09D,
+0xE05D=>0xF09E,
+0xE05E=>0xF09F,
+0xE05F=>0xF0A0,
+0xE060=>0xF0A1,
+0xE061=>0xF0A2,
+0xE062=>0xF0A3,
+0xE063=>0xF0A4,
+0xE064=>0xF0A5,
+0xE065=>0xF0A6,
+0xE066=>0xF0A7,
+0xE067=>0xF0A8,
+0xE068=>0xF0A9,
+0xE069=>0xF0AA,
+0xE06A=>0xF0AB,
+0xE06B=>0xF0AC,
+0xE06C=>0xF0AD,
+0xE06D=>0xF0AE,
+0xE06E=>0xF0AF,
+0xE06F=>0xF0B0,
+0xE070=>0xF0B1,
+0xE071=>0xF0B2,
+0xE072=>0xF0B3,
+0xE073=>0xF0B4,
+0xE074=>0xF0B5,
+0xE075=>0xF0B6,
+0xE076=>0xF0B7,
+0xE077=>0xF0B8,
+0xE078=>0xF0B9,
+0xE079=>0xF0BA,
+0xE07A=>0xF0BB,
+0xE07B=>0xF0BC,
+0xE07C=>0xF0BD,
+0xE07D=>0xF0BE,
+0xE07E=>0xF0BF,
+0xE07F=>0xF0C0,
+0xE080=>0xF0C1,
+0xE081=>0xF0C2,
+0xE082=>0xF0C3,
+0xE083=>0xF0C4,
+0xE084=>0xF0C5,
+0xE085=>0xF0C6,
+0xE086=>0xF0C7,
+0xE087=>0xF0C8,
+0xE088=>0xF0C9,
+0xE089=>0xF0CA,
+0xE08A=>0xF0CB,
+0xE08B=>0xF0CC,
+0xE08C=>0xF0CD,
+0xE08D=>0xF0CE,
+0xE08E=>0xF0CF,
+0xE08F=>0xF0D0,
+0xE090=>0xF0D1,
+0xE091=>0xF0D2,
+0xE092=>0xF0D3,
+0xE093=>0xF0D4,
+0xE094=>0xF0D5,
+0xE095=>0xF0D6,
+0xE096=>0xF0D7,
+0xE097=>0xF0D8,
+0xE098=>0xF0D9,
+0xE099=>0xF0DA,
+0xE09A=>0xF0DB,
+0xE09B=>0xF0DC,
+0xE09C=>0xF0DD,
+0xE09D=>0xF0DE,
+0xE09E=>0xF0DF,
+0xE09F=>0xF0E0,
+0xE0A0=>0xF0E1,
+0xE0A1=>0xF0E2,
+0xE0A2=>0xF0E3,
+0xE0A3=>0xF0E4,
+0xE0A4=>0xF0E5,
+0xE0A5=>0xF0E6,
+0xE0A6=>0xF0E7,
+0xE0A7=>0xF0E8,
+0xE0A8=>0xF0E9,
+0xE0A9=>0xF0EA,
+0xE0AA=>0xF0EB,
+0xE0AB=>0xF0EC,
+0xE0AC=>0xF0ED,
+0xE0AD=>0xF0EE,
+0xE0AE=>0xF0EF,
+0xE0AF=>0xF0F0,
+0xE0B0=>0xF0F1,
+0xE0B1=>0xF0F2,
+0xE0B2=>0xF0F3,
+0xE0B3=>0xF0F4,
+0xE0B4=>0xF0F5,
+0xE0B5=>0xF0F6,
+0xE0B6=>0xF0F7,
+0xE0B7=>0xF0F8,
+0xE0B8=>0xF0F9,
+0xE0B9=>0xF0FA,
+0xE0BA=>0xF0FB,
+0xE0BB=>0xF0FC,
+0xE0BC=>0xF140,
+0xE0BD=>0xF141,
+0xE0BE=>0xF142,
+0xE0BF=>0xF143,
+0xE0C0=>0xF144,
+0xE0C1=>0xF145,
+0xE0C2=>0xF146,
+0xE0C3=>0xF147,
+0xE0C4=>0xF148,
+0xE0C5=>0xF149,
+0xE0C6=>0xF14A,
+0xE0C7=>0xF14B,
+0xE0C8=>0xF14C,
+0xE0C9=>0xF14D,
+0xE0CA=>0xF14E,
+0xE0CB=>0xF14F,
+0xE0CC=>0xF150,
+0xE0CD=>0xF151,
+0xE0CE=>0xF152,
+0xE0CF=>0xF153,
+0xE0D0=>0xF154,
+0xE0D1=>0xF155,
+0xE0D2=>0xF156,
+0xE0D3=>0xF157,
+0xE0D4=>0xF158,
+0xE0D5=>0xF159,
+0xE0D6=>0xF15A,
+0xE0D7=>0xF15B,
+0xE0D8=>0xF15C,
+0xE0D9=>0xF15D,
+0xE0DA=>0xF15E,
+0xE0DB=>0xF15F,
+0xE0DC=>0xF160,
+0xE0DD=>0xF161,
+0xE0DE=>0xF162,
+0xE0DF=>0xF163,
+0xE0E0=>0xF164,
+0xE0E1=>0xF165,
+0xE0E2=>0xF166,
+0xE0E3=>0xF167,
+0xE0E4=>0xF168,
+0xE0E5=>0xF169,
+0xE0E6=>0xF16A,
+0xE0E7=>0xF16B,
+0xE0E8=>0xF16C,
+0xE0E9=>0xF16D,
+0xE0EA=>0xF16E,
+0xE0EB=>0xF16F,
+0xE0EC=>0xF170,
+0xE0ED=>0xF171,
+0xE0EE=>0xF172,
+0xE0EF=>0xF173,
+0xE0F0=>0xF174,
+0xE0F1=>0xF175,
+0xE0F2=>0xF176,
+0xE0F3=>0xF177,
+0xE0F4=>0xF178,
+0xE0F5=>0xF179,
+0xE0F6=>0xF17A,
+0xE0F7=>0xF17B,
+0xE0F8=>0xF17C,
+0xE0F9=>0xF17D,
+0xE0FA=>0xF17E,
+0xE0FB=>0xF180,
+0xE0FC=>0xF181,
+0xE0FD=>0xF182,
+0xE0FE=>0xF183,
+0xE0FF=>0xF184,
+0xE100=>0xF185,
+0xE101=>0xF186,
+0xE102=>0xF187,
+0xE103=>0xF188,
+0xE104=>0xF189,
+0xE105=>0xF18A,
+0xE106=>0xF18B,
+0xE107=>0xF18C,
+0xE108=>0xF18D,
+0xE109=>0xF18E,
+0xE10A=>0xF18F,
+0xE10B=>0xF190,
+0xE10C=>0xF191,
+0xE10D=>0xF192,
+0xE10E=>0xF193,
+0xE10F=>0xF194,
+0xE110=>0xF195,
+0xE111=>0xF196,
+0xE112=>0xF197,
+0xE113=>0xF198,
+0xE114=>0xF199,
+0xE115=>0xF19A,
+0xE116=>0xF19B,
+0xE117=>0xF19C,
+0xE118=>0xF19D,
+0xE119=>0xF19E,
+0xE11A=>0xF19F,
+0xE11B=>0xF1A0,
+0xE11C=>0xF1A1,
+0xE11D=>0xF1A2,
+0xE11E=>0xF1A3,
+0xE11F=>0xF1A4,
+0xE120=>0xF1A5,
+0xE121=>0xF1A6,
+0xE122=>0xF1A7,
+0xE123=>0xF1A8,
+0xE124=>0xF1A9,
+0xE125=>0xF1AA,
+0xE126=>0xF1AB,
+0xE127=>0xF1AC,
+0xE128=>0xF1AD,
+0xE129=>0xF1AE,
+0xE12A=>0xF1AF,
+0xE12B=>0xF1B0,
+0xE12C=>0xF1B1,
+0xE12D=>0xF1B2,
+0xE12E=>0xF1B3,
+0xE12F=>0xF1B4,
+0xE130=>0xF1B5,
+0xE131=>0xF1B6,
+0xE132=>0xF1B7,
+0xE133=>0xF1B8,
+0xE134=>0xF1B9,
+0xE135=>0xF1BA,
+0xE136=>0xF1BB,
+0xE137=>0xF1BC,
+0xE138=>0xF1BD,
+0xE139=>0xF1BE,
+0xE13A=>0xF1BF,
+0xE13B=>0xF1C0,
+0xE13C=>0xF1C1,
+0xE13D=>0xF1C2,
+0xE13E=>0xF1C3,
+0xE13F=>0xF1C4,
+0xE140=>0xF1C5,
+0xE141=>0xF1C6,
+0xE142=>0xF1C7,
+0xE143=>0xF1C8,
+0xE144=>0xF1C9,
+0xE145=>0xF1CA,
+0xE146=>0xF1CB,
+0xE147=>0xF1CC,
+0xE148=>0xF1CD,
+0xE149=>0xF1CE,
+0xE14A=>0xF1CF,
+0xE14B=>0xF1D0,
+0xE14C=>0xF1D1,
+0xE14D=>0xF1D2,
+0xE14E=>0xF1D3,
+0xE14F=>0xF1D4,
+0xE150=>0xF1D5,
+0xE151=>0xF1D6,
+0xE152=>0xF1D7,
+0xE153=>0xF1D8,
+0xE154=>0xF1D9,
+0xE155=>0xF1DA,
+0xE156=>0xF1DB,
+0xE157=>0xF1DC,
+0xE158=>0xF1DD,
+0xE159=>0xF1DE,
+0xE15A=>0xF1DF,
+0xE15B=>0xF1E0,
+0xE15C=>0xF1E1,
+0xE15D=>0xF1E2,
+0xE15E=>0xF1E3,
+0xE15F=>0xF1E4,
+0xE160=>0xF1E5,
+0xE161=>0xF1E6,
+0xE162=>0xF1E7,
+0xE163=>0xF1E8,
+0xE164=>0xF1E9,
+0xE165=>0xF1EA,
+0xE166=>0xF1EB,
+0xE167=>0xF1EC,
+0xE168=>0xF1ED,
+0xE169=>0xF1EE,
+0xE16A=>0xF1EF,
+0xE16B=>0xF1F0,
+0xE16C=>0xF1F1,
+0xE16D=>0xF1F2,
+0xE16E=>0xF1F3,
+0xE16F=>0xF1F4,
+0xE170=>0xF1F5,
+0xE171=>0xF1F6,
+0xE172=>0xF1F7,
+0xE173=>0xF1F8,
+0xE174=>0xF1F9,
+0xE175=>0xF1FA,
+0xE176=>0xF1FB,
+0xE177=>0xF1FC,
+0xE178=>0xF240,
+0xE179=>0xF241,
+0xE17A=>0xF242,
+0xE17B=>0xF243,
+0xE17C=>0xF244,
+0xE17D=>0xF245,
+0xE17E=>0xF246,
+0xE17F=>0xF247,
+0xE180=>0xF248,
+0xE181=>0xF249,
+0xE182=>0xF24A,
+0xE183=>0xF24B,
+0xE184=>0xF24C,
+0xE185=>0xF24D,
+0xE186=>0xF24E,
+0xE187=>0xF24F,
+0xE188=>0xF250,
+0xE189=>0xF251,
+0xE18A=>0xF252,
+0xE18B=>0xF253,
+0xE18C=>0xF254,
+0xE18D=>0xF255,
+0xE18E=>0xF256,
+0xE18F=>0xF257,
+0xE190=>0xF258,
+0xE191=>0xF259,
+0xE192=>0xF25A,
+0xE193=>0xF25B,
+0xE194=>0xF25C,
+0xE195=>0xF25D,
+0xE196=>0xF25E,
+0xE197=>0xF25F,
+0xE198=>0xF260,
+0xE199=>0xF261,
+0xE19A=>0xF262,
+0xE19B=>0xF263,
+0xE19C=>0xF264,
+0xE19D=>0xF265,
+0xE19E=>0xF266,
+0xE19F=>0xF267,
+0xE1A0=>0xF268,
+0xE1A1=>0xF269,
+0xE1A2=>0xF26A,
+0xE1A3=>0xF26B,
+0xE1A4=>0xF26C,
+0xE1A5=>0xF26D,
+0xE1A6=>0xF26E,
+0xE1A7=>0xF26F,
+0xE1A8=>0xF270,
+0xE1A9=>0xF271,
+0xE1AA=>0xF272,
+0xE1AB=>0xF273,
+0xE1AC=>0xF274,
+0xE1AD=>0xF275,
+0xE1AE=>0xF276,
+0xE1AF=>0xF277,
+0xE1B0=>0xF278,
+0xE1B1=>0xF279,
+0xE1B2=>0xF27A,
+0xE1B3=>0xF27B,
+0xE1B4=>0xF27C,
+0xE1B5=>0xF27D,
+0xE1B6=>0xF27E,
+0xE1B7=>0xF280,
+0xE1B8=>0xF281,
+0xE1B9=>0xF282,
+0xE1BA=>0xF283,
+0xE1BB=>0xF284,
+0xE1BC=>0xF285,
+0xE1BD=>0xF286,
+0xE1BE=>0xF287,
+0xE1BF=>0xF288,
+0xE1C0=>0xF289,
+0xE1C1=>0xF28A,
+0xE1C2=>0xF28B,
+0xE1C3=>0xF28C,
+0xE1C4=>0xF28D,
+0xE1C5=>0xF28E,
+0xE1C6=>0xF28F,
+0xE1C7=>0xF290,
+0xE1C8=>0xF291,
+0xE1C9=>0xF292,
+0xE1CA=>0xF293,
+0xE1CB=>0xF294,
+0xE1CC=>0xF295,
+0xE1CD=>0xF296,
+0xE1CE=>0xF297,
+0xE1CF=>0xF298,
+0xE1D0=>0xF299,
+0xE1D1=>0xF29A,
+0xE1D2=>0xF29B,
+0xE1D3=>0xF29C,
+0xE1D4=>0xF29D,
+0xE1D5=>0xF29E,
+0xE1D6=>0xF29F,
+0xE1D7=>0xF2A0,
+0xE1D8=>0xF2A1,
+0xE1D9=>0xF2A2,
+0xE1DA=>0xF2A3,
+0xE1DB=>0xF2A4,
+0xE1DC=>0xF2A5,
+0xE1DD=>0xF2A6,
+0xE1DE=>0xF2A7,
+0xE1DF=>0xF2A8,
+0xE1E0=>0xF2A9,
+0xE1E1=>0xF2AA,
+0xE1E2=>0xF2AB,
+0xE1E3=>0xF2AC,
+0xE1E4=>0xF2AD,
+0xE1E5=>0xF2AE,
+0xE1E6=>0xF2AF,
+0xE1E7=>0xF2B0,
+0xE1E8=>0xF2B1,
+0xE1E9=>0xF2B2,
+0xE1EA=>0xF2B3,
+0xE1EB=>0xF2B4,
+0xE1EC=>0xF2B5,
+0xE1ED=>0xF2B6,
+0xE1EE=>0xF2B7,
+0xE1EF=>0xF2B8,
+0xE1F0=>0xF2B9,
+0xE1F1=>0xF2BA,
+0xE1F2=>0xF2BB,
+0xE1F3=>0xF2BC,
+0xE1F4=>0xF2BD,
+0xE1F5=>0xF2BE,
+0xE1F6=>0xF2BF,
+0xE1F7=>0xF2C0,
+0xE1F8=>0xF2C1,
+0xE1F9=>0xF2C2,
+0xE1FA=>0xF2C3,
+0xE1FB=>0xF2C4,
+0xE1FC=>0xF2C5,
+0xE1FD=>0xF2C6,
+0xE1FE=>0xF2C7,
+0xE1FF=>0xF2C8,
+0xE200=>0xF2C9,
+0xE201=>0xF2CA,
+0xE202=>0xF2CB,
+0xE203=>0xF2CC,
+0xE204=>0xF2CD,
+0xE205=>0xF2CE,
+0xE206=>0xF2CF,
+0xE207=>0xF2D0,
+0xE208=>0xF2D1,
+0xE209=>0xF2D2,
+0xE20A=>0xF2D3,
+0xE20B=>0xF2D4,
+0xE20C=>0xF2D5,
+0xE20D=>0xF2D6,
+0xE20E=>0xF2D7,
+0xE20F=>0xF2D8,
+0xE210=>0xF2D9,
+0xE211=>0xF2DA,
+0xE212=>0xF2DB,
+0xE213=>0xF2DC,
+0xE214=>0xF2DD,
+0xE215=>0xF2DE,
+0xE216=>0xF2DF,
+0xE217=>0xF2E0,
+0xE218=>0xF2E1,
+0xE219=>0xF2E2,
+0xE21A=>0xF2E3,
+0xE21B=>0xF2E4,
+0xE21C=>0xF2E5,
+0xE21D=>0xF2E6,
+0xE21E=>0xF2E7,
+0xE21F=>0xF2E8,
+0xE220=>0xF2E9,
+0xE221=>0xF2EA,
+0xE222=>0xF2EB,
+0xE223=>0xF2EC,
+0xE224=>0xF2ED,
+0xE225=>0xF2EE,
+0xE226=>0xF2EF,
+0xE227=>0xF2F0,
+0xE228=>0xF2F1,
+0xE229=>0xF2F2,
+0xE22A=>0xF2F3,
+0xE22B=>0xF2F4,
+0xE22C=>0xF2F5,
+0xE22D=>0xF2F6,
+0xE22E=>0xF2F7,
+0xE22F=>0xF2F8,
+0xE230=>0xF2F9,
+0xE231=>0xF2FA,
+0xE232=>0xF2FB,
+0xE233=>0xF2FC,
+0xE234=>0xF340,
+0xE235=>0xF341,
+0xE236=>0xF342,
+0xE237=>0xF343,
+0xE238=>0xF344,
+0xE239=>0xF345,
+0xE23A=>0xF346,
+0xE23B=>0xF347,
+0xE23C=>0xF348,
+0xE23D=>0xF349,
+0xE23E=>0xF34A,
+0xE23F=>0xF34B,
+0xE240=>0xF34C,
+0xE241=>0xF34D,
+0xE242=>0xF34E,
+0xE243=>0xF34F,
+0xE244=>0xF350,
+0xE245=>0xF351,
+0xE246=>0xF352,
+0xE247=>0xF353,
+0xE248=>0xF354,
+0xE249=>0xF355,
+0xE24A=>0xF356,
+0xE24B=>0xF357,
+0xE24C=>0xF358,
+0xE24D=>0xF359,
+0xE24E=>0xF35A,
+0xE24F=>0xF35B,
+0xE250=>0xF35C,
+0xE251=>0xF35D,
+0xE252=>0xF35E,
+0xE253=>0xF35F,
+0xE254=>0xF360,
+0xE255=>0xF361,
+0xE256=>0xF362,
+0xE257=>0xF363,
+0xE258=>0xF364,
+0xE259=>0xF365,
+0xE25A=>0xF366,
+0xE25B=>0xF367,
+0xE25C=>0xF368,
+0xE25D=>0xF369,
+0xE25E=>0xF36A,
+0xE25F=>0xF36B,
+0xE260=>0xF36C,
+0xE261=>0xF36D,
+0xE262=>0xF36E,
+0xE263=>0xF36F,
+0xE264=>0xF370,
+0xE265=>0xF371,
+0xE266=>0xF372,
+0xE267=>0xF373,
+0xE268=>0xF374,
+0xE269=>0xF375,
+0xE26A=>0xF376,
+0xE26B=>0xF377,
+0xE26C=>0xF378,
+0xE26D=>0xF379,
+0xE26E=>0xF37A,
+0xE26F=>0xF37B,
+0xE270=>0xF37C,
+0xE271=>0xF37D,
+0xE272=>0xF37E,
+0xE273=>0xF380,
+0xE274=>0xF381,
+0xE275=>0xF382,
+0xE276=>0xF383,
+0xE277=>0xF384,
+0xE278=>0xF385,
+0xE279=>0xF386,
+0xE27A=>0xF387,
+0xE27B=>0xF388,
+0xE27C=>0xF389,
+0xE27D=>0xF38A,
+0xE27E=>0xF38B,
+0xE27F=>0xF38C,
+0xE280=>0xF38D,
+0xE281=>0xF38E,
+0xE282=>0xF38F,
+0xE283=>0xF390,
+0xE284=>0xF391,
+0xE285=>0xF392,
+0xE286=>0xF393,
+0xE287=>0xF394,
+0xE288=>0xF395,
+0xE289=>0xF396,
+0xE28A=>0xF397,
+0xE28B=>0xF398,
+0xE28C=>0xF399,
+0xE28D=>0xF39A,
+0xE28E=>0xF39B,
+0xE28F=>0xF39C,
+0xE290=>0xF39D,
+0xE291=>0xF39E,
+0xE292=>0xF39F,
+0xE293=>0xF3A0,
+0xE294=>0xF3A1,
+0xE295=>0xF3A2,
+0xE296=>0xF3A3,
+0xE297=>0xF3A4,
+0xE298=>0xF3A5,
+0xE299=>0xF3A6,
+0xE29A=>0xF3A7,
+0xE29B=>0xF3A8,
+0xE29C=>0xF3A9,
+0xE29D=>0xF3AA,
+0xE29E=>0xF3AB,
+0xE29F=>0xF3AC,
+0xE2A0=>0xF3AD,
+0xE2A1=>0xF3AE,
+0xE2A2=>0xF3AF,
+0xE2A3=>0xF3B0,
+0xE2A4=>0xF3B1,
+0xE2A5=>0xF3B2,
+0xE2A6=>0xF3B3,
+0xE2A7=>0xF3B4,
+0xE2A8=>0xF3B5,
+0xE2A9=>0xF3B6,
+0xE2AA=>0xF3B7,
+0xE2AB=>0xF3B8,
+0xE2AC=>0xF3B9,
+0xE2AD=>0xF3BA,
+0xE2AE=>0xF3BB,
+0xE2AF=>0xF3BC,
+0xE2B0=>0xF3BD,
+0xE2B1=>0xF3BE,
+0xE2B2=>0xF3BF,
+0xE2B3=>0xF3C0,
+0xE2B4=>0xF3C1,
+0xE2B5=>0xF3C2,
+0xE2B6=>0xF3C3,
+0xE2B7=>0xF3C4,
+0xE2B8=>0xF3C5,
+0xE2B9=>0xF3C6,
+0xE2BA=>0xF3C7,
+0xE2BB=>0xF3C8,
+0xE2BC=>0xF3C9,
+0xE2BD=>0xF3CA,
+0xE2BE=>0xF3CB,
+0xE2BF=>0xF3CC,
+0xE2C0=>0xF3CD,
+0xE2C1=>0xF3CE,
+0xE2C2=>0xF3CF,
+0xE2C3=>0xF3D0,
+0xE2C4=>0xF3D1,
+0xE2C5=>0xF3D2,
+0xE2C6=>0xF3D3,
+0xE2C7=>0xF3D4,
+0xE2C8=>0xF3D5,
+0xE2C9=>0xF3D6,
+0xE2CA=>0xF3D7,
+0xE2CB=>0xF3D8,
+0xE2CC=>0xF3D9,
+0xE2CD=>0xF3DA,
+0xE2CE=>0xF3DB,
+0xE2CF=>0xF3DC,
+0xE2D0=>0xF3DD,
+0xE2D1=>0xF3DE,
+0xE2D2=>0xF3DF,
+0xE2D3=>0xF3E0,
+0xE2D4=>0xF3E1,
+0xE2D5=>0xF3E2,
+0xE2D6=>0xF3E3,
+0xE2D7=>0xF3E4,
+0xE2D8=>0xF3E5,
+0xE2D9=>0xF3E6,
+0xE2DA=>0xF3E7,
+0xE2DB=>0xF3E8,
+0xE2DC=>0xF3E9,
+0xE2DD=>0xF3EA,
+0xE2DE=>0xF3EB,
+0xE2DF=>0xF3EC,
+0xE2E0=>0xF3ED,
+0xE2E1=>0xF3EE,
+0xE2E2=>0xF3EF,
+0xE2E3=>0xF3F0,
+0xE2E4=>0xF3F1,
+0xE2E5=>0xF3F2,
+0xE2E6=>0xF3F3,
+0xE2E7=>0xF3F4,
+0xE2E8=>0xF3F5,
+0xE2E9=>0xF3F6,
+0xE2EA=>0xF3F7,
+0xE2EB=>0xF3F8,
+0xE2EC=>0xF3F9,
+0xE2ED=>0xF3FA,
+0xE2EE=>0xF3FB,
+0xE2EF=>0xF3FC,
+0xE2F0=>0xF440,
+0xE2F1=>0xF441,
+0xE2F2=>0xF442,
+0xE2F3=>0xF443,
+0xE2F4=>0xF444,
+0xE2F5=>0xF445,
+0xE2F6=>0xF446,
+0xE2F7=>0xF447,
+0xE2F8=>0xF448,
+0xE2F9=>0xF449,
+0xE2FA=>0xF44A,
+0xE2FB=>0xF44B,
+0xE2FC=>0xF44C,
+0xE2FD=>0xF44D,
+0xE2FE=>0xF44E,
+0xE2FF=>0xF44F,
+0xE300=>0xF450,
+0xE301=>0xF451,
+0xE302=>0xF452,
+0xE303=>0xF453,
+0xE304=>0xF454,
+0xE305=>0xF455,
+0xE306=>0xF456,
+0xE307=>0xF457,
+0xE308=>0xF458,
+0xE309=>0xF459,
+0xE30A=>0xF45A,
+0xE30B=>0xF45B,
+0xE30C=>0xF45C,
+0xE30D=>0xF45D,
+0xE30E=>0xF45E,
+0xE30F=>0xF45F,
+0xE310=>0xF460,
+0xE311=>0xF461,
+0xE312=>0xF462,
+0xE313=>0xF463,
+0xE314=>0xF464,
+0xE315=>0xF465,
+0xE316=>0xF466,
+0xE317=>0xF467,
+0xE318=>0xF468,
+0xE319=>0xF469,
+0xE31A=>0xF46A,
+0xE31B=>0xF46B,
+0xE31C=>0xF46C,
+0xE31D=>0xF46D,
+0xE31E=>0xF46E,
+0xE31F=>0xF46F,
+0xE320=>0xF470,
+0xE321=>0xF471,
+0xE322=>0xF472,
+0xE323=>0xF473,
+0xE324=>0xF474,
+0xE325=>0xF475,
+0xE326=>0xF476,
+0xE327=>0xF477,
+0xE328=>0xF478,
+0xE329=>0xF479,
+0xE32A=>0xF47A,
+0xE32B=>0xF47B,
+0xE32C=>0xF47C,
+0xE32D=>0xF47D,
+0xE32E=>0xF47E,
+0xE32F=>0xF480,
+0xE330=>0xF481,
+0xE331=>0xF482,
+0xE332=>0xF483,
+0xE333=>0xF484,
+0xE334=>0xF485,
+0xE335=>0xF486,
+0xE336=>0xF487,
+0xE337=>0xF488,
+0xE338=>0xF489,
+0xE339=>0xF48A,
+0xE33A=>0xF48B,
+0xE33B=>0xF48C,
+0xE33C=>0xF48D,
+0xE33D=>0xF48E,
+0xE33E=>0xF48F,
+0xE33F=>0xF490,
+0xE340=>0xF491,
+0xE341=>0xF492,
+0xE342=>0xF493,
+0xE343=>0xF494,
+0xE344=>0xF495,
+0xE345=>0xF496,
+0xE346=>0xF497,
+0xE347=>0xF498,
+0xE348=>0xF499,
+0xE349=>0xF49A,
+0xE34A=>0xF49B,
+0xE34B=>0xF49C,
+0xE34C=>0xF49D,
+0xE34D=>0xF49E,
+0xE34E=>0xF49F,
+0xE34F=>0xF4A0,
+0xE350=>0xF4A1,
+0xE351=>0xF4A2,
+0xE352=>0xF4A3,
+0xE353=>0xF4A4,
+0xE354=>0xF4A5,
+0xE355=>0xF4A6,
+0xE356=>0xF4A7,
+0xE357=>0xF4A8,
+0xE358=>0xF4A9,
+0xE359=>0xF4AA,
+0xE35A=>0xF4AB,
+0xE35B=>0xF4AC,
+0xE35C=>0xF4AD,
+0xE35D=>0xF4AE,
+0xE35E=>0xF4AF,
+0xE35F=>0xF4B0,
+0xE360=>0xF4B1,
+0xE361=>0xF4B2,
+0xE362=>0xF4B3,
+0xE363=>0xF4B4,
+0xE364=>0xF4B5,
+0xE365=>0xF4B6,
+0xE366=>0xF4B7,
+0xE367=>0xF4B8,
+0xE368=>0xF4B9,
+0xE369=>0xF4BA,
+0xE36A=>0xF4BB,
+0xE36B=>0xF4BC,
+0xE36C=>0xF4BD,
+0xE36D=>0xF4BE,
+0xE36E=>0xF4BF,
+0xE36F=>0xF4C0,
+0xE370=>0xF4C1,
+0xE371=>0xF4C2,
+0xE372=>0xF4C3,
+0xE373=>0xF4C4,
+0xE374=>0xF4C5,
+0xE375=>0xF4C6,
+0xE376=>0xF4C7,
+0xE377=>0xF4C8,
+0xE378=>0xF4C9,
+0xE379=>0xF4CA,
+0xE37A=>0xF4CB,
+0xE37B=>0xF4CC,
+0xE37C=>0xF4CD,
+0xE37D=>0xF4CE,
+0xE37E=>0xF4CF,
+0xE37F=>0xF4D0,
+0xE380=>0xF4D1,
+0xE381=>0xF4D2,
+0xE382=>0xF4D3,
+0xE383=>0xF4D4,
+0xE384=>0xF4D5,
+0xE385=>0xF4D6,
+0xE386=>0xF4D7,
+0xE387=>0xF4D8,
+0xE388=>0xF4D9,
+0xE389=>0xF4DA,
+0xE38A=>0xF4DB,
+0xE38B=>0xF4DC,
+0xE38C=>0xF4DD,
+0xE38D=>0xF4DE,
+0xE38E=>0xF4DF,
+0xE38F=>0xF4E0,
+0xE390=>0xF4E1,
+0xE391=>0xF4E2,
+0xE392=>0xF4E3,
+0xE393=>0xF4E4,
+0xE394=>0xF4E5,
+0xE395=>0xF4E6,
+0xE396=>0xF4E7,
+0xE397=>0xF4E8,
+0xE398=>0xF4E9,
+0xE399=>0xF4EA,
+0xE39A=>0xF4EB,
+0xE39B=>0xF4EC,
+0xE39C=>0xF4ED,
+0xE39D=>0xF4EE,
+0xE39E=>0xF4EF,
+0xE39F=>0xF4F0,
+0xE3A0=>0xF4F1,
+0xE3A1=>0xF4F2,
+0xE3A2=>0xF4F3,
+0xE3A3=>0xF4F4,
+0xE3A4=>0xF4F5,
+0xE3A5=>0xF4F6,
+0xE3A6=>0xF4F7,
+0xE3A7=>0xF4F8,
+0xE3A8=>0xF4F9,
+0xE3A9=>0xF4FA,
+0xE3AA=>0xF4FB,
+0xE3AB=>0xF4FC,
+0xE3AC=>0xF540,
+0xE3AD=>0xF541,
+0xE3AE=>0xF542,
+0xE3AF=>0xF543,
+0xE3B0=>0xF544,
+0xE3B1=>0xF545,
+0xE3B2=>0xF546,
+0xE3B3=>0xF547,
+0xE3B4=>0xF548,
+0xE3B5=>0xF549,
+0xE3B6=>0xF54A,
+0xE3B7=>0xF54B,
+0xE3B8=>0xF54C,
+0xE3B9=>0xF54D,
+0xE3BA=>0xF54E,
+0xE3BB=>0xF54F,
+0xE3BC=>0xF550,
+0xE3BD=>0xF551,
+0xE3BE=>0xF552,
+0xE3BF=>0xF553,
+0xE3C0=>0xF554,
+0xE3C1=>0xF555,
+0xE3C2=>0xF556,
+0xE3C3=>0xF557,
+0xE3C4=>0xF558,
+0xE3C5=>0xF559,
+0xE3C6=>0xF55A,
+0xE3C7=>0xF55B,
+0xE3C8=>0xF55C,
+0xE3C9=>0xF55D,
+0xE3CA=>0xF55E,
+0xE3CB=>0xF55F,
+0xE3CC=>0xF560,
+0xE3CD=>0xF561,
+0xE3CE=>0xF562,
+0xE3CF=>0xF563,
+0xE3D0=>0xF564,
+0xE3D1=>0xF565,
+0xE3D2=>0xF566,
+0xE3D3=>0xF567,
+0xE3D4=>0xF568,
+0xE3D5=>0xF569,
+0xE3D6=>0xF56A,
+0xE3D7=>0xF56B,
+0xE3D8=>0xF56C,
+0xE3D9=>0xF56D,
+0xE3DA=>0xF56E,
+0xE3DB=>0xF56F,
+0xE3DC=>0xF570,
+0xE3DD=>0xF571,
+0xE3DE=>0xF572,
+0xE3DF=>0xF573,
+0xE3E0=>0xF574,
+0xE3E1=>0xF575,
+0xE3E2=>0xF576,
+0xE3E3=>0xF577,
+0xE3E4=>0xF578,
+0xE3E5=>0xF579,
+0xE3E6=>0xF57A,
+0xE3E7=>0xF57B,
+0xE3E8=>0xF57C,
+0xE3E9=>0xF57D,
+0xE3EA=>0xF57E,
+0xE3EB=>0xF580,
+0xE3EC=>0xF581,
+0xE3ED=>0xF582,
+0xE3EE=>0xF583,
+0xE3EF=>0xF584,
+0xE3F0=>0xF585,
+0xE3F1=>0xF586,
+0xE3F2=>0xF587,
+0xE3F3=>0xF588,
+0xE3F4=>0xF589,
+0xE3F5=>0xF58A,
+0xE3F6=>0xF58B,
+0xE3F7=>0xF58C,
+0xE3F8=>0xF58D,
+0xE3F9=>0xF58E,
+0xE3FA=>0xF58F,
+0xE3FB=>0xF590,
+0xE3FC=>0xF591,
+0xE3FD=>0xF592,
+0xE3FE=>0xF593,
+0xE3FF=>0xF594,
+0xE400=>0xF595,
+0xE401=>0xF596,
+0xE402=>0xF597,
+0xE403=>0xF598,
+0xE404=>0xF599,
+0xE405=>0xF59A,
+0xE406=>0xF59B,
+0xE407=>0xF59C,
+0xE408=>0xF59D,
+0xE409=>0xF59E,
+0xE40A=>0xF59F,
+0xE40B=>0xF5A0,
+0xE40C=>0xF5A1,
+0xE40D=>0xF5A2,
+0xE40E=>0xF5A3,
+0xE40F=>0xF5A4,
+0xE410=>0xF5A5,
+0xE411=>0xF5A6,
+0xE412=>0xF5A7,
+0xE413=>0xF5A8,
+0xE414=>0xF5A9,
+0xE415=>0xF5AA,
+0xE416=>0xF5AB,
+0xE417=>0xF5AC,
+0xE418=>0xF5AD,
+0xE419=>0xF5AE,
+0xE41A=>0xF5AF,
+0xE41B=>0xF5B0,
+0xE41C=>0xF5B1,
+0xE41D=>0xF5B2,
+0xE41E=>0xF5B3,
+0xE41F=>0xF5B4,
+0xE420=>0xF5B5,
+0xE421=>0xF5B6,
+0xE422=>0xF5B7,
+0xE423=>0xF5B8,
+0xE424=>0xF5B9,
+0xE425=>0xF5BA,
+0xE426=>0xF5BB,
+0xE427=>0xF5BC,
+0xE428=>0xF5BD,
+0xE429=>0xF5BE,
+0xE42A=>0xF5BF,
+0xE42B=>0xF5C0,
+0xE42C=>0xF5C1,
+0xE42D=>0xF5C2,
+0xE42E=>0xF5C3,
+0xE42F=>0xF5C4,
+0xE430=>0xF5C5,
+0xE431=>0xF5C6,
+0xE432=>0xF5C7,
+0xE433=>0xF5C8,
+0xE434=>0xF5C9,
+0xE435=>0xF5CA,
+0xE436=>0xF5CB,
+0xE437=>0xF5CC,
+0xE438=>0xF5CD,
+0xE439=>0xF5CE,
+0xE43A=>0xF5CF,
+0xE43B=>0xF5D0,
+0xE43C=>0xF5D1,
+0xE43D=>0xF5D2,
+0xE43E=>0xF5D3,
+0xE43F=>0xF5D4,
+0xE440=>0xF5D5,
+0xE441=>0xF5D6,
+0xE442=>0xF5D7,
+0xE443=>0xF5D8,
+0xE444=>0xF5D9,
+0xE445=>0xF5DA,
+0xE446=>0xF5DB,
+0xE447=>0xF5DC,
+0xE448=>0xF5DD,
+0xE449=>0xF5DE,
+0xE44A=>0xF5DF,
+0xE44B=>0xF5E0,
+0xE44C=>0xF5E1,
+0xE44D=>0xF5E2,
+0xE44E=>0xF5E3,
+0xE44F=>0xF5E4,
+0xE450=>0xF5E5,
+0xE451=>0xF5E6,
+0xE452=>0xF5E7,
+0xE453=>0xF5E8,
+0xE454=>0xF5E9,
+0xE455=>0xF5EA,
+0xE456=>0xF5EB,
+0xE457=>0xF5EC,
+0xE458=>0xF5ED,
+0xE459=>0xF5EE,
+0xE45A=>0xF5EF,
+0xE45B=>0xF5F0,
+0xE45C=>0xF5F1,
+0xE45D=>0xF5F2,
+0xE45E=>0xF5F3,
+0xE45F=>0xF5F4,
+0xE460=>0xF5F5,
+0xE461=>0xF5F6,
+0xE462=>0xF5F7,
+0xE463=>0xF5F8,
+0xE464=>0xF5F9,
+0xE465=>0xF5FA,
+0xE466=>0xF5FB,
+0xE467=>0xF5FC,
+0xE468=>0xF640,
+0xE469=>0xF641,
+0xE46A=>0xF642,
+0xE46B=>0xF643,
+0xE46C=>0xF644,
+0xE46D=>0xF645,
+0xE46E=>0xF646,
+0xE46F=>0xF647,
+0xE470=>0xF648,
+0xE471=>0xF649,
+0xE472=>0xF64A,
+0xE473=>0xF64B,
+0xE474=>0xF64C,
+0xE475=>0xF64D,
+0xE476=>0xF64E,
+0xE477=>0xF64F,
+0xE478=>0xF650,
+0xE479=>0xF651,
+0xE47A=>0xF652,
+0xE47B=>0xF653,
+0xE47C=>0xF654,
+0xE47D=>0xF655,
+0xE47E=>0xF656,
+0xE47F=>0xF657,
+0xE480=>0xF658,
+0xE481=>0xF659,
+0xE482=>0xF65A,
+0xE483=>0xF65B,
+0xE484=>0xF65C,
+0xE485=>0xF65D,
+0xE486=>0xF65E,
+0xE487=>0xF65F,
+0xE488=>0xF660,
+0xE489=>0xF661,
+0xE48A=>0xF662,
+0xE48B=>0xF663,
+0xE48C=>0xF664,
+0xE48D=>0xF665,
+0xE48E=>0xF666,
+0xE48F=>0xF667,
+0xE490=>0xF668,
+0xE491=>0xF669,
+0xE492=>0xF66A,
+0xE493=>0xF66B,
+0xE494=>0xF66C,
+0xE495=>0xF66D,
+0xE496=>0xF66E,
+0xE497=>0xF66F,
+0xE498=>0xF670,
+0xE499=>0xF671,
+0xE49A=>0xF672,
+0xE49B=>0xF673,
+0xE49C=>0xF674,
+0xE49D=>0xF675,
+0xE49E=>0xF676,
+0xE49F=>0xF677,
+0xE4A0=>0xF678,
+0xE4A1=>0xF679,
+0xE4A2=>0xF67A,
+0xE4A3=>0xF67B,
+0xE4A4=>0xF67C,
+0xE4A5=>0xF67D,
+0xE4A6=>0xF67E,
+0xE4A7=>0xF680,
+0xE4A8=>0xF681,
+0xE4A9=>0xF682,
+0xE4AA=>0xF683,
+0xE4AB=>0xF684,
+0xE4AC=>0xF685,
+0xE4AD=>0xF686,
+0xE4AE=>0xF687,
+0xE4AF=>0xF688,
+0xE4B0=>0xF689,
+0xE4B1=>0xF68A,
+0xE4B2=>0xF68B,
+0xE4B3=>0xF68C,
+0xE4B4=>0xF68D,
+0xE4B5=>0xF68E,
+0xE4B6=>0xF68F,
+0xE4B7=>0xF690,
+0xE4B8=>0xF691,
+0xE4B9=>0xF692,
+0xE4BA=>0xF693,
+0xE4BB=>0xF694,
+0xE4BC=>0xF695,
+0xE4BD=>0xF696,
+0xE4BE=>0xF697,
+0xE4BF=>0xF698,
+0xE4C0=>0xF699,
+0xE4C1=>0xF69A,
+0xE4C2=>0xF69B,
+0xE4C3=>0xF69C,
+0xE4C4=>0xF69D,
+0xE4C5=>0xF69E,
+0xE4C6=>0xF69F,
+0xE4C7=>0xF6A0,
+0xE4C8=>0xF6A1,
+0xE4C9=>0xF6A2,
+0xE4CA=>0xF6A3,
+0xE4CB=>0xF6A4,
+0xE4CC=>0xF6A5,
+0xE4CD=>0xF6A6,
+0xE4CE=>0xF6A7,
+0xE4CF=>0xF6A8,
+0xE4D0=>0xF6A9,
+0xE4D1=>0xF6AA,
+0xE4D2=>0xF6AB,
+0xE4D3=>0xF6AC,
+0xE4D4=>0xF6AD,
+0xE4D5=>0xF6AE,
+0xE4D6=>0xF6AF,
+0xE4D7=>0xF6B0,
+0xE4D8=>0xF6B1,
+0xE4D9=>0xF6B2,
+0xE4DA=>0xF6B3,
+0xE4DB=>0xF6B4,
+0xE4DC=>0xF6B5,
+0xE4DD=>0xF6B6,
+0xE4DE=>0xF6B7,
+0xE4DF=>0xF6B8,
+0xE4E0=>0xF6B9,
+0xE4E1=>0xF6BA,
+0xE4E2=>0xF6BB,
+0xE4E3=>0xF6BC,
+0xE4E4=>0xF6BD,
+0xE4E5=>0xF6BE,
+0xE4E6=>0xF6BF,
+0xE4E7=>0xF6C0,
+0xE4E8=>0xF6C1,
+0xE4E9=>0xF6C2,
+0xE4EA=>0xF6C3,
+0xE4EB=>0xF6C4,
+0xE4EC=>0xF6C5,
+0xE4ED=>0xF6C6,
+0xE4EE=>0xF6C7,
+0xE4EF=>0xF6C8,
+0xE4F0=>0xF6C9,
+0xE4F1=>0xF6CA,
+0xE4F2=>0xF6CB,
+0xE4F3=>0xF6CC,
+0xE4F4=>0xF6CD,
+0xE4F5=>0xF6CE,
+0xE4F6=>0xF6CF,
+0xE4F7=>0xF6D0,
+0xE4F8=>0xF6D1,
+0xE4F9=>0xF6D2,
+0xE4FA=>0xF6D3,
+0xE4FB=>0xF6D4,
+0xE4FC=>0xF6D5,
+0xE4FD=>0xF6D6,
+0xE4FE=>0xF6D7,
+0xE4FF=>0xF6D8,
+0xE500=>0xF6D9,
+0xE501=>0xF6DA,
+0xE502=>0xF6DB,
+0xE503=>0xF6DC,
+0xE504=>0xF6DD,
+0xE505=>0xF6DE,
+0xE506=>0xF6DF,
+0xE507=>0xF6E0,
+0xE508=>0xF6E1,
+0xE509=>0xF6E2,
+0xE50A=>0xF6E3,
+0xE50B=>0xF6E4,
+0xE50C=>0xF6E5,
+0xE50D=>0xF6E6,
+0xE50E=>0xF6E7,
+0xE50F=>0xF6E8,
+0xE510=>0xF6E9,
+0xE511=>0xF6EA,
+0xE512=>0xF6EB,
+0xE513=>0xF6EC,
+0xE514=>0xF6ED,
+0xE515=>0xF6EE,
+0xE516=>0xF6EF,
+0xE517=>0xF6F0,
+0xE518=>0xF6F1,
+0xE519=>0xF6F2,
+0xE51A=>0xF6F3,
+0xE51B=>0xF6F4,
+0xE51C=>0xF6F5,
+0xE51D=>0xF6F6,
+0xE51E=>0xF6F7,
+0xE51F=>0xF6F8,
+0xE520=>0xF6F9,
+0xE521=>0xF6FA,
+0xE522=>0xF6FB,
+0xE523=>0xF6FC,
+0xE524=>0xF740,
+0xE525=>0xF741,
+0xE526=>0xF742,
+0xE527=>0xF743,
+0xE528=>0xF744,
+0xE529=>0xF745,
+0xE52A=>0xF746,
+0xE52B=>0xF747,
+0xE52C=>0xF748,
+0xE52D=>0xF749,
+0xE52E=>0xF74A,
+0xE52F=>0xF74B,
+0xE530=>0xF74C,
+0xE531=>0xF74D,
+0xE532=>0xF74E,
+0xE533=>0xF74F,
+0xE534=>0xF750,
+0xE535=>0xF751,
+0xE536=>0xF752,
+0xE537=>0xF753,
+0xE538=>0xF754,
+0xE539=>0xF755,
+0xE53A=>0xF756,
+0xE53B=>0xF757,
+0xE53C=>0xF758,
+0xE53D=>0xF759,
+0xE53E=>0xF75A,
+0xE53F=>0xF75B,
+0xE540=>0xF75C,
+0xE541=>0xF75D,
+0xE542=>0xF75E,
+0xE543=>0xF75F,
+0xE544=>0xF760,
+0xE545=>0xF761,
+0xE546=>0xF762,
+0xE547=>0xF763,
+0xE548=>0xF764,
+0xE549=>0xF765,
+0xE54A=>0xF766,
+0xE54B=>0xF767,
+0xE54C=>0xF768,
+0xE54D=>0xF769,
+0xE54E=>0xF76A,
+0xE54F=>0xF76B,
+0xE550=>0xF76C,
+0xE551=>0xF76D,
+0xE552=>0xF76E,
+0xE553=>0xF76F,
+0xE554=>0xF770,
+0xE555=>0xF771,
+0xE556=>0xF772,
+0xE557=>0xF773,
+0xE558=>0xF774,
+0xE559=>0xF775,
+0xE55A=>0xF776,
+0xE55B=>0xF777,
+0xE55C=>0xF778,
+0xE55D=>0xF779,
+0xE55E=>0xF77A,
+0xE55F=>0xF77B,
+0xE560=>0xF77C,
+0xE561=>0xF77D,
+0xE562=>0xF77E,
+0xE563=>0xF780,
+0xE564=>0xF781,
+0xE565=>0xF782,
+0xE566=>0xF783,
+0xE567=>0xF784,
+0xE568=>0xF785,
+0xE569=>0xF786,
+0xE56A=>0xF787,
+0xE56B=>0xF788,
+0xE56C=>0xF789,
+0xE56D=>0xF78A,
+0xE56E=>0xF78B,
+0xE56F=>0xF78C,
+0xE570=>0xF78D,
+0xE571=>0xF78E,
+0xE572=>0xF78F,
+0xE573=>0xF790,
+0xE574=>0xF791,
+0xE575=>0xF792,
+0xE576=>0xF793,
+0xE577=>0xF794,
+0xE578=>0xF795,
+0xE579=>0xF796,
+0xE57A=>0xF797,
+0xE57B=>0xF798,
+0xE57C=>0xF799,
+0xE57D=>0xF79A,
+0xE57E=>0xF79B,
+0xE57F=>0xF79C,
+0xE580=>0xF79D,
+0xE581=>0xF79E,
+0xE582=>0xF79F,
+0xE583=>0xF7A0,
+0xE584=>0xF7A1,
+0xE585=>0xF7A2,
+0xE586=>0xF7A3,
+0xE587=>0xF7A4,
+0xE588=>0xF7A5,
+0xE589=>0xF7A6,
+0xE58A=>0xF7A7,
+0xE58B=>0xF7A8,
+0xE58C=>0xF7A9,
+0xE58D=>0xF7AA,
+0xE58E=>0xF7AB,
+0xE58F=>0xF7AC,
+0xE590=>0xF7AD,
+0xE591=>0xF7AE,
+0xE592=>0xF7AF,
+0xE593=>0xF7B0,
+0xE594=>0xF7B1,
+0xE595=>0xF7B2,
+0xE596=>0xF7B3,
+0xE597=>0xF7B4,
+0xE598=>0xF7B5,
+0xE599=>0xF7B6,
+0xE59A=>0xF7B7,
+0xE59B=>0xF7B8,
+0xE59C=>0xF7B9,
+0xE59D=>0xF7BA,
+0xE59E=>0xF7BB,
+0xE59F=>0xF7BC,
+0xE5A0=>0xF7BD,
+0xE5A1=>0xF7BE,
+0xE5A2=>0xF7BF,
+0xE5A3=>0xF7C0,
+0xE5A4=>0xF7C1,
+0xE5A5=>0xF7C2,
+0xE5A6=>0xF7C3,
+0xE5A7=>0xF7C4,
+0xE5A8=>0xF7C5,
+0xE5A9=>0xF7C6,
+0xE5AA=>0xF7C7,
+0xE5AB=>0xF7C8,
+0xE5AC=>0xF7C9,
+0xE5AD=>0xF7CA,
+0xE5AE=>0xF7CB,
+0xE5AF=>0xF7CC,
+0xE5B0=>0xF7CD,
+0xE5B1=>0xF7CE,
+0xE5B2=>0xF7CF,
+0xE5B3=>0xF7D0,
+0xE5B4=>0xF7D1,
+0xE5B5=>0xF7D2,
+0xE5B6=>0xF7D3,
+0xE5B7=>0xF7D4,
+0xE5B8=>0xF7D5,
+0xE5B9=>0xF7D6,
+0xE5BA=>0xF7D7,
+0xE5BB=>0xF7D8,
+0xE5BC=>0xF7D9,
+0xE5BD=>0xF7DA,
+0xE5BE=>0xF7DB,
+0xE5BF=>0xF7DC,
+0xE5C0=>0xF7DD,
+0xE5C1=>0xF7DE,
+0xE5C2=>0xF7DF,
+0xE5C3=>0xF7E0,
+0xE5C4=>0xF7E1,
+0xE5C5=>0xF7E2,
+0xE5C6=>0xF7E3,
+0xE5C7=>0xF7E4,
+0xE5C8=>0xF7E5,
+0xE5C9=>0xF7E6,
+0xE5CA=>0xF7E7,
+0xE5CB=>0xF7E8,
+0xE5CC=>0xF7E9,
+0xE5CD=>0xF7EA,
+0xE5CE=>0xF7EB,
+0xE5CF=>0xF7EC,
+0xE5D0=>0xF7ED,
+0xE5D1=>0xF7EE,
+0xE5D2=>0xF7EF,
+0xE5D3=>0xF7F0,
+0xE5D4=>0xF7F1,
+0xE5D5=>0xF7F2,
+0xE5D6=>0xF7F3,
+0xE5D7=>0xF7F4,
+0xE5D8=>0xF7F5,
+0xE5D9=>0xF7F6,
+0xE5DA=>0xF7F7,
+0xE5DB=>0xF7F8,
+0xE5DC=>0xF7F9,
+0xE5DD=>0xF7FA,
+0xE5DE=>0xF7FB,
+0xE5DF=>0xF7FC,
+0xE5E0=>0xF840,
+0xE5E1=>0xF841,
+0xE5E2=>0xF842,
+0xE5E3=>0xF843,
+0xE5E4=>0xF844,
+0xE5E5=>0xF845,
+0xE5E6=>0xF846,
+0xE5E7=>0xF847,
+0xE5E8=>0xF848,
+0xE5E9=>0xF849,
+0xE5EA=>0xF84A,
+0xE5EB=>0xF84B,
+0xE5EC=>0xF84C,
+0xE5ED=>0xF84D,
+0xE5EE=>0xF84E,
+0xE5EF=>0xF84F,
+0xE5F0=>0xF850,
+0xE5F1=>0xF851,
+0xE5F2=>0xF852,
+0xE5F3=>0xF853,
+0xE5F4=>0xF854,
+0xE5F5=>0xF855,
+0xE5F6=>0xF856,
+0xE5F7=>0xF857,
+0xE5F8=>0xF858,
+0xE5F9=>0xF859,
+0xE5FA=>0xF85A,
+0xE5FB=>0xF85B,
+0xE5FC=>0xF85C,
+0xE5FD=>0xF85D,
+0xE5FE=>0xF85E,
+0xE5FF=>0xF85F,
+0xE600=>0xF860,
+0xE601=>0xF861,
+0xE602=>0xF862,
+0xE603=>0xF863,
+0xE604=>0xF864,
+0xE605=>0xF865,
+0xE606=>0xF866,
+0xE607=>0xF867,
+0xE608=>0xF868,
+0xE609=>0xF869,
+0xE60A=>0xF86A,
+0xE60B=>0xF86B,
+0xE60C=>0xF86C,
+0xE60D=>0xF86D,
+0xE60E=>0xF86E,
+0xE60F=>0xF86F,
+0xE610=>0xF870,
+0xE611=>0xF871,
+0xE612=>0xF872,
+0xE613=>0xF873,
+0xE614=>0xF874,
+0xE615=>0xF875,
+0xE616=>0xF876,
+0xE617=>0xF877,
+0xE618=>0xF878,
+0xE619=>0xF879,
+0xE61A=>0xF87A,
+0xE61B=>0xF87B,
+0xE61C=>0xF87C,
+0xE61D=>0xF87D,
+0xE61E=>0xF87E,
+0xE61F=>0xF880,
+0xE620=>0xF881,
+0xE621=>0xF882,
+0xE622=>0xF883,
+0xE623=>0xF884,
+0xE624=>0xF885,
+0xE625=>0xF886,
+0xE626=>0xF887,
+0xE627=>0xF888,
+0xE628=>0xF889,
+0xE629=>0xF88A,
+0xE62A=>0xF88B,
+0xE62B=>0xF88C,
+0xE62C=>0xF88D,
+0xE62D=>0xF88E,
+0xE62E=>0xF88F,
+0xE62F=>0xF890,
+0xE630=>0xF891,
+0xE631=>0xF892,
+0xE632=>0xF893,
+0xE633=>0xF894,
+0xE634=>0xF895,
+0xE635=>0xF896,
+0xE636=>0xF897,
+0xE637=>0xF898,
+0xE638=>0xF899,
+0xE639=>0xF89A,
+0xE63A=>0xF89B,
+0xE63B=>0xF89C,
+0xE63C=>0xF89D,
+0xE63D=>0xF89E,
+0xE63E=>0xF89F,
+0xE63F=>0xF8A0,
+0xE640=>0xF8A1,
+0xE641=>0xF8A2,
+0xE642=>0xF8A3,
+0xE643=>0xF8A4,
+0xE644=>0xF8A5,
+0xE645=>0xF8A6,
+0xE646=>0xF8A7,
+0xE647=>0xF8A8,
+0xE648=>0xF8A9,
+0xE649=>0xF8AA,
+0xE64A=>0xF8AB,
+0xE64B=>0xF8AC,
+0xE64C=>0xF8AD,
+0xE64D=>0xF8AE,
+0xE64E=>0xF8AF,
+0xE64F=>0xF8B0,
+0xE650=>0xF8B1,
+0xE651=>0xF8B2,
+0xE652=>0xF8B3,
+0xE653=>0xF8B4,
+0xE654=>0xF8B5,
+0xE655=>0xF8B6,
+0xE656=>0xF8B7,
+0xE657=>0xF8B8,
+0xE658=>0xF8B9,
+0xE659=>0xF8BA,
+0xE65A=>0xF8BB,
+0xE65B=>0xF8BC,
+0xE65C=>0xF8BD,
+0xE65D=>0xF8BE,
+0xE65E=>0xF8BF,
+0xE65F=>0xF8C0,
+0xE660=>0xF8C1,
+0xE661=>0xF8C2,
+0xE662=>0xF8C3,
+0xE663=>0xF8C4,
+0xE664=>0xF8C5,
+0xE665=>0xF8C6,
+0xE666=>0xF8C7,
+0xE667=>0xF8C8,
+0xE668=>0xF8C9,
+0xE669=>0xF8CA,
+0xE66A=>0xF8CB,
+0xE66B=>0xF8CC,
+0xE66C=>0xF8CD,
+0xE66D=>0xF8CE,
+0xE66E=>0xF8CF,
+0xE66F=>0xF8D0,
+0xE670=>0xF8D1,
+0xE671=>0xF8D2,
+0xE672=>0xF8D3,
+0xE673=>0xF8D4,
+0xE674=>0xF8D5,
+0xE675=>0xF8D6,
+0xE676=>0xF8D7,
+0xE677=>0xF8D8,
+0xE678=>0xF8D9,
+0xE679=>0xF8DA,
+0xE67A=>0xF8DB,
+0xE67B=>0xF8DC,
+0xE67C=>0xF8DD,
+0xE67D=>0xF8DE,
+0xE67E=>0xF8DF,
+0xE67F=>0xF8E0,
+0xE680=>0xF8E1,
+0xE681=>0xF8E2,
+0xE682=>0xF8E3,
+0xE683=>0xF8E4,
+0xE684=>0xF8E5,
+0xE685=>0xF8E6,
+0xE686=>0xF8E7,
+0xE687=>0xF8E8,
+0xE688=>0xF8E9,
+0xE689=>0xF8EA,
+0xE68A=>0xF8EB,
+0xE68B=>0xF8EC,
+0xE68C=>0xF8ED,
+0xE68D=>0xF8EE,
+0xE68E=>0xF8EF,
+0xE68F=>0xF8F0,
+0xE690=>0xF8F1,
+0xE691=>0xF8F2,
+0xE692=>0xF8F3,
+0xE693=>0xF8F4,
+0xE694=>0xF8F5,
+0xE695=>0xF8F6,
+0xE696=>0xF8F7,
+0xE697=>0xF8F8,
+0xE698=>0xF8F9,
+0xE699=>0xF8FA,
+0xE69A=>0xF8FB,
+0xE69B=>0xF8FC,
+0xE69C=>0xF940,
+0xE69D=>0xF941,
+0xE69E=>0xF942,
+0xE69F=>0xF943,
+0xE6A0=>0xF944,
+0xE6A1=>0xF945,
+0xE6A2=>0xF946,
+0xE6A3=>0xF947,
+0xE6A4=>0xF948,
+0xE6A5=>0xF949,
+0xE6A6=>0xF94A,
+0xE6A7=>0xF94B,
+0xE6A8=>0xF94C,
+0xE6A9=>0xF94D,
+0xE6AA=>0xF94E,
+0xE6AB=>0xF94F,
+0xE6AC=>0xF950,
+0xE6AD=>0xF951,
+0xE6AE=>0xF952,
+0xE6AF=>0xF953,
+0xE6B0=>0xF954,
+0xE6B1=>0xF955,
+0xE6B2=>0xF956,
+0xE6B3=>0xF957,
+0xE6B4=>0xF958,
+0xE6B5=>0xF959,
+0xE6B6=>0xF95A,
+0xE6B7=>0xF95B,
+0xE6B8=>0xF95C,
+0xE6B9=>0xF95D,
+0xE6BA=>0xF95E,
+0xE6BB=>0xF95F,
+0xE6BC=>0xF960,
+0xE6BD=>0xF961,
+0xE6BE=>0xF962,
+0xE6BF=>0xF963,
+0xE6C0=>0xF964,
+0xE6C1=>0xF965,
+0xE6C2=>0xF966,
+0xE6C3=>0xF967,
+0xE6C4=>0xF968,
+0xE6C5=>0xF969,
+0xE6C6=>0xF96A,
+0xE6C7=>0xF96B,
+0xE6C8=>0xF96C,
+0xE6C9=>0xF96D,
+0xE6CA=>0xF96E,
+0xE6CB=>0xF96F,
+0xE6CC=>0xF970,
+0xE6CD=>0xF971,
+0xE6CE=>0xF972,
+0xE6CF=>0xF973,
+0xE6D0=>0xF974,
+0xE6D1=>0xF975,
+0xE6D2=>0xF976,
+0xE6D3=>0xF977,
+0xE6D4=>0xF978,
+0xE6D5=>0xF979,
+0xE6D6=>0xF97A,
+0xE6D7=>0xF97B,
+0xE6D8=>0xF97C,
+0xE6D9=>0xF97D,
+0xE6DA=>0xF97E,
+0xE6DB=>0xF980,
+0xE6DC=>0xF981,
+0xE6DD=>0xF982,
+0xE6DE=>0xF983,
+0xE6DF=>0xF984,
+0xE6E0=>0xF985,
+0xE6E1=>0xF986,
+0xE6E2=>0xF987,
+0xE6E3=>0xF988,
+0xE6E4=>0xF989,
+0xE6E5=>0xF98A,
+0xE6E6=>0xF98B,
+0xE6E7=>0xF98C,
+0xE6E8=>0xF98D,
+0xE6E9=>0xF98E,
+0xE6EA=>0xF98F,
+0xE6EB=>0xF990,
+0xE6EC=>0xF991,
+0xE6ED=>0xF992,
+0xE6EE=>0xF993,
+0xE6EF=>0xF994,
+0xE6F0=>0xF995,
+0xE6F1=>0xF996,
+0xE6F2=>0xF997,
+0xE6F3=>0xF998,
+0xE6F4=>0xF999,
+0xE6F5=>0xF99A,
+0xE6F6=>0xF99B,
+0xE6F7=>0xF99C,
+0xE6F8=>0xF99D,
+0xE6F9=>0xF99E,
+0xE6FA=>0xF99F,
+0xE6FB=>0xF9A0,
+0xE6FC=>0xF9A1,
+0xE6FD=>0xF9A2,
+0xE6FE=>0xF9A3,
+0xE6FF=>0xF9A4,
+0xE700=>0xF9A5,
+0xE701=>0xF9A6,
+0xE702=>0xF9A7,
+0xE703=>0xF9A8,
+0xE704=>0xF9A9,
+0xE705=>0xF9AA,
+0xE706=>0xF9AB,
+0xE707=>0xF9AC,
+0xE708=>0xF9AD,
+0xE709=>0xF9AE,
+0xE70A=>0xF9AF,
+0xE70B=>0xF9B0,
+0xE70C=>0xF9B1,
+0xE70D=>0xF9B2,
+0xE70E=>0xF9B3,
+0xE70F=>0xF9B4,
+0xE710=>0xF9B5,
+0xE711=>0xF9B6,
+0xE712=>0xF9B7,
+0xE713=>0xF9B8,
+0xE714=>0xF9B9,
+0xE715=>0xF9BA,
+0xE716=>0xF9BB,
+0xE717=>0xF9BC,
+0xE718=>0xF9BD,
+0xE719=>0xF9BE,
+0xE71A=>0xF9BF,
+0xE71B=>0xF9C0,
+0xE71C=>0xF9C1,
+0xE71D=>0xF9C2,
+0xE71E=>0xF9C3,
+0xE71F=>0xF9C4,
+0xE720=>0xF9C5,
+0xE721=>0xF9C6,
+0xE722=>0xF9C7,
+0xE723=>0xF9C8,
+0xE724=>0xF9C9,
+0xE725=>0xF9CA,
+0xE726=>0xF9CB,
+0xE727=>0xF9CC,
+0xE728=>0xF9CD,
+0xE729=>0xF9CE,
+0xE72A=>0xF9CF,
+0xE72B=>0xF9D0,
+0xE72C=>0xF9D1,
+0xE72D=>0xF9D2,
+0xE72E=>0xF9D3,
+0xE72F=>0xF9D4,
+0xE730=>0xF9D5,
+0xE731=>0xF9D6,
+0xE732=>0xF9D7,
+0xE733=>0xF9D8,
+0xE734=>0xF9D9,
+0xE735=>0xF9DA,
+0xE736=>0xF9DB,
+0xE737=>0xF9DC,
+0xE738=>0xF9DD,
+0xE739=>0xF9DE,
+0xE73A=>0xF9DF,
+0xE73B=>0xF9E0,
+0xE73C=>0xF9E1,
+0xE73D=>0xF9E2,
+0xE73E=>0xF9E3,
+0xE73F=>0xF9E4,
+0xE740=>0xF9E5,
+0xE741=>0xF9E6,
+0xE742=>0xF9E7,
+0xE743=>0xF9E8,
+0xE744=>0xF9E9,
+0xE745=>0xF9EA,
+0xE746=>0xF9EB,
+0xE747=>0xF9EC,
+0xE748=>0xF9ED,
+0xE749=>0xF9EE,
+0xE74A=>0xF9EF,
+0xE74B=>0xF9F0,
+0xE74C=>0xF9F1,
+0xE74D=>0xF9F2,
+0xE74E=>0xF9F3,
+0xE74F=>0xF9F4,
+0xE750=>0xF9F5,
+0xE751=>0xF9F6,
+0xE752=>0xF9F7,
+0xE753=>0xF9F8,
+0xE754=>0xF9F9,
+0xE755=>0xF9FA,
+0xE756=>0xF9FB,
+0xE757=>0xF9FC,
+0x2170=>0xFA40,
+0x2171=>0xFA41,
+0x2172=>0xFA42,
+0x2173=>0xFA43,
+0x2174=>0xFA44,
+0x2175=>0xFA45,
+0x2176=>0xFA46,
+0x2177=>0xFA47,
+0x2178=>0xFA48,
+0x2179=>0xFA49,
+0x2160=>0xFA4A,
+0x2161=>0xFA4B,
+0x2162=>0xFA4C,
+0x2163=>0xFA4D,
+0x2164=>0xFA4E,
+0x2165=>0xFA4F,
+0x2166=>0xFA50,
+0x2167=>0xFA51,
+0x2168=>0xFA52,
+0x2169=>0xFA53,
+0xFFE2=>0xFA54,
+0xFFE4=>0xFA55,
+0xFF07=>0xFA56,
+0xFF02=>0xFA57,
+0x3231=>0xFA58,
+0x2116=>0xFA59,
+0x2121=>0xFA5A,
+0x2235=>0xFA5B,
+0x7E8A=>0xFA5C,
+0x891C=>0xFA5D,
+0x9348=>0xFA5E,
+0x9288=>0xFA5F,
+0x84DC=>0xFA60,
+0x4FC9=>0xFA61,
+0x70BB=>0xFA62,
+0x6631=>0xFA63,
+0x68C8=>0xFA64,
+0x92F9=>0xFA65,
+0x66FB=>0xFA66,
+0x5F45=>0xFA67,
+0x4E28=>0xFA68,
+0x4EE1=>0xFA69,
+0x4EFC=>0xFA6A,
+0x4F00=>0xFA6B,
+0x4F03=>0xFA6C,
+0x4F39=>0xFA6D,
+0x4F56=>0xFA6E,
+0x4F92=>0xFA6F,
+0x4F8A=>0xFA70,
+0x4F9A=>0xFA71,
+0x4F94=>0xFA72,
+0x4FCD=>0xFA73,
+0x5040=>0xFA74,
+0x5022=>0xFA75,
+0x4FFF=>0xFA76,
+0x501E=>0xFA77,
+0x5046=>0xFA78,
+0x5070=>0xFA79,
+0x5042=>0xFA7A,
+0x5094=>0xFA7B,
+0x50F4=>0xFA7C,
+0x50D8=>0xFA7D,
+0x514A=>0xFA7E,
+0x5164=>0xFA80,
+0x519D=>0xFA81,
+0x51BE=>0xFA82,
+0x51EC=>0xFA83,
+0x5215=>0xFA84,
+0x529C=>0xFA85,
+0x52A6=>0xFA86,
+0x52C0=>0xFA87,
+0x52DB=>0xFA88,
+0x5300=>0xFA89,
+0x5307=>0xFA8A,
+0x5324=>0xFA8B,
+0x5372=>0xFA8C,
+0x5393=>0xFA8D,
+0x53B2=>0xFA8E,
+0x53DD=>0xFA8F,
+0xFA0E=>0xFA90,
+0x549C=>0xFA91,
+0x548A=>0xFA92,
+0x54A9=>0xFA93,
+0x54FF=>0xFA94,
+0x5586=>0xFA95,
+0x5759=>0xFA96,
+0x5765=>0xFA97,
+0x57AC=>0xFA98,
+0x57C8=>0xFA99,
+0x57C7=>0xFA9A,
+0xFA0F=>0xFA9B,
+0xFA10=>0xFA9C,
+0x589E=>0xFA9D,
+0x58B2=>0xFA9E,
+0x590B=>0xFA9F,
+0x5953=>0xFAA0,
+0x595B=>0xFAA1,
+0x595D=>0xFAA2,
+0x5963=>0xFAA3,
+0x59A4=>0xFAA4,
+0x59BA=>0xFAA5,
+0x5B56=>0xFAA6,
+0x5BC0=>0xFAA7,
+0x752F=>0xFAA8,
+0x5BD8=>0xFAA9,
+0x5BEC=>0xFAAA,
+0x5C1E=>0xFAAB,
+0x5CA6=>0xFAAC,
+0x5CBA=>0xFAAD,
+0x5CF5=>0xFAAE,
+0x5D27=>0xFAAF,
+0x5D53=>0xFAB0,
+0xFA11=>0xFAB1,
+0x5D42=>0xFAB2,
+0x5D6D=>0xFAB3,
+0x5DB8=>0xFAB4,
+0x5DB9=>0xFAB5,
+0x5DD0=>0xFAB6,
+0x5F21=>0xFAB7,
+0x5F34=>0xFAB8,
+0x5F67=>0xFAB9,
+0x5FB7=>0xFABA,
+0x5FDE=>0xFABB,
+0x605D=>0xFABC,
+0x6085=>0xFABD,
+0x608A=>0xFABE,
+0x60DE=>0xFABF,
+0x60D5=>0xFAC0,
+0x6120=>0xFAC1,
+0x60F2=>0xFAC2,
+0x6111=>0xFAC3,
+0x6137=>0xFAC4,
+0x6130=>0xFAC5,
+0x6198=>0xFAC6,
+0x6213=>0xFAC7,
+0x62A6=>0xFAC8,
+0x63F5=>0xFAC9,
+0x6460=>0xFACA,
+0x649D=>0xFACB,
+0x64CE=>0xFACC,
+0x654E=>0xFACD,
+0x6600=>0xFACE,
+0x6615=>0xFACF,
+0x663B=>0xFAD0,
+0x6609=>0xFAD1,
+0x662E=>0xFAD2,
+0x661E=>0xFAD3,
+0x6624=>0xFAD4,
+0x6665=>0xFAD5,
+0x6657=>0xFAD6,
+0x6659=>0xFAD7,
+0xFA12=>0xFAD8,
+0x6673=>0xFAD9,
+0x6699=>0xFADA,
+0x66A0=>0xFADB,
+0x66B2=>0xFADC,
+0x66BF=>0xFADD,
+0x66FA=>0xFADE,
+0x670E=>0xFADF,
+0xF929=>0xFAE0,
+0x6766=>0xFAE1,
+0x67BB=>0xFAE2,
+0x6852=>0xFAE3,
+0x67C0=>0xFAE4,
+0x6801=>0xFAE5,
+0x6844=>0xFAE6,
+0x68CF=>0xFAE7,
+0xFA13=>0xFAE8,
+0x6968=>0xFAE9,
+0xFA14=>0xFAEA,
+0x6998=>0xFAEB,
+0x69E2=>0xFAEC,
+0x6A30=>0xFAED,
+0x6A6B=>0xFAEE,
+0x6A46=>0xFAEF,
+0x6A73=>0xFAF0,
+0x6A7E=>0xFAF1,
+0x6AE2=>0xFAF2,
+0x6AE4=>0xFAF3,
+0x6BD6=>0xFAF4,
+0x6C3F=>0xFAF5,
+0x6C5C=>0xFAF6,
+0x6C86=>0xFAF7,
+0x6C6F=>0xFAF8,
+0x6CDA=>0xFAF9,
+0x6D04=>0xFAFA,
+0x6D87=>0xFAFB,
+0x6D6F=>0xFAFC,
+0x6D96=>0xFB40,
+0x6DAC=>0xFB41,
+0x6DCF=>0xFB42,
+0x6DF8=>0xFB43,
+0x6DF2=>0xFB44,
+0x6DFC=>0xFB45,
+0x6E39=>0xFB46,
+0x6E5C=>0xFB47,
+0x6E27=>0xFB48,
+0x6E3C=>0xFB49,
+0x6EBF=>0xFB4A,
+0x6F88=>0xFB4B,
+0x6FB5=>0xFB4C,
+0x6FF5=>0xFB4D,
+0x7005=>0xFB4E,
+0x7007=>0xFB4F,
+0x7028=>0xFB50,
+0x7085=>0xFB51,
+0x70AB=>0xFB52,
+0x710F=>0xFB53,
+0x7104=>0xFB54,
+0x715C=>0xFB55,
+0x7146=>0xFB56,
+0x7147=>0xFB57,
+0xFA15=>0xFB58,
+0x71C1=>0xFB59,
+0x71FE=>0xFB5A,
+0x72B1=>0xFB5B,
+0x72BE=>0xFB5C,
+0x7324=>0xFB5D,
+0xFA16=>0xFB5E,
+0x7377=>0xFB5F,
+0x73BD=>0xFB60,
+0x73C9=>0xFB61,
+0x73D6=>0xFB62,
+0x73E3=>0xFB63,
+0x73D2=>0xFB64,
+0x7407=>0xFB65,
+0x73F5=>0xFB66,
+0x7426=>0xFB67,
+0x742A=>0xFB68,
+0x7429=>0xFB69,
+0x742E=>0xFB6A,
+0x7462=>0xFB6B,
+0x7489=>0xFB6C,
+0x749F=>0xFB6D,
+0x7501=>0xFB6E,
+0x756F=>0xFB6F,
+0x7682=>0xFB70,
+0x769C=>0xFB71,
+0x769E=>0xFB72,
+0x769B=>0xFB73,
+0x76A6=>0xFB74,
+0xFA17=>0xFB75,
+0x7746=>0xFB76,
+0x52AF=>0xFB77,
+0x7821=>0xFB78,
+0x784E=>0xFB79,
+0x7864=>0xFB7A,
+0x787A=>0xFB7B,
+0x7930=>0xFB7C,
+0xFA18=>0xFB7D,
+0xFA19=>0xFB7E,
+0xFA1A=>0xFB80,
+0x7994=>0xFB81,
+0xFA1B=>0xFB82,
+0x799B=>0xFB83,
+0x7AD1=>0xFB84,
+0x7AE7=>0xFB85,
+0xFA1C=>0xFB86,
+0x7AEB=>0xFB87,
+0x7B9E=>0xFB88,
+0xFA1D=>0xFB89,
+0x7D48=>0xFB8A,
+0x7D5C=>0xFB8B,
+0x7DB7=>0xFB8C,
+0x7DA0=>0xFB8D,
+0x7DD6=>0xFB8E,
+0x7E52=>0xFB8F,
+0x7F47=>0xFB90,
+0x7FA1=>0xFB91,
+0xFA1E=>0xFB92,
+0x8301=>0xFB93,
+0x8362=>0xFB94,
+0x837F=>0xFB95,
+0x83C7=>0xFB96,
+0x83F6=>0xFB97,
+0x8448=>0xFB98,
+0x84B4=>0xFB99,
+0x8553=>0xFB9A,
+0x8559=>0xFB9B,
+0x856B=>0xFB9C,
+0xFA1F=>0xFB9D,
+0x85B0=>0xFB9E,
+0xFA20=>0xFB9F,
+0xFA21=>0xFBA0,
+0x8807=>0xFBA1,
+0x88F5=>0xFBA2,
+0x8A12=>0xFBA3,
+0x8A37=>0xFBA4,
+0x8A79=>0xFBA5,
+0x8AA7=>0xFBA6,
+0x8ABE=>0xFBA7,
+0x8ADF=>0xFBA8,
+0xFA22=>0xFBA9,
+0x8AF6=>0xFBAA,
+0x8B53=>0xFBAB,
+0x8B7F=>0xFBAC,
+0x8CF0=>0xFBAD,
+0x8CF4=>0xFBAE,
+0x8D12=>0xFBAF,
+0x8D76=>0xFBB0,
+0xFA23=>0xFBB1,
+0x8ECF=>0xFBB2,
+0xFA24=>0xFBB3,
+0xFA25=>0xFBB4,
+0x9067=>0xFBB5,
+0x90DE=>0xFBB6,
+0xFA26=>0xFBB7,
+0x9115=>0xFBB8,
+0x9127=>0xFBB9,
+0x91DA=>0xFBBA,
+0x91D7=>0xFBBB,
+0x91DE=>0xFBBC,
+0x91ED=>0xFBBD,
+0x91EE=>0xFBBE,
+0x91E4=>0xFBBF,
+0x91E5=>0xFBC0,
+0x9206=>0xFBC1,
+0x9210=>0xFBC2,
+0x920A=>0xFBC3,
+0x923A=>0xFBC4,
+0x9240=>0xFBC5,
+0x923C=>0xFBC6,
+0x924E=>0xFBC7,
+0x9259=>0xFBC8,
+0x9251=>0xFBC9,
+0x9239=>0xFBCA,
+0x9267=>0xFBCB,
+0x92A7=>0xFBCC,
+0x9277=>0xFBCD,
+0x9278=>0xFBCE,
+0x92E7=>0xFBCF,
+0x92D7=>0xFBD0,
+0x92D9=>0xFBD1,
+0x92D0=>0xFBD2,
+0xFA27=>0xFBD3,
+0x92D5=>0xFBD4,
+0x92E0=>0xFBD5,
+0x92D3=>0xFBD6,
+0x9325=>0xFBD7,
+0x9321=>0xFBD8,
+0x92FB=>0xFBD9,
+0xFA28=>0xFBDA,
+0x931E=>0xFBDB,
+0x92FF=>0xFBDC,
+0x931D=>0xFBDD,
+0x9302=>0xFBDE,
+0x9370=>0xFBDF,
+0x9357=>0xFBE0,
+0x93A4=>0xFBE1,
+0x93C6=>0xFBE2,
+0x93DE=>0xFBE3,
+0x93F8=>0xFBE4,
+0x9431=>0xFBE5,
+0x9445=>0xFBE6,
+0x9448=>0xFBE7,
+0x9592=>0xFBE8,
+0xF9DC=>0xFBE9,
+0xFA29=>0xFBEA,
+0x969D=>0xFBEB,
+0x96AF=>0xFBEC,
+0x9733=>0xFBED,
+0x973B=>0xFBEE,
+0x9743=>0xFBEF,
+0x974D=>0xFBF0,
+0x974F=>0xFBF1,
+0x9751=>0xFBF2,
+0x9755=>0xFBF3,
+0x9857=>0xFBF4,
+0x9865=>0xFBF5,
+0xFA2A=>0xFBF6,
+0xFA2B=>0xFBF7,
+0x9927=>0xFBF8,
+0xFA2C=>0xFBF9,
+0x999E=>0xFBFA,
+0x9A4E=>0xFBFB,
+0x9AD9=>0xFBFC,
+0x9ADC=>0xFC40,
+0x9B75=>0xFC41,
+0x9B72=>0xFC42,
+0x9B8F=>0xFC43,
+0x9BB1=>0xFC44,
+0x9BBB=>0xFC45,
+0x9C00=>0xFC46,
+0x9D70=>0xFC47,
+0x9D6B=>0xFC48,
+0xFA2D=>0xFC49,
+0x9E19=>0xFC4A,
+0x9ED1=>0xFC4B);
 ?>
\ No newline at end of file
diff --git a/nucleus/libs/mysql.php b/nucleus/libs/mysql.php
new file mode 100644 (file)
index 0000000..782ba77
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: mysql.php,v 1.1 2006-07-12 07:13:31 kimitake Exp $
+ */
+/*
+ * if no mysql_* functions exist, define wrappers
+ */
+$MYSQL_CONN = 0;
+
+if (!function_exists('mysql_query'))
+{
+       if (!function_exists('mysqli_query') && function_exists('startUpError'))
+       {
+               startUpError('<p>No suitable mySQL library was found to run Nucleus</p>');
+       }
+       
+       function mysql_query($query) 
+       {
+               global $MYSQL_CONN;
+               return mysqli_query($MYSQL_CONN, $query); 
+       }
+       
+       function mysql_fetch_object($res) 
+       { 
+               return mysqli_fetch_object($res);
+       }
+       
+       function mysql_fetch_array($res) 
+       { 
+               return mysqli_fetch_array($res);
+       }       
+       
+       function mysql_fetch_assoc($res) 
+       { 
+               return mysqli_fetch_assoc($res);
+       }       
+
+       function mysql_fetch_row($res) 
+       { 
+               return mysqli_fetch_row($res);
+       }       
+
+       function mysql_num_rows($res)
+       {
+               return mysqli_num_rows($res);
+       }
+       
+       function mysql_num_fields($res)
+       {
+               return mysqli_num_fields($res);
+       }
+       
+       function mysql_free_result($res)
+       {
+               return mysqli_free_result($res);
+       }
+       
+       function mysql_result($res, $row, $col) 
+       { 
+               if (($row != 0) || ($col != 0)) {
+                       trigger_error('not implemented', E_USER_ERROR);
+               }
+               
+               $row = mysqli_fetch_row($res);
+               return $row[$col];
+       }       
+       
+       function mysql_connect($host, $username, $pwd)
+       {
+               return mysqli_connect($host, $username, $pwd);
+       }
+       
+       function mysql_error()
+       {
+               global $MYSQL_CONN;
+               return mysqli_error($MYSQL_CONN);
+       }
+       
+       function mysql_select_db($db)
+       {
+               global $MYSQL_CONN;
+               return mysqli_select_db($MYSQL_CONN, $db);
+       }
+       
+       function mysql_close()
+       {
+               global $MYSQL_CONN;
+               return mysqli_close($MYSQL_CONN);
+       }
+       
+       function mysql_insert_id()
+       {
+               global $MYSQL_CONN;
+               return mysqli_insert_id($MYSQL_CONN);
+       }
+       
+       function mysql_affected_rows()
+       {
+               global $MYSQL_CONN;
+               return mysqli_affected_rows($MYSQL_CONN);
+       }
+}
+
+
+
+?>
\ No newline at end of file
diff --git a/nucleus/libs/showlist.php b/nucleus/libs/showlist.php
new file mode 100644 (file)
index 0000000..2ee5a95
--- /dev/null
@@ -0,0 +1,627 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Functions to create lists of things inside the admin are
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: showlist.php,v 1.1 2006-07-12 07:13:31 kimitake Exp $
+ */
+
+
+// can take either an array of objects, or an SQL query
+function showlist($query, $type, $template) {
+
+       if (is_array($query)) {
+               if (sizeof($query) == 0)
+                       return 0;
+
+               call_user_func('listplug_' . $type, $template, 'HEAD');
+
+               foreach ($query as $currentObj) {
+                       $template['current'] = $currentObj;
+                       call_user_func('listplug_' . $type, $template, 'BODY');
+               }
+
+               call_user_func('listplug_' . $type, $template, 'FOOT');
+
+               return sizeof($query);
+
+       } else {
+               $res = sql_query($query);
+
+               // don't do anything if there are no results
+               $numrows = mysql_num_rows($res);
+               if ($numrows == 0)
+                       return 0;
+
+               call_user_func('listplug_' . $type, $template, 'HEAD');
+
+               while($template['current'] = mysql_fetch_object($res))
+                       call_user_func('listplug_' . $type, $template, 'BODY');
+
+               call_user_func('listplug_' . $type, $template, 'FOOT');
+
+               mysql_free_result($res);
+
+               // return amount of results
+               return $numrows;
+       }
+}
+
+function listplug_select($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<select name="' . ifset($template['name']) . '" tabindex="' . ifset($template['tabindex']) . '" ' . ifset($template['javascript']) . '>';
+
+                       // add extra row if needed
+                       if (ifset($template['extra'])) {
+                               echo '<option value="', ifset($template['extraval']), '">', $template['extra'], '</option>';
+                       }
+
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<option value="' . htmlspecialchars($current->value) . '"';
+                       if ($template['selected'] == $current->value)
+                               echo ' selected="selected" ';
+                       if (isset($template['shorten']) && $template['shorten'] > 0) {
+                               echo ' title="'. htmlspecialchars($current->text).'"';
+                               $current->text = shorten($current->text, $template['shorten'], $template['shortenel']);
+                       }
+                       echo '>' . htmlspecialchars($current->text) . '</option>';
+                       break;
+               case 'FOOT':
+                       echo '</select>';
+                       break;
+       }
+}
+
+function listplug_table($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<table>";
+                       echo "<thead><tr>";
+                       // print head
+                       call_user_func("listplug_table_" . $template['content'] , $template, 'HEAD');
+                       echo "</tr></thead><tbody>";
+                       break;
+               case 'BODY':
+                       // print tabletype specific thingies
+                       echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>";
+                       call_user_func("listplug_table_" . $template['content'] , $template,  'BODY');
+                       echo "</tr>";
+                       break;
+               case 'FOOT':
+                       call_user_func("listplug_table_" . $template['content'] , $template,  'FOOT');
+                       echo "</tbody></table>";
+                       break;
+       }
+}
+
+function listplug_table_memberlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>' . _LIST_MEMBER_NAME . '</th><th>' . _LIST_MEMBER_RNAME . '</th><th>' . _LIST_MEMBER_URL . '</th><th>' . _LIST_MEMBER_ADMIN;
+                       help('superadmin');
+                       echo "</th><th>" . _LIST_MEMBER_LOGIN;
+                       help('canlogin');
+                       echo "</th><th colspan='2'>" . _LISTS_ACTIONS. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->mnumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<a href='mailto:", htmlspecialchars($current->memail), "' tabindex='".$template['tabindex']."'>", htmlspecialchars($current->mname), "</a>";
+                       echo '</label>';
+                       echo '</td>';
+                       echo '<td>', htmlspecialchars($current->mrealname), '</td>';
+                       echo "<td><a href='$current->murl' tabindex='".$template['tabindex']."'>$current->murl</a></td>";
+                       echo '<td>', ($current->madmin ? _YES : _NO),'</td>';
+                       echo '<td>', ($current->mcanlogin ? _YES : _NO), '</td>';
+                       echo "<td><a href='index.php?action=memberedit&amp;memberid=$current->mnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=memberdelete&amp;memberid=$current->mnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+                       break;
+       }
+}
+
+function listplug_table_teamlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LIST_MEMBER_NAME."</th><th>"._LIST_MEMBER_RNAME."</th><th>"._LIST_TEAM_ADMIN;
+                       help('teamadmin');
+                       echo "</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->tmember,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<a href='mailto:", htmlspecialchars($current->memail), "' tabindex='".$template['tabindex']."'>", htmlspecialchars($current->mname), "</a>";
+                       echo '</label>';
+                       echo '</td>';
+                       echo '<td>', htmlspecialchars($current->mrealname), '</td>';
+                       echo '<td>', ($current->tadmin ? _YES : _NO) , '</td>';
+                       echo "<td><a href='index.php?action=teamdelete&amp;memberid=$current->tmember&amp;blogid=$current->tblog' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       $url = 'index.php?action=teamchangeadmin&memberid=' . intval($current->tmember) . '&blogid=' . intval($current->tblog);
+                       $url = $manager->addTicketToUrl($url);
+                       echo "<td><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LIST_TEAM_CHADMIN."</a></td>";
+                       break;
+       }
+}
+
+function listplug_table_pluginlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_INFO.'</th><th>'._LISTS_DESC.'</th>';
+                       echo '<th>'._LISTS_ACTIONS.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       $plug =& $manager->getPlugin($current->pfile);
+                       if ($plug) {
+                               echo '<td>';
+                                       echo '<strong>' , htmlspecialchars($plug->getName()) , '</strong><br />';
+                                       echo _LIST_PLUGS_AUTHOR, ' ' , htmlspecialchars($plug->getAuthor()) , '<br />';
+                                       echo _LIST_PLUGS_VER, ' ' , htmlspecialchars($plug->getVersion()) , '<br />';
+                                       if ($plug->getURL())
+                                       echo '<a href="',htmlspecialchars($plug->getURL()),'" tabindex="'.$template['tabindex'].'">',_LIST_PLUGS_SITE,'</a><br />';
+                               echo '</td>';
+                               echo '<td>';
+                                       echo _LIST_PLUGS_DESC .'<br/>'. encode_desc($plug->getDescription());
+                                       if (sizeof($plug->getEventList()) > 0) {
+                                               echo '<br /><br />',_LIST_PLUGS_SUBS,'<br />',htmlspecialchars(implode($plug->getEventList(),', '));
+                                               // check the database to see if it is up-to-date and notice the user if not
+                                       }
+                                       if (!$plug->subscribtionListIsUptodate()) {
+                                               echo '<br /><br /><strong>',_LIST_PLUG_SUBS_NEEDUPDATE,'</strong>';
+                                       }
+                                       if (sizeof($plug->getPluginDep()) > 0)
+                                               echo '<br /><br />',_LIST_PLUGS_DEP,'<br />',htmlspecialchars(implode($plug->getPluginDep(),', '));
+                               echo '</td>';
+                       } else {
+                               echo '<td colspan="2">Error: plugin file <b>',htmlspecialchars($current->pfile),'.php</b> could not be loaded, or it has been set inactive because it does not support some features (check the <a href="?action=actionlog">actionlog</a> for more info)</td>';
+                       }
+                       echo '<td>';
+
+                               $baseUrl = 'index.php?plugid=' . intval($current->pid) . '&action=';
+                               $url = $manager->addTicketToUrl($baseUrl . 'pluginup');
+                               echo "<a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_UP,"</a>";
+                               $url = $manager->addTicketToUrl($baseUrl . 'plugindown');
+                               echo "<br /><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_DOWN,"</a>";
+                               echo "<br /><a href='index.php?action=plugindelete&amp;plugid=$current->pid' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_UNINSTALL,"</a>";
+                               if ($plug && ($plug->hasAdminArea() > 0))
+                                       echo "<br /><a href='".htmlspecialchars($plug->getAdminURL())."'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_ADMIN,"</a>";
+                               if ($plug && ($plug->supportsFeature('HelpPage') > 0))
+                                       echo "<br /><a href='index.php?action=pluginhelp&amp;plugid=$current->pid'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_HELP,"</a>";
+                               if (quickQuery('SELECT COUNT(*) AS result FROM '.sql_table('plugin_option_desc').' WHERE ocontext=\'global\' and opid='.$current->pid) > 0)
+                                       echo "<br /><a href='index.php?action=pluginoptions&amp;plugid=$current->pid'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_OPTIONS,"</a>";
+                       echo '</td>';
+                       break;
+       }
+}
+
+function listplug_table_plugoptionlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_INFO.'</th><th>'._LISTS_VALUE.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       listplug_plugOptionRow($current);
+                       break;
+               case 'FOOT':
+                       ?>
+                       <tr>
+                               <th colspan="2"><?php echo _PLUGS_SAVE?></th>
+                       </tr><tr>
+                               <td><?php echo _PLUGS_SAVE?></td>
+                               <td><input type="submit" value="<?php echo _PLUGS_SAVE?>" /></td>
+                       </tr>
+                       <?php                   break;
+       }
+}
+
+function listplug_plugOptionRow($current) {
+       $varname = 'plugoption['.$current['oid'].']['.$current['contextid'].']';
+       // retreive the optionmeta
+       $meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+
+       // only if it is not a hidden option write the controls to the page
+       if ($meta['access'] != 'hidden') {
+               echo '<td>',htmlspecialchars($current['description']?$current['description']:$current['name']),'</td>';
+               echo '<td>';
+               switch($current['type']) {
+                       case 'yesno':
+                               ADMIN::input_yesno($varname, $current['value'], 0, 'yes', 'no');
+                               break;
+                       case 'password':
+                               echo '<input type="password" size="40" maxlength="128" name="',htmlspecialchars($varname),'" value="',htmlspecialchars($current['value']),'" />';
+                               break;
+                       case 'select':
+                               echo '<select name="'.htmlspecialchars($varname).'">';
+                               $aOptions = NucleusPlugin::getOptionSelectValues($current['typeinfo']);
+                               $aOptions = explode('|', $aOptions);
+                               for ($i=0; $i<(count($aOptions)-1); $i+=2) {
+                                       echo '<option value="'.htmlspecialchars($aOptions[$i+1]).'"';
+                                       if ($aOptions[$i+1] == $current['value'])
+                                               echo ' selected="selected"';
+                                       echo '>'.htmlspecialchars($aOptions[$i]).'</option>';
+                               }
+                               echo '</select>';
+                               break;
+                       case 'textarea':
+                               //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+                               echo '<textarea class="pluginoption" cols="30" rows="5" name="',htmlspecialchars($varname),'"';
+                               if ($meta['access'] == 'readonly') {
+                                       echo ' readonly="readonly"';
+                               }
+                               echo '>',htmlspecialchars($current['value']),'</textarea>';
+                               break;
+                       case 'text':
+                       default:
+                               //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+
+                               echo '<input type="text" size="40" maxlength="128" name="',htmlspecialchars($varname),'" value="',htmlspecialchars($current['value']),'"';
+                               if ($meta['datatype'] == 'numerical') {
+                                       echo ' onkeyup="checkNumeric(this)" onblur="checkNumeric(this)"';
+                               }
+                               if ($meta['access'] == 'readonly') {
+                                       echo ' readonly="readonly"';
+                               }
+                               echo ' />';
+               }
+               echo $current['extra'];
+               echo '</td>';
+       }
+}
+
+function listplug_table_itemlist($template, $type) {
+       $cssclass = null;
+
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LIST_ITEM_INFO."</th><th>"._LIST_ITEM_CONTENT."</th><th colspan='1'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       $current->itime = strtotime($current->itime);   // string -> unix timestamp
+
+                       if ($current->idraft == 1)
+                               $cssclass = "class='draft'";
+
+                       // (can't use offset time since offsets might vary between blogs)
+                       if ($current->itime > $template['now'])
+                               $cssclass = "class='future'";
+
+                       echo "<td $cssclass>",_LIST_ITEM_BLOG,' ', htmlspecialchars($current->bshortname);
+                       echo "    <br />",_LIST_ITEM_CAT,' ', htmlspecialchars($current->cname);
+                       echo "    <br />",_LIST_ITEM_AUTHOR, ' ', htmlspecialchars($current->mname);
+                       echo "    <br />",_LIST_ITEM_DATE," " . date("Y-m-d",$current->itime);
+                       echo "<br />",_LIST_ITEM_TIME," " . date("H:i",$current->itime);
+                       echo "</td>";
+                       echo "<td $cssclass>";
+
+                       $id = listplug_nextBatchId();
+
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->inumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<b>" . htmlspecialchars(strip_tags($current->ititle)) . "</b>";
+                       echo '</label>';
+                       echo "<br />";
+
+
+                       $current->ibody = strip_tags($current->ibody);
+                       $current->ibody = htmlspecialchars(shorten($current->ibody,300,'...'));
+
+                       echo "$current->ibody</td>";
+                       echo "<td $cssclass>";
+                       echo    "<a href='index.php?action=itemedit&amp;itemid=$current->inumber'>"._LISTS_EDIT."</a>";
+                       echo    "<br /><a href='index.php?action=itemcommentlist&amp;itemid=$current->inumber'>"._LISTS_COMMENTS."</a>";
+                       echo    "<br /><a href='index.php?action=itemmove&amp;itemid=$current->inumber'>"._LISTS_MOVE."</a>";
+                       echo    "<br /><a href='index.php?action=itemdelete&amp;itemid=$current->inumber'>"._LISTS_DELETE."</a>";
+                       echo "</td>";
+                       break;
+       }
+}
+
+// for batch operations: generates the index numbers for checkboxes
+function listplug_nextBatchId() {
+       static $id = 0;
+       return $id++;
+}
+
+function listplug_table_commentlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_INFO."</th><th>"._LIST_COMMENT."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       $current->ctime = strtotime($current->ctime);   // string -> unix timestamp
+
+                       echo '<td>';
+                       echo date("Y-m-d@H:i",$current->ctime);
+                       echo '<br />';
+                       if ($current->mname)
+                               echo htmlspecialchars($current->mname) ,' ', _LIST_COMMENTS_MEMBER;
+                       else
+                               echo htmlspecialchars($current->cuser);
+                       if ($current->cmail != '') {
+                                echo '<br />';
+                                echo htmlspecialchars($current->cmail);
+                        }
+                       if ($current->cemail != '') {
+                                echo '<br />';
+                                echo htmlspecialchars($current->cemail);
+                        }
+                       echo '</td>';
+
+                       $current->cbody = strip_tags($current->cbody);
+                       $current->cbody = htmlspecialchars(shorten($current->cbody, 300, '...'));
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->cnumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo $current->cbody;
+                       echo '</label>';
+                       echo '</td>';
+
+                       echo "<td><a href='index.php?action=commentedit&amp;commentid=$current->cnumber'>"._LISTS_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=commentdelete&amp;commentid=$current->cnumber'>"._LISTS_DELETE."</a></td>";
+                       if ($template['canAddBan'])
+                               echo "<td><a href='index.php?action=banlistnewfromitem&amp;itemid=$current->citem&amp;ip=", htmlspecialchars($current->cip), "' title='", htmlspecialchars($current->chost), "'>"._LIST_COMMENT_BANIP."</a></td>";
+                       break;
+       }
+}
+
+
+function listplug_table_bloglist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _NAME . "</th><th colspan='7'>" ._LISTS_ACTIONS. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo "<td title='blogid:$current->bnumber shortname:$current->bshortname'><a href='$current->burl'><img src='images/globe.gif' width='13' height='13' alt='". _BLOGLIST_TT_VISIT."' /></a> " . htmlspecialchars($current->bname) . "</td>";
+                       echo "<td><a href='index.php?action=createitem&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_ADD ."'>" . _BLOGLIST_ADD . "</a></td>";
+                       echo "<td><a href='index.php?action=itemlist&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_EDIT."'>". _BLOGLIST_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=blogcommentlist&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_COMMENTS."'>". _BLOGLIST_COMMENTS."</a></td>";
+                       echo "<td><a href='index.php?action=bookmarklet&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_BMLET."'>". _BLOGLIST_BMLET . "</a></td>";
+
+                       if ($current->tadmin == 1) {
+                               echo "<td><a href='index.php?action=blogsettings&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_SETTINGS . "'>" ._BLOGLIST_SETTINGS. "</a></td>";
+                               echo "<td><a href='index.php?action=banlist&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_BANS. "'>". _BLOGLIST_BANS."</a></td>";
+                       }
+
+                       if ($template['superadmin']) {
+                               echo "<td><a href='index.php?action=deleteblog&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_DELETE."'>" ._BLOGLIST_DELETE. "</a></td>";
+                       }
+
+
+
+                       break;
+       }
+}
+
+function listplug_table_shortblognames($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _NAME . "</th><th>" . _NAME. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->bshortname) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->bname) , '</td>';
+
+                       break;
+       }
+}
+
+function listplug_table_shortnames($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _NAME . "</th><th>" . _LISTS_DESC. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->name) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->description) , '</td>';
+
+                       break;
+       }
+}
+
+
+function listplug_table_categorylist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->catid,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo htmlspecialchars($current->cname);
+                       echo '</label>';
+                       echo '</td>';
+
+                       echo '<td>', htmlspecialchars($current->cdesc), '</td>';
+                       echo "<td><a href='index.php?action=categorydelete&amp;blogid=$current->cblog&amp;catid=$current->catid' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+                       echo "<td><a href='index.php?action=categoryedit&amp;blogid=$current->cblog&amp;catid=$current->catid' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       break;
+       }
+}
+
+
+function listplug_table_templatelist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo "<td>" , htmlspecialchars($current->tdname), "</td>";
+                       echo "<td>" , htmlspecialchars($current->tddesc), "</td>";
+                       echo "<td><a href='index.php?action=templateedit&amp;templateid=$current->tdnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       $url = $manager->addTicketToUrl('index.php?action=templateclone&templateid=' . intval($current->tdnumber));
+                       echo "<td><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LISTS_CLONE."</a></td>";
+                       echo "<td><a href='index.php?action=templatedelete&amp;templateid=$current->tdnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+function listplug_table_skinlist($template, $type) {
+       global $CONF, $DIR_SKINS, $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+
+                       // use a special style for the default skin
+                       if ($current->sdnumber == $CONF['BaseSkin']) {
+                               echo '<strong>',htmlspecialchars($current->sdname),'</strong>';
+                       } else {
+                               echo htmlspecialchars($current->sdname);
+                       }
+
+                       echo '<br /><br />';
+                       echo _LISTS_TYPE ,': ' , htmlspecialchars($current->sdtype);
+                       echo '<br />', _LIST_SKINS_INCMODE , ' ' , (($current->sdincmode=='skindir') ?_PARSER_INCMODE_SKINDIR:_PARSER_INCMODE_NORMAL);
+                       if ($current->sdincpref) echo '<br />' , _LIST_SKINS_INCPREFIX , ' ', htmlspecialchars($current->sdincpref);
+
+                       // add preview image when present
+                       if ($current->sdincpref && @file_exists($DIR_SKINS . $current->sdincpref . 'preview.png'))
+                       {
+                               echo '<br /><br />';
+
+                               $hasEnlargement = @file_exists($DIR_SKINS . $current->sdincpref . 'preview-large.png');
+                               if ($hasEnlargement)
+                                       echo '<a href="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'preview-large.png" title="View larger">';
+
+                               echo '<img class="skinpreview" src="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'preview.png" width="100" height="75" alt="Preview for \'',htmlspecialchars($current->sdname),'\' skin" />';
+
+                               if ($hasEnlargement)
+                                       echo '</a>';
+
+                               if (@file_exists($DIR_SKINS . $current->sdincpref . 'readme.html'))
+                               {
+                                       echo '<br /><a href="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'readme.html" title="More info on the \'',htmlspecialchars($current->sdname),'\' skin">Readme</a>';
+                               }
+
+
+                       }
+
+                       echo "</td>";
+
+
+                       echo "<td>" , htmlspecialchars($current->sddesc);
+                               // show list of defined parts
+                               $r = sql_query('SELECT stype FROM '.sql_table('skin').' WHERE sdesc='.$current->sdnumber . ' ORDER BY stype');
+                               $types = array();
+                               while ($o = mysql_fetch_object($r))
+                                       array_push($types,$o->stype);
+                               if (sizeof($types) > 0) {
+                                       $friendlyNames = SKIN::getFriendlyNames();
+                                       for ($i=0;$i<sizeof($types);$i++) {
+                                               $type = $types[$i];
+                                               $types[$i] = '<li>' . helpHtml('skinpart'.$type) . ' <a href="index.php?action=skinedittype&amp;skinid='.$current->sdnumber.'&amp;type='.$type.'" tabindex="'.$template['tabindex'].'">' . htmlspecialchars($friendlyNames[$type]) . "</a></li>";
+                                       }
+                                       echo '<br /><br />',_LIST_SKINS_DEFINED,' <ul>',implode($types,'') ,'</ul>';
+                               }
+                       echo "</td>";
+                       echo "<td><a href='index.php?action=skinedit&amp;skinid=$current->sdnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       $url = $manager->addTicketToUrl('index.php?action=skinclone&skinid=' . intval($current->sdnumber));
+                       echo "<td><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LISTS_CLONE."</a></td>";
+                       echo "<td><a href='index.php?action=skindelete&amp;skinid=$current->sdnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+function listplug_table_draftlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_BLOG."</th><th>"._LISTS_TITLE."</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>', htmlspecialchars($current->bshortname) , '</td>';
+                       echo '<td>', htmlspecialchars(strip_tags($current->ititle)) , '</td>';
+                       echo "<td><a href='index.php?action=itemedit&amp;itemid=$current->inumber'>"._LISTS_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=itemdelete&amp;itemid=$current->inumber'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+
+function listplug_table_actionlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_TIME.'</th><th>'._LIST_ACTION_MSG.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->timestamp), '</td>';
+                       echo '<td>' , htmlspecialchars($current->message), '</td>';
+
+                       break;
+       }
+}
+
+function listplug_table_banlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LIST_BAN_IPRANGE.'</th><th>'. _LIST_BAN_REASON.'</th><th>'._LISTS_ACTIONS.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->iprange) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->reason) , '</td>';
+                       echo "<td><a href='index.php?action=banlistdelete&amp;blogid=", intval($current->blogid) , "&amp;iprange=" , htmlspecialchars($current->iprange) , "'>",_LISTS_DELETE,"</a></td>";
+                       break;
+       }
+}
+
+?>
index ebde48f..de64814 100755 (executable)
-<?php\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- *     This class contains two classes that can be used for importing and\r
- *     exporting Nucleus skins: SKINIMPORT and SKINEXPORT\r
- *\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: skinie.php,v 1.4 2005-08-13 07:33:02 kimitake Exp $\r
- * $NucleusJP: skinie.php,v 1.3 2005/03/12 06:19:05 kimitake Exp $\r
- */\r
-\r
-class SKINIMPORT {\r
-\r
-       // hardcoded value (see constructor). When 1, interesting info about the\r
-       // parsing process is sent to the output\r
-       var $debug;\r
-       \r
-       // parser/file pointer\r
-       var $parser;\r
-       var $fp;\r
-       \r
-       // which data has been read?\r
-       var $metaDataRead;\r
-       var $allRead;   \r
-       \r
-       // extracted data\r
-       var $skins;\r
-       var $templates;\r
-       var $info;\r
-       \r
-       // to maintain track of where we are inside the XML file\r
-       var $inXml;\r
-       var $inData;\r
-       var $inMeta;\r
-       var $inSkin;\r
-       var $inTemplate;\r
-       var $currentName;\r
-       var $currentPartName;\r
-       var $cdata;     \r
-       \r
-       \r
-       \r
-       /**\r
-        * constructor initializes data structures\r
-        */\r
-       function SKINIMPORT() {\r
-               // disable magic_quotes_runtime if it's turned on\r
-               set_magic_quotes_runtime(0);\r
-       \r
-               // debugging mode?\r
-               $this->debug = 0;\r
-       \r
-               $this->reset();\r
-               \r
-       }\r
-       \r
-       function reset() {\r
-       if ($this->parser)\r
-               xml_parser_free($this->parser);\r
-               \r
-               // XML file pointer\r
-               $this->fp = 0;          \r
-               \r
-               // which data has been read?\r
-               $this->metaDataRead = 0;\r
-               $this->allRead = 0;\r
-\r
-               // to maintain track of where we are inside the XML file\r
-               $this->inXml = 0;\r
-               $this->inData = 0;\r
-               $this->inMeta = 0;\r
-               $this->inSkin = 0;\r
-               $this->inTemplate = 0;\r
-               $this->currentName = '';\r
-               $this->currentPartName = '';\r
-               \r
-               // character data pile\r
-               $this->cdata = '';\r
-               \r
-               // list of skinnames and templatenames (will be array of array)\r
-               $this->skins = array();\r
-               $this->templates = array();\r
-               \r
-               // extra info included in the XML files (e.g. installation notes)\r
-               $this->info = '';\r
-               \r
-               // init XML parser\r
-               $this->parser = xml_parser_create();\r
-               xml_set_object($this->parser, $this);\r
-               xml_set_element_handler($this->parser, 'startElement', 'endElement');\r
-               xml_set_character_data_handler($this->parser, 'characterData');\r
-               xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);\r
-\r
-       }       \r
-       \r
-       /**\r
-        * Reads an XML file into memory\r
-        *\r
-        * @param $filename\r
-        *              Which file to read\r
-        * @param $metaOnly\r
-        *              Set to 1 when only the metadata needs to be read (optional, default 0)\r
-        */\r
-       function readFile($filename, $metaOnly = 0) {\r
-               // open file\r
-               $this->fp = @fopen($filename, 'r');\r
-               if (!$this->fp) return 'Failed to open file/URL';\r
-\r
-               // here we go!\r
-               $this->inXml = 1;\r
-\r
-               while (!feof($this->fp)) {\r
-                       $tempbuffer .= fread($this->fp, 4096);\r
-               }\r
-               fclose($this->fp);\r
-\r
-/*\r
-       [2004-08-04] dekarma - Took this out since it messes up good XML if it has skins/templates\r
-                              with CDATA sections. need to investigate consequences.\r
-                              see bug [ 999914 ] Import fails (multiple skins in XML/one of them with CDATA)\r
-       \r
-               // backwards compatibility with the non-wellformed skinbackup.xml files\r
-               // generated by v2/v3 (when CDATA sections were present in skins)\r
-               // split up those CDATA sections into multiple ones\r
-               $tempbuffer = preg_replace_callback(\r
-                       "/(<!\[CDATA\[[^]]*?<!\[CDATA\[[^]]*)((?:\]\].*?<!\[CDATA.*?)*)(\]\])(.*\]\])/ms",\r
-                       create_function(\r
-                               '$matches',\r
-                               'return $matches[1] . preg_replace("/(\]\])(.*?<!\[CDATA)/ms","]]]]><![CDATA[$2",$matches[2])."]]]]><![CDATA[".$matches[4];'\r
-                       ),\r
-                       $tempbuffer\r
-               );              \r
-*/\r
-               $temp = tmpfile();\r
-               fwrite($temp, $tempbuffer);\r
-               rewind($temp);\r
-\r
-               while ( ($buffer = fread($temp, 4096) ) && (!$metaOnly || ($metaOnly && !$this->metaDataRead))) {\r
-                       $err = xml_parse( $this->parser, $buffer, feof($temp) );\r
-                       if (!$err && $this->debug)\r
-                               echo 'ERROR: ', xml_error_string(xml_get_error_code($this->parser)), '<br />';\r
-               }\r
-\r
-               // all done\r
-               $this->inXml = 0;\r
-               fclose($temp);\r
-       }       \r
-       \r
-       /**\r
-        * Returns the list of skin names\r
-        */\r
-       function getSkinNames() {\r
-               return array_keys($this->skins);\r
-       }\r
-\r
-       /**\r
-        * Returns the list of template names\r
-        */\r
-       function getTemplateNames() {\r
-               return array_keys($this->templates);\r
-       }       \r
-       \r
-       /**\r
-        * Returns the extra information included in the XML file\r
-        */\r
-       function getInfo() {\r
-               return $this->info;\r
-       }\r
-       \r
-       /**\r
-        * Writes the skins and templates to the database \r
-        *\r
-        * @param $allowOverwrite\r
-        *              set to 1 when allowed to overwrite existing skins with the same name\r
-        *              (default = 0)\r
-        */\r
-       function writeToDatabase($allowOverwrite = 0) {\r
-               $existingSkins = $this->checkSkinNameClashes();\r
-               $existingTemplates = $this->checkTemplateNameClashes();\r
-               \r
-               // if not allowed to overwrite, check if any nameclashes exists\r
-               if (!$allowOverwrite) {\r
-                       if ((sizeof($existingSkins) > 0) || (sizeof($existingTemplates) > 0))\r
-                               return 'Name clashes detected, re-run with allowOverwrite = 1 to force overwrite';\r
-               }\r
-               \r
-               foreach ($this->skins as $skinName => $data) {\r
-                       // 1. if exists: delete all part data, update desc data\r
-                       //    if not exists: create desc\r
-                       if (in_array($skinName, $existingSkins)) {\r
-                               $skinObj = SKIN::createFromName($skinName);\r
-                               \r
-                               // delete all parts of the skin\r
-                               $skinObj->deleteAllParts();\r
-                               \r
-                               // update general info\r
-                               $skinObj->updateGeneralInfo($skinName, $data['description'], $data['type'], $data['includeMode'], $data['includePrefix']);\r
-                       } else {\r
-                               $skinid = SKIN::createNew($skinName, $data['description'], $data['type'], $data['includeMode'], $data['includePrefix']);\r
-                               $skinObj = new SKIN($skinid);\r
-                       }\r
-                       \r
-                       // 2. add parts\r
-                       foreach ($data['parts'] as $partName => $partContent) {\r
-                               $skinObj->update($partName, $partContent);\r
-                       }\r
-               }\r
-               \r
-               foreach ($this->templates as $templateName => $data) {\r
-                       // 1. if exists: delete all part data, update desc data\r
-                       //    if not exists: create desc\r
-                       if (in_array($templateName, $existingTemplates)) {\r
-                               $templateObj = TEMPLATE::createFromName($templateName);\r
-                               \r
-                               // delete all parts of the template\r
-                               $templateObj->deleteAllParts();\r
-                               \r
-                               // update general info\r
-                               $templateObj->updateGeneralInfo($templateName, $data['description']);\r
-                       } else {\r
-                               $templateid = TEMPLATE::createNew($templateName, $data['description']);\r
-                               $templateObj = new TEMPLATE($templateid);\r
-                       }\r
-                       \r
-                       // 2. add parts\r
-                       foreach ($data['parts'] as $partName => $partContent) {\r
-                               $templateObj->update($partName, $partContent);\r
-                       }                       \r
-               }\r
-       \r
-                       \r
-       }\r
-       \r
-       /**\r
-         * returns an array of all the skin nameclashes (empty array when no name clashes)\r
-         */\r
-       function checkSkinNameClashes() {\r
-               $clashes = array();\r
-               \r
-               foreach ($this->skins as $skinName => $data) {\r
-                       if (SKIN::exists($skinName))\r
-                               array_push($clashes, $skinName);\r
-               }\r
-               \r
-               return $clashes;\r
-       }\r
-       \r
-       /**\r
-         * returns an array of all the template nameclashes \r
-         * (empty array when no name clashes)\r
-         */\r
-       function checkTemplateNameClashes() {\r
-               $clashes = array();\r
-               \r
-               foreach ($this->templates as $templateName => $data) {\r
-                       if (TEMPLATE::exists($templateName))\r
-                               array_push($clashes, $templateName);\r
-               }\r
-               \r
-               return $clashes;\r
-       }\r
-               \r
-       /**\r
-        * Called by XML parser for each new start element encountered\r
-        */\r
-       function startElement($parser, $name, $attrs) {\r
-               if ($this->debug) echo 'START: ', $name, '<br />';\r
-               \r
-               switch ($name) {\r
-                       case 'nucleusskin':\r
-                               $this->inData = 1;\r
-                               break;\r
-                       case 'meta':\r
-                               $this->inMeta = 1;\r
-                               break;\r
-                       case 'info':\r
-                               // no action needed\r
-                               break;\r
-                       case 'skin':\r
-                               if (!$this->inMeta) {\r
-                                       $this->inSkin = 1;\r
-                                       $this->currentName = $attrs['name'];\r
-                                       $this->skins[$this->currentName]['type'] = $attrs['type'];\r
-                                       $this->skins[$this->currentName]['includeMode'] = $attrs['includeMode'];\r
-                                       $this->skins[$this->currentName]['includePrefix'] = $attrs['includePrefix'];                                    \r
-                                       $this->skins[$this->currentName]['parts'] = array();                                                                            \r
-                               } else {\r
-                                       $this->skins[$attrs['name']] = array();                         \r
-                                       $this->skins[$attrs['name']]['parts'] = array();                                                                        \r
-                               }\r
-                               break;\r
-                       case 'template':\r
-                               if (!$this->inMeta) {\r
-                                       $this->inTemplate = 1;\r
-                                       $this->currentName = $attrs['name'];\r
-                                       $this->templates[$this->currentName]['parts'] = array();                                                                                                                        \r
-                               } else {\r
-                                       $this->templates[$attrs['name']] = array();                             \r
-                                       $this->templates[$attrs['name']]['parts'] = array();                                                                    \r
-                               }\r
-                               break;\r
-                       case 'description':\r
-                               // no action needed\r
-                               break;\r
-                       case 'part':\r
-                               $this->currentPartName = $attrs['name'];\r
-                               break;\r
-                       default:\r
-                               echo 'UNEXPECTED TAG: ' , $name , '<br />';\r
-                               break;\r
-               }\r
-               \r
-               // character data never contains other tags\r
-               $this->clearCharacterData(); \r
-               \r
-       }\r
-\r
-       /**\r
-         * Called by the XML parser for each closing tag encountered\r
-         */\r
-       function endElement($parser, $name) {\r
-               if ($this->debug) echo 'END: ', $name, '<br />';\r
-               \r
-               switch ($name) {\r
-                       case 'nucleusskin':\r
-                               $this->inData = 0;\r
-                               $this->allRead = 1;\r
-                               break;\r
-                       case 'meta':\r
-                               $this->inMeta = 0;\r
-                               $this->metaDataRead = 1;\r
-                               break;\r
-                       case 'info':\r
-                               $this->info = $this->getCharacterData();\r
-                       case 'skin':\r
-                               if (!$this->inMeta) $this->inSkin = 0;\r
-                               break;\r
-                       case 'template':\r
-                               if (!$this->inMeta) $this->inTemplate = 0;                      \r
-                               break;\r
-                       case 'description':\r
-                               if ($this->inSkin) {\r
-                                       $this->skins[$this->currentName]['description'] = $this->getCharacterData();\r
-                               } else {\r
-                                       $this->templates[$this->currentName]['description'] = $this->getCharacterData();                                \r
-                               }\r
-                               break;\r
-                       case 'part':\r
-                               if ($this->inSkin) {\r
-                                       $this->skins[$this->currentName]['parts'][$this->currentPartName] = $this->getCharacterData();\r
-                               } else {\r
-                                       $this->templates[$this->currentName]['parts'][$this->currentPartName] = $this->getCharacterData();                              \r
-                               }\r
-                               break;\r
-                       default:\r
-                               echo 'UNEXPECTED TAG: ' , $name, '<br />';\r
-                               break;\r
-               }\r
-               $this->clearCharacterData();\r
-\r
-       }\r
-       \r
-       /**\r
-        * Called by XML parser for data inside elements\r
-        */\r
-       function characterData ($parser, $data) {\r
-               if ($this->debug) echo 'NEW DATA: ', htmlspecialchars($data), '<br />';\r
-               $this->cdata .= $data;\r
-       }\r
-       \r
-       /**\r
-        * Returns the data collected so far\r
-        */\r
-       function getCharacterData() {\r
-               return $this->cdata;\r
-       }\r
-       \r
-       /**\r
-        * Clears the data buffer\r
-        */\r
-       function clearCharacterData() {\r
-               $this->cdata = '';\r
-       }\r
-       \r
-       /**\r
-        * Static method that looks for importable XML files in subdirs of the given dir\r
-        */\r
-       function searchForCandidates($dir) {\r
-               $candidates = array();\r
-\r
-               $dirhandle = opendir($dir);\r
-               while ($filename = readdir($dirhandle)) {\r
-                       if (@is_dir($dir . $filename) && ($filename != '.') && ($filename != '..')) {\r
-                               $xml_file = $dir . $filename . '/skinbackup.xml';\r
-                               if (file_exists($xml_file) && is_readable($xml_file)) {\r
-                                       $candidates[$filename] = $filename; //$xml_file;\r
-                               } \r
-\r
-                               // backwards compatibility                      \r
-                               $xml_file = $dir . $filename . '/skindata.xml';\r
-                               if (file_exists($xml_file) && is_readable($xml_file)) {\r
-                                       $candidates[$filename] = $filename; //$xml_file;\r
-                               } \r
-                       }\r
-               }\r
-               closedir($dirhandle);\r
-               \r
-               return $candidates;\r
-       \r
-       }\r
-        \r
-       \r
-}\r
-\r
-\r
-class SKINEXPORT {\r
-\r
-       var $templates;\r
-       var $skins;\r
-       var $info;\r
-       \r
-       /**\r
-        * Constructor initializes data structures\r
-        */\r
-       function SKINEXPORT() {\r
-               // list of templateIDs to export\r
-               $this->templates = array();\r
-               \r
-               // list of skinIDs to export\r
-               $this->skins = array();\r
-               \r
-               // extra info to be in XML file\r
-               $this->info = '';\r
-       }\r
-       \r
-       /**\r
-        * Adds a template to be exported\r
-        *\r
-        * @param id\r
-        *              template ID\r
-        * @result false when no such ID exists\r
-        */\r
-       function addTemplate($id) {\r
-               if (!TEMPLATE::existsID($id)) return 0;\r
-       \r
-               $this->templates[$id] = TEMPLATE::getNameFromId($id);\r
-               \r
-               return 1;\r
-       }\r
-       \r
-       /**\r
-        * Adds a skin to be exported\r
-        *\r
-        * @param id \r
-        *              skin ID\r
-        * @result false when no such ID exists\r
-        */     \r
-       function addSkin($id) {\r
-               if (!SKIN::existsID($id)) return 0;\r
-               \r
-               $this->skins[$id] = SKIN::getNameFromId($id);\r
-               \r
-               return 1;\r
-       }\r
-       \r
-       /**\r
-        * Sets the extra info to be included in the exported file\r
-        */\r
-       function setInfo($info) {\r
-               $this->info = $info;\r
-       }\r
-       \r
-       \r
-       /**\r
-        * Outputs the XML contents of the export file\r
-        *\r
-        * @param $setHeaders\r
-        *              set to 0 if you don't want to send out headers\r
-        *              (optional, default 1)\r
-        */\r
-       function export($setHeaders = 1) {\r
-               if ($setHeaders) {\r
-                       // make sure the mimetype is correct, and that the data does not show up \r
-                       // in the browser, but gets saved into and XML file (popup download window)\r
-                       header('Content-Type: text/xml');\r
-                       header('Content-Disposition: attachment; filename="skinbackup.xml"');\r
-                       header('Expires: 0');\r
-                       header('Pragma: no-cache');\r
-               }\r
-       \r
-               echo "<nucleusskin>\n";\r
-       \r
-               // meta\r
-               echo "\t<meta>\n";\r
-                       // skins\r
-                       foreach ($this->skins as $skinId => $skinName) {\r
-                               echo "\t\t", '<skin name="',htmlspecialchars($skinName),'" />',"\n";\r
-                       }\r
-                       // templates\r
-                       foreach ($this->templates as $templateId => $templateName) {\r
-                               echo "\t\t", '<template name="',htmlspecialchars($templateName),'" />',"\n";\r
-                       }\r
-                       // extra info\r
-                       if ($this->info)\r
-                               echo "\t\t<info><![CDATA[",$this->info,"]]></info>\n";\r
-               echo "\t</meta>\n\n\n";\r
-               \r
-               // contents skins\r
-               foreach ($this->skins as $skinId => $skinName) {\r
-                       $skinId = intval($skinId);\r
-                       $skinObj = new SKIN($skinId);\r
-                       \r
-                       echo "\t", '<skin name="',htmlspecialchars($skinName),'" type="',htmlspecialchars($skinObj->getContentType()),'" includeMode="',htmlspecialchars($skinObj->getIncludeMode()),'" includePrefix="',htmlspecialchars($skinObj->getIncludePrefix()),'">',"\n";\r
-                       \r
-                       echo "\t\t", '<description>',htmlspecialchars($skinObj->getDescription()),'</description>',"\n";\r
-                       \r
-                       $res = sql_query('SELECT stype, scontent FROM '.sql_table('skin').' WHERE sdesc='.$skinId);\r
-                       while ($partObj = mysql_fetch_object($res)) {\r
-                               echo "\t\t",'<part name="',htmlspecialchars($partObj->stype),'">';\r
-                               echo '<![CDATA[', $this->escapeCDATA($partObj->scontent),']]>';\r
-                               echo "</part>\n\n";\r
-                       }\r
-                       \r
-                       echo "\t</skin>\n\n\n";\r
-               }\r
-               \r
-               // contents templates\r
-               foreach ($this->templates as $templateId => $templateName) {\r
-                       $templateId = intval($templateId);\r
-                       \r
-                       echo "\t",'<template name="',htmlspecialchars($templateName),'">',"\n";\r
-                       \r
-                       echo "\t\t",'<description>',htmlspecialchars(TEMPLATE::getDesc($templateId)),'</description>',"\n";                     \r
-                       \r
-                       $res = sql_query('SELECT tpartname, tcontent FROM '.sql_table('template').' WHERE tdesc='.$templateId);\r
-                       while ($partObj = mysql_fetch_object($res)) {\r
-                               echo "\t\t",'<part name="',htmlspecialchars($partObj->tpartname),'">';\r
-                               echo '<![CDATA[', $this->escapeCDATA($partObj->tcontent) ,']]>';\r
-                               echo '</part>',"\n\n";\r
-                       }\r
-                       \r
-                       echo "\t</template>\n\n\n";\r
-               }               \r
-               \r
-               echo '</nucleusskin>';\r
-       }\r
-       \r
-       /**\r
-        * Escapes CDATA content so it can be included in another CDATA section\r
-        */\r
-       function escapeCDATA($cdata)\r
-       {\r
-               return preg_replace('/]]>/', ']]]]><![CDATA[>', $cdata);\r
-               \r
-       }\r
-}\r
-\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ *     This class contains two classes that can be used for importing and
+ *     exporting Nucleus skins: SKINIMPORT and SKINEXPORT
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: skinie.php,v 1.5 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: skinie.php,v 1.4 2005/08/13 07:33:02 kimitake Exp $
+ */
+
+class SKINIMPORT {
+
+       // hardcoded value (see constructor). When 1, interesting info about the
+       // parsing process is sent to the output
+       var $debug;
+
+       // parser/file pointer
+       var $parser;
+       var $fp;
+
+       // which data has been read?
+       var $metaDataRead;
+       var $allRead;
+
+       // extracted data
+       var $skins;
+       var $templates;
+       var $info;
+
+       // to maintain track of where we are inside the XML file
+       var $inXml;
+       var $inData;
+       var $inMeta;
+       var $inSkin;
+       var $inTemplate;
+       var $currentName;
+       var $currentPartName;
+       var $cdata;
+
+
+
+       /**
+        * constructor initializes data structures
+        */
+       function SKINIMPORT() {
+               // disable magic_quotes_runtime if it's turned on
+               set_magic_quotes_runtime(0);
+
+               // debugging mode?
+               $this->debug = 0;
+
+               $this->reset();
+
+       }
+
+       function reset() {
+               if ($this->parser)
+                       xml_parser_free($this->parser);
+
+               // XML file pointer
+               $this->fp = 0;
+
+               // which data has been read?
+               $this->metaDataRead = 0;
+               $this->allRead = 0;
+
+               // to maintain track of where we are inside the XML file
+               $this->inXml = 0;
+               $this->inData = 0;
+               $this->inMeta = 0;
+               $this->inSkin = 0;
+               $this->inTemplate = 0;
+               $this->currentName = '';
+               $this->currentPartName = '';
+
+               // character data pile
+               $this->cdata = '';
+
+               // list of skinnames and templatenames (will be array of array)
+               $this->skins = array();
+               $this->templates = array();
+
+               // extra info included in the XML files (e.g. installation notes)
+               $this->info = '';
+
+               // init XML parser
+               $this->parser = xml_parser_create();
+               xml_set_object($this->parser, $this);
+               xml_set_element_handler($this->parser, 'startElement', 'endElement');
+               xml_set_character_data_handler($this->parser, 'characterData');
+               xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
+
+       }
+
+       /**
+        * Reads an XML file into memory
+        *
+        * @param $filename
+        *              Which file to read
+        * @param $metaOnly
+        *              Set to 1 when only the metadata needs to be read (optional, default 0)
+        */
+       function readFile($filename, $metaOnly = 0) {
+               // open file
+               $this->fp = @fopen($filename, 'r');
+               if (!$this->fp) return 'Failed to open file/URL';
+
+               // here we go!
+               $this->inXml = 1;
+
+               $tempbuffer = null;
+
+               while (!feof($this->fp)) {
+                       $tempbuffer .= fread($this->fp, 4096);
+               }
+               fclose($this->fp);
+
+/*
+       [2004-08-04] dekarma - Took this out since it messes up good XML if it has skins/templates
+                                                  with CDATA sections. need to investigate consequences.
+                                                  see bug [ 999914 ] Import fails (multiple skins in XML/one of them with CDATA)
+
+               // backwards compatibility with the non-wellformed skinbackup.xml files
+               // generated by v2/v3 (when CDATA sections were present in skins)
+               // split up those CDATA sections into multiple ones
+               $tempbuffer = preg_replace_callback(
+                       "/(<!\[CDATA\[[^]]*?<!\[CDATA\[[^]]*)((?:\]\].*?<!\[CDATA.*?)*)(\]\])(.*\]\])/ms",
+                       create_function(
+                               '$matches',
+                               'return $matches[1] . preg_replace("/(\]\])(.*?<!\[CDATA)/ms","]]]]><![CDATA[$2",$matches[2])."]]]]><![CDATA[".$matches[4];'
+                       ),
+                       $tempbuffer
+               );
+*/
+               $temp = tmpfile();
+               fwrite($temp, $tempbuffer);
+               rewind($temp);
+
+               while ( ($buffer = fread($temp, 4096) ) && (!$metaOnly || ($metaOnly && !$this->metaDataRead))) {
+                       $err = xml_parse( $this->parser, $buffer, feof($temp) );
+                       if (!$err && $this->debug)
+                               echo 'ERROR: ', xml_error_string(xml_get_error_code($this->parser)), '<br />';
+               }
+
+               // all done
+               $this->inXml = 0;
+               fclose($temp);
+       }
+
+       /**
+        * Returns the list of skin names
+        */
+       function getSkinNames() {
+               return array_keys($this->skins);
+       }
+
+       /**
+        * Returns the list of template names
+        */
+       function getTemplateNames() {
+               return array_keys($this->templates);
+       }
+
+       /**
+        * Returns the extra information included in the XML file
+        */
+       function getInfo() {
+               return $this->info;
+       }
+
+       /**
+        * Writes the skins and templates to the database
+        *
+        * @param $allowOverwrite
+        *              set to 1 when allowed to overwrite existing skins with the same name
+        *              (default = 0)
+        */
+       function writeToDatabase($allowOverwrite = 0) {
+               $existingSkins = $this->checkSkinNameClashes();
+               $existingTemplates = $this->checkTemplateNameClashes();
+
+               // if not allowed to overwrite, check if any nameclashes exists
+               if (!$allowOverwrite) {
+                       if ((sizeof($existingSkins) > 0) || (sizeof($existingTemplates) > 0))
+                               return 'Name clashes detected, re-run with allowOverwrite = 1 to force overwrite';
+               }
+
+               foreach ($this->skins as $skinName => $data) {
+                       // 1. if exists: delete all part data, update desc data
+                       //    if not exists: create desc
+                       if (in_array($skinName, $existingSkins)) {
+                               $skinObj = SKIN::createFromName($skinName);
+
+                               // delete all parts of the skin
+                               $skinObj->deleteAllParts();
+
+                               // update general info
+                               $skinObj->updateGeneralInfo($skinName, $data['description'], $data['type'], $data['includeMode'], $data['includePrefix']);
+                       } else {
+                               $skinid = SKIN::createNew($skinName, $data['description'], $data['type'], $data['includeMode'], $data['includePrefix']);
+                               $skinObj = new SKIN($skinid);
+                       }
+
+                       // 2. add parts
+                       foreach ($data['parts'] as $partName => $partContent) {
+                               $skinObj->update($partName, $partContent);
+                       }
+               }
+
+               foreach ($this->templates as $templateName => $data) {
+                       // 1. if exists: delete all part data, update desc data
+                       //    if not exists: create desc
+                       if (in_array($templateName, $existingTemplates)) {
+                               $templateObj = TEMPLATE::createFromName($templateName);
+
+                               // delete all parts of the template
+                               $templateObj->deleteAllParts();
+
+                               // update general info
+                               $templateObj->updateGeneralInfo($templateName, $data['description']);
+                       } else {
+                               $templateid = TEMPLATE::createNew($templateName, $data['description']);
+                               $templateObj = new TEMPLATE($templateid);
+                       }
+
+                       // 2. add parts
+                       foreach ($data['parts'] as $partName => $partContent) {
+                               $templateObj->update($partName, $partContent);
+                       }
+               }
+
+
+       }
+
+       /**
+         * returns an array of all the skin nameclashes (empty array when no name clashes)
+         */
+       function checkSkinNameClashes() {
+               $clashes = array();
+
+               foreach ($this->skins as $skinName => $data) {
+                       if (SKIN::exists($skinName))
+                               array_push($clashes, $skinName);
+               }
+
+               return $clashes;
+       }
+
+       /**
+         * returns an array of all the template nameclashes
+         * (empty array when no name clashes)
+         */
+       function checkTemplateNameClashes() {
+               $clashes = array();
+
+               foreach ($this->templates as $templateName => $data) {
+                       if (TEMPLATE::exists($templateName))
+                               array_push($clashes, $templateName);
+               }
+
+               return $clashes;
+       }
+
+       /**
+        * Called by XML parser for each new start element encountered
+        */
+       function startElement($parser, $name, $attrs) {
+               if ($this->debug) echo 'START: ', $name, '<br />';
+
+               switch ($name) {
+                       case 'nucleusskin':
+                               $this->inData = 1;
+                               break;
+                       case 'meta':
+                               $this->inMeta = 1;
+                               break;
+                       case 'info':
+                               // no action needed
+                               break;
+                       case 'skin':
+                               if (!$this->inMeta) {
+                                       $this->inSkin = 1;
+                                       $this->currentName = $attrs['name'];
+                                       $this->skins[$this->currentName]['type'] = $attrs['type'];
+                                       $this->skins[$this->currentName]['includeMode'] = $attrs['includeMode'];
+                                       $this->skins[$this->currentName]['includePrefix'] = $attrs['includePrefix'];
+                                       $this->skins[$this->currentName]['parts'] = array();
+                               } else {
+                                       $this->skins[$attrs['name']] = array();
+                                       $this->skins[$attrs['name']]['parts'] = array();
+                               }
+                               break;
+                       case 'template':
+                               if (!$this->inMeta) {
+                                       $this->inTemplate = 1;
+                                       $this->currentName = $attrs['name'];
+                                       $this->templates[$this->currentName]['parts'] = array();
+                               } else {
+                                       $this->templates[$attrs['name']] = array();
+                                       $this->templates[$attrs['name']]['parts'] = array();
+                               }
+                               break;
+                       case 'description':
+                               // no action needed
+                               break;
+                       case 'part':
+                               $this->currentPartName = $attrs['name'];
+                               break;
+                       default:
+                               echo 'UNEXPECTED TAG: ' , $name , '<br />';
+                               break;
+               }
+
+               // character data never contains other tags
+               $this->clearCharacterData();
+
+       }
+
+       /**
+         * Called by the XML parser for each closing tag encountered
+         */
+       function endElement($parser, $name) {
+               if ($this->debug) echo 'END: ', $name, '<br />';
+
+               switch ($name) {
+                       case 'nucleusskin':
+                               $this->inData = 0;
+                               $this->allRead = 1;
+                               break;
+                       case 'meta':
+                               $this->inMeta = 0;
+                               $this->metaDataRead = 1;
+                               break;
+                       case 'info':
+                               $this->info = $this->getCharacterData();
+                       case 'skin':
+                               if (!$this->inMeta) $this->inSkin = 0;
+                               break;
+                       case 'template':
+                               if (!$this->inMeta) $this->inTemplate = 0;
+                               break;
+                       case 'description':
+                               if ($this->inSkin) {
+                                       $this->skins[$this->currentName]['description'] = $this->getCharacterData();
+                               } else {
+                                       $this->templates[$this->currentName]['description'] = $this->getCharacterData();
+                               }
+                               break;
+                       case 'part':
+                               if ($this->inSkin) {
+                                       $this->skins[$this->currentName]['parts'][$this->currentPartName] = $this->getCharacterData();
+                               } else {
+                                       $this->templates[$this->currentName]['parts'][$this->currentPartName] = $this->getCharacterData();
+                               }
+                               break;
+                       default:
+                               echo 'UNEXPECTED TAG: ' , $name, '<br />';
+                               break;
+               }
+               $this->clearCharacterData();
+
+       }
+
+       /**
+        * Called by XML parser for data inside elements
+        */
+       function characterData ($parser, $data) {
+               if ($this->debug) echo 'NEW DATA: ', htmlspecialchars($data), '<br />';
+               $this->cdata .= $data;
+       }
+
+       /**
+        * Returns the data collected so far
+        */
+       function getCharacterData() {
+               return $this->cdata;
+       }
+
+       /**
+        * Clears the data buffer
+        */
+       function clearCharacterData() {
+               $this->cdata = '';
+       }
+
+       /**
+        * Static method that looks for importable XML files in subdirs of the given dir
+        */
+       function searchForCandidates($dir) {
+               $candidates = array();
+
+               $dirhandle = opendir($dir);
+               while ($filename = readdir($dirhandle)) {
+                       if (@is_dir($dir . $filename) && ($filename != '.') && ($filename != '..')) {
+                               $xml_file = $dir . $filename . '/skinbackup.xml';
+                               if (file_exists($xml_file) && is_readable($xml_file)) {
+                                       $candidates[$filename] = $filename; //$xml_file;
+                               }
+
+                               // backwards compatibility
+                               $xml_file = $dir . $filename . '/skindata.xml';
+                               if (file_exists($xml_file) && is_readable($xml_file)) {
+                                       $candidates[$filename] = $filename; //$xml_file;
+                               }
+                       }
+               }
+               closedir($dirhandle);
+
+               return $candidates;
+
+       }
+
+
+}
+
+
+class SKINEXPORT {
+
+       var $templates;
+       var $skins;
+       var $info;
+
+       /**
+        * Constructor initializes data structures
+        */
+       function SKINEXPORT() {
+               // list of templateIDs to export
+               $this->templates = array();
+
+               // list of skinIDs to export
+               $this->skins = array();
+
+               // extra info to be in XML file
+               $this->info = '';
+       }
+
+       /**
+        * Adds a template to be exported
+        *
+        * @param id
+        *              template ID
+        * @result false when no such ID exists
+        */
+       function addTemplate($id) {
+               if (!TEMPLATE::existsID($id)) return 0;
+
+               $this->templates[$id] = TEMPLATE::getNameFromId($id);
+
+               return 1;
+       }
+
+       /**
+        * Adds a skin to be exported
+        *
+        * @param id
+        *              skin ID
+        * @result false when no such ID exists
+        */
+       function addSkin($id) {
+               if (!SKIN::existsID($id)) return 0;
+
+               $this->skins[$id] = SKIN::getNameFromId($id);
+
+               return 1;
+       }
+
+       /**
+        * Sets the extra info to be included in the exported file
+        */
+       function setInfo($info) {
+               $this->info = $info;
+       }
+
+
+       /**
+        * Outputs the XML contents of the export file
+        *
+        * @param $setHeaders
+        *              set to 0 if you don't want to send out headers
+        *              (optional, default 1)
+        */
+       function export($setHeaders = 1) {
+               if ($setHeaders) {
+                       // make sure the mimetype is correct, and that the data does not show up
+                       // in the browser, but gets saved into and XML file (popup download window)
+                       header('Content-Type: text/xml');
+                       header('Content-Disposition: attachment; filename="skinbackup.xml"');
+                       header('Expires: 0');
+                       header('Pragma: no-cache');
+               }
+
+               echo "<nucleusskin>\n";
+
+               // meta
+               echo "\t<meta>\n";
+                       // skins
+                       foreach ($this->skins as $skinId => $skinName) {
+                               echo "\t\t", '<skin name="',htmlspecialchars($skinName),'" />',"\n";
+                       }
+                       // templates
+                       foreach ($this->templates as $templateId => $templateName) {
+                               echo "\t\t", '<template name="',htmlspecialchars($templateName),'" />',"\n";
+                       }
+                       // extra info
+                       if ($this->info)
+                               echo "\t\t<info><![CDATA[",$this->info,"]]></info>\n";
+               echo "\t</meta>\n\n\n";
+
+               // contents skins
+               foreach ($this->skins as $skinId => $skinName) {
+                       $skinId = intval($skinId);
+                       $skinObj = new SKIN($skinId);
+
+                       echo "\t", '<skin name="',htmlspecialchars($skinName),'" type="',htmlspecialchars($skinObj->getContentType()),'" includeMode="',htmlspecialchars($skinObj->getIncludeMode()),'" includePrefix="',htmlspecialchars($skinObj->getIncludePrefix()),'">',"\n";
+
+                       echo "\t\t", '<description>',htmlspecialchars($skinObj->getDescription()),'</description>',"\n";
+
+                       $res = sql_query('SELECT stype, scontent FROM '.sql_table('skin').' WHERE sdesc='.$skinId);
+                       while ($partObj = mysql_fetch_object($res)) {
+                               echo "\t\t",'<part name="',htmlspecialchars($partObj->stype),'">';
+                               echo '<![CDATA[', $this->escapeCDATA($partObj->scontent),']]>';
+                               echo "</part>\n\n";
+                       }
+
+                       echo "\t</skin>\n\n\n";
+               }
+
+               // contents templates
+               foreach ($this->templates as $templateId => $templateName) {
+                       $templateId = intval($templateId);
+
+                       echo "\t",'<template name="',htmlspecialchars($templateName),'">',"\n";
+
+                       echo "\t\t",'<description>',htmlspecialchars(TEMPLATE::getDesc($templateId)),'</description>',"\n";
+
+                       $res = sql_query('SELECT tpartname, tcontent FROM '.sql_table('template').' WHERE tdesc='.$templateId);
+                       while ($partObj = mysql_fetch_object($res)) {
+                               echo "\t\t",'<part name="',htmlspecialchars($partObj->tpartname),'">';
+                               echo '<![CDATA[', $this->escapeCDATA($partObj->tcontent) ,']]>';
+                               echo '</part>',"\n\n";
+                       }
+
+                       echo "\t</template>\n\n\n";
+               }
+
+               echo '</nucleusskin>';
+       }
+
+       /**
+        * Escapes CDATA content so it can be included in another CDATA section
+        */
+       function escapeCDATA($cdata)
+       {
+               return preg_replace('/]]>/', ']]]]><![CDATA[>', $cdata);
+
+       }
+}
+
+?>
\ No newline at end of file
index 34d3a15..65c623c 100755 (executable)
-<?php\r
-\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: vars4.0.6.php,v 1.6 2005-08-13 07:33:02 kimitake Exp $\r
- * $NucleusJP: vars4.0.6.php,v 1.5 2005/03/12 06:19:05 kimitake Exp $\r
- */\r
-  \r
-/**\r
-  * The purpose of the functions below is to avoid declaring HTTP_ vars to be global\r
-  * everywhere, plus to offer support for php versions before 4.1.0, that do not\r
-  * have the _GET etc vars\r
-  */\r
-function getVar($name) {\r
-       global $HTTP_GET_VARS;\r
-       return undoMagic($HTTP_GET_VARS[$name]);\r
-}\r
-\r
-function postVar($name) {\r
-       global $HTTP_POST_VARS;\r
-       return undoMagic($HTTP_POST_VARS[$name]);\r
-}\r
-\r
-function cookieVar($name) {    \r
-       global $HTTP_COOKIE_VARS;\r
-       return undoMagic($HTTP_COOKIE_VARS[$name]);\r
-}\r
-\r
-// request: either POST or GET\r
-function requestVar($name) {\r
-       return (postVar($name)) ? postVar($name) : getVar($name);\r
-}\r
-\r
-function serverVar($name) {\r
-       global $HTTP_SERVER_VARS;\r
-       return $HTTP_SERVER_VARS[$name];\r
-}\r
-\r
-// removes magic quotes if that option is enabled\r
-function undoMagic($data) {\r
-       return get_magic_quotes_gpc() ? stripslashes_array($data) : $data;\r
-}\r
-\r
-function stripslashes_array($data) {\r
-       return is_array($data) ? array_map('stripslashes', $data) : stripslashes($data);\r
-}\r
-\r
-// integer array from request\r
-function requestIntArray($name) {\r
-       global $HTTP_POST_VARS;\r
-       return $HTTP_POST_VARS[$name];  \r
-}\r
-\r
-// array from request. Be sure to call undoMagic on the strings inside\r
-function requestArray($name) {\r
-       global $HTTP_POST_VARS;\r
-       return $HTTP_POST_VARS[$name];  \r
-}\r
-\r
-\r
-// add all the variables from the request as hidden input field\r
-// @see globalfunctions.php#passVar\r
-function passRequestVars() {\r
-       global $HTTP_POST_VARS, $HTTP_GET_VARS;\r
-       foreach ($HTTP_POST_VARS as $key => $value) {\r
-               if (($key == 'action') && ($value != requestVar('nextaction')))\r
-                       $key = 'nextaction';\r
-               // a nextaction of 'showlogin' makes no sense\r
-               if (($key == 'nextaction') && ($value == 'showlogin'))\r
-                       continue;\r
-               if (($key != 'login') && ($key != 'password'))\r
-                       passVar($key, $value);\r
-       }\r
-       foreach ($HTTP_GET_VARS as $key => $value) {\r
-               if (($key == 'action') && ($value != requestVar('nextaction')))\r
-                       $key = 'nextaction';\r
-               // a nextaction of 'showlogin' makes no sense\r
-               if (($key == 'nextaction') && ($value == 'showlogin'))\r
-                       continue;\r
-               if (($key != 'login') && ($key != 'password'))\r
-                       passVar($key, $value);\r
-       }\r
-}\r
-\r
-function postFileInfo($name) {\r
-       global $HTTP_POST_FILES;\r
-       return $HTTP_POST_FILES[$name];\r
-}\r
-\r
-function setOldAction($value) {\r
-       global $HTTP_POST_VARS;\r
-       $HTTP_POST_VARS['oldaction'] = $value;  \r
-}\r
-\r
-?>\r
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: vars4.0.6.php,v 1.7 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: vars4.0.6.php,v 1.6 2005/08/13 07:33:02 kimitake Exp $
+ */
+
+/**
+  * The purpose of the functions below is to avoid declaring HTTP_ vars to be global
+  * everywhere, plus to offer support for php versions before 4.1.0, that do not
+  * have the _GET etc vars
+  */
+function getVar($name) {
+       global $HTTP_GET_VARS;
+
+       if (!isset($HTTP_GET_VARS[$name])) {
+               return;
+       }
+
+       return undoMagic($HTTP_GET_VARS[$name]);
+}
+
+function postVar($name) {
+       global $HTTP_POST_VARS;
+
+       if (!isset($HTTP_POST_VARS[$name])) {
+               return;
+       }
+
+       return undoMagic($HTTP_POST_VARS[$name]);
+}
+
+function cookieVar($name) {
+       global $HTTP_COOKIE_VARS;
+
+       if (!isset($HTTP_COOKIE_VARS[$name])) {
+               return;
+       }
+
+       return undoMagic($HTTP_COOKIE_VARS[$name]);
+}
+
+// request: either POST or GET
+function requestVar($name) {
+       return (postVar($name)) ? postVar($name) : getVar($name);
+}
+
+function serverVar($name) {
+       global $HTTP_SERVER_VARS;
+
+       if (!isset($HTTP_SERVER_VARS[$name])) {
+               return;
+       }
+
+       return $HTTP_SERVER_VARS[$name];
+}
+
+// removes magic quotes if that option is enabled
+function undoMagic($data) {
+       if (!get_magic_quotes_gpc())
+               return $data;
+       if (ini_get('magic_quotes_sybase') != 1)
+               return stripslashes_array($data);
+       else
+               return undoSybaseQuotes_array($data);
+}
+
+function stripslashes_array($data) {
+       return is_array($data) ? array_map('stripslashes', $data) : stripslashes($data);
+}
+
+function undoSybaseQuotes_array($data) {
+       return is_array($data) ? array_map('undoSybaseQuotes', $data) : stripslashes($data);
+}
+
+function undoSybaseQuotes($data) {
+       return str_replace("''", "'", $data);
+}
+
+// integer array from request
+function requestIntArray($name) {
+       global $HTTP_POST_VARS;
+
+       if (!isset($HTTP_POST_VARS[$name])) {
+               return;
+       }
+
+       return $HTTP_POST_VARS[$name];
+}
+
+// array from request. Be sure to call undoMagic on the strings inside
+function requestArray($name) {
+       global $HTTP_POST_VARS;
+
+       if (!isset($HTTP_POST_VARS[$name])) {
+               return;
+       }
+
+       return $HTTP_POST_VARS[$name];
+}
+
+
+// add all the variables from the request as hidden input field
+// @see globalfunctions.php#passVar
+function passRequestVars() {
+       global $HTTP_POST_VARS, $HTTP_GET_VARS;
+       foreach ($HTTP_POST_VARS as $key => $value) {
+               if (($key == 'action') && ($value != requestVar('nextaction')))
+                       $key = 'nextaction';
+               // a nextaction of 'showlogin' makes no sense
+               if (($key == 'nextaction') && ($value == 'showlogin'))
+                       continue;
+               if (($key != 'login') && ($key != 'password'))
+                       passVar($key, $value);
+       }
+       foreach ($HTTP_GET_VARS as $key => $value) {
+               if (($key == 'action') && ($value != requestVar('nextaction')))
+                       $key = 'nextaction';
+               // a nextaction of 'showlogin' makes no sense
+               if (($key == 'nextaction') && ($value == 'showlogin'))
+                       continue;
+               if (($key != 'login') && ($key != 'password'))
+                       passVar($key, $value);
+       }
+}
+
+function postFileInfo($name) {
+       global $HTTP_POST_FILES;
+
+       if (!isset($HTTP_POST_FILES[$name])) {
+               return;
+       }
+
+       return $HTTP_POST_FILES[$name];
+}
+
+function setOldAction($value) {
+       global $HTTP_POST_VARS;
+       $HTTP_POST_VARS['oldaction'] = $value;
+}
+
+?>
\ No newline at end of file
index 888fa4a..b8a22d9 100755 (executable)
-<?php\r
-\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: vars4.1.0.php,v 1.6 2005-08-13 07:33:02 kimitake Exp $\r
- * $NucleusJP: vars4.1.0.php,v 1.5 2005/03/12 06:19:05 kimitake Exp $\r
- */\r
-  \r
-function getVar($name) {\r
-       return undoMagic($_GET[$name]);\r
-}\r
-\r
-function postVar($name) {\r
-       return undoMagic($_POST[$name]);\r
-}\r
-\r
-function cookieVar($name) {    \r
-       return undoMagic($_COOKIE[$name]);\r
-}\r
-\r
-function requestVar($name) {\r
-       if(array_key_exists($name,$_REQUEST))\r
-               return undoMagic($_REQUEST[$name]);\r
-       elseif( array_key_exists($name,$_GET))   \r
-               return undoMagic($_GET[$name]);\r
-       elseif( array_key_exists($name,$_POST))   \r
-               return undoMagic($_POST[$name]);\r
-       else\r
-               return;\r
-}\r
-\r
-function serverVar($name) {\r
-       return $_SERVER[$name];\r
-}\r
-\r
-// removes magic quotes if that option is enabled\r
-function undoMagic($data) {\r
-       return get_magic_quotes_gpc() ? stripslashes_array($data) : $data;\r
-}\r
-\r
-function stripslashes_array($data) {\r
-       return is_array($data) ? array_map('stripslashes', $data) : stripslashes($data);\r
-}\r
-\r
-// integer array from request\r
-function requestIntArray($name) {\r
-       return $_REQUEST[$name];        \r
-}\r
-\r
-// array from request. Be sure to call undoMagic on the strings inside\r
-function requestArray($name) {\r
-       return $_REQUEST[$name];        \r
-}\r
-\r
-// add all the variables from the request as hidden input field\r
-// @see globalfunctions.php#passVar\r
-function passRequestVars() {\r
-       foreach ($_REQUEST as $key => $value) {\r
-               if (($key == 'action') && ($value != requestVar('nextaction')))\r
-                       $key = 'nextaction';\r
-                       \r
-               // a nextaction of 'showlogin' makes no sense\r
-               if (($key == 'nextaction') && ($value == 'showlogin'))\r
-                       continue;\r
-                       \r
-               if (($key != 'login') && ($key != 'password'))\r
-                       passVar($key, $value);\r
-       }\r
-}\r
-\r
-function postFileInfo($name) {\r
-       return $_FILES[$name];\r
-}\r
-\r
-function setOldAction($value) {\r
-       $_POST['oldaction'] = $value;   \r
-}\r
-\r
-?>\r
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: vars4.1.0.php,v 1.7 2006-07-12 07:11:47 kimitake Exp $
+ * $NucleusJP: vars4.1.0.php,v 1.6 2005/08/13 07:33:02 kimitake Exp $
+ */
+
+function getVar($name) {
+       if (!isset($_GET[$name])) {
+               return;
+       }
+
+       return undoMagic($_GET[$name]);
+}
+
+function postVar($name) {
+       if (!isset($_POST[$name])) {
+               return;
+       }
+
+       return undoMagic($_POST[$name]);
+}
+
+function cookieVar($name) {
+       if (!isset($_COOKIE[$name])) {
+               return;
+       }
+
+       return undoMagic($_COOKIE[$name]);
+}
+
+function requestVar($name) {
+       if(array_key_exists($name,$_REQUEST))
+               return undoMagic($_REQUEST[$name]);
+       elseif( array_key_exists($name,$_GET))
+               return undoMagic($_GET[$name]);
+       elseif( array_key_exists($name,$_POST))
+               return undoMagic($_POST[$name]);
+       else
+               return;
+}
+
+function serverVar($name) {
+       if (!isset($_SERVER[$name])) {
+               return false;
+       }
+
+       return $_SERVER[$name];
+}
+
+// removes magic quotes if that option is enabled
+function undoMagic($data) {
+       if (!get_magic_quotes_gpc())
+               return $data;
+       if (ini_get('magic_quotes_sybase') != 1)
+               return stripslashes_array($data);
+       else
+               return undoSybaseQuotes_array($data);
+}
+
+function stripslashes_array($data) {
+       return is_array($data) ? array_map('stripslashes', $data) : stripslashes($data);
+}
+
+function undoSybaseQuotes_array($data) {
+       return is_array($data) ? array_map('undoSybaseQuotes', $data) : stripslashes($data);
+}
+
+function undoSybaseQuotes($data) {
+       return str_replace("''", "'", $data);
+}
+
+// integer array from request
+function requestIntArray($name) {
+       if (!isset($_REQUEST[$name])) {
+               return;
+       }
+
+       return $_REQUEST[$name];
+}
+
+// array from request. Be sure to call undoMagic on the strings inside
+function requestArray($name) {
+       if (!isset($_REQUEST[$name])) {
+               return;
+       }
+
+       return $_REQUEST[$name];
+}
+
+// add all the variables from the request as hidden input field
+// @see globalfunctions.php#passVar
+function passRequestVars() {
+       foreach ($_REQUEST as $key => $value) {
+               if (($key == 'action') && ($value != requestVar('nextaction')))
+                       $key = 'nextaction';
+
+               // a nextaction of 'showlogin' makes no sense
+               if (($key == 'nextaction') && ($value == 'showlogin'))
+                       continue;
+
+               if (($key != 'login') && ($key != 'password'))
+                       passVar($key, $value);
+       }
+}
+
+function postFileInfo($name) {
+       if (!isset($_FILES[$name])) {
+               return;
+       }
+
+       return $_FILES[$name];
+}
+
+function setOldAction($value) {
+       $_POST['oldaction'] = $value;
+}
+
+
+?>
\ No newline at end of file
index aca15fc..ced24c1 100755 (executable)
-<?php                                  // -*-c++-*-\r
-// by Edd Dumbill (C) 1999-2002\r
-// <edd@usefulinc.com>\r
-// $Id: xmlrpc.inc.php,v 1.5 2005-08-13 07:24:44 kimitake Exp $\r
-// $NucleusJP$\r
-\r
-\r
-// Copyright (c) 1999,2000,2002 Edd Dumbill.\r
-// All rights reserved.\r
-//\r
-// Redistribution and use in source and binary forms, with or without\r
-// modification, are permitted provided that the following conditions\r
-// are met:\r
-//\r
-//    * Redistributions of source code must retain the above copyright\r
-//      notice, this list of conditions and the following disclaimer.\r
-//\r
-//    * Redistributions in binary form must reproduce the above\r
-//      copyright notice, this list of conditions and the following\r
-//      disclaimer in the documentation and/or other materials provided\r
-//      with the distribution.\r
-//\r
-//    * Neither the name of the "XML-RPC for PHP" nor the names of its\r
-//      contributors may be used to endorse or promote products derived\r
-//      from this software without specific prior written permission.\r
-//\r
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r
-// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
-// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
-// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
-// OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
-       if (!function_exists('xml_parser_create'))\r
-       {\r
-               // Win 32 fix. From: 'Leo West' <lwest@imaginet.fr>\r
-               if($WINDIR)\r
-               {\r
-                       dl('php3_xml.dll');\r
-               }\r
-               else\r
-               {\r
-                       dl('xml.so');\r
-               }\r
-       }\r
-\r
-       // G. Giunta 2005/01/29: declare global these variables,\r
-       // so that xmlrpc.inc will work even if included from within a function\r
-       // NB: it will give warnings in PHP3, so we comment it out\r
-       // Milosch: Next round, maybe we should explicitly request these via $GLOBALS where used.\r
-       if (phpversion() >= '4')\r
-       {\r
-               global $xmlrpcI4;\r
-               global $xmlrpcInt;\r
-               global $xmlrpcDouble;\r
-               global $xmlrpcString;\r
-               global $xmlrpcDateTime;\r
-               global $xmlrpcBase64;\r
-               global $xmlrpcArray;\r
-               global $xmlrpcStruct;\r
-\r
-               global $xmlrpcTypes;\r
-               global $xmlEntities;\r
-               global $xmlrpcerr;\r
-               global $xmlrpcstr;\r
-               global $xmlrpc_defencoding;\r
-               global $xmlrpc_internalencoding;\r
-               global $xmlrpcName;\r
-               global $xmlrpcVersion;\r
-               global $xmlrpcerruser;\r
-               global $xmlrpcerrxml;\r
-               global $xmlrpc_backslash;\r
-               global $_xh;\r
-       }\r
-       $xmlrpcI4='i4';\r
-       $xmlrpcInt='int';\r
-       $xmlrpcBoolean='boolean';\r
-       $xmlrpcDouble='double';\r
-       $xmlrpcString='string';\r
-       $xmlrpcDateTime='dateTime.iso8601';\r
-       $xmlrpcBase64='base64';\r
-       $xmlrpcArray='array';\r
-       $xmlrpcStruct='struct';\r
-\r
-       $xmlrpcTypes=array(\r
-               $xmlrpcI4       => 1,\r
-               $xmlrpcInt      => 1,\r
-               $xmlrpcBoolean  => 1,\r
-               $xmlrpcString   => 1,\r
-               $xmlrpcDouble   => 1,\r
-               $xmlrpcDateTime => 1,\r
-               $xmlrpcBase64   => 1,\r
-               $xmlrpcArray    => 2,\r
-               $xmlrpcStruct   => 3\r
-       );\r
-\r
-       $xmlEntities=array(\r
-               'amp'  => '&',\r
-               'quot' => '"',\r
-               'lt'   => '<',\r
-               'gt'   => '>',\r
-               'apos' => "'"\r
-       );\r
-\r
-       $xmlrpcerr['unknown_method']=1;\r
-       $xmlrpcstr['unknown_method']='Unknown method';\r
-       $xmlrpcerr['invalid_return']=2;\r
-       $xmlrpcstr['invalid_return']='Invalid return payload: enable debugging to examine incoming payload';\r
-       $xmlrpcerr['incorrect_params']=3;\r
-       $xmlrpcstr['incorrect_params']='Incorrect parameters passed to method';\r
-       $xmlrpcerr['introspect_unknown']=4;\r
-       $xmlrpcstr['introspect_unknown']="Can't introspect: method unknown";\r
-       $xmlrpcerr['http_error']=5;\r
-       $xmlrpcstr['http_error']="Didn't receive 200 OK from remote server.";\r
-       $xmlrpcerr['no_data']=6;\r
-       $xmlrpcstr['no_data']='No data received from server.';\r
-       $xmlrpcerr['no_ssl']=7;\r
-       $xmlrpcstr['no_ssl']='No SSL support compiled in.';\r
-       $xmlrpcerr['curl_fail']=8;\r
-       $xmlrpcstr['curl_fail']='CURL error';\r
-\r
-\r
-       $xmlrpcerr['multicall_notstruct'] = 9;\r
-       $xmlrpcstr['multicall_notstruct'] = 'system.multicall expected struct';\r
-       $xmlrpcerr['multicall_nomethod']  = 10;\r
-       $xmlrpcstr['multicall_nomethod']  = 'missing methodName';\r
-       $xmlrpcerr['multicall_notstring'] = 11;\r
-       $xmlrpcstr['multicall_notstring'] = 'methodName is not a string';\r
-       $xmlrpcerr['multicall_recursion'] = 12;\r
-       $xmlrpcstr['multicall_recursion'] = 'recursive system.multicall forbidden';\r
-       $xmlrpcerr['multicall_noparams']  = 13;\r
-       $xmlrpcstr['multicall_noparams']  = 'missing params';\r
-       $xmlrpcerr['multicall_notarray']  = 14;\r
-       $xmlrpcstr['multicall_notarray']  = 'params is not an array';\r
-\r
-       // The charset encoding expected by the server for received messages and\r
-       // by the client for received responses\r
-       $xmlrpc_defencoding='UTF-8';\r
-       // The encoding used by PHP.\r
-       // String values received will be converted to this.\r
-       $xmlrpc_internalencoding='ISO-8859-1';\r
-\r
-       $xmlrpcName='XML-RPC for PHP';\r
-       $xmlrpcVersion='1.1.1';\r
-\r
-       // let user errors start at 800\r
-       $xmlrpcerruser=800;\r
-       // let XML parse errors start at 100\r
-       $xmlrpcerrxml=100;\r
-\r
-       // formulate backslashes for escaping regexp\r
-       $xmlrpc_backslash=chr(92).chr(92);\r
-\r
-       // used to store state during parsing\r
-       // quick explanation of components:\r
-       //   st - used to build up a string for evaluation\r
-       //   ac - used to accumulate values\r
-       //   qt - used to decide if quotes are needed for evaluation\r
-       //   cm - used to denote struct or array (comma needed)\r
-       //   isf - used to indicate a fault\r
-       //   lv - used to indicate "looking for a value": implements\r
-       //        the logic to allow values with no types to be strings\r
-       //   params - used to store parameters in method calls\r
-       //   method - used to store method name\r
-\r
-       $_xh=array();\r
-\r
-       /**\r
-       * To help correct communication of non-ascii chars inside strings, regardless\r
-       * of the charset used when sending requests, parsing them, sending responses\r
-       * and parsing responses, convert all non-ascii chars present in the message\r
-       * into their equivalent 'charset entity'. Charset entities enumerated this way\r
-       * are independent of the charset encoding used to transmit them, and all XML\r
-       * parsers are bound to understand them.\r
-       */\r
-       function xmlrpc_entity_decode($string)\r
-       {\r
-               $top=split('&', $string);\r
-               $op='';\r
-               $i=0;\r
-               while($i<sizeof($top))\r
-               {\r
-                       if (ereg("^([#a-zA-Z0-9]+);", $top[$i], $regs))\r
-                       {\r
-                               $op.=ereg_replace("^[#a-zA-Z0-9]+;",\r
-                               xmlrpc_lookup_entity($regs[1]),\r
-                               $top[$i]);\r
-                       }\r
-                       else\r
-                       {\r
-                               if ($i==0)\r
-                               {\r
-                                       $op=$top[$i];\r
-                               }\r
-                               else\r
-                               {\r
-                                       $op.='&' . $top[$i];\r
-                               }\r
-                       }\r
-                       $i++;\r
-               }\r
-               return $op;\r
-       }\r
-\r
-       function xmlrpc_lookup_entity($ent)\r
-       {\r
-               global $xmlEntities;\r
-\r
-               if (isset($xmlEntities[strtolower($ent)]))\r
-               {\r
-                       return $xmlEntities[strtolower($ent)];\r
-               }\r
-               if (ereg("^#([0-9]+)$", $ent, $regs))\r
-               {\r
-                       return chr($regs[1]);\r
-               }\r
-               return '?';\r
-       }\r
-\r
-       /**\r
-        * These entities originate from HTML specs (1.1, proposed 2.0, etc),\r
-        * and are taken directly from php-4.3.1/ext/mbstring/html_entities.c.\r
-        * Until php provides functionality to translate these entities in its\r
-        * core library, use this function.\r
-        */\r
-       function xmlrpc_html_entity_xlate($data = '')\r
-       {\r
-               $entities = array(\r
-                       "&nbsp;" => "&#160;",\r
-                       "&iexcl;" => "&#161;",\r
-                       "&cent;" => "&#162;",\r
-                       "&pound;" => "&#163;",\r
-                       "&curren;" => "&#164;",\r
-                       "&yen;" => "&#165;",\r
-                       "&brvbar;" => "&#166;",\r
-                       "&sect;" => "&#167;",\r
-                       "&uml;" => "&#168;",\r
-                       "&copy;" => "&#169;",\r
-                       "&ordf;" => "&#170;",\r
-                       "&laquo;" => "&#171;",\r
-                       "&not;" => "&#172;",\r
-                       "&shy;" => "&#173;",\r
-                       "&reg;" => "&#174;",\r
-                       "&macr;" => "&#175;",\r
-                       "&deg;" => "&#176;",\r
-                       "&plusmn;" => "&#177;",\r
-                       "&sup2;" => "&#178;",\r
-                       "&sup3;" => "&#179;",\r
-                       "&acute;" => "&#180;",\r
-                       "&micro;" => "&#181;",\r
-                       "&para;" => "&#182;",\r
-                       "&middot;" => "&#183;",\r
-                       "&cedil;" => "&#184;",\r
-                       "&sup1;" => "&#185;",\r
-                       "&ordm;" => "&#186;",\r
-                       "&raquo;" => "&#187;",\r
-                       "&frac14;" => "&#188;",\r
-                       "&frac12;" => "&#189;",\r
-                       "&frac34;" => "&#190;",\r
-                       "&iquest;" => "&#191;",\r
-                       "&Agrave;" => "&#192;",\r
-                       "&Aacute;" => "&#193;",\r
-                       "&Acirc;" => "&#194;",\r
-                       "&Atilde;" => "&#195;",\r
-                       "&Auml;" => "&#196;",\r
-                       "&Aring;" => "&#197;",\r
-                       "&AElig;" => "&#198;",\r
-                       "&Ccedil;" => "&#199;",\r
-                       "&Egrave;" => "&#200;",\r
-                       "&Eacute;" => "&#201;",\r
-                       "&Ecirc;" => "&#202;",\r
-                       "&Euml;" => "&#203;",\r
-                       "&Igrave;" => "&#204;",\r
-                       "&Iacute;" => "&#205;",\r
-                       "&Icirc;" => "&#206;",\r
-                       "&Iuml;" => "&#207;",\r
-                       "&ETH;" => "&#208;",\r
-                       "&Ntilde;" => "&#209;",\r
-                       "&Ograve;" => "&#210;",\r
-                       "&Oacute;" => "&#211;",\r
-                       "&Ocirc;" => "&#212;",\r
-                       "&Otilde;" => "&#213;",\r
-                       "&Ouml;" => "&#214;",\r
-                       "&times;" => "&#215;",\r
-                       "&Oslash;" => "&#216;",\r
-                       "&Ugrave;" => "&#217;",\r
-                       "&Uacute;" => "&#218;",\r
-                       "&Ucirc;" => "&#219;",\r
-                       "&Uuml;" => "&#220;",\r
-                       "&Yacute;" => "&#221;",\r
-                       "&THORN;" => "&#222;",\r
-                       "&szlig;" => "&#223;",\r
-                       "&agrave;" => "&#224;",\r
-                       "&aacute;" => "&#225;",\r
-                       "&acirc;" => "&#226;",\r
-                       "&atilde;" => "&#227;",\r
-                       "&auml;" => "&#228;",\r
-                       "&aring;" => "&#229;",\r
-                       "&aelig;" => "&#230;",\r
-                       "&ccedil;" => "&#231;",\r
-                       "&egrave;" => "&#232;",\r
-                       "&eacute;" => "&#233;",\r
-                       "&ecirc;" => "&#234;",\r
-                       "&euml;" => "&#235;",\r
-                       "&igrave;" => "&#236;",\r
-                       "&iacute;" => "&#237;",\r
-                       "&icirc;" => "&#238;",\r
-                       "&iuml;" => "&#239;",\r
-                       "&eth;" => "&#240;",\r
-                       "&ntilde;" => "&#241;",\r
-                       "&ograve;" => "&#242;",\r
-                       "&oacute;" => "&#243;",\r
-                       "&ocirc;" => "&#244;",\r
-                       "&otilde;" => "&#245;",\r
-                       "&ouml;" => "&#246;",\r
-                       "&divide;" => "&#247;",\r
-                       "&oslash;" => "&#248;",\r
-                       "&ugrave;" => "&#249;",\r
-                       "&uacute;" => "&#250;",\r
-                       "&ucirc;" => "&#251;",\r
-                       "&uuml;" => "&#252;",\r
-                       "&yacute;" => "&#253;",\r
-                       "&thorn;" => "&#254;",\r
-                       "&yuml;" => "&#255;",\r
-                       "&OElig;" => "&#338;",\r
-                       "&oelig;" => "&#339;",\r
-                       "&Scaron;" => "&#352;",\r
-                       "&scaron;" => "&#353;",\r
-                       "&Yuml;" => "&#376;",\r
-                       "&fnof;" => "&#402;",\r
-                       "&circ;" => "&#710;",\r
-                       "&tilde;" => "&#732;",\r
-                       "&Alpha;" => "&#913;",\r
-                       "&Beta;" => "&#914;",\r
-                       "&Gamma;" => "&#915;",\r
-                       "&Delta;" => "&#916;",\r
-                       "&Epsilon;" => "&#917;",\r
-                       "&Zeta;" => "&#918;",\r
-                       "&Eta;" => "&#919;",\r
-                       "&Theta;" => "&#920;",\r
-                       "&Iota;" => "&#921;",\r
-                       "&Kappa;" => "&#922;",\r
-                       "&Lambda;" => "&#923;",\r
-                       "&Mu;" => "&#924;",\r
-                       "&Nu;" => "&#925;",\r
-                       "&Xi;" => "&#926;",\r
-                       "&Omicron;" => "&#927;",\r
-                       "&Pi;" => "&#928;",\r
-                       "&Rho;" => "&#929;",\r
-                       "&Sigma;" => "&#931;",\r
-                       "&Tau;" => "&#932;",\r
-                       "&Upsilon;" => "&#933;",\r
-                       "&Phi;" => "&#934;",\r
-                       "&Chi;" => "&#935;",\r
-                       "&Psi;" => "&#936;",\r
-                       "&Omega;" => "&#937;",\r
-                       "&beta;" => "&#946;",\r
-                       "&gamma;" => "&#947;",\r
-                       "&delta;" => "&#948;",\r
-                       "&epsilon;" => "&#949;",\r
-                       "&zeta;" => "&#950;",\r
-                       "&eta;" => "&#951;",\r
-                       "&theta;" => "&#952;",\r
-                       "&iota;" => "&#953;",\r
-                       "&kappa;" => "&#954;",\r
-                       "&lambda;" => "&#955;",\r
-                       "&mu;" => "&#956;",\r
-                       "&nu;" => "&#957;",\r
-                       "&xi;" => "&#958;",\r
-                       "&omicron;" => "&#959;",\r
-                       "&pi;" => "&#960;",\r
-                       "&rho;" => "&#961;",\r
-                       "&sigmaf;" => "&#962;",\r
-                       "&sigma;" => "&#963;",\r
-                       "&tau;" => "&#964;",\r
-                       "&upsilon;" => "&#965;",\r
-                       "&phi;" => "&#966;",\r
-                       "&chi;" => "&#967;",\r
-                       "&psi;" => "&#968;",\r
-                       "&omega;" => "&#969;",\r
-                       "&thetasym;" => "&#977;",\r
-                       "&upsih;" => "&#978;",\r
-                       "&piv;" => "&#982;",\r
-                       "&ensp;" => "&#8194;",\r
-                       "&emsp;" => "&#8195;",\r
-                       "&thinsp;" => "&#8201;",\r
-                       "&zwnj;" => "&#8204;",\r
-                       "&zwj;" => "&#8205;",\r
-                       "&lrm;" => "&#8206;",\r
-                       "&rlm;" => "&#8207;",\r
-                       "&ndash;" => "&#8211;",\r
-                       "&mdash;" => "&#8212;",\r
-                       "&lsquo;" => "&#8216;",\r
-                       "&rsquo;" => "&#8217;",\r
-                       "&sbquo;" => "&#8218;",\r
-                       "&ldquo;" => "&#8220;",\r
-                       "&rdquo;" => "&#8221;",\r
-                       "&bdquo;" => "&#8222;",\r
-                       "&dagger;" => "&#8224;",\r
-                       "&Dagger;" => "&#8225;",\r
-                       "&bull;" => "&#8226;",\r
-                       "&hellip;" => "&#8230;",\r
-                       "&permil;" => "&#8240;",\r
-                       "&prime;" => "&#8242;",\r
-                       "&Prime;" => "&#8243;",\r
-                       "&lsaquo;" => "&#8249;",\r
-                       "&rsaquo;" => "&#8250;",\r
-                       "&oline;" => "&#8254;",\r
-                       "&frasl;" => "&#8260;",\r
-                       "&euro;" => "&#8364;",\r
-                       "&weierp;" => "&#8472;",\r
-                       "&image;" => "&#8465;",\r
-                       "&real;" => "&#8476;",\r
-                       "&trade;" => "&#8482;",\r
-                       "&alefsym;" => "&#8501;",\r
-                       "&larr;" => "&#8592;",\r
-                       "&uarr;" => "&#8593;",\r
-                       "&rarr;" => "&#8594;",\r
-                       "&darr;" => "&#8595;",\r
-                       "&harr;" => "&#8596;",\r
-                       "&crarr;" => "&#8629;",\r
-                       "&lArr;" => "&#8656;",\r
-                       "&uArr;" => "&#8657;",\r
-                       "&rArr;" => "&#8658;",\r
-                       "&dArr;" => "&#8659;",\r
-                       "&hArr;" => "&#8660;",\r
-                       "&forall;" => "&#8704;",\r
-                       "&part;" => "&#8706;",\r
-                       "&exist;" => "&#8707;",\r
-                       "&empty;" => "&#8709;",\r
-                       "&nabla;" => "&#8711;",\r
-                       "&isin;" => "&#8712;",\r
-                       "&notin;" => "&#8713;",\r
-                       "&ni;" => "&#8715;",\r
-                       "&prod;" => "&#8719;",\r
-                       "&sum;" => "&#8721;",\r
-                       "&minus;" => "&#8722;",\r
-                       "&lowast;" => "&#8727;",\r
-                       "&radic;" => "&#8730;",\r
-                       "&prop;" => "&#8733;",\r
-                       "&infin;" => "&#8734;",\r
-                       "&ang;" => "&#8736;",\r
-                       "&and;" => "&#8743;",\r
-                       "&or;" => "&#8744;",\r
-                       "&cap;" => "&#8745;",\r
-                       "&cup;" => "&#8746;",\r
-                       "&int;" => "&#8747;",\r
-                       "&there4;" => "&#8756;",\r
-                       "&sim;" => "&#8764;",\r
-                       "&cong;" => "&#8773;",\r
-                       "&asymp;" => "&#8776;",\r
-                       "&ne;" => "&#8800;",\r
-                       "&equiv;" => "&#8801;",\r
-                       "&le;" => "&#8804;",\r
-                       "&ge;" => "&#8805;",\r
-                       "&sub;" => "&#8834;",\r
-                       "&sup;" => "&#8835;",\r
-                       "&nsub;" => "&#8836;",\r
-                       "&sube;" => "&#8838;",\r
-                       "&supe;" => "&#8839;",\r
-                       "&oplus;" => "&#8853;",\r
-                       "&otimes;" => "&#8855;",\r
-                       "&perp;" => "&#8869;",\r
-                       "&sdot;" => "&#8901;",\r
-                       "&lceil;" => "&#8968;",\r
-                       "&rceil;" => "&#8969;",\r
-                       "&lfloor;" => "&#8970;",\r
-                       "&rfloor;" => "&#8971;",\r
-                       "&lang;" => "&#9001;",\r
-                       "&rang;" => "&#9002;",\r
-                       "&loz;" => "&#9674;",\r
-                       "&spades;" => "&#9824;",\r
-                       "&clubs;" => "&#9827;",\r
-                       "&hearts;" => "&#9829;",\r
-                       "&diams;" => "&#9830;");\r
-               return strtr($data, $entities);\r
-       }\r
-\r
-       function xmlrpc_encode_entitites($data) \r
-       {\r
-               $length = strlen($data);\r
-               $escapeddata = "";\r
-               for($position = 0; $position < $length; $position++)\r
-               {\r
-                       $character = substr($data, $position, 1);\r
-                       $code = Ord($character);\r
-                       switch($code) {\r
-                               case 34:\r
-                               $character = "&quot;";\r
-                               break;\r
-                               case 38:\r
-                               $character = "&amp;";\r
-                               break;\r
-                               case 39:\r
-                               $character = "&apos;";\r
-                               break;\r
-                               case 60:\r
-                               $character = "&lt;";\r
-                               break;\r
-                               case 62:\r
-                               $character = "&gt;";\r
-                               break;\r
-                               default:\r
-                               if ($code < 32 || $code > 159)\r
-                                       $character = ("&#".strval($code).";");\r
-                               break;\r
-                       }\r
-                       $escapeddata .= $character;\r
-               }\r
-               return $escapeddata;\r
-       }\r
-\r
-       function xmlrpc_se($parser, $name, $attrs)\r
-       {\r
-               global $_xh, $xmlrpcDateTime, $xmlrpcString;\r
-\r
-               switch($name)\r
-               {\r
-                       case 'STRUCT':\r
-                       case 'ARRAY':\r
-                               $_xh[$parser]['st'].='array(';\r
-                               $_xh[$parser]['cm']++;\r
-                               // this last line turns quoting off\r
-                               // this means if we get an empty array we'll\r
-                               // simply get a bit of whitespace in the eval\r
-                               $_xh[$parser]['qt']=0;\r
-                               break;\r
-                       case 'NAME':\r
-                               $_xh[$parser]['st'].='"';\r
-                               $_xh[$parser]['ac']='';\r
-                               break;\r
-                       case 'FAULT':\r
-                               $_xh[$parser]['isf']=1;\r
-                               break;\r
-                       case 'PARAM':\r
-                               $_xh[$parser]['st']='';\r
-                               break;\r
-                       case 'VALUE':\r
-                               $_xh[$parser]['st'].='new xmlrpcval(';\r
-                               $_xh[$parser]['vt']=$xmlrpcString;\r
-                               $_xh[$parser]['ac']='';\r
-                               $_xh[$parser]['qt']=0;\r
-                               $_xh[$parser]['lv']=1;\r
-                               // look for a value: if this is still 1 by the\r
-                               // time we reach the first data segment then the type is string\r
-                               // by implication and we need to add in a quote\r
-                               break;\r
-                       case 'I4':\r
-                       case 'INT':\r
-                       case 'STRING':\r
-                       case 'BOOLEAN':\r
-                       case 'DOUBLE':\r
-                       case 'DATETIME.ISO8601':\r
-                       case 'BASE64':\r
-                               $_xh[$parser]['ac']=''; // reset the accumulator\r
-\r
-                               if ($name=='DATETIME.ISO8601' || $name=='STRING')\r
-                               {\r
-                                       $_xh[$parser]['qt']=1;\r
-                                       if ($name=='DATETIME.ISO8601')\r
-                                       {\r
-                                               $_xh[$parser]['vt']=$xmlrpcDateTime;\r
-                                       }\r
-                               }\r
-                               elseif ($name=='BASE64')\r
-                               {\r
-                                       $_xh[$parser]['qt']=2;\r
-                               }\r
-                               else\r
-                               {\r
-                                       // No quoting is required here -- but\r
-                                       // at the end of the element we must check\r
-                                       // for data format errors.\r
-                                       $_xh[$parser]['qt']=0;\r
-                               }\r
-                               break;\r
-                       case 'MEMBER':\r
-                               $_xh[$parser]['ac']='';\r
-                               break;\r
-                       default:\r
-                               break;\r
-               }\r
-\r
-               if ($name!='VALUE')\r
-               {\r
-                       $_xh[$parser]['lv']=0;\r
-               }\r
-       }\r
-\r
-       function xmlrpc_ee($parser, $name)\r
-       {\r
-               global $_xh,$xmlrpcTypes,$xmlrpcString;\r
-\r
-               switch($name)\r
-               {\r
-                       case 'STRUCT':\r
-                       case 'ARRAY':\r
-                               if ($_xh[$parser]['cm'] && substr($_xh[$parser]['st'], -1) ==',')\r
-                               {\r
-                                       $_xh[$parser]['st']=substr($_xh[$parser]['st'],0,-1);\r
-                               }\r
-                               $_xh[$parser]['st'].=')';\r
-                               $_xh[$parser]['vt']=strtolower($name);\r
-                               $_xh[$parser]['cm']--;\r
-                               break;\r
-                       case 'NAME':\r
-                               $_xh[$parser]['st'].= $_xh[$parser]['ac'] . '" => ';\r
-                               break;\r
-                       case 'BOOLEAN':\r
-                               // special case here: we translate boolean 1 or 0 into PHP\r
-                               // constants true or false\r
-                               // NB: this simple checks helps a lot sanitizing input, ie no\r
-                               // security problems around here\r
-                               if ($_xh[$parser]['ac']=='1')\r
-                               {\r
-                                       $_xh[$parser]['ac']='true';\r
-                               }\r
-                               else\r
-                               {\r
-                                       $_xh[$parser]['ac']='false';\r
-                               }\r
-                               $_xh[$parser]['vt']=strtolower($name);\r
-                               // Drop through intentionally.\r
-                       case 'I4':\r
-                       case 'INT':\r
-                       case 'STRING':\r
-                       case 'DOUBLE':\r
-                       case 'DATETIME.ISO8601':\r
-                       case 'BASE64':\r
-                               if ($_xh[$parser]['qt']==1)\r
-                               {\r
-                                       // we use double quotes rather than single so backslashification works OK\r
-                                       $_xh[$parser]['st'].='"'. $_xh[$parser]['ac'] . '"';\r
-                               }\r
-                               elseif ($_xh[$parser]['qt']==2)\r
-                               {\r
-                                       $_xh[$parser]['st'].='base64_decode("'. $_xh[$parser]['ac'] . '")';\r
-                               }\r
-                               elseif ($name=='BOOLEAN')\r
-                               {\r
-                                       $_xh[$parser]['st'].=$_xh[$parser]['ac'];\r
-                               }\r
-                               elseif ($name=='DOUBLE')\r
-                               {\r
-                                       // we have a DOUBLE\r
-                                       // we must check that only 0123456789-.<space> are characters here\r
-                                       if (!ereg("^[+-]?[eE0123456789 \\t\\.]+$", $_xh[$parser]['ac']))\r
-                                       {\r
-                                               // TODO: find a better way of throwing an error\r
-                                               // than this!\r
-                                               error_log('XML-RPC: non numeric value received in DOUBLE: '.$_xh[$parser]['ac']);\r
-                                               $_xh[$parser]['st'].="'ERROR_NON_NUMERIC_FOUND'";\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               // it's ok, add it on\r
-                                               $_xh[$parser]['st'].=(double)$_xh[$parser]['ac'];\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       // we have an I4/INT\r
-                                       // we must check that only 0123456789-<space> are characters here\r
-                                       if (!ereg("^[+-]?[0123456789 \\t]+$", $_xh[$parser]['ac']))\r
-                                       {\r
-                                               // TODO: find a better way of throwing an error\r
-                                               // than this!\r
-                                               error_log('XML-RPC: non numeric value received in INT: '.$_xh[$parser]['ac']);\r
-                                               $_xh[$parser]['st'].="'ERROR_NON_NUMERIC_FOUND'";\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               // it's ok, add it on\r
-                                               $_xh[$parser]['st'].=(int)$_xh[$parser]['ac'];\r
-                                       }\r
-                               }\r
-                               $_xh[$parser]['ac']='';\r
-                               $_xh[$parser]['qt']=0;\r
-                               $_xh[$parser]['lv']=3; // indicate we've found a value\r
-                               break;\r
-                       case 'VALUE':\r
-                               // deal with a string value\r
-                               if (strlen($_xh[$parser]['ac'])>0 &&\r
-                                       $_xh[$parser]['vt']==$xmlrpcString)\r
-                               {\r
-                                       $_xh[$parser]['st'].='"'. $_xh[$parser]['ac'] . '"';\r
-                               }\r
-                               // This if() detects if no scalar was inside <VALUE></VALUE>\r
-                               // and pads an empty ''.\r
-                               if($_xh[$parser]['st'][strlen($_xh[$parser]['st'])-1] == '(')\r
-                               {\r
-                                       $_xh[$parser]['st'].= '""';\r
-                               }\r
-                               // G. Giunta 2005/03/12 save some chars in the reconstruction of string vals...\r
-                               if ($_xh[$parser]['vt'] != $xmlrpcString)\r
-                                       $_xh[$parser]['st'].=", '" . $_xh[$parser]['vt'] . "')";\r
-                               else\r
-                                       $_xh[$parser]['st'].=")";\r
-                               if ($_xh[$parser]['cm'])\r
-                               {\r
-                                       $_xh[$parser]['st'].=',';\r
-                               }\r
-                               break;\r
-                       case 'MEMBER':\r
-                               $_xh[$parser]['ac']='';\r
-                               $_xh[$parser]['qt']=0;\r
-                               break;\r
-                       case 'DATA':\r
-                               $_xh[$parser]['ac']='';\r
-                               $_xh[$parser]['qt']=0;\r
-                               break;\r
-                       case 'PARAM':\r
-                               $_xh[$parser]['params'][]=$_xh[$parser]['st'];\r
-                               break;\r
-                       case 'METHODNAME':\r
-                               $_xh[$parser]['method']=ereg_replace("^[\n\r\t ]+", '', $_xh[$parser]['ac']);\r
-                               break;\r
-                       // BOOLEAN HAS BEEN ENUMERATED ABOVE!\r
-                       /*case 'BOOLEAN':\r
-                               // special case here: we translate boolean 1 or 0 into PHP\r
-                               // constants true or false\r
-                               if ($_xh[$parser]['ac']=='1')\r
-                               {\r
-                                       $_xh[$parser]['ac']='true';\r
-                               }\r
-                               else\r
-                               {\r
-                                       $_xh[$parser]['ac']='false';\r
-                                       $_xh[$parser]['vt']=strtolower($name);\r
-                               }\r
-                               break;*/\r
-                       default:\r
-                               break;\r
-               }\r
-               // if it's a valid type name, set the type\r
-               if (isset($xmlrpcTypes[strtolower($name)]))\r
-               {\r
-                       $_xh[$parser]['vt']=strtolower($name);\r
-               }\r
-       }\r
-\r
-       function xmlrpc_cd($parser, $data)\r
-       {\r
-               global $_xh, $xmlrpc_backslash;\r
-\r
-               //if (ereg("^[\n\r \t]+$", $data)) return;\r
-               // print "adding [${data}]\n";\r
-\r
-               if ($_xh[$parser]['lv']!=3)\r
-               {\r
-                       // "lookforvalue==3" means that we've found an entire value\r
-                       // and should discard any further character data\r
-                       if ($_xh[$parser]['lv']==1)\r
-                       {\r
-                               // if we've found text and we're just in a <value> then\r
-                               // turn quoting on, as this will be a string\r
-                               $_xh[$parser]['qt']=1;\r
-                               // and say we've found a value\r
-                               $_xh[$parser]['lv']=2;\r
-                       }\r
-                       if(!@isset($_xh[$parser]['ac']))\r
-                       {\r
-                               $_xh[$parser]['ac'] = '';\r
-                       }\r
-                       $_xh[$parser]['ac'].=str_replace('$', '\$', str_replace('"', '\"', str_replace(chr(92),$xmlrpc_backslash, $data)));\r
-               }\r
-       }\r
-\r
-       function xmlrpc_dh($parser, $data)\r
-       {\r
-               global $_xh, $xmlrpc_backslash;\r
-               if (substr($data, 0, 1) == '&' && substr($data, -1, 1) == ';')\r
-               {\r
-                       if ($_xh[$parser]['lv']==1)\r
-                       {\r
-                               $_xh[$parser]['qt']=1;\r
-                               $_xh[$parser]['lv']=2;\r
-                       }\r
-                       $_xh[$parser]['ac'].=str_replace('$', '\$', str_replace('"', '\"', str_replace(chr(92),$xmlrpc_backslash, $data)));\r
-               }\r
-       }\r
-\r
-       class xmlrpc_client\r
-       {\r
-               var $path;\r
-               var $server;\r
-               var $port;\r
-               var $errno;\r
-               var $errstr;\r
-               var $debug=0;\r
-               var $username='';\r
-               var $password='';\r
-               var $cert='';\r
-               var $certpass='';\r
-               var $verifypeer=1;\r
-               var $verifyhost=1;\r
-               var $no_multicall=false;\r
-\r
-               function xmlrpc_client($path, $server, $port=0)\r
-               {\r
-                       $this->port=$port; $this->server=$server; $this->path=$path;\r
-               }\r
-\r
-               function setDebug($in)\r
-               {\r
-                       if ($in)\r
-                       {\r
-                               $this->debug=1;\r
-                       }\r
-                       else\r
-                       {\r
-                               $this->debug=0;\r
-                       }\r
-               }\r
-\r
-               function setCredentials($u, $p)\r
-               {\r
-                       $this->username=$u;\r
-                       $this->password=$p;\r
-               }\r
-\r
-               function setCertificate($cert, $certpass)\r
-               {\r
-                       $this->cert = $cert;\r
-                       $this->certpass = $certpass;\r
-               }\r
-\r
-               function setSSLVerifyPeer($i)\r
-               {\r
-                       $this->verifypeer = $i;\r
-               }\r
-\r
-               function setSSLVerifyHost($i)\r
-               {\r
-                       $this->verifyhost = $i;\r
-               }\r
-\r
-               function send($msg, $timeout=0, $method='http')\r
-               {\r
-                       if (is_array($msg))\r
-                       {\r
-                               // $msg is an array of xmlrpcmsg's\r
-                               return $this->multicall($msg, $timeout, $method);\r
-                       }\r
-\r
-                       // where msg is an xmlrpcmsg\r
-                       $msg->debug=$this->debug;\r
-\r
-                       if ($method == 'https')\r
-                       {\r
-                               return $this->sendPayloadHTTPS($msg,\r
-                               $this->server,\r
-                               $this->port, $timeout,\r
-                               $this->username, $this->password,\r
-                               $this->cert,\r
-                               $this->certpass);\r
-                       }\r
-                       else\r
-                       {\r
-                               return $this->sendPayloadHTTP10($msg, $this->server, $this->port,\r
-                               $timeout, $this->username, \r
-                               $this->password);\r
-                       }\r
-               }\r
-\r
-               function sendPayloadHTTP10($msg, $server, $port, $timeout=0,$username='', $password='')\r
-               {\r
-                       global $xmlrpcerr, $xmlrpcstr, $xmlrpcName, $xmlrpcVersion, $xmlrpc_defencoding;\r
-                       if ($port==0)\r
-                       {\r
-                               $port=80;\r
-                       }\r
-                       if($timeout>0)\r
-                       {\r
-                               $fp=@fsockopen($server, $port,$this->errno, $this->errstr, $timeout);\r
-                       }\r
-                       else\r
-                       {\r
-                               $fp=@fsockopen($server, $port,$this->errno, $this->errstr);\r
-                       }\r
-                       if ($fp)\r
-                       {\r
-                               if ($timeout>0 && function_exists('stream_set_timeout'))\r
-                                       stream_set_timeout($fp, $timeout);\r
-                       }\r
-                       else\r
-                       {\r
-                               $this->errstr='Connect error';\r
-                               $r=new xmlrpcresp(0, $xmlrpcerr['http_error'],$xmlrpcstr['http_error']);\r
-                               return $r;\r
-                       }\r
-                       // Only create the payload if it was not created previously\r
-                       if(empty($msg->payload))\r
-                       {\r
-                               $msg->createPayload();\r
-                       }\r
-\r
-                       // thanks to Grant Rauscher <grant7@firstworld.net>\r
-                       // for this\r
-                       $credentials='';\r
-                       if ($username!='')\r
-                       {\r
-                               $credentials='Authorization: Basic ' . base64_encode($username . ':' . $password) . "\r\n";\r
-                       }\r
-\r
-                       $op= "POST " . $this->path. " HTTP/1.0\r\n" .\r
-                               "User-Agent: " . $xmlrpcName . " " . $xmlrpcVersion . "\r\n" .\r
-                               "Host: ". $server . "\r\n" .\r
-                               $credentials . \r
-                               "Accept-Charset: " . $xmlrpc_defencoding . "\r\n" .\r
-                               "Content-Type: text/xml\r\nContent-Length: " .\r
-                               strlen($msg->payload) . "\r\n\r\n" .\r
-                               $msg->payload;\r
-\r
-                       if (!fputs($fp, $op, strlen($op)))\r
-                       {\r
-                               $this->errstr='Write error';\r
-                               $r=new xmlrpcresp(0, $xmlrpcerr['http_error'], $xmlrpcstr['http_error']);\r
-                               return $r;\r
-                       }\r
-                       $resp=$msg->parseResponseFile($fp);\r
-                       fclose($fp);\r
-                       return $resp;\r
-               }\r
-\r
-               // contributed by Justin Miller <justin@voxel.net>\r
-               // requires curl to be built into PHP\r
-               function sendPayloadHTTPS($msg, $server, $port, $timeout=0,$username='', $password='', $cert='',$certpass='')\r
-               {\r
-                       global $xmlrpcerr, $xmlrpcstr, $xmlrpcVersion, $xmlrpc_internalencoding;\r
-                       if ($port == 0)\r
-                       {\r
-                               $port = 443;\r
-                       }\r
-\r
-                       // Only create the payload if it was not created previously\r
-                       if(empty($msg->payload))\r
-                       {\r
-                               $msg->createPayload();\r
-                       }\r
-\r
-                       if (!function_exists('curl_init'))\r
-                       {\r
-                               $this->errstr='SSL unavailable on this install';\r
-                               $r=new xmlrpcresp(0, $xmlrpcerr['no_ssl'], $xmlrpcstr['no_ssl']);\r
-                               return $r;\r
-                       }\r
-\r
-                       $curl = curl_init('https://' . $server . ':' . $port . $this->path);\r
-\r
-                       curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r
-                       // results into variable\r
-                       if ($this->debug)\r
-                       {\r
-                               curl_setopt($curl, CURLOPT_VERBOSE, 1);\r
-                       }\r
-                       curl_setopt($curl, CURLOPT_USERAGENT, 'PHP XMLRPC '.$xmlrpcVersion);\r
-                       // required for XMLRPC\r
-                       curl_setopt($curl, CURLOPT_POST, 1);\r
-                       // post the data\r
-                       curl_setopt($curl, CURLOPT_POSTFIELDS, $msg->payload);\r
-                       // the data\r
-                       curl_setopt($curl, CURLOPT_HEADER, 1);\r
-                       // return the header too\r
-                       curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml', 'Accept-Charset: '.$xmlrpc_internalencoding));\r
-                       // whether to verify remote host's cert\r
-                       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verifypeer);\r
-                       // whether to verify cert's common name (CN); 0 for no, 1 to verify that it exists, and 2 to verify that it matches the hostname used\r
-                       curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $this->verifyhost);\r
-                       // required for XMLRPC\r
-                       if ($timeout)\r
-                       {\r
-                               curl_setopt($curl, CURLOPT_TIMEOUT, $timeout == 1 ? 1 : $timeout - 1);\r
-                       }\r
-                       // timeout is borked\r
-                       if ($username && $password)\r
-                       {\r
-                               curl_setopt($curl, CURLOPT_USERPWD,"$username:$password");\r
-                       }\r
-                       // set auth stuff\r
-                       if ($cert)\r
-                       {\r
-                               curl_setopt($curl, CURLOPT_SSLCERT, $cert);\r
-                       }\r
-                       // set cert file\r
-                       if ($certpass)\r
-                       {\r
-                               curl_setopt($curl, CURLOPT_SSLCERTPASSWD,$certpass);\r
-                       }\r
-                       // set cert password\r
-\r
-                       $result = curl_exec($curl);\r
-\r
-                       if (!$result)\r
-                       {\r
-                               $this->errstr='no response';\r
-                               $resp=new xmlrpcresp(0, $xmlrpcerr['curl_fail'], $xmlrpcstr['curl_fail']. ': '. curl_error($curl));\r
-                               curl_close($curl);\r
-                       }\r
-                       else\r
-                       {\r
-                               curl_close($curl);\r
-                               $resp = $msg->parseResponse($result);\r
-                       }\r
-                       return $resp;\r
-               }\r
-\r
-               function multicall($msgs, $timeout=0, $method='http')\r
-               {\r
-                       $results = false;\r
-\r
-                       if (! $this->no_multicall)\r
-                       {\r
-                               $results = $this->_try_multicall($msgs, $timeout, $method);\r
-                               /* TODO - this is not php3-friendly */\r
-                               // if($results !== false)\r
-                               if(is_array($results))\r
-                               {\r
-                                       // Either the system.multicall succeeded, or the send\r
-                                       // failed (e.g. due to HTTP timeout). In either case,\r
-                                       // we're done for now.\r
-                                       return $results;\r
-                               }\r
-                               else\r
-                               {\r
-                                       // system.multicall unsupported by server,\r
-                                       // don't try it next time...\r
-                                       $this->no_multicall = true;\r
-                               }\r
-                       }\r
-\r
-                       // system.multicall is unupported by server:\r
-                       //   Emulate multicall via multiple requests\r
-                       $results = array();\r
-                       //foreach($msgs as $msg)\r
-                       @reset($msgs);\r
-                       while(list(,$msg) = @each($msgs))\r
-                       {\r
-                               $results[] = $this->send($msg, $timeout, $method);\r
-                       }\r
-                       return $results;\r
-               }\r
-\r
-               // Attempt to boxcar $msgs via system.multicall.\r
-               function _try_multicall($msgs, $timeout, $method)\r
-               {\r
-                       // Construct multicall message\r
-                       $calls = array();\r
-                       //foreach($msgs as $msg)\r
-                       @reset($msgs);\r
-                       while(list(,$msg) = @each($msgs))\r
-                       {\r
-                               $call['methodName'] = new xmlrpcval($msg->method(),'string');\r
-                               $numParams = $msg->getNumParams();\r
-                               $params = array();\r
-                               for ($i = 0; $i < $numParams; $i++)\r
-                               {\r
-                                       $params[$i] = $msg->getParam($i);\r
-                               }\r
-                               $call['params'] = new xmlrpcval($params, 'array');\r
-                               $calls[] = new xmlrpcval($call, 'struct');\r
-                       }\r
-                       $multicall = new xmlrpcmsg('system.multicall');\r
-                       $multicall->addParam(new xmlrpcval($calls, 'array'));\r
-\r
-                       // Attempt RPC call\r
-                       $result = $this->send($multicall, $timeout, $method);\r
-                       if(!is_object($result))\r
-                       {\r
-                               return ($result || 0); // transport failed\r
-                       }\r
-\r
-                       if($result->faultCode() != 0)\r
-                       {\r
-                               return false;           // system.multicall failed\r
-                       }\r
-\r
-                       // Unpack responses.\r
-                       $rets = $result->value();\r
-                       if($rets->kindOf() != 'array')\r
-                       {\r
-                               return false;           // bad return type from system.multicall\r
-                       }\r
-                       $numRets = $rets->arraysize();\r
-                       if($numRets != count($msgs))\r
-                       {\r
-                               return false;           // wrong number of return values.\r
-                       }\r
-\r
-                       $response = array();\r
-                       for ($i = 0; $i < $numRets; $i++)\r
-                       {\r
-                               $val = $rets->arraymem($i);\r
-                               switch ($val->kindOf())\r
-                               {\r
-                               case 'array':\r
-                                       if($val->arraysize() != 1)\r
-                                       {\r
-                                               return false;           // Bad value\r
-                                       }\r
-                                       // Normal return value\r
-                                       $response[$i] = new xmlrpcresp($val->arraymem(0));\r
-                                       break;\r
-                               case 'struct':\r
-                                       $code = $val->structmem('faultCode');\r
-                                       if($code->kindOf() != 'scalar' || $code->scalartyp() != 'int')\r
-                                       {\r
-                                               return false;\r
-                                       }\r
-                                       $str = $val->structmem('faultString');\r
-                                       if($str->kindOf() != 'scalar' || $str->scalartyp() != 'string')\r
-                                       {\r
-                                               return false;\r
-                                       }\r
-                                       $response[$i] = new xmlrpcresp(0, $code->scalarval(), $str->scalarval());\r
-                                       break;\r
-                               default:\r
-                                       return false;\r
-                               }\r
-                       }\r
-                       return $response;\r
-               }\r
-       } // end class xmlrpc_client\r
-\r
-       class xmlrpcresp\r
-       {\r
-               var $val = 0;\r
-               var $errno = 0;\r
-               var $errstr = '';\r
-               var $hdrs = array();\r
-\r
-               function xmlrpcresp($val, $fcode = 0, $fstr = '')\r
-               {\r
-                       if ($fcode != 0)\r
-                       {\r
-                               // error\r
-                               $this->errno = $fcode;\r
-                               $this->errstr = $fstr;\r
-                               //$this->errstr = htmlspecialchars($fstr); // XXX: encoding probably shouldn't be done here; fix later.\r
-                       }\r
-                       elseif (!is_object($val))\r
-                       {\r
-                               // programmer error\r
-                               error_log("Invalid type '" . gettype($val) . "' (value: $val) passed to xmlrpcresp. Defaulting to empty value.");\r
-                               $this->val = new xmlrpcval();\r
-                       }\r
-                       else\r
-                       {\r
-                               // success\r
-                               $this->val = $val;\r
-                       }\r
-               }\r
-\r
-               function faultCode()\r
-               {\r
-                       return $this->errno;\r
-               }\r
-\r
-               function faultString()\r
-               {\r
-                       return $this->errstr;\r
-               }\r
-\r
-               function value()\r
-               {\r
-                       return $this->val;\r
-               }\r
-\r
-               function serialize()\r
-               {\r
-                       $result = "<methodResponse>\n";\r
-                       if ($this->errno)\r
-                       {\r
-                               // G. Giunta 2005/2/13: let non-ASCII response messages be tolerated by clients\r
-                               $result .= '<fault>\r
-<value>\r
-<struct>\r
-<member>\r
-<name>faultCode</name>\r
-<value><int>' . $this->errno . '</int></value>\r
-</member>\r
-<member>\r
-<name>faultString</name>\r
-<value><string>' . xmlrpc_encode_entitites($this->errstr) . '</string></value>\r
-</member>\r
-</struct>\r
-</value>\r
-</fault>';\r
-                       }\r
-                       else\r
-                       {\r
-                               $result .= "<params>\n<param>\n" .\r
-                                       $this->val->serialize() . \r
-                                       "</param>\n</params>";\r
-                       }\r
-                       $result .= "\n</methodResponse>";\r
-                       return $result;\r
-               }\r
-       }\r
-\r
-       class xmlrpcmsg\r
-       {\r
-               var $payload;\r
-               var $methodname;\r
-               var $params=array();\r
-               var $debug=0;\r
-\r
-               function xmlrpcmsg($meth, $pars=0)\r
-               {\r
-                       $this->methodname=$meth;\r
-                       if (is_array($pars) && sizeof($pars)>0)\r
-                       {\r
-                               for($i=0; $i<sizeof($pars); $i++)\r
-                               {\r
-                                       $this->addParam($pars[$i]);\r
-                               }\r
-                       }\r
-               }\r
-\r
-               function xml_header()\r
-               {\r
-                       return "<?xml version=\"1.0\"?" . ">\n<methodCall>\n";\r
-               }\r
-\r
-               function xml_footer()\r
-               {\r
-                       return "</methodCall>\n";\r
-               }\r
-\r
-               function createPayload()\r
-               {\r
-                       $this->payload=$this->xml_header();\r
-                       $this->payload.='<methodName>' . $this->methodname . "</methodName>\n";\r
-                       //      if (sizeof($this->params)) {\r
-                       $this->payload.="<params>\n";\r
-                       for($i=0; $i<sizeof($this->params); $i++)\r
-                       {\r
-                               $p=$this->params[$i];\r
-                               $this->payload.="<param>\n" . $p->serialize() .\r
-                               "</param>\n";\r
-                       }\r
-                       $this->payload.="</params>\n";\r
-                       // }\r
-                       $this->payload.=$this->xml_footer();\r
-                       //$this->payload=str_replace("\n", "\r\n", $this->payload);\r
-               }\r
-\r
-               function method($meth='')\r
-               {\r
-                       if ($meth!='')\r
-                       {\r
-                               $this->methodname=$meth;\r
-                       }\r
-                       return $this->methodname;\r
-               }\r
-\r
-               function serialize()\r
-               {\r
-                       $this->createPayload();\r
-                       return $this->payload;\r
-               }\r
-\r
-               function addParam($par) { $this->params[]=$par; }\r
-               function getParam($i) { return $this->params[$i]; }\r
-               function getNumParams() { return sizeof($this->params); }\r
-\r
-               function parseResponseFile($fp)\r
-               {\r
-                       $ipd='';\r
-                       while($data=fread($fp, 32768))\r
-                       {\r
-                               $ipd.=$data;\r
-                       }\r
-                       return $this->parseResponse($ipd);\r
-               }\r
-\r
-               function parseResponse($data='')\r
-               {\r
-                       global $_xh,$xmlrpcerr,$xmlrpcstr;\r
-                       global $xmlrpc_defencoding, $xmlrpc_internalencoding;\r
-\r
-                       $hdrfnd = 0;\r
-                       if($this->debug)\r
-                       {\r
-                               //by maHo, replaced htmlspecialchars with htmlentities\r
-                               print "<PRE>---GOT---\n" . htmlentities($data) . "\n---END---\n</PRE>";\r
-                       }\r
-\r
-                       if($data == '')\r
-                       {\r
-                               error_log('No response received from server.');\r
-                               $r = new xmlrpcresp(0, $xmlrpcerr['no_data'], $xmlrpcstr['no_data']);\r
-                               return $r;\r
-                       }\r
-                       // see if we got an HTTP 200 OK, else bomb\r
-                       // but only do this if we're using the HTTP protocol.\r
-                       if(ereg("^HTTP",$data))\r
-                       {\r
-                               // Strip HTTP 1.1 100 Continue header if present\r
-                               while (ereg('^HTTP/1.1 1[0-9]{2}', $data))\r
-                               {\r
-                                       $pos = strpos($data, 'HTTP', 12);\r
-                                       // server sent a Continue header without any (valid) content following...\r
-                                       // give the client a chance to know it\r
-                                       if (!$pos && !is_int($pos)) // works fine in php 3, 4 and 5\r
-                                               break;\r
-                                       $data = substr($data, $pos);\r
-                               }\r
-                               if (!ereg("^HTTP/[0-9\\.]+ 200 ", $data))\r
-                               {\r
-                                       $errstr= substr($data, 0, strpos($data, "\n")-1);\r
-                                       error_log('HTTP error, got response: ' .$errstr);\r
-                                       $r=new xmlrpcresp(0, $xmlrpcerr['http_error'], $xmlrpcstr['http_error']. ' (' . $errstr . ')');\r
-                                       return $r;\r
-                               }\r
-                       }\r
-                       $parser = xml_parser_create($xmlrpc_defencoding);\r
-\r
-                       // G. Giunta 2004/04/06\r
-                       // Clean up the accumulator, or it will grow indefinitely long\r
-                       // if making xmlrpc calls for a while\r
-                       $_xh=array();\r
-                       $_xh[$parser]=array();\r
-                       $_xh[$parser]['headers'] = array();\r
-\r
-                       // separate HTTP headers from data\r
-                       if (ereg("^HTTP", $data))\r
-                       {\r
-                               // be tolerant to usage of \n instead of \r\n to separate headers and data\r
-                               // (even though it is not valid http)\r
-                               $pos = strpos($data,"\r\n\r\n");\r
-                               if($pos || is_int($pos))\r
-                                       $bd = $pos+4;\r
-                               else\r
-                               {\r
-                                       $pos = strpos($data,"\n\n");\r
-                                       if($pos || is_int($pos))\r
-                                               $bd = $pos+2;\r
-                                       else\r
-                                       {\r
-                                               // No separation between response headers and body: fault?\r
-                                               $bd = 0;\r
-                                       }\r
-                               }\r
-                               // be tolerant to line endings, and extra empty lines\r
-                               $ar = split("\r?\n", trim(substr($data, 0, $pos)));\r
-                               while (list(,$line) = @each($ar))\r
-                               {\r
-                                       // take care of multi-line headers\r
-                                       $arr = explode(':',$line);\r
-                                       if(count($arr) > 1)\r
-                                       {\r
-                                               $header_name = trim($arr[0]);\r
-                                               // TO DO: some headers (the ones that allow a CSV list of values)\r
-                                               // do allow many values to be passed using multiple header lines.\r
-                                               // We should add content to $_xh[$parser]['headers'][$header_name]\r
-                                               // instead of replacing it for those...\r
-                                               $_xh[$parser]['headers'][$header_name] = $arr[1];\r
-                                               for ($i = 2; $i < count($arr); $i++)\r
-                                               {\r
-                                                       $_xh[$parser]['headers'][$header_name] .= ':'.$arr[$i];\r
-                                               } // while\r
-                                               $_xh[$parser]['headers'][$header_name] = trim($_xh[$parser]['headers'][$header_name]);\r
-                                       } else if (isset($header_name))\r
-                                       {\r
-                                               $_xh[$parser]['headers'][$header_name] .= ' ' . trim($line);\r
-                                       }\r
-                               }\r
-                               $data = substr($data, $bd);\r
-\r
-                               if ($this->debug && count($_xh[$parser]['headers']))\r
-                               {\r
-                                       print '<PRE>';\r
-                                       //foreach ($_xh[$parser]['headers'] as $header)\r
-                                       @reset($_xh[$parser]['headers']);\r
-                                       while(list($header, $value) = @each($_xh[$parser]['headers']))\r
-                                       {\r
-                                               print "HEADER: $header: $value\n";\r
-                                       }\r
-                                       print "</PRE>\n";\r
-                               }\r
-                       }\r
-\r
-                       // be tolerant of extra whitespace in response body\r
-                       $data = trim($data);\r
-\r
-                       // be tolerant of junk after methodResponse (e.g. javascript automatically inserted by free hosts)\r
-                       // idea from Luca Mariano <luca.mariano@email.it> originally in PEARified version of the lib\r
-                       $bd = false;\r
-                       $pos = strpos($data, "</methodResponse>");\r
-                       while ($pos || is_int($pos))\r
-                       {\r
-                               $bd = $pos+17;\r
-                               $pos = strpos($data, "</methodResponse>", $bd);\r
-                       }\r
-                       if ($bd)\r
-                               $data = substr($data, 0, $bd);\r
-\r
-                       $_xh[$parser]['st']='';\r
-                       $_xh[$parser]['cm']=0;\r
-                       $_xh[$parser]['isf']=0;\r
-                       $_xh[$parser]['ac']='';\r
-                       $_xh[$parser]['qt']='';\r
-\r
-                       xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);\r
-                       // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell\r
-                       // the xml parser to give us back data in the expected charset\r
-                       xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $xmlrpc_internalencoding);\r
-\r
-                       xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');\r
-                       xml_set_character_data_handler($parser, 'xmlrpc_cd');\r
-                       xml_set_default_handler($parser, 'xmlrpc_dh');\r
-                       //$xmlrpc_value=new xmlrpcval;\r
-\r
-                       if (!xml_parse($parser, $data, sizeof($data)))\r
-                       {\r
-                               // thanks to Peter Kocks <peter.kocks@baygate.com>\r
-                               if((xml_get_current_line_number($parser)) == 1)\r
-                               {\r
-                                       $errstr = 'XML error at line 1, check URL';\r
-                               }\r
-                               else\r
-                               {\r
-                                       $errstr = sprintf('XML error: %s at line %d',\r
-                                               xml_error_string(xml_get_error_code($parser)),\r
-                                               xml_get_current_line_number($parser));\r
-                               }\r
-                               error_log($errstr);\r
-                               $r=new xmlrpcresp(0, $xmlrpcerr['invalid_return'], $xmlrpcstr['invalid_return'].' ('.$errstr.')');\r
-                               xml_parser_free($parser);\r
-                               if ($this->debug)\r
-                                       echo $errstr;\r
-                               $r->hdrs = $_xh[$parser]['headers'];\r
-                               return $r;\r
-                       }\r
-                       xml_parser_free($parser);\r
-                       if ($this->debug)\r
-                       {\r
-                               print "<PRE>---EVALING---[" .\r
-                               strlen($_xh[$parser]['st']) . " chars]---\n" .\r
-                               htmlspecialchars($_xh[$parser]['st']) . ";\n---END---</PRE>";\r
-                       }\r
-                       if (strlen($_xh[$parser]['st'])==0)\r
-                       {\r
-                               // then something odd has happened\r
-                               // and it's time to generate a client side error\r
-                               // indicating something odd went on\r
-                               $r=new xmlrpcresp(0, $xmlrpcerr['invalid_return'],\r
-                               $xmlrpcstr['invalid_return']);\r
-                       }\r
-                       else\r
-                       {\r
-                               $allOK=0;\r
-                               @eval('$v=' . $_xh[$parser]['st'] . '; $allOK=1;');\r
-                               if (!$allOK)\r
-                               {\r
-                                       $r = new xmlrpcresp(0, $xmlrpcerr['invalid_return'], $xmlrpcstr['invalid_return']);\r
-                               }\r
-                               else\r
-                               if ($_xh[$parser]['isf'])\r
-                               {\r
-                                       $errno_v = $v->structmem('faultCode');\r
-                                       $errstr_v = $v->structmem('faultString');\r
-                                       $errno = $errno_v->scalarval();\r
-\r
-                                       if ($errno == 0)\r
-                                       {\r
-                                               // FAULT returned, errno needs to reflect that\r
-                                               $errno = -1;\r
-                                       }\r
-\r
-                                       $r = new xmlrpcresp($v, $errno, $errstr_v->scalarval());\r
-                               }\r
-                               else\r
-                               {\r
-                                       $r=new xmlrpcresp($v);\r
-                               }\r
-                       }\r
-\r
-                       $r->hdrs = $_xh[$parser]['headers'];\r
-                       return $r;\r
-               }\r
-       }\r
-\r
-       class xmlrpcval\r
-       {\r
-               var $me=array();\r
-               var $mytype=0;\r
-\r
-               function xmlrpcval($val=-1, $type='')\r
-               {\r
-                       global $xmlrpcTypes;\r
-                       $this->me=array();\r
-                       $this->mytype=0;\r
-                       if ($val!=-1 || !is_int($val) || $type!='')\r
-                       {\r
-                               if ($type=='')\r
-                               {\r
-                                       $type='string';\r
-                               }\r
-                               if ($xmlrpcTypes[$type]==1)\r
-                               {\r
-                                       $this->addScalar($val,$type);\r
-                               }\r
-                               elseif ($xmlrpcTypes[$type]==2)\r
-                               {\r
-                                       $this->addArray($val);\r
-                               }\r
-                               elseif ($xmlrpcTypes[$type]==3)\r
-                               {\r
-                                       $this->addStruct($val);\r
-                               }\r
-                       }\r
-               }\r
-\r
-               function addScalar($val, $type='string')\r
-               {\r
-                       global $xmlrpcTypes, $xmlrpcBoolean;\r
-\r
-                       if ($this->mytype==1)\r
-                       {\r
-                               echo '<B>xmlrpcval</B>: scalar can have only one value<BR>';\r
-                               return 0;\r
-                       }\r
-                       $typeof=$xmlrpcTypes[$type];\r
-                       if ($typeof!=1)\r
-                       {\r
-                               echo '<B>xmlrpcval</B>: not a scalar type (${typeof})<BR>';\r
-                               return 0;\r
-                       }\r
-\r
-                       if ($type==$xmlrpcBoolean)\r
-                       {\r
-                               if (strcasecmp($val,'true')==0 || $val==1 || ($val==true && strcasecmp($val,'false')))\r
-                               {\r
-                                       $val=1;\r
-                               }\r
-                               else\r
-                               {\r
-                                       $val=0;\r
-                               }\r
-                       }\r
-\r
-                       if ($this->mytype==2)\r
-                       {\r
-                               // we're adding to an array here\r
-                               $ar=$this->me['array'];\r
-                               $ar[]=new xmlrpcval($val, $type);\r
-                               $this->me['array']=$ar;\r
-                       }\r
-                       else\r
-                       {\r
-                               // a scalar, so set the value and remember we're scalar\r
-                               $this->me[$type]=$val;\r
-                               $this->mytype=$typeof;\r
-                       }\r
-                       return 1;\r
-               }\r
-\r
-               function addArray($vals)\r
-               {\r
-                       global $xmlrpcTypes;\r
-                       if ($this->mytype!=0)\r
-                       {\r
-                               echo '<B>xmlrpcval</B>: already initialized as a [' . $this->kindOf() . ']<BR>';\r
-                               return 0;\r
-                       }\r
-\r
-                       $this->mytype=$xmlrpcTypes['array'];\r
-                       $this->me['array']=$vals;\r
-                       return 1;\r
-               }\r
-\r
-               function addStruct($vals)\r
-               {\r
-                       global $xmlrpcTypes;\r
-                       if ($this->mytype!=0)\r
-                       {\r
-                               echo '<B>xmlrpcval</B>: already initialized as a [' . $this->kindOf() . ']<BR>';\r
-                               return 0;\r
-                       }\r
-                       $this->mytype=$xmlrpcTypes['struct'];\r
-                       $this->me['struct']=$vals;\r
-                       return 1;\r
-               }\r
-\r
-               function dump($ar)\r
-               {\r
-                       reset($ar);\r
-                       while ( list( $key, $val ) = each( $ar ) )\r
-                       {\r
-                               echo "$key => $val<br>";\r
-                               if ($key == 'array')\r
-                               {\r
-                                       while ( list( $key2, $val2 ) = each( $val ) )\r
-                                       {\r
-                                               echo "-- $key2 => $val2<br>";\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-\r
-               function kindOf()\r
-               {\r
-                       switch($this->mytype)\r
-                       {\r
-                               case 3:\r
-                                       return 'struct';\r
-                                       break;\r
-                               case 2:\r
-                                       return 'array';\r
-                                       break;\r
-                               case 1:\r
-                                       return 'scalar';\r
-                                       break;\r
-                               default:\r
-                                       return 'undef';\r
-                       }\r
-               }\r
-\r
-               function serializedata($typ, $val)\r
-               {\r
-                       $rs='';\r
-                       global $xmlrpcTypes, $xmlrpcBase64, $xmlrpcString,\r
-                       $xmlrpcBoolean;\r
-                       switch(@$xmlrpcTypes[$typ])\r
-                       {\r
-                               case 3:\r
-                                       // struct\r
-                                       $rs.="<struct>\n";\r
-                                       reset($val);\r
-                                       while(list($key2, $val2)=each($val))\r
-                                       {\r
-                                               $rs.="<member><name>${key2}</name>\n";\r
-                                               $rs.=$this->serializeval($val2);\r
-                                               $rs.="</member>\n";\r
-                                       }\r
-                                       $rs.='</struct>';\r
-                                       break;\r
-                               case 2:\r
-                                       // array\r
-                                       $rs.="<array>\n<data>\n";\r
-                                       for($i=0; $i<sizeof($val); $i++)\r
-                                       {\r
-                                               $rs.=$this->serializeval($val[$i]);\r
-                                       }\r
-                                       $rs.="</data>\n</array>";\r
-                                       break;\r
-                               case 1:\r
-                                       switch ($typ)\r
-                                       {\r
-                                               case $xmlrpcBase64:\r
-                                                       $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";\r
-                                                       break;\r
-                                               case $xmlrpcBoolean:\r
-                                                       $rs.="<${typ}>" . ($val ? '1' : '0') . "</${typ}>";\r
-                                                       break;\r
-                                               case $xmlrpcString:\r
-                                                       // G. Giunta 2005/2/13: do NOT use htmlentities, since\r
-                                                       // it will produce named html entities, which are invalid xml\r
-                                                       // $rs.="<${typ}>" . xmlrpc_encode_entitites($val). "</${typ}>";\r
-                                                       // $rs.="<${typ}>" . htmlentities($val). "</${typ}>";\r
-                                                       \r
-                                                       // N. Leenheer 2005/6/30: Use CDATA instead... \r
-                                                       $rs.="<${typ}><![CDATA[" . $val. "]]></${typ}>";\r
-                                                       break;\r
-                                               default:\r
-                                                       $rs.="<${typ}>${val}</${typ}>";\r
-                                       }\r
-                                       break;\r
-                               default:\r
-                                       break;\r
-                       }\r
-                       return $rs;\r
-               }\r
-\r
-               function serialize()\r
-               {\r
-                       return $this->serializeval($this);\r
-               }\r
-\r
-               function serializeval($o)\r
-               {\r
-                       //global $xmlrpcTypes;\r
-                       $rs='';\r
-                       $ar=$o->me;\r
-                       reset($ar);\r
-                       list($typ, $val) = each($ar);\r
-                       $rs.='<value>';\r
-                       $rs.=$this->serializedata($typ, $val);\r
-                       $rs.="</value>\n";\r
-                       return $rs;\r
-               }\r
-\r
-               function structmem($m)\r
-               {\r
-                       $nv=$this->me['struct'][$m];\r
-                       return $nv;\r
-               }\r
-\r
-               function structreset()\r
-               {\r
-                       reset($this->me['struct']);\r
-               }\r
-\r
-               function structeach()\r
-               {\r
-                       return each($this->me['struct']);\r
-               }\r
-\r
-               function getval()\r
-               {\r
-                       // UNSTABLE\r
-                       global $xmlrpcBoolean, $xmlrpcBase64;\r
-                       reset($this->me);\r
-                       list($a,$b)=each($this->me);\r
-                       // contributed by I Sofer, 2001-03-24\r
-                       // add support for nested arrays to scalarval\r
-                       // i've created a new method here, so as to\r
-                       // preserve back compatibility\r
-\r
-                       if (is_array($b))\r
-                       {\r
-                               @reset($b);\r
-                               while(list($id,$cont) = @each($b))\r
-                               {\r
-                                       $b[$id] = $cont->scalarval();\r
-                               }\r
-                       }\r
-\r
-                       // add support for structures directly encoding php objects\r
-                       if (is_object($b))\r
-                       {\r
-                               $t = get_object_vars($b);\r
-                               @reset($t);\r
-                               while(list($id,$cont) = @each($t))\r
-                               {\r
-                                       $t[$id] = $cont->scalarval();\r
-                               }\r
-                               @reset($t);\r
-                               while(list($id,$cont) = @each($t))\r
-                               {\r
-                                       eval('$b->'.$id.' = $cont;');\r
-                               }\r
-                       }\r
-                       // end contrib\r
-                       return $b;\r
-               }\r
-\r
-               function scalarval()\r
-               {\r
-                       //global $xmlrpcBoolean, $xmlrpcBase64;\r
-                       reset($this->me);\r
-                       list($a,$b)=each($this->me);\r
-                       return $b;\r
-               }\r
-\r
-               function scalartyp()\r
-               {\r
-                       global $xmlrpcI4, $xmlrpcInt;\r
-                       reset($this->me);\r
-                       list($a,$b)=each($this->me);\r
-                       if ($a==$xmlrpcI4)\r
-                       {\r
-                               $a=$xmlrpcInt;\r
-                       }\r
-                       return $a;\r
-               }\r
-\r
-               function arraymem($m)\r
-               {\r
-                       $nv=$this->me['array'][$m];\r
-                       return $nv;\r
-               }\r
-\r
-               function arraysize()\r
-               {\r
-                       reset($this->me);\r
-                       list($a,$b)=each($this->me);\r
-                       return sizeof($b);\r
-               }\r
-       }\r
-\r
-       // date helpers\r
-       function iso8601_encode($timet, $utc=0)\r
-       {\r
-               // return an ISO8601 encoded string\r
-               // really, timezones ought to be supported\r
-               // but the XML-RPC spec says:\r
-               //\r
-               // "Don't assume a timezone. It should be specified by the server in its\r
-               // documentation what assumptions it makes about timezones."\r
-               // \r
-               // these routines always assume localtime unless \r
-               // $utc is set to 1, in which case UTC is assumed\r
-               // and an adjustment for locale is made when encoding\r
-               if (!$utc)\r
-               {\r
-                       $t=strftime("%Y%m%dT%H:%M:%S", $timet);\r
-               }\r
-               else\r
-               {\r
-                       if (function_exists('gmstrftime'))\r
-                       {\r
-                               // gmstrftime doesn't exist in some versions\r
-                               // of PHP\r
-                               $t=gmstrftime("%Y%m%dT%H:%M:%S", $timet);\r
-                       }\r
-                       else\r
-                       {\r
-                               $t=strftime("%Y%m%dT%H:%M:%S", $timet-date('Z'));\r
-                       }\r
-               }\r
-               return $t;\r
-       }\r
-\r
-       function iso8601_decode($idate, $utc=0)\r
-       {\r
-               // return a timet in the localtime, or UTC\r
-               $t=0;\r
-               if (ereg("([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})", $idate, $regs))\r
-               {\r
-                       if ($utc)\r
-                       {\r
-                               $t=gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);\r
-                       }\r
-                       else\r
-                       {\r
-                               $t=mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);\r
-                       }\r
-               } \r
-               return $t;\r
-       }\r
-\r
-       /****************************************************************\r
-       * xmlrpc_decode takes a message in PHP xmlrpc object format and *\r
-       * tranlates it into native PHP types.                           *\r
-       *                                                               *\r
-       * author: Dan Libby (dan@libby.com)                             *\r
-       ****************************************************************/\r
-       function php_xmlrpc_decode($xmlrpc_val)\r
-       {\r
-               $kind = $xmlrpc_val->kindOf();\r
-\r
-               if($kind == 'scalar')\r
-               {\r
-                       return $xmlrpc_val->scalarval();\r
-               }\r
-               elseif($kind == 'array')\r
-               {\r
-                       $size = $xmlrpc_val->arraysize();\r
-                       $arr = array();\r
-\r
-                       for($i = 0; $i < $size; $i++)\r
-                       {\r
-                               $arr[] = php_xmlrpc_decode($xmlrpc_val->arraymem($i));\r
-                       }\r
-                       return $arr;\r
-               }\r
-               elseif($kind == 'struct')\r
-               {\r
-                       $xmlrpc_val->structreset();\r
-                       $arr = array();\r
-\r
-                       while(list($key,$value)=$xmlrpc_val->structeach())\r
-                       {\r
-                               $arr[$key] = php_xmlrpc_decode($value);\r
-                       }\r
-                       return $arr;\r
-               }\r
-       }\r
-\r
-       if(function_exists('xmlrpc_decode'))\r
-       {\r
-               define('XMLRPC_EPI_ENABLED','1');\r
-       }\r
-       else\r
-       {\r
-               define('XMLRPC_EPI_ENABLED','0');\r
-               function xmlrpc_decode($xmlrpc_val)\r
-               {\r
-                       $kind = $xmlrpc_val->kindOf();\r
-\r
-                       if($kind == 'scalar')\r
-                       {\r
-                               return $xmlrpc_val->scalarval();\r
-                       }\r
-                       elseif($kind == 'array')\r
-                       {\r
-                               $size = $xmlrpc_val->arraysize();\r
-                               $arr = array();\r
-\r
-                               for($i = 0; $i < $size; $i++)\r
-                               {\r
-                                       $arr[]=xmlrpc_decode($xmlrpc_val->arraymem($i));\r
-                               }\r
-                               return $arr;\r
-                       }\r
-                       elseif($kind == 'struct')\r
-                       {\r
-                               $xmlrpc_val->structreset();\r
-                               $arr = array();\r
-\r
-                               while(list($key,$value)=$xmlrpc_val->structeach())\r
-                               {\r
-                                       $arr[$key] = xmlrpc_decode($value);\r
-                               }\r
-                               return $arr;\r
-                       }\r
-               }\r
-       }\r
-\r
-       /****************************************************************\r
-       * xmlrpc_encode takes native php types and encodes them into    *\r
-       * xmlrpc PHP object format.                                     *\r
-       * BUG: All sequential arrays are turned into structs.  I don't  *\r
-       * know of a good way to determine if an array is sequential     *\r
-       * only.                                                         *\r
-       *                                                               *\r
-       * feature creep -- could support more types via optional type   *\r
-       * argument.                                                     *\r
-       *                                                               *\r
-       * author: Dan Libby (dan@libby.com)                             *\r
-       ****************************************************************/\r
-       function php_xmlrpc_encode($php_val)\r
-       {\r
-               global $xmlrpcInt;\r
-               global $xmlrpcDouble;\r
-               global $xmlrpcString;\r
-               global $xmlrpcArray;\r
-               global $xmlrpcStruct;\r
-               global $xmlrpcBoolean;\r
-\r
-               $type = gettype($php_val);\r
-               $xmlrpc_val = new xmlrpcval;\r
-\r
-               switch($type)\r
-               {\r
-                       case 'array':\r
-                       case 'object':\r
-                               $arr = array();\r
-                               while (list($k,$v) = each($php_val))\r
-                               {\r
-                                       $arr[$k] = php_xmlrpc_encode($v);\r
-                               }\r
-                               $xmlrpc_val->addStruct($arr);\r
-                               break;\r
-                       case 'integer':\r
-                               $xmlrpc_val->addScalar($php_val, $xmlrpcInt);\r
-                               break;\r
-                       case 'double':\r
-                               $xmlrpc_val->addScalar($php_val, $xmlrpcDouble);\r
-                               break;\r
-                       case 'string':\r
-                               $xmlrpc_val->addScalar($php_val, $xmlrpcString);\r
-                               break;\r
-                               // <G_Giunta_2001-02-29>\r
-                               // Add support for encoding/decoding of booleans, since they are supported in PHP\r
-                       case 'boolean':\r
-                               $xmlrpc_val->addScalar($php_val, $xmlrpcBoolean);\r
-                               break;\r
-                               // </G_Giunta_2001-02-29>\r
-                       // catch "resource", "NULL", "user function", "unknown type"\r
-                       //case 'unknown type':\r
-                       default:\r
-                               // giancarlo pinerolo <ping@alt.it>\r
-                               // it has to return \r
-                               // an empty object in case (which is already\r
-                               // at this point), not a boolean. \r
-                               break;\r
-                       }\r
-                       return $xmlrpc_val;\r
-       }\r
-\r
-       if(XMLRPC_EPI_ENABLED == '0')\r
-       {\r
-               function xmlrpc_encode($php_val)\r
-               {\r
-                       global $xmlrpcInt;\r
-                       global $xmlrpcDouble;\r
-                       global $xmlrpcString;\r
-                       global $xmlrpcArray;\r
-                       global $xmlrpcStruct;\r
-                       global $xmlrpcBoolean;\r
-\r
-                       $type = gettype($php_val);\r
-                       $xmlrpc_val = new xmlrpcval;\r
-\r
-                       switch($type)\r
-                       {\r
-                               case 'array':\r
-                               case 'object':\r
-                                       $arr = array();\r
-                                       while (list($k,$v) = each($php_val))\r
-                                       {\r
-                                               $arr[$k] = xmlrpc_encode($v);\r
-                                       }\r
-                                       $xmlrpc_val->addStruct($arr);\r
-                                       break;\r
-                               case 'integer':\r
-                                       $xmlrpc_val->addScalar($php_val, $xmlrpcInt);\r
-                                       break;\r
-                               case 'double':\r
-                                       $xmlrpc_val->addScalar($php_val, $xmlrpcDouble);\r
-                                       break;\r
-                               case 'string':\r
-                                       $xmlrpc_val->addScalar($php_val, $xmlrpcString);\r
-                                       break;\r
-                                       // <G_Giunta_2001-02-29>\r
-                                       // Add support for encoding/decoding of booleans, since they are supported in PHP\r
-                               case 'boolean':\r
-                                       $xmlrpc_val->addScalar($php_val, $xmlrpcBoolean);\r
-                                       break;\r
-                                       // </G_Giunta_2001-02-29>\r
-                               //case 'unknown type':\r
-                               default:\r
-                                       // giancarlo pinerolo <ping@alt.it>\r
-                                       // it has to return \r
-                                       // an empty object in case (which is already\r
-                                       // at this point), not a boolean. \r
-                                       break;\r
-                       }\r
-                       return $xmlrpc_val;\r
-               }\r
-       }\r
-?>\r
+<?php                                  // -*-c++-*-
+// by Edd Dumbill (C) 1999-2002
+// <edd@usefulinc.com>
+// $Id: xmlrpc.inc.php,v 1.6 2006-07-12 07:11:47 kimitake Exp $
+// $NucleusJP: xmlrpc.inc.php,v 1.5 2005/08/13 07:24:44 kimitake Exp $
+
+
+// Copyright (c) 1999,2000,2002 Edd Dumbill.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    * Redistributions of source code must retain the above copyright
+//      notice, this list of conditions and the following disclaimer.
+//
+//    * Redistributions in binary form must reproduce the above
+//      copyright notice, this list of conditions and the following
+//      disclaimer in the documentation and/or other materials provided
+//      with the distribution.
+//
+//    * Neither the name of the "XML-RPC for PHP" nor the names of its
+//      contributors may be used to endorse or promote products derived
+//      from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+// OF THE POSSIBILITY OF SUCH DAMAGE.
+
+       if (!function_exists('xml_parser_create'))
+       {
+               // Win 32 fix. From: 'Leo West' <lwest@imaginet.fr>
+               if($WINDIR)
+               {
+                       dl('php3_xml.dll');
+               }
+               else
+               {
+                       dl('xml.so');
+               }
+       }
+
+       // G. Giunta 2005/01/29: declare global these variables,
+       // so that xmlrpc.inc will work even if included from within a function
+       // NB: it will give warnings in PHP3, so we comment it out
+       // Milosch: Next round, maybe we should explicitly request these via $GLOBALS where used.
+       if (phpversion() >= '4')
+       {
+               global $xmlrpcI4;
+               global $xmlrpcInt;
+               global $xmlrpcDouble;
+               global $xmlrpcBoolean;
+               global $xmlrpcString;
+               global $xmlrpcDateTime;
+               global $xmlrpcBase64;
+               global $xmlrpcArray;
+               global $xmlrpcStruct;
+
+               global $xmlrpcTypes;
+               global $xmlEntities;
+               global $xmlrpcerr;
+               global $xmlrpcstr;
+               global $xmlrpc_defencoding;
+               global $xmlrpc_internalencoding;
+               global $xmlrpcName;
+               global $xmlrpcVersion;
+               global $xmlrpcerruser;
+               global $xmlrpcerrxml;
+               global $xmlrpc_backslash;
+               global $_xh;
+       }
+       $xmlrpcI4='i4';
+       $xmlrpcInt='int';
+       $xmlrpcBoolean='boolean';
+       $xmlrpcDouble='double';
+       $xmlrpcString='string';
+       $xmlrpcDateTime='dateTime.iso8601';
+       $xmlrpcBase64='base64';
+       $xmlrpcArray='array';
+       $xmlrpcStruct='struct';
+
+       $xmlrpcTypes=array(
+               $xmlrpcI4       => 1,
+               $xmlrpcInt      => 1,
+               $xmlrpcBoolean  => 1,
+               $xmlrpcString   => 1,
+               $xmlrpcDouble   => 1,
+               $xmlrpcDateTime => 1,
+               $xmlrpcBase64   => 1,
+               $xmlrpcArray    => 2,
+               $xmlrpcStruct   => 3
+       );
+
+       $xmlrpc_valid_parents = array(
+               'BOOLEAN' => array('VALUE' => 'VALUE'),
+               'I4' => array('VALUE' => 'VALUE'),
+               'INT' => array('VALUE' => 'VALUE'),
+               'STRING' => array('VALUE' => 'VALUE'),
+               'DOUBLE' => array('VALUE' => 'VALUE'),
+               'DATETIME.ISO8601' => array('VALUE' => 'VALUE'),
+               'BASE64' => array('VALUE' => 'VALUE'),
+               'ARRAY' => array('VALUE' => 'VALUE'),
+               'STRUCT' => array('VALUE' => 'VALUE'),
+               'PARAM' => array('PARAMS' => 'PARAMS'),
+               'METHODNAME' => array('METHODCALL' => 'METHODCALL'),
+               'PARAMS' => array('METHODCALL' => 'METHODCALL', 'METHODRESPONSE' => 'METHODRESPONSE'),
+               'MEMBER' => array('STRUCT' => 'STRUCT'),
+               'NAME' => array('MEMBER' => 'MEMBER'),
+               'DATA' => array('ARRAY' => 'ARRAY'),
+               'FAULT' => array('METHODRESPONSE' => 'METHODRESPONSE'),
+               'VALUE' => array('MEMBER' => 'MEMBER', 'DATA' => 'DATA', 'PARAM' => 'PARAM', 'FAULT' => 'FAULT')
+       );
+
+       $xmlEntities=array(
+               'amp'  => '&',
+               'quot' => '"',
+               'lt'   => '<',
+               'gt'   => '>',
+               'apos' => "'"
+       );
+
+       $xmlrpcerr['unknown_method']=1;
+       $xmlrpcstr['unknown_method']='Unknown method';
+       $xmlrpcerr['invalid_return']=2;
+       $xmlrpcstr['invalid_return']='Invalid return payload: enable debugging to examine incoming payload';
+       $xmlrpcerr['incorrect_params']=3;
+       $xmlrpcstr['incorrect_params']='Incorrect parameters passed to method';
+       $xmlrpcerr['introspect_unknown']=4;
+       $xmlrpcstr['introspect_unknown']="Can't introspect: method unknown";
+       $xmlrpcerr['http_error']=5;
+       $xmlrpcstr['http_error']="Didn't receive 200 OK from remote server.";
+       $xmlrpcerr['no_data']=6;
+       $xmlrpcstr['no_data']='No data received from server.';
+       $xmlrpcerr['no_ssl']=7;
+       $xmlrpcstr['no_ssl']='No SSL support compiled in.';
+       $xmlrpcerr['curl_fail']=8;
+       $xmlrpcstr['curl_fail']='CURL error';
+       $xmlrpcerr['invalid_request']=15;
+       $xmlrpcstr['invalid_request']='Invalid request payload';
+
+       $xmlrpcerr['multicall_notstruct'] = 9;
+       $xmlrpcstr['multicall_notstruct'] = 'system.multicall expected struct';
+       $xmlrpcerr['multicall_nomethod']  = 10;
+       $xmlrpcstr['multicall_nomethod']  = 'missing methodName';
+       $xmlrpcerr['multicall_notstring'] = 11;
+       $xmlrpcstr['multicall_notstring'] = 'methodName is not a string';
+       $xmlrpcerr['multicall_recursion'] = 12;
+       $xmlrpcstr['multicall_recursion'] = 'recursive system.multicall forbidden';
+       $xmlrpcerr['multicall_noparams']  = 13;
+       $xmlrpcstr['multicall_noparams']  = 'missing params';
+       $xmlrpcerr['multicall_notarray']  = 14;
+       $xmlrpcstr['multicall_notarray']  = 'params is not an array';
+
+       // The charset encoding expected by the server for received messages and
+       // by the client for received responses
+       $xmlrpc_defencoding='UTF-8';
+       // The encoding used by PHP.
+       // String values received will be converted to this.
+       $xmlrpc_internalencoding='ISO-8859-1';
+
+       $xmlrpcName='XML-RPC for PHP';
+       $xmlrpcVersion='1.2.1';
+
+       // let user errors start at 800
+       $xmlrpcerruser=800;
+       // let XML parse errors start at 100
+       $xmlrpcerrxml=100;
+
+       // formulate backslashes for escaping regexp
+       $xmlrpc_backslash=chr(92).chr(92);
+
+       // used to store state during parsing
+       // quick explanation of components:
+       //   ac - used to accumulate values
+       //   isf - used to indicate a fault
+       //   lv - used to indicate "looking for a value": implements
+       //        the logic to allow values with no types to be strings
+       //   params - used to store parameters in method calls
+       //   method - used to store method name
+       //   stack - array with genealogy of xml elements names:
+       //           used to validate nesting of xmlrpc elements
+
+       $_xh=array();
+
+       /**
+       * To help correct communication of non-ascii chars inside strings, regardless
+       * of the charset used when sending requests, parsing them, sending responses
+       * and parsing responses, convert all non-ascii chars present in the message
+       * into their equivalent 'charset entity'. Charset entities enumerated this way
+       * are independent of the charset encoding used to transmit them, and all XML
+       * parsers are bound to understand them.
+       */
+       function xmlrpc_entity_decode($string)
+       {
+               $top=split('&', $string);
+               $op='';
+               $i=0;
+               while($i<sizeof($top))
+               {
+                       if (ereg("^([#a-zA-Z0-9]+);", $top[$i], $regs))
+                       {
+                               $op.=ereg_replace("^[#a-zA-Z0-9]+;",
+                               xmlrpc_lookup_entity($regs[1]),
+                               $top[$i]);
+                       }
+                       else
+                       {
+                               if ($i==0)
+                               {
+                                       $op=$top[$i];
+                               }
+                               else
+                               {
+                                       $op.='&' . $top[$i];
+                               }
+                       }
+                       $i++;
+               }
+               return $op;
+       }
+
+       function xmlrpc_lookup_entity($ent)
+       {
+               global $xmlEntities;
+
+               if (isset($xmlEntities[strtolower($ent)]))
+               {
+                       return $xmlEntities[strtolower($ent)];
+               }
+               if (ereg("^#([0-9]+)$", $ent, $regs))
+               {
+                       return chr($regs[1]);
+               }
+               return '?';
+       }
+
+       /**
+        * These entities originate from HTML specs (1.1, proposed 2.0, etc),
+        * and are taken directly from php-4.3.1/ext/mbstring/html_entities.c.
+        * Until php provides functionality to translate these entities in its
+        * core library, use this function.
+        */
+       function xmlrpc_html_entity_xlate($data = '')
+       {
+               $entities = array(
+                       "&nbsp;" => "&#160;",
+                       "&iexcl;" => "&#161;",
+                       "&cent;" => "&#162;",
+                       "&pound;" => "&#163;",
+                       "&curren;" => "&#164;",
+                       "&yen;" => "&#165;",
+                       "&brvbar;" => "&#166;",
+                       "&sect;" => "&#167;",
+                       "&uml;" => "&#168;",
+                       "&copy;" => "&#169;",
+                       "&ordf;" => "&#170;",
+                       "&laquo;" => "&#171;",
+                       "&not;" => "&#172;",
+                       "&shy;" => "&#173;",
+                       "&reg;" => "&#174;",
+                       "&macr;" => "&#175;",
+                       "&deg;" => "&#176;",
+                       "&plusmn;" => "&#177;",
+                       "&sup2;" => "&#178;",
+                       "&sup3;" => "&#179;",
+                       "&acute;" => "&#180;",
+                       "&micro;" => "&#181;",
+                       "&para;" => "&#182;",
+                       "&middot;" => "&#183;",
+                       "&cedil;" => "&#184;",
+                       "&sup1;" => "&#185;",
+                       "&ordm;" => "&#186;",
+                       "&raquo;" => "&#187;",
+                       "&frac14;" => "&#188;",
+                       "&frac12;" => "&#189;",
+                       "&frac34;" => "&#190;",
+                       "&iquest;" => "&#191;",
+                       "&Agrave;" => "&#192;",
+                       "&Aacute;" => "&#193;",
+                       "&Acirc;" => "&#194;",
+                       "&Atilde;" => "&#195;",
+                       "&Auml;" => "&#196;",
+                       "&Aring;" => "&#197;",
+                       "&AElig;" => "&#198;",
+                       "&Ccedil;" => "&#199;",
+                       "&Egrave;" => "&#200;",
+                       "&Eacute;" => "&#201;",
+                       "&Ecirc;" => "&#202;",
+                       "&Euml;" => "&#203;",
+                       "&Igrave;" => "&#204;",
+                       "&Iacute;" => "&#205;",
+                       "&Icirc;" => "&#206;",
+                       "&Iuml;" => "&#207;",
+                       "&ETH;" => "&#208;",
+                       "&Ntilde;" => "&#209;",
+                       "&Ograve;" => "&#210;",
+                       "&Oacute;" => "&#211;",
+                       "&Ocirc;" => "&#212;",
+                       "&Otilde;" => "&#213;",
+                       "&Ouml;" => "&#214;",
+                       "&times;" => "&#215;",
+                       "&Oslash;" => "&#216;",
+                       "&Ugrave;" => "&#217;",
+                       "&Uacute;" => "&#218;",
+                       "&Ucirc;" => "&#219;",
+                       "&Uuml;" => "&#220;",
+                       "&Yacute;" => "&#221;",
+                       "&THORN;" => "&#222;",
+                       "&szlig;" => "&#223;",
+                       "&agrave;" => "&#224;",
+                       "&aacute;" => "&#225;",
+                       "&acirc;" => "&#226;",
+                       "&atilde;" => "&#227;",
+                       "&auml;" => "&#228;",
+                       "&aring;" => "&#229;",
+                       "&aelig;" => "&#230;",
+                       "&ccedil;" => "&#231;",
+                       "&egrave;" => "&#232;",
+                       "&eacute;" => "&#233;",
+                       "&ecirc;" => "&#234;",
+                       "&euml;" => "&#235;",
+                       "&igrave;" => "&#236;",
+                       "&iacute;" => "&#237;",
+                       "&icirc;" => "&#238;",
+                       "&iuml;" => "&#239;",
+                       "&eth;" => "&#240;",
+                       "&ntilde;" => "&#241;",
+                       "&ograve;" => "&#242;",
+                       "&oacute;" => "&#243;",
+                       "&ocirc;" => "&#244;",
+                       "&otilde;" => "&#245;",
+                       "&ouml;" => "&#246;",
+                       "&divide;" => "&#247;",
+                       "&oslash;" => "&#248;",
+                       "&ugrave;" => "&#249;",
+                       "&uacute;" => "&#250;",
+                       "&ucirc;" => "&#251;",
+                       "&uuml;" => "&#252;",
+                       "&yacute;" => "&#253;",
+                       "&thorn;" => "&#254;",
+                       "&yuml;" => "&#255;",
+                       "&OElig;" => "&#338;",
+                       "&oelig;" => "&#339;",
+                       "&Scaron;" => "&#352;",
+                       "&scaron;" => "&#353;",
+                       "&Yuml;" => "&#376;",
+                       "&fnof;" => "&#402;",
+                       "&circ;" => "&#710;",
+                       "&tilde;" => "&#732;",
+                       "&Alpha;" => "&#913;",
+                       "&Beta;" => "&#914;",
+                       "&Gamma;" => "&#915;",
+                       "&Delta;" => "&#916;",
+                       "&Epsilon;" => "&#917;",
+                       "&Zeta;" => "&#918;",
+                       "&Eta;" => "&#919;",
+                       "&Theta;" => "&#920;",
+                       "&Iota;" => "&#921;",
+                       "&Kappa;" => "&#922;",
+                       "&Lambda;" => "&#923;",
+                       "&Mu;" => "&#924;",
+                       "&Nu;" => "&#925;",
+                       "&Xi;" => "&#926;",
+                       "&Omicron;" => "&#927;",
+                       "&Pi;" => "&#928;",
+                       "&Rho;" => "&#929;",
+                       "&Sigma;" => "&#931;",
+                       "&Tau;" => "&#932;",
+                       "&Upsilon;" => "&#933;",
+                       "&Phi;" => "&#934;",
+                       "&Chi;" => "&#935;",
+                       "&Psi;" => "&#936;",
+                       "&Omega;" => "&#937;",
+                       "&beta;" => "&#946;",
+                       "&gamma;" => "&#947;",
+                       "&delta;" => "&#948;",
+                       "&epsilon;" => "&#949;",
+                       "&zeta;" => "&#950;",
+                       "&eta;" => "&#951;",
+                       "&theta;" => "&#952;",
+                       "&iota;" => "&#953;",
+                       "&kappa;" => "&#954;",
+                       "&lambda;" => "&#955;",
+                       "&mu;" => "&#956;",
+                       "&nu;" => "&#957;",
+                       "&xi;" => "&#958;",
+                       "&omicron;" => "&#959;",
+                       "&pi;" => "&#960;",
+                       "&rho;" => "&#961;",
+                       "&sigmaf;" => "&#962;",
+                       "&sigma;" => "&#963;",
+                       "&tau;" => "&#964;",
+                       "&upsilon;" => "&#965;",
+                       "&phi;" => "&#966;",
+                       "&chi;" => "&#967;",
+                       "&psi;" => "&#968;",
+                       "&omega;" => "&#969;",
+                       "&thetasym;" => "&#977;",
+                       "&upsih;" => "&#978;",
+                       "&piv;" => "&#982;",
+                       "&ensp;" => "&#8194;",
+                       "&emsp;" => "&#8195;",
+                       "&thinsp;" => "&#8201;",
+                       "&zwnj;" => "&#8204;",
+                       "&zwj;" => "&#8205;",
+                       "&lrm;" => "&#8206;",
+                       "&rlm;" => "&#8207;",
+                       "&ndash;" => "&#8211;",
+                       "&mdash;" => "&#8212;",
+                       "&lsquo;" => "&#8216;",
+                       "&rsquo;" => "&#8217;",
+                       "&sbquo;" => "&#8218;",
+                       "&ldquo;" => "&#8220;",
+                       "&rdquo;" => "&#8221;",
+                       "&bdquo;" => "&#8222;",
+                       "&dagger;" => "&#8224;",
+                       "&Dagger;" => "&#8225;",
+                       "&bull;" => "&#8226;",
+                       "&hellip;" => "&#8230;",
+                       "&permil;" => "&#8240;",
+                       "&prime;" => "&#8242;",
+                       "&Prime;" => "&#8243;",
+                       "&lsaquo;" => "&#8249;",
+                       "&rsaquo;" => "&#8250;",
+                       "&oline;" => "&#8254;",
+                       "&frasl;" => "&#8260;",
+                       "&euro;" => "&#8364;",
+                       "&weierp;" => "&#8472;",
+                       "&image;" => "&#8465;",
+                       "&real;" => "&#8476;",
+                       "&trade;" => "&#8482;",
+                       "&alefsym;" => "&#8501;",
+                       "&larr;" => "&#8592;",
+                       "&uarr;" => "&#8593;",
+                       "&rarr;" => "&#8594;",
+                       "&darr;" => "&#8595;",
+                       "&harr;" => "&#8596;",
+                       "&crarr;" => "&#8629;",
+                       "&lArr;" => "&#8656;",
+                       "&uArr;" => "&#8657;",
+                       "&rArr;" => "&#8658;",
+                       "&dArr;" => "&#8659;",
+                       "&hArr;" => "&#8660;",
+                       "&forall;" => "&#8704;",
+                       "&part;" => "&#8706;",
+                       "&exist;" => "&#8707;",
+                       "&empty;" => "&#8709;",
+                       "&nabla;" => "&#8711;",
+                       "&isin;" => "&#8712;",
+                       "&notin;" => "&#8713;",
+                       "&ni;" => "&#8715;",
+                       "&prod;" => "&#8719;",
+                       "&sum;" => "&#8721;",
+                       "&minus;" => "&#8722;",
+                       "&lowast;" => "&#8727;",
+                       "&radic;" => "&#8730;",
+                       "&prop;" => "&#8733;",
+                       "&infin;" => "&#8734;",
+                       "&ang;" => "&#8736;",
+                       "&and;" => "&#8743;",
+                       "&or;" => "&#8744;",
+                       "&cap;" => "&#8745;",
+                       "&cup;" => "&#8746;",
+                       "&int;" => "&#8747;",
+                       "&there4;" => "&#8756;",
+                       "&sim;" => "&#8764;",
+                       "&cong;" => "&#8773;",
+                       "&asymp;" => "&#8776;",
+                       "&ne;" => "&#8800;",
+                       "&equiv;" => "&#8801;",
+                       "&le;" => "&#8804;",
+                       "&ge;" => "&#8805;",
+                       "&sub;" => "&#8834;",
+                       "&sup;" => "&#8835;",
+                       "&nsub;" => "&#8836;",
+                       "&sube;" => "&#8838;",
+                       "&supe;" => "&#8839;",
+                       "&oplus;" => "&#8853;",
+                       "&otimes;" => "&#8855;",
+                       "&perp;" => "&#8869;",
+                       "&sdot;" => "&#8901;",
+                       "&lceil;" => "&#8968;",
+                       "&rceil;" => "&#8969;",
+                       "&lfloor;" => "&#8970;",
+                       "&rfloor;" => "&#8971;",
+                       "&lang;" => "&#9001;",
+                       "&rang;" => "&#9002;",
+                       "&loz;" => "&#9674;",
+                       "&spades;" => "&#9824;",
+                       "&clubs;" => "&#9827;",
+                       "&hearts;" => "&#9829;",
+                       "&diams;" => "&#9830;");
+               return strtr($data, $entities);
+       }
+
+       function xmlrpc_encode_entitites($data) 
+       {
+               $length = strlen($data);
+               $escapeddata = "";
+               for($position = 0; $position < $length; $position++)
+               {
+                       $character = substr($data, $position, 1);
+                       $code = Ord($character);
+                       switch($code) {
+                               case 34:
+                               $character = "&quot;";
+                               break;
+                               case 38:
+                               $character = "&amp;";
+                               break;
+                               case 39:
+                               $character = "&apos;";
+                               break;
+                               case 60:
+                               $character = "&lt;";
+                               break;
+                               case 62:
+                               $character = "&gt;";
+                               break;
+                               default:
+                               if ($code < 32 || $code > 159)
+                                       $character = ("&#".strval($code).";");
+                               break;
+                       }
+                       $escapeddata .= $character;
+               }
+               return $escapeddata;
+       }
+
+       function xmlrpc_se($parser, $name, $attrs)
+       {
+               global $_xh, $xmlrpcDateTime, $xmlrpcString, $xmlrpc_valid_parents;
+
+               // if invalid xmlrpc already detected, skip all processing
+               if ($_xh[$parser]['isf'] < 2)
+               {
+
+               // check for correct element nesting
+               // top level element can only be of 2 types
+               if ($_xh[$parser]['sp'] == 0)
+               {
+                       if ($name != 'METHODRESPONSE' && $name != 'METHODCALL')
+                       {
+                               $_xh[$parser]['isf'] = 2;
+                               $_xh[$parser]['isf_reason'] = 'missing top level xmlrpc element';
+                               return;
+                       }
+               }
+               else
+               {
+                       // not top level element: see if parent is OK
+                       $parent = $_xh[$parser]['stack'][$_xh[$parser]['sp']-1];
+                       if (!isset($xmlrpc_valid_parents[$name][$parent]))
+                       {
+                               $_xh[$parser]['isf'] = 2;
+                               $_xh[$parser]['isf_reason'] = "xmlrpc element $name cannot be child of $parent";
+                               return;
+                       }
+               }
+
+               switch($name)
+               {
+                       case 'STRUCT':
+                       case 'ARRAY':
+                               //$_xh[$parser]['st'].='array(';
+                               //$_xh[$parser]['cm']++;
+                               // this last line turns quoting off
+                               // this means if we get an empty array we'll
+                               // simply get a bit of whitespace in the eval
+                               //$_xh[$parser]['qt']=0;
+
+                               // create an empty array to hold child values, and push it onto appropriate stack
+                               $cur_val = array();
+                               $cur_val['values'] = array();
+                               $cur_val['type'] = $name;
+                               $_xh[$parser]['valuestack'][$_xh[$parser]['vsp']] = $cur_val;
+                               $_xh[$parser]['vsp']++;
+                               break;
+                       case 'METHODNAME':
+                       case 'NAME':
+                               //$_xh[$parser]['st'].='"';
+                               $_xh[$parser]['ac']='';
+                               break;
+                       case 'FAULT':
+                               $_xh[$parser]['isf']=1;
+                               break;
+                       case 'PARAM':
+                               //$_xh[$parser]['st']='';
+                               // clear value, so we can check later if no value will passed for this param/member
+                               $_xh[$parser]['value']='';
+                               break;
+                       case 'VALUE':
+                               //$_xh[$parser]['st'].='new xmlrpcval(';
+                               // look for a value: if this is still true by the
+                               // time we reach the end tag for value then the type is string
+                               // by implication
+                               $_xh[$parser]['vt']='value';
+                               $_xh[$parser]['ac']='';
+                               //$_xh[$parser]['qt']=0;
+                               $_xh[$parser]['lv']=1;
+                               break;
+                       case 'I4':
+                       case 'INT':
+                       case 'STRING':
+                       case 'BOOLEAN':
+                       case 'DOUBLE':
+                       case 'DATETIME.ISO8601':
+                       case 'BASE64':
+                               if ($_xh[$parser]['vt']!='value')
+                               {
+                                       //two data elements inside a value: an error occurred!
+                                       $_xh[$parser]['isf'] = 2;
+                                       $_xh[$parser]['isf_reason'] = "$name element following a {$_xh[$parser]['vt']} element inside a single value";
+                                       return;
+                               }
+
+                               // reset the accumulator
+                               $_xh[$parser]['ac']='';
+
+                               /*if ($name=='DATETIME.ISO8601' || $name=='STRING')
+                               {
+                                       $_xh[$parser]['qt']=1;
+                                       if ($name=='DATETIME.ISO8601')
+                                       {
+                                               $_xh[$parser]['vt']=$xmlrpcDateTime;
+                                       }
+                               }
+                               elseif ($name=='BASE64')
+                               {
+                                       $_xh[$parser]['qt']=2;
+                               }
+                               else
+                               {
+                                       // No quoting is required here -- but
+                                       // at the end of the element we must check
+                                       // for data format errors.
+                                       $_xh[$parser]['qt']=0;
+                               }*/
+                               break;
+                       case 'MEMBER':
+                               //$_xh[$parser]['ac']='';
+                               // avoid warnings later on if no NAME is found before VALUE inside
+                               // a struct member predefining member name as NULL
+                               $_xh[$parser]['valuestack'][$_xh[$parser]['vsp']-1]['name'] = '';
+                               // clear value, so we can check later if no value will passed for this param/member
+                               $_xh[$parser]['value']='';
+                               break;
+                       case 'DATA':
+                       case 'METHODCALL':
+                       case 'METHODRESPONSE':
+                       case 'PARAMS':
+                               // valid elements that add little to processing
+                               break;
+                       default:
+                               /// INVALID ELEMENT: RAISE ISF so that it is later recognized!!!
+                               $_xh[$parser]['isf'] = 2;
+                               $_xh[$parser]['isf_reason'] = "found not-xmlrpc xml element $name";
+                               break;
+               }
+
+               // Save current element name to stack, to validate nesting
+               $_xh[$parser]['stack'][$_xh[$parser]['sp']] = $name;
+               $_xh[$parser]['sp']++;
+
+               if ($name!='VALUE')
+               {
+                       $_xh[$parser]['lv']=0;
+               }
+       }
+       }
+
+       function xmlrpc_ee($parser, $name)
+       {
+               global $_xh,$xmlrpcTypes,$xmlrpcString,$xmlrpcDateTime;
+
+               if ($_xh[$parser]['isf'] < 2)
+               {
+
+               // push this element name from stack
+               // NB: if XML validates, correct opening/closing is guaranteed and
+               // we do not have to check for $name == $curr_elem.
+               // we also checked for proper nesting at start of elements...
+               $_xh[$parser]['sp']--;
+               $curr_elem = $_xh[$parser]['stack'][$_xh[$parser]['sp']];
+               unset($_xh[$parser]['stack'][$_xh[$parser]['sp']]); 
+               switch($name)
+               {
+                       case 'STRUCT':
+                       case 'ARRAY':
+                               //if ($_xh[$parser]['cm'] && substr($_xh[$parser]['st'], -1) ==',')
+                               //{
+                               //      $_xh[$parser]['st']=substr($_xh[$parser]['st'],0,-1);
+                               //}
+                               //$_xh[$parser]['st'].=')';
+
+                               // fetch out of stack array of values, and promote it to current value
+                               $_xh[$parser]['vsp']--;
+                               $cur_val = $_xh[$parser]['valuestack'][$_xh[$parser]['vsp']];
+                               unset($_xh[$parser]['valuestack'][$_xh[$parser]['vsp']]);
+                               $_xh[$parser]['value'] = $cur_val['values'];
+
+                               $_xh[$parser]['vt']=strtolower($name);
+                               //$_xh[$parser]['cm']--;
+                               break;
+                       case 'NAME':
+                               //$_xh[$parser]['st'].= $_xh[$parser]['ac'] . '" => ';
+                               $_xh[$parser]['valuestack'][$_xh[$parser]['vsp']-1]['name'] = $_xh[$parser]['ac'];
+                               break;
+                       case 'BOOLEAN':
+                       case 'I4':
+                       case 'INT':
+                       case 'STRING':
+                       case 'DOUBLE':
+                       case 'DATETIME.ISO8601':
+                       case 'BASE64':
+                               $_xh[$parser]['vt']=strtolower($name);
+                               //if ($_xh[$parser]['qt']==1)                   
+                               if ($name=='STRING')
+                               {
+                                       // we use double quotes rather than single so backslashification works OK
+                                       //$_xh[$parser]['st'].='"'. $_xh[$parser]['ac'] . '"';
+                                       $_xh[$parser]['value']=$_xh[$parser]['ac'];
+                               }
+                               elseif ($name=='DATETIME.ISO8601')
+                               {
+                                       $_xh[$parser]['vt']=$xmlrpcDateTime;
+                                       $_xh[$parser]['value']=$_xh[$parser]['ac'];
+                               }
+                               elseif ($name=='BASE64')
+                               {
+                                       //$_xh[$parser]['st'].='base64_decode("'. $_xh[$parser]['ac'] . '")';
+
+                                       ///@todo check for failure of base64 decoding / catch warnings
+                                       $_xh[$parser]['value']=base64_decode($_xh[$parser]['ac']);
+                               }
+                               elseif ($name=='BOOLEAN')
+                               {
+                                       // special case here: we translate boolean 1 or 0 into PHP
+                                       // constants true or false
+                                       // NB: this simple checks helps a lot sanitizing input, ie no
+                                       // security problems around here
+
+                                       // [MOD] S. Verberkt (Legolas) (13/02/2006 21:16): Also accept 'true' and 'false'
+                                       if ($_xh[$parser]['ac']=='1' || strcasecmp($_xh[$parser]['ac'], 'true') == 0)
+                                       {
+                                               //$_xh[$parser]['ac']='true';   
+                                               $_xh[$parser]['value']=true;
+                                       }
+                                       else
+                                       {
+                                               //$_xh[$parser]['ac']='false';
+                                               // log if receiveing something strange, even though we set the value to false anyway
+                                               if ($_xh[$parser]['ac']!='0' && strcasecmp($_xh[$parser]['ac'], 'false') != 0)
+                                                       error_log('XML-RPC: invalid value received in BOOLEAN: '.$_xh[$parser]['ac']);
+                                               $_xh[$parser]['value']=false;
+                                       }
+                                       // [/MOD]
+
+                                       //$_xh[$parser]['st'].=$_xh[$parser]['ac'];
+                               }
+                               elseif ($name=='DOUBLE')
+                               {
+                                       // we have a DOUBLE
+                                       // we must check that only 0123456789-.<space> are characters here
+                                       if (!ereg("^[+-]?[eE0123456789 \\t\\.]+$", $_xh[$parser]['ac']))
+                                       {
+                                               // TODO: find a better way of throwing an error
+                                               // than this!
+                                               error_log('XML-RPC: non numeric value received in DOUBLE: '.$_xh[$parser]['ac']);
+                                               //$_xh[$parser]['st'].="'ERROR_NON_NUMERIC_FOUND'";
+                                               $_xh[$parser]['value']='ERROR_NON_NUMERIC_FOUND';
+                                       }
+                                       else
+                                       {
+                                               // it's ok, add it on
+                                               //$_xh[$parser]['st'].=(double)$_xh[$parser]['ac'];
+                                               $_xh[$parser]['value']=(double)$_xh[$parser]['ac'];
+                                       }
+                               }
+                               else
+                               {
+                                       // we have an I4/INT
+                                       // we must check that only 0123456789-<space> are characters here
+                                       if (!ereg("^[+-]?[0123456789 \\t]+$", $_xh[$parser]['ac']))
+                                       {
+                                               // TODO: find a better way of throwing an error
+                                               // than this!
+                                               error_log('XML-RPC: non numeric value received in INT: '.$_xh[$parser]['ac']);
+                                               //$_xh[$parser]['st'].="'ERROR_NON_NUMERIC_FOUND'";
+                                               $_xh[$parser]['value']='ERROR_NON_NUMERIC_FOUND';
+                                       }
+                                       else
+                                       {
+                                               // it's ok, add it on
+                                               //$_xh[$parser]['st'].=(int)$_xh[$parser]['ac'];
+                                               $_xh[$parser]['value']=(int)$_xh[$parser]['ac'];
+                                       }
+                               }
+                               $_xh[$parser]['ac']='';
+                               //$_xh[$parser]['qt']=0;
+                               $_xh[$parser]['lv']=3; // indicate we've found a value
+                               break;
+                       case 'VALUE':
+                               // This if() detects if no scalar was inside <VALUE></VALUE>
+                               if ($_xh[$parser]['vt']=='value')
+                               {
+                                       $_xh[$parser]['value']=$_xh[$parser]['ac'];
+                                       $_xh[$parser]['vt']=$xmlrpcString;
+                               }
+                               /*if (strlen($_xh[$parser]['ac'])>0 &&
+                                       $_xh[$parser]['vt']==$xmlrpcString)
+                               {
+                                       $_xh[$parser]['st'].='"'. $_xh[$parser]['ac'] . '"';
+                               }
+                               // This if() detects if no scalar was inside <VALUE></VALUE>
+                               // and pads an empty ''.
+                               if($_xh[$parser]['st'][strlen($_xh[$parser]['st'])-1] == '(')
+                               {
+                                       $_xh[$parser]['st'].= '""';
+                               }
+                               // G. Giunta 2005/03/12 save some chars in the reconstruction of string vals...
+                               if ($_xh[$parser]['vt'] != $xmlrpcString)
+                                       $_xh[$parser]['st'].=", '" . $_xh[$parser]['vt'] . "')";
+                               else
+                                       $_xh[$parser]['st'].=")";
+                               if ($_xh[$parser]['cm'])
+                               {
+                                       $_xh[$parser]['st'].=',';
+                               }*/
+
+                               // build the xmlrpc val out of the data received, and substitute it
+                               $temp = new xmlrpcval($_xh[$parser]['value'], $_xh[$parser]['vt']);
+                               // check if we are inside an array or struct:
+                               // if value just built is inside an array, let's move it into array on the stack
+                               if ($_xh[$parser]['vsp'] && $_xh[$parser]['valuestack'][$_xh[$parser]['vsp']-1]['type']=='ARRAY')
+                               {
+                                       $_xh[$parser]['valuestack'][$_xh[$parser]['vsp']-1]['values'][] = $temp;
+                               }
+                               else
+                               {
+                               $_xh[$parser]['value'] = $temp;
+                               }
+                               break;
+                       case 'MEMBER':
+                               $_xh[$parser]['ac']='';
+                               //$_xh[$parser]['qt']=0;
+                               // add to array in the stack the last element built
+                               // unless no VALUE was found
+                               if ($_xh[$parser]['value'])
+                               {
+                                       $_xh[$parser]['valuestack'][$_xh[$parser]['vsp']-1]['values'][$_xh[$parser]['valuestack'][$_xh[$parser]['vsp']-1]['name']] = $_xh[$parser]['value'];
+                               }
+                               else
+                                       error_log('XML-RPC: missing VALUE inside STRUCT in received xml');
+                               break;
+                       case 'DATA':
+                               $_xh[$parser]['ac']='';
+                               //$_xh[$parser]['qt']=0;
+                               break;
+                       case 'PARAM':
+                               //$_xh[$parser]['params'][]=$_xh[$parser]['st'];
+                               if ($_xh[$parser]['value'])
+                                       $_xh[$parser]['params'][]=$_xh[$parser]['value'];
+                               else
+                                       error_log('XML-RPC: missing VALUE inside PARAM in received xml');
+                               break;
+                       case 'METHODNAME':
+                               $_xh[$parser]['method']=ereg_replace("^[\n\r\t ]+", '', $_xh[$parser]['ac']);
+                               break;
+                       case 'PARAMS':
+                       case 'FAULT':
+                       case 'METHODCALL':
+                       case 'METHORESPONSE':
+                               break;
+                       default:
+                               // End of INVALID ELEMENT!
+                               // shall we add an assert here for unreachable code???
+                               break;
+               }
+               // if it's a valid type name, set the type
+               /*if (isset($xmlrpcTypes[strtolower($name)]))
+               {
+                       $_xh[$parser]['vt']=strtolower($name);
+               }*/
+
+               }
+       }
+
+       function xmlrpc_cd($parser, $data)
+       {
+               global $_xh, $xmlrpc_backslash;
+
+               //if (ereg("^[\n\r \t]+$", $data)) return;
+               // print "adding [${data}]\n";
+
+               // skip processing if xml fault already detected
+               if ($_xh[$parser]['isf'] < 2)
+               {
+               if ($_xh[$parser]['lv']!=3)
+               {
+                       // "lookforvalue==3" means that we've found an entire value
+                       // and should discard any further character data
+                       if ($_xh[$parser]['lv']==1)
+                       {
+                               // if we've found text and we're just in a <value> then
+                               // turn quoting on, as this will be a string
+                                       //$_xh[$parser]['qt']=1;
+                               // and say we've found a value
+                               $_xh[$parser]['lv']=2;
+                       }
+                       if(!@isset($_xh[$parser]['ac']))
+                       {
+                               $_xh[$parser]['ac'] = '';
+                       }
+                               //$_xh[$parser]['ac'].=str_replace('$', '\$', str_replace('"', '\"', str_replace(chr(92),$xmlrpc_backslash, $data)));
+                               $_xh[$parser]['ac'].=$data;
+                       }
+               }
+       }
+
+       function xmlrpc_dh($parser, $data)
+       {
+               global $_xh, $xmlrpc_backslash;
+
+               // skip processing if xml fault already detected
+               if ($_xh[$parser]['isf'] < 2)
+               {
+               if (substr($data, 0, 1) == '&' && substr($data, -1, 1) == ';')
+               {
+                       if ($_xh[$parser]['lv']==1)
+                       {
+                                       //$_xh[$parser]['qt']=1;
+                               $_xh[$parser]['lv']=2;
+                       }
+                               //$_xh[$parser]['ac'].=str_replace('$', '\$', str_replace('"', '\"', str_replace(chr(92),$xmlrpc_backslash, $data)));
+                               $_xh[$parser]['ac'].=$data;
+                       }
+               }
+       }
+
+       class xmlrpc_client
+       {
+               var $path;
+               var $server;
+               var $port;
+               var $errno;
+               var $errstr;
+               var $debug=0;
+               var $username='';
+               var $password='';
+               var $cert='';
+               var $certpass='';
+               var $verifypeer=1;
+               var $verifyhost=1;
+               var $no_multicall=false;
+
+               function xmlrpc_client($path, $server, $port=0)
+               {
+                       $this->port=$port; $this->server=$server; $this->path=$path;
+               }
+
+               function setDebug($in)
+               {
+                       if ($in)
+                       {
+                               $this->debug=1;
+                       }
+                       else
+                       {
+                               $this->debug=0;
+                       }
+               }
+
+               function setCredentials($u, $p)
+               {
+                       $this->username=$u;
+                       $this->password=$p;
+               }
+
+               function setCertificate($cert, $certpass)
+               {
+                       $this->cert = $cert;
+                       $this->certpass = $certpass;
+               }
+
+               function setSSLVerifyPeer($i)
+               {
+                       $this->verifypeer = $i;
+               }
+
+               function setSSLVerifyHost($i)
+               {
+                       $this->verifyhost = $i;
+               }
+
+               function send($msg, $timeout=0, $method='http')
+               {
+                       if (is_array($msg))
+                       {
+                               // $msg is an array of xmlrpcmsg's
+                               return $this->multicall($msg, $timeout, $method);
+                       }
+
+                       // where msg is an xmlrpcmsg
+                       $msg->debug=$this->debug;
+
+                       if ($method == 'https')
+                       {
+                               return $this->sendPayloadHTTPS($msg,
+                               $this->server,
+                               $this->port, $timeout,
+                               $this->username, $this->password,
+                               $this->cert,
+                               $this->certpass);
+                       }
+                       else
+                       {
+                               return $this->sendPayloadHTTP10($msg, $this->server, $this->port,
+                               $timeout, $this->username, 
+                               $this->password);
+                       }
+               }
+
+               function sendPayloadHTTP10($msg, $server, $port, $timeout=0,$username='', $password='')
+               {
+                       global $xmlrpcerr, $xmlrpcstr, $xmlrpcName, $xmlrpcVersion, $xmlrpc_defencoding;
+                       if ($port==0)
+                       {
+                               $port=80;
+                       }
+                       if($timeout>0)
+                       {
+                               $fp=@fsockopen($server, $port,$this->errno, $this->errstr, $timeout);
+                       }
+                       else
+                       {
+                               $fp=@fsockopen($server, $port,$this->errno, $this->errstr);
+                       }
+                       if ($fp)
+                       {
+                               if ($timeout>0 && function_exists('stream_set_timeout'))
+                                       stream_set_timeout($fp, $timeout);
+                       }
+                       else
+                       {
+                               $this->errstr='Connect error';
+                               $r=new xmlrpcresp(0, $xmlrpcerr['http_error'],$xmlrpcstr['http_error']);
+                               return $r;
+                       }
+                       // Only create the payload if it was not created previously
+                       if(empty($msg->payload))
+                       {
+                               $msg->createPayload();
+                       }
+
+                       // thanks to Grant Rauscher <grant7@firstworld.net>
+                       // for this
+                       $credentials='';
+                       if ($username!='')
+                       {
+                               $credentials='Authorization: Basic ' . base64_encode($username . ':' . $password) . "\r\n";
+                       }
+
+                       $op= "POST " . $this->path. " HTTP/1.0\r\n" .
+                               "User-Agent: " . $xmlrpcName . " " . $xmlrpcVersion . "\r\n" .
+                               "Host: ". $server . "\r\n" .
+                               $credentials . 
+                               "Accept-Charset: " . $xmlrpc_defencoding . "\r\n" .
+                               "Content-Type: text/xml\r\nContent-Length: " .
+                               strlen($msg->payload) . "\r\n\r\n" .
+                               $msg->payload;
+
+                       if (!fputs($fp, $op, strlen($op)))
+                       {
+                               $this->errstr='Write error';
+                               $r=new xmlrpcresp(0, $xmlrpcerr['http_error'], $xmlrpcstr['http_error']);
+                               return $r;
+                       }
+                       $resp=$msg->parseResponseFile($fp);
+                       fclose($fp);
+                       return $resp;
+               }
+
+               // contributed by Justin Miller <justin@voxel.net>
+               // requires curl to be built into PHP
+               function sendPayloadHTTPS($msg, $server, $port, $timeout=0,$username='', $password='', $cert='',$certpass='')
+               {
+                       global $xmlrpcerr, $xmlrpcstr, $xmlrpcVersion, $xmlrpc_internalencoding;
+                       if ($port == 0)
+                       {
+                               $port = 443;
+                       }
+
+                       // Only create the payload if it was not created previously
+                       if(empty($msg->payload))
+                       {
+                               $msg->createPayload();
+                       }
+
+                       if (!function_exists('curl_init'))
+                       {
+                               $this->errstr='SSL unavailable on this install';
+                               $r=new xmlrpcresp(0, $xmlrpcerr['no_ssl'], $xmlrpcstr['no_ssl']);
+                               return $r;
+                       }
+
+                       $curl = curl_init('https://' . $server . ':' . $port . $this->path);
+
+                       curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+                       // results into variable
+                       if ($this->debug)
+                       {
+                               curl_setopt($curl, CURLOPT_VERBOSE, 1);
+                       }
+                       curl_setopt($curl, CURLOPT_USERAGENT, 'PHP XMLRPC '.$xmlrpcVersion);
+                       // required for XMLRPC
+                       curl_setopt($curl, CURLOPT_POST, 1);
+                       // post the data
+                       curl_setopt($curl, CURLOPT_POSTFIELDS, $msg->payload);
+                       // the data
+                       curl_setopt($curl, CURLOPT_HEADER, 1);
+                       // return the header too
+                       curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml', 'Accept-Charset: '.$xmlrpc_internalencoding));
+                       // whether to verify remote host's cert
+                       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verifypeer);
+                       // whether to verify cert's common name (CN); 0 for no, 1 to verify that it exists, and 2 to verify that it matches the hostname used
+                       curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $this->verifyhost);
+                       // required for XMLRPC
+                       if ($timeout)
+                       {
+                               curl_setopt($curl, CURLOPT_TIMEOUT, $timeout == 1 ? 1 : $timeout - 1);
+                       }
+                       // timeout is borked
+                       if ($username && $password)
+                       {
+                               curl_setopt($curl, CURLOPT_USERPWD,"$username:$password");
+                       }
+                       // set auth stuff
+                       if ($cert)
+                       {
+                               curl_setopt($curl, CURLOPT_SSLCERT, $cert);
+                       }
+                       // set cert file
+                       if ($certpass)
+                       {
+                               curl_setopt($curl, CURLOPT_SSLCERTPASSWD,$certpass);
+                       }
+                       // set cert password
+
+                       $result = curl_exec($curl);
+
+                       if (!$result)
+                       {
+                               $this->errstr='no response';
+                               $resp=new xmlrpcresp(0, $xmlrpcerr['curl_fail'], $xmlrpcstr['curl_fail']. ': '. curl_error($curl));
+                               curl_close($curl);
+                       }
+                       else
+                       {
+                               curl_close($curl);
+                               $resp = $msg->parseResponse($result);
+                       }
+                       return $resp;
+               }
+
+               function multicall($msgs, $timeout=0, $method='http')
+               {
+                       $results = false;
+
+                       if (! $this->no_multicall)
+                       {
+                               $results = $this->_try_multicall($msgs, $timeout, $method);
+                               /* TODO - this is not php3-friendly */
+                               // if($results !== false)
+                               if(is_array($results))
+                               {
+                                       // Either the system.multicall succeeded, or the send
+                                       // failed (e.g. due to HTTP timeout). In either case,
+                                       // we're done for now.
+                                       return $results;
+                               }
+                               else
+                               {
+                                       // system.multicall unsupported by server,
+                                       // don't try it next time...
+                                       $this->no_multicall = true;
+                               }
+                       }
+
+                       // system.multicall is unupported by server:
+                       //   Emulate multicall via multiple requests
+                       $results = array();
+                       //foreach($msgs as $msg)
+                       @reset($msgs);
+                       while(list(,$msg) = @each($msgs))
+                       {
+                               $results[] = $this->send($msg, $timeout, $method);
+                       }
+                       return $results;
+               }
+
+               // Attempt to boxcar $msgs via system.multicall.
+               function _try_multicall($msgs, $timeout, $method)
+               {
+                       // Construct multicall message
+                       $calls = array();
+                       //foreach($msgs as $msg)
+                       @reset($msgs);
+                       while(list(,$msg) = @each($msgs))
+                       {
+                               $call['methodName'] = new xmlrpcval($msg->method(),'string');
+                               $numParams = $msg->getNumParams();
+                               $params = array();
+                               for ($i = 0; $i < $numParams; $i++)
+                               {
+                                       $params[$i] = $msg->getParam($i);
+                               }
+                               $call['params'] = new xmlrpcval($params, 'array');
+                               $calls[] = new xmlrpcval($call, 'struct');
+                       }
+                       $multicall = new xmlrpcmsg('system.multicall');
+                       $multicall->addParam(new xmlrpcval($calls, 'array'));
+
+                       // Attempt RPC call
+                       $result = $this->send($multicall, $timeout, $method);
+                       if(!is_object($result))
+                       {
+                               return ($result || 0); // transport failed
+                       }
+
+                       if($result->faultCode() != 0)
+                       {
+                               return false;           // system.multicall failed
+                       }
+
+                       // Unpack responses.
+                       $rets = $result->value();
+                       if($rets->kindOf() != 'array')
+                       {
+                               return false;           // bad return type from system.multicall
+                       }
+                       $numRets = $rets->arraysize();
+                       if($numRets != count($msgs))
+                       {
+                               return false;           // wrong number of return values.
+                       }
+
+                       $response = array();
+                       for ($i = 0; $i < $numRets; $i++)
+                       {
+                               $val = $rets->arraymem($i);
+                               switch ($val->kindOf())
+                               {
+                               case 'array':
+                                       if($val->arraysize() != 1)
+                                       {
+                                               return false;           // Bad value
+                                       }
+                                       // Normal return value
+                                       $response[$i] = new xmlrpcresp($val->arraymem(0));
+                                       break;
+                               case 'struct':
+                                       $code = $val->structmem('faultCode');
+                                       if($code->kindOf() != 'scalar' || $code->scalartyp() != 'int')
+                                       {
+                                               return false;
+                                       }
+                                       $str = $val->structmem('faultString');
+                                       if($str->kindOf() != 'scalar' || $str->scalartyp() != 'string')
+                                       {
+                                               return false;
+                                       }
+                                       $response[$i] = new xmlrpcresp(0, $code->scalarval(), $str->scalarval());
+                                       break;
+                               default:
+                                       return false;
+                               }
+                       }
+                       return $response;
+               }
+       } // end class xmlrpc_client
+
+       class xmlrpcresp
+       {
+               var $val = 0;
+               var $errno = 0;
+               var $errstr = '';
+               var $hdrs = array();
+
+               function xmlrpcresp($val, $fcode = 0, $fstr = '')
+               {
+                       if ($fcode != 0)
+                       {
+                               // error
+                               $this->errno = $fcode;
+                               $this->errstr = $fstr;
+                               //$this->errstr = htmlspecialchars($fstr); // XXX: encoding probably shouldn't be done here; fix later.
+                       }
+                       elseif (!is_object($val))
+                       {
+                               // programmer error
+                               error_log("Invalid type '" . gettype($val) . "' (value: $val) passed to xmlrpcresp. Defaulting to empty value.");
+                               $this->val = new xmlrpcval();
+                       }
+                       else
+                       {
+                               // success
+                               $this->val = $val;
+                       }
+               }
+
+               function faultCode()
+               {
+                       return $this->errno;
+               }
+
+               function faultString()
+               {
+                       return $this->errstr;
+               }
+
+               function value()
+               {
+                       return $this->val;
+               }
+
+               function serialize()
+               {
+                       $result = "<methodResponse>\n";
+                       if ($this->errno)
+                       {
+                               // G. Giunta 2005/2/13: let non-ASCII response messages be tolerated by clients
+                               $result .= '<fault>
+<value>
+<struct>
+<member>
+<name>faultCode</name>
+<value><int>' . $this->errno . '</int></value>
+</member>
+<member>
+<name>faultString</name>
+<value><string>' . xmlrpc_encode_entitites($this->errstr) . '</string></value>
+</member>
+</struct>
+</value>
+</fault>';
+                       }
+                       else
+                       {
+                               $result .= "<params>\n<param>\n" .
+                                       $this->val->serialize() . 
+                                       "</param>\n</params>";
+                       }
+                       $result .= "\n</methodResponse>";
+                       return $result;
+               }
+       }
+
+       class xmlrpcmsg
+       {
+               var $payload;
+               var $methodname;
+               var $params=array();
+               var $debug=0;
+
+               function xmlrpcmsg($meth, $pars=0)
+               {
+                       $this->methodname=$meth;
+                       if (is_array($pars) && sizeof($pars)>0)
+                       {
+                               for($i=0; $i<sizeof($pars); $i++)
+                               {
+                                       $this->addParam($pars[$i]);
+                               }
+                       }
+               }
+
+               function xml_header()
+               {
+                       return "<?xml version=\"1.0\"?" . ">\n<methodCall>\n";
+               }
+
+               function xml_footer()
+               {
+                       return "</methodCall>\n";
+               }
+
+               function createPayload()
+               {
+                       $this->payload=$this->xml_header();
+                       $this->payload.='<methodName>' . $this->methodname . "</methodName>\n";
+                       //      if (sizeof($this->params)) {
+                       $this->payload.="<params>\n";
+                       for($i=0; $i<sizeof($this->params); $i++)
+                       {
+                               $p=$this->params[$i];
+                               $this->payload.="<param>\n" . $p->serialize() .
+                               "</param>\n";
+                       }
+                       $this->payload.="</params>\n";
+                       // }
+                       $this->payload.=$this->xml_footer();
+                       //$this->payload=str_replace("\n", "\r\n", $this->payload);
+               }
+
+               function method($meth='')
+               {
+                       if ($meth!='')
+                       {
+                               $this->methodname=$meth;
+                       }
+                       return $this->methodname;
+               }
+
+               function serialize()
+               {
+                       $this->createPayload();
+                       return $this->payload;
+               }
+
+               function addParam($par) { $this->params[]=$par; }
+               function getParam($i) { return $this->params[$i]; }
+               function getNumParams() { return sizeof($this->params); }
+
+               function parseResponseFile($fp)
+               {
+                       $ipd='';
+                       while($data=fread($fp, 32768))
+                       {
+                               $ipd.=$data;
+                       }
+                       return $this->parseResponse($ipd);
+               }
+
+               function parseResponse($data='')
+               {
+                       global $_xh,$xmlrpcerr,$xmlrpcstr;
+                       global $xmlrpc_defencoding, $xmlrpc_internalencoding;
+
+                       $hdrfnd = 0;
+                       if($this->debug)
+                       {
+                               //by maHo, replaced htmlspecialchars with htmlentities
+                               print "<PRE>---GOT---\n" . htmlentities($data) . "\n---END---\n</PRE>";
+                       }
+
+                       if($data == '')
+                       {
+                               error_log('No response received from server.');
+                               $r = new xmlrpcresp(0, $xmlrpcerr['no_data'], $xmlrpcstr['no_data']);
+                               return $r;
+                       }
+                       // see if we got an HTTP 200 OK, else bomb
+                       // but only do this if we're using the HTTP protocol.
+                       if(ereg("^HTTP",$data))
+                       {
+                               // Strip HTTP 1.1 100 Continue header if present
+                               while (ereg('^HTTP/1.1 1[0-9]{2}', $data))
+                               {
+                                       $pos = strpos($data, 'HTTP', 12);
+                                       // server sent a Continue header without any (valid) content following...
+                                       // give the client a chance to know it
+                                       if (!$pos && !is_int($pos)) // works fine in php 3, 4 and 5
+                                               break;
+                                       $data = substr($data, $pos);
+                               }
+                               if (!ereg("^HTTP/[0-9\\.]+ 200 ", $data))
+                               {
+                                       $errstr= substr($data, 0, strpos($data, "\n")-1);
+                                       error_log('HTTP error, got response: ' .$errstr);
+                                       $r=new xmlrpcresp(0, $xmlrpcerr['http_error'], $xmlrpcstr['http_error']. ' (' . $errstr . ')');
+                                       return $r;
+                               }
+                       }
+                       $parser = xml_parser_create($xmlrpc_defencoding);
+
+                       // G. Giunta 2004/04/06
+                       // Clean up the accumulator, or it will grow indefinitely long
+                       // if making xmlrpc calls for a while
+                       $_xh=array();
+                       $_xh[$parser]=array();
+                       $_xh[$parser]['headers'] = array();
+                       $_xh[$parser]['stack'] = array();
+                       $_xh[$parser]['sp'] = 0;
+                       $_xh[$parser]['valuestack'] = array();
+                       $_xh[$parser]['vsp'] = 0;
+
+                       // separate HTTP headers from data
+                       if (ereg("^HTTP", $data))
+                       {
+                               // be tolerant to usage of \n instead of \r\n to separate headers and data
+                               // (even though it is not valid http)
+                               $pos = strpos($data,"\r\n\r\n");
+                               if($pos || is_int($pos))
+                                       $bd = $pos+4;
+                               else
+                               {
+                                       $pos = strpos($data,"\n\n");
+                                       if($pos || is_int($pos))
+                                               $bd = $pos+2;
+                                       else
+                                       {
+                                               // No separation between response headers and body: fault?
+                                               $bd = 0;
+                                       }
+                               }
+                               // be tolerant to line endings, and extra empty lines
+                               $ar = split("\r?\n", trim(substr($data, 0, $pos)));
+                               while (list(,$line) = @each($ar))
+                               {
+                                       // take care of multi-line headers
+                                       $arr = explode(':',$line);
+                                       if(count($arr) > 1)
+                                       {
+                                               $header_name = trim($arr[0]);
+                                               // TO DO: some headers (the ones that allow a CSV list of values)
+                                               // do allow many values to be passed using multiple header lines.
+                                               // We should add content to $_xh[$parser]['headers'][$header_name]
+                                               // instead of replacing it for those...
+                                               $_xh[$parser]['headers'][$header_name] = $arr[1];
+                                               for ($i = 2; $i < count($arr); $i++)
+                                               {
+                                                       $_xh[$parser]['headers'][$header_name] .= ':'.$arr[$i];
+                                               } // while
+                                               $_xh[$parser]['headers'][$header_name] = trim($_xh[$parser]['headers'][$header_name]);
+                                       } else if (isset($header_name))
+                                       {
+                                               $_xh[$parser]['headers'][$header_name] .= ' ' . trim($line);
+                                       }
+                               }
+                               $data = substr($data, $bd);
+
+                               if ($this->debug && count($_xh[$parser]['headers']))
+                               {
+                                       print '<PRE>';
+                                       //foreach ($_xh[$parser]['headers'] as $header)
+                                       @reset($_xh[$parser]['headers']);
+                                       while(list($header, $value) = @each($_xh[$parser]['headers']))
+                                       {
+                                               print "HEADER: $header: $value\n";
+                                       }
+                                       print "</PRE>\n";
+                               }
+                       }
+
+                       // be tolerant of extra whitespace in response body
+                       $data = trim($data);
+
+                       // be tolerant of junk after methodResponse (e.g. javascript automatically inserted by free hosts)
+                       // idea from Luca Mariano <luca.mariano@email.it> originally in PEARified version of the lib
+                       $bd = false;
+                       $pos = strpos($data, "</methodResponse>");
+                       while ($pos || is_int($pos))
+                       {
+                               $bd = $pos+17;
+                               $pos = strpos($data, "</methodResponse>", $bd);
+                       }
+                       if ($bd)
+                               $data = substr($data, 0, $bd);
+
+                       //$_xh[$parser]['st']='';
+                       //$_xh[$parser]['cm']=0;
+                       $_xh[$parser]['isf']=0;
+                       $_xh[$parser]['isf_reason']=0;
+                       $_xh[$parser]['ac']='';
+                       //$_xh[$parser]['qt']='';
+
+                       xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
+                       // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
+                       // the xml parser to give us back data in the expected charset
+                       xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $xmlrpc_internalencoding);
+
+                       xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
+                       xml_set_character_data_handler($parser, 'xmlrpc_cd');
+                       xml_set_default_handler($parser, 'xmlrpc_dh');
+                       //$xmlrpc_value=new xmlrpcval;
+
+                       if (!xml_parse($parser, $data, sizeof($data)))
+                       {
+                               // thanks to Peter Kocks <peter.kocks@baygate.com>
+                               if((xml_get_current_line_number($parser)) == 1)
+                               {
+                                       $errstr = 'XML error at line 1, check URL';
+                               }
+                               else
+                               {
+                                       $errstr = sprintf('XML error: %s at line %d',
+                                               xml_error_string(xml_get_error_code($parser)),
+                                               xml_get_current_line_number($parser));
+                               }
+                               error_log($errstr);
+                               $r=new xmlrpcresp(0, $xmlrpcerr['invalid_return'], $xmlrpcstr['invalid_return'].' ('.$errstr.')');
+                               xml_parser_free($parser);
+                               if ($this->debug)
+                                       echo $errstr;
+                               $r->hdrs = $_xh[$parser]['headers'];
+                               return $r;
+                       }
+                       xml_parser_free($parser);
+
+                       if ($_xh[$parser]['isf'] > 1)
+                       {
+                       if ($this->debug)
+                       {
+                                       ///@todo echo something for user?
+                               }
+
+                               $r = new xmlrpcresp(0, $xmlrpcerr['invalid_return'],
+                               $xmlrpcstr['invalid_return'] . ' ' . $_xh[$parser]['isf_reason']);
+                       }
+                       //else if (strlen($_xh[$parser]['st'])==0)
+                       else if (!is_object($_xh[$parser]['value']))
+                       {
+                               // then something odd has happened
+                               // and it's time to generate a client side error
+                               // indicating something odd went on
+                               $r=new xmlrpcresp(0, $xmlrpcerr['invalid_return'],
+                               $xmlrpcstr['invalid_return']);
+                       }
+                       else
+                       {
+
+                               if ($this->debug)
+                               {
+                                       //print "<PRE>---EVALING---[" .
+                                       //strlen($_xh[$parser]['st']) . " chars]---\n" .
+                                       //htmlspecialchars($_xh[$parser]['st']) . ";\n---END---</PRE>";
+                                       print "<PRE>---PARSED---\n" ;
+                                       var_dump($_xh[$parser]['value']);
+                                       print "\n---END---</PRE>";
+                               }
+
+                               //$allOK=0;
+                               //@eval('$v=' . $_xh[$parser]['st'] . '; $allOK=1;');
+                               //if (!$allOK)
+                               //{
+                               //      $r = new xmlrpcresp(0, $xmlrpcerr['invalid_return'], $xmlrpcstr['invalid_return']);
+                               //}
+                               //else
+                               $v = $_xh[$parser]['value'];
+                               if ($_xh[$parser]['isf'])
+                               {
+                                       $errno_v = $v->structmem('faultCode');
+                                       $errstr_v = $v->structmem('faultString');
+                                       $errno = $errno_v->scalarval();
+
+                                       if ($errno == 0)
+                                       {
+                                               // FAULT returned, errno needs to reflect that
+                                               $errno = -1;
+                                       }
+
+                                       $r = new xmlrpcresp($v, $errno, $errstr_v->scalarval());
+                               }
+                               else
+                               {
+                                       $r=new xmlrpcresp($v);
+                               }
+                       }
+
+                       $r->hdrs = $_xh[$parser]['headers'];
+                       return $r;
+               }
+       }
+
+       class xmlrpcval
+       {
+               var $me=array();
+               var $mytype=0;
+
+               function xmlrpcval($val=-1, $type='')
+               {
+                       global $xmlrpcTypes;
+                       $this->me=array();
+                       $this->mytype=0;
+                       if ($val!=-1 || !is_int($val) || $type!='')
+                       {
+                               if ($type=='')
+                               {
+                                       $type='string';
+                               }
+                               if ($xmlrpcTypes[$type]==1)
+                               {
+                                       $this->addScalar($val,$type);
+                               }
+                               elseif ($xmlrpcTypes[$type]==2)
+                               {
+                                       $this->addArray($val);
+                               }
+                               elseif ($xmlrpcTypes[$type]==3)
+                               {
+                                       $this->addStruct($val);
+                               }
+                       }
+               }
+
+               function addScalar($val, $type='string')
+               {
+                       global $xmlrpcTypes, $xmlrpcBoolean;
+
+                       if ($this->mytype==1)
+                       {
+                               echo '<B>xmlrpcval</B>: scalar can have only one value<BR>';
+                               return 0;
+                       }
+                       $typeof=$xmlrpcTypes[$type];
+                       if ($typeof!=1)
+                       {
+                               echo '<B>xmlrpcval</B>: not a scalar type (${typeof})<BR>';
+                               return 0;
+                       }
+
+                       if ($type==$xmlrpcBoolean)
+                       {
+                               if (strcasecmp($val,'true')==0 || $val==1 || ($val==true && strcasecmp($val,'false')))
+                               {
+                                       $val=1;
+                               }
+                               else
+                               {
+                                       $val=0;
+                               }
+                       }
+
+                       if ($this->mytype==2)
+                       {
+                               // we're adding to an array here
+                               $ar=$this->me['array'];
+                               $ar[]=new xmlrpcval($val, $type);
+                               $this->me['array']=$ar;
+                       }
+                       else
+                       {
+                               // a scalar, so set the value and remember we're scalar
+                               $this->me[$type]=$val;
+                               $this->mytype=$typeof;
+                       }
+                       return 1;
+               }
+
+               function addArray($vals)
+               {
+                       global $xmlrpcTypes;
+                       if ($this->mytype!=0)
+                       {
+                               echo '<B>xmlrpcval</B>: already initialized as a [' . $this->kindOf() . ']<BR>';
+                               return 0;
+                       }
+
+                       $this->mytype=$xmlrpcTypes['array'];
+                       $this->me['array']=$vals;
+                       return 1;
+               }
+
+               function addStruct($vals)
+               {
+                       global $xmlrpcTypes;
+                       if ($this->mytype!=0)
+                       {
+                               echo '<B>xmlrpcval</B>: already initialized as a [' . $this->kindOf() . ']<BR>';
+                               return 0;
+                       }
+                       $this->mytype=$xmlrpcTypes['struct'];
+                       $this->me['struct']=$vals;
+                       return 1;
+               }
+
+               function dump($ar)
+               {
+                       reset($ar);
+                       while ( list( $key, $val ) = each( $ar ) )
+                       {
+                               echo "$key => $val<br>";
+                               if ($key == 'array')
+                               {
+                                       while ( list( $key2, $val2 ) = each( $val ) )
+                                       {
+                                               echo "-- $key2 => $val2<br>";
+                                       }
+                               }
+                       }
+               }
+
+               function kindOf()
+               {
+                       switch($this->mytype)
+                       {
+                               case 3:
+                                       return 'struct';
+                                       break;
+                               case 2:
+                                       return 'array';
+                                       break;
+                               case 1:
+                                       return 'scalar';
+                                       break;
+                               default:
+                                       return 'undef';
+                       }
+               }
+
+               function serializedata($typ, $val)
+               {
+                       $rs='';
+                       global $xmlrpcTypes, $xmlrpcBase64, $xmlrpcString,
+                       $xmlrpcBoolean;
+                       switch(@$xmlrpcTypes[$typ])
+                       {
+                               case 3:
+                                       // struct
+                                       $rs.="<struct>\n";
+                                       reset($val);
+                                       while(list($key2, $val2)=each($val))
+                                       {
+                                               $rs.="<member><name>${key2}</name>\n";
+                                               $rs.=$this->serializeval($val2);
+                                               $rs.="</member>\n";
+                                       }
+                                       $rs.='</struct>';
+                                       break;
+                               case 2:
+                                       // array
+                                       $rs.="<array>\n<data>\n";
+                                       for($i=0; $i<sizeof($val); $i++)
+                                       {
+                                               $rs.=$this->serializeval($val[$i]);
+                                       }
+                                       $rs.="</data>\n</array>";
+                                       break;
+                               case 1:
+                                       switch ($typ)
+                                       {
+                                               case $xmlrpcBase64:
+                                                       $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
+                                                       break;
+                                               case $xmlrpcBoolean:
+                                                       $rs.="<${typ}>" . ($val ? '1' : '0') . "</${typ}>";
+                                                       break;
+                                               case $xmlrpcString:
+                                                       // G. Giunta 2005/2/13: do NOT use htmlentities, since
+                                                       // it will produce named html entities, which are invalid xml
+                                                       // $rs.="<${typ}>" . xmlrpc_encode_entitites($val). "</${typ}>";
+                                                       // $rs.="<${typ}>" . htmlentities($val). "</${typ}>";
+                                                       
+                                                       // N. Leenheer 2005/6/30: Use CDATA instead... 
+                                                       $rs.="<${typ}><![CDATA[" . $val. "]]></${typ}>";
+                                                       break;
+                                               default:
+                                                       $rs.="<${typ}>${val}</${typ}>";
+                                       }
+                                       break;
+                               default:
+                                       break;
+                       }
+                       return $rs;
+               }
+
+               function serialize()
+               {
+                       return $this->serializeval($this);
+               }
+
+               function serializeval($o)
+               {
+                       //global $xmlrpcTypes;
+                       $rs='';
+                       $ar=$o->me;
+                       reset($ar);
+                       list($typ, $val) = each($ar);
+                       $rs.='<value>';
+                       $rs.=$this->serializedata($typ, $val);
+                       $rs.="</value>\n";
+                       return $rs;
+               }
+
+               function structmem($m)
+               {
+                       $nv=$this->me['struct'][$m];
+                       return $nv;
+               }
+
+               function structreset()
+               {
+                       reset($this->me['struct']);
+               }
+
+               function structeach()
+               {
+                       return each($this->me['struct']);
+               }
+
+               function getval()
+               {
+                       // UNSTABLE
+                       global $xmlrpcBoolean, $xmlrpcBase64;
+                       reset($this->me);
+                       list($a,$b)=each($this->me);
+                       // contributed by I Sofer, 2001-03-24
+                       // add support for nested arrays to scalarval
+                       // i've created a new method here, so as to
+                       // preserve back compatibility
+
+                       if (is_array($b))
+                       {
+                               @reset($b);
+                               while(list($id,$cont) = @each($b))
+                               {
+                                       $b[$id] = $cont->scalarval();
+                               }
+                       }
+
+                       // add support for structures directly encoding php objects
+                       if (is_object($b))
+                       {
+                               $t = get_object_vars($b);
+                               @reset($t);
+                               while(list($id,$cont) = @each($t))
+                               {
+                                       $t[$id] = $cont->scalarval();
+                               }
+                               @reset($t);
+                               while(list($id,$cont) = @each($t))
+                               {
+                                       //eval('$b->'.$id.' = $cont;');
+                                       @$b->$id = $cont;
+                               }
+                       }
+                       // end contrib
+                       return $b;
+               }
+
+               function scalarval()
+               {
+                       //global $xmlrpcBoolean, $xmlrpcBase64;
+                       reset($this->me);
+                       list($a,$b)=each($this->me);
+                       return $b;
+               }
+
+               function scalartyp()
+               {
+                       global $xmlrpcI4, $xmlrpcInt;
+                       reset($this->me);
+                       list($a,$b)=each($this->me);
+                       if ($a==$xmlrpcI4)
+                       {
+                               $a=$xmlrpcInt;
+                       }
+                       return $a;
+               }
+
+               function arraymem($m)
+               {
+                       $nv=$this->me['array'][$m];
+                       return $nv;
+               }
+
+               function arraysize()
+               {
+                       reset($this->me);
+                       list($a,$b)=each($this->me);
+                       return sizeof($b);
+               }
+       }
+
+       // date helpers
+       function iso8601_encode($timet, $utc=0)
+       {
+               // return an ISO8601 encoded string
+               // really, timezones ought to be supported
+               // but the XML-RPC spec says:
+               //
+               // "Don't assume a timezone. It should be specified by the server in its
+               // documentation what assumptions it makes about timezones."
+               // 
+               // these routines always assume localtime unless 
+               // $utc is set to 1, in which case UTC is assumed
+               // and an adjustment for locale is made when encoding
+               if (!$utc)
+               {
+                       $t=strftime("%Y%m%dT%H:%M:%S", $timet);
+               }
+               else
+               {
+                       if (function_exists('gmstrftime'))
+                       {
+                               // gmstrftime doesn't exist in some versions
+                               // of PHP
+                               $t=gmstrftime("%Y%m%dT%H:%M:%S", $timet);
+                       }
+                       else
+                       {
+                               $t=strftime("%Y%m%dT%H:%M:%S", $timet-date('Z'));
+                       }
+               }
+               return $t;
+       }
+
+       function iso8601_decode($idate, $utc=0)
+       {
+               // return a timet in the localtime, or UTC
+               $t=0;
+               if (ereg("([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})", $idate, $regs))
+               {
+                       if ($utc)
+                       {
+                               $t=gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+                       }
+                       else
+                       {
+                               $t=mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+                       }
+               } 
+               return $t;
+       }
+
+       /****************************************************************
+       * xmlrpc_decode takes a message in PHP xmlrpc object format and *
+       * tranlates it into native PHP types.                           *
+       *                                                               *
+       * author: Dan Libby (dan@libby.com)                             *
+       ****************************************************************/
+       function php_xmlrpc_decode($xmlrpc_val)
+       {
+               $kind = $xmlrpc_val->kindOf();
+
+               if($kind == 'scalar')
+               {
+                       return $xmlrpc_val->scalarval();
+               }
+               elseif($kind == 'array')
+               {
+                       $size = $xmlrpc_val->arraysize();
+                       $arr = array();
+
+                       for($i = 0; $i < $size; $i++)
+                       {
+                               $arr[] = php_xmlrpc_decode($xmlrpc_val->arraymem($i));
+                       }
+                       return $arr;
+               }
+               elseif($kind == 'struct')
+               {
+                       $xmlrpc_val->structreset();
+                       $arr = array();
+
+                       while(list($key,$value)=$xmlrpc_val->structeach())
+                       {
+                               $arr[$key] = php_xmlrpc_decode($value);
+                       }
+                       return $arr;
+               }
+       }
+
+       if(function_exists('xmlrpc_decode'))
+       {
+               define('XMLRPC_EPI_ENABLED','1');
+       }
+       else
+       {
+               define('XMLRPC_EPI_ENABLED','0');
+               function xmlrpc_decode($xmlrpc_val)
+               {
+                       $kind = $xmlrpc_val->kindOf();
+
+                       if($kind == 'scalar')
+                       {
+                               return $xmlrpc_val->scalarval();
+                       }
+                       elseif($kind == 'array')
+                       {
+                               $size = $xmlrpc_val->arraysize();
+                               $arr = array();
+
+                               for($i = 0; $i < $size; $i++)
+                               {
+                                       $arr[]=xmlrpc_decode($xmlrpc_val->arraymem($i));
+                               }
+                               return $arr;
+                       }
+                       elseif($kind == 'struct')
+                       {
+                               $xmlrpc_val->structreset();
+                               $arr = array();
+
+                               while(list($key,$value)=$xmlrpc_val->structeach())
+                               {
+                                       $arr[$key] = xmlrpc_decode($value);
+                               }
+                               return $arr;
+                       }
+               }
+       }
+
+       /****************************************************************
+       * xmlrpc_encode takes native php types and encodes them into    *
+       * xmlrpc PHP object format.                                     *
+       * BUG: All sequential arrays are turned into structs.  I don't  *
+       * know of a good way to determine if an array is sequential     *
+       * only.                                                         *
+       *                                                               *
+       * feature creep -- could support more types via optional type   *
+       * argument.                                                     *
+       *                                                               *
+       * author: Dan Libby (dan@libby.com)                             *
+       ****************************************************************/
+       function php_xmlrpc_encode($php_val)
+       {
+               global $xmlrpcInt;
+               global $xmlrpcDouble;
+               global $xmlrpcString;
+               global $xmlrpcArray;
+               global $xmlrpcStruct;
+               global $xmlrpcBoolean;
+
+               $type = gettype($php_val);
+               $xmlrpc_val = new xmlrpcval;
+
+               switch($type)
+               {
+                       case 'array':
+                       case 'object':
+                               $arr = array();
+                               while (list($k,$v) = each($php_val))
+                               {
+                                       $arr[$k] = php_xmlrpc_encode($v);
+                               }
+                               $xmlrpc_val->addStruct($arr);
+                               break;
+                       case 'integer':
+                               $xmlrpc_val->addScalar($php_val, $xmlrpcInt);
+                               break;
+                       case 'double':
+                               $xmlrpc_val->addScalar($php_val, $xmlrpcDouble);
+                               break;
+                       case 'string':
+                               $xmlrpc_val->addScalar($php_val, $xmlrpcString);
+                               break;
+                               // <G_Giunta_2001-02-29>
+                               // Add support for encoding/decoding of booleans, since they are supported in PHP
+                       case 'boolean':
+                               $xmlrpc_val->addScalar($php_val, $xmlrpcBoolean);
+                               break;
+                               // </G_Giunta_2001-02-29>
+                       // catch "resource", "NULL", "user function", "unknown type"
+                       //case 'unknown type':
+                       default:
+                               // giancarlo pinerolo <ping@alt.it>
+                               // it has to return 
+                               // an empty object in case (which is already
+                               // at this point), not a boolean. 
+                               break;
+                       }
+                       return $xmlrpc_val;
+       }
+
+       if(XMLRPC_EPI_ENABLED == '0')
+       {
+               function xmlrpc_encode($php_val)
+               {
+                       global $xmlrpcInt;
+                       global $xmlrpcDouble;
+                       global $xmlrpcString;
+                       global $xmlrpcArray;
+                       global $xmlrpcStruct;
+                       global $xmlrpcBoolean;
+
+                       $type = gettype($php_val);
+                       $xmlrpc_val = new xmlrpcval;
+
+                       switch($type)
+                       {
+                               case 'array':
+                               case 'object':
+                                       $arr = array();
+                                       while (list($k,$v) = each($php_val))
+                                       {
+                                               $arr[$k] = xmlrpc_encode($v);
+                                       }
+                                       $xmlrpc_val->addStruct($arr);
+                                       break;
+                               case 'integer':
+                                       $xmlrpc_val->addScalar($php_val, $xmlrpcInt);
+                                       break;
+                               case 'double':
+                                       $xmlrpc_val->addScalar($php_val, $xmlrpcDouble);
+                                       break;
+                               case 'string':
+                                       $xmlrpc_val->addScalar($php_val, $xmlrpcString);
+                                       break;
+                                       // <G_Giunta_2001-02-29>
+                                       // Add support for encoding/decoding of booleans, since they are supported in PHP
+                               case 'boolean':
+                                       $xmlrpc_val->addScalar($php_val, $xmlrpcBoolean);
+                                       break;
+                                       // </G_Giunta_2001-02-29>
+                               //case 'unknown type':
+                               default:
+                                       // giancarlo pinerolo <ping@alt.it>
+                                       // it has to return 
+                                       // an empty object in case (which is already
+                                       // at this point), not a boolean. 
+                                       break;
+                       }
+                       return $xmlrpc_val;
+               }
+       }
+?>
index ae4986a..620dcef 100755 (executable)
-<?php\r
-// by Edd Dumbill (C) 1999-2002\r
-// <edd@usefulinc.com>\r
-// $Id: xmlrpcs.inc.php,v 1.6 2005-08-13 07:24:44 kimitake Exp $\r
-// $NucleusJP$\r
-\r
-// Copyright (c) 1999,2000,2002 Edd Dumbill.\r
-// All rights reserved.\r
-//\r
-// Redistribution and use in source and binary forms, with or without\r
-// modification, are permitted provided that the following conditions\r
-// are met:\r
-//\r
-//    * Redistributions of source code must retain the above copyright\r
-//      notice, this list of conditions and the following disclaimer.\r
-//\r
-//    * Redistributions in binary form must reproduce the above\r
-//      copyright notice, this list of conditions and the following\r
-//      disclaimer in the documentation and/or other materials provided\r
-//      with the distribution.\r
-//\r
-//    * Neither the name of the "XML-RPC for PHP" nor the names of its\r
-//      contributors may be used to endorse or promote products derived\r
-//      from this software without specific prior written permission.\r
-//\r
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r
-// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
-// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
-// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
-// OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
-       // XML RPC Server class\r
-       // requires: xmlrpc.inc\r
-\r
-       // listMethods: either a string, or nothing\r
-       $_xmlrpcs_listMethods_sig=array(array($xmlrpcArray, $xmlrpcString), array($xmlrpcArray));\r
-       $_xmlrpcs_listMethods_doc='This method lists all the methods that the XML-RPC server knows how to dispatch';\r
-       function _xmlrpcs_listMethods($server, $m)\r
-       {\r
-               global $xmlrpcerr, $xmlrpcstr, $_xmlrpcs_dmap;\r
-               $v=new xmlrpcval();\r
-               $dmap=$server->dmap;\r
-               $outAr=array();\r
-               for(reset($dmap); list($key, $val)=each($dmap); )\r
-               {\r
-                       $outAr[]=new xmlrpcval($key, 'string');\r
-               }\r
-               $dmap=$_xmlrpcs_dmap;\r
-               for(reset($dmap); list($key, $val)=each($dmap); )\r
-               {\r
-                       $outAr[]=new xmlrpcval($key, 'string');\r
-               }\r
-               $v->addArray($outAr);\r
-               return new xmlrpcresp($v);\r
-       }\r
-\r
-       $_xmlrpcs_methodSignature_sig=array(array($xmlrpcArray, $xmlrpcString));\r
-       $_xmlrpcs_methodSignature_doc='Returns an array of known signatures (an array of arrays) for the method name passed. If no signatures are known, returns a none-array (test for type != array to detect missing signature)';\r
-       function _xmlrpcs_methodSignature($server, $m)\r
-       {\r
-               global $xmlrpcerr, $xmlrpcstr, $_xmlrpcs_dmap;\r
-\r
-               $methName=$m->getParam(0);\r
-               $methName=$methName->scalarval();\r
-               if (ereg("^system\.", $methName))\r
-               {\r
-                       $dmap=$_xmlrpcs_dmap; $sysCall=1;\r
-               }\r
-               else\r
-               {\r
-                       $dmap=$server->dmap; $sysCall=0;\r
-               }\r
-               //      print "<!-- ${methName} -->\n";\r
-               if (isset($dmap[$methName]))\r
-               {\r
-                       if ($dmap[$methName]['signature'])\r
-                       {\r
-                               $sigs=array();\r
-                               $thesigs=$dmap[$methName]['signature'];\r
-                               for($i=0; $i<sizeof($thesigs); $i++)\r
-                               {\r
-                                       $cursig=array();\r
-                                       $inSig=$thesigs[$i];\r
-                                       for($j=0; $j<sizeof($inSig); $j++)\r
-                                       {\r
-                                               $cursig[]=new xmlrpcval($inSig[$j], 'string');\r
-                                       }\r
-                                       $sigs[]=new xmlrpcval($cursig, 'array');\r
-                               }\r
-                               $r=new xmlrpcresp(new xmlrpcval($sigs, 'array'));\r
-                       }\r
-                       else\r
-                       {\r
-                               $r=new xmlrpcresp(new xmlrpcval('undef', 'string'));\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       $r=new xmlrpcresp(0,$xmlrpcerr['introspect_unknown'], $xmlrpcstr['introspect_unknown']);\r
-               }\r
-               return $r;\r
-       }\r
-\r
-       $_xmlrpcs_methodHelp_sig=array(array($xmlrpcString, $xmlrpcString));\r
-       $_xmlrpcs_methodHelp_doc='Returns help text if defined for the method passed, otherwise returns an empty string';\r
-       function _xmlrpcs_methodHelp($server, $m)\r
-       {\r
-               global $xmlrpcerr, $xmlrpcstr, $_xmlrpcs_dmap;\r
-\r
-               $methName=$m->getParam(0);\r
-               $methName=$methName->scalarval();\r
-               if (ereg("^system\.", $methName))\r
-               {\r
-                       $dmap=$_xmlrpcs_dmap; $sysCall=1;\r
-               }\r
-               else\r
-               {\r
-                       $dmap=$server->dmap; $sysCall=0;\r
-               }\r
-               // print "<!-- ${methName} -->\n";\r
-               if (isset($dmap[$methName]))\r
-               {\r
-                       if ($dmap[$methName]['docstring'])\r
-                       {\r
-                               $r=new xmlrpcresp(new xmlrpcval($dmap[$methName]['docstring']), 'string');\r
-                       }\r
-                       else\r
-                       {\r
-                               $r=new xmlrpcresp(new xmlrpcval('', 'string'));\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       $r=new xmlrpcresp(0, $xmlrpcerr['introspect_unknown'], $xmlrpcstr['introspect_unknown']);\r
-               }\r
-               return $r;\r
-       }\r
-\r
-       $_xmlrpcs_multicall_sig = array(array($xmlrpcArray, $xmlrpcArray));\r
-       $_xmlrpcs_multicall_doc = 'Boxcar multiple RPC calls in one request. See http://www.xmlrpc.com/discuss/msgReader$1208 for details';\r
-\r
-       function _xmlrpcs_multicall_error($err)\r
-       {\r
-               if (is_string($err))\r
-               {\r
-                       global $xmlrpcerr, $xmlrpcstr;\r
-                       $str  = $xmlrpcstr["multicall_${err}"];\r
-                       $code = $xmlrpcerr["multicall_${err}"];\r
-               }\r
-               else\r
-               {\r
-                       $code = $err->faultCode();\r
-                       $str = $err->faultString();\r
-               }\r
-               $struct['faultCode'] = new xmlrpcval($code, 'int');\r
-               $struct['faultString'] = new xmlrpcval($str, 'string');\r
-               return new xmlrpcval($struct, 'struct');\r
-       }\r
-\r
-       function _xmlrpcs_multicall_do_call($server, $call)\r
-       {\r
-               if ($call->kindOf() != 'struct')\r
-               {\r
-                       return _xmlrpcs_multicall_error('notstruct');\r
-               }\r
-               $methName = $call->structmem('methodName');\r
-               if (!$methName)\r
-               {\r
-                       return _xmlrpcs_multicall_error('nomethod');\r
-               }\r
-               if ($methName->kindOf() != 'scalar' || $methName->scalartyp() != 'string')\r
-               {\r
-                       return _xmlrpcs_multicall_error('notstring');\r
-               }\r
-               if ($methName->scalarval() == 'system.multicall')\r
-               {\r
-                       return _xmlrpcs_multicall_error('recursion');\r
-               }\r
-\r
-               $params = $call->structmem('params');\r
-               if (!$params)\r
-               {\r
-                       return _xmlrpcs_multicall_error('noparams');\r
-               }\r
-               if ($params->kindOf() != 'array')\r
-               {\r
-                       return _xmlrpcs_multicall_error('notarray');\r
-               }\r
-               $numParams = $params->arraysize();\r
-\r
-               $msg = new xmlrpcmsg($methName->scalarval());\r
-               for ($i = 0; $i < $numParams; $i++)\r
-               {\r
-                       $msg->addParam($params->arraymem($i));\r
-               }\r
-\r
-               $result = $server->execute($msg);\r
-\r
-               if ($result->faultCode() != 0)\r
-               {\r
-                       return _xmlrpcs_multicall_error($result);    // Method returned fault.\r
-               }\r
-\r
-               return new xmlrpcval(array($result->value()), 'array');\r
-       }\r
-\r
-       function _xmlrpcs_multicall($server, $m)\r
-       {\r
-               $calls = $m->getParam(0);\r
-               $numCalls = $calls->arraysize();\r
-               $result = array();\r
-\r
-               for ($i = 0; $i < $numCalls; $i++)\r
-               {\r
-                       $call = $calls->arraymem($i);\r
-                       $result[$i] = _xmlrpcs_multicall_do_call($server, $call);\r
-               }\r
-\r
-               return new xmlrpcresp(new xmlrpcval($result, 'array'));\r
-       }\r
-\r
-       $_xmlrpcs_dmap=array(\r
-               'system.listMethods' => array(\r
-                       'function' => '_xmlrpcs_listMethods',\r
-                       'signature' => $_xmlrpcs_listMethods_sig,\r
-                       'docstring' => $_xmlrpcs_listMethods_doc),\r
-               'system.methodHelp' => array(\r
-                       'function' => '_xmlrpcs_methodHelp',\r
-                       'signature' => $_xmlrpcs_methodHelp_sig,\r
-                       'docstring' => $_xmlrpcs_methodHelp_doc),\r
-               'system.methodSignature' => array(\r
-                       'function' => '_xmlrpcs_methodSignature',\r
-                       'signature' => $_xmlrpcs_methodSignature_sig,\r
-                       'docstring' => $_xmlrpcs_methodSignature_doc),\r
-               'system.multicall' => array(\r
-                       'function' => '_xmlrpcs_multicall',\r
-                       'signature' => $_xmlrpcs_multicall_sig,\r
-                       'docstring' => $_xmlrpcs_multicall_doc\r
-               )\r
-       );\r
-\r
-       $_xmlrpc_debuginfo='';\r
-       function xmlrpc_debugmsg($m)\r
-       {\r
-               global $_xmlrpc_debuginfo;\r
-               $_xmlrpc_debuginfo=$_xmlrpc_debuginfo . $m . "\n";\r
-       }\r
-\r
-       class xmlrpc_server\r
-       {\r
-               var $dmap=array();\r
-\r
-               function xmlrpc_server($dispMap='', $serviceNow=1)\r
-               {\r
-                       global $HTTP_RAW_POST_DATA;\r
-                       // dispMap is a dispatch array of methods\r
-                       // mapped to function names and signatures\r
-                       // if a method\r
-                       // doesn't appear in the map then an unknown\r
-                       // method error is generated\r
-                       /* milosch - changed to make passing dispMap optional.\r
-                        * instead, you can use the class add_to_map() function\r
-                        * to add functions manually (borrowed from SOAPX4)\r
-                        */\r
-                       if($dispMap)\r
-                       {\r
-                               $this->dmap = $dispMap;\r
-                               if($serviceNow)\r
-                               {\r
-                                       $this->service();\r
-                               }\r
-                       }\r
-               }\r
-\r
-               function serializeDebug()\r
-               {\r
-                       global $_xmlrpc_debuginfo;\r
-                       if ($_xmlrpc_debuginfo!='')\r
-                       {\r
-                               return "<!-- DEBUG INFO:\n\n" . xmlrpc_encode_entitites($_xmlrpc_debuginfo) . "\n-->\n";\r
-                       }\r
-                       else\r
-                       {\r
-                               return '';\r
-                       }\r
-               }\r
-\r
-               function service()\r
-               {\r
-                       //global $xmlrpc_defencoding;\r
-\r
-                       $r=$this->parseRequest();\r
-                       //$payload='<?xml version="1.0" encoding="' . $xmlrpc_defencoding . '"?' . '>' . "\n"\r
-                       $payload='<?xml version="1.0" ?' . '>' . "\n"\r
-                               . $this->serializeDebug()\r
-                               . $r->serialize();\r
-                       header('Content-Type: text/xml');\r
-                       header('Content-Length: ' . (int)strlen($payload));\r
-                       print $payload;\r
-               }\r
-\r
-               /*\r
-               add a method to the dispatch map\r
-               */\r
-               function add_to_map($methodname,$function,$sig,$doc)\r
-               {\r
-                       $this->dmap[$methodname] = array(\r
-                               'function'  => $function,\r
-                               'signature' => $sig,\r
-                               'docstring' => $doc\r
-                       );\r
-               }\r
-\r
-               function verifySignature($in, $sig)\r
-               {\r
-                       for($i=0; $i<sizeof($sig); $i++)\r
-                       {\r
-                               // check each possible signature in turn\r
-                               $cursig=$sig[$i];\r
-                               if (sizeof($cursig)==$in->getNumParams()+1)\r
-                               {\r
-                                       $itsOK=1;\r
-                                       for($n=0; $n<$in->getNumParams(); $n++)\r
-                                       {\r
-                                               $p=$in->getParam($n);\r
-                                               // print "<!-- $p -->\n";\r
-                                               if ($p->kindOf() == 'scalar')\r
-                                               {\r
-                                                       $pt=$p->scalartyp();\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       $pt=$p->kindOf();\r
-                                               }\r
-                                               // $n+1 as first type of sig is return type\r
-                                               if ($pt != $cursig[$n+1])\r
-                                               {\r
-                                                       $itsOK=0;\r
-                                                       $pno=$n+1; $wanted=$cursig[$n+1]; $got=$pt;\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                                       if ($itsOK)\r
-                                       {\r
-                                               return array(1,'');\r
-                                       }\r
-                               }\r
-                       }\r
-                       if (isset($wanted))\r
-                               return array(0, "Wanted ${wanted}, got ${got} at param ${pno})");\r
-                       else\r
-                               return array(0, "No method signature matches number of parameters");\r
-               }\r
-\r
-               function parseRequest($data='')\r
-               {\r
-                       global $_xh,$HTTP_RAW_POST_DATA;\r
-                       global $xmlrpcerr, $xmlrpcstr, $xmlrpcerrxml, $xmlrpc_defencoding,\r
-                       $_xmlrpcs_dmap, $xmlrpc_internalencoding;\r
-\r
-                       if ($data=='')\r
-                       {\r
-                               $data=$HTTP_RAW_POST_DATA;\r
-                       }\r
-            // G. Giunta 2005/02/13: we do NOT expect to receive html entities\r
-            // so we do not try to convert them into xml character entities\r
-                       //$data = xmlrpc_html_entity_xlate($data);\r
-                       $parser = xml_parser_create($xmlrpc_defencoding);\r
-\r
-                       $_xh[$parser]=array();\r
-                       $_xh[$parser]['st']='';\r
-                       $_xh[$parser]['cm']=0;\r
-                       $_xh[$parser]['isf']=0;\r
-                       $_xh[$parser]['params']=array();\r
-                       $_xh[$parser]['method']='';\r
-\r
-                       // decompose incoming XML into request structure\r
-\r
-                       xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);\r
-            // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell\r
-            // the xml parser to give us back data in the expected charset\r
-            xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $xmlrpc_internalencoding);\r
-\r
-                       xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');\r
-                       xml_set_character_data_handler($parser, 'xmlrpc_cd');\r
-                       xml_set_default_handler($parser, 'xmlrpc_dh');\r
-                       if (!xml_parse($parser, $data, 1))\r
-                       {\r
-                               // return XML error as a faultCode\r
-                               $r=new xmlrpcresp(0,\r
-                               $xmlrpcerrxml+xml_get_error_code($parser),\r
-                               sprintf('XML error: %s at line %d',\r
-                                       xml_error_string(xml_get_error_code($parser)),\r
-                                       xml_get_current_line_number($parser)));\r
-                               xml_parser_free($parser);\r
-                       }\r
-                       else\r
-                       {\r
-                               xml_parser_free($parser);\r
-                               $m=new xmlrpcmsg($_xh[$parser]['method']);\r
-                               // now add parameters in\r
-                               $plist='';\r
-                               $allOK = 1;\r
-                               for($i=0; $i<sizeof($_xh[$parser]['params']); $i++)\r
-                               {\r
-                                       //print "<!-- " . $_xh[$parser]['params'][$i]. "-->\n";\r
-                                       $plist.="$i - " .  $_xh[$parser]['params'][$i]. ";\n";\r
-                                       $allOK = 0;\r
-                                       @eval('$m->addParam(' . $_xh[$parser]['params'][$i]. '); $allOK=1;');\r
-                                       if (!$allOK)\r
-                                       {\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               // uncomment this to really see what the server's getting!\r
-                               // xmlrpc_debugmsg($plist);\r
-                               if (!$allOK)\r
-                               {\r
-                                       $r = new xmlrpcresp(0,\r
-                                               $xmlrpcerr['incorrect_params'],\r
-                                               $xmlrpcstr['incorrect_params'] . ": xml error in param " . $i);\r
-                               }\r
-                               else\r
-                               {\r
-                                       $r = $this->execute($m);\r
-                               }\r
-                       }\r
-                       return $r;\r
-               }\r
-\r
-               function execute ($m)\r
-               {\r
-                       global $xmlrpcerr, $xmlrpcstr, $_xmlrpcs_dmap;\r
-                       // now to deal with the method\r
-                       $methName = $m->method();\r
-                       $sysCall = ereg("^system\.", $methName);\r
-                       $dmap = $sysCall ? $_xmlrpcs_dmap : $this->dmap;\r
-\r
-                       if (!isset($dmap[$methName]['function']))\r
-                       {\r
-                               // No such method\r
-                               return new xmlrpcresp(0,\r
-                                       $xmlrpcerr['unknown_method'],\r
-                                       $xmlrpcstr['unknown_method']);\r
-                       }\r
-\r
-                       // Check signature.\r
-                       if (isset($dmap[$methName]['signature']))\r
-                       {\r
-                               $sig = $dmap[$methName]['signature'];\r
-                               list($ok, $errstr) = $this->verifySignature($m, $sig);\r
-                               if(!$ok)\r
-                               {\r
-                                       // Didn't match.\r
-                                       return new xmlrpcresp(\r
-                                               0,\r
-                                               $xmlrpcerr['incorrect_params'],\r
-                                               $xmlrpcstr['incorrect_params'] . ": ${errstr}"\r
-                                       );\r
-                               }\r
-                       }\r
-\r
-                       $func = $dmap[$methName]['function'];\r
-\r
-                       if ($sysCall)\r
-                       {\r
-                               return call_user_func($func, $this, $m);\r
-                       }\r
-                       else\r
-                       {\r
-                               return call_user_func($func, $m);\r
-                       }\r
-               }\r
-\r
-               function echoInput()\r
-               {\r
-                       global $HTTP_RAW_POST_DATA;\r
-\r
-                       // a debugging routine: just echos back the input\r
-                       // packet as a string value\r
-\r
-                       $r=new xmlrpcresp;\r
-                       $r->xv=new xmlrpcval( "'Aha said I: '" . $HTTP_RAW_POST_DATA, 'string');\r
-                       print $r->serialize();\r
-               }\r
-       }\r
-?>\r
+<?php
+// by Edd Dumbill (C) 1999-2002
+// <edd@usefulinc.com>
+// $Id: xmlrpcs.inc.php,v 1.7 2006-07-12 07:11:47 kimitake Exp $
+// $NucleusJP: xmlrpcs.inc.php,v 1.6 2005/08/13 07:24:44 kimitake Exp $
+
+// Copyright (c) 1999,2000,2002 Edd Dumbill.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    * Redistributions of source code must retain the above copyright
+//      notice, this list of conditions and the following disclaimer.
+//
+//    * Redistributions in binary form must reproduce the above
+//      copyright notice, this list of conditions and the following
+//      disclaimer in the documentation and/or other materials provided
+//      with the distribution.
+//
+//    * Neither the name of the "XML-RPC for PHP" nor the names of its
+//      contributors may be used to endorse or promote products derived
+//      from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+// OF THE POSSIBILITY OF SUCH DAMAGE.
+
+       // XML RPC Server class
+       // requires: xmlrpc.inc
+
+       // listMethods: either a string, or nothing
+       $_xmlrpcs_listMethods_sig=array(array($xmlrpcArray, $xmlrpcString), array($xmlrpcArray));
+       $_xmlrpcs_listMethods_doc='This method lists all the methods that the XML-RPC server knows how to dispatch';
+       function _xmlrpcs_listMethods($server, $m)
+       {
+               global $xmlrpcerr, $xmlrpcstr, $_xmlrpcs_dmap;
+               $v=new xmlrpcval();
+               $dmap=$server->dmap;
+               $outAr=array();
+               for(reset($dmap); list($key, $val)=each($dmap); )
+               {
+                       $outAr[]=new xmlrpcval($key, 'string');
+               }
+               $dmap=$_xmlrpcs_dmap;
+               for(reset($dmap); list($key, $val)=each($dmap); )
+               {
+                       $outAr[]=new xmlrpcval($key, 'string');
+               }
+               $v->addArray($outAr);
+               return new xmlrpcresp($v);
+       }
+
+       $_xmlrpcs_methodSignature_sig=array(array($xmlrpcArray, $xmlrpcString));
+       $_xmlrpcs_methodSignature_doc='Returns an array of known signatures (an array of arrays) for the method name passed. If no signatures are known, returns a none-array (test for type != array to detect missing signature)';
+       function _xmlrpcs_methodSignature($server, $m)
+       {
+               global $xmlrpcerr, $xmlrpcstr, $_xmlrpcs_dmap;
+
+               $methName=$m->getParam(0);
+               $methName=$methName->scalarval();
+               if (ereg("^system\.", $methName))
+               {
+                       $dmap=$_xmlrpcs_dmap; $sysCall=1;
+               }
+               else
+               {
+                       $dmap=$server->dmap; $sysCall=0;
+               }
+               //      print "<!-- ${methName} -->\n";
+               if (isset($dmap[$methName]))
+               {
+                       if ($dmap[$methName]['signature'])
+                       {
+                               $sigs=array();
+                               $thesigs=$dmap[$methName]['signature'];
+                               for($i=0; $i<sizeof($thesigs); $i++)
+                               {
+                                       $cursig=array();
+                                       $inSig=$thesigs[$i];
+                                       for($j=0; $j<sizeof($inSig); $j++)
+                                       {
+                                               $cursig[]=new xmlrpcval($inSig[$j], 'string');
+                                       }
+                                       $sigs[]=new xmlrpcval($cursig, 'array');
+                               }
+                               $r=new xmlrpcresp(new xmlrpcval($sigs, 'array'));
+                       }
+                       else
+                       {
+                               $r=new xmlrpcresp(new xmlrpcval('undef', 'string'));
+                       }
+               }
+               else
+               {
+                       $r=new xmlrpcresp(0,$xmlrpcerr['introspect_unknown'], $xmlrpcstr['introspect_unknown']);
+               }
+               return $r;
+       }
+
+       $_xmlrpcs_methodHelp_sig=array(array($xmlrpcString, $xmlrpcString));
+       $_xmlrpcs_methodHelp_doc='Returns help text if defined for the method passed, otherwise returns an empty string';
+       function _xmlrpcs_methodHelp($server, $m)
+       {
+               global $xmlrpcerr, $xmlrpcstr, $_xmlrpcs_dmap;
+
+               $methName=$m->getParam(0);
+               $methName=$methName->scalarval();
+               if (ereg("^system\.", $methName))
+               {
+                       $dmap=$_xmlrpcs_dmap; $sysCall=1;
+               }
+               else
+               {
+                       $dmap=$server->dmap; $sysCall=0;
+               }
+               // print "<!-- ${methName} -->\n";
+               if (isset($dmap[$methName]))
+               {
+                       if ($dmap[$methName]['docstring'])
+                       {
+                               $r=new xmlrpcresp(new xmlrpcval($dmap[$methName]['docstring']), 'string');
+                       }
+                       else
+                       {
+                               $r=new xmlrpcresp(new xmlrpcval('', 'string'));
+                       }
+               }
+               else
+               {
+                       $r=new xmlrpcresp(0, $xmlrpcerr['introspect_unknown'], $xmlrpcstr['introspect_unknown']);
+               }
+               return $r;
+       }
+
+       $_xmlrpcs_multicall_sig = array(array($xmlrpcArray, $xmlrpcArray));
+       $_xmlrpcs_multicall_doc = 'Boxcar multiple RPC calls in one request. See http://www.xmlrpc.com/discuss/msgReader$1208 for details';
+
+       function _xmlrpcs_multicall_error($err)
+       {
+               if (is_string($err))
+               {
+                       global $xmlrpcerr, $xmlrpcstr;
+                       $str  = $xmlrpcstr["multicall_${err}"];
+                       $code = $xmlrpcerr["multicall_${err}"];
+               }
+               else
+               {
+                       $code = $err->faultCode();
+                       $str = $err->faultString();
+               }
+               $struct['faultCode'] = new xmlrpcval($code, 'int');
+               $struct['faultString'] = new xmlrpcval($str, 'string');
+               return new xmlrpcval($struct, 'struct');
+       }
+
+       function _xmlrpcs_multicall_do_call($server, $call)
+       {
+               if ($call->kindOf() != 'struct')
+               {
+                       return _xmlrpcs_multicall_error('notstruct');
+               }
+               $methName = $call->structmem('methodName');
+               if (!$methName)
+               {
+                       return _xmlrpcs_multicall_error('nomethod');
+               }
+               if ($methName->kindOf() != 'scalar' || $methName->scalartyp() != 'string')
+               {
+                       return _xmlrpcs_multicall_error('notstring');
+               }
+               if ($methName->scalarval() == 'system.multicall')
+               {
+                       return _xmlrpcs_multicall_error('recursion');
+               }
+
+               $params = $call->structmem('params');
+               if (!$params)
+               {
+                       return _xmlrpcs_multicall_error('noparams');
+               }
+               if ($params->kindOf() != 'array')
+               {
+                       return _xmlrpcs_multicall_error('notarray');
+               }
+               $numParams = $params->arraysize();
+
+               $msg = new xmlrpcmsg($methName->scalarval());
+               for ($i = 0; $i < $numParams; $i++)
+               {
+                       $msg->addParam($params->arraymem($i));
+               }
+
+               $result = $server->execute($msg);
+
+               if ($result->faultCode() != 0)
+               {
+                       return _xmlrpcs_multicall_error($result);    // Method returned fault.
+               }
+
+               return new xmlrpcval(array($result->value()), 'array');
+       }
+
+       function _xmlrpcs_multicall($server, $m)
+       {
+               $calls = $m->getParam(0);
+               $numCalls = $calls->arraysize();
+               $result = array();
+
+               for ($i = 0; $i < $numCalls; $i++)
+               {
+                       $call = $calls->arraymem($i);
+                       $result[$i] = _xmlrpcs_multicall_do_call($server, $call);
+               }
+
+               return new xmlrpcresp(new xmlrpcval($result, 'array'));
+       }
+
+       $_xmlrpcs_dmap=array(
+               'system.listMethods' => array(
+                       'function' => '_xmlrpcs_listMethods',
+                       'signature' => $_xmlrpcs_listMethods_sig,
+                       'docstring' => $_xmlrpcs_listMethods_doc),
+               'system.methodHelp' => array(
+                       'function' => '_xmlrpcs_methodHelp',
+                       'signature' => $_xmlrpcs_methodHelp_sig,
+                       'docstring' => $_xmlrpcs_methodHelp_doc),
+               'system.methodSignature' => array(
+                       'function' => '_xmlrpcs_methodSignature',
+                       'signature' => $_xmlrpcs_methodSignature_sig,
+                       'docstring' => $_xmlrpcs_methodSignature_doc),
+               'system.multicall' => array(
+                       'function' => '_xmlrpcs_multicall',
+                       'signature' => $_xmlrpcs_multicall_sig,
+                       'docstring' => $_xmlrpcs_multicall_doc
+               )
+       );
+
+       $_xmlrpc_debuginfo='';
+       function xmlrpc_debugmsg($m)
+       {
+               global $_xmlrpc_debuginfo;
+               $_xmlrpc_debuginfo=$_xmlrpc_debuginfo . $m . "\n";
+       }
+
+       class xmlrpc_server
+       {
+               var $dmap=array();
+
+               function xmlrpc_server($dispMap='', $serviceNow=1)
+               {
+                       global $HTTP_RAW_POST_DATA;
+                       // dispMap is a dispatch array of methods
+                       // mapped to function names and signatures
+                       // if a method
+                       // doesn't appear in the map then an unknown
+                       // method error is generated
+                       /* milosch - changed to make passing dispMap optional.
+                        * instead, you can use the class add_to_map() function
+                        * to add functions manually (borrowed from SOAPX4)
+                        */
+                       if($dispMap)
+                       {
+                               $this->dmap = $dispMap;
+                               if($serviceNow)
+                               {
+                                       $this->service();
+                               }
+                       }
+               }
+
+               function serializeDebug()
+               {
+                       global $_xmlrpc_debuginfo;
+                       if ($_xmlrpc_debuginfo!='')
+                       {
+                               return "<!-- DEBUG INFO:\n\n" . xmlrpc_encode_entitites($_xmlrpc_debuginfo) . "\n-->\n";
+                       }
+                       else
+                       {
+                               return '';
+                       }
+               }
+
+               function service()
+               {
+                       //global $xmlrpc_defencoding;
+
+                       $r=$this->parseRequest();
+                       //$payload='<?xml version="1.0" encoding="' . $xmlrpc_defencoding . '"?' . '>' . "\n"
+                       $payload='<?xml version="1.0" ?' . '>' . "\n"
+                               . $this->serializeDebug()
+                               . $r->serialize();
+                       header('Content-Type: text/xml');
+                       header('Content-Length: ' . (int)strlen($payload));
+                       print $payload;
+               }
+
+               /*
+               add a method to the dispatch map
+               */
+               function add_to_map($methodname,$function,$sig,$doc)
+               {
+                       $this->dmap[$methodname] = array(
+                               'function'  => $function,
+                               'signature' => $sig,
+                               'docstring' => $doc
+                       );
+               }
+
+               function verifySignature($in, $sig)
+               {
+                       for($i=0; $i<sizeof($sig); $i++)
+                       {
+                               // check each possible signature in turn
+                               $cursig=$sig[$i];
+                               if (sizeof($cursig)==$in->getNumParams()+1)
+                               {
+                                       $itsOK=1;
+                                       for($n=0; $n<$in->getNumParams(); $n++)
+                                       {
+                                               $p=$in->getParam($n);
+                                               // print "<!-- $p -->\n";
+                                               if ($p->kindOf() == 'scalar')
+                                               {
+                                                       $pt=$p->scalartyp();
+                                               }
+                                               else
+                                               {
+                                                       $pt=$p->kindOf();
+                                               }
+                                               // $n+1 as first type of sig is return type
+                                               if ($pt != $cursig[$n+1])
+                                               {
+                                                       $itsOK=0;
+                                                       $pno=$n+1; $wanted=$cursig[$n+1]; $got=$pt;
+                                                       break;
+                                               }
+                                       }
+                                       if ($itsOK)
+                                       {
+                                               return array(1,'');
+                                       }
+                               }
+                       }
+                       if (isset($wanted))
+                               return array(0, "Wanted ${wanted}, got ${got} at param ${pno})");
+                       else
+                               return array(0, "No method signature matches number of parameters");
+               }
+
+               function parseRequest($data='')
+               {
+                       global $_xh,$HTTP_RAW_POST_DATA;
+                       global $xmlrpcerr, $xmlrpcstr, $xmlrpcerrxml, $xmlrpc_defencoding,
+                       $_xmlrpcs_dmap, $xmlrpc_internalencoding;
+
+                       if ($data=='')
+                       {
+                               $data=$HTTP_RAW_POST_DATA;
+                       }
+            // G. Giunta 2005/02/13: we do NOT expect to receive html entities
+            // so we do not try to convert them into xml character entities
+                       //$data = xmlrpc_html_entity_xlate($data);
+                       $parser = xml_parser_create($xmlrpc_defencoding);
+
+                       $_xh[$parser]=array();
+                       //$_xh[$parser]['st']='';
+                       //$_xh[$parser]['cm']=0;
+                       $_xh[$parser]['isf']=0;
+                       $_xh[$parser]['isf_reason']='';
+                       $_xh[$parser]['params']=array();
+                       $_xh[$parser]['stack']=array();
+                       $_xh[$parser]['sp'] = 0;
+                       $_xh[$parser]['valuestack'] = array();
+                       $_xh[$parser]['vsp'] = 0;
+                       $_xh[$parser]['method']='';
+
+                       // decompose incoming XML into request structure
+
+                       xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
+            // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
+            // the xml parser to give us back data in the expected charset
+            @xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $xmlrpc_internalencoding);
+
+                       xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
+                       xml_set_character_data_handler($parser, 'xmlrpc_cd');
+                       xml_set_default_handler($parser, 'xmlrpc_dh');
+                       if (!xml_parse($parser, $data, 1))
+                       {
+                               // return XML error as a faultCode
+                               $r=new xmlrpcresp(0,
+                               $xmlrpcerrxml+xml_get_error_code($parser),
+                               sprintf('XML error: %s at line %d',
+                                       xml_error_string(xml_get_error_code($parser)),
+                                       xml_get_current_line_number($parser)));
+                               xml_parser_free($parser);
+                       }
+                       else
+                       if ($_xh[$parser]['isf'])
+                       {
+                               xml_parser_free($parser);
+                               $r=new xmlrpcresp(0,
+                                       $xmlrpcerr['invalid_request'],
+                                       $xmlrpcstr['invalid_request'] . ' ' . $_xh[$parser]['isf_reason']);
+                       }
+                       else
+                       {
+                               xml_parser_free($parser);
+
+                               $m=new xmlrpcmsg($_xh[$parser]['method']);
+                               // now add parameters in
+                               $plist='';
+                               //$allOK = 1;
+                               for($i=0; $i<sizeof($_xh[$parser]['params']); $i++)
+                               {
+                                       //print "<!-- " . $_xh[$parser]['params'][$i]. "-->\n";
+                                       $plist.="$i - " .  $_xh[$parser]['params'][$i]. ";\n";
+                                       //$allOK = 0;
+                                       //@eval('$m->addParam(' . $_xh[$parser]['params'][$i]. '); $allOK=1;');
+                                       @$m->addParam($_xh[$parser]['params'][$i]);
+                                       //if (!$allOK)
+                                       //{
+                                       //      break;
+                                       //}
+                               }
+                               // uncomment this to really see what the server's getting!
+                               // xmlrpc_debugmsg($plist);
+                               //if (!$allOK)
+                               //{
+                               //      $r = new xmlrpcresp(0,
+                               //              $xmlrpcerr['incorrect_params'],
+                               //              $xmlrpcstr['incorrect_params'] . ": xml error in param " . $i);
+                               //}
+                               //else
+                               //{
+                                       $r = $this->execute($m);
+                               //}
+                       }
+                       return $r;
+               }
+
+               function execute ($m)
+               {
+                       global $xmlrpcerr, $xmlrpcstr, $_xmlrpcs_dmap;
+                       // now to deal with the method
+                       $methName = $m->method();
+                       $sysCall = ereg("^system\.", $methName);
+                       $dmap = $sysCall ? $_xmlrpcs_dmap : $this->dmap;
+
+                       if (!isset($dmap[$methName]['function']))
+                       {
+                               // No such method
+                               return new xmlrpcresp(0,
+                                       $xmlrpcerr['unknown_method'],
+                                       $xmlrpcstr['unknown_method']);
+                       }
+
+                       // Check signature.
+                       if (isset($dmap[$methName]['signature']))
+                       {
+                               $sig = $dmap[$methName]['signature'];
+                               list($ok, $errstr) = $this->verifySignature($m, $sig);
+                               if(!$ok)
+                               {
+                                       // Didn't match.
+                                       return new xmlrpcresp(
+                                               0,
+                                               $xmlrpcerr['incorrect_params'],
+                                               $xmlrpcstr['incorrect_params'] . ": ${errstr}"
+                                       );
+                               }
+                       }
+
+                       $func = $dmap[$methName]['function'];
+
+                       if ($sysCall)
+                       {
+                               return call_user_func($func, $this, $m);
+                       }
+                       else
+                       {
+                               return call_user_func($func, $m);
+                       }
+               }
+
+               function echoInput()
+               {
+                       global $HTTP_RAW_POST_DATA;
+
+                       // a debugging routine: just echos back the input
+                       // packet as a string value
+
+                       $r=new xmlrpcresp;
+                       $r->xv=new xmlrpcval( "'Aha said I: '" . $HTTP_RAW_POST_DATA, 'string');
+                       print $r->serialize();
+               }
+       }
+?>
index 1cdf680..a0c3c24 100755 (executable)
Binary files a/nucleus/nucleus.gif and b/nucleus/nucleus.gif differ
index 68d44ed..57d619a 100755 (executable)
Binary files a/nucleus/nucleus2.gif and b/nucleus/nucleus2.gif differ
index d6136a9..f2360a3 100644 (file)
@@ -1,75 +1,75 @@
-<?php\r
-\r
-/*                                       */\r
-/* NP_SkinFiles                          */\r
-/* ------------------------------------  */\r
-/* A simple skin files manager           */\r
-/*                                       */\r
-/* code by Jeff MacMichael               */\r
-/* http://wiki.gednet.com/               */\r
-/*                                       */\r
-\r
-/* Changes:\r
- * v0.91 ged - added ICO, PHPx files, fixed/added some icons\r
- *           - changed perms on file or folder creation or upload to 0755 from 0640\r
- *           - changed 'cancel' links for delete actions to $parent dir from http_referer\r
- *           - changed order of links next to files... moved 'del' over a bit.  ;)\r
- * v0.92 ged - changed order of links next to dirs\r
- *             $privateskins = FALSE by default\r
- * v1.0  ged - fixed security catch so it actually quits the script\r
- *             "columnated" the files & dirs display for easier viewing\r
- *             Made the edit cancel link more intuitive\r
- * v1.01 ged - fixed event_QuickMenu to properly skip for non-admins\r
- *             lined up columns for directories & added <tr> highlights\r
- */\r
-\r
-class NP_SkinFiles extends NucleusPlugin {\r
-\r
-       function getName()              { return 'SkinFiles'; }\r
-       function getAuthor()    { return 'Jeff MacMichael'; }\r
-       function getURL()               { return 'http://wiki.gednet.com/'; }\r
-       function getVersion()   { return '1.01'; }\r
-       function getDescription() { return 'A simple file manager for skins.';  }\r
-\r
-       function supportsFeature($what) {\r
-               switch($what)\r
-               { case 'SqlTablePrefix':\r
-                               return 1;\r
-                       default:\r
-                               return 0; }\r
-       }\r
-\r
-       function install() {\r
-       }\r
-       \r
-       function unInstall() {\r
-       }\r
-\r
-       function getEventList() {\r
-               return array('QuickMenu');\r
-       }\r
-       \r
-       function hasAdminArea() {\r
-               return 1;\r
-       }\r
-       \r
-       function event_QuickMenu(&$data) {\r
-               global $member, $nucleus, $blogid;\r
-               // only show to admins\r
-               if (preg_match("/MD$/", $nucleus['version'])) {\r
-                       $isblogadmin = $member->isBlogAdmin(-1);\r
-               } else {\r
-                       $isblogadmin = $member->isBlogAdmin($blogid);\r
-               }\r
-               if (!($member->isLoggedIn() && ($member->isAdmin() | $isblogadmin))) return;\r
-               array_push(\r
-                       $data['options'], \r
-                       array(\r
-                               'title' => 'Skin Files',\r
-                               'url' => $this->getAdminURL(),\r
-                               'tooltip' => 'Manage skin files'\r
-                       )\r
-               );\r
-       }\r
-}\r
+<?php
+
+/*                                       */
+/* NP_SkinFiles                          */
+/* ------------------------------------  */
+/* A simple skin files manager           */
+/*                                       */
+/* code by Jeff MacMichael               */
+/* http://wiki.gednet.com/               */
+/*                                       */
+
+/* Changes:
+ * v0.91 ged - added ICO, PHPx files, fixed/added some icons
+ *           - changed perms on file or folder creation or upload to 0755 from 0640
+ *           - changed 'cancel' links for delete actions to $parent dir from http_referer
+ *           - changed order of links next to files... moved 'del' over a bit.  ;)
+ * v0.92 ged - changed order of links next to dirs
+ *             $privateskins = FALSE by default
+ * v1.0  ged - fixed security catch so it actually quits the script
+ *             "columnated" the files & dirs display for easier viewing
+ *             Made the edit cancel link more intuitive
+ * v1.01 ged - fixed event_QuickMenu to properly skip for non-admins
+ *             lined up columns for directories & added <tr> highlights
+ */
+
+class NP_SkinFiles extends NucleusPlugin {
+
+       function getName()              { return 'SkinFiles'; }
+       function getAuthor()    { return 'Jeff MacMichael'; }
+       function getURL()               { return 'http://wiki.gednet.com/'; }
+       function getVersion()   { return '1.01'; }
+       function getDescription() { return 'A simple file manager for skins.';  }
+
+       function supportsFeature($what) {
+               switch($what)
+               { case 'SqlTablePrefix':
+                               return 1;
+                       default:
+                               return 0; }
+       }
+
+       function install() {
+       }
+       
+       function unInstall() {
+       }
+
+       function getEventList() {
+               return array('QuickMenu');
+       }
+       
+       function hasAdminArea() {
+               return 1;
+       }
+       
+       function event_QuickMenu(&$data) {
+               global $member, $nucleus, $blogid;
+               // only show to admins
+               if (preg_match("/MD$/", $nucleus['version'])) {
+                       $isblogadmin = $member->isBlogAdmin(-1);
+               } else {
+                       $isblogadmin = $member->isBlogAdmin($blogid);
+               }
+               if (!($member->isLoggedIn() && ($member->isAdmin() | $isblogadmin))) return;
+               array_push(
+                       $data['options'], 
+                       array(
+                               'title' => 'Skin Files',
+                               'url' => $this->getAdminURL(),
+                               'tooltip' => 'Manage skin files'
+                       )
+               );
+       }
+}
 ?>
\ No newline at end of file
index 50f792c..3974d80 100755 (executable)
@@ -1,11 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>Nothing Here</title>\r
-</head>\r
-<body>\r
-\r
-<h1>Nothing to see here</h1>\r
-\r
-</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
 </html>
\ No newline at end of file
index b48fe1c..11e1f8c 100644 (file)
Binary files a/nucleus/plugins/skinfiles/css.gif and b/nucleus/plugins/skinfiles/css.gif differ
index 16374a1..7635eb5 100644 (file)
Binary files a/nucleus/plugins/skinfiles/generic.png and b/nucleus/plugins/skinfiles/generic.png differ
index a5c40f1..c1b788c 100644 (file)
Binary files a/nucleus/plugins/skinfiles/image.gif and b/nucleus/plugins/skinfiles/image.gif differ
index a23e3ee..a102c35 100644 (file)
-<?php\r
-\r
-/*                                       */\r
-/* Admin page for NP_SkinFiles           */\r
-/* ------------------------------------  */\r
-/* A simple skin files manager           */\r
-/*                                       */\r
-/* code by Jeff MacMichael               */\r
-/* http://gednet.com/                    */\r
-/*                                       */\r
-/* version 1.01                          */\r
\r
-       $strRel = '../../../'; \r
-       include($strRel . 'config.php');\r
-       \r
-       include($DIR_LIBS . 'PLUGINADMIN.php');\r
-\r
-       if (preg_match("/MD$/", $nucleus['version'])) {\r
-               $isblogadmin = $member->isBlogAdmin(-1);\r
-       } else {\r
-               $isblogadmin = $member->isBlogAdmin($blogid);\r
-       }\r
-       if (!($member->isAdmin() || $isblogadmin)) {\r
-               $oPluginAdmin = new PluginAdmin('SkinFiles');\r
-               $oPluginAdmin->start();\r
-               echo "<p>"._ERROR_DISALLOWED."</p>";\r
-               $oPluginAdmin->end();\r
-               exit;\r
-       }\r
-\r
-       // set to FALSE for normal operation, or TRUE if skins are stored\r
-       // under owner's member id i.e. /skins/1/grey/...   (MDNucleus)\r
-       $privateskins = FALSE;\r
-       if ($privateskins) { \r
-               global $member;\r
-               $SKINSUBDIR = $member->getID().'/'; \r
-               $latestskins = 'latest-skins/';\r
-       } else {\r
-               $SKINSUBDIR = '';\r
-       }\r
-       \r
-       global $pluginsskinfiles, $CONF;\r
-       $pluginsskinfiles=$CONF['PluginURL']."skinfiles";\r
-\r
-       if (isset($_GET['action'])) {$action = $_GET['action'];}\r
-       if (isset($_POST['action'])) {$action = $_POST['action'];}\r
-\r
-       if ($action == 'download') { \r
-               download();\r
-               return;\r
-               break;\r
-       }\r
-\r
-       // create the admin area page\r
-       $oPluginAdmin = new PluginAdmin('SkinFiles');\r
-       $oPluginAdmin->start();\r
-       \r
-       echo "<h2>Skin File Management</h2>";\r
-       \r
-       if (strstr('renfile delfile createdir rendir deldir deleteAllInDir'\r
-               .' editfile uploadfile createfile getLatestSkins', $action)) { \r
-               call_user_func($action);\r
-       } else {\r
-               showdir();\r
-       }\r
-\r
-       $oPluginAdmin->end();\r
-       return;\r
-       break;\r
-               \r
-       function createfile() {\r
-               global $oPluginAdmin, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
-               $parent = $_POST["dir"];\r
-               $filename = $_POST["filename"];\r
-               $fullpath = $DIR_SKINS.$SKINSUBDIR.$parent.'/'.$filename;\r
-               if (file_exists($fullpath)) {\r
-                       $msg = "Error: the file '$filename' already exists.";\r
-                       showdir($msg);\r
-               }\r
-               echo "<h3><b>Creating file \"/$parent/$filename\":</b></h3>";\r
-               $errrep = error_reporting(E_ERROR);\r
-               if (touch($fullpath)) { \r
-                       $msg = 'The file was created successfully.';\r
-               } else {\r
-                       $msg = 'ERROR: The file was <i>not</i> created successfully.';\r
-               }\r
-               $oldumask = umask(0000);\r
-               chmod($fullpath, 0755);\r
-               umask($oldumask);\r
-               error_reporting($errrep);\r
-               showdir($msg);\r
-       }\r
-\r
-       function createdir() {\r
-               global $oPluginAdmin, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
-               $parent = $_POST["dir"];\r
-               $newdir = $_POST["newdir"];\r
-               if (!$newdir) {\r
-                       echo 'You need to specify a directory name to create. <br /><br />';\r
-                       echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Go back</a><br />';              \r
-                       return;\r
-               }\r
-               $errrep = error_reporting(E_ERROR);\r
-               $oldumask = umask(0000);\r
-               if (mkdir ($DIR_SKINS.$SKINSUBDIR.$parent.'/'.$newdir, 0755)) {\r
-                       $msg = 'Directory created successfully.';\r
-               } else {\r
-                       $msg = 'There was an error creating the directory (check to see if the directory already exists).';\r
-               }\r
-               umask($oldumask);\r
-               error_reporting($errrep);\r
-               showdir($msg);\r
-       }\r
-       \r
-       function download() {\r
-               global $DIR_SKINS, $SKINSUBDIR;\r
-               $file = $_GET["rfp"];\r
-               $path = $DIR_SKINS.$SKINSUBDIR.$file;\r
-               $splitpath =  preg_split( "/\//", strrev($_GET["rfp"]), 2);\r
-               $file = strrev($splitpath[0]);\r
-               \r
-               // download code taken from Paul Alger's PHP_Easy_Download. \r
-\r
-               // translate file name properly for Internet Explorer.\r
-               if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){\r
-                       $file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);\r
-               }\r
-               // make sure the file exists before sending headers\r
-               if(!$fdl=@fopen($path,'r')){\r
-                       die("Cannot Open File!");\r
-               } else {\r
-                       header("Cache-Control: ");// leave blank to avoid IE errors\r
-                       header("Pragma: ");// leave blank to avoid IE errors\r
-                       header("Content-type: application/octet-stream");\r
-                       header('Content-Disposition: attachment; filename="'.$file.'"');\r
-                       header("Content-length: ".(string)(filesize($path)));\r
-                       sleep(1);\r
-                       \r
-                       fpassthru($fdl);\r
-               }\r
-               return;\r
-               break;\r
-       }\r
-       \r
-       function uploadfile() {\r
-               global $HTTP_POST_FILES, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles, $CONF;\r
-               $filename = $HTTP_POST_FILES['filename']['name'];\r
-               $filesize = $HTTP_POST_FILES['filename']['size'];\r
-               $filetempname = $HTTP_POST_FILES['filename']['tmp_name'];\r
-               $todir = $DIR_SKINS.$SKINSUBDIR.$_POST['dir'].'/';\r
-               \r
-               if ($filesize > $CONF['MaxUploadSize']) {\r
-                       showdir(_ERROR_FILE_TOO_BIG);\r
-                       return;\r
-               }\r
-\r
-               // check file type against allowed types\r
-               $ok = 0;\r
-               $allowedtypes = explode (',', "css,html,htm,xml,inc,txt,".$CONF['AllowedTypes']);\r
-               foreach ( $allowedtypes as $type ) \r
-                       if (eregi("\." .$type. "$",$filename)) $ok = 1;    \r
-               if (!$ok) {\r
-                       showdir(_ERROR_BADFILETYPE);\r
-                       return;\r
-               }\r
-               if (!is_uploaded_file($filetempname)) {\r
-                       showdir(_ERROR_BADREQUEST);\r
-                       return;\r
-               }\r
-               if (file_exists($todir.$filename)) {\r
-                       showdir(_ERROR_UPLOADDUPLICATE);\r
-                       return;\r
-               }\r
-\r
-               // move file to directory\r
-               if (is_uploaded_file($filetempname)) {\r
-                       $errrep = error_reporting(E_ERROR);\r
-                       if (!@move_uploaded_file($filetempname, $todir . $filename)) {\r
-                               showdir(_ERROR_UPLOADMOVE);\r
-                               return;\r
-                       }\r
-                       error_reporting($errrep);\r
-               }\r
-               // chmod uploaded file\r
-               $oldumask = umask(0000);\r
-               @chmod($todir . $filename, 0755); \r
-               umask($oldumask);               \r
-\r
-               showdir("File uploaded successfully.");\r
-       }\r
-\r
-       function rendir() {\r
-               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
-               if (isset($_POST['newname'])) {\r
-                       $splitpath =  preg_split( "/\//", strrev($_POST["oldname"]), 2);\r
-                       $newname = strrev($splitpath[1]) .'/'. $_POST["newname"];\r
-                       $newname = preg_replace("/^\//", "", $newname);\r
-                       $res = rename ( $DIR_SKINS.$SKINSUBDIR.$_POST["oldname"], \r
-                               $DIR_SKINS.$SKINSUBDIR.$newname);\r
-                       if ($res) { \r
-                               $msg = "Directory successfully renamed."; \r
-                       } else {\r
-                               $msg = "Failed to rename directory - (check to see if another directory already exists with the new name).";\r
-                       }\r
-                       showdir($msg);\r
-               } else { \r
-                       $oldname = preg_replace("/^\//", "", $_GET["oldname"]);\r
-                       echo '<h3><b>Rename directory "/'.$oldname.'":</b></h3>';\r
-                       $splitpath =  preg_split( "/\//", strrev($_GET["oldname"]), 2);\r
-                       $dir = strrev($splitpath[0]);\r
-                       $parent = strrev($splitpath[1]);\r
-                       echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Cancel rename</a><br />';                \r
-                       ?>\r
-                               <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
-                                       <input type="hidden" name="action" value="rendir" />\r
-                                       <input type="hidden" name="dir" value="<?php echo "/$parent" ?>"/>\r
-                                       <input type="hidden" name="oldname" value="<?php echo $oldname?>"/>\r
-                                       <table><tr>\r
-                                               <td><?php echo 'Rename to'?></td>\r
-                                               <td><input name="newname" tabindex="90" value="<?php echo  htmlspecialchars($dir) ?>" maxlength="50" size="20" /></td>\r
-                                       </tr><tr>\r
-                                               <td><?php echo "Rename"?></td>\r
-                                               <td><input type="submit" tabindex="140" value="<?php echo "Rename this folder"?>" onclick="return checkSubmit();" /></td>\r
-                                       </tr></table>\r
-                               </form>\r
-                       <?PHP\r
-               }\r
-       }\r
-\r
-       function editfile () {\r
-               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
-               if (isset ($_POST['rfp']) && isset($_POST['content'])) {\r
-                       $file = $_POST['rfp'];\r
-                       $errrep = error_reporting(E_ERROR);\r
-                       $success = true;\r
-                       if ($fh = @fopen($DIR_SKINS.$SKINSUBDIR.$file, 'w')) { \r
-                               if (fwrite ($fh, trim(stripslashes($_POST['content'])))) {\r
-                                       fclose($fh);\r
-                               } else {\r
-                                       $success = false;\r
-                               }\r
-                       } else {\r
-                               $success = false;\r
-                       }\r
-                       error_reporting($errrep);\r
-                       if ($success) {\r
-                               $msg = 'File was edited successfully.';\r
-                       } else {\r
-                               $msg = 'ERROR: File was <i>not</i> saved successfully.';\r
-                       }\r
-               }\r
-               if (isset ($_GET['rfp'])) { $file = $_GET['rfp']; }\r
-               if (isset ($_POST['rfp'])) { $file = $_POST['rfp']; }\r
-               $splitpath =  preg_split( "/\//", strrev($file), 2);\r
-               $parent = strrev($splitpath[1]);\r
-               echo '<h3>Editing file "/'.$file.'":</h3>';\r
-               if (isset($msg)) { echo "<p><b>$msg</b></p>"; }\r
-               echo "> <a href=\"$pluginsskinfiles/?dir=$parent\"> Cancel/Return to /$parent</a><br /><br />";\r
-               $fh = @fopen($DIR_SKINS.$SKINSUBDIR.$file, 'r');\r
-               while (!feof($fh)) { \r
-                       $content .= fread($fh, 4096); \r
-               }\r
-               fclose ($fh);                   \r
-               ?>\r
-                       <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
-                               <input type="hidden" name="action" value="editfile" />\r
-                               <input type="hidden" name="rfp" value="<?php echo $file ?>"/>\r
-                               <input type="hidden" name="dir" value="<?php echo $parent ?>"/>\r
-                               <input type="submit" tabindex="140" value="<?php echo "Save changes"?>" onclick="return checkSubmit();" />\r
-                               <input type="reset" value="Reset Data" /><br />\r
-                               <textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content"><?PHP echo htmlspecialchars($content) ?></textarea>\r
-                               <input type="submit" tabindex="140" value="<?php echo "Save changes"?>" onclick="return checkSubmit();" />\r
-                               <input type="reset" value="Reset Data" /><br />\r
-                       </form>\r
-               <?PHP\r
-       }\r
-\r
-\r
-       function renfile() {\r
-               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
-               if (isset($_POST['newname'])) {\r
-                       $splitpath =  preg_split( "/\//", strrev($_POST["oldname"]), 2);\r
-                       $newname = strrev($splitpath[1]) .'/'. $_POST["newname"];\r
-                       $newname = preg_replace("/^\//", "", $newname);\r
-                       $res = rename ( $DIR_SKINS.$SKINSUBDIR.$_POST["oldname"], \r
-                               $DIR_SKINS.$SKINSUBDIR.$newname);\r
-                       if ($res) { \r
-                               $msg = "File successfully renamed."; \r
-                       } else {\r
-                               $msg = "File could not be renamed - (check to see if another file already exists with the new name).";\r
-                       }\r
-                       showdir($msg);\r
-               } else { \r
-                       echo '<h3><b>Rename file "/'.$_GET["rfp"].'":</b></h3>';\r
-                       $splitpath =  preg_split( "/\//", strrev($_GET["rfp"]), 2);\r
-                       $file = strrev($splitpath[0]);\r
-                       $parent = strrev($splitpath[1]);\r
-                       echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Cancel rename</a><br />';                \r
-                       ?>\r
-                               <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
-                                       <input type="hidden" name="action" value="renfile" />\r
-                                       <input type="hidden" name="oldname" value="<?php echo $_GET["rfp"] ?>"/>\r
-                                       <input type="hidden" name="dir" value="<?php echo "/$parent" ?>"/>\r
-                                       <table><tr>\r
-                                               <td><?php echo 'Rename to'?></td>\r
-                                               <td><input name="newname" tabindex="90" value="<?php echo  htmlspecialchars($file) ?>" maxlength="50" size="20" /></td>\r
-                                       </tr><tr>\r
-                                               <td><?php echo "Rename"?></td>\r
-                                               <td><input type="submit" tabindex="140" value="<?php echo "Rename this file"?>" onclick="return checkSubmit();" /></td>\r
-                                       </tr></table>\r
-                               </form>\r
-                       <?PHP\r
-               }\r
-       }\r
-\r
-       function delfile() {\r
-               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
-               if (isset($_GET['sure'])) { \r
-                       $file = $DIR_SKINS.$SKINSUBDIR.$_GET["rfp"];\r
-                       $errrep = error_reporting(E_ERROR);\r
-                       if (unlink ($file)) {\r
-                               $msg = 'File "'.$_GET["rfp"].'" has been deleted.';\r
-                       } else {\r
-                               $msg = 'ERROR: File "'.$_GET["rfp"].'" could not be deleted.';\r
-                       }\r
-                       error_reporting($errrep);\r
-                       showdir($msg);\r
-               } else {\r
-                       $file = $DIR_SKINS.$SKINSUBDIR.$_GET["rfp"];\r
-                       $splitpath =  preg_split( "/\//", strrev($_GET["rfp"]), 2);\r
-                       $parent = strrev($splitpath[1]);\r
-                       echo '<h3><b>Delete file "'.$_GET["rfp"].'": are you sure?</b></h3>';\r
-                       echo '<b>This action cannot be undone!</b><br /><br />';\r
-                       echo "> <a href=\"$pluginsskinfiles/?action=delfile&dir=$parent&sure=y&rfp=".$_GET["rfp"]."\">Yes, delete the file.</a><br />";         \r
-                       echo "> <a href=\"$pluginsskinfiles/?dir=".$parent.'">No, go back.</a><br />';          \r
-               }\r
-       }\r
-\r
-       function deldir() {\r
-               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
-               if (isset($_GET['sure'])) { \r
-                       $dir = $DIR_SKINS.$SKINSUBDIR.$_GET["remdir"];\r
-                       $errrep = error_reporting(E_ERROR);\r
-                       if (rmdir ($dir)) {\r
-                               $msg = 'Directory "'.$_GET["remdir"].'" has been deleted.';\r
-                       } else {\r
-                               $msg = 'ERROR: directory "'.$_GET["remdir"].'" could not be deleted - (check to see if it contains files).';\r
-                       }\r
-                       error_reporting($errrep);\r
-                       showdir($msg);\r
-               } else {\r
-                       $dir = preg_replace("/^\//", "",$_GET['remdir']);\r
-                       $parent = $_GET['dir'];\r
-                       echo '<h3><b>Delete directory "/'.$dir.'": are you sure?</b></h3>';\r
-                       echo '<b>This action cannot be undone!</b><br /><br />';\r
-                       echo "> <a href=\"$pluginsskinfiles/?action=deldir&sure=y&remdir=$dir&dir=$parent\">Yes, delete the directory (it must be empty to do this).</a><br /><br />";          \r
-                       echo "> <a href=\"$pluginsskinfiles/?dir=".$parent.'">No, go back.</a><br />';          \r
-               }\r
-       }\r
-\r
-       function deleteAllInDir() {\r
-               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;\r
-               $parent = $DIR_SKINS.$SKINSUBDIR.preg_replace("/^\//", "",$_GET['dir']);\r
-               if ($dh = @opendir($parent)) { \r
-                       while (($file = readdir($dh)) !== false) { \r
-                               if(!preg_match("/^\.{1,2}/", $file)){\r
-                                       if (!is_dir($parent.$file)) {\r
-                                               $files[] = $file;\r
-                                       }\r
-                               }\r
-                       }\r
-                       closedir($dh); \r
-               } \r
-               if (isset($_GET['sure'])) { \r
-                       $errrep = error_reporting(E_ERROR);\r
-                       echo '<h3>Deletion results</h3><table>';\r
-                       echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET["dir"]."\">Return to the /".$_GET["dir"]." directory.</a><br />";              \r
-                       foreach ($files as $file) {\r
-                               if (unlink ("$parent/$file")) { \r
-                                       echo "<tr><td>File: $file was deleted.</td></tr>"; \r
-                               } else {\r
-                                       echo "<tr><td>File: $file was <b>NOT</b> deleted.</td></tr>";\r
-                               }\r
-                       }\r
-                       echo "</table>";\r
-                       error_reporting($errrep);\r
-                       echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET["dir"]."\">Return to the /".$_GET["dir"]." directory.</a><br />";              \r
-               } else {\r
-                       echo '<h3><b>Delete all files in directory "/'.$_GET['dir'].'": are you sure?</b></h3>';\r
-                       echo '<b>This action cannot be undone!</b><br /><br />';\r
-                       echo "> <a href=\"$pluginsskinfiles/?action=deleteAllInDir&sure=y&dir=".$_GET["dir"]."\">Yes, delete <u>all files</u> in this directory.</a><br />";            \r
-                       echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET['dir'].'">No, go back.</a><br /><br />';               \r
-                       echo '<b>Files list:</b><table>';\r
-                       foreach ($files as $file) {     echo "<tr><td>$file</td></tr>"; }\r
-                       echo '</table>';\r
-               }\r
-       }\r
-\r
-       // function for MDNucleus; won't work unless $privateskins is set to true\r
-       function getLatestSkins() {\r
-               global $DIR_SKINS, $pluginsskinfiles, $privateskins, $latestskins, $member;\r
-               $confirmed = $_POST['overwrite'];\r
-               if (!$confirmed) {\r
-                       showdir("Overwrite of default skin files not confirmed - no action taken.");\r
-                       return;\r
-               }\r
-               if ($dh = @opendir($DIR_SKINS.$latestskins)) { \r
-                       while (($file = readdir($dh)) !== false) { \r
-                               if(!preg_match("/^\.{1,2}/", $file))\r
-                                       if (is_dir($DIR_SKINS.$latestskins.$file)) $skins[] = $file;\r
-                       }\r
-                       closedir($dh); \r
-               } \r
-               if ($skins) {\r
-                       $msg = "Refreshed skin folders:";\r
-                       sort ($skins);\r
-                       foreach ($skins as $skin) {\r
-                               $memberskin = $DIR_SKINS.$member->getID().'/'.$skin;\r
-                               if (is_file($memberskin)) unlink($memberskin);\r
-                               if (!is_dir($memberskin)) {\r
-                                       $old_umask = umask(0);\r
-                                       mkdir($memberskin, 0755);\r
-                                       umask($old_umask);\r
-                               }\r
-                               exec("rsync -Wtr --delete ".$DIR_SKINS.$latestskins.$skin."/* ".$memberskin.'/');\r
-                               $msg .= "  $skin";\r
-                       }\r
-               } else {\r
-                       showdir("No default skin folders found.  No action taken.");\r
-                       return;\r
-               }\r
-               showdir($msg);\r
-       }\r
-\r
-       function _isImageFile($file) {\r
-               return preg_match ("/\.(gif|png|jpg|jpeg|bmp|ico)$/i", $file);\r
-       }\r
-\r
-       function _isEditableFile($file) {\r
-               return preg_match ("/\.(inc|txt|htm|html|xml)$/i", $file);\r
-       }\r
-\r
-       function showdir($msg = '') {\r
-               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles, $CONF;\r
-               global $privateskins, $latestskins;\r
-               if (isset($_GET['dir'])) { \r
-                       $newdir = preg_replace("/^\//", "",$_GET['dir']);\r
-                       $currdir = $DIR_SKINS.$SKINSUBDIR."$newdir/";\r
-                       $in_subdir = 1;\r
-               } elseif (isset($_POST['dir'])) { \r
-                       $newdir = preg_replace("/^\//", "",$_POST['dir']);\r
-                       $currdir = $DIR_SKINS.$SKINSUBDIR."$newdir/";\r
-                       $in_subdir = 1;\r
-               } else {\r
-                       $newdir = '';\r
-                       $currdir = $DIR_SKINS.$SKINSUBDIR;\r
-                       $in_subdir = 0;\r
-               }\r
-       \r
-               if ($privateskins && (!is_dir($DIR_SKINS.$SKINSUBDIR))) {\r
-                       $oldumask = umask(0);\r
-                       mkdir($DIR_SKINS.$SKINSUBDIR, 0755);\r
-                       umask($oldmask);\r
-               }\r
-\r
-               if (!is_dir($currdir)) {\r
-                       echo 'The specified location is not a directory or doesn\'t exist.';\r
-                       return;\r
-               }\r
-               \r
-               if ($dh = @opendir($currdir)) { \r
-                       while (($file = readdir($dh)) !== false) { \r
-                               if(!preg_match("/^\.{1,2}/", $file)){\r
-                                       if (is_dir($currdir.$file)) {\r
-                                               $dirs[] = $file;\r
-                                       } else {\r
-                                               $files[] = $file;\r
-                                       }\r
-                               }\r
-                       }\r
-                       closedir($dh); \r
-               } \r
-               \r
-               echo "<h3>Current Directory: <b>/$newdir</b></h3>";\r
-               \r
-               if ($msg) {\r
-                       echo '<p><b>'.htmlspecialchars($msg).'</b></p>';\r
-               }\r
-               \r
-               if ($newdir != '') {\r
-                       echo "<u><a href=\"$pluginsskinfiles/\">> Return to / <</a></u><br />";\r
-                       if (strstr($newdir, '/')) {\r
-                               $splitpath =  preg_split( "/\//", strrev($newdir), 2);\r
-                               $updir = strrev($splitpath[1]);\r
-                               echo "<u><a href=\"$pluginsskinfiles/?dir=/$updir\">> Return to /$updir <</a></u><br /><br />";\r
-                       }\r
-               }\r
-               echo "<u><a href=\"$pluginsskinfiles/?dir=$newdir\">> Refresh <</a></u><br />";\r
-\r
-               echo "<table>";\r
-               if(is_array($dirs)){\r
-                       sort($dirs);\r
-                       foreach($dirs as $dir) {\r
-                               echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'><td>";\r
-                               echo "&nbsp;&nbsp;<a href=\"$pluginsskinfiles/?dir=$newdir/$dir\">";\r
-                               echo "<img src=\"$pluginsskinfiles/dir.gif\"> $dir</a>&nbsp;</td>";\r
-                               echo "<td>&nbsp;<a href=\"$pluginsskinfiles/?action=rendir&oldname=$newdir/$dir\" title=\"Rename directory\">(ren)</a></td>";\r
-                               echo "<td>&nbsp;<a href=\"$pluginsskinfiles/?action=deldir&dir=$newdir&remdir=$newdir/$dir\" title=\"Delete directory\">(del)</a></td>";\r
-                               echo "</td><td></td><td></td><td></td><td>";\r
-                               echo "<td>".date('M d, Y  h:i:s a', filemtime($DIR_SKINS.$SKINSUBDIR.$newdir."/$dir"));\r
-                               echo "</td></tr>";\r
-                       }\r
-               }\r
-       \r
-               if(is_array($files)){\r
-                       sort($files);\r
-                       foreach($files as $file) {\r
-                               echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'><td>";\r
-                               echo "&nbsp;&nbsp;";\r
-                               if (preg_match("/\.css$/i", $file)) {\r
-                                       echo "<img src=\"$pluginsskinfiles/css.gif\"> ";\r
-                               } elseif (preg_match("/\.php(3|4)?$/i", $file)) {\r
-                                       echo "<img src=\"$pluginsskinfiles/php.gif\"> ";\r
-                               } elseif (_isEditableFile($file)) {\r
-                                       echo "<img src=\"$pluginsskinfiles/text.gif\"> ";\r
-                               } elseif (_isImageFile($file)) {\r
-                                       echo "<img src=\"$pluginsskinfiles/image.gif\"> ";\r
-                               } else {\r
-                                       echo "<img src=\"$pluginsskinfiles/generic.png\"> ";\r
-                               }\r
-                               if ($newdir == '') {$thisdir = '';} else {$thisdir = "$newdir/";}\r
-                               echo "$file&nbsp;";\r
-                               echo "</td><td>";\r
-                               echo "&nbsp;<a href=\"$pluginsskinfiles/?action=renfile&rfp=$thisdir"."$file\" title=\"Rename file\">(ren)</a>";\r
-                               echo "</td><td>";\r
-                               echo "&nbsp;<a href=\"$pluginsskinfiles/?action=delfile&rfp=$thisdir"."$file\" title=\"Delete file\">(del)</a>";\r
-                               echo "</td><td>";\r
-                               if ((is_writable($DIR_SKINS.$SKINSUBDIR.$thisdir.$file)) && (!_isImageFile($file))) {\r
-                                       echo "&nbsp;<a href=\"$pluginsskinfiles/?action=editfile&rfp=$thisdir"."$file\" title=\"Edit file\">(edit)</a>";\r
-                               }\r
-                               echo "</td><td>";\r
-                               if (_isImageFile($file)) {\r
-                                       echo '&nbsp;<a href="'.$CONF['SkinsURL'].$SKINSUBDIR.$thisdir."$file\" title=\"View graphic\">(view)</a>";\r
-                               }\r
-                               echo "</td><td>";\r
-                               echo "&nbsp;<a href=\"$pluginsskinfiles/?action=download&rfp=$thisdir"."$file\" title=\"Download file\">(d/l)</a>";\r
-                               echo "</td><td>";\r
-                               echo number_format(filesize($DIR_SKINS.$SKINSUBDIR.$thisdir.$file)/1024, 2)." KB";\r
-                               echo "</td><td>";\r
-                               echo date('M d, Y  h:i:s a', filemtime($DIR_SKINS.$SKINSUBDIR.$thisdir.$file));\r
-                               echo "</td></tr>";\r
-                       }\r
-               }\r
-               echo "</table>";\r
-       \r
-               if(is_array($dirs) || is_array($files)) {\r
-                       if ($newdir != '') {\r
-                               echo "<u><a href=\"$pluginsskinfiles/\">> Return to / <</a></u><br />";\r
-                               if (strstr($newdir, '/')) {\r
-                                       $splitpath =  preg_split( "/\//", strrev($newdir), 2);\r
-                                       $updir = strrev($splitpath[1]);\r
-                                       echo "<u><a href=\"$pluginsskinfiles/?dir=/$updir\">> Return to /$updir <</a></u><br /><br />";\r
-                               }\r
-                       }\r
-                       echo "<u><a href=\"$pluginsskinfiles/?dir=$newdir\">> Refresh <</a></u><br />";\r
-               }\r
-\r
-               if ($newdir != '') {\r
-                       echo "<h3>Create new file in <b>/$newdir</b></h3>";\r
-                               ?>\r
-                               <form method="POST" enctype="multipart/form-data" action="<?php echo $pluginsskinfiles ?>/">\r
-                                               <input type="hidden" name="action" value="createfile" />\r
-                                               <input type="hidden" name="dir" value="<?php echo $newdir ?>">\r
-                                               <input type="text" name="filename" size="40">\r
-                                               <input type="submit" value="<?php echo 'Create file' ?>" />\r
-                                       </form>\r
-                               <?PHP\r
-\r
-                               echo "<h3>Upload new file to <b>/$newdir</b></h3>";\r
-                               ?>\r
-                               <form method="POST" enctype="multipart/form-data" action="<?php echo $pluginsskinfiles ?>/">\r
-                                               <input type="hidden" name="action" value="uploadfile" />\r
-                                               <input type="hidden" name="dir" value="<?php echo $newdir ?>">\r
-                                               <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $CONF['MaxUploadSize']?>" />\r
-                                               <input type="file" name="filename" size="40">\r
-                                               <input type="submit" value="<?php echo _UPLOAD_BUTTON?>" />\r
-                                       </form>\r
-                               <?PHP\r
-       \r
-                       if (count($files)) {\r
-                               echo "<h3>Delete all files in <b>/$newdir</b></h3>";\r
-                                       ?>\r
-                                               <form method="get" action="<?php echo $pluginsskinfiles?>/">\r
-                                                       <input type="hidden" name="action" value="deleteAllInDir" />\r
-                                                       <input type="hidden" name="dir" value="<?php echo $newdir?>"/>\r
-                                                       <?php echo "Delete all Files? (will ask for confirmation)"?>\r
-                                                       <input type="submit" tabindex="140" value="<?php echo "Delete All"?>" onclick="return checkSubmit();" />\r
-                                               </form>\r
-                                       <?PHP\r
-                       }\r
-               }\r
-       \r
-               echo "<h3>Create a new directory in <b>/$newdir</b></h3>"; \r
-                               ?>\r
-                                       <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
-                                               <input type="hidden" name="action" value="createdir" />\r
-                                               <input type="hidden" name="dir" value="<?php echo $newdir?>"/>\r
-                                               <input name="newdir" tabindex="90" value="<?php echo 'newdir' ?>" size="40" />\r
-                                               <input type="submit" tabindex="140" value="<?php echo "Create"?>" onclick="return checkSubmit();" />\r
-                                       </form>\r
-                               <?PHP\r
-\r
-               // for MDNucleus, ignored if on Win32 platform (for the moment)\r
-               if (($newdir == '') && ($privateskins) && (!strtoupper(substr(PHP_OS, 0,3) == 'WIN'))) {\r
-                       if ($dh = @opendir($DIR_SKINS.$latestskins)) { \r
-                               while (($file = readdir($dh)) !== false) { \r
-                                       if(!preg_match("/^\.{1,2}/", $file))\r
-                                               if (is_dir($DIR_SKINS.$latestskins.$file)) $skins[] = $file;\r
-                               }\r
-                               closedir($dh); \r
-                       }\r
-                       if ($skins) {\r
-                               echo "<h3>Refresh default skin files to standard versions</h3>";\r
-                               ?>\r
-                                       <form method="post" action="<?php echo $pluginsskinfiles?>/">\r
-                                               <input type="hidden" name="action" value="getLatestSkins" />\r
-                                               <?php\r
-                                               sort ($skins);\r
-                                               if (count($skins) > 1) {\r
-                                                       $lastskin = array_pop($skins);\r
-                                                       array_push($skins, "</b>and<b> $lastskin");\r
-                                               }\r
-                                               echo "This will overwrite or create files in the following skin file directories: <b>";\r
-                                               echo implode(", ", $skins)."</b><br /><br />"; \r
-                                               ?> \r
-                                               Note that you may need to re-import skin definitions you wish to use (See Layout Import/Export).<br /><br />\r
-                                               <input type="checkbox" name="overwrite" value="1" id="cb_overwrite" />\r
-                                               <label for="cb_overwrite"><?php echo "Check this box to confirm overwrite of files<br />" ?></label>\r
-                                               <input type="submit" tabindex="140" value="<?php echo "Overwrite Default Skin Files"?>" onclick="return checkSubmit();" />\r
-                                       </form>\r
-                               <?PHP\r
-                       }\r
-               }\r
-\r
-       }\r
-\r
-       \r
-       \r
+<?php
+
+/*                                       */
+/* Admin page for NP_SkinFiles           */
+/* ------------------------------------  */
+/* A simple skin files manager           */
+/*                                       */
+/* code by Jeff MacMichael               */
+/* http://gednet.com/                    */
+/*                                       */
+/* version 1.01                          */
+       $strRel = '../../../'; 
+       include($strRel . 'config.php');
+       
+       include($DIR_LIBS . 'PLUGINADMIN.php');
+
+       if (preg_match("/MD$/", $nucleus['version'])) {
+               $isblogadmin = $member->isBlogAdmin(-1);
+       } else {
+               $isblogadmin = $member->isBlogAdmin($blogid);
+       }
+       if (!($member->isAdmin() || $isblogadmin)) {
+               $oPluginAdmin = new PluginAdmin('SkinFiles');
+               $oPluginAdmin->start();
+               echo "<p>"._ERROR_DISALLOWED."</p>";
+               $oPluginAdmin->end();
+               exit;
+       }
+
+       // set to FALSE for normal operation, or TRUE if skins are stored
+       // under owner's member id i.e. /skins/1/grey/...   (MDNucleus)
+       $privateskins = FALSE;
+       if ($privateskins) { 
+               global $member;
+               $SKINSUBDIR = $member->getID().'/'; 
+               $latestskins = 'latest-skins/';
+       } else {
+               $SKINSUBDIR = '';
+       }
+       
+       global $pluginsskinfiles, $CONF;
+       $pluginsskinfiles=$CONF['PluginURL']."skinfiles";
+
+       if (isset($_GET['action'])) {$action = $_GET['action'];}
+       if (isset($_POST['action'])) {$action = $_POST['action'];}
+
+       if ($action == 'download') { 
+               download();
+               return;
+               break;
+       }
+
+       // create the admin area page
+       $oPluginAdmin = new PluginAdmin('SkinFiles');
+       $oPluginAdmin->start();
+       
+       echo "<h2>Skin File Management</h2>";
+       
+       if (strstr('renfile delfile createdir rendir deldir deleteAllInDir'
+               .' editfile uploadfile createfile getLatestSkins', $action)) { 
+               call_user_func($action);
+       } else {
+               showdir();
+       }
+
+       $oPluginAdmin->end();
+       return;
+       break;
+               
+       function createfile() {
+               global $oPluginAdmin, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;
+               $parent = $_POST["dir"];
+               $filename = $_POST["filename"];
+               $fullpath = $DIR_SKINS.$SKINSUBDIR.$parent.'/'.$filename;
+               if (file_exists($fullpath)) {
+                       $msg = "Error: the file '$filename' already exists.";
+                       showdir($msg);
+               }
+               echo "<h3><b>Creating file \"/$parent/$filename\":</b></h3>";
+               $errrep = error_reporting(E_ERROR);
+               if (touch($fullpath)) { 
+                       $msg = 'The file was created successfully.';
+               } else {
+                       $msg = 'ERROR: The file was <i>not</i> created successfully.';
+               }
+               $oldumask = umask(0000);
+               chmod($fullpath, 0755);
+               umask($oldumask);
+               error_reporting($errrep);
+               showdir($msg);
+       }
+
+       function createdir() {
+               global $oPluginAdmin, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;
+               $parent = $_POST["dir"];
+               $newdir = $_POST["newdir"];
+               if (!$newdir) {
+                       echo 'You need to specify a directory name to create. <br /><br />';
+                       echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Go back</a><br />';              
+                       return;
+               }
+               $errrep = error_reporting(E_ERROR);
+               $oldumask = umask(0000);
+               if (mkdir ($DIR_SKINS.$SKINSUBDIR.$parent.'/'.$newdir, 0755)) {
+                       $msg = 'Directory created successfully.';
+               } else {
+                       $msg = 'There was an error creating the directory (check to see if the directory already exists).';
+               }
+               umask($oldumask);
+               error_reporting($errrep);
+               showdir($msg);
+       }
+       
+       function download() {
+               global $DIR_SKINS, $SKINSUBDIR;
+               $file = $_GET["rfp"];
+               $path = $DIR_SKINS.$SKINSUBDIR.$file;
+               $splitpath =  preg_split( "/\//", strrev($_GET["rfp"]), 2);
+               $file = strrev($splitpath[0]);
+               
+               // download code taken from Paul Alger's PHP_Easy_Download. 
+
+               // translate file name properly for Internet Explorer.
+               if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
+                       $file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
+               }
+               // make sure the file exists before sending headers
+               if(!$fdl=@fopen($path,'r')){
+                       die("Cannot Open File!");
+               } else {
+                       header("Cache-Control: ");// leave blank to avoid IE errors
+                       header("Pragma: ");// leave blank to avoid IE errors
+                       header("Content-type: application/octet-stream");
+                       header('Content-Disposition: attachment; filename="'.$file.'"');
+                       header("Content-length: ".(string)(filesize($path)));
+                       sleep(1);
+                       
+                       fpassthru($fdl);
+               }
+               return;
+               break;
+       }
+       
+       function uploadfile() {
+               global $HTTP_POST_FILES, $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles, $CONF;
+               $filename = $HTTP_POST_FILES['filename']['name'];
+               $filesize = $HTTP_POST_FILES['filename']['size'];
+               $filetempname = $HTTP_POST_FILES['filename']['tmp_name'];
+               $todir = $DIR_SKINS.$SKINSUBDIR.$_POST['dir'].'/';
+               
+               if ($filesize > $CONF['MaxUploadSize']) {
+                       showdir(_ERROR_FILE_TOO_BIG);
+                       return;
+               }
+
+               // check file type against allowed types
+               $ok = 0;
+               $allowedtypes = explode (',', "css,html,htm,xml,inc,txt,".$CONF['AllowedTypes']);
+               foreach ( $allowedtypes as $type ) 
+                       if (eregi("\." .$type. "$",$filename)) $ok = 1;    
+               if (!$ok) {
+                       showdir(_ERROR_BADFILETYPE);
+                       return;
+               }
+               if (!is_uploaded_file($filetempname)) {
+                       showdir(_ERROR_BADREQUEST);
+                       return;
+               }
+               if (file_exists($todir.$filename)) {
+                       showdir(_ERROR_UPLOADDUPLICATE);
+                       return;
+               }
+
+               // move file to directory
+               if (is_uploaded_file($filetempname)) {
+                       $errrep = error_reporting(E_ERROR);
+                       if (!@move_uploaded_file($filetempname, $todir . $filename)) {
+                               showdir(_ERROR_UPLOADMOVE);
+                               return;
+                       }
+                       error_reporting($errrep);
+               }
+               // chmod uploaded file
+               $oldumask = umask(0000);
+               @chmod($todir . $filename, 0755); 
+               umask($oldumask);               
+
+               showdir("File uploaded successfully.");
+       }
+
+       function rendir() {
+               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;
+               if (isset($_POST['newname'])) {
+                       $splitpath =  preg_split( "/\//", strrev($_POST["oldname"]), 2);
+                       $newname = strrev($splitpath[1]) .'/'. $_POST["newname"];
+                       $newname = preg_replace("/^\//", "", $newname);
+                       $res = rename ( $DIR_SKINS.$SKINSUBDIR.$_POST["oldname"], 
+                               $DIR_SKINS.$SKINSUBDIR.$newname);
+                       if ($res) { 
+                               $msg = "Directory successfully renamed."; 
+                       } else {
+                               $msg = "Failed to rename directory - (check to see if another directory already exists with the new name).";
+                       }
+                       showdir($msg);
+               } else { 
+                       $oldname = preg_replace("/^\//", "", $_GET["oldname"]);
+                       echo '<h3><b>Rename directory "/'.$oldname.'":</b></h3>';
+                       $splitpath =  preg_split( "/\//", strrev($_GET["oldname"]), 2);
+                       $dir = strrev($splitpath[0]);
+                       $parent = strrev($splitpath[1]);
+                       echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Cancel rename</a><br />';                
+                       ?>
+                               <form method="post" action="<?php echo $pluginsskinfiles?>/">
+                                       <input type="hidden" name="action" value="rendir" />
+                                       <input type="hidden" name="dir" value="<?php echo "/$parent" ?>"/>
+                                       <input type="hidden" name="oldname" value="<?php echo $oldname?>"/>
+                                       <table><tr>
+                                               <td><?php echo 'Rename to'?></td>
+                                               <td><input name="newname" tabindex="90" value="<?php echo  htmlspecialchars($dir) ?>" maxlength="50" size="20" /></td>
+                                       </tr><tr>
+                                               <td><?php echo "Rename"?></td>
+                                               <td><input type="submit" tabindex="140" value="<?php echo "Rename this folder"?>" onclick="return checkSubmit();" /></td>
+                                       </tr></table>
+                               </form>
+                       <?PHP
+               }
+       }
+
+       function editfile () {
+               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;
+               if (isset ($_POST['rfp']) && isset($_POST['content'])) {
+                       $file = $_POST['rfp'];
+                       $errrep = error_reporting(E_ERROR);
+                       $success = true;
+                       if ($fh = @fopen($DIR_SKINS.$SKINSUBDIR.$file, 'w')) { 
+                               if (fwrite ($fh, trim(stripslashes($_POST['content'])))) {
+                                       fclose($fh);
+                               } else {
+                                       $success = false;
+                               }
+                       } else {
+                               $success = false;
+                       }
+                       error_reporting($errrep);
+                       if ($success) {
+                               $msg = 'File was edited successfully.';
+                       } else {
+                               $msg = 'ERROR: File was <i>not</i> saved successfully.';
+                       }
+               }
+               if (isset ($_GET['rfp'])) { $file = $_GET['rfp']; }
+               if (isset ($_POST['rfp'])) { $file = $_POST['rfp']; }
+               $splitpath =  preg_split( "/\//", strrev($file), 2);
+               $parent = strrev($splitpath[1]);
+               echo '<h3>Editing file "/'.$file.'":</h3>';
+               if (isset($msg)) { echo "<p><b>$msg</b></p>"; }
+               echo "> <a href=\"$pluginsskinfiles/?dir=$parent\"> Cancel/Return to /$parent</a><br /><br />";
+               $fh = @fopen($DIR_SKINS.$SKINSUBDIR.$file, 'r');
+               while (!feof($fh)) { 
+                       $content .= fread($fh, 4096); 
+               }
+               fclose ($fh);                   
+               ?>
+                       <form method="post" action="<?php echo $pluginsskinfiles?>/">
+                               <input type="hidden" name="action" value="editfile" />
+                               <input type="hidden" name="rfp" value="<?php echo $file ?>"/>
+                               <input type="hidden" name="dir" value="<?php echo $parent ?>"/>
+                               <input type="submit" tabindex="140" value="<?php echo "Save changes"?>" onclick="return checkSubmit();" />
+                               <input type="reset" value="Reset Data" /><br />
+                               <textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content"><?PHP echo htmlspecialchars($content) ?></textarea>
+                               <input type="submit" tabindex="140" value="<?php echo "Save changes"?>" onclick="return checkSubmit();" />
+                               <input type="reset" value="Reset Data" /><br />
+                       </form>
+               <?PHP
+       }
+
+
+       function renfile() {
+               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;
+               if (isset($_POST['newname'])) {
+                       $splitpath =  preg_split( "/\//", strrev($_POST["oldname"]), 2);
+                       $newname = strrev($splitpath[1]) .'/'. $_POST["newname"];
+                       $newname = preg_replace("/^\//", "", $newname);
+                       $res = rename ( $DIR_SKINS.$SKINSUBDIR.$_POST["oldname"], 
+                               $DIR_SKINS.$SKINSUBDIR.$newname);
+                       if ($res) { 
+                               $msg = "File successfully renamed."; 
+                       } else {
+                               $msg = "File could not be renamed - (check to see if another file already exists with the new name).";
+                       }
+                       showdir($msg);
+               } else { 
+                       echo '<h3><b>Rename file "/'.$_GET["rfp"].'":</b></h3>';
+                       $splitpath =  preg_split( "/\//", strrev($_GET["rfp"]), 2);
+                       $file = strrev($splitpath[0]);
+                       $parent = strrev($splitpath[1]);
+                       echo '> <a href="'.$_SERVER['HTTP_REFERER'].'">Cancel rename</a><br />';                
+                       ?>
+                               <form method="post" action="<?php echo $pluginsskinfiles?>/">
+                                       <input type="hidden" name="action" value="renfile" />
+                                       <input type="hidden" name="oldname" value="<?php echo $_GET["rfp"] ?>"/>
+                                       <input type="hidden" name="dir" value="<?php echo "/$parent" ?>"/>
+                                       <table><tr>
+                                               <td><?php echo 'Rename to'?></td>
+                                               <td><input name="newname" tabindex="90" value="<?php echo  htmlspecialchars($file) ?>" maxlength="50" size="20" /></td>
+                                       </tr><tr>
+                                               <td><?php echo "Rename"?></td>
+                                               <td><input type="submit" tabindex="140" value="<?php echo "Rename this file"?>" onclick="return checkSubmit();" /></td>
+                                       </tr></table>
+                               </form>
+                       <?PHP
+               }
+       }
+
+       function delfile() {
+               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;
+               if (isset($_GET['sure'])) { 
+                       $file = $DIR_SKINS.$SKINSUBDIR.$_GET["rfp"];
+                       $errrep = error_reporting(E_ERROR);
+                       if (unlink ($file)) {
+                               $msg = 'File "'.$_GET["rfp"].'" has been deleted.';
+                       } else {
+                               $msg = 'ERROR: File "'.$_GET["rfp"].'" could not be deleted.';
+                       }
+                       error_reporting($errrep);
+                       showdir($msg);
+               } else {
+                       $file = $DIR_SKINS.$SKINSUBDIR.$_GET["rfp"];
+                       $splitpath =  preg_split( "/\//", strrev($_GET["rfp"]), 2);
+                       $parent = strrev($splitpath[1]);
+                       echo '<h3><b>Delete file "'.$_GET["rfp"].'": are you sure?</b></h3>';
+                       echo '<b>This action cannot be undone!</b><br /><br />';
+                       echo "> <a href=\"$pluginsskinfiles/?action=delfile&dir=$parent&sure=y&rfp=".$_GET["rfp"]."\">Yes, delete the file.</a><br />";         
+                       echo "> <a href=\"$pluginsskinfiles/?dir=".$parent.'">No, go back.</a><br />';          
+               }
+       }
+
+       function deldir() {
+               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;
+               if (isset($_GET['sure'])) { 
+                       $dir = $DIR_SKINS.$SKINSUBDIR.$_GET["remdir"];
+                       $errrep = error_reporting(E_ERROR);
+                       if (rmdir ($dir)) {
+                               $msg = 'Directory "'.$_GET["remdir"].'" has been deleted.';
+                       } else {
+                               $msg = 'ERROR: directory "'.$_GET["remdir"].'" could not be deleted - (check to see if it contains files).';
+                       }
+                       error_reporting($errrep);
+                       showdir($msg);
+               } else {
+                       $dir = preg_replace("/^\//", "",$_GET['remdir']);
+                       $parent = $_GET['dir'];
+                       echo '<h3><b>Delete directory "/'.$dir.'": are you sure?</b></h3>';
+                       echo '<b>This action cannot be undone!</b><br /><br />';
+                       echo "> <a href=\"$pluginsskinfiles/?action=deldir&sure=y&remdir=$dir&dir=$parent\">Yes, delete the directory (it must be empty to do this).</a><br /><br />";          
+                       echo "> <a href=\"$pluginsskinfiles/?dir=".$parent.'">No, go back.</a><br />';          
+               }
+       }
+
+       function deleteAllInDir() {
+               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles;
+               $parent = $DIR_SKINS.$SKINSUBDIR.preg_replace("/^\//", "",$_GET['dir']);
+               if ($dh = @opendir($parent)) { 
+                       while (($file = readdir($dh)) !== false) { 
+                               if(!preg_match("/^\.{1,2}/", $file)){
+                                       if (!is_dir($parent.$file)) {
+                                               $files[] = $file;
+                                       }
+                               }
+                       }
+                       closedir($dh); 
+               } 
+               if (isset($_GET['sure'])) { 
+                       $errrep = error_reporting(E_ERROR);
+                       echo '<h3>Deletion results</h3><table>';
+                       echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET["dir"]."\">Return to the /".$_GET["dir"]." directory.</a><br />";              
+                       foreach ($files as $file) {
+                               if (unlink ("$parent/$file")) { 
+                                       echo "<tr><td>File: $file was deleted.</td></tr>"; 
+                               } else {
+                                       echo "<tr><td>File: $file was <b>NOT</b> deleted.</td></tr>";
+                               }
+                       }
+                       echo "</table>";
+                       error_reporting($errrep);
+                       echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET["dir"]."\">Return to the /".$_GET["dir"]." directory.</a><br />";              
+               } else {
+                       echo '<h3><b>Delete all files in directory "/'.$_GET['dir'].'": are you sure?</b></h3>';
+                       echo '<b>This action cannot be undone!</b><br /><br />';
+                       echo "> <a href=\"$pluginsskinfiles/?action=deleteAllInDir&sure=y&dir=".$_GET["dir"]."\">Yes, delete <u>all files</u> in this directory.</a><br />";            
+                       echo "> <a href=\"$pluginsskinfiles/?dir=".$_GET['dir'].'">No, go back.</a><br /><br />';               
+                       echo '<b>Files list:</b><table>';
+                       foreach ($files as $file) {     echo "<tr><td>$file</td></tr>"; }
+                       echo '</table>';
+               }
+       }
+
+       // function for MDNucleus; won't work unless $privateskins is set to true
+       function getLatestSkins() {
+               global $DIR_SKINS, $pluginsskinfiles, $privateskins, $latestskins, $member;
+               $confirmed = $_POST['overwrite'];
+               if (!$confirmed) {
+                       showdir("Overwrite of default skin files not confirmed - no action taken.");
+                       return;
+               }
+               if ($dh = @opendir($DIR_SKINS.$latestskins)) { 
+                       while (($file = readdir($dh)) !== false) { 
+                               if(!preg_match("/^\.{1,2}/", $file))
+                                       if (is_dir($DIR_SKINS.$latestskins.$file)) $skins[] = $file;
+                       }
+                       closedir($dh); 
+               } 
+               if ($skins) {
+                       $msg = "Refreshed skin folders:";
+                       sort ($skins);
+                       foreach ($skins as $skin) {
+                               $memberskin = $DIR_SKINS.$member->getID().'/'.$skin;
+                               if (is_file($memberskin)) unlink($memberskin);
+                               if (!is_dir($memberskin)) {
+                                       $old_umask = umask(0);
+                                       mkdir($memberskin, 0755);
+                                       umask($old_umask);
+                               }
+                               exec("rsync -Wtr --delete ".$DIR_SKINS.$latestskins.$skin."/* ".$memberskin.'/');
+                               $msg .= "  $skin";
+                       }
+               } else {
+                       showdir("No default skin folders found.  No action taken.");
+                       return;
+               }
+               showdir($msg);
+       }
+
+       function _isImageFile($file) {
+               return preg_match ("/\.(gif|png|jpg|jpeg|bmp|ico)$/i", $file);
+       }
+
+       function _isEditableFile($file) {
+               return preg_match ("/\.(inc|txt|htm|html|xml)$/i", $file);
+       }
+
+       function showdir($msg = '') {
+               global $DIR_SKINS, $SKINSUBDIR, $pluginsskinfiles, $CONF;
+               global $privateskins, $latestskins;
+               if (isset($_GET['dir'])) { 
+                       $newdir = preg_replace("/^\//", "",$_GET['dir']);
+                       $currdir = $DIR_SKINS.$SKINSUBDIR."$newdir/";
+                       $in_subdir = 1;
+               } elseif (isset($_POST['dir'])) { 
+                       $newdir = preg_replace("/^\//", "",$_POST['dir']);
+                       $currdir = $DIR_SKINS.$SKINSUBDIR."$newdir/";
+                       $in_subdir = 1;
+               } else {
+                       $newdir = '';
+                       $currdir = $DIR_SKINS.$SKINSUBDIR;
+                       $in_subdir = 0;
+               }
+       
+               if ($privateskins && (!is_dir($DIR_SKINS.$SKINSUBDIR))) {
+                       $oldumask = umask(0);
+                       mkdir($DIR_SKINS.$SKINSUBDIR, 0755);
+                       umask($oldmask);
+               }
+
+               if (!is_dir($currdir)) {
+                       echo 'The specified location is not a directory or doesn\'t exist.';
+                       return;
+               }
+               
+               if ($dh = @opendir($currdir)) { 
+                       while (($file = readdir($dh)) !== false) { 
+                               if(!preg_match("/^\.{1,2}/", $file)){
+                                       if (is_dir($currdir.$file)) {
+                                               $dirs[] = $file;
+                                       } else {
+                                               $files[] = $file;
+                                       }
+                               }
+                       }
+                       closedir($dh); 
+               } 
+               
+               echo "<h3>Current Directory: <b>/$newdir</b></h3>";
+               
+               if ($msg) {
+                       echo '<p><b>'.htmlspecialchars($msg).'</b></p>';
+               }
+               
+               if ($newdir != '') {
+                       echo "<u><a href=\"$pluginsskinfiles/\">> Return to / <</a></u><br />";
+                       if (strstr($newdir, '/')) {
+                               $splitpath =  preg_split( "/\//", strrev($newdir), 2);
+                               $updir = strrev($splitpath[1]);
+                               echo "<u><a href=\"$pluginsskinfiles/?dir=/$updir\">> Return to /$updir <</a></u><br /><br />";
+                       }
+               }
+               echo "<u><a href=\"$pluginsskinfiles/?dir=$newdir\">> Refresh <</a></u><br />";
+
+               echo "<table>";
+               if(is_array($dirs)){
+                       sort($dirs);
+                       foreach($dirs as $dir) {
+                               echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'><td>";
+                               echo "&nbsp;&nbsp;<a href=\"$pluginsskinfiles/?dir=$newdir/$dir\">";
+                               echo "<img src=\"$pluginsskinfiles/dir.gif\"> $dir</a>&nbsp;</td>";
+                               echo "<td>&nbsp;<a href=\"$pluginsskinfiles/?action=rendir&oldname=$newdir/$dir\" title=\"Rename directory\">(ren)</a></td>";
+                               echo "<td>&nbsp;<a href=\"$pluginsskinfiles/?action=deldir&dir=$newdir&remdir=$newdir/$dir\" title=\"Delete directory\">(del)</a></td>";
+                               echo "</td><td></td><td></td><td></td><td>";
+                               echo "<td>".date('M d, Y  h:i:s a', filemtime($DIR_SKINS.$SKINSUBDIR.$newdir."/$dir"));
+                               echo "</td></tr>";
+                       }
+               }
+       
+               if(is_array($files)){
+                       sort($files);
+                       foreach($files as $file) {
+                               echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'><td>";
+                               echo "&nbsp;&nbsp;";
+                               if (preg_match("/\.css$/i", $file)) {
+                                       echo "<img src=\"$pluginsskinfiles/css.gif\"> ";
+                               } elseif (preg_match("/\.php(3|4)?$/i", $file)) {
+                                       echo "<img src=\"$pluginsskinfiles/php.gif\"> ";
+                               } elseif (_isEditableFile($file)) {
+                                       echo "<img src=\"$pluginsskinfiles/text.gif\"> ";
+                               } elseif (_isImageFile($file)) {
+                                       echo "<img src=\"$pluginsskinfiles/image.gif\"> ";
+                               } else {
+                                       echo "<img src=\"$pluginsskinfiles/generic.png\"> ";
+                               }
+                               if ($newdir == '') {$thisdir = '';} else {$thisdir = "$newdir/";}
+                               echo "$file&nbsp;";
+                               echo "</td><td>";
+                               echo "&nbsp;<a href=\"$pluginsskinfiles/?action=renfile&rfp=$thisdir"."$file\" title=\"Rename file\">(ren)</a>";
+                               echo "</td><td>";
+                               echo "&nbsp;<a href=\"$pluginsskinfiles/?action=delfile&rfp=$thisdir"."$file\" title=\"Delete file\">(del)</a>";
+                               echo "</td><td>";
+                               if ((is_writable($DIR_SKINS.$SKINSUBDIR.$thisdir.$file)) && (!_isImageFile($file))) {
+                                       echo "&nbsp;<a href=\"$pluginsskinfiles/?action=editfile&rfp=$thisdir"."$file\" title=\"Edit file\">(edit)</a>";
+                               }
+                               echo "</td><td>";
+                               if (_isImageFile($file)) {
+                                       echo '&nbsp;<a href="'.$CONF['SkinsURL'].$SKINSUBDIR.$thisdir."$file\" title=\"View graphic\">(view)</a>";
+                               }
+                               echo "</td><td>";
+                               echo "&nbsp;<a href=\"$pluginsskinfiles/?action=download&rfp=$thisdir"."$file\" title=\"Download file\">(d/l)</a>";
+                               echo "</td><td>";
+                               echo number_format(filesize($DIR_SKINS.$SKINSUBDIR.$thisdir.$file)/1024, 2)." KB";
+                               echo "</td><td>";
+                               echo date('M d, Y  h:i:s a', filemtime($DIR_SKINS.$SKINSUBDIR.$thisdir.$file));
+                               echo "</td></tr>";
+                       }
+               }
+               echo "</table>";
+       
+               if(is_array($dirs) || is_array($files)) {
+                       if ($newdir != '') {
+                               echo "<u><a href=\"$pluginsskinfiles/\">> Return to / <</a></u><br />";
+                               if (strstr($newdir, '/')) {
+                                       $splitpath =  preg_split( "/\//", strrev($newdir), 2);
+                                       $updir = strrev($splitpath[1]);
+                                       echo "<u><a href=\"$pluginsskinfiles/?dir=/$updir\">> Return to /$updir <</a></u><br /><br />";
+                               }
+                       }
+                       echo "<u><a href=\"$pluginsskinfiles/?dir=$newdir\">> Refresh <</a></u><br />";
+               }
+
+               if ($newdir != '') {
+                       echo "<h3>Create new file in <b>/$newdir</b></h3>";
+                               ?>
+                               <form method="POST" enctype="multipart/form-data" action="<?php echo $pluginsskinfiles ?>/">
+                                               <input type="hidden" name="action" value="createfile" />
+                                               <input type="hidden" name="dir" value="<?php echo $newdir ?>">
+                                               <input type="text" name="filename" size="40">
+                                               <input type="submit" value="<?php echo 'Create file' ?>" />
+                                       </form>
+                               <?PHP
+
+                               echo "<h3>Upload new file to <b>/$newdir</b></h3>";
+                               ?>
+                               <form method="POST" enctype="multipart/form-data" action="<?php echo $pluginsskinfiles ?>/">
+                                               <input type="hidden" name="action" value="uploadfile" />
+                                               <input type="hidden" name="dir" value="<?php echo $newdir ?>">
+                                               <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $CONF['MaxUploadSize']?>" />
+                                               <input type="file" name="filename" size="40">
+                                               <input type="submit" value="<?php echo _UPLOAD_BUTTON?>" />
+                                       </form>
+                               <?PHP
+       
+                       if (count($files)) {
+                               echo "<h3>Delete all files in <b>/$newdir</b></h3>";
+                                       ?>
+                                               <form method="get" action="<?php echo $pluginsskinfiles?>/">
+                                                       <input type="hidden" name="action" value="deleteAllInDir" />
+                                                       <input type="hidden" name="dir" value="<?php echo $newdir?>"/>
+                                                       <?php echo "Delete all Files? (will ask for confirmation)"?>
+                                                       <input type="submit" tabindex="140" value="<?php echo "Delete All"?>" onclick="return checkSubmit();" />
+                                               </form>
+                                       <?PHP
+                       }
+               }
+       
+               echo "<h3>Create a new directory in <b>/$newdir</b></h3>"; 
+                               ?>
+                                       <form method="post" action="<?php echo $pluginsskinfiles?>/">
+                                               <input type="hidden" name="action" value="createdir" />
+                                               <input type="hidden" name="dir" value="<?php echo $newdir?>"/>
+                                               <input name="newdir" tabindex="90" value="<?php echo 'newdir' ?>" size="40" />
+                                               <input type="submit" tabindex="140" value="<?php echo "Create"?>" onclick="return checkSubmit();" />
+                                       </form>
+                               <?PHP
+
+               // for MDNucleus, ignored if on Win32 platform (for the moment)
+               if (($newdir == '') && ($privateskins) && (!strtoupper(substr(PHP_OS, 0,3) == 'WIN'))) {
+                       if ($dh = @opendir($DIR_SKINS.$latestskins)) { 
+                               while (($file = readdir($dh)) !== false) { 
+                                       if(!preg_match("/^\.{1,2}/", $file))
+                                               if (is_dir($DIR_SKINS.$latestskins.$file)) $skins[] = $file;
+                               }
+                               closedir($dh); 
+                       }
+                       if ($skins) {
+                               echo "<h3>Refresh default skin files to standard versions</h3>";
+                               ?>
+                                       <form method="post" action="<?php echo $pluginsskinfiles?>/">
+                                               <input type="hidden" name="action" value="getLatestSkins" />
+                                               <?php
+                                               sort ($skins);
+                                               if (count($skins) > 1) {
+                                                       $lastskin = array_pop($skins);
+                                                       array_push($skins, "</b>and<b> $lastskin");
+                                               }
+                                               echo "This will overwrite or create files in the following skin file directories: <b>";
+                                               echo implode(", ", $skins)."</b><br /><br />"; 
+                                               ?> 
+                                               Note that you may need to re-import skin definitions you wish to use (See Layout Import/Export).<br /><br />
+                                               <input type="checkbox" name="overwrite" value="1" id="cb_overwrite" />
+                                               <label for="cb_overwrite"><?php echo "Check this box to confirm overwrite of files<br />" ?></label>
+                                               <input type="submit" tabindex="140" value="<?php echo "Overwrite Default Skin Files"?>" onclick="return checkSubmit();" />
+                                       </form>
+                               <?PHP
+                       }
+               }
+
+       }
+
+       
+       
 ?>
\ No newline at end of file
index 7735fde..1bc3678 100644 (file)
Binary files a/nucleus/plugins/skinfiles/php.gif and b/nucleus/plugins/skinfiles/php.gif differ
index 1adf40d..b2f1ddf 100755 (executable)
@@ -1,40 +1,40 @@
-/*\r
-       This stylesheet serves to make item previews look nicer, and to markup the \r
-       buttonbar\r
-       \r
-       $Id: addedit.css,v 1.4 2005-03-15 08:08:52 kimitake Exp $\r
-       $NucleusJP$\r
-*/\r
-\r
-.leftbox, .rightbox {\r
-       margin: 3px;\r
-       padding: 3px;\r
-       font-size: larger;\r
-       width: 20%;\r
-}\r
-.leftbox {\r
-       float: left;\r
-       border-right: 2px solid #888;   \r
-}\r
-.rightbox {\r
-       float: right;\r
-       border-left: 2px solid #888;    \r
-}\r
-\r
-/* markup buttons */\r
-.jsbutton {\r
-       text-align: center; \r
-\r
-       padding: 3px;\r
-       border: 1px solid #dddddd;\r
-}\r
-\r
-.jsbuttonspacer {\r
-       padding-right: 10px;\r
-}\r
-\r
-.jsbuttonbar {\r
-       padding: 3px;\r
-       cursor: default;\r
-}\r
-\r
+/*
+       This stylesheet serves to make item previews look nicer, and to markup the 
+       buttonbar
+       
+       $Id: addedit.css,v 1.5 2006-07-12 07:11:48 kimitake Exp $
+       $NucleusJP: addedit.css,v 1.4 2005/03/15 08:08:52 kimitake Exp $
+*/
+
+.leftbox, .rightbox {
+       margin: 3px;
+       padding: 3px;
+       font-size: larger;
+       width: 20%;
+}
+.leftbox {
+       float: left;
+       border-right: 2px solid #888;   
+}
+.rightbox {
+       float: right;
+       border-left: 2px solid #888;    
+}
+
+/* markup buttons */
+.jsbutton {
+       text-align: center; 
+
+       padding: 3px;
+       border: 1px solid #dddddd;
+}
+
+.jsbuttonspacer {
+       padding-right: 10px;
+}
+
+.jsbuttonbar {
+       padding: 3px;
+       cursor: default;
+}
+
index 21cda84..9e38b8d 100755 (executable)
-/* \r
-       style definitions for the bookmarklet \r
-       \r
-       $Id: bookmarklet.css,v 1.3 2005-03-12 06:19:06 kimitake Exp $\r
-       $NucleusJP$\r
-*/\r
-\r
-body {\r
-       font-size: small;\r
-       background: #fff;\r
-       color: #000;\r
-    font-family: "Trebuchet MS",Trebuchet,"Bitstream Vera Sans",verdana,lucida,arial,helvetica,sans-serif\r
-}              \r
-\r
-textarea {\r
-  font-family: "Hiragino Kaku Gothic Pro W3", "MS PGothic", "Osaka", sans-serif;\r
-}\r
-\r
-h1 {\r
-       border-bottom: 1px dotted gray;\r
-       font-size: medium;\r
-       color: #596d9d;\r
-}\r
-\r
-/* \r
-       Hide switch buttons initially, we'll enable them again if we are sure\r
-       the browser supports DOM\r
-*/\r
-#switchbuttons {\r
-       display: none;\r
-}\r
-/*\r
-       Hide preview also when no DOM is supported\r
-*/\r
-#preview {\r
-       display: none;\r
-}\r
-\r
-.buttonbar {\r
-   margin-bottom: 5px;\r
-   background: rgb(187, 187, 204);\r
-   padding: 3px;\r
-}\r
-\r
-.buttonbar input {\r
-   background: #C5C5D3;\r
-    border: 1px solid #CACAD7;\r
-    border-right: 2px solid #8E8EAB;\r
-    border-bottom: 2px solid #8E8EAB;\r
-    color: #000000;\r
-    font-family: "Trebuchet MS",Trebuchet,"Bitstream Vera Sans",verdana,lucida,arial,helvetica,sans-serif;\r
-    font-weight: bold;   \r
-}\r
-\r
-.contentblock {\r
-       /*background: #ddd;*/\r
-       height: 400px;\r
-       overflow: auto; /* temporary removed, to make the select box work in Mozilla */\r
-       padding: 1px;\r
-    margin: 0px;\r
-       vertical-align: top;\r
-}\r
-\r
-.shortcuts {\r
-       float: right; \r
-       text-align: right;\r
-       font-size: x-small;\r
-}\r
-\r
-#options {\r
-   margin-top:-15px;\r
-   }\r
-#options h2 {\r
-   margin:15px 0 0 0;\r
-}\r
-\r
-h2 {\r
-   font-size: 1.5em;\r
-   color: gray;\r
-    margin-top: 0px;\r
-    padding-top: 0px;\r
-    padding-bottom: 0px;\r
-    margin-top: 0px;\r
-}\r
-\r
-a:link, a:visited {\r
-       color: #1D3565; \r
-       font-weight: bold;\r
-       text-decoration: none;\r
-}\r
-\r
-a:hover {\r
-       text-decoration: underline;\r
-}                      \r
-\r
-img { \r
-       border: none;\r
-}\r
-\r
-.indent {\r
-       margin-left: 40px;\r
-}\r
-\r
-label          { cursor: pointer; }\r
-\r
-table {\r
-       border: none;\r
-       width: 95%;\r
-       border-collapse: collapse;\r
-       margin-bottom: 10px;\r
-       margin-top: 10px;       \r
-}\r
-\r
-th {\r
-       background: #bbc;\r
-       color: #000;\r
-       font-size: small;\r
-}\r
-\r
-th, td {\r
-       padding: 4px;\r
-       empty-cells: show;      \r
-}\r
-\r
-td {\r
-       background: #fff;\r
-       border: 1px solid #ddd;\r
-       font-size: small;\r
-       vertical-align: top;\r
-       text-align: left;\r
-}\r
-\r
-td a:link, td a:visited { \r
-       text-decoration: underline;\r
-       color: black;\r
-       font-weight: normal;\r
-}\r
-td a:hover {\r
-       color: #1D3565;\r
-       text-decoration: underline;\r
-}\r
-\r
-td.draft, td.future {\r
-       background: #ffe;\r
-}\r
-\r
-tr.highlighted td {\r
-       background: green;\r
-}\r
-\r
-ul.nobullets {\r
-       list-style-type: none;\r
-       padding: 0;\r
-       margin: 0;\r
-}\r
+/* 
+       style definitions for the bookmarklet 
+       
+       $Id: bookmarklet.css,v 1.4 2006-07-12 07:11:48 kimitake Exp $
+       $NucleusJP: bookmarklet.css,v 1.3 2005/03/12 06:19:06 kimitake Exp $
+*/
+
+body {
+       font-size: small;
+       background: #fff;
+       color: #000;
+    font-family: "Trebuchet MS",Trebuchet,"Bitstream Vera Sans",verdana,lucida,arial,helvetica,sans-serif
+}              
+
+textarea {
+  font-family: "Hiragino Kaku Gothic Pro W3", "MS PGothic", "Osaka", sans-serif;
+}
+
+h1 {
+       border-bottom: 1px dotted gray;
+       font-size: medium;
+       color: #596d9d;
+}
+
+/* 
+       Hide switch buttons initially, we'll enable them again if we are sure
+       the browser supports DOM
+*/
+#switchbuttons {
+       display: none;
+}
+/*
+       Hide preview also when no DOM is supported
+*/
+#preview {
+       display: none;
+}
+
+.buttonbar {
+   margin-bottom: 5px;
+   background: rgb(187, 187, 204);
+   padding: 3px;
+}
+
+.buttonbar input {
+   background: #C5C5D3;
+    border: 1px solid #CACAD7;
+    border-right: 2px solid #8E8EAB;
+    border-bottom: 2px solid #8E8EAB;
+    color: #000000;
+    font-family: "Trebuchet MS",Trebuchet,"Bitstream Vera Sans",verdana,lucida,arial,helvetica,sans-serif;
+    font-weight: bold;   
+}
+
+.contentblock {
+       /*background: #ddd;*/
+       height: 400px;
+       overflow: auto; /* temporary removed, to make the select box work in Mozilla */
+       padding: 1px;
+    margin: 0px;
+       vertical-align: top;
+}
+
+.shortcuts {
+       float: right; 
+       text-align: right;
+       font-size: x-small;
+}
+
+#options {
+   margin-top:-15px;
+   }
+#options h2 {
+   margin:15px 0 0 0;
+}
+
+h2 {
+   font-size: 1.5em;
+   color: gray;
+    margin-top: 0px;
+    padding-top: 0px;
+    padding-bottom: 0px;
+    margin-top: 0px;
+}
+
+a:link, a:visited {
+       color: #1D3565; 
+       font-weight: bold;
+       text-decoration: none;
+}
+
+a:hover {
+       text-decoration: underline;
+}                      
+
+img { 
+       border: none;
+}
+
+.indent {
+       margin-left: 40px;
+}
+
+label          { cursor: pointer; }
+
+table {
+       border: none;
+       width: 95%;
+       border-collapse: collapse;
+       margin-bottom: 10px;
+       margin-top: 10px;       
+}
+
+th {
+       background: #bbc;
+       color: #000;
+       font-size: small;
+}
+
+th, td {
+       padding: 4px;
+       empty-cells: show;      
+}
+
+td {
+       background: #fff;
+       border: 1px solid #ddd;
+       font-size: small;
+       vertical-align: top;
+       text-align: left;
+}
+
+td a:link, td a:visited { 
+       text-decoration: underline;
+       color: black;
+       font-weight: normal;
+}
+td a:hover {
+       color: #1D3565;
+       text-decoration: underline;
+}
+
+td.draft, td.future {
+       background: #ffe;
+}
+
+tr.highlighted td {
+       background: green;
+}
+
+ul.nobullets {
+       list-style-type: none;
+       padding: 0;
+       margin: 0;
+}
index 1e1b1df..417c76c 100755 (executable)
Binary files a/nucleus/styles/logo.gif and b/nucleus/styles/logo.gif differ
index 929426a..a730719 100755 (executable)
-/*\r
-       documentation style\r
-       \r
-       $Id: manual.css,v 1.3 2005-03-12 06:19:06 kimitake Exp $\r
-       $NucleusJP$\r
-*/\r
-\r
-body {\r
-       background-color: #fff;\r
-       color: #000;\r
-       font-family: verdana, arial;\r
-       font-size: small;\r
-}\r
-\r
-@media screen {\r
-       body {\r
-               margin-left: 10%;\r
-               margin-right: 10%;\r
-       }\r
-}\r
-\r
-@media print {\r
-       pre, .note, td, th {\r
-               border: 1px dashed gray;\r
-       }\r
-}\r
-\r
-img {\r
-       border: none;\r
-}\r
-\r
-a:link, a:visited {\r
-       color: #1D3565; \r
-       font-weight: bold;\r
-       text-decoration: none;\r
-}\r
-a: hover {\r
-       text-decoration: underline;\r
-}\r
-\r
-.heading {\r
-       text-align: center;\r
-       font-size: xx-large;\r
-       font-weight: bold;\r
-       color: gray;    \r
-}\r
-\r
-.heading i {\r
-       position: absolute;\r
-       top: 5px;\r
-       right: 5px;\r
-       font-size: small;\r
-       font-style: normal;\r
-       font-weight: normal;\r
-}\r
-\r
-p:first-letter {\r
-       font-size: large;\r
-}\r
-\r
-p {\r
-       text-indent: 20px;\r
-}\r
-\r
-h1 {\r
-       border-bottom: 1px dotted gray;\r
-       font-size: x-large;\r
-       color: #596d9d;\r
-}\r
-\r
-h2 {\r
-       color: gray;\r
-       font-size: large;\r
-       margin-left: 20px;\r
-       text-indent: 10px;\r
-       border-bottom: 1px solid #ddd;\r
-}\r
-\r
-pre, .note, .faq .answer {\r
-       background-color: #ddd;\r
-       padding: 10px;\r
-       font-size: small;\r
-}\r
-\r
-.screenshot {\r
-       text-align: center;\r
-       background-color: #ddd;\r
-       padding: 10px;\r
-}\r
-\r
-.faq .question {\r
-       font-weight: bold;\r
-       margin-bottom: 0px;\r
-}\r
-\r
-.faq .answer {\r
-\r
-}\r
-\r
-.faq {\r
-       margin-bottom: 20px;\r
-}\r
-\r
-table {\r
-       border: none;\r
-}\r
-\r
-th {\r
-       background-color: linen;\r
-       font-size: medium;\r
-}\r
-\r
-th, td {\r
-       padding: 5px;\r
-}\r
-\r
-td {\r
-       background-color: #dddddd;\r
-       font-size: small;\r
-       vertical-align: top;\r
-       text-align: left;\r
-}\r
-\r
-input, select, option, textarea {\r
-       background-color: transparent;\r
-}\r
-\r
-.deprecated {\r
-       border: 3px solid red;\r
-       padding: 5px;\r
-       font-size: medium;\r
-}\r
-\r
-tt, code, samp {\r
-       font-size: small;\r
-}\r
-\r
-.warning {\r
-       color: red;\r
-}\r
-.ok {\r
-       color: green;\r
-}\r
-\r
-acronym, abbr {\r
-       border-bottom: 1px dotted gray;\r
-       cursor: help;\r
-}\r
-\r
-label {\r
-       cursor: hand;\r
-}\r
+/*
+       documentation style
+       
+       $Id: manual.css,v 1.4 2006-07-12 07:11:48 kimitake Exp $
+       $NucleusJP: manual.css,v 1.3 2005/03/12 06:19:06 kimitake Exp $
+*/
+
+body {
+       background-color: #fff;
+       color: #000;
+       font-family: verdana, arial;
+       font-size: small;
+}
+
+@media screen {
+       body {
+               margin-left: 10%;
+               margin-right: 10%;
+       }
+}
+
+@media print {
+       pre, .note, td, th {
+               border: 1px dashed gray;
+       }
+}
+
+img {
+       border: none;
+}
+
+a:link, a:visited {
+       color: #1D3565; 
+       font-weight: bold;
+       text-decoration: none;
+}
+a: hover {
+       text-decoration: underline;
+}
+
+.heading {
+       text-align: center;
+       font-size: xx-large;
+       font-weight: bold;
+       color: gray;    
+}
+
+.heading i {
+       position: absolute;
+       top: 5px;
+       right: 5px;
+       font-size: small;
+       font-style: normal;
+       font-weight: normal;
+}
+
+p:first-letter {
+       font-size: large;
+}
+
+p {
+       text-indent: 20px;
+}
+
+h1 {
+       border-bottom: 1px dotted gray;
+       font-size: x-large;
+       color: #596d9d;
+}
+
+h2 {
+       color: gray;
+       font-size: large;
+       margin-left: 20px;
+       text-indent: 10px;
+       border-bottom: 1px solid #ddd;
+}
+
+pre, .note, .faq .answer {
+       background-color: #ddd;
+       padding: 10px;
+       font-size: small;
+}
+
+.screenshot {
+       text-align: center;
+       background-color: #ddd;
+       padding: 10px;
+}
+
+.faq .question {
+       font-weight: bold;
+       margin-bottom: 0px;
+}
+
+.faq .answer {
+
+}
+
+.faq {
+       margin-bottom: 20px;
+}
+
+table {
+       border: none;
+}
+
+th {
+       background-color: linen;
+       font-size: medium;
+}
+
+th, td {
+       padding: 5px;
+}
+
+td {
+       background-color: #dddddd;
+       font-size: small;
+       vertical-align: top;
+       text-align: left;
+}
+
+input, select, option, textarea {
+       background-color: transparent;
+}
+
+.deprecated {
+       border: 3px solid red;
+       padding: 5px;
+       font-size: medium;
+}
+
+tt, code, samp {
+       font-size: small;
+}
+
+.warning {
+       color: red;
+}
+.ok {
+       color: green;
+}
+
+acronym, abbr {
+       border-bottom: 1px dotted gray;
+       cursor: help;
+}
+
+label {
+       cursor: hand;
+}
index 3763945..dae9a57 100755 (executable)
-/*\r
-       media library popup\r
-       \r
-       $Id: popups.css,v 1.3 2005-03-12 06:19:06 kimitake Exp $\r
-       $NucleusJP$\r
-*/\r
-\r
-body {\r
-       font-family: verdana, arial;\r
-       font-size: small;\r
-       background-color: #fff;\r
-       color: #000;\r
-}\r
-\r
-img {\r
-       border: none;\r
-}\r
-\r
-a:link, a:visited {\r
-       color: #1D3565; \r
-       font-weight: bold;\r
-       text-decoration: none;\r
-}\r
-a:hover {\r
-       text-decoration: underline;\r
-}\r
-\r
-.heading {\r
-       text-align: center;\r
-       font-size: xx-large;\r
-       font-weight: bold;\r
-       color: gray;    \r
-}\r
-\r
-.heading i {\r
-       position: absolute;\r
-       top: 5px;\r
-       right: 5px;\r
-       font-size: small;\r
-       font-style: normal;\r
-       font-weight: normal;\r
-}\r
-\r
-p {\r
-       text-indent: 20px;\r
-}\r
-\r
-h1 {\r
-       border-bottom: 1px dotted gray;\r
-       font-size: x-large;\r
-       color: #596d9d;\r
-}\r
-\r
-h2 {\r
-       color: gray;\r
-       font-size: large;\r
-       margin-left: 20px;\r
-       text-indent: 10px;\r
-       border-bottom: 1px solid #ddd;\r
-}\r
-\r
-pre, .note, .faq .answer {\r
-       background-color: #ddd;\r
-       padding: 10px;\r
-       font-size: small;\r
-}\r
-\r
-.faq .question {\r
-       font-weight: bold;\r
-       margin-bottom: 0px;\r
-}\r
-\r
-.faq .answer {\r
-\r
-}\r
-\r
-.faq {\r
-       margin-bottom: 20px;\r
-}\r
-\r
-table {\r
-       border: none;\r
-}\r
-\r
-th {\r
-       background-color: linen;\r
-       font-size: medium;\r
-}\r
-\r
-th, td {\r
-       padding: 5px;\r
-}\r
-\r
-td {\r
-       background-color: #dddddd;\r
-       font-size: small;\r
-       vertical-align: top;\r
-       text-align: left;\r
-}\r
-\r
-label {\r
-       cursor: pointer;\r
-}\r
+/*
+       media library popup
+       
+       $Id: popups.css,v 1.4 2006-07-12 07:11:48 kimitake Exp $
+       $NucleusJP: popups.css,v 1.3 2005/03/12 06:19:06 kimitake Exp $
+*/
+
+body {
+       font-family: verdana, arial;
+       font-size: small;
+       background-color: #fff;
+       color: #000;
+}
+
+img {
+       border: none;
+}
+
+a:link, a:visited {
+       color: #1D3565; 
+       font-weight: bold;
+       text-decoration: none;
+}
+a:hover {
+       text-decoration: underline;
+}
+
+.heading {
+       text-align: center;
+       font-size: xx-large;
+       font-weight: bold;
+       color: gray;    
+}
+
+.heading i {
+       position: absolute;
+       top: 5px;
+       right: 5px;
+       font-size: small;
+       font-style: normal;
+       font-weight: normal;
+}
+
+p {
+       text-indent: 20px;
+}
+
+h1 {
+       border-bottom: 1px dotted gray;
+       font-size: x-large;
+       color: #596d9d;
+}
+
+h2 {
+       color: gray;
+       font-size: large;
+       margin-left: 20px;
+       text-indent: 10px;
+       border-bottom: 1px solid #ddd;
+}
+
+pre, .note, .faq .answer {
+       background-color: #ddd;
+       padding: 10px;
+       font-size: small;
+}
+
+.faq .question {
+       font-weight: bold;
+       margin-bottom: 0px;
+}
+
+.faq .answer {
+
+}
+
+.faq {
+       margin-bottom: 20px;
+}
+
+table {
+       border: none;
+}
+
+th {
+       background-color: linen;
+       font-size: medium;
+}
+
+th, td {
+       padding: 5px;
+}
+
+td {
+       background-color: #dddddd;
+       font-size: small;
+       vertical-align: top;
+       text-align: left;
+}
+
+label {
+       cursor: pointer;
+}
index 87d7e5a..e80a05d 100755 (executable)
Binary files a/nucleus/styles/quickb-hover.jpg and b/nucleus/styles/quickb-hover.jpg differ
index b617305..963e051 100755 (executable)
Binary files a/nucleus/styles/quickb.jpg and b/nucleus/styles/quickb.jpg differ
index 794370c..31b4f28 100755 (executable)
@@ -1,27 +1,27 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <!--\r
-               This html file is needed because Nucleus 0.95 has a static index.html file\r
-               in this directory, and some servers prefer to serve index.html rather than\r
-               index.php when it is available.\r
-       -->\r
-       <title>Nucleus - Upgrades</title>\r
-       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
-       <meta http-equiv="Refresh" content="0; url=index.php" />\r
-       <style type="text/css">\r
-       <!--\r
-               @import url(../styles/manual.css);\r
-       -->\r
-       </style>\r
-</head>\r
-<body>\r
-\r
-<h1>Transfer</h1>\r
-\r
-<p>\r
-<a href="index.php">If you aren't transferred automatically, click here.</a>\r
-</p>\r
-\r
-</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <!--
+               This html file is needed because Nucleus 0.95 has a static index.html file
+               in this directory, and some servers prefer to serve index.html rather than
+               index.php when it is available.
+       -->
+       <title>Nucleus - Upgrades</title>
+       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+       <meta http-equiv="Refresh" content="0; url=index.php" />
+       <style type="text/css">
+       <!--
+               @import url(../styles/manual.css);
+       -->
+       </style>
+</head>
+<body>
+
+<h1>Transfer</h1>
+
+<p>
+<a href="index.php">If you aren't transferred automatically, click here.</a>
+</p>
+
+</body>
 </html>
\ No newline at end of file
index 01cf960..4858adc 100755 (executable)
-<?php\r
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  * $Id: index.php,v 1.5 2005-03-19 07:20:28 kimitake Exp $\r
-  * $NucleusJP: index.php,v 1.4 2005/03/18 06:07:10 kimitake Exp $\r
-  */\r
-\r
-include('upgrade.functions.php'); \r
-  \r
-// check if logged in etc\r
-if (!$member->isLoggedIn()) {\r
-  upgrade_showLogin('index.php');\r
-}\r
-\r
-if (!$member->isAdmin()) {\r
-  upgrade_error('Super-admin(最高管理者)のみがアップグレードを実行できます。');\r
-}\r
-\r
-upgrade_head();\r
-\r
-?>\r
-\r
-<h1>アップグレードスクリプト集</h1>\r
-\r
-<div class="note">\r
-<b>Note:</b> もし古いバージョンの Nuclues からアップグレードしようとしているのでなければ(つまりまっさらな状態からインストールしたのであれば)、これらのスクリプト集は必要ありません。\r
-</div>\r
-\r
-<p>\r
-古いバージョンの Nucleus からアップグレードするとき、データベーステーブルのアップグレードが必要です。\r
-このアップグレードスクリプトを実行することでそれが可能となります。\r
-</p>\r
-\r
-<?php  // calculate current version\r
-      if (!upgrade_checkinstall(96)) $current = 95;\r
-  else  if (!upgrade_checkinstall(10)) $current = 96;\r
-  else  if (!upgrade_checkinstall(11)) $current = 10;\r
-  else  if (!upgrade_checkinstall(15)) $current = 11;  \r
-  else  if (!upgrade_checkinstall(20)) $current = 15;    \r
-  else  if (!upgrade_checkinstall(25)) $current = 20;      \r
-  else  if (!upgrade_checkinstall(30)) $current = 25;      \r
-  else  if (!upgrade_checkinstall(31)) $current = 30;      \r
-  else  if (!upgrade_checkinstall(32)) $current = 31;      \r
-  else  $current = 32;\r
-\r
-  if ($current == 32) {\r
-    ?>\r
-      <p class="ok">自動でできるアップグレードはありません。データベースは既に最新の Nucleus 用にアップデートされています。</p>\r
-    <?php  } else {\r
-    ?>\r
-      <p class="warning"><a href="upgrade.php?from=<?php echo $current?>">ここをクリックしてデータベースを Nucleus v3.2 用にアップグレードします</a></p>\r
-    <?php  }\r
-?>\r
-\r
-<div class="note">\r
-<b>注意:</b> 作業中、各ステップごとにデータベースのバックアップを忘れないようにして下さい。\r
-</div>\r
-\r
-<h1>手動変更</h1>\r
-\r
-<p>いくつかの変更は手動で行う必要があります。下記にその手順を示します。</p>\r
-\r
-<?php\r
-$sth = 0;\r
-if (!$DIR_MEDIA) {\r
-  upgrade_manual_96();\r
-  $sth = 1;\r
-}\r
-if (!$DIR_SKINS) {\r
-  upgrade_manual_20();\r
-  $sth = 1;\r
-}\r
-\r
-// some manual code changes are needed in order to get Nucleus to work on php version\r
-// lower than 4.0.6\r
-if (phpversion() < '4.0.6') {\r
-  upgrade_manual_php405();\r
-  $sth = 1;\r
-}\r
-\r
-if ($sth == 0)\r
-  echo "<p class='ok'>手動変更は必要ありません。今日はラッキーな日ですね!</p>";  \r
-\r
-\r
-\r
-upgrade_foot();\r
-\r
-function upgrade_todo($ver) {\r
-  return upgrade_checkinstall($ver) ? "(<span class='ok'>インストール済み</span>)" : "(<span class='warning'>インストールが必要</span>)";\r
-}\r
-\r
-function upgrade_manual_96() {\r
-  global $DIR_NUCLEUS;\r
-  \r
-  $guess = str_replace("/nucleus/","/media/",$DIR_NUCLEUS);\r
-?>\r
-  <h2>Nucleus 0.96 用に必要な変更</h2>\r
-  <p>\r
-    メディア機能を使用するために<i>config.php</i>を手動で変更する必要があります。下記の通り追加します:\r
-  </p>\r
-  <pre>\r
-  // path to media dir\r
-  $DIR_MEDIA = '<b><?php echo htmlspecialchars($guess)?></b>';\r
-  </pre>\r
-  \r
-  <p>\r
-  また、ディレクトリもあなた自身の手で作る必要があります。もしファイルのアップロードを可能にしたいのであれば、media/ ディレクトリのパーミッションを777にします。(Nucleus 0.96+ のためのパーミッションの設定に関するクイックガイドが documentation/tips.html にあります)\r
-  </p>\r
-  \r
-<?php }\r
-\r
-function upgrade_manual_20() {\r
-  global $DIR_NUCLEUS;\r
-  \r
-  $guess = str_replace("/nucleus/","/skins/",$DIR_NUCLEUS);\r
-?>\r
-  <h2>Nucleus 2.0 用に必要な変更</h2>\r
-  <p>\r
-    スキンの取り込み機能を使用するために<i>config.php</i>を手動で変更する必要があります。下記の通り追加します:\r
-  </p>\r
-  <pre>\r
-  // extra skin files for imported skins\r
-  $DIR_SKINS = '<b><?php echo htmlspecialchars($guess)?></b>';\r
-  </pre>\r
-  \r
-  <p>また、ディレクトリもあなた自身の手で作る必要があります。これでダウンロードしたスキンを上記ディレクトリに展開したり、Nucleus 管理画面から取り込んだりできるようになります。</p>\r
-  \r
-  <h3>RSS 2.0 と RSD スキン</h3>\r
-  \r
-  <p>Nucleus 2.0 を新規にインストールしたとき、RSD(Really Simple Discovery) 用のスキンの他に、RSS 2.0(Really Simple Syndication)用のスキンもまたインストールされます。<code>xml-rss2.php</code> と <code>rsd.php</code> の両ファイルはアップグレードされますが、スキンに関しては手動でインストールする必要があります。<code>upgrade-files</code>の中身をアップロードしたあと、管理者画面を開き、管理ホームにあるスキンの「読込/書出」を開きます。そこから両スキンをインストールすることができます(もしインストールするつもりがなければ、しなくても結構です)。</p>\r
-  \r
-<?php }\r
-\r
-function upgrade_manual_php405() {\r
-?>\r
-<h2>PHP のバージョンが 4.0.3, 4.0.4 または 4.0.5 の場合に必要となる変更</h2>\r
-<p>\r
-  PHP のバージョンが 4.0.6 より以前の場合、変更が必要なファイルが2つあります。PHP のバージョンを 4.0.6 や 4.2.2+以降のものにアップグレードした方がいいでしょう(4.0.6 や 4.2.2 以前のものにはセキュリティー問題があります)。もし PHP のアップグレードが困難もしくは、する予定がない場合は、以下のファイルを変更して下さい。\r
-</p>\r
-<ul>\r
-  <li>nucleus/libs/PARSER.php のコードが下記のようになっていることを確認して下さい。(84行目から):\r
-    <pre>\r
-\r
-  if (in_array($actionlc, $this-&gt;actions) || $this-&gt;norestrictions ) {\r
-    <strong>$this-&gt;call_using_array($action, $this-&gt;handler, $params);</strong>\r
-  } else {\r
-    // redirect to plugin action if possible\r
-    if (in_array('plugin', $this-&gt;actions) \r
-      && $manager-&gt;pluginInstalled('NP_'.$action))\r
-      $this-&gt;doAction('plugin('.$action.\r
-        $this-&gt;pdelim.implode($this-&gt;pdelim,$params).')');\r
-    else\r
-      echo '&lt;b&gt;DISALLOWED (' , $action , ')&lt;/b&gt;';\r
-  }\r
-\r
-\r
-}\r
-     </pre>\r
-    </li>\r
-    <li>nucleus/libs/PARSER.php のコードが下記のようになっていることを確認して下さい。(75行目から):\r
-    <pre>\r
-// $params = array_map('trim',$params);\r
-foreach ($params as $key =&gt; $value) { $params[$key] = trim($value); }\r
-    </pre>\r
-    </li>\r
-  </ul>\r
-  \r
-<?php }\r
-\r
-?>\r
+<?php
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2005 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  * $Id: index.php,v 1.6 2006-07-12 07:11:49 kimitake Exp $
+  * $NucleusJP: index.php,v 1.5 2005/03/19 07:20:28 kimitake Exp $
+  */
+
+include('upgrade.functions.php'); 
+  
+// check if logged in etc
+if (!$member->isLoggedIn()) {
+  upgrade_showLogin('index.php');
+}
+
+if (!$member->isAdmin()) {
+  upgrade_error('Super-admin(最高管理者)のみがアップグレードを実行できます。');
+}
+
+upgrade_head();
+
+?>
+
+<h1>アップグレードスクリプト集</h1>
+
+<div class="note">
+<b>Note:</b> もし古いバージョンの Nuclues からアップグレードしようとしているのでなければ(つまりまっさらな状態からインストールしたのであれば)、これらのスクリプト集は必要ありません。
+</div>
+
+<p>
+古いバージョンの Nucleus からアップグレードするとき、データベーステーブルのアップグレードが必要です。
+このアップグレードスクリプトを実行することでそれが可能となります。
+</p>
+
+<?php  // calculate current version
+      if (!upgrade_checkinstall(96)) $current = 95;
+  else  if (!upgrade_checkinstall(10)) $current = 96;
+  else  if (!upgrade_checkinstall(11)) $current = 10;
+  else  if (!upgrade_checkinstall(15)) $current = 11;  
+  else  if (!upgrade_checkinstall(20)) $current = 15;    
+  else  if (!upgrade_checkinstall(25)) $current = 20;      
+  else  if (!upgrade_checkinstall(30)) $current = 25;      
+  else  if (!upgrade_checkinstall(31)) $current = 30;      
+  else  if (!upgrade_checkinstall(32)) $current = 31;      
+  else  $current = 32;
+
+  if ($current == 32) {
+    ?>
+      <p class="ok">自動でできるアップグレードはありません。データベースは既に最新の Nucleus 用にアップデートされています。</p>
+    <?php  } else {
+    ?>
+      <p class="warning"><a href="upgrade.php?from=<?php echo $current?>">ここをクリックしてデータベースを Nucleus v3.2 用にアップグレードします</a></p>
+    <?php  }
+?>
+
+<div class="note">
+<b>注意:</b> 作業中、各ステップごとにデータベースのバックアップを忘れないようにして下さい。
+</div>
+
+<h1>手動変更</h1>
+
+<p>いくつかの変更は手動で行う必要があります。下記にその手順を示します。</p>
+
+<?php
+$sth = 0;
+if (!$DIR_MEDIA) {
+  upgrade_manual_96();
+  $sth = 1;
+}
+if (!$DIR_SKINS) {
+  upgrade_manual_20();
+  $sth = 1;
+}
+
+// some manual code changes are needed in order to get Nucleus to work on php version
+// lower than 4.0.6
+if (phpversion() < '4.0.6') {
+  upgrade_manual_php405();
+  $sth = 1;
+}
+
+if ($sth == 0)
+  echo "<p class='ok'>手動変更は必要ありません。今日はラッキーな日ですね!</p>";  
+
+
+
+upgrade_foot();
+
+function upgrade_todo($ver) {
+  return upgrade_checkinstall($ver) ? "(<span class='ok'>インストール済み</span>)" : "(<span class='warning'>インストールが必要</span>)";
+}
+
+function upgrade_manual_96() {
+  global $DIR_NUCLEUS;
+  
+  $guess = str_replace("/nucleus/","/media/",$DIR_NUCLEUS);
+?>
+  <h2>Nucleus 0.96 用に必要な変更</h2>
+  <p>
+    メディア機能を使用するために<i>config.php</i>を手動で変更する必要があります。下記の通り追加します:
+  </p>
+  <pre>
+  // path to media dir
+  $DIR_MEDIA = '<b><?php echo htmlspecialchars($guess)?></b>';
+  </pre>
+  
+  <p>
+  また、ディレクトリもあなた自身の手で作る必要があります。もしファイルのアップロードを可能にしたいのであれば、media/ ディレクトリのパーミッションを777にします。(Nucleus 0.96+ のためのパーミッションの設定に関するクイックガイドが documentation/tips.html にあります)
+  </p>
+  
+<?php }
+
+function upgrade_manual_20() {
+  global $DIR_NUCLEUS;
+  
+  $guess = str_replace("/nucleus/","/skins/",$DIR_NUCLEUS);
+?>
+  <h2>Nucleus 2.0 用に必要な変更</h2>
+  <p>
+    スキンの取り込み機能を使用するために<i>config.php</i>を手動で変更する必要があります。下記の通り追加します:
+  </p>
+  <pre>
+  // extra skin files for imported skins
+  $DIR_SKINS = '<b><?php echo htmlspecialchars($guess)?></b>';
+  </pre>
+  
+  <p>また、ディレクトリもあなた自身の手で作る必要があります。これでダウンロードしたスキンを上記ディレクトリに展開したり、Nucleus 管理画面から取り込んだりできるようになります。</p>
+  
+  <h3>RSS 2.0 と RSD スキン</h3>
+  
+  <p>Nucleus 2.0 を新規にインストールしたとき、RSD(Really Simple Discovery) 用のスキンの他に、RSS 2.0(Really Simple Syndication)用のスキンもまたインストールされます。<code>xml-rss2.php</code> と <code>rsd.php</code> の両ファイルはアップグレードされますが、スキンに関しては手動でインストールする必要があります。<code>upgrade-files</code>の中身をアップロードしたあと、管理者画面を開き、管理ホームにあるスキンの「読込/書出」を開きます。そこから両スキンをインストールすることができます(もしインストールするつもりがなければ、しなくても結構です)。</p>
+  
+<?php }
+
+function upgrade_manual_php405() {
+?>
+<h2>PHP のバージョンが 4.0.3, 4.0.4 または 4.0.5 の場合に必要となる変更</h2>
+<p>
+  PHP のバージョンが 4.0.6 より以前の場合、変更が必要なファイルが2つあります。PHP のバージョンを 4.0.6 や 4.2.2+以降のものにアップグレードした方がいいでしょう(4.0.6 や 4.2.2 以前のものにはセキュリティー問題があります)。もし PHP のアップグレードが困難もしくは、する予定がない場合は、以下のファイルを変更して下さい。
+</p>
+<ul>
+  <li>nucleus/libs/PARSER.php のコードが下記のようになっていることを確認して下さい。(84行目から):
+    <pre>
+
+  if (in_array($actionlc, $this-&gt;actions) || $this-&gt;norestrictions ) {
+    <strong>$this-&gt;call_using_array($action, $this-&gt;handler, $params);</strong>
+  } else {
+    // redirect to plugin action if possible
+    if (in_array('plugin', $this-&gt;actions) 
+      && $manager-&gt;pluginInstalled('NP_'.$action))
+      $this-&gt;doAction('plugin('.$action.
+        $this-&gt;pdelim.implode($this-&gt;pdelim,$params).')');
+    else
+      echo '&lt;b&gt;DISALLOWED (' , $action , ')&lt;/b&gt;';
+  }
+
+
+}
+     </pre>
+    </li>
+    <li>nucleus/libs/PARSER.php のコードが下記のようになっていることを確認して下さい。(75行目から):
+    <pre>
+// $params = array_map('trim',$params);
+foreach ($params as $key =&gt; $value) { $params[$key] = trim($value); }
+    </pre>
+    </li>
+  </ul>
+  
+<?php }
+
+?>
index 32f6853..2330749 100755 (executable)
-<?php  \r
-\r
-       /**\r
-         * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-         * Copyright (C) 2002-2005 The Nucleus Group\r
-         *\r
-         * This program is free software; you can redistribute it and/or\r
-         * modify it under the terms of the GNU General Public License\r
-         * as published by the Free Software Foundation; either version 2\r
-         * of the License, or (at your option) any later version.\r
-         * (see nucleus/documentation/index.html#license for more info)\r
-         *     \r
-         * Some functions common to all upgrade scripts\r
-         *\r
-         * $Id: upgrade.functions.php,v 1.5 2005-03-19 07:20:50 kimitake Exp $\r
-         * $NucleusJP: upgrade.functions.php,v 1.4 2005/03/18 06:07:10 kimitake Exp $\r
-         */\r
-\r
-       include('../../config.php');\r
-       \r
-       // sql_table function did not exists in nucleus <= 2.0\r
-       if (!function_exists('sql_table'))\r
-       {\r
-               function sql_table($name) {\r
-                       return 'nucleus_' . $name;\r
-               }\r
-       }       \r
-\r
-       function upgrade_checkinstall($version) {\r
-               $installed = 0;\r
-\r
-               switch($version) {\r
-                       case '95':\r
-                               $query = 'SELECT bconvertbreaks FROM '.sql_table('blog').' LIMIT 1';\r
-                               $minrows = -1;\r
-                               break;\r
-                       case '96':\r
-                               $query = 'SELECT cip FROM '.sql_table('comment').' LIMIT 1';\r
-                               $minrows = -1;                  \r
-                               break;\r
-                       case '10':\r
-                               $query = 'SELECT mcookiekey FROM '.sql_table('member').' LIMIT 1';\r
-                               $minrows = -1;                  \r
-                               break;                  \r
-                       case '11':\r
-                               $query = 'SELECT bnotifytype FROM '.sql_table('blog').' LIMIT 1';\r
-                               $minrows = -1;                  \r
-                               break;\r
-                       case '15':\r
-                               $query = 'SELECT * FROM '.sql_table('plugin_option').' LIMIT 1';\r
-                               $minrows = -1;                  \r
-                               break;                  \r
-                       case '20':\r
-                               $query = 'SELECT sdincpref FROM '.sql_table('skin_desc').' LIMIT 1';\r
-                               $minrows = -1;                  \r
-                               break;                          \r
-                       // dev only (v2.2)\r
-                       case '22':\r
-                               $query = 'SELECT oid FROM '.sql_table('plugin_option_desc').' LIMIT 1';\r
-                               $minrows = -1;                  \r
-                               break;\r
-                       // v2.5 beta\r
-                       case '24':\r
-                               $query = 'SELECT bincludesearch FROM ' . sql_table('blog') . ' LIMIT 1';\r
-                               $minrows = -1;                  \r
-                               break;                          \r
-                       case '25':\r
-                               $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 250 LIMIT 1';\r
-                               $minrows = 1;\r
-                               break;\r
-                       case '30':\r
-                               $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 300 LIMIT 1';\r
-                               $minrows = 1;\r
-                               break;\r
-                       case '31':\r
-                               $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 310 LIMIT 1';\r
-                               $minrows = 1;\r
-                               break;\r
-                       case '32':\r
-                               $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 320 LIMIT 1';\r
-                               $minrows = 1;\r
-                               break;\r
-               }\r
-\r
-               $res = mysql_query($query);\r
-               $installed = ($res != 0) && (mysql_num_rows($res) >= $minrows);\r
-\r
-               return $installed;\r
-       }\r
-       \r
-       \r
-       /** this function gets the nucleus version, even if the getNucleusVersion\r
-        * function does not exist yet\r
-        * return 96 for all versions < 100\r
-        */\r
-       function upgrade_getNucleusVersion() {\r
-               if (!function_exists('getNucleusVersion')) return 96;\r
-               return getNucleusVersion();\r
-       }\r
-       \r
-       function upgrade_showLogin($type) {\r
-               upgrade_head();\r
-       ?>\r
-               <h1>まずはログインして下さい</h1>\r
-               <p>下記の情報を入力して下さい:</p>\r
-               \r
-               <form method="post" action="<?php echo $type?>">\r
-\r
-                       <ul>\r
-                               <li>名前: <input name="login" /></li>\r
-                               <li>パスワード <input name="password" type="password" /></li>\r
-                       </ul>\r
-\r
-                       <p>\r
-                               <input name="action" value="login" type="hidden" />\r
-                               <input type="submit" value="ログイン" />\r
-                       </p>\r
-               \r
-               </form>\r
-       <?php           upgrade_foot();\r
-               exit;\r
-       }\r
-       \r
-       function upgrade_head() {\r
-       ?>\r
-                       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-                       <html xmlns="http://www.w3.org/1999/xhtml">\r
-                       <head>\r
-                               <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />\r
-                               <title>Nucleus アップグレード</title>\r
-                               <style><!--\r
-                                       @import url('../styles/manual.css');\r
-                                       .warning {\r
-                                               color: red;\r
-                                       }\r
-                                       .ok {\r
-                                               color: green;\r
-                                       }\r
-                               --></style>\r
-                       </head>\r
-                       <body>          \r
-       <?php   }\r
-\r
-       function upgrade_foot() {\r
-       ?>\r
-                       </body>\r
-                       </html> \r
-       <?php   }       \r
-       \r
-       function upgrade_error($msg) {\r
-               upgrade_head();\r
-               ?>\r
-               <h1>エラー!</h1>\r
-\r
-               <p>メッセージは以下の通り:</p>\r
-               \r
-               <blockquote><div>\r
-               <?php echo $msg?>\r
-               </div></blockquote>\r
-\r
-               <p><a href="index.php" onclick="history.back();">戻る</a></p>\r
-               <?php\r
-               upgrade_foot();\r
-               exit;\r
-       }\r
-       \r
-       \r
-       function upgrade_start() {\r
-               global $upgrade_failures;\r
-               $upgrade_failures = 0;\r
-               \r
-               upgrade_head();\r
-               ?>\r
-               <h1>アップグレードの実行</h1>\r
-               <ul>\r
-               <?php   }\r
-       \r
-       function upgrade_end($msg = "") {\r
-               global $upgrade_failures;\r
-               if ($upgrade_failures > 0)\r
-                       $msg = "いくつかのデータベース操作に失敗しました。もし以前にこのアップグレードスクリプトを実行していたのであれば、問題ないと思われます。";\r
-       \r
-               ?>\r
-               </ul>\r
-               \r
-               <h1>アップグレード完了!</h1>\r
-\r
-               <p><?php echo $msg?></p>\r
-               \r
-               <p><a href="index.php">アップグレード最初のページ</a>にもどる</p>\r
-\r
-               <?php\r
-               upgrade_foot();\r
-               exit;\r
-       }       \r
-       \r
-       /**\r
-         * Tries to execute a query, gives a message when failed\r
-         *\r
-         * @param friendly name\r
-         * @param query                \r
-         */\r
-       function upgrade_query($friendly, $query) {\r
-               global $upgrade_failures;\r
-               \r
-               echo "<li>$friendly ... ";\r
-               $res = mysql_query($query);\r
-               if (!$res) {\r
-                       echo "<span style='color:red'>失敗</span>\n";\r
-                       echo "<blockquote>失敗の理由: " . mysql_error() . " </blockquote>";\r
-                       $upgrade_failures++;\r
-               } else {\r
-                       echo "<span style='color:green'>成功!</span><br />\n";\r
-               }\r
-               echo "</li>";\r
-               return $res;\r
-       }\r
-       \r
-       /**\r
-        * @param $table \r
-        *              table to check (without prefix)\r
-        * @param $aColumns\r
-        *              array of column names included\r
-        */\r
-       function upgrade_checkIfIndexExists($table, $aColumns) {\r
-               // get info for indices from database\r
-               \r
-               $aIndices = array();\r
-               $query = 'show index from ' . sql_table($table);\r
-               $res = mysql_query($query);\r
-               while ($o = mysql_fetch_object($res)) {\r
-                       if (!$aIndices[$o->Key_name]) {\r
-                               $aIndices[$o->Key_name] = array();\r
-                       }\r
-                       array_push($aIndices[$o->Key_name], $o->Column_name);\r
-               }\r
-\r
-               // compare each index with parameter\r
-               foreach ($aIndices as $keyName => $aIndexColumns) {\r
-                       $aDiff = array_diff($aIndexColumns, $aColumns);\r
-                       if (count($aDiff) == 0) return 1;\r
-               }\r
-               \r
-               return 0;\r
-\r
-       }\r
-\r
-\r
-\r
-?>\r
+<?php  
+
+       /**
+         * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+         * Copyright (C) 2002-2005 The Nucleus Group
+         *
+         * This program is free software; you can redistribute it and/or
+         * modify it under the terms of the GNU General Public License
+         * as published by the Free Software Foundation; either version 2
+         * of the License, or (at your option) any later version.
+         * (see nucleus/documentation/index.html#license for more info)
+         *     
+         * Some functions common to all upgrade scripts
+         *
+         * $Id: upgrade.functions.php,v 1.6 2006-07-12 07:11:49 kimitake Exp $
+         * $NucleusJP: upgrade.functions.php,v 1.5 2005/03/19 07:20:50 kimitake Exp $
+         */
+
+       include('../../config.php');
+       
+       // sql_table function did not exists in nucleus <= 2.0
+       if (!function_exists('sql_table'))
+       {
+               function sql_table($name) {
+                       return 'nucleus_' . $name;
+               }
+       }       
+
+       function upgrade_checkinstall($version) {
+               $installed = 0;
+
+               switch($version) {
+                       case '95':
+                               $query = 'SELECT bconvertbreaks FROM '.sql_table('blog').' LIMIT 1';
+                               $minrows = -1;
+                               break;
+                       case '96':
+                               $query = 'SELECT cip FROM '.sql_table('comment').' LIMIT 1';
+                               $minrows = -1;                  
+                               break;
+                       case '10':
+                               $query = 'SELECT mcookiekey FROM '.sql_table('member').' LIMIT 1';
+                               $minrows = -1;                  
+                               break;                  
+                       case '11':
+                               $query = 'SELECT bnotifytype FROM '.sql_table('blog').' LIMIT 1';
+                               $minrows = -1;                  
+                               break;
+                       case '15':
+                               $query = 'SELECT * FROM '.sql_table('plugin_option').' LIMIT 1';
+                               $minrows = -1;                  
+                               break;                  
+                       case '20':
+                               $query = 'SELECT sdincpref FROM '.sql_table('skin_desc').' LIMIT 1';
+                               $minrows = -1;                  
+                               break;                          
+                       // dev only (v2.2)
+                       case '22':
+                               $query = 'SELECT oid FROM '.sql_table('plugin_option_desc').' LIMIT 1';
+                               $minrows = -1;                  
+                               break;
+                       // v2.5 beta
+                       case '24':
+                               $query = 'SELECT bincludesearch FROM ' . sql_table('blog') . ' LIMIT 1';
+                               $minrows = -1;                  
+                               break;                          
+                       case '25':
+                               $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 250 LIMIT 1';
+                               $minrows = 1;
+                               break;
+                       case '30':
+                               $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 300 LIMIT 1';
+                               $minrows = 1;
+                               break;
+                       case '31':
+                               $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 310 LIMIT 1';
+                               $minrows = 1;
+                               break;
+                       case '32':
+                               $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 320 LIMIT 1';
+                               $minrows = 1;
+                               break;
+               }
+
+               $res = mysql_query($query);
+               $installed = ($res != 0) && (mysql_num_rows($res) >= $minrows);
+
+               return $installed;
+       }
+       
+       
+       /** this function gets the nucleus version, even if the getNucleusVersion
+        * function does not exist yet
+        * return 96 for all versions < 100
+        */
+       function upgrade_getNucleusVersion() {
+               if (!function_exists('getNucleusVersion')) return 96;
+               return getNucleusVersion();
+       }
+       
+       function upgrade_showLogin($type) {
+               upgrade_head();
+       ?>
+               <h1>まずはログインして下さい</h1>
+               <p>下記の情報を入力して下さい:</p>
+               
+               <form method="post" action="<?php echo $type?>">
+
+                       <ul>
+                               <li>名前: <input name="login" /></li>
+                               <li>パスワード <input name="password" type="password" /></li>
+                       </ul>
+
+                       <p>
+                               <input name="action" value="login" type="hidden" />
+                               <input type="submit" value="ログイン" />
+                       </p>
+               
+               </form>
+       <?php           upgrade_foot();
+               exit;
+       }
+       
+       function upgrade_head() {
+       ?>
+                       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+                       <html xmlns="http://www.w3.org/1999/xhtml">
+                       <head>
+                               <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+                               <title>Nucleus アップグレード</title>
+                               <style><!--
+                                       @import url('../styles/manual.css');
+                                       .warning {
+                                               color: red;
+                                       }
+                                       .ok {
+                                               color: green;
+                                       }
+                               --></style>
+                       </head>
+                       <body>          
+       <?php   }
+
+       function upgrade_foot() {
+       ?>
+                       </body>
+                       </html> 
+       <?php   }       
+       
+       function upgrade_error($msg) {
+               upgrade_head();
+               ?>
+               <h1>エラー!</h1>
+
+               <p>メッセージは以下の通り:</p>
+               
+               <blockquote><div>
+               <?php echo $msg?>
+               </div></blockquote>
+
+               <p><a href="index.php" onclick="history.back();">戻る</a></p>
+               <?php
+               upgrade_foot();
+               exit;
+       }
+       
+       
+       function upgrade_start() {
+               global $upgrade_failures;
+               $upgrade_failures = 0;
+               
+               upgrade_head();
+               ?>
+               <h1>アップグレードの実行</h1>
+               <ul>
+               <?php   }
+       
+       function upgrade_end($msg = "") {
+               global $upgrade_failures;
+               if ($upgrade_failures > 0)
+                       $msg = "いくつかのデータベース操作に失敗しました。もし以前にこのアップグレードスクリプトを実行していたのであれば、問題ないと思われます。";
+       
+               ?>
+               </ul>
+               
+               <h1>アップグレード完了!</h1>
+
+               <p><?php echo $msg?></p>
+               
+               <p><a href="index.php">アップグレード最初のページ</a>にもどる</p>
+
+               <?php
+               upgrade_foot();
+               exit;
+       }       
+       
+       /**
+         * Tries to execute a query, gives a message when failed
+         *
+         * @param friendly name
+         * @param query                
+         */
+       function upgrade_query($friendly, $query) {
+               global $upgrade_failures;
+               
+               echo "<li>$friendly ... ";
+               $res = mysql_query($query);
+               if (!$res) {
+                       echo "<span style='color:red'>失敗</span>\n";
+                       echo "<blockquote>失敗の理由: " . mysql_error() . " </blockquote>";
+                       $upgrade_failures++;
+               } else {
+                       echo "<span style='color:green'>成功!</span><br />\n";
+               }
+               echo "</li>";
+               return $res;
+       }
+       
+       /**
+        * @param $table 
+        *              table to check (without prefix)
+        * @param $aColumns
+        *              array of column names included
+        */
+       function upgrade_checkIfIndexExists($table, $aColumns) {
+               // get info for indices from database
+               
+               $aIndices = array();
+               $query = 'show index from ' . sql_table($table);
+               $res = mysql_query($query);
+               while ($o = mysql_fetch_object($res)) {
+                       if (!$aIndices[$o->Key_name]) {
+                               $aIndices[$o->Key_name] = array();
+                       }
+                       array_push($aIndices[$o->Key_name], $o->Column_name);
+               }
+
+               // compare each index with parameter
+               foreach ($aIndices as $keyName => $aIndexColumns) {
+                       $aDiff = array_diff($aIndexColumns, $aColumns);
+                       if (count($aDiff) == 0) return 1;
+               }
+               
+               return 0;
+
+       }
+
+
+
+?>
index 6d8459a..de07c00 100755 (executable)
@@ -1,72 +1,72 @@
-<?php\r
-/**\r
-  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
-  * Copyright (C) 2002-2005 The Nucleus Group\r
-  *\r
-  * This program is free software; you can redistribute it and/or\r
-  * modify it under the terms of the GNU General Public License\r
-  * as published by the Free Software Foundation; either version 2\r
-  * of the License, or (at your option) any later version.\r
-  * (see nucleus/documentation/index.html#license for more info)\r
-  *\r
-  * $Id: upgrade.php,v 1.3 2005-03-17 08:57:28 kimitake Exp $\r
-  * $NucleusJP$\r
-  */\r
-\r
-include('upgrade.functions.php'); \r
-       \r
-// check if logged in etc\r
-if (!$member->isLoggedIn()) {\r
-       upgrade_showLogin('upgrade.php?from=' . intGetVar('from'));\r
-}\r
-\r
-if (!$member->isAdmin()) {\r
-       upgrade_error('Only Super-Admins are allowed to perform upgrades');\r
-}\r
-\r
-include('upgrade0.95.php');\r
-include('upgrade0.96.php');\r
-include('upgrade1.0.php');\r
-include('upgrade1.1.php');\r
-include('upgrade1.5.php');\r
-include('upgrade2.0.php');\r
-include('upgrade2.5.php');\r
-include('upgrade3.0.php');\r
-include('upgrade3.1.php');\r
-include('upgrade3.2.php');\r
-\r
-$from = intGetVar('from');\r
-\r
-upgrade_start();\r
-\r
-switch($from) {\r
-       case 95:\r
-               upgrade_do95();\r
-               upgrade_do96();\r
-       case 96:\r
-               upgrade_do10();\r
-       case 10:\r
-               upgrade_do11();\r
-       case 11:\r
-               upgrade_do15();\r
-       case 15:\r
-               upgrade_do20();\r
-       case 20:\r
-               upgrade_do25();\r
-       case 25:\r
-               upgrade_do30();\r
-       case 30:\r
-               upgrade_do31();\r
-       case 31:\r
-               upgrade_do32();\r
-               break;\r
-       default:\r
-               echo "<li>エラー! 実行すべきアップデートはありません</li>";\r
-               break;\r
-}\r
-\r
-\r
-\r
-upgrade_end("アップグレード成功");\r
-\r
-?>\r
+<?php
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2005 The Nucleus Group
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+  * as published by the Free Software Foundation; either version 2
+  * of the License, or (at your option) any later version.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  * $Id: upgrade.php,v 1.4 2006-07-12 07:11:49 kimitake Exp $
+  * $NucleusJP: upgrade.php,v 1.3 2005/03/17 08:57:28 kimitake Exp $
+  */
+
+include('upgrade.functions.php'); 
+       
+// check if logged in etc
+if (!$member->isLoggedIn()) {
+       upgrade_showLogin('upgrade.php?from=' . intGetVar('from'));
+}
+
+if (!$member->isAdmin()) {
+       upgrade_error('Only Super-Admins are allowed to perform upgrades');
+}
+
+include('upgrade0.95.php');
+include('upgrade0.96.php');
+include('upgrade1.0.php');
+include('upgrade1.1.php');
+include('upgrade1.5.php');
+include('upgrade2.0.php');
+include('upgrade2.5.php');
+include('upgrade3.0.php');
+include('upgrade3.1.php');
+include('upgrade3.2.php');
+
+$from = intGetVar('from');
+
+upgrade_start();
+
+switch($from) {
+       case 95:
+               upgrade_do95();
+               upgrade_do96();
+       case 96:
+               upgrade_do10();
+       case 10:
+               upgrade_do11();
+       case 11:
+               upgrade_do15();
+       case 15:
+               upgrade_do20();
+       case 20:
+               upgrade_do25();
+       case 25:
+               upgrade_do30();
+       case 30:
+               upgrade_do31();
+       case 31:
+               upgrade_do32();
+               break;
+       default:
+               echo "<li>エラー! 実行すべきアップデートはありません</li>";
+               break;
+}
+
+
+
+upgrade_end("アップグレード成功");
+
+?>
index 5ebb17c..b854121 100755 (executable)
@@ -1,14 +1,14 @@
-<?php\r
-function upgrade_do95() {\r
-\r
-$query =  'ALTER TABLE '.sql_table('blog')\r
-       . " ADD bsendping tinyint(2) NOT NULL default '0'";\r
-upgrade_query("Adding 'send ping' option",$query);\r
-\r
-$query =  'ALTER TABLE '.sql_table('blog')\r
-       . " ADD bconvertbreaks tinyint(2) NOT NULL default '1'";\r
-upgrade_query("Adding convert linebreaks option",$query);\r
-\r
-}\r
-\r
+<?php
+function upgrade_do95() {
+
+$query =  'ALTER TABLE '.sql_table('blog')
+       . " ADD bsendping tinyint(2) NOT NULL default '0'";
+upgrade_query("Adding 'send ping' option",$query);
+
+$query =  'ALTER TABLE '.sql_table('blog')
+       . " ADD bconvertbreaks tinyint(2) NOT NULL default '1'";
+upgrade_query("Adding convert linebreaks option",$query);
+
+}
+
 ?>
\ No newline at end of file
index 427f480..3d85bdd 100755 (executable)
@@ -1,74 +1,74 @@
-<?php\r
-function upgrade_do96() {\r
-\r
-       if (upgrade_checkinstall(96))\r
-               return "already installed";\r
-\r
-// 1. create nucleus_actionlog\r
-$query = 'CREATE TABLE '.sql_table('actionlog')." (timestamp datetime NOT NULL default '0000-00-00 00:00:00', message varchar(255) NOT NULL default '', PRIMARY KEY  (timestamp)) TYPE=MyISAM;";\r
-upgrade_query("Creating nucleus_actionlog table",$query);\r
-\r
-// 2. create nucleus_ban\r
-$query = 'CREATE TABLE '.sql_table('ban')." (  iprange varchar(15) NOT NULL default '',  reason varchar(255) NOT NULL default '',  blogid int(11) NOT NULL default '0') TYPE=MyISAM;";\r
-upgrade_query("Creating nucleus_ban table",$query);\r
-\r
-// 4. add ikarma to nucleus_item\r
-$query =  'ALTER TABLE '.sql_table('item')\r
-       . " ADD ikarma int(11) NOT NULL default '0'";\r
-upgrade_query("Adding karma-votes to items",$query);\r
-\r
-// 5. create nucleus_karma\r
-$query = 'CREATE TABLE '.sql_table('karma')." ("\r
-       ."  itemid int(11) NOT NULL default '0',"\r
-       ."  ip char(15) NOT NULL default ''"\r
-       .") TYPE=MyISAM;";\r
-upgrade_query("Creating nucleus_karma table",$query);\r
-\r
-\r
-// 6. nucleus_config: add MediaURL, AllowedTypes, AllowLoginEdit, AllowUpload\r
-\r
-// create MediaURL out of IndexURL\r
-$mediaURL = $CONF['IndexURL'] . "media/";\r
-\r
-$query = 'INSERT INTO '.sql_table('config')." VALUES ('MediaURL', '$mediaURL');";\r
-$query2 = 'INSERT INTO '.sql_table('config')." VALUES ('AllowedTypes', 'jpg,jpeg,gif,mpg,mpeg,avi,mov,mp3,swf,png');";\r
-$query3 = 'INSERT INTO '.sql_table('config')." VALUES ('AllowLoginEdit', '0');";\r
-$query4 = 'INSERT INTO '.sql_table('config')." VALUES ('AllowUpload', '1');";\r
-upgrade_query("New setting MediaURL",$query);\r
-upgrade_query("New setting AllowedTypes",$query2);\r
-upgrade_query("New setting AllowLoginEdit",$query3);\r
-upgrade_query("New setting AllowUpload",$query4);\r
-\r
-// 7. add 'imagepopup' skincontents in skin 'default'\r
-\r
-$query = 'SELECT sdnumber FROM '.sql_table('skin_desc')." WHERE sdname='default'";\r
-$res = sql_query($query);\r
-$obj = mysql_fetch_object($res);\r
-$skinid = $obj->sdnumber;\r
-$query = 'INSERT INTO '.sql_table('skin')." VALUES (" . $skinid . ", 'imagepopup', '<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title><%imagetext%></title>\r\n  <style type=\"text/css\">\r\n   img { border: none; }\r\n  </style>\r\n</head>\r\n<body>\r\n  <a href=\"javascript:window.close();\"><%image%></a>\r\n</body>\r\n</html>');";\r
-upgrade_query("Adding 'imagepopup' skinparts",$query);\r
-\r
-// 8. add POPUP_CODE, MEDIA_CODE, IMAGE_CODE to ALL templates\r
-$query = 'SELECT tdnumber FROM '.sql_table('template_desc');\r
-$res = sql_query($query);      // get all template ids\r
-while ($obj = mysql_fetch_object($res)) {\r
-       $tid = $obj->tdnumber;  // template id\r
-\r
-       $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'POPUP_CODE', '<%popuplink%>');";\r
-       $query2 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'MEDIA_CODE', '<%media%>');";\r
-       $query3 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'IMAGE_CODE', '<%image%>');";\r
-       upgrade_query("Adding popupcode to template $tid",$query);\r
-       upgrade_query("Adding mediacode to template $tid",$query2);\r
-       upgrade_query("Adding imagecode to template $tid",$query3);\r
-       \r
-}\r
-\r
-// 3. add cip to nucleus_comment\r
-$query =  'ALTER TABLE '.sql_table('comment')\r
-       . " ADD cip varchar(15) NOT NULL default ''";\r
-upgrade_query("Adding IP attribute to comments",$query);\r
-\r
-}\r
-\r
-\r
+<?php
+function upgrade_do96() {
+
+       if (upgrade_checkinstall(96))
+               return "already installed";
+
+// 1. create nucleus_actionlog
+$query = 'CREATE TABLE '.sql_table('actionlog')." (timestamp datetime NOT NULL default '0000-00-00 00:00:00', message varchar(255) NOT NULL default '', PRIMARY KEY  (timestamp)) TYPE=MyISAM;";
+upgrade_query("Creating nucleus_actionlog table",$query);
+
+// 2. create nucleus_ban
+$query = 'CREATE TABLE '.sql_table('ban')." (  iprange varchar(15) NOT NULL default '',  reason varchar(255) NOT NULL default '',  blogid int(11) NOT NULL default '0') TYPE=MyISAM;";
+upgrade_query("Creating nucleus_ban table",$query);
+
+// 4. add ikarma to nucleus_item
+$query =  'ALTER TABLE '.sql_table('item')
+       . " ADD ikarma int(11) NOT NULL default '0'";
+upgrade_query("Adding karma-votes to items",$query);
+
+// 5. create nucleus_karma
+$query = 'CREATE TABLE '.sql_table('karma')." ("
+       ."  itemid int(11) NOT NULL default '0',"
+       ."  ip char(15) NOT NULL default ''"
+       .") TYPE=MyISAM;";
+upgrade_query("Creating nucleus_karma table",$query);
+
+
+// 6. nucleus_config: add MediaURL, AllowedTypes, AllowLoginEdit, AllowUpload
+
+// create MediaURL out of IndexURL
+$mediaURL = $CONF['IndexURL'] . "media/";
+
+$query = 'INSERT INTO '.sql_table('config')." VALUES ('MediaURL', '$mediaURL');";
+$query2 = 'INSERT INTO '.sql_table('config')." VALUES ('AllowedTypes', 'jpg,jpeg,gif,mpg,mpeg,avi,mov,mp3,swf,png');";
+$query3 = 'INSERT INTO '.sql_table('config')." VALUES ('AllowLoginEdit', '0');";
+$query4 = 'INSERT INTO '.sql_table('config')." VALUES ('AllowUpload', '1');";
+upgrade_query("New setting MediaURL",$query);
+upgrade_query("New setting AllowedTypes",$query2);
+upgrade_query("New setting AllowLoginEdit",$query3);
+upgrade_query("New setting AllowUpload",$query4);
+
+// 7. add 'imagepopup' skincontents in skin 'default'
+
+$query = 'SELECT sdnumber FROM '.sql_table('skin_desc')." WHERE sdname='default'";
+$res = sql_query($query);
+$obj = mysql_fetch_object($res);
+$skinid = $obj->sdnumber;
+$query = 'INSERT INTO '.sql_table('skin')." VALUES (" . $skinid . ", 'imagepopup', '<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title><%imagetext%></title>\r\n  <style type=\"text/css\">\r\n   img { border: none; }\r\n  </style>\r\n</head>\r\n<body>\r\n  <a href=\"javascript:window.close();\"><%image%></a>\r\n</body>\r\n</html>');";
+upgrade_query("Adding 'imagepopup' skinparts",$query);
+
+// 8. add POPUP_CODE, MEDIA_CODE, IMAGE_CODE to ALL templates
+$query = 'SELECT tdnumber FROM '.sql_table('template_desc');
+$res = sql_query($query);      // get all template ids
+while ($obj = mysql_fetch_object($res)) {
+       $tid = $obj->tdnumber;  // template id
+
+       $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'POPUP_CODE', '<%popuplink%>');";
+       $query2 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'MEDIA_CODE', '<%media%>');";
+       $query3 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'IMAGE_CODE', '<%image%>');";
+       upgrade_query("Adding popupcode to template $tid",$query);
+       upgrade_query("Adding mediacode to template $tid",$query2);
+       upgrade_query("Adding imagecode to template $tid",$query3);
+       
+}
+
+// 3. add cip to nucleus_comment
+$query =  'ALTER TABLE '.sql_table('comment')
+       . " ADD cip varchar(15) NOT NULL default ''";
+upgrade_query("Adding IP attribute to comments",$query);
+
+}
+
+
 ?>
\ No newline at end of file
index 435889e..a28c739 100755 (executable)
@@ -1,41 +1,41 @@
-<?php\r
-function upgrade_do10() {\r
-       \r
-if (upgrade_checkinstall(10))\r
-       return "already installed";\r
-\r
-// 1. add mcookiekey to nucleus_member\r
-$query =  'ALTER TABLE '.sql_table('member')\r
-       . " ADD mcookiekey varchar(40) ";\r
-$res = upgrade_query("Adding cookiekey attribute to members",$query);       \r
-\r
-// only do this when the previous query succeeds\r
-if ($res) {\r
-       // 2. for all members: hash their password and also copy it to mcookiekey\r
-       $query = 'SELECT * FROM '.sql_table('member');\r
-       $res = mysql_query($query);\r
-       while ($current = mysql_fetch_object($res)) {\r
-               $hashedpw = md5($current->mpassword);\r
-               $updquery = 'UPDATE '.sql_table('member')." SET mpassword='$hashedpw' WHERE mnumber=" . $current->mnumber;\r
-               upgrade_query("Encrypting password for member " . $current->mnumber,$updquery);\r
-       }\r
-}\r
-\r
-// 3. add extra indices to tables\r
-$query = 'ALTER TABLE '.sql_table('item').' ADD INDEX(iblog, itime);';\r
-upgrade_query("Adding extra index to nucleus_item",$query);\r
-$query = 'ALTER TABLE '.sql_table('comment').' ADD INDEX(citem);';\r
-upgrade_query("Adding extra index to nucleus_comment",$query);\r
-\r
-// 4. add DisableJsTools to config\r
-$query = 'INSERT INTO '.sql_table('config')." VALUES ('DisableJsTools', '0');";\r
-upgrade_query("Adding setting DisableJsTools",$query);\r
-\r
-// 5. Drop primary key in nucleus_actionlog\r
-$query = 'ALTER TABLE '.sql_table('actionlog').' DROP PRIMARY KEY;';\r
-upgrade_query("Dropping primary key for actionlog table",$query);\r
-\r
-}\r
-\r
-\r
+<?php
+function upgrade_do10() {
+       
+if (upgrade_checkinstall(10))
+       return "already installed";
+
+// 1. add mcookiekey to nucleus_member
+$query =  'ALTER TABLE '.sql_table('member')
+       . " ADD mcookiekey varchar(40) ";
+$res = upgrade_query("Adding cookiekey attribute to members",$query);       
+
+// only do this when the previous query succeeds
+if ($res) {
+       // 2. for all members: hash their password and also copy it to mcookiekey
+       $query = 'SELECT * FROM '.sql_table('member');
+       $res = mysql_query($query);
+       while ($current = mysql_fetch_object($res)) {
+               $hashedpw = md5($current->mpassword);
+               $updquery = 'UPDATE '.sql_table('member')." SET mpassword='$hashedpw' WHERE mnumber=" . $current->mnumber;
+               upgrade_query("Encrypting password for member " . $current->mnumber,$updquery);
+       }
+}
+
+// 3. add extra indices to tables
+$query = 'ALTER TABLE '.sql_table('item').' ADD INDEX(iblog, itime);';
+upgrade_query("Adding extra index to nucleus_item",$query);
+$query = 'ALTER TABLE '.sql_table('comment').' ADD INDEX(citem);';
+upgrade_query("Adding extra index to nucleus_comment",$query);
+
+// 4. add DisableJsTools to config
+$query = 'INSERT INTO '.sql_table('config')." VALUES ('DisableJsTools', '0');";
+upgrade_query("Adding setting DisableJsTools",$query);
+
+// 5. Drop primary key in nucleus_actionlog
+$query = 'ALTER TABLE '.sql_table('actionlog').' DROP PRIMARY KEY;';
+upgrade_query("Dropping primary key for actionlog table",$query);
+
+}
+
+
 ?>
\ No newline at end of file
index 2182147..763e6fb 100755 (executable)
@@ -1,89 +1,89 @@
-<?php\r
-function upgrade_do11() {\r
-\r
-if (upgrade_checkinstall(11))\r
-       return "already installed";\r
-\r
-// 1. add some options to nucleus_config\r
-$query = 'INSERT INTO '.sql_table('config')." VALUES ('CookiePath', '/');";\r
-upgrade_query('CookiePath setting',$query);\r
-$query = 'INSERT INTO '.sql_table('config')." VALUES ('CookieDomain', '');";\r
-upgrade_query('CookieDomain setting',$query);\r
-$query = 'INSERT INTO '.sql_table('config')." VALUES ('CookieSecure', '0');";\r
-upgrade_query('CookieSecure setting',$query);\r
-$query = 'INSERT INTO '.sql_table('config')." VALUES ('MediaPrefix', '1');";\r
-upgrade_query('MediaPrefix setting',$query);\r
-\r
-\r
-// 2. add language field to member table\r
-upgrade_query("Language setting (member)", \r
-                     'ALTER TABLE '.sql_table('member')." ADD deflang varchar(20) NOT NULL default '';");\r
-\r
-// 3. create category table and update other tables (nucleus_item and nucleus_blog)\r
-$query = 'CREATE TABLE '.sql_table('category').' ('\r
-       ." catid int(11) NOT NULL auto_increment,"\r
-       ." cblog int(11) NOT NULL, "\r
-       ." cname varchar(40),"\r
-       ." cdesc varchar(200),"\r
-       ." PRIMARY KEY (catid)"\r
-       .") ";\r
-upgrade_query('New table '.sql_table('category'), $query);\r
-\r
-upgrade_query("Adding category attribute to item-table", \r
-       'ALTER TABLE '.sql_table('item').' ADD icat int(11)');\r
-upgrade_query("Adding defcat attribute to blog-table", \r
-       'ALTER TABLE '.sql_table('blog').' ADD bdefcat int(11)');\r
-\r
-// 4. add 'general' categories for all blogs, and update nucleus_item\r
-$catid = 1;    // generate catids ourself\r
-$query = 'SELECT bnumber FROM '.sql_table('blog');\r
-$res = mysql_query($query);\r
-while ($current = mysql_fetch_object($res)) {\r
-       $blogid = $current->bnumber;\r
-       \r
-       $query = 'INSERT INTO '.sql_table('category')." (catid, cblog, cname, cdesc) VALUES ($catid, $blogid, 'General', 'Items that do not fit in other categories')";\r
-       $r = upgrade_query("Adding category 'general' for blog " . $blogid, $query);\r
-       \r
-       // only perform next actions when insert went ok\r
-       if ($r) {\r
-               $query = 'UPDATE '.sql_table('blog')." SET bdefcat=$catid WHERE bnumber=$blogid";\r
-               upgrade_query("Setting the default category for blog $blogid to the 'General' category", $query);\r
-       \r
-               $query = 'UPDATE '.sql_table('item')." SET icat=$catid WHERE iblog=$blogid";\r
-               upgrade_query("Assigning all existing items of blog $blogid to the 'General' category",$query);\r
-       }\r
-\r
-       $catid++;\r
-}\r
-\r
-// 5. add content type field to skins\r
-$query = 'ALTER TABLE '.sql_table('skin_desc')." ADD sdtype VARCHAR(40) NOT NULL DEFAULT 'text/html'";\r
-upgrade_query("Adding content type field to skins (text/html)", $query);\r
-\r
-// 6. try to set content type for xml-rss skin to text/xml\r
-$query = 'UPDATE '.sql_table('skin_desc')." SET sdtype='text/xml' WHERE sdname='xmlrss'";\r
-upgrade_query("Setting content type for xmlrss skin to text/xml", $query);\r
-\r
-// 7. add template parts for category lists to all templates\r
-$query = 'SELECT tdnumber FROM '.sql_table('template_desc');\r
-$res = sql_query($query);      // get all template ids\r
-while ($obj = mysql_fetch_object($res)) {\r
-       $tid = $obj->tdnumber;  // template id\r
-\r
-       $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_HEADER', '<ul><li><a href=\"<%blogurl%>\">All</a></li>');";\r
-       $query2 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_LISTITEM', '<li><a href=\"<%catlink%>\"><%catname%></a></li>');";\r
-       $query3 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_FOOTER', '</ul>');";\r
-       upgrade_query("Adding categorylist header to template $tid",$query);\r
-       upgrade_query("Adding categorylist item to template $tid",$query2);\r
-       upgrade_query("Adding categorylist footer to template $tid",$query3);\r
-       \r
-}\r
-\r
-// 8. add bnotifytype column to blog tables\r
-upgrade_query("Notify Type Setting", \r
-                     'ALTER TABLE '.sql_table('blog')." ADD bnotifytype INT(11) NOT NULL default '15';");\r
-\r
-\r
-}\r
-\r
+<?php
+function upgrade_do11() {
+
+if (upgrade_checkinstall(11))
+       return "already installed";
+
+// 1. add some options to nucleus_config
+$query = 'INSERT INTO '.sql_table('config')." VALUES ('CookiePath', '/');";
+upgrade_query('CookiePath setting',$query);
+$query = 'INSERT INTO '.sql_table('config')." VALUES ('CookieDomain', '');";
+upgrade_query('CookieDomain setting',$query);
+$query = 'INSERT INTO '.sql_table('config')." VALUES ('CookieSecure', '0');";
+upgrade_query('CookieSecure setting',$query);
+$query = 'INSERT INTO '.sql_table('config')." VALUES ('MediaPrefix', '1');";
+upgrade_query('MediaPrefix setting',$query);
+
+
+// 2. add language field to member table
+upgrade_query("Language setting (member)", 
+                     'ALTER TABLE '.sql_table('member')." ADD deflang varchar(20) NOT NULL default '';");
+
+// 3. create category table and update other tables (nucleus_item and nucleus_blog)
+$query = 'CREATE TABLE '.sql_table('category').' ('
+       ." catid int(11) NOT NULL auto_increment,"
+       ." cblog int(11) NOT NULL, "
+       ." cname varchar(40),"
+       ." cdesc varchar(200),"
+       ." PRIMARY KEY (catid)"
+       .") ";
+upgrade_query('New table '.sql_table('category'), $query);
+
+upgrade_query("Adding category attribute to item-table", 
+       'ALTER TABLE '.sql_table('item').' ADD icat int(11)');
+upgrade_query("Adding defcat attribute to blog-table", 
+       'ALTER TABLE '.sql_table('blog').' ADD bdefcat int(11)');
+
+// 4. add 'general' categories for all blogs, and update nucleus_item
+$catid = 1;    // generate catids ourself
+$query = 'SELECT bnumber FROM '.sql_table('blog');
+$res = mysql_query($query);
+while ($current = mysql_fetch_object($res)) {
+       $blogid = $current->bnumber;
+       
+       $query = 'INSERT INTO '.sql_table('category')." (catid, cblog, cname, cdesc) VALUES ($catid, $blogid, 'General', 'Items that do not fit in other categories')";
+       $r = upgrade_query("Adding category 'general' for blog " . $blogid, $query);
+       
+       // only perform next actions when insert went ok
+       if ($r) {
+               $query = 'UPDATE '.sql_table('blog')." SET bdefcat=$catid WHERE bnumber=$blogid";
+               upgrade_query("Setting the default category for blog $blogid to the 'General' category", $query);
+       
+               $query = 'UPDATE '.sql_table('item')." SET icat=$catid WHERE iblog=$blogid";
+               upgrade_query("Assigning all existing items of blog $blogid to the 'General' category",$query);
+       }
+
+       $catid++;
+}
+
+// 5. add content type field to skins
+$query = 'ALTER TABLE '.sql_table('skin_desc')." ADD sdtype VARCHAR(40) NOT NULL DEFAULT 'text/html'";
+upgrade_query("Adding content type field to skins (text/html)", $query);
+
+// 6. try to set content type for xml-rss skin to text/xml
+$query = 'UPDATE '.sql_table('skin_desc')." SET sdtype='text/xml' WHERE sdname='xmlrss'";
+upgrade_query("Setting content type for xmlrss skin to text/xml", $query);
+
+// 7. add template parts for category lists to all templates
+$query = 'SELECT tdnumber FROM '.sql_table('template_desc');
+$res = sql_query($query);      // get all template ids
+while ($obj = mysql_fetch_object($res)) {
+       $tid = $obj->tdnumber;  // template id
+
+       $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_HEADER', '<ul><li><a href=\"<%blogurl%>\">All</a></li>');";
+       $query2 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_LISTITEM', '<li><a href=\"<%catlink%>\"><%catname%></a></li>');";
+       $query3 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_FOOTER', '</ul>');";
+       upgrade_query("Adding categorylist header to template $tid",$query);
+       upgrade_query("Adding categorylist item to template $tid",$query2);
+       upgrade_query("Adding categorylist footer to template $tid",$query3);
+       
+}
+
+// 8. add bnotifytype column to blog tables
+upgrade_query("Notify Type Setting", 
+                     'ALTER TABLE '.sql_table('blog')." ADD bnotifytype INT(11) NOT NULL default '15';");
+
+
+}
+
 ?>
\ No newline at end of file
index ef20c5e..637cf67 100755 (executable)
@@ -1,92 +1,92 @@
-<?php\r
-function upgrade_do15() {\r
-\r
-       if (upgrade_checkinstall(15))\r
-               return "already installed";\r
-\r
-       // first two queries are needed for people running the development version\r
-       global $nucleus;\r
-       if (strstr($nucleus['version'],'dev')) {\r
-               upgrade_query('Renaming table nucleus_plugins_events','RENAME TABLE '.sql_table('plugins_events').' TO '.sql_table('plugin_event'));\r
-               upgrade_query('Renaming table nucleus_plugins','RENAME TABLE '.sql_table('plugins').' TO '.sql_table('plugin'));\r
-       }\r
-       \r
-       // create nucleus_plugin_event\r
-       $query = 'CREATE TABLE '.sql_table('plugin_event').' (pid int(11) NOT NULL, event varchar(40)) TYPE=MyISAM;';\r
-       upgrade_query("Creating nucleus_plugin_event table",$query);\r
-\r
-       // create nucleus_plugin\r
-       $query = 'CREATE TABLE '.sql_table('plugin')." (pid int(11) NOT NULL auto_increment, pfile varchar(40) NOT NULL, porder int(11) not null, PRIMARY KEY(pid)) TYPE=MyISAM;";\r
-       upgrade_query("Creating nucleus_plugin table",$query);\r
-\r
-       // add MaxUploadSize to config  \r
-       $query = 'INSERT INTO '.sql_table('config')." VALUES ('MaxUploadSize','1048576')";\r
-       upgrade_query('MaxUploadSize setting',$query);  \r
-       \r
-\r
-       // try to add cblog column when it does not exists yet\r
-       $query = 'SELECT * FROM '.sql_table('comment').' WHERE cblog=0 LIMIT 1';\r
-       $res = mysql_query($query);\r
-       if (!$res || (mysql_num_rows($res) > 0)) {\r
-\r
-               $query = 'ALTER TABLE '.sql_table('comment')." ADD cblog int(11) NOT NULL default '0'";\r
-               upgrade_query('Adding cblog column in table nucleus_comment',$query);\r
-\r
-               $query = 'SELECT inumber, iblog FROM '.sql_table('item').', '.sql_table('comment').' WHERE inumber=citem AND cblog=0';\r
-               $res = sql_query($query);\r
-\r
-               while($o = mysql_fetch_object($res)) {\r
-                       $query = 'UPDATE '.sql_table('comment')." SET cblog='".$o->iblog."' WHERE citem='".$o->inumber."'";\r
-                       upgrade_query('Filling cblog column for item ' . $o->inumber, $query);\r
-               }\r
-       }       \r
-       \r
-       // add 'pluginURL' to config\r
-       global $CONF;\r
-       $pluginURL = $CONF['AdminURL'] . "plugins/";\r
-       $query = 'INSERT INTO '.sql_table('config')." VALUES ('PluginURL', '$pluginURL');";\r
-       upgrade_query('PluginURL setting', $query);\r
-       \r
-       // add 'EDITLINK' to all templates\r
-       $query = 'SELECT tdnumber FROM '.sql_table('template_desc');\r
-       $res = sql_query($query);       // get all template ids\r
-       while ($obj = mysql_fetch_object($res)) {\r
-               $tid = $obj->tdnumber;  // template id\r
-       \r
-               $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'EDITLINK', '<a href=\"<%editlink%>\" onclick=\"<%editpopupcode%>\">edit</a>');";\r
-               upgrade_query("Adding editlink code to template $tid",$query);\r
-               \r
-       }\r
-       \r
-       // in templates: update DATE_HEADER templates\r
-       $res = sql_query('SELECT * FROM '.sql_table('template').' WHERE tpartname=\'DATE_HEADER\'');\r
-       while ($o = mysql_fetch_object($res)) {\r
-               $newval = str_replace('<%daylink%>','<%%daylink%%>',$o->tcontent);\r
-               $query = 'UPDATE '.sql_table('template').' SET tcontent=\''. addslashes($newval).'\' WHERE tdesc=' . $o->tdesc . ' AND tpartname=\'DATE_HEADER\'';\r
-               upgrade_query('Updating DATE_HEADER part in template ' . $o->tdesc, $query);\r
-       }\r
-       \r
-       // in templates: add 'comments'-templatevar to all non-empty ITEM templates     \r
-       $res = sql_query('SELECT * FROM '.sql_table('template').' WHERE tpartname=\'ITEM\'');\r
-       while ($o = mysql_fetch_object($res)) {\r
-               if (!strstr($o->tcontent,'<%comments%>')) {\r
-                       $newval = $o->tcontent . '<%comments%>';\r
-                       $query = 'UPDATE '.sql_table('template').' SET tcontent=\''. addslashes($newval).'\' WHERE tdesc=' . $o->tdesc . ' AND tpartname=\'ITEM\'';\r
-                       upgrade_query('Updating ITEM part in template ' . $o->tdesc, $query);\r
-               }\r
-       }\r
-\r
-       // new setting: NonmemberMail\r
-       upgrade_query('NonmemberMail setting', 'INSERT INTO '.sql_table('config')." VALUES ('NonmemberMail', '0');");\r
-       \r
-       // new setting: ProtectMemNames\r
-       upgrade_query('ProtectMemNames setting', 'INSERT INTO '.sql_table('config')." VALUES ('ProtectMemNames', '1');");\r
-\r
-       // create new table: nucleus_plugin_option\r
-       $query = 'CREATE TABLE '.sql_table('plugin_option')." (opid int(11) NOT NULL, oname varchar(20) NOT NULL, ovalue varchar(128) not null, odesc varchar(255), otype varchar(8), PRIMARY KEY(opid, oname)) TYPE=MyISAM;";\r
-       upgrade_query("Creating nucleus_plugin_option table",$query);\r
-\r
-\r
-}\r
-\r
+<?php
+function upgrade_do15() {
+
+       if (upgrade_checkinstall(15))
+               return "already installed";
+
+       // first two queries are needed for people running the development version
+       global $nucleus;
+       if (strstr($nucleus['version'],'dev')) {
+               upgrade_query('Renaming table nucleus_plugins_events','RENAME TABLE '.sql_table('plugins_events').' TO '.sql_table('plugin_event'));
+               upgrade_query('Renaming table nucleus_plugins','RENAME TABLE '.sql_table('plugins').' TO '.sql_table('plugin'));
+       }
+       
+       // create nucleus_plugin_event
+       $query = 'CREATE TABLE '.sql_table('plugin_event').' (pid int(11) NOT NULL, event varchar(40)) TYPE=MyISAM;';
+       upgrade_query("Creating nucleus_plugin_event table",$query);
+
+       // create nucleus_plugin
+       $query = 'CREATE TABLE '.sql_table('plugin')." (pid int(11) NOT NULL auto_increment, pfile varchar(40) NOT NULL, porder int(11) not null, PRIMARY KEY(pid)) TYPE=MyISAM;";
+       upgrade_query("Creating nucleus_plugin table",$query);
+
+       // add MaxUploadSize to config  
+       $query = 'INSERT INTO '.sql_table('config')." VALUES ('MaxUploadSize','1048576')";
+       upgrade_query('MaxUploadSize setting',$query);  
+       
+
+       // try to add cblog column when it does not exists yet
+       $query = 'SELECT * FROM '.sql_table('comment').' WHERE cblog=0 LIMIT 1';
+       $res = mysql_query($query);
+       if (!$res || (mysql_num_rows($res) > 0)) {
+
+               $query = 'ALTER TABLE '.sql_table('comment')." ADD cblog int(11) NOT NULL default '0'";
+               upgrade_query('Adding cblog column in table nucleus_comment',$query);
+
+               $query = 'SELECT inumber, iblog FROM '.sql_table('item').', '.sql_table('comment').' WHERE inumber=citem AND cblog=0';
+               $res = sql_query($query);
+
+               while($o = mysql_fetch_object($res)) {
+                       $query = 'UPDATE '.sql_table('comment')." SET cblog='".$o->iblog."' WHERE citem='".$o->inumber."'";
+                       upgrade_query('Filling cblog column for item ' . $o->inumber, $query);
+               }
+       }       
+       
+       // add 'pluginURL' to config
+       global $CONF;
+       $pluginURL = $CONF['AdminURL'] . "plugins/";
+       $query = 'INSERT INTO '.sql_table('config')." VALUES ('PluginURL', '$pluginURL');";
+       upgrade_query('PluginURL setting', $query);
+       
+       // add 'EDITLINK' to all templates
+       $query = 'SELECT tdnumber FROM '.sql_table('template_desc');
+       $res = sql_query($query);       // get all template ids
+       while ($obj = mysql_fetch_object($res)) {
+               $tid = $obj->tdnumber;  // template id
+       
+               $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'EDITLINK', '<a href=\"<%editlink%>\" onclick=\"<%editpopupcode%>\">edit</a>');";
+               upgrade_query("Adding editlink code to template $tid",$query);
+               
+       }
+       
+       // in templates: update DATE_HEADER templates
+       $res = sql_query('SELECT * FROM '.sql_table('template').' WHERE tpartname=\'DATE_HEADER\'');
+       while ($o = mysql_fetch_object($res)) {
+               $newval = str_replace('<%daylink%>','<%%daylink%%>',$o->tcontent);
+               $query = 'UPDATE '.sql_table('template').' SET tcontent=\''. addslashes($newval).'\' WHERE tdesc=' . $o->tdesc . ' AND tpartname=\'DATE_HEADER\'';
+               upgrade_query('Updating DATE_HEADER part in template ' . $o->tdesc, $query);
+       }
+       
+       // in templates: add 'comments'-templatevar to all non-empty ITEM templates     
+       $res = sql_query('SELECT * FROM '.sql_table('template').' WHERE tpartname=\'ITEM\'');
+       while ($o = mysql_fetch_object($res)) {
+               if (!strstr($o->tcontent,'<%comments%>')) {
+                       $newval = $o->tcontent . '<%comments%>';
+                       $query = 'UPDATE '.sql_table('template').' SET tcontent=\''. addslashes($newval).'\' WHERE tdesc=' . $o->tdesc . ' AND tpartname=\'ITEM\'';
+                       upgrade_query('Updating ITEM part in template ' . $o->tdesc, $query);
+               }
+       }
+
+       // new setting: NonmemberMail
+       upgrade_query('NonmemberMail setting', 'INSERT INTO '.sql_table('config')." VALUES ('NonmemberMail', '0');");
+       
+       // new setting: ProtectMemNames
+       upgrade_query('ProtectMemNames setting', 'INSERT INTO '.sql_table('config')." VALUES ('ProtectMemNames', '1');");
+
+       // create new table: nucleus_plugin_option
+       $query = 'CREATE TABLE '.sql_table('plugin_option')." (opid int(11) NOT NULL, oname varchar(20) NOT NULL, ovalue varchar(128) not null, odesc varchar(255), otype varchar(8), PRIMARY KEY(opid, oname)) TYPE=MyISAM;";
+       upgrade_query("Creating nucleus_plugin_option table",$query);
+
+
+}
+
 ?>
\ No newline at end of file
index 967f5fb..c5e4a9e 100755 (executable)
@@ -1,68 +1,68 @@
-<?php\r
-function upgrade_do20() {\r
-\r
-       if (upgrade_checkinstall(20))\r
-               return "already installed";\r
-\r
-       // queries come here\r
-       \r
-       // add ikarmaneg \r
-       $query =  'ALTER TABLE '.sql_table('item')\r
-                  . " ADD ikarmaneg int(11) NOT NULL default '0'";\r
-       upgrade_query("Adding ikarmaneg column to items",$query);\r
-\r
-       // rename ikarma to ikarmapos\r
-       $query =  'ALTER TABLE '.sql_table('item')\r
-                  . " CHANGE ikarma ikarmapos int(11) NOT NULL default '0'";\r
-       upgrade_query("Renaming ikarma column for items to ikarmapos",$query);\r
-\r
-       // drop key in actionlog\r
-       $query = 'ALTER TABLE '.sql_table('actionlog').' DROP PRIMARY KEY';\r
-       upgrade_query("Dropping primary key in actionlog table",$query);        \r
-       \r
-       // change cmail field length\r
-       $query = 'ALTER TABLE '.sql_table('comment').' CHANGE cmail cmail varchar(100) default NULL';\r
-       upgrade_query("changing max email/url length of guest comments to 100",$query); \r
-       \r
-       // create default skin option\r
-       $skinid = SKIN::getIdFromName('default');\r
-       $query = 'INSERT INTO '.sql_table('config')." VALUES ('BaseSkin', '$skinid');";\r
-       upgrade_query("Adding setting BaseSkin",$query);\r
-\r
-       // add SkinsURL setting\r
-       global $CONF;\r
-       $skinsurl = str_replace('/media/','/skins/',$CONF['MediaURL']);\r
-       $query = 'INSERT INTO '.sql_table('config')." VALUES ('SkinsURL', '".addslashes($skinsurl)."');";\r
-       upgrade_query("Adding setting SkinsURL",$query);\r
-\r
-       // add ActionURL setting\r
-       $actionurl = str_replace('/media/','/action.php',$CONF['MediaURL']);\r
-       $query = 'INSERT INTO '.sql_table('config')." VALUES ('ActionURL', '".addslashes($actionurl)."');";\r
-       upgrade_query("Adding setting ActionURL",$query);\r
-       \r
-       // time offset can also be decimal (for half time zones like GMT+3:30)\r
-       upgrade_query('Changing time offset column type to decimal','ALTER TABLE '.sql_table('blog')." CHANGE btimeoffset btimeoffset DECIMAL( 3, 1 ) DEFAULT '0' NOT NULL");\r
-       \r
-       // add sdincmode and sdincpref to skins\r
-       $query =  'ALTER TABLE '.sql_table('skin_desc')\r
-                  . " ADD sdincmode varchar(10) NOT NULL default 'normal'";\r
-       upgrade_query('Adding IncludeMode property to skins',$query);   \r
-       $query =  'ALTER TABLE '.sql_table('skin_desc')\r
-                  . " ADD sdincpref varchar(50) NOT NULL default ''";\r
-       upgrade_query('Adding IncludePrefix property to skins',$query); \r
-       \r
-       // add ballowpast option to nucleus_blog\r
-       $query =  'ALTER TABLE '.sql_table('blog')." ADD ballowpast tinyint(2) NOT NULL default '0'";\r
-       upgrade_query("Adding 'Allow posting to the past' option to blogs",$query);\r
-       \r
-       // URLMode\r
-       $query = 'INSERT INTO '.sql_table('config')." VALUES ('URLMode', 'normal');";\r
-       upgrade_query("Adding setting URLMode",$query);\r
-       \r
-       // add id to nucleus_plugin_option (allows for ordening)\r
-       $query =  'ALTER TABLE '.sql_table('plugin_option').' ADD oid int(11) NOT NULL auto_increment UNIQUE ';\r
-       upgrade_query("Adding id attribute to plugin options table",$query);\r
-       \r
-}\r
-\r
+<?php
+function upgrade_do20() {
+
+       if (upgrade_checkinstall(20))
+               return "already installed";
+
+       // queries come here
+       
+       // add ikarmaneg 
+       $query =  'ALTER TABLE '.sql_table('item')
+                  . " ADD ikarmaneg int(11) NOT NULL default '0'";
+       upgrade_query("Adding ikarmaneg column to items",$query);
+
+       // rename ikarma to ikarmapos
+       $query =  'ALTER TABLE '.sql_table('item')
+                  . " CHANGE ikarma ikarmapos int(11) NOT NULL default '0'";
+       upgrade_query("Renaming ikarma column for items to ikarmapos",$query);
+
+       // drop key in actionlog
+       $query = 'ALTER TABLE '.sql_table('actionlog').' DROP PRIMARY KEY';
+       upgrade_query("Dropping primary key in actionlog table",$query);        
+       
+       // change cmail field length
+       $query = 'ALTER TABLE '.sql_table('comment').' CHANGE cmail cmail varchar(100) default NULL';
+       upgrade_query("changing max email/url length of guest comments to 100",$query); 
+       
+       // create default skin option
+       $skinid = SKIN::getIdFromName('default');
+       $query = 'INSERT INTO '.sql_table('config')." VALUES ('BaseSkin', '$skinid');";
+       upgrade_query("Adding setting BaseSkin",$query);
+
+       // add SkinsURL setting
+       global $CONF;
+       $skinsurl = str_replace('/media/','/skins/',$CONF['MediaURL']);
+       $query = 'INSERT INTO '.sql_table('config')." VALUES ('SkinsURL', '".addslashes($skinsurl)."');";
+       upgrade_query("Adding setting SkinsURL",$query);
+
+       // add ActionURL setting
+       $actionurl = str_replace('/media/','/action.php',$CONF['MediaURL']);
+       $query = 'INSERT INTO '.sql_table('config')." VALUES ('ActionURL', '".addslashes($actionurl)."');";
+       upgrade_query("Adding setting ActionURL",$query);
+       
+       // time offset can also be decimal (for half time zones like GMT+3:30)
+       upgrade_query('Changing time offset column type to decimal','ALTER TABLE '.sql_table('blog')." CHANGE btimeoffset btimeoffset DECIMAL( 3, 1 ) DEFAULT '0' NOT NULL");
+       
+       // add sdincmode and sdincpref to skins
+       $query =  'ALTER TABLE '.sql_table('skin_desc')
+                  . " ADD sdincmode varchar(10) NOT NULL default 'normal'";
+       upgrade_query('Adding IncludeMode property to skins',$query);   
+       $query =  'ALTER TABLE '.sql_table('skin_desc')
+                  . " ADD sdincpref varchar(50) NOT NULL default ''";
+       upgrade_query('Adding IncludePrefix property to skins',$query); 
+       
+       // add ballowpast option to nucleus_blog
+       $query =  'ALTER TABLE '.sql_table('blog')." ADD ballowpast tinyint(2) NOT NULL default '0'";
+       upgrade_query("Adding 'Allow posting to the past' option to blogs",$query);
+       
+       // URLMode
+       $query = 'INSERT INTO '.sql_table('config')." VALUES ('URLMode', 'normal');";
+       upgrade_query("Adding setting URLMode",$query);
+       
+       // add id to nucleus_plugin_option (allows for ordening)
+       $query =  'ALTER TABLE '.sql_table('plugin_option').' ADD oid int(11) NOT NULL auto_increment UNIQUE ';
+       upgrade_query("Adding id attribute to plugin options table",$query);
+       
+}
+
 ?>
\ No newline at end of file
index 72bbe1c..9e4860a 100755 (executable)
-<?php\r
-function upgrade_do25() {\r
-\r
-       if (upgrade_checkinstall(25))\r
-               return 'already installed';\r
-\r
-       // -------------------- 2.0 -> 2.2 (dev only) --------------------\r
-       // (avoid doing this twice :))\r
-       if (!upgrade_checkinstall(22))  {\r
-               // 1. create nucleus_plugin_option_desc table\r
-               // create new table: nucleus_plugin_option\r
-               $query = 'CREATE TABLE IF NOT EXISTS '. sql_table('plugin_option_desc') . '('\r
-                          ." oid int(11) NOT NULL auto_increment UNIQUE,"\r
-                          ." opid int(11) NOT NULL,"\r
-                          ." oname varchar(20) NOT NULL,"\r
-                          ." ocontext varchar(20) NOT NULL,"\r
-                          ." odesc varchar(255),"\r
-                          ." otype varchar(20),"\r
-                          ." odef text,"\r
-                          ." oextra text,"\r
-                          ." PRIMARY KEY(opid, oname, ocontext)"\r
-                          .") TYPE=MyISAM;";\r
-               upgrade_query('Creating ' . sql_table('plugin_option_desc') . ' table',$query);\r
-\r
-               // 2. move all data from plugin_option to plugin_option_desc\r
-               $query = 'SELECT * FROM ' . sql_table('plugin_option') .' ORDER BY oid ASC';\r
-               $res = sql_query($query);\r
-               $aValues = array();\r
-               while ($o = mysql_fetch_object($res)) {\r
-                       $query = 'INSERT INTO ' . sql_table('plugin_option_desc')\r
-                                  .' (opid, oname, ocontext, odesc, otype)'\r
-                                  ." VALUES ("\r
-                                               ."'".addslashes($o->opid)."',"\r
-                                               ."'".addslashes($o->oname) ."',"\r
-                                               ."'global',"\r
-                                               ."'".addslashes($o->odesc) ."',"\r
-                                               ."'".addslashes($o->otype) ."')";\r
-                       upgrade_query('Moving option description for '.htmlspecialchars($o->oname).' to ' . sql_table('plugin_option_desc'), $query);\r
-\r
-                       // store new id\r
-                       $aValues[] = array ( \r
-                                                       'id' => mysql_insert_id(),\r
-                                                       'value' => $o->ovalue\r
-                                               );\r
-\r
-               }\r
-\r
-               // 3. alter plugin_options table \r
-               $query = 'ALTER TABLE ' . sql_table('plugin_option')\r
-                          .' DROP PRIMARY KEY,'\r
-                          .' DROP KEY oid,'\r
-                          .' DROP COLUMN opid,'\r
-                          .' DROP COLUMN oname,'\r
-                          .' DROP COLUMN odesc,'\r
-                          .' DROP COLUMN otype,'               \r
-                          .' ADD ocontextid INT(11) NOT NULL,'\r
-                          .' ADD PRIMARY KEY (oid, ocontextid)';\r
-               upgrade_query('Altering ' . sql_table('plugin_option') . ' table', $query);\r
-\r
-               // 4. delete from plugin_options\r
-               $query = 'DELETE FROM ' . sql_table('plugin_option');\r
-               upgrade_query('Cleaning ' . sql_table('plugin_option'), $query);\r
-\r
-               // 5. refill plugin_options\r
-               foreach ($aValues as $aInfo) {\r
-                       $query = 'INSERT INTO ' . sql_table('plugin_option') \r
-                                  .' (oid, ocontextid, ovalue)'\r
-                                  ." VALUES (".$aInfo['id'].",'0','".addslashes($aInfo['value'])."')";\r
-                       upgrade_query('Re-filling ' . sql_table('plugin_option') . ' ('.$aInfo['id'].')', $query);\r
-               }       \r
-       }               \r
-       \r
-       // -------------------- 2.0 -> 2.5 --------------------\r
-       \r
-       if (!upgrade_checkIfIndexExists('item', array('ibody', 'ititle', 'imore'))) {\r
-               // add fulltext indices for search\r
-               $query = 'ALTER TABLE ' . sql_table('item') . ' ADD FULLTEXT(ibody, ititle, imore)';\r
-               upgrade_query('Adding fulltext index to item table', $query);\r
-               // repair table is needed (build index)\r
-               upgrade_query('Repairing item table', 'REPAIR TABLE ' . sql_table('item'));\r
-       }\r
-       \r
-       if (!upgrade_checkIfIndexExists('comment', array('cbody'))) {\r
-               $query = 'ALTER TABLE ' . sql_table('comment') . ' ADD FULLTEXT(cbody)';\r
-               upgrade_query('Adding fulltext index to comments table', $query);       \r
-               upgrade_query('Repairing comment table', 'REPAIR TABLE ' . sql_table('comment'));       \r
-       }       \r
-       \r
-       if (!upgrade_checkinstall(24))  {\r
-           $query = ' ALTER TABLE ' . sql_table('blog') . ' ADD bincludesearch TINYINT(2) DEFAULT 0';\r
-               upgrade_query('Adding bincludesearch column to blog', $query);\r
-       }\r
-       \r
-       // modify plugin option table value column type to TEXT\r
-       $query = 'ALTER TABLE ' . sql_table('plugin_option') . ' MODIFY ovalue TEXT NOT NULL default \'\'';\r
-       upgrade_query('Modifying plugin options column type', $query);\r
-       \r
-       // insert database version  (allows us to do better version checking in v3.0 upgrades)\r
-       $query = 'INSERT INTO ' . sql_table('config') . ' (name,value) VALUES (\'DatabaseVersion\',\'250\')';\r
-       upgrade_query('Adding DatabaseVersion to config table', $query);\r
-\r
-       // insert External Authentication global option\r
-       $query = 'INSERT INTO ' . sql_table('config') . ' (name,value) VALUES (\'ExtAuth\',\'0\')';\r
-       upgrade_query('Adding External Authentication option to config table', $query); \r
-}\r
-\r
-?>\r
+<?php
+function upgrade_do25() {
+
+       if (upgrade_checkinstall(25))
+               return 'already installed';
+
+       // -------------------- 2.0 -> 2.2 (dev only) --------------------
+       // (avoid doing this twice :))
+       if (!upgrade_checkinstall(22))  {
+               // 1. create nucleus_plugin_option_desc table
+               // create new table: nucleus_plugin_option
+               $query = 'CREATE TABLE IF NOT EXISTS '. sql_table('plugin_option_desc') . '('
+                          ." oid int(11) NOT NULL auto_increment UNIQUE,"
+                          ." opid int(11) NOT NULL,"
+                          ." oname varchar(20) NOT NULL,"
+                          ." ocontext varchar(20) NOT NULL,"
+                          ." odesc varchar(255),"
+                          ." otype varchar(20),"
+                          ." odef text,"
+                          ." oextra text,"
+                          ." PRIMARY KEY(opid, oname, ocontext)"
+                          .") TYPE=MyISAM;";
+               upgrade_query('Creating ' . sql_table('plugin_option_desc') . ' table',$query);
+
+               // 2. move all data from plugin_option to plugin_option_desc
+               $query = 'SELECT * FROM ' . sql_table('plugin_option') .' ORDER BY oid ASC';
+               $res = sql_query($query);
+               $aValues = array();
+               while ($o = mysql_fetch_object($res)) {
+                       $query = 'INSERT INTO ' . sql_table('plugin_option_desc')
+                                  .' (opid, oname, ocontext, odesc, otype)'
+                                  ." VALUES ("
+                                               ."'".addslashes($o->opid)."',"
+                                               ."'".addslashes($o->oname) ."',"
+                                               ."'global',"
+                                               ."'".addslashes($o->odesc) ."',"
+                                               ."'".addslashes($o->otype) ."')";
+                       upgrade_query('Moving option description for '.htmlspecialchars($o->oname).' to ' . sql_table('plugin_option_desc'), $query);
+
+                       // store new id
+                       $aValues[] = array ( 
+                                                       'id' => mysql_insert_id(),
+                                                       'value' => $o->ovalue
+                                               );
+
+               }
+
+               // 3. alter plugin_options table 
+               $query = 'ALTER TABLE ' . sql_table('plugin_option')
+                          .' DROP PRIMARY KEY,'
+                          .' DROP KEY oid,'
+                          .' DROP COLUMN opid,'
+                          .' DROP COLUMN oname,'
+                          .' DROP COLUMN odesc,'
+                          .' DROP COLUMN otype,'               
+                          .' ADD ocontextid INT(11) NOT NULL,'
+                          .' ADD PRIMARY KEY (oid, ocontextid)';
+               upgrade_query('Altering ' . sql_table('plugin_option') . ' table', $query);
+
+               // 4. delete from plugin_options
+               $query = 'DELETE FROM ' . sql_table('plugin_option');
+               upgrade_query('Cleaning ' . sql_table('plugin_option'), $query);
+
+               // 5. refill plugin_options
+               foreach ($aValues as $aInfo) {
+                       $query = 'INSERT INTO ' . sql_table('plugin_option') 
+                                  .' (oid, ocontextid, ovalue)'
+                                  ." VALUES (".$aInfo['id'].",'0','".addslashes($aInfo['value'])."')";
+                       upgrade_query('Re-filling ' . sql_table('plugin_option') . ' ('.$aInfo['id'].')', $query);
+               }       
+       }               
+       
+       // -------------------- 2.0 -> 2.5 --------------------
+       
+       if (!upgrade_checkIfIndexExists('item', array('ibody', 'ititle', 'imore'))) {
+               // add fulltext indices for search
+               $query = 'ALTER TABLE ' . sql_table('item') . ' ADD FULLTEXT(ibody, ititle, imore)';
+               upgrade_query('Adding fulltext index to item table', $query);
+               // repair table is needed (build index)
+               upgrade_query('Repairing item table', 'REPAIR TABLE ' . sql_table('item'));
+       }
+       
+       if (!upgrade_checkIfIndexExists('comment', array('cbody'))) {
+               $query = 'ALTER TABLE ' . sql_table('comment') . ' ADD FULLTEXT(cbody)';
+               upgrade_query('Adding fulltext index to comments table', $query);       
+               upgrade_query('Repairing comment table', 'REPAIR TABLE ' . sql_table('comment'));       
+       }       
+       
+       if (!upgrade_checkinstall(24))  {
+           $query = ' ALTER TABLE ' . sql_table('blog') . ' ADD bincludesearch TINYINT(2) DEFAULT 0';
+               upgrade_query('Adding bincludesearch column to blog', $query);
+       }
+       
+       // modify plugin option table value column type to TEXT
+       $query = 'ALTER TABLE ' . sql_table('plugin_option') . ' MODIFY ovalue TEXT NOT NULL default \'\'';
+       upgrade_query('Modifying plugin options column type', $query);
+       
+       // insert database version  (allows us to do better version checking in v3.0 upgrades)
+       $query = 'INSERT INTO ' . sql_table('config') . ' (name,value) VALUES (\'DatabaseVersion\',\'250\')';
+       upgrade_query('Adding DatabaseVersion to config table', $query);
+
+       // insert External Authentication global option
+       $query = 'INSERT INTO ' . sql_table('config') . ' (name,value) VALUES (\'ExtAuth\',\'0\')';
+       upgrade_query('Adding External Authentication option to config table', $query); 
+}
+
+?>
index cdd94b7..d4126a2 100755 (executable)
@@ -1,15 +1,15 @@
-<?php\r
-function upgrade_do30() {\r
-\r
-       if (upgrade_checkinstall(30))\r
-               return 'already installed';\r
-\r
-       // 2.5(beta/RC/...) -> 3.0\r
-       // update database version  \r
-       $query = 'UPDATE ' . sql_table('config') . ' set value=\'300\' where name=\'DatabaseVersion\'';\r
-       upgrade_query('Updating DatabaseVersion in config table to 300', $query);\r
-       \r
-       // nothing!\r
-}\r
-\r
-?>\r
+<?php
+function upgrade_do30() {
+
+       if (upgrade_checkinstall(30))
+               return 'already installed';
+
+       // 2.5(beta/RC/...) -> 3.0
+       // update database version  
+       $query = 'UPDATE ' . sql_table('config') . ' set value=\'300\' where name=\'DatabaseVersion\'';
+       upgrade_query('Updating DatabaseVersion in config table to 300', $query);
+       
+       // nothing!
+}
+
+?>
index ae8f576..828b575 100755 (executable)
@@ -1,15 +1,15 @@
-<?php\r
-function upgrade_do31() {\r
-\r
-       if (upgrade_checkinstall(31))\r
-               return 'already installed';\r
-\r
-       // 3.0 -> 3.1\r
-       // update database version  \r
-       $query = 'UPDATE ' . sql_table('config') . ' set value=\'310\' where name=\'DatabaseVersion\'';\r
-       upgrade_query('Updating DatabaseVersion in config table to 310', $query);\r
-       \r
-       // nothing!\r
-}\r
-\r
-?>\r
+<?php
+function upgrade_do31() {
+
+       if (upgrade_checkinstall(31))
+               return 'already installed';
+
+       // 3.0 -> 3.1
+       // update database version  
+       $query = 'UPDATE ' . sql_table('config') . ' set value=\'310\' where name=\'DatabaseVersion\'';
+       upgrade_query('Updating DatabaseVersion in config table to 310', $query);
+       
+       // nothing!
+}
+
+?>
index 0e99042..2e2f253 100755 (executable)
@@ -1,39 +1,39 @@
-<?php\r
-function upgrade_do32() {\r
-\r
-       if (upgrade_checkinstall(32))\r
-               return 'already installed';\r
-\r
-       // create nucleus_activation table\r
-       $query = 'CREATE TABLE ' . sql_table('activation') . ' ('\r
-                  . ' vkey varchar(40) NOT NULL default \'\','\r
-                  . ' vtime datetime NOT NULL default \'0000-00-00 00:00:00\','\r
-                  . ' vmember int(11) NOT NULL default \'0\','\r
-                  . ' vtype varchar(15) NOT NULL default \'\','\r
-                  . ' vextra varchar(128) NOT NULL default \'\','\r
-                  . ' PRIMARY KEY  (vkey) '\r
-                  . ' )';\r
-    upgrade_query('Creating account activation table', $query);    \r
-\r
-       // create CookiePrefix setting\r
-       $query = 'INSERT INTO '.sql_table('config')." VALUES ('CookiePrefix','')";\r
-       upgrade_query('Creating CookiePrefix config value',$query);     \r
-               \r
-       // create nucleus_tickets table\r
-       $query = 'CREATE TABLE ' . sql_table('tickets') . ' ('\r
-                  . ' ticket varchar(40) NOT NULL default \'\','\r
-                  . ' ctime datetime NOT NULL default \'0000-00-00 00:00:00\','\r
-                  . ' member int(11) NOT NULL default \'0\', '\r
-                  . ' PRIMARY KEY  (ticket, member) '\r
-                  . ' )';\r
-    upgrade_query('Creating ticket table', $query);    \r
-\r
-       // 3.1 -> 3.1+\r
-       // update database version  \r
-       $query = 'UPDATE ' . sql_table('config') . ' set value=\'320\' where name=\'DatabaseVersion\'';\r
-       upgrade_query('Updating DatabaseVersion in config table to 320', $query);\r
-       \r
-       // nothing!\r
-}\r
-\r
-?>\r
+<?php
+function upgrade_do32() {
+
+       if (upgrade_checkinstall(32))
+               return 'already installed';
+
+       // create nucleus_activation table
+       $query = 'CREATE TABLE ' . sql_table('activation') . ' ('
+                  . ' vkey varchar(40) NOT NULL default \'\','
+                  . ' vtime datetime NOT NULL default \'0000-00-00 00:00:00\','
+                  . ' vmember int(11) NOT NULL default \'0\','
+                  . ' vtype varchar(15) NOT NULL default \'\','
+                  . ' vextra varchar(128) NOT NULL default \'\','
+                  . ' PRIMARY KEY  (vkey) '
+                  . ' )';
+    upgrade_query('Creating account activation table', $query);    
+
+       // create CookiePrefix setting
+       $query = 'INSERT INTO '.sql_table('config')." VALUES ('CookiePrefix','')";
+       upgrade_query('Creating CookiePrefix config value',$query);     
+               
+       // create nucleus_tickets table
+       $query = 'CREATE TABLE ' . sql_table('tickets') . ' ('
+                  . ' ticket varchar(40) NOT NULL default \'\','
+                  . ' ctime datetime NOT NULL default \'0000-00-00 00:00:00\','
+                  . ' member int(11) NOT NULL default \'0\', '
+                  . ' PRIMARY KEY  (ticket, member) '
+                  . ' )';
+    upgrade_query('Creating ticket table', $query);    
+
+       // 3.1 -> 3.1+
+       // update database version  
+       $query = 'UPDATE ' . sql_table('config') . ' set value=\'320\' where name=\'DatabaseVersion\'';
+       upgrade_query('Updating DatabaseVersion in config table to 320', $query);
+       
+       // nothing!
+}
+
+?>
index 50f792c..3974d80 100755 (executable)
@@ -1,11 +1,11 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>Nothing Here</title>\r
-</head>\r
-<body>\r
-\r
-<h1>Nothing to see here</h1>\r
-\r
-</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
 </html>
\ No newline at end of file
index 790a049..000d9fe 100755 (executable)
@@ -1,18 +1,18 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>Nucleus - Readme</title>\r
-       <style type="text/css">\r
-       <!--\r
-               @import url(nucleus/styles/manual.css);\r
-       -->\r
-       </style>\r
-</head>\r
-<body>\r
-<h1>Readme</h1>\r
-\r
-<p>\r
-The only purpose of this file is to guide you to <a href="nucleus/documentation/index.html">the Nucleus manual</a>.\r
-</p>\r
-</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nucleus - Readme</title>
+       <style type="text/css">
+       <!--
+               @import url(nucleus/styles/manual.css);
+       -->
+       </style>
+</head>
+<body>
+<h1>Readme</h1>
+
+<p>
+The only purpose of this file is to guide you to <a href="nucleus/documentation/index.html">the Nucleus manual</a>.
+</p>
+</body>
 </html>
\ No newline at end of file
index b202b8d..032b921 100755 (executable)
@@ -1,2 +1,2 @@
-User-agent: *\r
-Disallow: action.php?\r
+User-agent: *
+Disallow: action.php?
diff --git a/rsd.php b/rsd.php
index c31da0d..90b9687 100755 (executable)
--- a/rsd.php
+++ b/rsd.php
@@ -1,8 +1,8 @@
-<?php\r
-// RSD file (http://archipelago.phrasewise.com/rsd)\r
-$CONF = array();\r
-include('./config.php');\r
-selectSkin('xml/rsd');\r
-selector();\r
-\r
-?>\r
+<?php
+// RSD file (http://archipelago.phrasewise.com/rsd)
+$CONF = array();
+include('./config.php');
+selectSkin('xml/rsd');
+selector();
+
+?>
index 74b3d00..148bd30 100644 (file)
-/*-------------------------------------------------\r
-  Nucleus CMS Stylesheet - bundled with version 3.2\r
-  Based on the Stanch skin by Ivan Fong\r
-  Mods by hcgtv and moraes\r
--------------------------------------------------*/\r
-\r
-/*-------------------------------------------------\r
-  General layout\r
--------------------------------------------------*/\r
-body\r
-{\r
-       background: #505050 url(images/bg.gif);\r
-       color: #494949;\r
-       font-family: "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;\r
-       font-size: 11px;\r
-       padding: 15px 0;\r
-       margin: 0;\r
-}\r
-img\r
-{\r
-       border: 0;\r
-}\r
-form\r
-{\r
-       margin: 0;\r
-}\r
-\r
-/* Headings */\r
-h1,h2,h3,h4,h5,h6\r
-{\r
-    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;\r
-       font-weight: normal;\r
-       margin: 0;\r
-}\r
-\r
-/* Lists */\r
-ul\r
-{\r
-       list-style: none;\r
-       padding: 0;\r
-       margin: 0;\r
-}\r
-li\r
-{\r
-       background: url(images/arrow.gif) left 5px no-repeat;\r
-       padding: 0 0 0 10px;\r
-       margin: 0 20px;\r
-}\r
-\r
-/* Links */\r
-a:link, a:visited\r
-{\r
-       color: #635D45;\r
-       text-decoration: none;\r
-}\r
-a:hover, a:active\r
-{\r
-       color: black;\r
-}\r
-#header a:link, #header a:visited\r
-{\r
-       color: #474747;\r
-}\r
-#header a:hover, #header a:active\r
-{\r
-       color: #737373;\r
-}\r
-#copyrights a:link, #copyrights a:visited\r
-{\r
-       color: #474747;\r
-}\r
-#copyrights a:hover, #copyrights a:active\r
-{\r
-       color: #737373;\r
-}\r
-\r
-/* Basic classes */\r
-.hidden\r
-{\r
-       display: none;\r
-}\r
-.centerize\r
-{\r
-       text-align: center;\r
-}\r
-.clearing\r
-{\r
-       width: 704px;\r
-       height: 0;\r
-       clear: both;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Header\r
--------------------------------------------------*/\r
-#header\r
-{\r
-       position: relative;\r
-       width: 704px;\r
-       height: 168px;\r
-       /* large header image is defined below */\r
-       /* background: white url(images/header.jpg) no-repeat; */\r
-       background: white;\r
-       border-width: 2px 2px 0;\r
-       border-style: solid;\r
-       border-color: #E0E0E0;\r
-       margin: auto;\r
-}\r
-#header h1\r
-{\r
-       /* small header image specific lines */\r
-       height: 168px;\r
-       width: 692px;\r
-       background: white url(images/header_sm.jpg) repeat-x 0 6px;\r
-       margin: 0 6px;\r
-       /* end small header image specific lines */\r
-       font-size: 38px;\r
-       text-align: center;\r
-       line-height: 160px;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Content wrappers\r
--------------------------------------------------*/\r
-#mainwrapper\r
-{\r
-       width: 704px;\r
-       background: white;\r
-       border-width: 0 2px;\r
-       border-style: solid;\r
-       border-color: #E0E0E0;\r
-       margin: auto;\r
-}\r
-#wrapper\r
-{\r
-       width: 704px;\r
-       background: white url(images/bgcontainer01.gif) repeat-y;\r
-       margin: auto;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Main content\r
--------------------------------------------------*/\r
-#container\r
-{\r
-       width: 704px;\r
-       height: 1%;\r
-       overflow: visible;\r
-       float: right;\r
-       padding: 4px 0 0 0;\r
-       margin-left: -204px;\r
-}\r
-.content\r
-{\r
-       padding: 0;\r
-       margin: 7px 20px 30px 224px;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Item styles\r
--------------------------------------------------*/\r
-.contenttitle h2\r
-{\r
-       clear: both;\r
-       background: url(images/dot.gif) bottom repeat-x;\r
-       font-size: 18px;\r
-       padding: 0 0 6px 0;\r
-       margin: 0;\r
-}\r
-.contentbody\r
-{\r
-       font-size:13px;\r
-       text-align: justify;\r
-       padding: 0 0 16px 0;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Item info\r
--------------------------------------------------*/\r
-.contentitemcategory\r
-{\r
-       background: url(images/bgcategory.gif) center left no-repeat;\r
-       font-size: 10px;\r
-       line-height: 12px;\r
-       padding: 0 10px 0 14px;\r
-}\r
-.contentitempostedby\r
-{\r
-       background: url(images/bgpostedby.gif) center left no-repeat;\r
-       font-size: 10px;\r
-       line-height: 12px;\r
-       padding: 0 10px 0 12px;\r
-}\r
-.contentitemcomments\r
-{\r
-       background: url(images/bgcomment.gif) center left no-repeat;\r
-       font-size: 10px;\r
-       line-height: 12px;\r
-       padding: 0 10px 0 13px;\r
-}\r
-.contentitemedit\r
-{\r
-       background: url(images/bgedit.gif) center left no-repeat;\r
-       font-size: 10px;\r
-       line-height: 12px;\r
-       padding: 0 10px 0 11px;\r
-}\r
-.contentitem\r
-{\r
-       padding: 3px 0 0 0;\r
-       margin: 0 0 16px 0;\r
-}\r
-.contentitem1\r
-{\r
-       display: inline;\r
-}\r
-.contentitem2\r
-{\r
-       display: inline;\r
-       background: url(images/dotv.gif) left repeat-y;\r
-       padding: 0 0 0 10px;\r
-}\r
-.contentitem3\r
-{\r
-       display: inline;\r
-       background: url(images/dotv.gif) left repeat-y;\r
-       padding: 0 0 0 10px;\r
-}\r
-.contentitem4\r
-{\r
-       display: inline;\r
-       padding: 0 0 0 10px;\r
-       background: url(images/dotv.gif) left repeat-y;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Comments\r
--------------------------------------------------*/\r
-.itemcomment\r
-{\r
-       background: url(images/commentquote01.gif) no-repeat;\r
-       background-position: 6px 9px;\r
-       padding: 6px 42px;\r
-       border: 1px solid white;\r
-       margin: 10px 0 0 0;\r
-}\r
-.itemcomment:hover\r
-{\r
-       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;\r
-       background-position: 6px 9px;\r
-       border: 1px solid #CCCCCC;\r
-}\r
-.id1 /*This is to give the admin a special comment style, to distinguish him/her from the rest of the commentors*/\r
-{\r
-       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;\r
-       background-position: 6px 9px;\r
-       border: 1px solid #B3C492;\r
-}\r
-.id1:hover\r
-{\r
-       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;\r
-       background-position: 6px 9px;\r
-       border: 1px solid #B3C492;\r
-}\r
-.itemcomment h3\r
-{\r
-       font-size: 12px;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Menu\r
--------------------------------------------------*/\r
-#sidebarcontainer\r
-{\r
-       float: left;\r
-       width: 204px;\r
-       padding: 2px 0 0 0;\r
-}\r
-.sidebar\r
-{\r
-       color: #21262A;\r
-       margin: 0 0 4px 6px;\r
-}\r
-\r
-/* Menu lists */\r
-.sidebardl\r
-{\r
-       padding: 0 0 10px 0;\r
-       margin: 0;\r
-}\r
-.sidebardl dt\r
-{\r
-       background: #E5E5E5 url(images/sidetitlebg.gif);\r
-       color: #3A3523;\r
-       font-size: 12px;\r
-       font-weight: bold;\r
-    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", Arial, "Trebuchet MS", sans-serif;\r
-       padding: 4px 10px;\r
-}\r
-.sidebardl dd\r
-{\r
-       background: #EEEEEE;\r
-       padding: 2px 10px;\r
-       margin: 1px 0 0 0;\r
-}\r
-.sidebardl dd:hover\r
-{\r
-       background: #E7E7E7;\r
-       padding: 2px 10px;\r
-       margin: 1px 0 0 0;\r
-}\r
-.sidebardl dd a:link, .sidebardl dd a:visited\r
-{\r
-       background: url(images/arrow.gif) left center no-repeat;\r
-       padding: 0 0 0 10px;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Footer\r
--------------------------------------------------*/\r
-#footer\r
-{\r
-       width: 704px;\r
-       background: #FCD21B;\r
-       text-align: center;\r
-       padding: 10px 0 10px 0;\r
-       border-width: 0px 2px 2px 2px;\r
-       border-style: solid;\r
-       border-color: #E0E0E0;\r
-       margin: 0 auto;\r
-}\r
-\r
-#copyrights\r
-{\r
-       color: #474747;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Forms\r
--------------------------------------------------*/\r
-.loginform, .searchform\r
-{\r
-       margin: 5px 0;\r
-}\r
-.commentform, .mailform\r
-{\r
-       margin-top: 10px;\r
-    padding: 10px;\r
-    background: #EEEEEE;\r
-    /* Rounded borders, for Mozilla browsers */\r
-    /* -moz-border-radius: 10px; */\r
-}\r
-.commentform img{\r
-    margin: 5px 0 0 0;\r
-}\r
-.formfield\r
-{\r
-       font-size: 11px;\r
-       background: white;\r
-       color: #494949;\r
-       border-top: 1px solid #868686;\r
-       border-left: 1px solid #868686;\r
-       border-bottom: 1px solid #D4D2CF;\r
-       border-right: 1px solid #D4D2CF;\r
-       margin: 1px 0 0 0;\r
-}\r
-.formbutton\r
-{\r
-       font-size: 11px;\r
-       background: white;\r
-       color: #494949;\r
-       border-top: 1px solid #D4D2CF;\r
-       border-left: 1px solid #D4D2CF;\r
-       border-bottom: 1px solid #868686;\r
-       border-right: 1px solid #868686;\r
-       margin: 1px 0 0 0;\r
-}\r
-.searchform .formfield\r
-{\r
-       width: 130px;\r
-    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 0;\r
-       margin: 0 2px 2px 0;\r
-}\r
-.searchform .formbutton\r
-{\r
-       width: 60px;\r
-    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 2px;\r
-}\r
-.loginform .formfield\r
-{\r
-       width: 130px;\r
-    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 0;\r
-       margin: 0 2px 2px 0;\r
-}\r
-.loginform .formbutton\r
-{\r
-       width: 60px;\r
-    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 2px;\r
-}\r
-.mainform .formfield\r
-{\r
-       width: 280px;\r
-    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 0;\r
-       margin: 0 2px 2px 0;\r
-}\r
-.mailform .formbutton\r
-{\r
-       width: 100px;\r
-    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 2px;\r
-}\r
-#nucleus_cf_name, #nucleus_cf_mail\r
-{\r
-    width: 300px;\r
-    margin-right: 105px;\r
-    font-family: Arial, Trebuchet MS, Verdana, sans-serif;\r
-}\r
-.commentform textarea, .commentform .formfield, .mailform textarea, .mailform .formfield\r
-{\r
-    width: 300px;\r
-}\r
-.commentform .formbutton\r
-{\r
-       width: 100px;\r
-       height: 22px;\r
-    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;\r
-}\r
-.error\r
-{\r
-       color: red;\r
-       font-weight: bold;\r
-}\r
-\r
-\r
-/*-------------------------------------------------\r
-  Miscelaneous\r
--------------------------------------------------*/\r
-/* VBlog image onion skin shadow - From AListApart.com*/\r
-.wrap1, .wrap2, .wrap3\r
-{\r
-       display:inline-table;\r
-       /* \*/display:block;/**/\r
-}\r
-.wrap1\r
-{\r
-       float:left;\r
-       background:url(images/shadow.gif) right bottom no-repeat;\r
-       margin: 0 5px 3px 0;\r
-}\r
-.wrap2\r
-{\r
-       background:url(images/corner_br.gif) left bottom no-repeat;\r
-}\r
-.wrap3\r
-{\r
-       background:url(images/corner_tr.gif) right top no-repeat;\r
-       padding:0 5px 5px 0;\r
-}\r
-.wrap3 img\r
-{\r
-       display:block;\r
-       border: 3px solid white;\r
-}\r
-\r
-/* Search highlight color */\r
-.highlight\r
-{\r
-       background: #DEFFA9;\r
-}\r
-\r
-/* Leftbox and Rightbox toolbar buttons */\r
-.leftbox, .rightbox {\r
-       margin: 3px;\r
-       padding: 3px;\r
-       font-size: larger;\r
-       width: 20%;\r
-}\r
-.leftbox {\r
-       float: left;\r
-       border-right: 2px solid #ccc;\r
-}\r
-.rightbox {\r
-       float: right;\r
-       border-left: 2px solid #ccc;\r
-}\r
+/*-------------------------------------------------
+  Nucleus CMS Stylesheet - bundled with version 3.2
+  Based on the Stanch skin by Ivan Fong
+  Mods by hcgtv and moraes
+-------------------------------------------------*/
+
+/*-------------------------------------------------
+  General layout
+-------------------------------------------------*/
+body
+{
+       background: #505050 url(images/bg.gif);
+       color: #494949;
+       font-family: "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;
+       font-size: 11px;
+       padding: 15px 0;
+       margin: 0;
+}
+img
+{
+       border: 0;
+}
+form
+{
+       margin: 0;
+}
+
+/* Headings */
+h1,h2,h3,h4,h5,h6
+{
+    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;
+       font-weight: normal;
+       margin: 0;
+}
+
+/* Lists */
+ul
+{
+       list-style: none;
+       padding: 0;
+       margin: 0;
+}
+li
+{
+       background: url(images/arrow.gif) left 5px no-repeat;
+       padding: 0 0 0 10px;
+       margin: 0 20px;
+}
+
+/* Links */
+a:link, a:visited
+{
+       color: #635D45;
+       text-decoration: none;
+}
+a:hover, a:active
+{
+       color: black;
+}
+#header a:link, #header a:visited
+{
+       color: #474747;
+}
+#header a:hover, #header a:active
+{
+       color: #737373;
+}
+#copyrights a:link, #copyrights a:visited
+{
+       color: #474747;
+}
+#copyrights a:hover, #copyrights a:active
+{
+       color: #737373;
+}
+
+/* Basic classes */
+.hidden
+{
+       display: none;
+}
+.centerize
+{
+       text-align: center;
+}
+.clearing
+{
+       width: 704px;
+       height: 0;
+       clear: both;
+}
+
+/*-------------------------------------------------
+  Header
+-------------------------------------------------*/
+#header
+{
+       position: relative;
+       width: 704px;
+       height: 168px;
+       /* large header image is defined below */
+       /* background: white url(images/header.jpg) no-repeat; */
+       background: white;
+       border-width: 2px 2px 0;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: auto;
+}
+#header h1
+{
+       /* small header image specific lines */
+       height: 168px;
+       width: 692px;
+       background: white url(images/header_sm.jpg) repeat-x 0 6px;
+       margin: 0 6px;
+       /* end small header image specific lines */
+       font-size: 38px;
+       text-align: center;
+       line-height: 160px;
+}
+
+/*-------------------------------------------------
+  Content wrappers
+-------------------------------------------------*/
+#mainwrapper
+{
+       width: 704px;
+       background: white;
+       border-width: 0 2px;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: auto;
+}
+#wrapper
+{
+       width: 704px;
+       background: white url(images/bgcontainer01.gif) repeat-y;
+       margin: auto;
+}
+
+/*-------------------------------------------------
+  Main content
+-------------------------------------------------*/
+#container
+{
+       width: 704px;
+       height: 1%;
+       overflow: visible;
+       float: right;
+       padding: 4px 0 0 0;
+       margin-left: -204px;
+}
+.content
+{
+       padding: 0;
+       margin: 7px 20px 30px 224px;
+}
+
+/*-------------------------------------------------
+  Item styles
+-------------------------------------------------*/
+.contenttitle h2
+{
+       clear: both;
+       background: url(images/dot.gif) bottom repeat-x;
+       font-size: 18px;
+       padding: 0 0 6px 0;
+       margin: 0;
+}
+.contentbody
+{
+       font-size:13px;
+       text-align: justify;
+       padding: 0 0 16px 0;
+}
+
+/*-------------------------------------------------
+  Item info
+-------------------------------------------------*/
+.contentitemcategory
+{
+       background: url(images/bgcategory.gif) center left no-repeat;
+       font-size: 10px;
+       line-height: 12px;
+       padding: 0 10px 0 14px;
+}
+.contentitempostedby
+{
+       background: url(images/bgpostedby.gif) center left no-repeat;
+       font-size: 10px;
+       line-height: 12px;
+       padding: 0 10px 0 12px;
+}
+.contentitemcomments
+{
+       background: url(images/bgcomment.gif) center left no-repeat;
+       font-size: 10px;
+       line-height: 12px;
+       padding: 0 10px 0 13px;
+}
+.contentitemedit
+{
+       background: url(images/bgedit.gif) center left no-repeat;
+       font-size: 10px;
+       line-height: 12px;
+       padding: 0 10px 0 11px;
+}
+.contentitem
+{
+       padding: 3px 0 0 0;
+       margin: 0 0 16px 0;
+}
+.contentitem1
+{
+       display: inline;
+}
+.contentitem2
+{
+       display: inline;
+       background: url(images/dotv.gif) left repeat-y;
+       padding: 0 0 0 10px;
+}
+.contentitem3
+{
+       display: inline;
+       background: url(images/dotv.gif) left repeat-y;
+       padding: 0 0 0 10px;
+}
+.contentitem4
+{
+       display: inline;
+       padding: 0 0 0 10px;
+       background: url(images/dotv.gif) left repeat-y;
+}
+
+/*-------------------------------------------------
+  Comments
+-------------------------------------------------*/
+.itemcomment
+{
+       background: url(images/commentquote01.gif) no-repeat;
+       background-position: 6px 9px;
+       padding: 6px 42px;
+       border: 1px solid white;
+       margin: 10px 0 0 0;
+}
+.itemcomment:hover
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #CCCCCC;
+}
+.id1 /*This is to give the admin a special comment style, to distinguish him/her from the rest of the commentors*/
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #B3C492;
+}
+.id1:hover
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #B3C492;
+}
+.itemcomment h3
+{
+       font-size: 12px;
+}
+
+/*-------------------------------------------------
+  Menu
+-------------------------------------------------*/
+#sidebarcontainer
+{
+       float: left;
+       width: 204px;
+       padding: 2px 0 0 0;
+}
+.sidebar
+{
+       color: #21262A;
+       margin: 0 0 4px 6px;
+}
+
+/* Menu lists */
+.sidebardl
+{
+       padding: 0 0 10px 0;
+       margin: 0;
+}
+.sidebardl dt
+{
+       background: #E5E5E5 url(images/sidetitlebg.gif);
+       color: #3A3523;
+       font-size: 12px;
+       font-weight: bold;
+    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", Arial, "Trebuchet MS", sans-serif;
+       padding: 4px 10px;
+}
+.sidebardl dd
+{
+       background: #EEEEEE;
+       padding: 2px 10px;
+       margin: 1px 0 0 0;
+}
+.sidebardl dd:hover
+{
+       background: #E7E7E7;
+       padding: 2px 10px;
+       margin: 1px 0 0 0;
+}
+.sidebardl dd a:link, .sidebardl dd a:visited
+{
+       background: url(images/arrow.gif) left center no-repeat;
+       padding: 0 0 0 10px;
+}
+
+/*-------------------------------------------------
+  Footer
+-------------------------------------------------*/
+#footer
+{
+       width: 704px;
+       background: #FCD21B;
+       text-align: center;
+       padding: 10px 0 10px 0;
+       border-width: 0px 2px 2px 2px;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: 0 auto;
+}
+
+#copyrights
+{
+       color: #474747;
+}
+
+/*-------------------------------------------------
+  Forms
+-------------------------------------------------*/
+.loginform, .searchform
+{
+       margin: 5px 0;
+}
+.commentform, .mailform
+{
+       margin-top: 10px;
+    padding: 10px;
+    background: #EEEEEE;
+    /* Rounded borders, for Mozilla browsers */
+    /* -moz-border-radius: 10px; */
+}
+.commentform img{
+    margin: 5px 0 0 0;
+}
+.formfield
+{
+       font-size: 11px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #868686;
+       border-left: 1px solid #868686;
+       border-bottom: 1px solid #D4D2CF;
+       border-right: 1px solid #D4D2CF;
+       margin: 1px 0 0 0;
+}
+.formbutton
+{
+       font-size: 11px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #D4D2CF;
+       border-left: 1px solid #D4D2CF;
+       border-bottom: 1px solid #868686;
+       border-right: 1px solid #868686;
+       margin: 1px 0 0 0;
+}
+.searchform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.searchform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.loginform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.loginform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.mainform .formfield
+{
+       width: 280px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.mailform .formbutton
+{
+       width: 100px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+#nucleus_cf_name, #nucleus_cf_mail
+{
+    width: 300px;
+    margin-right: 105px;
+    font-family: Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.commentform textarea, .commentform .formfield, .mailform textarea, .mailform .formfield
+{
+    width: 300px;
+}
+.commentform .formbutton
+{
+       width: 100px;
+       height: 22px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.error
+{
+       color: red;
+       font-weight: bold;
+}
+
+
+/*-------------------------------------------------
+  Miscelaneous
+-------------------------------------------------*/
+/* VBlog image onion skin shadow - From AListApart.com*/
+.wrap1, .wrap2, .wrap3
+{
+       display:inline-table;
+       /* \*/display:block;/**/
+}
+.wrap1
+{
+       float:left;
+       background:url(images/shadow.gif) right bottom no-repeat;
+       margin: 0 5px 3px 0;
+}
+.wrap2
+{
+       background:url(images/corner_br.gif) left bottom no-repeat;
+}
+.wrap3
+{
+       background:url(images/corner_tr.gif) right top no-repeat;
+       padding:0 5px 5px 0;
+}
+.wrap3 img
+{
+       display:block;
+       border: 3px solid white;
+}
+
+/* Search highlight color */
+.highlight
+{
+       background: #DEFFA9;
+}
+
+/* Leftbox and Rightbox toolbar buttons */
+.leftbox, .rightbox {
+       margin: 3px;
+       padding: 3px;
+       font-size: larger;
+       width: 20%;
+}
+.leftbox {
+       float: left;
+       border-right: 2px solid #ccc;
+}
+.rightbox {
+       float: right;
+       border-left: 2px solid #ccc;
+}
index ec32e2e..a4013bc 100644 (file)
-/*-------------------------------------------------\r
-  Nucleus CMS Stylesheet - bundled with version 3.2\r
-  Based on the Stanch skin by Ivan Fong\r
-  Mods by hcgtv and moraes\r
--------------------------------------------------*/\r
-\r
-/*-------------------------------------------------\r
-  General layout\r
--------------------------------------------------*/\r
-body\r
-{\r
-       background: #505050 url(images/bg.gif);\r
-       color: #494949;\r
-       font-family: "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;\r
-       font-size: 11px;\r
-       padding: 15px 0;\r
-       margin: 0;\r
-}\r
-img\r
-{\r
-       border: 0;\r
-}\r
-form\r
-{\r
-       margin: 0;\r
-}\r
-\r
-/* Headings */\r
-h1,h2,h3,h4,h5,h6\r
-{\r
-    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;\r
-       font-weight: normal;\r
-       margin: 0;\r
-}\r
-\r
-/* Lists */\r
-ul\r
-{\r
-       list-style: none;\r
-       padding: 0;\r
-       margin: 0;\r
-}\r
-li\r
-{\r
-       background: url(images/arrow.gif) left 5px no-repeat;\r
-       padding: 0 0 0 10px;\r
-       margin: 0 20px;\r
-}\r
-\r
-/* Links */\r
-a:link, a:visited\r
-{\r
-       color: #635D45;\r
-       text-decoration: none;\r
-}\r
-a:hover, a:active\r
-{\r
-       color: black;\r
-}\r
-#header a:link, #header a:visited\r
-{\r
-       color: #474747;\r
-}\r
-#header a:hover, #header a:active\r
-{\r
-       color: #737373;\r
-}\r
-#copyrights a:link, #copyrights a:visited\r
-{\r
-       color: #474747;\r
-}\r
-#copyrights a:hover, #copyrights a:active\r
-{\r
-       color: #737373;\r
-}\r
-\r
-/* Basic classes */\r
-.hidden\r
-{\r
-       display: none;\r
-}\r
-.centerize\r
-{\r
-       text-align: center;\r
-}\r
-.clearing\r
-{\r
-       width: 704px;\r
-       height: 0;\r
-       clear: both;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Header\r
--------------------------------------------------*/\r
-#header\r
-{\r
-       position: relative;\r
-       width: 704px;\r
-       height: 168px;\r
-       /* large header image is defined below */\r
-       /* background: white url(images/header.jpg) no-repeat; */\r
-       background: white;\r
-       border-width: 2px 2px 0;\r
-       border-style: solid;\r
-       border-color: #E0E0E0;\r
-       margin: auto;\r
-}\r
-#header h1\r
-{\r
-       /* small header image specific lines */\r
-       height: 168px;\r
-       width: 692px;\r
-       background: white url(images/header_sm.jpg) repeat-x 0 6px;\r
-       margin: 0 6px;\r
-       /* end small header image specific lines */\r
-       font-size: 38px;\r
-       text-align: center;\r
-       line-height: 160px;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Content wrappers\r
--------------------------------------------------*/\r
-#mainwrapper\r
-{\r
-       width: 704px;\r
-       background: white;\r
-       border-width: 0 2px;\r
-       border-style: solid;\r
-       border-color: #E0E0E0;\r
-       margin: auto;\r
-}\r
-#wrapper\r
-{\r
-       width: 704px;\r
-       background: white url(images/bgcontainer02.gif) repeat-y right;\r
-       margin: auto;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Main content\r
--------------------------------------------------*/\r
-#container\r
-{\r
-       width: 704px;\r
-       height: 1%;\r
-       overflow: visible;\r
-       float: left;\r
-       padding: 4px 0 0 0;\r
-       margin-right: -204px;\r
-}\r
-.content\r
-{\r
-       padding: 0;\r
-       margin: 7px 224px 30px 20px;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Item styles\r
--------------------------------------------------*/\r
-.contenttitle h2\r
-{\r
-       clear: both;\r
-       background: url(images/dot.gif) bottom repeat-x;\r
-       font-size: 18px;\r
-       padding: 0 0 6px 0;\r
-       margin: 0;\r
-}\r
-.contentbody\r
-{\r
-       font-size:13px;\r
-       text-align: justify;\r
-       padding: 0 0 16px 0;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Item info\r
--------------------------------------------------*/\r
-.contentitemcategory\r
-{\r
-       background: url(images/bgcategory.gif) center left no-repeat;\r
-       font-size: 10px;\r
-       line-height: 12px;\r
-       padding: 0 10px 0 14px;\r
-}\r
-.contentitempostedby\r
-{\r
-       background: url(images/bgpostedby.gif) center left no-repeat;\r
-       font-size: 10px;\r
-       line-height: 12px;\r
-       padding: 0 10px 0 12px;\r
-}\r
-.contentitemcomments\r
-{\r
-       background: url(images/bgcomment.gif) center left no-repeat;\r
-       font-size: 10px;\r
-       line-height: 12px;\r
-       padding: 0 10px 0 13px;\r
-}\r
-.contentitemedit\r
-{\r
-       background: url(images/bgedit.gif) center left no-repeat;\r
-       font-size: 10px;\r
-       line-height: 12px;\r
-       padding: 0 10px 0 11px;\r
-}\r
-.contentitem\r
-{\r
-       padding: 3px 0 0 0;\r
-       margin: 0 0 16px 0;\r
-}\r
-.contentitem1\r
-{\r
-       display: inline;\r
-}\r
-.contentitem2\r
-{\r
-       display: inline;\r
-       background: url(images/dotv.gif) left repeat-y;\r
-       padding: 0 0 0 10px;\r
-}\r
-.contentitem3\r
-{\r
-       display: inline;\r
-       background: url(images/dotv.gif) left repeat-y;\r
-       padding: 0 0 0 10px;\r
-}\r
-.contentitem4\r
-{\r
-       display: inline;\r
-       padding: 0 0 0 10px;\r
-       background: url(images/dotv.gif) left repeat-y;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Comments\r
--------------------------------------------------*/\r
-.itemcomment\r
-{\r
-       background: url(images/commentquote01.gif) no-repeat;\r
-       background-position: 6px 9px;\r
-       padding: 6px 42px;\r
-       border: 1px solid white;\r
-       margin: 10px 0 0 0;\r
-}\r
-.itemcomment:hover\r
-{\r
-       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;\r
-       background-position: 6px 9px;\r
-       border: 1px solid #CCCCCC;\r
-}\r
-.id1 /*This is to give the admin a special comment style, to distinguish him/her from the rest of the commentors*/\r
-{\r
-       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;\r
-       background-position: 6px 9px;\r
-       border: 1px solid #B3C492;\r
-}\r
-.id1:hover\r
-{\r
-       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;\r
-       background-position: 6px 9px;\r
-       border: 1px solid #B3C492;\r
-}\r
-.itemcomment h3\r
-{\r
-       font-size: 12px;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Menu\r
--------------------------------------------------*/\r
-#sidebarcontainer\r
-{\r
-       float: right;\r
-       width: 204px;\r
-       padding: 2px 0 0 0;\r
-}\r
-.sidebar\r
-{\r
-       color: #21262A;\r
-       margin: 0 6px 4px 0;\r
-}\r
-\r
-/* Menu lists */\r
-.sidebardl\r
-{\r
-       padding: 0 0 10px 0;\r
-       margin: 0;\r
-}\r
-.sidebardl dt\r
-{\r
-       background: #E5E5E5 url(images/sidetitlebg.gif);\r
-       color: #3A3523;\r
-       font-size: 12px;\r
-       font-weight: bold;\r
-    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", Arial, "Trebuchet MS", sans-serif;\r
-       padding: 4px 10px;\r
-}\r
-.sidebardl dd\r
-{\r
-       background: #EEEEEE;\r
-       padding: 2px 10px;\r
-       margin: 1px 0 0 0;\r
-}\r
-.sidebardl dd:hover\r
-{\r
-       background: #E7E7E7;\r
-       padding: 2px 10px;\r
-       margin: 1px 0 0 0;\r
-}\r
-.sidebardl dd a:link, .sidebardl dd a:visited\r
-{\r
-       background: url(images/arrow.gif) left center no-repeat;\r
-       padding: 0 0 0 10px;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Footer\r
--------------------------------------------------*/\r
-#footer\r
-{\r
-       width: 704px;\r
-       background: #FCD21B;\r
-       text-align: center;\r
-       padding: 10px 0 10px 0;\r
-       border-width: 0px 2px 2px 2px;\r
-       border-style: solid;\r
-       border-color: #E0E0E0;\r
-       margin: 0 auto;\r
-}\r
-\r
-#copyrights\r
-{\r
-       color: #474747;\r
-}\r
-\r
-/*-------------------------------------------------\r
-  Forms\r
--------------------------------------------------*/\r
-.loginform, .searchform\r
-{\r
-       margin: 5px 0;\r
-}\r
-.commentform, .mailform\r
-{\r
-       margin-top: 10px;\r
-    padding: 10px;\r
-    background: #EEEEEE;\r
-    /* Rounded borders, for Mozilla browsers */\r
-    /* -moz-border-radius: 10px; */\r
-}\r
-.commentform img{\r
-    margin: 5px 0 0 0;\r
-}\r
-.formfield\r
-{\r
-       font-size: 11px;\r
-       background: white;\r
-       color: #494949;\r
-       border-top: 1px solid #868686;\r
-       border-left: 1px solid #868686;\r
-       border-bottom: 1px solid #D4D2CF;\r
-       border-right: 1px solid #D4D2CF;\r
-       margin: 1px 0 0 0;\r
-}\r
-.formbutton\r
-{\r
-       font-size: 11px;\r
-       background: white;\r
-       color: #494949;\r
-       border-top: 1px solid #D4D2CF;\r
-       border-left: 1px solid #D4D2CF;\r
-       border-bottom: 1px solid #868686;\r
-       border-right: 1px solid #868686;\r
-       margin: 1px 0 0 0;\r
-}\r
-.searchform .formfield\r
-{\r
-       width: 130px;\r
-    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 0;\r
-       margin: 0 2px 2px 0;\r
-}\r
-.searchform .formbutton\r
-{\r
-       width: 60px;\r
-    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 2px;\r
-}\r
-.loginform .formfield\r
-{\r
-       width: 130px;\r
-    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 0;\r
-       margin: 0 2px 2px 0;\r
-}\r
-.loginform .formbutton\r
-{\r
-       width: 60px;\r
-    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 2px;\r
-}\r
-.mainform .formfield\r
-{\r
-       width: 280px;\r
-    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 0;\r
-       margin: 0 2px 2px 0;\r
-}\r
-.mailform .formbutton\r
-{\r
-       width: 100px;\r
-    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;\r
-       padding: 2px 2px;\r
-}\r
-#nucleus_cf_name, #nucleus_cf_mail\r
-{\r
-    width: 300px;\r
-    margin-right: 105px;\r
-    font-family: Arial, Trebuchet MS, Verdana, sans-serif;\r
-}\r
-.commentform textarea, .commentform .formfield, .mailform textarea, .mailform .formfield\r
-{\r
-    width: 300px;\r
-}\r
-.commentform .formbutton\r
-{\r
-       width: 100px;\r
-       height: 22px;\r
-    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;\r
-}\r
-.error\r
-{\r
-       color: red;\r
-       font-weight: bold;\r
-}\r
-\r
-\r
-/*-------------------------------------------------\r
-  Miscelaneous\r
--------------------------------------------------*/\r
-/* VBlog image onion skin shadow - From AListApart.com*/\r
-.wrap1, .wrap2, .wrap3\r
-{\r
-       display:inline-table;\r
-       /* \*/display:block;/**/\r
-}\r
-.wrap1\r
-{\r
-       float:left;\r
-       background:url(images/shadow.gif) right bottom no-repeat;\r
-       margin: 0 5px 3px 0;\r
-}\r
-.wrap2\r
-{\r
-       background:url(images/corner_br.gif) left bottom no-repeat;\r
-}\r
-.wrap3\r
-{\r
-       background:url(images/corner_tr.gif) right top no-repeat;\r
-       padding:0 5px 5px 0;\r
-}\r
-.wrap3 img\r
-{\r
-       display:block;\r
-       border: 3px solid white;\r
-}\r
-\r
-/* Search highlight color */\r
-.highlight\r
-{\r
-       background: #DEFFA9;\r
-}\r
-\r
-/* Leftbox and Rightbox toolbar buttons */\r
-.leftbox, .rightbox {\r
-       margin: 3px;\r
-       padding: 3px;\r
-       font-size: larger;\r
-       width: 20%;\r
-}\r
-.leftbox {\r
-       float: left;\r
-       border-right: 2px solid #ccc;\r
-}\r
-.rightbox {\r
-       float: right;\r
-       border-left: 2px solid #ccc;\r
-}\r
+/*-------------------------------------------------
+  Nucleus CMS Stylesheet - bundled with version 3.2
+  Based on the Stanch skin by Ivan Fong
+  Mods by hcgtv and moraes
+-------------------------------------------------*/
+
+/*-------------------------------------------------
+  General layout
+-------------------------------------------------*/
+body
+{
+       background: #505050 url(images/bg.gif);
+       color: #494949;
+       font-family: "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;
+       font-size: 11px;
+       padding: 15px 0;
+       margin: 0;
+}
+img
+{
+       border: 0;
+}
+form
+{
+       margin: 0;
+}
+
+/* Headings */
+h1,h2,h3,h4,h5,h6
+{
+    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;
+       font-weight: normal;
+       margin: 0;
+}
+
+/* Lists */
+ul
+{
+       list-style: none;
+       padding: 0;
+       margin: 0;
+}
+li
+{
+       background: url(images/arrow.gif) left 5px no-repeat;
+       padding: 0 0 0 10px;
+       margin: 0 20px;
+}
+
+/* Links */
+a:link, a:visited
+{
+       color: #635D45;
+       text-decoration: none;
+}
+a:hover, a:active
+{
+       color: black;
+}
+#header a:link, #header a:visited
+{
+       color: #474747;
+}
+#header a:hover, #header a:active
+{
+       color: #737373;
+}
+#copyrights a:link, #copyrights a:visited
+{
+       color: #474747;
+}
+#copyrights a:hover, #copyrights a:active
+{
+       color: #737373;
+}
+
+/* Basic classes */
+.hidden
+{
+       display: none;
+}
+.centerize
+{
+       text-align: center;
+}
+.clearing
+{
+       width: 704px;
+       height: 0;
+       clear: both;
+}
+
+/*-------------------------------------------------
+  Header
+-------------------------------------------------*/
+#header
+{
+       position: relative;
+       width: 704px;
+       height: 168px;
+       /* large header image is defined below */
+       /* background: white url(images/header.jpg) no-repeat; */
+       background: white;
+       border-width: 2px 2px 0;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: auto;
+}
+#header h1
+{
+       /* small header image specific lines */
+       height: 168px;
+       width: 692px;
+       background: white url(images/header_sm.jpg) repeat-x 0 6px;
+       margin: 0 6px;
+       /* end small header image specific lines */
+       font-size: 38px;
+       text-align: center;
+       line-height: 160px;
+}
+
+/*-------------------------------------------------
+  Content wrappers
+-------------------------------------------------*/
+#mainwrapper
+{
+       width: 704px;
+       background: white;
+       border-width: 0 2px;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: auto;
+}
+#wrapper
+{
+       width: 704px;
+       background: white url(images/bgcontainer02.gif) repeat-y right;
+       margin: auto;
+}
+
+/*-------------------------------------------------
+  Main content
+-------------------------------------------------*/
+#container
+{
+       width: 704px;
+       height: 1%;
+       overflow: visible;
+       float: left;
+       padding: 4px 0 0 0;
+       margin-right: -204px;
+}
+.content
+{
+       padding: 0;
+       margin: 7px 224px 30px 20px;
+}
+
+/*-------------------------------------------------
+  Item styles
+-------------------------------------------------*/
+.contenttitle h2
+{
+       clear: both;
+       background: url(images/dot.gif) bottom repeat-x;
+       font-size: 18px;
+       padding: 0 0 6px 0;
+       margin: 0;
+}
+.contentbody
+{
+       font-size:13px;
+       text-align: justify;
+       padding: 0 0 16px 0;
+}
+
+/*-------------------------------------------------
+  Item info
+-------------------------------------------------*/
+.contentitemcategory
+{
+       background: url(images/bgcategory.gif) center left no-repeat;
+       font-size: 10px;
+       line-height: 12px;
+       padding: 0 10px 0 14px;
+}
+.contentitempostedby
+{
+       background: url(images/bgpostedby.gif) center left no-repeat;
+       font-size: 10px;
+       line-height: 12px;
+       padding: 0 10px 0 12px;
+}
+.contentitemcomments
+{
+       background: url(images/bgcomment.gif) center left no-repeat;
+       font-size: 10px;
+       line-height: 12px;
+       padding: 0 10px 0 13px;
+}
+.contentitemedit
+{
+       background: url(images/bgedit.gif) center left no-repeat;
+       font-size: 10px;
+       line-height: 12px;
+       padding: 0 10px 0 11px;
+}
+.contentitem
+{
+       padding: 3px 0 0 0;
+       margin: 0 0 16px 0;
+}
+.contentitem1
+{
+       display: inline;
+}
+.contentitem2
+{
+       display: inline;
+       background: url(images/dotv.gif) left repeat-y;
+       padding: 0 0 0 10px;
+}
+.contentitem3
+{
+       display: inline;
+       background: url(images/dotv.gif) left repeat-y;
+       padding: 0 0 0 10px;
+}
+.contentitem4
+{
+       display: inline;
+       padding: 0 0 0 10px;
+       background: url(images/dotv.gif) left repeat-y;
+}
+
+/*-------------------------------------------------
+  Comments
+-------------------------------------------------*/
+.itemcomment
+{
+       background: url(images/commentquote01.gif) no-repeat;
+       background-position: 6px 9px;
+       padding: 6px 42px;
+       border: 1px solid white;
+       margin: 10px 0 0 0;
+}
+.itemcomment:hover
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #CCCCCC;
+}
+.id1 /*This is to give the admin a special comment style, to distinguish him/her from the rest of the commentors*/
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #B3C492;
+}
+.id1:hover
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #B3C492;
+}
+.itemcomment h3
+{
+       font-size: 12px;
+}
+
+/*-------------------------------------------------
+  Menu
+-------------------------------------------------*/
+#sidebarcontainer
+{
+       float: right;
+       width: 204px;
+       padding: 2px 0 0 0;
+}
+.sidebar
+{
+       color: #21262A;
+       margin: 0 6px 4px 0;
+}
+
+/* Menu lists */
+.sidebardl
+{
+       padding: 0 0 10px 0;
+       margin: 0;
+}
+.sidebardl dt
+{
+       background: #E5E5E5 url(images/sidetitlebg.gif);
+       color: #3A3523;
+       font-size: 12px;
+       font-weight: bold;
+    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", Arial, "Trebuchet MS", sans-serif;
+       padding: 4px 10px;
+}
+.sidebardl dd
+{
+       background: #EEEEEE;
+       padding: 2px 10px;
+       margin: 1px 0 0 0;
+}
+.sidebardl dd:hover
+{
+       background: #E7E7E7;
+       padding: 2px 10px;
+       margin: 1px 0 0 0;
+}
+.sidebardl dd a:link, .sidebardl dd a:visited
+{
+       background: url(images/arrow.gif) left center no-repeat;
+       padding: 0 0 0 10px;
+}
+
+/*-------------------------------------------------
+  Footer
+-------------------------------------------------*/
+#footer
+{
+       width: 704px;
+       background: #FCD21B;
+       text-align: center;
+       padding: 10px 0 10px 0;
+       border-width: 0px 2px 2px 2px;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: 0 auto;
+}
+
+#copyrights
+{
+       color: #474747;
+}
+
+/*-------------------------------------------------
+  Forms
+-------------------------------------------------*/
+.loginform, .searchform
+{
+       margin: 5px 0;
+}
+.commentform, .mailform
+{
+       margin-top: 10px;
+    padding: 10px;
+    background: #EEEEEE;
+    /* Rounded borders, for Mozilla browsers */
+    /* -moz-border-radius: 10px; */
+}
+.commentform img{
+    margin: 5px 0 0 0;
+}
+.formfield
+{
+       font-size: 11px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #868686;
+       border-left: 1px solid #868686;
+       border-bottom: 1px solid #D4D2CF;
+       border-right: 1px solid #D4D2CF;
+       margin: 1px 0 0 0;
+}
+.formbutton
+{
+       font-size: 11px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #D4D2CF;
+       border-left: 1px solid #D4D2CF;
+       border-bottom: 1px solid #868686;
+       border-right: 1px solid #868686;
+       margin: 1px 0 0 0;
+}
+.searchform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.searchform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.loginform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.loginform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.mainform .formfield
+{
+       width: 280px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.mailform .formbutton
+{
+       width: 100px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+#nucleus_cf_name, #nucleus_cf_mail
+{
+    width: 300px;
+    margin-right: 105px;
+    font-family: Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.commentform textarea, .commentform .formfield, .mailform textarea, .mailform .formfield
+{
+    width: 300px;
+}
+.commentform .formbutton
+{
+       width: 100px;
+       height: 22px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.error
+{
+       color: red;
+       font-weight: bold;
+}
+
+
+/*-------------------------------------------------
+  Miscelaneous
+-------------------------------------------------*/
+/* VBlog image onion skin shadow - From AListApart.com*/
+.wrap1, .wrap2, .wrap3
+{
+       display:inline-table;
+       /* \*/display:block;/**/
+}
+.wrap1
+{
+       float:left;
+       background:url(images/shadow.gif) right bottom no-repeat;
+       margin: 0 5px 3px 0;
+}
+.wrap2
+{
+       background:url(images/corner_br.gif) left bottom no-repeat;
+}
+.wrap3
+{
+       background:url(images/corner_tr.gif) right top no-repeat;
+       padding:0 5px 5px 0;
+}
+.wrap3 img
+{
+       display:block;
+       border: 3px solid white;
+}
+
+/* Search highlight color */
+.highlight
+{
+       background: #DEFFA9;
+}
+
+/* Leftbox and Rightbox toolbar buttons */
+.leftbox, .rightbox {
+       margin: 3px;
+       padding: 3px;
+       font-size: larger;
+       width: 20%;
+}
+.leftbox {
+       float: left;
+       border-right: 2px solid #ccc;
+}
+.rightbox {
+       float: right;
+       border-left: 2px solid #ccc;
+}
index f04fcc4..5762dbc 100644 (file)
Binary files a/skins/default/favicon.ico and b/skins/default/favicon.ico differ
index f2442cc..3bb784e 100644 (file)
@@ -1,17 +1,17 @@
-<div class="clearing">&nbsp;</div>\r
-</div>\r
-</div>\r
-<!-- end wrapper divs -->\r
-\r
-<!-- page footer, copyrights, etc. -->\r
-<div id="footer">\r
-<div id="copyrights">\r
-       <small>Copyright | <a href="http://nucleuscms.org"><%version%></a> | \r
-       <a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0 Strict</a> | \r
-       <a href="http://jigsaw.w3.org/css-validator/">Valid CSS</a> | \r
-       <a href="#top">Back to top</a></small>\r
-</div>\r
-</div>\r
-\r
-</body>\r
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<div id="copyrights">
+       <small>Copyright | <a href="http://nucleuscms.org"><%version%></a> | 
+       <a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0 Strict</a> | 
+       <a href="http://jigsaw.w3.org/css-validator/">Valid CSS</a> | 
+       <a href="#top">Back to top</a></small>
+</div>
+</div>
+
+</body>
 </html>
\ No newline at end of file
index e929e43..be12aaa 100644 (file)
@@ -1,36 +1,36 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\r
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-\r
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">\r
-<head>\r
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-\r
-<!-- meta information for search engines -->\r
-<meta name="generator" content="<%version%>" />\r
-<meta name="name" content="<%blogsetting(name)%>" />\r
-<meta name="description" content="<%blogsetting(desc)%>" />\r
-\r
-<!-- prevent caching (can be removed) -->\r
-<meta http-equiv="Pragma" content="no-cache" />\r
-<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />\r
-<meta http-equiv="Expires" content="-1" />\r
-\r
-<!-- site stylesheet (site colors and layout definitions) -->\r
-<link rel="stylesheet" type="text/css" href="<%skinfile(default_right.css)%>" />\r
-\r
-<!-- tooltips & stylesheet (activated by title="" on links) -->\r
-<link rel="stylesheet" type="text/css" href="<%skinfile(nicetitle.css)%>" />\r
-<script type="text/javascript" src="<%skinfile(nicetitle.js)%>"></script>\r
-\r
-<!-- RSS 2.0 feed -->\r
-<link rel="alternate" type="application/rss+xml" title="RSS" href="xml-rss2.php" />\r
-\r
-<!-- RSD support -->\r
-<link rel="EditURI" type="application/rsd+xml" title="RSD" href="rsd.php" />\r
-\r
-<!-- favorite icon -->\r
-<link rel="shortcut icon" href="/favicon.ico" />\r
-<link rel="icon" href="/favicon.ico" />\r
-\r
-<!-- navigation & page titles -->\r
-<%parsedinclude(navigation.inc)%>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<!-- meta information for search engines -->
+<meta name="generator" content="<%version%>" />
+<meta name="name" content="<%blogsetting(name)%>" />
+<meta name="description" content="<%blogsetting(desc)%>" />
+
+<!-- prevent caching (can be removed) -->
+<meta http-equiv="Pragma" content="no-cache" />
+<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
+<meta http-equiv="Expires" content="-1" />
+
+<!-- site stylesheet (site colors and layout definitions) -->
+<link rel="stylesheet" type="text/css" href="<%skinfile(default_right.css)%>" />
+
+<!-- tooltips & stylesheet (activated by title="" on links) -->
+<link rel="stylesheet" type="text/css" href="<%skinfile(nicetitle.css)%>" />
+<script type="text/javascript" src="<%skinfile(nicetitle.js)%>"></script>
+
+<!-- RSS 2.0 feed -->
+<link rel="alternate" type="application/rss+xml" title="RSS" href="xml-rss2.php" />
+
+<!-- RSD support -->
+<link rel="EditURI" type="application/rsd+xml" title="RSD" href="rsd.php" />
+
+<!-- favorite icon -->
+<link rel="shortcut icon" href="/favicon.ico" />
+<link rel="icon" href="/favicon.ico" />
+
+<!-- navigation & page titles -->
+<%parsedinclude(navigation.inc)%>
index d8fa8a8..725a60e 100644 (file)
@@ -1,20 +1,20 @@
-<body>\r
-\r
-<!-- page header -->\r
-<div id="header"><a name="top"></a>\r
-<h1>\r
-       <%if(skintype,error)%>\r
-               <a href="<%sitevar(url)%>" accesskey="1"><%sitevar(name)%></a>\r
-       <%else%>\r
-       <%if(skintype,member)%>\r
-               <a href="<%sitevar(url)%>" accesskey="1"><%sitevar(name)%></a>\r
-       <%else%>\r
-               <a href="<%blogsetting(url)%>" accesskey="1"><%blogsetting(name)%></a>\r
-       <%endif%>\r
-       <%endif%>\r
-</h1>\r
-</div>\r
-\r
-<!-- begin wrapper divs -->\r
-<div id="mainwrapper">\r
+<body>
+
+<!-- page header -->
+<div id="header"><a name="top"></a>
+<h1>
+       <%if(skintype,error)%>
+               <a href="<%sitevar(url)%>" accesskey="1"><%sitevar(name)%></a>
+       <%else%>
+       <%if(skintype,member)%>
+               <a href="<%sitevar(url)%>" accesskey="1"><%sitevar(name)%></a>
+       <%else%>
+               <a href="<%blogsetting(url)%>" accesskey="1"><%blogsetting(name)%></a>
+       <%endif%>
+       <%endif%>
+</h1>
+</div>
+
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
 <div id="wrapper">
\ No newline at end of file
index da46510..55ec69a 100644 (file)
Binary files a/skins/default/images/bg.gif and b/skins/default/images/bg.gif differ
index 5effd26..ed2bc37 100644 (file)
Binary files a/skins/default/images/commentquote01.gif and b/skins/default/images/commentquote01.gif differ
index 3d8531c..7c827f7 100644 (file)
Binary files a/skins/default/images/commentquote02.gif and b/skins/default/images/commentquote02.gif differ
index 0f90054..8753713 100644 (file)
Binary files a/skins/default/images/header.jpg and b/skins/default/images/header.jpg differ
index f979efd..cddb176 100644 (file)
Binary files a/skins/default/images/header_sm.jpg and b/skins/default/images/header_sm.jpg differ
index 1cdf680..a0c3c24 100644 (file)
Binary files a/skins/default/images/nucleus.gif and b/skins/default/images/nucleus.gif differ
index d8b6f7d..b43804d 100644 (file)
Binary files a/skins/default/images/shadow.gif and b/skins/default/images/shadow.gif differ
index 81628b2..57a2bc9 100644 (file)
@@ -1,56 +1,56 @@
-<!-- archive: page title and extra navigational links -->\r
-<%if(skintype,archive)%>\r
-<title><%blogsetting(name)%> &raquo; Archive</title>\r
-<link rel="archives" title="Archives" href="<%archivelink%>" />\r
-<link rel="top" title="Today" href="<%sitevar(url)%>" />\r
-<link rel="up" href="<%todaylink%>" title="Today" />\r
-<%endif%>\r
-\r
-<!-- archivelist: page title and extra navigational links -->\r
-<%if(skintype,archivelist)%>\r
-<title><%blogsetting(name)%> &raquo; Archive List</title>\r
-<link rel="archives" title="Archives" href="<%archivelink%>" />\r
-<link rel="top" title="Today" href="<%sitevar(url)%>" />\r
-<link rel="up" href="<%todaylink%>" title="Today" />\r
-<%endif%>\r
-\r
-<!-- error: page title and extra navigational links -->\r
-<%if(skintype,error)%>\r
-<title><%sitevar(name)%> &raquo; Error!</title>\r
-<link rel="top" title="Today" href="<%todaylink%>" />\r
-<link rel="up" href="<%todaylink%>" title="Today" />\r
-<%endif%>\r
-\r
-<!-- index: page title and extra navigational links -->\r
-<%if(skintype,index)%>\r
-<title><%blogsetting(name)%></title>\r
-<link rel="bookmark" title="Nucleus" href="http://nucleuscms.org/" />\r
-<link rel="archives" title="Archives" href="<%archivelink%>" />\r
-<link rel="top" title="Today" href="<%todaylink%>" />\r
-<%endif%>\r
-\r
-<!-- item: page title and extra navigational links -->\r
-<%if(skintype,item)%>\r
-<title><%blogsetting(name)%> &raquo; <%itemtitle%></title>\r
-<link rel="archives" title="Archives" href="<%archivelink%>" />\r
-<link rel="top" title="Today" href="<%sitevar(url)%>" />\r
-<link rel="next" href="<%nextlink%>" title="Next Item" />\r
-<link rel="prev" href="<%prevlink%>" title="Previous Item" />\r
-<link rel="up" href="<%todaylink%>" title="Today" />\r
-<%endif%>\r
-\r
-<!-- member: page title and extra navigational links -->\r
-<%if(skintype,member)%>\r
-<title><%blogsetting(name)%> &raquo; Member Details</title>\r
-<link rel="top" title="Today" href="<%todaylink%>" />\r
-<link rel="up" href="<%todaylink%>" title="Today" />\r
-<%endif%>\r
-\r
-<!-- search: page title and extra navigational links -->\r
-<%if(skintype,search)%>\r
-<title><%blogsetting(name)%> &raquo; Search</title>\r
-<link rel="archives" title="Archives" href="<%archivelink%>" />\r
-<link rel="top" title="Today" href="<%sitevar(url)%>" />\r
-<link rel="up" href="<%todaylink%>" title="Today" />\r
-<%endif%>\r
+<!-- archive: page title and extra navigational links -->
+<%if(skintype,archive)%>
+<title><%blogsetting(name)%> &raquo; Archive</title>
+<link rel="archives" title="Archives" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%sitevar(url)%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<%endif%>
+
+<!-- archivelist: page title and extra navigational links -->
+<%if(skintype,archivelist)%>
+<title><%blogsetting(name)%> &raquo; Archive List</title>
+<link rel="archives" title="Archives" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%sitevar(url)%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<%endif%>
+
+<!-- error: page title and extra navigational links -->
+<%if(skintype,error)%>
+<title><%sitevar(name)%> &raquo; Error!</title>
+<link rel="top" title="Today" href="<%todaylink%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<%endif%>
+
+<!-- index: page title and extra navigational links -->
+<%if(skintype,index)%>
+<title><%blogsetting(name)%></title>
+<link rel="bookmark" title="Nucleus" href="http://nucleuscms.org/" />
+<link rel="archives" title="Archives" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%todaylink%>" />
+<%endif%>
+
+<!-- item: page title and extra navigational links -->
+<%if(skintype,item)%>
+<title><%blogsetting(name)%> &raquo; <%itemtitle%></title>
+<link rel="archives" title="Archives" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%sitevar(url)%>" />
+<link rel="next" href="<%nextlink%>" title="Next Item" />
+<link rel="prev" href="<%prevlink%>" title="Previous Item" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<%endif%>
+
+<!-- member: page title and extra navigational links -->
+<%if(skintype,member)%>
+<title><%blogsetting(name)%> &raquo; Member Details</title>
+<link rel="top" title="Today" href="<%todaylink%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<%endif%>
+
+<!-- search: page title and extra navigational links -->
+<%if(skintype,search)%>
+<title><%blogsetting(name)%> &raquo; Search</title>
+<link rel="archives" title="Archives" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%sitevar(url)%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<%endif%>
 </head>
\ No newline at end of file
index a4e841e..4f76da2 100644 (file)
@@ -1,31 +1,31 @@
-/*Nice Titles*/\r
-.nicetitle {\r
-       font-weight: bold;\r
-       color: #3C3C3C;\r
-       text-align: left;\r
-       position: absolute;\r
-       left: 0;\r
-       top: 0;\r
-       width: 25em;\r
-       z-index: 20;\r
-       max-width: 50%;\r
-}\r
-.nicetitle-content{\r
-       overflow: hidden;\r
-       background: white;\r
-       border: 1px solid #333;\r
-       padding: 5px;\r
-       opacity: 0.9;\r
-}\r
-.nicetitle p{\r
-       margin: 0;\r
-       line-height: 120%;\r
-}\r
-.nicetitle p.destination {\r
-       font-weight: normal;\r
-       font-size: 10px;\r
-       color: #5E7743;\r
-}\r
-div.nicetitle p span.accesskey {\r
-       color: #FF7200;\r
+/*Nice Titles*/
+.nicetitle {
+       font-weight: bold;
+       color: #3C3C3C;
+       text-align: left;
+       position: absolute;
+       left: 0;
+       top: 0;
+       width: 25em;
+       z-index: 20;
+       max-width: 50%;
+}
+.nicetitle-content{
+       overflow: hidden;
+       background: white;
+       border: 1px solid #333;
+       padding: 5px;
+       opacity: 0.9;
+}
+.nicetitle p{
+       margin: 0;
+       line-height: 120%;
+}
+.nicetitle p.destination {
+       font-weight: normal;
+       font-size: 10px;
+       color: #5E7743;
+}
+div.nicetitle p span.accesskey {
+       color: #FF7200;
 }
\ No newline at end of file
index 55c9d56..7180820 100644 (file)
-// from http://www.kryogenix.org\r
-// by Scott Andrew - http://scottandrew.com\r
-// add an eventlistener to browsers that can do it somehow.\r
-function addEvent(obj, evType, fn)\r
-       {\r
-       if (obj.addEventListener)\r
-               {\r
-               obj.addEventListener(evType, fn, false);\r
-               return true;\r
-               }\r
-       else if (obj.attachEvent)\r
-               {\r
-               var r = obj.attachEvent('on'+evType, fn);\r
-               return r;\r
-               }\r
-       else\r
-               {\r
-               return false;\r
-               }\r
-       }\r
-\r
-function floatImages()\r
-       {\r
-       // adapted from http://www.dithered.com/javascript/browser_detect/\r
-       //**************************************************************//\r
-       // sniff user agent\r
-       var userAgent = navigator.userAgent.toLowerCase();\r
-\r
-       // if Mozilla 1.4 then quit\r
-       if ((userAgent.indexOf('gecko') != -1) && (userAgent.indexOf('gecko/') + 14 == userAgent.length) && (parseFloat(userAgent.substring(userAgent.indexOf('rv:') + 3)) == '1.4')) return;\r
-\r
-       // if Opera then quit\r
-       if (document.all && window.Event) return;\r
-       //**************************************************************//\r
-\r
-       // check this browser can cope with what we want to do\r
-       if (!document.getElementById) return;\r
-       var blogDiv = document.getElementById('blog');\r
-       if (!blogDiv) return;\r
-       if (!blogDiv.offsetWidth) return;\r
-\r
-       blogDiv.className = (blogDiv.offsetWidth >= 500) ? "float-images" : "block-images";\r
-       }\r
-\r
-// Blockquote citations\r
-\r
-// Simon Willison's work:\r
-// http://simon.incutio.com/archive/2002/12/20/#blockquoteCitations\r
-\r
-// Also Dunstan Orchard's work:\r
-// http://1976design.com/blog/archive/2003/11/10/updates/\r
-function blockquoteCite()\r
-       {\r
-       if (!document.createElementNS)\r
-               {\r
-               document.createElementNS = function(ns, elt)\r
-                       {\r
-                       return document.createElement(elt);\r
-                       }\r
-               }\r
-       quotes = document.getElementsByTagName('blockquote');\r
-       for (i = 0; i < quotes.length; i++)\r
-               {\r
-               var cite = quotes[i].getAttribute('cite');\r
-               // value of cite attribute should only contain URI, not any other\r
-               if ((cite) && (cite != ''))\r
-                       {\r
-                       newlink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\r
-                       newlink.setAttribute('href', cite);\r
-                       newlink.className = 'cite-link';\r
-                       newlink.appendChild(document.createTextNode(cite));\r
-                       newdiv = document.createElementNS('http://www.w3.org/1999/xhtml', 'cite');\r
-                       newdiv.className = 'blockquote-cite';\r
-                       newdiv.appendChild(document.createTextNode('Source: '));\r
-                       newdiv.appendChild(newlink);\r
-                       quotes[i].appendChild(newdiv);\r
-                       quotes[i].removeAttribute('cite');\r
-                       }\r
-               }\r
-       }\r
-\r
-// Ins and Del tags citations\r
-function insdelCite()\r
-       {\r
-       if (!document.createElementNS)\r
-               {\r
-               document.createElementNS = function(ns, elt)\r
-                       {\r
-                       return document.createElement(elt);\r
-                       }\r
-               }\r
-       var insdel = new Array(2);\r
-       insdel[0] = document.getElementsByTagName('ins');\r
-       insdel[1] = document.getElementsByTagName('del');\r
-       for (var i=0; i<insdel.length; i++)\r
-               {\r
-               if (insdel[i])\r
-                       {\r
-                       for (var id=0; id<insdel[i].length; id++)\r
-                               {\r
-                               var isdl = insdel[i][id].getAttribute('cite');\r
-                               if ((isdl) && (isdl != ""))\r
-                                       {\r
-                                       idlink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\r
-                                       idlink.setAttribute('href', isdl);\r
-                                       idlink.className = 'cite-link ' + (i == 0 ? 'ins-cite' : 'del-cite');\r
-                                       idlink.setAttribute('title','citation of ' + (i == 0 ? 'added' : 'deleted') + ' text');\r
-                                       idlink.appendChild(document.createTextNode('#'));\r
-                                       insdel[i][id].appendChild(idlink);\r
-                                       insdel[i][id].removeAttribute('cite');\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-// Force IE not to show alternate text as tooltip\r
-function noAltTooltip()\r
-       {\r
-       images = document.getElementsByTagName('img');\r
-       for (var i = 0; i < images.length; i++)\r
-               {\r
-               var title = images[i].getAttribute('title');\r
-               var alt = images[i].getAttribute('alt');\r
-               if ((document.all) && (alt) && (!title))\r
-                       {\r
-                       images[i].setAttribute('title', '');\r
-                       }\r
-               }\r
-       }\r
-\r
-// Nice Titles\r
-\r
-// original code by Stuart Langridge 2003-11\r
-// with additions to the code by other good people\r
-// http://www.kryogenix.org/code/browser/nicetitle/\r
-// thank you, sir\r
-\r
-// modified by Peter Janes 2003-03-25\r
-// http://peterjanes.ca/blog/archives/2003/03/25/nicetitles-for-ins-and-del\r
-// added in ins and del tags\r
-\r
-// modified by Dunstan Orchard 2003-11-18\r
-// http://1976design.com/blog/\r
-// added in accesskey information\r
-// tried ever-so-hard, but couldn't work out how to do what Ethan did\r
-\r
-// final genius touch by by Ethan Marcotte 2003-11-18\r
-// http://www.sidesh0w.com/\r
-// worked out how to delay showing the popups to make them more like the browser's own\r
-\r
-// set the namespace\r
-var XHTMLNS = 'http://www.w3.org/1999/xhtml';\r
-var CURRENT_NICE_TITLE;\r
-\r
-// browser sniff\r
-var browser = new Browser();\r
-\r
-// determine browser and version.\r
-function Browser()\r
-       {\r
-       var ua, s, i;\r
-\r
-       this.isIE = false;\r
-       this.isNS = false;\r
-       this.version = null;\r
-\r
-       ua = navigator.userAgent;\r
-\r
-       s = 'MSIE';\r
-       if ((i = ua.indexOf(s)) >= 0)\r
-               {\r
-               this.isIE = true;\r
-               this.version = parseFloat(ua.substr(i + s.length));\r
-               return;\r
-               }\r
-\r
-       s = 'Netscape6/';\r
-       if ((i = ua.indexOf(s)) >= 0)\r
-               {\r
-               this.isNS = true;\r
-               this.version = parseFloat(ua.substr(i + s.length));\r
-               return;\r
-               }\r
-\r
-       // treat any other 'Gecko' browser as NS 6.1.\r
-       s = 'Gecko';\r
-       if ((i = ua.indexOf(s)) >= 0)\r
-               {\r
-               this.isNS = true;\r
-               this.version = 6.1;\r
-               return;\r
-               }\r
-       }\r
-\r
-// 2003-11-19 sidesh0w\r
-// set delay vars to emulate normal hover delay\r
-var delay;\r
-var interval = 0.60;\r
-\r
-// this function runs on window load\r
-// it runs through all the links on the page as starts listening for actions\r
-function makeNiceTitles()\r
-       {\r
-       if (!document.createElement || !document.getElementsByTagName) return;\r
-       if (!document.createElementNS)\r
-               {\r
-               document.createElementNS = function(ns, elt)\r
-                       {\r
-                       return document.createElement(elt);\r
-                       }\r
-               }\r
-\r
-       // do regular links\r
-       if (!document.links)\r
-               {\r
-               document.links = document.getElementsByTagName('a');\r
-               }\r
-       for (var ti=0; ti<document.links.length; ti++)\r
-               {\r
-               var lnk = document.links[ti];\r
-               // * I added specific class names here..\r
-               if (lnk.title)\r
-                       {\r
-                       lnk.setAttribute('nicetitle', lnk.title);\r
-                       lnk.removeAttribute('title');\r
-                       addEvent(lnk, 'mouseover', showDelay);\r
-                       addEvent(lnk, 'mouseout', hideNiceTitle);\r
-                       addEvent(lnk, 'focus', showDelay);\r
-                       addEvent(lnk, 'blur', hideNiceTitle);\r
-                       }\r
-               }\r
-\r
-       // 2003-03-25 Peter Janes\r
-       // do ins and del tags\r
-       var tags = new Array(2);\r
-       tags[0] = document.getElementsByTagName('ins');\r
-       tags[1] = document.getElementsByTagName('del');\r
-       for (var tt=0; tt<tags.length; tt++)\r
-               {\r
-               if (tags[tt])\r
-                       {\r
-                       for (var ti=0; ti<tags[tt].length; ti++)\r
-                               {\r
-                               var tag = tags[tt][ti];\r
-                               if (tag.dateTime)\r
-                                       {\r
-                                       var strDate = tag.dateTime;\r
-                                       // HTML/ISO8601 date: yyyy-mm-ddThh:mm:ssTZD (Z, -hh:mm, +hh:mm)\r
-                                       var month = strDate.substring(5,7);\r
-                                       var day = strDate.substring(8,10);\r
-                                       if (month[0] == '0')\r
-                                               {\r
-                                               month = month[1];\r
-                                               }\r
-                                       if (day[0] == '0')\r
-                                               {\r
-                                               day = day[1];\r
-                                               }\r
-                                       var dtIns = new Date(strDate.substring(0,4), month-1, day, strDate.substring(11,13), strDate.substring(14,16), strDate.substring(17,19));\r
-                                       tag.setAttribute('nicetitle', (tt == 0 ? 'Added' : 'Deleted') + ' on ' + dtIns.toString());\r
-                                       addEvent(tag, 'mouseover', showDelay);\r
-                                       addEvent(tag, 'mouseout', hideNiceTitle);\r
-                                       addEvent(tag, 'focus', showDelay);\r
-                                       addEvent(tag, 'blur', hideNiceTitle);\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-function findPosition(oLink)\r
-       {\r
-       if (oLink.offsetParent)\r
-               {\r
-               for (var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent)\r
-                       {\r
-                       posX += oLink.offsetLeft;\r
-                       posY += oLink.offsetTop;\r
-                       }\r
-               return [posX, posY];\r
-               }\r
-       else\r
-               {\r
-               return [oLink.x, oLink.y];\r
-               }\r
-       }\r
-\r
-function getParent(el, pTagName)\r
-       {\r
-       if (el == null)\r
-               {\r
-               return null;\r
-               }\r
-       // gecko bug, supposed to be uppercase\r
-       else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())\r
-               {\r
-               return el;\r
-               }\r
-       else\r
-               {\r
-               return getParent(el.parentNode, pTagName);\r
-               }\r
-       }\r
-\r
-// 2003-11-19 sidesh0w\r
-// trailerpark wrapper function\r
-function showDelay(e)\r
-       {\r
-    if (window.event && window.event.srcElement)\r
-               {\r
-        lnk = window.event.srcElement\r
-               }\r
-       else if (e && e.target)\r
-               {\r
-        lnk = e.target\r
-               }\r
-    if (!lnk) return;\r
-\r
-       // lnk is a textnode or an elementnode that's not ins/del\r
-    if (lnk.nodeType == 3 || (lnk.nodeType == 1 && lnk.tagName.toLowerCase() != 'ins' && lnk.tagName.toLowerCase() != 'del'))\r
-               {\r
-               // ascend parents until we hit a link\r
-               lnk = getParent(lnk, 'a');\r
-               }\r
-\r
-       delay = setTimeout("showNiceTitle(lnk)", interval * 1000);\r
-       }\r
-\r
-// build and show the nice titles\r
-function showNiceTitle(link)\r
-       {\r
-    if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);\r
-    if (!document.getElementsByTagName) return;\r
-\r
-    nicetitle = lnk.getAttribute('nicetitle');\r
-\r
-    var d = document.createElementNS(XHTMLNS, 'div');\r
-    d.className = 'nicetitle';\r
-    var dc = document.createElementNS(XHTMLNS, 'div');\r
-    dc.className = 'nicetitle-content';\r
-    d.appendChild(dc);\r
-    tnt = document.createTextNode(nicetitle);\r
-    pat = document.createElementNS(XHTMLNS, 'p');\r
-    pat.className = 'titletext';\r
-    pat.appendChild(tnt);\r
-\r
-       // 2003-11-18 Dunstan Orchard\r
-       // added in accesskey info\r
-       if (lnk.accessKey)\r
-               {\r
-        axs = document.createTextNode(' [' + lnk.accessKey + ']');\r
-               axsk = document.createElementNS(XHTMLNS, 'span');\r
-        axsk.className = 'accesskey';\r
-        axsk.appendChild(axs);\r
-               pat.appendChild(axsk);\r
-               }\r
-    dc.appendChild(pat);\r
-\r
-    if (lnk.href)\r
-               {\r
-        tnd = document.createTextNode(lnk.href);\r
-        pad = document.createElementNS(XHTMLNS, 'p');\r
-        pad.className = 'destination';\r
-        pad.appendChild(tnd);\r
-        dc.appendChild(pad);\r
-               }\r
-\r
-    STD_WIDTH = 300;\r
-\r
-       if (lnk.href)\r
-               {\r
-        h = lnk.href.length;\r
-               }\r
-       else\r
-               {\r
-               h = nicetitle.length;\r
-               }\r
-\r
-    if (nicetitle.length)\r
-               {\r
-               t = nicetitle.length;\r
-               }\r
-\r
-    h_pixels = h*6;\r
-       t_pixels = t*10;\r
-\r
-    if (h_pixels > STD_WIDTH)\r
-               {\r
-        w = h_pixels;\r
-               }\r
-       else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels))\r
-               {\r
-        w = t_pixels;\r
-               }\r
-       else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels))\r
-               {\r
-        w = h_pixels;\r
-               }\r
-       else\r
-               {\r
-        w = STD_WIDTH;\r
-               }\r
-\r
-    d.style.width = w + 'px';\r
-\r
-    mpos = findPosition(lnk);\r
-    mx = mpos[0];\r
-    my = mpos[1];\r
-\r
-    d.style.left = (mx+15) + 'px';\r
-    d.style.top = (my+35) + 'px';\r
-\r
-    if (window.innerWidth && ((mx+w) > window.innerWidth))\r
-               {\r
-        d.style.left = (window.innerWidth - w - 25) + 'px';\r
-               }\r
-    if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth))\r
-               {\r
-        d.style.left = (document.body.scrollWidth - w - 25) + 'px';\r
-               }\r
-\r
-    document.getElementsByTagName('body')[0].appendChild(d);\r
-\r
-    CURRENT_NICE_TITLE = d;\r
-       }\r
-\r
-function hideNiceTitle(e)\r
-       {\r
-       // 2003-11-19 sidesh0w\r
-       // clearTimeout\r
-       if (delay) clearTimeout(delay);\r
-       if (!document.getElementsByTagName) return;\r
-       if (CURRENT_NICE_TITLE)\r
-               {\r
-               document.getElementsByTagName('body')[0].removeChild(CURRENT_NICE_TITLE);\r
-               CURRENT_NICE_TITLE = null;\r
-               }\r
-       }\r
-\r
-addEvent(window, "load", floatImages);\r
-addEvent(window, "resize", floatImages);\r
-addEvent(window, "load", blockquoteCite);\r
-addEvent(window, "load", insdelCite);\r
-addEvent(window, "load", noAltTooltip);\r
-addEvent(window, "load", makeNiceTitles);\r
-\r
+// from http://www.kryogenix.org
+// by Scott Andrew - http://scottandrew.com
+// add an eventlistener to browsers that can do it somehow.
+function addEvent(obj, evType, fn)
+       {
+       if (obj.addEventListener)
+               {
+               obj.addEventListener(evType, fn, false);
+               return true;
+               }
+       else if (obj.attachEvent)
+               {
+               var r = obj.attachEvent('on'+evType, fn);
+               return r;
+               }
+       else
+               {
+               return false;
+               }
+       }
+
+function floatImages()
+       {
+       // adapted from http://www.dithered.com/javascript/browser_detect/
+       //**************************************************************//
+       // sniff user agent
+       var userAgent = navigator.userAgent.toLowerCase();
+
+       // if Mozilla 1.4 then quit
+       if ((userAgent.indexOf('gecko') != -1) && (userAgent.indexOf('gecko/') + 14 == userAgent.length) && (parseFloat(userAgent.substring(userAgent.indexOf('rv:') + 3)) == '1.4')) return;
+
+       // if Opera then quit
+       if (document.all && window.Event) return;
+       //**************************************************************//
+
+       // check this browser can cope with what we want to do
+       if (!document.getElementById) return;
+       var blogDiv = document.getElementById('blog');
+       if (!blogDiv) return;
+       if (!blogDiv.offsetWidth) return;
+
+       blogDiv.className = (blogDiv.offsetWidth >= 500) ? "float-images" : "block-images";
+       }
+
+// Blockquote citations
+
+// Simon Willison's work:
+// http://simon.incutio.com/archive/2002/12/20/#blockquoteCitations
+
+// Also Dunstan Orchard's work:
+// http://1976design.com/blog/archive/2003/11/10/updates/
+function blockquoteCite()
+       {
+       if (!document.createElementNS)
+               {
+               document.createElementNS = function(ns, elt)
+                       {
+                       return document.createElement(elt);
+                       }
+               }
+       quotes = document.getElementsByTagName('blockquote');
+       for (i = 0; i < quotes.length; i++)
+               {
+               var cite = quotes[i].getAttribute('cite');
+               // value of cite attribute should only contain URI, not any other
+               if ((cite) && (cite != ''))
+                       {
+                       newlink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
+                       newlink.setAttribute('href', cite);
+                       newlink.className = 'cite-link';
+                       newlink.appendChild(document.createTextNode(cite));
+                       newdiv = document.createElementNS('http://www.w3.org/1999/xhtml', 'cite');
+                       newdiv.className = 'blockquote-cite';
+                       newdiv.appendChild(document.createTextNode('Source: '));
+                       newdiv.appendChild(newlink);
+                       quotes[i].appendChild(newdiv);
+                       quotes[i].removeAttribute('cite');
+                       }
+               }
+       }
+
+// Ins and Del tags citations
+function insdelCite()
+       {
+       if (!document.createElementNS)
+               {
+               document.createElementNS = function(ns, elt)
+                       {
+                       return document.createElement(elt);
+                       }
+               }
+       var insdel = new Array(2);
+       insdel[0] = document.getElementsByTagName('ins');
+       insdel[1] = document.getElementsByTagName('del');
+       for (var i=0; i<insdel.length; i++)
+               {
+               if (insdel[i])
+                       {
+                       for (var id=0; id<insdel[i].length; id++)
+                               {
+                               var isdl = insdel[i][id].getAttribute('cite');
+                               if ((isdl) && (isdl != ""))
+                                       {
+                                       idlink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
+                                       idlink.setAttribute('href', isdl);
+                                       idlink.className = 'cite-link ' + (i == 0 ? 'ins-cite' : 'del-cite');
+                                       idlink.setAttribute('title','citation of ' + (i == 0 ? 'added' : 'deleted') + ' text');
+                                       idlink.appendChild(document.createTextNode('#'));
+                                       insdel[i][id].appendChild(idlink);
+                                       insdel[i][id].removeAttribute('cite');
+                                       }
+                               }
+                       }
+               }
+       }
+
+// Force IE not to show alternate text as tooltip
+function noAltTooltip()
+       {
+       images = document.getElementsByTagName('img');
+       for (var i = 0; i < images.length; i++)
+               {
+               var title = images[i].getAttribute('title');
+               var alt = images[i].getAttribute('alt');
+               if ((document.all) && (alt) && (!title))
+                       {
+                       images[i].setAttribute('title', '');
+                       }
+               }
+       }
+
+// Nice Titles
+
+// original code by Stuart Langridge 2003-11
+// with additions to the code by other good people
+// http://www.kryogenix.org/code/browser/nicetitle/
+// thank you, sir
+
+// modified by Peter Janes 2003-03-25
+// http://peterjanes.ca/blog/archives/2003/03/25/nicetitles-for-ins-and-del
+// added in ins and del tags
+
+// modified by Dunstan Orchard 2003-11-18
+// http://1976design.com/blog/
+// added in accesskey information
+// tried ever-so-hard, but couldn't work out how to do what Ethan did
+
+// final genius touch by by Ethan Marcotte 2003-11-18
+// http://www.sidesh0w.com/
+// worked out how to delay showing the popups to make them more like the browser's own
+
+// set the namespace
+var XHTMLNS = 'http://www.w3.org/1999/xhtml';
+var CURRENT_NICE_TITLE;
+
+// browser sniff
+var browser = new Browser();
+
+// determine browser and version.
+function Browser()
+       {
+       var ua, s, i;
+
+       this.isIE = false;
+       this.isNS = false;
+       this.version = null;
+
+       ua = navigator.userAgent;
+
+       s = 'MSIE';
+       if ((i = ua.indexOf(s)) >= 0)
+               {
+               this.isIE = true;
+               this.version = parseFloat(ua.substr(i + s.length));
+               return;
+               }
+
+       s = 'Netscape6/';
+       if ((i = ua.indexOf(s)) >= 0)
+               {
+               this.isNS = true;
+               this.version = parseFloat(ua.substr(i + s.length));
+               return;
+               }
+
+       // treat any other 'Gecko' browser as NS 6.1.
+       s = 'Gecko';
+       if ((i = ua.indexOf(s)) >= 0)
+               {
+               this.isNS = true;
+               this.version = 6.1;
+               return;
+               }
+       }
+
+// 2003-11-19 sidesh0w
+// set delay vars to emulate normal hover delay
+var delay;
+var interval = 0.60;
+
+// this function runs on window load
+// it runs through all the links on the page as starts listening for actions
+function makeNiceTitles()
+       {
+       if (!document.createElement || !document.getElementsByTagName) return;
+       if (!document.createElementNS)
+               {
+               document.createElementNS = function(ns, elt)
+                       {
+                       return document.createElement(elt);
+                       }
+               }
+
+       // do regular links
+       if (!document.links)
+               {
+               document.links = document.getElementsByTagName('a');
+               }
+       for (var ti=0; ti<document.links.length; ti++)
+               {
+               var lnk = document.links[ti];
+               // * I added specific class names here..
+               if (lnk.title)
+                       {
+                       lnk.setAttribute('nicetitle', lnk.title);
+                       lnk.removeAttribute('title');
+                       addEvent(lnk, 'mouseover', showDelay);
+                       addEvent(lnk, 'mouseout', hideNiceTitle);
+                       addEvent(lnk, 'focus', showDelay);
+                       addEvent(lnk, 'blur', hideNiceTitle);
+                       }
+               }
+
+       // 2003-03-25 Peter Janes
+       // do ins and del tags
+       var tags = new Array(2);
+       tags[0] = document.getElementsByTagName('ins');
+       tags[1] = document.getElementsByTagName('del');
+       for (var tt=0; tt<tags.length; tt++)
+               {
+               if (tags[tt])
+                       {
+                       for (var ti=0; ti<tags[tt].length; ti++)
+                               {
+                               var tag = tags[tt][ti];
+                               if (tag.dateTime)
+                                       {
+                                       var strDate = tag.dateTime;
+                                       // HTML/ISO8601 date: yyyy-mm-ddThh:mm:ssTZD (Z, -hh:mm, +hh:mm)
+                                       var month = strDate.substring(5,7);
+                                       var day = strDate.substring(8,10);
+                                       if (month[0] == '0')
+                                               {
+                                               month = month[1];
+                                               }
+                                       if (day[0] == '0')
+                                               {
+                                               day = day[1];
+                                               }
+                                       var dtIns = new Date(strDate.substring(0,4), month-1, day, strDate.substring(11,13), strDate.substring(14,16), strDate.substring(17,19));
+                                       tag.setAttribute('nicetitle', (tt == 0 ? 'Added' : 'Deleted') + ' on ' + dtIns.toString());
+                                       addEvent(tag, 'mouseover', showDelay);
+                                       addEvent(tag, 'mouseout', hideNiceTitle);
+                                       addEvent(tag, 'focus', showDelay);
+                                       addEvent(tag, 'blur', hideNiceTitle);
+                                       }
+                               }
+                       }
+               }
+       }
+
+function findPosition(oLink)
+       {
+       if (oLink.offsetParent)
+               {
+               for (var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent)
+                       {
+                       posX += oLink.offsetLeft;
+                       posY += oLink.offsetTop;
+                       }
+               return [posX, posY];
+               }
+       else
+               {
+               return [oLink.x, oLink.y];
+               }
+       }
+
+function getParent(el, pTagName)
+       {
+       if (el == null)
+               {
+               return null;
+               }
+       // gecko bug, supposed to be uppercase
+       else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
+               {
+               return el;
+               }
+       else
+               {
+               return getParent(el.parentNode, pTagName);
+               }
+       }
+
+// 2003-11-19 sidesh0w
+// trailerpark wrapper function
+function showDelay(e)
+       {
+    if (window.event && window.event.srcElement)
+               {
+        lnk = window.event.srcElement
+               }
+       else if (e && e.target)
+               {
+        lnk = e.target
+               }
+    if (!lnk) return;
+
+       // lnk is a textnode or an elementnode that's not ins/del
+    if (lnk.nodeType == 3 || (lnk.nodeType == 1 && lnk.tagName.toLowerCase() != 'ins' && lnk.tagName.toLowerCase() != 'del'))
+               {
+               // ascend parents until we hit a link
+               lnk = getParent(lnk, 'a');
+               }
+
+       delay = setTimeout("showNiceTitle(lnk)", interval * 1000);
+       }
+
+// build and show the nice titles
+function showNiceTitle(link)
+       {
+    if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
+    if (!document.getElementsByTagName) return;
+
+    nicetitle = lnk.getAttribute('nicetitle');
+
+    var d = document.createElementNS(XHTMLNS, 'div');
+    d.className = 'nicetitle';
+    var dc = document.createElementNS(XHTMLNS, 'div');
+    dc.className = 'nicetitle-content';
+    d.appendChild(dc);
+    tnt = document.createTextNode(nicetitle);
+    pat = document.createElementNS(XHTMLNS, 'p');
+    pat.className = 'titletext';
+    pat.appendChild(tnt);
+
+       // 2003-11-18 Dunstan Orchard
+       // added in accesskey info
+       if (lnk.accessKey)
+               {
+        axs = document.createTextNode(' [' + lnk.accessKey + ']');
+               axsk = document.createElementNS(XHTMLNS, 'span');
+        axsk.className = 'accesskey';
+        axsk.appendChild(axs);
+               pat.appendChild(axsk);
+               }
+    dc.appendChild(pat);
+
+    if (lnk.href)
+               {
+        tnd = document.createTextNode(lnk.href);
+        pad = document.createElementNS(XHTMLNS, 'p');
+        pad.className = 'destination';
+        pad.appendChild(tnd);
+        dc.appendChild(pad);
+               }
+
+    STD_WIDTH = 300;
+
+       if (lnk.href)
+               {
+        h = lnk.href.length;
+               }
+       else
+               {
+               h = nicetitle.length;
+               }
+
+    if (nicetitle.length)
+               {
+               t = nicetitle.length;
+               }
+
+    h_pixels = h*6;
+       t_pixels = t*10;
+
+    if (h_pixels > STD_WIDTH)
+               {
+        w = h_pixels;
+               }
+       else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels))
+               {
+        w = t_pixels;
+               }
+       else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels))
+               {
+        w = h_pixels;
+               }
+       else
+               {
+        w = STD_WIDTH;
+               }
+
+    d.style.width = w + 'px';
+
+    mpos = findPosition(lnk);
+    mx = mpos[0];
+    my = mpos[1];
+
+    d.style.left = (mx+15) + 'px';
+    d.style.top = (my+35) + 'px';
+
+    if (window.innerWidth && ((mx+w) > window.innerWidth))
+               {
+        d.style.left = (window.innerWidth - w - 25) + 'px';
+               }
+    if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth))
+               {
+        d.style.left = (document.body.scrollWidth - w - 25) + 'px';
+               }
+
+    document.getElementsByTagName('body')[0].appendChild(d);
+
+    CURRENT_NICE_TITLE = d;
+       }
+
+function hideNiceTitle(e)
+       {
+       // 2003-11-19 sidesh0w
+       // clearTimeout
+       if (delay) clearTimeout(delay);
+       if (!document.getElementsByTagName) return;
+       if (CURRENT_NICE_TITLE)
+               {
+               document.getElementsByTagName('body')[0].removeChild(CURRENT_NICE_TITLE);
+               CURRENT_NICE_TITLE = null;
+               }
+       }
+
+addEvent(window, "load", floatImages);
+addEvent(window, "resize", floatImages);
+addEvent(window, "load", blockquoteCite);
+addEvent(window, "load", insdelCite);
+addEvent(window, "load", noAltTooltip);
+addEvent(window, "load", makeNiceTitles);
+
 // I'm very poor in JavaScript. Please correct me if I'm wrong.
\ No newline at end of file
index 142211a..40f75ab 100644 (file)
Binary files a/skins/default/preview-large.png and b/skins/default/preview-large.png differ
index 04a720b..fea1850 100644 (file)
Binary files a/skins/default/preview.png and b/skins/default/preview.png differ
index 0d6d90e..fc975b8 100644 (file)
@@ -1,53 +1,53 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
-       <title>Nucleus CMS 3.2 - default skin</title>\r
-       <link rel="stylesheet" type="text/css" href="../../nucleus/styles/manual.css" />\r
-</head>\r
-<body>\r
-       <h1>Nucleus CMS 3.2 - default skin</h1>\r
-\r
-       <p>Default Nucleus CMS 3.2 skin based on the Stanch skin contributed by <a href="http://www.stanch.net/">Stanch</a> with assistance from <a href="http://roelg.nl/">roel</a>.</p>\r
-\r
-       <p>Default skin's skin/templates/includes tweaked by <a href="http://nupusi.com/">hcgtv</a>, CSS color scheme by <a href="http://smalltalking.com/">moraes</a>.</p>\r
-\r
-       <br />\r
-       <p>This skin has been tested on major modern browsers, such as Firefox 1.0, Internet Explorer 6.0, Opera 7.54 and Netscape 7.2. The skin is coded using valid XHTML 1.0 and valid CSS.</p>\r
-\r
-       <p>If you want drop shadow effect for your images when you blog, you have to add 3 div's surrounding the image. Start with &lt;div class="wrap1"&gt;, followed by &lt;div class="wrap2"&gt;, and then &lt;div class="wrap3"&gt;. Remember to close them with &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;. Please note also that the drop shadow has float:left style applied to it.</p>\r
-\r
-       <p>On the comments page, you will notice that the owner (Nucleus administrator) has a different kind of styling to his/her comments, as opposed to the comments made by visitors. This is made possible using CSS. I have included short comments in the CSS file, I'm sure it is easy to understand, in case you want to remove this styling or you want to add styling for different members.</p>\r
-\r
-       <br />\r
-       <p>Default skin files:</p>\r
-       <p>default_left.css - left side menu CSS code, change it in head.inc</p>\r
-       <p>default_right.css - right side menu CSS code, default CSS in head.inc</p>\r
-       <p>skinbackup.xml - backup of default skin, can be reimported just in case</p>\r
-       <p>/images - background, header, footer and misc images</p>\r
-\r
-       <br />\r
-       <p>This skin makes use of includes for skin abstraction:</p>\r
-       <p>head.inc - html header</p>\r
-       <p>navigation.inc - navigation & page titles</p>\r
-       <p>header.inc - page header</p>\r
-       <p>sidebar.inc - page menu</p>\r
-       <p>footer.inc - page footer</p>\r
-\r
-       <br />\r
-       <p>Extra files:</p>\r
-       <p>nicetitles.js - tooltips javascript code, triggered by title="" attribute in links</p>\r
-       <p>nicetitle.css - tooltips color and layout code</p>\r
-       <p>favicon.ico - sample favorite icon, copy to site's root directory</p>\r
-\r
-       <br />\r
-       <p>The <a href="http://wiki.gednet.com/NPSkinFiles">NP_SkinFiles plugin</a> is recommended for maintenance of includes.</a></p>\r
-       <p>Note: chmod 666 the .inc files in the /skins/default directory.</p>\r
-\r
-       <br />\r
-       <p>Tooltips courtesy of <a href="http://neo.dzygn.com/code/nicetitles">NiceTitles</a></p>\r
-\r
-       <br />\r
-       <h1>Nucleus CMS 3.2 - to stop the flow of tears</h1>\r
-\r
-</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nucleus CMS 3.2 - default skin</title>
+       <link rel="stylesheet" type="text/css" href="../../nucleus/styles/manual.css" />
+</head>
+<body>
+       <h1>Nucleus CMS 3.2 - default skin</h1>
+
+       <p>Default Nucleus CMS 3.2 skin based on the Stanch skin contributed by <a href="http://www.stanch.net/">Stanch</a> with assistance from <a href="http://roelg.nl/">roel</a>.</p>
+
+       <p>Default skin's skin/templates/includes tweaked by <a href="http://nupusi.com/">hcgtv</a>, CSS color scheme by <a href="http://smalltalking.com/">moraes</a>.</p>
+
+       <br />
+       <p>This skin has been tested on major modern browsers, such as Firefox 1.0, Internet Explorer 6.0, Opera 7.54 and Netscape 7.2. The skin is coded using valid XHTML 1.0 and valid CSS.</p>
+
+       <p>If you want drop shadow effect for your images when you blog, you have to add 3 div's surrounding the image. Start with &lt;div class="wrap1"&gt;, followed by &lt;div class="wrap2"&gt;, and then &lt;div class="wrap3"&gt;. Remember to close them with &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;. Please note also that the drop shadow has float:left style applied to it.</p>
+
+       <p>On the comments page, you will notice that the owner (Nucleus administrator) has a different kind of styling to his/her comments, as opposed to the comments made by visitors. This is made possible using CSS. I have included short comments in the CSS file, I'm sure it is easy to understand, in case you want to remove this styling or you want to add styling for different members.</p>
+
+       <br />
+       <p>Default skin files:</p>
+       <p>default_left.css - left side menu CSS code, change it in head.inc</p>
+       <p>default_right.css - right side menu CSS code, default CSS in head.inc</p>
+       <p>skinbackup.xml - backup of default skin, can be reimported just in case</p>
+       <p>/images - background, header, footer and misc images</p>
+
+       <br />
+       <p>This skin makes use of includes for skin abstraction:</p>
+       <p>head.inc - html header</p>
+       <p>navigation.inc - navigation & page titles</p>
+       <p>header.inc - page header</p>
+       <p>sidebar.inc - page menu</p>
+       <p>footer.inc - page footer</p>
+
+       <br />
+       <p>Extra files:</p>
+       <p>nicetitles.js - tooltips javascript code, triggered by title="" attribute in links</p>
+       <p>nicetitle.css - tooltips color and layout code</p>
+       <p>favicon.ico - sample favorite icon, copy to site's root directory</p>
+
+       <br />
+       <p>The <a href="http://wiki.gednet.com/NPSkinFiles">NP_SkinFiles plugin</a> is recommended for maintenance of includes.</a></p>
+       <p>Note: chmod 666 the .inc files in the /skins/default directory.</p>
+
+       <br />
+       <p>Tooltips courtesy of <a href="http://neo.dzygn.com/code/nicetitles">NiceTitles</a></p>
+
+       <br />
+       <h1>Nucleus CMS 3.2 - to stop the flow of tears</h1>
+
+</body>
 </html>
\ No newline at end of file
index 1c8c52d..8bc001b 100644 (file)
-<!-- page menu -->\r
-<div class="sidebar">\r
-<dl class="sidebardl">\r
-<dt>Navigation</dt>\r
-\r
-<!-- archive: navigation -->\r
-<%if(skintype,archive)%>\r
-<dd><a href="<%prevlink%>" title="Previous month">Previous <%archivetype%></a></dd>\r
-<dd><a href="<%nextlink%>" title="Next month">Next <%archivetype%></a></dd>\r
-<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>\r
-<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>\r
-<%endif%>\r
-\r
-<!-- archivelist: navigation -->\r
-<%if(skintype,archivelist)%>\r
-<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>\r
-<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>\r
-<%endif%>\r
-\r
-<!-- error: navigation -->\r
-<%if(skintype,error)%>\r
-<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>\r
-<%endif%>\r
-\r
-<!-- index: navigation -->\r
-<%if(skintype,index)%>\r
-<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>\r
-<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>\r
-<%endif%>\r
-\r
-<!-- item: navigation -->\r
-<%if(skintype,item)%>\r
-<dd><a href="<%nextlink%>" title="Previous item">Previous Item</a></dd>\r
-<dd><a href="<%prevlink%>" title="Next item">Next Item</a></dd>\r
-<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>\r
-<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>\r
-<%endif%>\r
-\r
-<!-- member: navigation -->\r
-<%if(skintype,member)%>\r
-<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>\r
-<%endif%>\r
-\r
-<!-- search: navigation -->\r
-<%if(skintype,search)%>\r
-<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>\r
-<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>\r
-<%endif%>\r
-\r
-<!-- admin link, only visible if logged in -->\r
-<%if(loggedin)%>\r
-<dd><a href="<%adminurl%>" title="Admin Area">Admin</a></dd>\r
-<%endif%>\r
-</dl>\r
-</div>\r
-\r
-<!-- category list, not on error or member page -->\r
-<%if(skintype,error)%><%else%>\r
-<%if(skintype,member)%><%else%>\r
-<div class="sidebar">\r
-<dl class="sidebardl">\r
-<dt>Categories</dt>\r
-<%categorylist(default/index)%>\r
-</dl>\r
-</div>\r
-<%endif%><%endif%>\r
-\r
-<!-- search form -->\r
-<div class="sidebar">\r
-<dl class="sidebardl">\r
-<dt>Search</dt>\r
-<dd><%searchform%></dd>\r
-</dl>\r
-</div>\r
-\r
-<!-- login form -->\r
-<div class="sidebar">\r
-<dl class="sidebardl">\r
-<dt>Login</dt>\r
-<dd><%loginform%></dd>\r
-</dl>\r
-</div>\r
-\r
-<!-- links -->\r
-<div class="sidebar">\r
-<dl class="sidebardl">\r
-<dt>Links</dt>\r
-<dd><a href="http://nucleuscms.org" title="Nucleus CMS Home">nucleuscms.org</a></dd>\r
-<dd><a href="http://docs.nucleuscms.org/" title="Nucleus CMS Documentation">docs.nucleuscms.org</a></dd>\r
-<dd><a href="http://forum.nucleuscms.org" title="Nucleus CMS Support Forum">forum.nucleuscms.org</a></dd>\r
-<dd><a href="http://wiki.nucleuscms.org/" title="Nucleus CMS Wiki">wiki.nucleuscms.org</a></dd>\r
-<dd><a href="http://skins.nucleuscms.org/" title="Nucleus CMS Skins">skins.nucleuscms.org</a></dd>\r
-<dd><a href="http://wiki.nucleuscms.org/plugin" title="Nucleus CMS Plugins">plugins.nucleuscms.org</a></dd>\r
-<dd><a href="http://dev.nucleuscms.org/" title="Nucleus Developer Network">dev.nucleuscms.org</a></dd>\r
-</dl>\r
-</div>\r
-\r
-<!-- Powered by -->\r
-<div class="sidebar">\r
-<div class="sidebardl centerize">\r
-<%nucleusbutton(images/nucleus.gif,85,31)%>\r
-</div>\r
+<!-- page menu -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>Navigation</dt>
+
+<!-- archive: navigation -->
+<%if(skintype,archive)%>
+<dd><a href="<%prevlink%>" title="Previous month">Previous <%archivetype%></a></dd>
+<dd><a href="<%nextlink%>" title="Next month">Next <%archivetype%></a></dd>
+<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>
+<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>
+<%endif%>
+
+<!-- archivelist: navigation -->
+<%if(skintype,archivelist)%>
+<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>
+<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>
+<%endif%>
+
+<!-- error: navigation -->
+<%if(skintype,error)%>
+<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>
+<%endif%>
+
+<!-- index: navigation -->
+<%if(skintype,index)%>
+<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>
+<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>
+<%endif%>
+
+<!-- item: navigation -->
+<%if(skintype,item)%>
+<dd><a href="<%nextlink%>" title="Previous item">Previous Item</a></dd>
+<dd><a href="<%prevlink%>" title="Next item">Next Item</a></dd>
+<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>
+<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>
+<%endif%>
+
+<!-- member: navigation -->
+<%if(skintype,member)%>
+<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>
+<%endif%>
+
+<!-- search: navigation -->
+<%if(skintype,search)%>
+<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>
+<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>
+<%endif%>
+
+<!-- admin link, only visible if logged in -->
+<%if(loggedin)%>
+<dd><a href="<%adminurl%>" title="Admin Area">Admin</a></dd>
+<%endif%>
+</dl>
+</div>
+
+<!-- category list, not on error or member page -->
+<%if(skintype,error)%><%else%>
+<%if(skintype,member)%><%else%>
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>Categories</dt>
+<%categorylist(default/index)%>
+</dl>
+</div>
+<%endif%><%endif%>
+
+<!-- search form -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>Search</dt>
+<dd><%searchform%></dd>
+</dl>
+</div>
+
+<!-- login form -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>Login</dt>
+<dd><%loginform%></dd>
+</dl>
+</div>
+
+<!-- links -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>Links</dt>
+<dd><a href="http://nucleuscms.org" title="Nucleus CMS Home">nucleuscms.org</a></dd>
+<dd><a href="http://docs.nucleuscms.org/" title="Nucleus CMS Documentation">docs.nucleuscms.org</a></dd>
+<dd><a href="http://forum.nucleuscms.org" title="Nucleus CMS Support Forum">forum.nucleuscms.org</a></dd>
+<dd><a href="http://wiki.nucleuscms.org/" title="Nucleus CMS Wiki">wiki.nucleuscms.org</a></dd>
+<dd><a href="http://skins.nucleuscms.org/" title="Nucleus CMS Skins">skins.nucleuscms.org</a></dd>
+<dd><a href="http://wiki.nucleuscms.org/plugin" title="Nucleus CMS Plugins">plugins.nucleuscms.org</a></dd>
+<dd><a href="http://dev.nucleuscms.org/" title="Nucleus Developer Network">dev.nucleuscms.org</a></dd>
+</dl>
+</div>
+
+<!-- Powered by -->
+<div class="sidebar">
+<div class="sidebardl centerize">
+<%nucleusbutton(images/nucleus.gif,85,31)%>
+</div>
 </div>
\ No newline at end of file
index 361b623..ddecbfe 100755 (executable)
@@ -1,6 +1,6 @@
-Nucleus skins directory\r
------------------------\r
-\r
-PLEASE NOTE: the skinbackup.xml or skindata.xml files in these directories are not where you should edit the skins. These files get generated by the Nucleus skin export function and are meant to distribute skins between Nucleus users.\r
-\r
+Nucleus skins directory
+-----------------------
+
+PLEASE NOTE: the skinbackup.xml or skindata.xml files in these directories are not where you should edit the skins. These files get generated by the Nucleus skin export function and are meant to distribute skins between Nucleus users.
+
 To edit skins, open the Nucleus Admin Area, and select 'skins' in the left menu.
\ No newline at end of file
index 8814631..013c37a 100755 (executable)
@@ -1,70 +1,70 @@
-<?php\r
-\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-\r
-/**\r
- * Nucleus RSS syndication channel skin\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: xml-rss2.php,v 1.5 2005-04-20 06:49:45 kimitake Exp $\r
- * $NucleusJP$\r
- */\r
-\r
-header("Pragma: no-cache");\r
-\r
-$CONF = array();\r
-$CONF['Self'] = "xml-rss2.php";\r
-\r
-include('./config.php');\r
-\r
-if (!$CONF['DisableSite']) {\r
-       // get feed into $feed\r
-       ob_start();\r
-               selectSkin('feeds/rss20');\r
-               selector();\r
-       $feed = ob_get_contents();\r
-       ob_end_clean();\r
-       \r
-       // create ETAG (hash of feed)\r
-       // (HTTP_IF_NONE_MATCH has quotes around it)\r
-       $eTag = '"'.md5($feed).'"';\r
-       header('Etag: '.$eTag);\r
-       \r
-       // compare Etag to what we got\r
-       if ($eTag == serverVar('HTTP_IF_NONE_MATCH')) { \r
-               header("HTTP/1.0 304 Not Modified");\r
-               header('Content-Length: 0');\r
-       } else {\r
-               header("Content-Type: application/xml");\r
-               // dump feed\r
-               echo $feed;\r
-       }\r
-               \r
-} else {\r
-       // output empty RSS file...\r
-       // (because site is disabled)\r
-       \r
-       echo '<' . '?xml version="1.0" encoding="ISO-8859-1"?' . '>';\r
-       \r
-       ?>\r
-       <rss version="2.0">\r
-         <channel>\r
-           <title><?php echo htmlspecialchars($CONF['SiteName'])?></title>\r
-           <link><?php echo htmlspecialchars($CONF['IndexURL'])?></link>\r
-           <description></description>\r
-           <docs>http://backend.userland.com/rss</docs>\r
-         </channel>\r
-       </rss>  \r
-       <?php\r
-}\r
-\r
-?>\r
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * Nucleus RSS syndication channel skin
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: xml-rss2.php,v 1.6 2006-07-12 07:11:45 kimitake Exp $
+ * $NucleusJP: xml-rss2.php,v 1.5 2005/04/20 06:49:45 kimitake Exp $
+ */
+
+header("Pragma: no-cache");
+
+$CONF = array();
+$CONF['Self'] = "xml-rss2.php";
+
+include('./config.php');
+
+if (!$CONF['DisableSite']) {
+       // get feed into $feed
+       ob_start();
+               selectSkin('feeds/rss20');
+               selector();
+       $feed = ob_get_contents();
+       ob_end_clean();
+
+       // create ETAG (hash of feed)
+       // (HTTP_IF_NONE_MATCH has quotes around it)
+       $eTag = '"'.md5($feed).'"';
+       header('Etag: '.$eTag);
+
+       // compare Etag to what we got
+       if ($eTag == serverVar('HTTP_IF_NONE_MATCH')) {
+               header("HTTP/1.0 304 Not Modified");
+               header('Content-Length: 0');
+       } else {
+               header("Content-Type: application/xml");
+               // dump feed
+               echo $feed;
+       }
+
+} else {
+       // output empty RSS file...
+       // (because site is disabled)
+       
+       echo '<' . '?xml version="1.0" encoding="ISO-8859-1"?' . '>';
+       
+       ?>
+       <rss version="2.0">
+         <channel>
+               <title><?php echo htmlspecialchars($CONF['SiteName'])?></title>
+               <link><?php echo htmlspecialchars($CONF['IndexURL'])?></link>
+               <description></description>
+               <docs>http://backend.userland.com/rss</docs>
+         </channel>
+       </rss>
+       <?php
+}
+
+?>