[Tux4kids-commits] r871 - in tuxmath/trunk: . data/images/icons doc linebreak linebreak/unistr linebreak/uniwidth po src

dbruce-guest at alioth.debian.org dbruce-guest at alioth.debian.org
Fri Feb 6 17:36:45 UTC 2009


Author: dbruce-guest
Date: 2009-02-06 17:36:45 +0000 (Fri, 06 Feb 2009)
New Revision: 871

Added:
   tuxmath/trunk/data/images/icons/tuxmath.svg
   tuxmath/trunk/src/cjk.h
   tuxmath/trunk/src/lbrkprop.h
   tuxmath/trunk/src/linebreak.c
   tuxmath/trunk/src/linebreak.h
   tuxmath/trunk/src/localcharset.h
   tuxmath/trunk/src/streq.h
   tuxmath/trunk/src/u16-mbtouc-aux.c
   tuxmath/trunk/src/u16-mbtouc-aux.c~
   tuxmath/trunk/src/u16-mbtouc-unsafe-aux.c
   tuxmath/trunk/src/u16-mbtouc-unsafe.c
   tuxmath/trunk/src/u16-mbtouc.c
   tuxmath/trunk/src/u16-mbtouc.c~
   tuxmath/trunk/src/u8-mbtouc-aux.c
   tuxmath/trunk/src/u8-mbtouc-unsafe-aux.c
   tuxmath/trunk/src/u8-mbtouc-unsafe.c
   tuxmath/trunk/src/u8-mbtouc.c
   tuxmath/trunk/src/u8-uctomb-aux.c
   tuxmath/trunk/src/u8-uctomb.c
   tuxmath/trunk/src/unistr.h
   tuxmath/trunk/src/unitypes.h
   tuxmath/trunk/src/uniwidth.h
   tuxmath/trunk/src/width.c
   tuxmath/trunk/src/xsize.h
Removed:
   tuxmath/trunk/linebreak/lbrkprop.h
   tuxmath/trunk/linebreak/linebreak.c
   tuxmath/trunk/linebreak/linebreak.h
   tuxmath/trunk/linebreak/localcharset.h
   tuxmath/trunk/linebreak/streq.h
   tuxmath/trunk/linebreak/unistr.h
   tuxmath/trunk/linebreak/unistr/u16-mbtouc-aux.c
   tuxmath/trunk/linebreak/unistr/u16-mbtouc-unsafe-aux.c
   tuxmath/trunk/linebreak/unistr/u16-mbtouc-unsafe.c
   tuxmath/trunk/linebreak/unistr/u16-mbtouc.c
   tuxmath/trunk/linebreak/unistr/u8-mbtouc-aux.c
   tuxmath/trunk/linebreak/unistr/u8-mbtouc-unsafe-aux.c
   tuxmath/trunk/linebreak/unistr/u8-mbtouc-unsafe.c
   tuxmath/trunk/linebreak/unistr/u8-mbtouc.c
   tuxmath/trunk/linebreak/unistr/u8-uctomb-aux.c
   tuxmath/trunk/linebreak/unistr/u8-uctomb.c
   tuxmath/trunk/linebreak/unitypes.h
   tuxmath/trunk/linebreak/uniwidth.h
   tuxmath/trunk/linebreak/uniwidth/cjk.h
   tuxmath/trunk/linebreak/uniwidth/width.c
   tuxmath/trunk/linebreak/xsize.h
Modified:
   tuxmath/trunk/Makefile.am
   tuxmath/trunk/data/images/icons/Makefile.am
   tuxmath/trunk/doc/changelog
   tuxmath/trunk/po/ar.po
   tuxmath/trunk/po/cs.po
   tuxmath/trunk/po/de.po
   tuxmath/trunk/po/en at boldquot.po
   tuxmath/trunk/po/en at quot.po
   tuxmath/trunk/po/en_GB.po
   tuxmath/trunk/po/es.po
   tuxmath/trunk/po/fi.po
   tuxmath/trunk/po/fr.po
   tuxmath/trunk/po/ga.po
   tuxmath/trunk/po/he.po
   tuxmath/trunk/po/hu.po
   tuxmath/trunk/po/it.po
   tuxmath/trunk/po/ja.po
   tuxmath/trunk/po/nb.po
   tuxmath/trunk/po/nl.po
   tuxmath/trunk/po/nn.po
   tuxmath/trunk/po/oc.po
   tuxmath/trunk/po/pl.po
   tuxmath/trunk/po/pt.po
   tuxmath/trunk/po/pt_BR.po
   tuxmath/trunk/po/ru.po
   tuxmath/trunk/po/sk.po
   tuxmath/trunk/po/sv.po
   tuxmath/trunk/po/tr.po
   tuxmath/trunk/po/tuxmath.pot
   tuxmath/trunk/po/zh_CN.po
   tuxmath/trunk/src/Makefile.am
   tuxmath/trunk/src/campaign.c
   tuxmath/trunk/src/globals.h
   tuxmath/trunk/src/linewrap.c
Log:
moved linebreak source files into src



Modified: tuxmath/trunk/Makefile.am
===================================================================
--- tuxmath/trunk/Makefile.am	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/Makefile.am	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,10 +1,10 @@
 ## Top-level Makefile.am for tuxmath:
 ## Process with Automake to create Makefile.in
-SUBDIRS = doc	\
+SUBDIRS = data	\
+	doc	\
 	intl	\
 	po	\
-	src	\
-	data
+	src
 
 ACLOCAL_AMFLAGS = -I m4
 

Modified: tuxmath/trunk/data/images/icons/Makefile.am
===================================================================
--- tuxmath/trunk/data/images/icons/Makefile.am	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/data/images/icons/Makefile.am	2009-02-06 17:36:45 UTC (rev 871)
@@ -6,4 +6,5 @@
 dist_icons_DATA = tuxmath.ico \
   icon.png \
   icon.xpm \
-  tuxmath.icns
+  tuxmath.icns \
+  tuxmath.svg

Added: tuxmath/trunk/data/images/icons/tuxmath.svg
===================================================================
--- tuxmath/trunk/data/images/icons/tuxmath.svg	                        (rev 0)
+++ tuxmath/trunk/data/images/icons/tuxmath.svg	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,1066 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 10.0, SVG Export Plug-In . SVG Version: 3.0.0 Build 76)  -->
+<svg
+   xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="132"
+   height="117"
+   viewBox="0.008 -0.291 132 117"
+   overflow="visible"
+   enable-background="new 0.008 -0.291 132 117"
+   xml:space="preserve"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="tuxmath.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
+   id="metadata283"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+   id="defs281"><inkscape:perspective
+   sodipodi:type="inkscape:persp3d"
+   inkscape:vp_x="0 : 58.5 : 1"
+   inkscape:vp_y="0 : 1000 : 0"
+   inkscape:vp_z="132 : 58.5 : 1"
+   inkscape:persp3d-origin="66 : 39 : 1"
+   id="perspective285" />
+		
+		
+	<linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_1_"
+   id="linearGradient3151"
+   gradientUnits="userSpaceOnUse"
+   x1="33.455101"
+   y1="134.8"
+   x2="33.455101"
+   y2="79.492203" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_2_"
+   id="linearGradient3153"
+   gradientUnits="userSpaceOnUse"
+   x1="34.128399"
+   y1="51.917999"
+   x2="34.128399"
+   y2="78.923302" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_3_"
+   id="linearGradient3155"
+   gradientUnits="userSpaceOnUse"
+   x1="29.4014"
+   y1="90.037102"
+   x2="51.554901"
+   y2="112.191" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_4_"
+   id="linearGradient3157"
+   gradientUnits="userSpaceOnUse"
+   x1="25.8179"
+   y1="86.409203"
+   x2="51.3773"
+   y2="112.146" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_5_"
+   id="linearGradient3159"
+   gradientUnits="userSpaceOnUse"
+   x1="24.374001"
+   y1="66.755898"
+   x2="33.8414"
+   y2="76.223099" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_6_"
+   id="linearGradient3161"
+   gradientUnits="userSpaceOnUse"
+   x1="40.188"
+   y1="67.644501"
+   x2="48.386002"
+   y2="75.842499" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_7_"
+   id="linearGradient3163"
+   gradientUnits="userSpaceOnUse"
+   x1="31.747999"
+   y1="73.683601"
+   x2="31.747999"
+   y2="68.590599" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_8_"
+   id="linearGradient3165"
+   gradientUnits="userSpaceOnUse"
+   x1="35.980999"
+   y1="72.686501"
+   x2="35.980999"
+   y2="69.1763" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_9_"
+   id="linearGradient3167"
+   gradientUnits="userSpaceOnUse"
+   x1="37.716801"
+   y1="78.847702"
+   x2="35.737"
+   y2="77.450104" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_10_"
+   id="linearGradient3169"
+   gradientUnits="userSpaceOnUse"
+   x1="37.429699"
+   y1="78.079102"
+   x2="31.775499"
+   y2="75.251999" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_11_"
+   id="linearGradient3171"
+   gradientUnits="userSpaceOnUse"
+   x1="33.480999"
+   y1="127.388"
+   x2="33.480999"
+   y2="105.1" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_12_"
+   id="linearGradient3173"
+   gradientUnits="userSpaceOnUse"
+   x1="33.829601"
+   y1="100.71"
+   x2="33.829601"
+   y2="110.822" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_13_"
+   id="linearGradient3175"
+   gradientUnits="userSpaceOnUse"
+   x1="49.4258"
+   y1="117.758"
+   x2="49.4258"
+   y2="105.512" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_14_"
+   id="linearGradient3177"
+   gradientUnits="userSpaceOnUse"
+   x1="49.4263"
+   y1="109.792"
+   x2="49.4263"
+   y2="117.86" /><radialGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_15_"
+   id="radialGradient3179"
+   gradientUnits="userSpaceOnUse"
+   gradientTransform="matrix(0.9706,0,0,0.4062,0.2742,524.622)"
+   cx="50.122101"
+   cy="-1005.98"
+   fx="50.122101"
+   fy="-1005.98"
+   r="17.6775" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_16_"
+   id="linearGradient3181"
+   gradientUnits="userSpaceOnUse"
+   x1="49.4263"
+   y1="107.75"
+   x2="49.4263"
+   y2="112.283" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_17_"
+   id="linearGradient3183"
+   gradientUnits="userSpaceOnUse"
+   x1="20.0718"
+   y1="118.006"
+   x2="20.0718"
+   y2="105.762" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_18_"
+   id="linearGradient3185"
+   gradientUnits="userSpaceOnUse"
+   x1="20.0718"
+   y1="110.042"
+   x2="20.0718"
+   y2="118.111" /><radialGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_19_"
+   id="radialGradient3187"
+   gradientUnits="userSpaceOnUse"
+   gradientTransform="matrix(0.9706,0,0,0.4062,0.2742,524.622)"
+   cx="19.8799"
+   cy="-1005.37"
+   fx="19.8799"
+   fy="-1005.37"
+   r="17.6759" /><linearGradient
+   inkscape:collect="always"
+   xlink:href="#XMLID_20_"
+   id="linearGradient3189"
+   gradientUnits="userSpaceOnUse"
+   x1="20.0718"
+   y1="107.999"
+   x2="20.0718"
+   y2="112.532" />
+			
+			
+		</defs><sodipodi:namedview
+   inkscape:window-height="480"
+   inkscape:window-width="640"
+   inkscape:pageshadow="2"
+   inkscape:pageopacity="0.0"
+   guidetolerance="10.0"
+   gridtolerance="10.0"
+   objecttolerance="10.0"
+   borderopacity="1.0"
+   bordercolor="#666666"
+   pagecolor="#ffffff"
+   id="base"
+   showgrid="false"
+   inkscape:zoom="1"
+   inkscape:cx="228.47932"
+   inkscape:cy="47.347533"
+   inkscape:current-layer="svg2"><inkscape:grid
+     type="xygrid"
+     id="grid3344" /></sodipodi:namedview>
+	<g
+   id="g9"
+   transform="matrix(1.8160959,0,0,1.8160959,4,-97.450562)">
+				<path
+   d="M 9.2,79.784 C 9.255,79.73 9.289,79.66 9.3,79.585 C 11.16,65.699 21.745,55.23 33.923,55.23 C 46.277,55.23 56.883,65.878 58.594,79.999 C 58.602,80.079 58.64,80.151 58.697,80.207 C 58.697,80.207 65.106,86.437 66.126,87.43 C 64.797,87.463 58.943,87.609 58.943,87.609 C 58.771,87.614 58.629,87.747 58.608,87.918 C 58.181,91.57 57.158,95.057 55.566,98.278 C 51.135,107.248 42.842,112.82 33.923,112.82 C 25.604,112.82 17.866,108.043 13.223,100.041 C 11.211,96.575 9.902,92.743 9.329,88.652 C 9.306,88.483 9.164,88.356 8.994,88.351 C 8.994,88.351 2.163,88.176 0.821,88.14 C 1.83,87.134 9.2,79.784 9.2,79.784 z"
+   id="path11" />
+				<linearGradient
+   id="XMLID_1_"
+   gradientUnits="userSpaceOnUse"
+   x1="33.455101"
+   y1="134.8"
+   x2="33.455101"
+   y2="79.492203">
+					<stop
+   offset="0"
+   style="stop-color:rgb(255,255,255)"
+   id="stop14" />
+					<stop
+   offset="0.2033"
+   style="stop-color:rgb(194,194,194)"
+   id="stop16" />
+					<stop
+   offset="0.494"
+   style="stop-color:rgb(112,112,112)"
+   id="stop18" />
+					<stop
+   offset="0.733"
+   style="stop-color:rgb(51,51,51)"
+   id="stop20" />
+					<stop
+   offset="0.9078"
+   style="stop-color:rgb(14,14,14)"
+   id="stop22" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(0,0,0)"
+   id="stop24" />
+					<a:midPointStop
+   offset="0"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.435"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#000000" />
+				</linearGradient>
+				<path
+   d="M 58.134,80.79 C 57.944,80.606 57.823,80.361 57.791,80.096 C 56.13,66.384 45.869,56.043 33.922,56.043 C 22.147,56.043 11.906,66.21 10.1,79.692 C 10.066,79.946 9.949,80.182 9.768,80.361 C 9.768,80.361 5.105,85.011 2.733,87.376 C 5.377,87.443 9.014,87.538 9.014,87.538 C 9.578,87.553 10.049,87.975 10.128,88.537 C 10.685,92.524 11.961,96.255 13.919,99.629 C 18.416,107.379 25.894,112.006 33.922,112.006 C 42.532,112.006 50.547,106.607 54.841,97.915 C 56.391,94.776 57.388,91.381 57.805,87.822 C 57.872,87.249 58.348,86.811 58.922,86.796 C 58.922,86.796 61.804,86.724 64.176,86.665 C 61.931,84.479 58.134,80.79 58.134,80.79 z"
+   style="fill:url(#linearGradient3151)"
+   id="path26" />
+				<linearGradient
+   id="XMLID_2_"
+   gradientUnits="userSpaceOnUse"
+   x1="34.128399"
+   y1="51.917999"
+   x2="34.128399"
+   y2="78.923302">
+					<stop
+   offset="0"
+   style="stop-color:rgb(255,255,255)"
+   id="stop29" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(0,0,0)"
+   id="stop31" />
+					<a:midPointStop
+   offset="0"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#000000" />
+				</linearGradient>
+				<path
+   a:adobe-blending-mode="screen"
+   d="M 52.363,69.489 C 52.363,76.967 44.198,83.027 34.127,83.027 C 24.057,83.027 15.893,76.966 15.893,69.489 C 15.893,62.012 24.057,55.952 34.127,55.952 C 44.199,55.952 52.363,62.013 52.363,69.489 z"
+   style="fill:url(#linearGradient3153)"
+   id="path33" />
+				<path
+   d="M 36.005,68.651 C 36.005,69.038 35.726,69.35 35.383,69.35 C 35.039,69.35 34.76,69.037 34.76,68.651 C 34.76,68.267 35.039,67.954 35.383,67.954 C 35.726,67.954 36.005,68.268 36.005,68.651 z"
+   style="fill:#ffffff"
+   id="path35" />
+				<linearGradient
+   id="XMLID_3_"
+   gradientUnits="userSpaceOnUse"
+   x1="29.4014"
+   y1="90.037102"
+   x2="51.554901"
+   y2="112.191">
+					<stop
+   offset="0.0056"
+   style="stop-color:rgb(255,255,255)"
+   id="stop38" />
+					<stop
+   offset="0.2355"
+   style="stop-color:rgb(223,223,223)"
+   id="stop40" />
+					<stop
+   offset="0.5725"
+   style="stop-color:rgb(182,182,182)"
+   id="stop42" />
+					<stop
+   offset="0.839"
+   style="stop-color:rgb(157,157,157)"
+   id="stop44" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(148,148,148)"
+   id="stop46" />
+					<a:midPointStop
+   offset="0.0056"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.4035"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#949494" />
+				</linearGradient>
+				<path
+   d="M 47.723,80.114 C 44.028,76.337 39.335,74.073 34.223,74.073 C 27.903,74.073 22.222,77.531 18.281,83.034 C 14.999,87.613 12.923,93.608 12.694,100.214 C 17.223,108.022 24.935,113.166 33.693,113.166 C 43.101,113.166 51.3,107.229 55.647,98.432 C 55.008,91.041 52.052,84.539 47.723,80.114 z"
+   style="fill:url(#linearGradient3155)"
+   id="path48" />
+				<linearGradient
+   id="XMLID_4_"
+   gradientUnits="userSpaceOnUse"
+   x1="25.8179"
+   y1="86.409203"
+   x2="51.3773"
+   y2="112.146">
+					<stop
+   offset="0.0056"
+   style="stop-color:rgb(255,255,255)"
+   id="stop51" />
+					<stop
+   offset="0.0486"
+   style="stop-color:rgb(247,247,247)"
+   id="stop53" />
+					<stop
+   offset="0.3721"
+   style="stop-color:rgb(191,191,191)"
+   id="stop55" />
+					<stop
+   offset="0.6499"
+   style="stop-color:rgb(150,150,150)"
+   id="stop57" />
+					<stop
+   offset="0.8682"
+   style="stop-color:rgb(124,124,124)"
+   id="stop59" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(115,115,115)"
+   id="stop61" />
+					<a:midPointStop
+   offset="0.0056"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.4035"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#737373" />
+				</linearGradient>
+				<path
+   d="M 47.723,80.114 C 44.028,76.337 39.335,74.073 34.223,74.073 C 27.903,74.073 22.222,77.531 18.281,83.034 C 14.999,87.613 12.923,93.608 12.694,100.214 C 17.223,108.022 24.935,113.166 33.693,113.166 C 43.101,113.166 51.3,107.229 55.647,98.432 C 55.008,91.041 52.052,84.539 47.723,80.114 z"
+   style="fill:url(#linearGradient3157)"
+   id="path63" />
+				<linearGradient
+   id="XMLID_5_"
+   gradientUnits="userSpaceOnUse"
+   x1="24.374001"
+   y1="66.755898"
+   x2="33.8414"
+   y2="76.223099">
+					<stop
+   offset="0.0337"
+   style="stop-color:rgb(255,255,255)"
+   id="stop66" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(148,148,148)"
+   id="stop68" />
+					<a:midPointStop
+   offset="0.0337"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#949494" />
+				</linearGradient>
+				<path
+   d="M 34.222,68.741 C 34.222,73.551 30.701,77.449 26.36,77.449 C 22.019,77.449 18.498,73.551 18.498,68.741 C 18.498,63.932 22.019,60.035 26.36,60.035 C 30.701,60.035 34.222,63.933 34.222,68.741 z"
+   style="fill:url(#linearGradient3159)"
+   id="path70" />
+				<linearGradient
+   id="XMLID_6_"
+   gradientUnits="userSpaceOnUse"
+   x1="40.188"
+   y1="67.644501"
+   x2="48.386002"
+   y2="75.842499">
+					<stop
+   offset="0.0337"
+   style="stop-color:rgb(255,255,255)"
+   id="stop73" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(148,148,148)"
+   id="stop75" />
+					<a:midPointStop
+   offset="0.0337"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#949494" />
+				</linearGradient>
+				<path
+   d="M 49.593,69.364 C 49.593,73.044 46.152,76.028 41.907,76.028 C 37.663,76.028 34.222,73.044 34.222,69.364 C 34.222,65.683 37.662,62.7 41.907,62.7 C 46.151,62.7 49.593,65.684 49.593,69.364 z"
+   style="fill:url(#linearGradient3161)"
+   id="path77" />
+				<linearGradient
+   id="XMLID_7_"
+   gradientUnits="userSpaceOnUse"
+   x1="31.747999"
+   y1="73.683601"
+   x2="31.747999"
+   y2="68.590599">
+					<stop
+   offset="0"
+   style="stop-color:rgb(255,255,255)"
+   id="stop80" />
+					<stop
+   offset="0.2033"
+   style="stop-color:rgb(194,194,194)"
+   id="stop82" />
+					<stop
+   offset="0.494"
+   style="stop-color:rgb(112,112,112)"
+   id="stop84" />
+					<stop
+   offset="0.733"
+   style="stop-color:rgb(51,51,51)"
+   id="stop86" />
+					<stop
+   offset="0.9078"
+   style="stop-color:rgb(14,14,14)"
+   id="stop88" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(0,0,0)"
+   id="stop90" />
+					<a:midPointStop
+   offset="0"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.435"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#000000" />
+				</linearGradient>
+				<path
+   d="M 34.045,69.009 C 34.045,70.432 33.016,71.585 31.748,71.585 C 30.48,71.585 29.451,70.432 29.451,69.009 C 29.451,67.585 30.48,66.432 31.748,66.432 C 33.016,66.432 34.045,67.585 34.045,69.009 z"
+   style="fill:url(#linearGradient3163)"
+   id="path92" />
+				<path
+   d="M 31.863,68.261 C 31.863,68.745 31.513,69.138 31.083,69.138 C 30.65,69.138 30.302,68.745 30.302,68.261 C 30.302,67.777 30.651,67.384 31.083,67.384 C 31.513,67.384 31.863,67.776 31.863,68.261 z"
+   style="fill:#ffffff"
+   id="path94" />
+				<linearGradient
+   id="XMLID_8_"
+   gradientUnits="userSpaceOnUse"
+   x1="35.980999"
+   y1="72.686501"
+   x2="35.980999"
+   y2="69.1763">
+					<stop
+   offset="0"
+   style="stop-color:rgb(255,255,255)"
+   id="stop97" />
+					<stop
+   offset="0.2033"
+   style="stop-color:rgb(194,194,194)"
+   id="stop99" />
+					<stop
+   offset="0.494"
+   style="stop-color:rgb(112,112,112)"
+   id="stop101" />
+					<stop
+   offset="0.733"
+   style="stop-color:rgb(51,51,51)"
+   id="stop103" />
+					<stop
+   offset="0.9078"
+   style="stop-color:rgb(14,14,14)"
+   id="stop105" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(0,0,0)"
+   id="stop107" />
+					<a:midPointStop
+   offset="0"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.435"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#000000" />
+				</linearGradient>
+				<path
+   d="M 37.564,69.465 C 37.564,70.444 36.855,71.24 35.981,71.24 C 35.107,71.24 34.398,70.444 34.398,69.465 C 34.398,68.484 35.107,67.689 35.981,67.689 C 36.855,67.688 37.564,68.483 37.564,69.465 z"
+   style="fill:url(#linearGradient3165)"
+   id="path109" />
+				<path
+   d="M 35.786,69.183 C 35.786,69.538 35.528,69.829 35.21,69.829 C 34.89,69.829 34.633,69.538 34.633,69.183 C 34.633,68.824 34.89,68.535 35.21,68.535 C 35.528,68.534 35.786,68.823 35.786,69.183 z"
+   style="fill:#ffffff"
+   id="path111" />
+				<linearGradient
+   id="XMLID_9_"
+   gradientUnits="userSpaceOnUse"
+   x1="37.716801"
+   y1="78.847702"
+   x2="35.737"
+   y2="77.450104">
+					<stop
+   offset="0.0337"
+   style="stop-color:rgb(255,255,255)"
+   id="stop114" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(128,128,128)"
+   id="stop116" />
+					<a:midPointStop
+   offset="0.0337"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#808080" />
+				</linearGradient>
+				<path
+   a:adobe-blending-mode="multiply"
+   d="M 28.039,75.009 C 28.039,75.009 32.131,74.073 34.55,74.073 C 36.967,74.073 40.874,75.009 40.874,75.009 L 34.55,82.68 L 28.039,75.009 z"
+   style="opacity:0.4;fill:url(#linearGradient3167)"
+   id="path118" />
+				<linearGradient
+   id="XMLID_10_"
+   gradientUnits="userSpaceOnUse"
+   x1="37.429699"
+   y1="78.079102"
+   x2="31.775499"
+   y2="75.251999">
+					<stop
+   offset="0"
+   style="stop-color:rgb(255,139,0)"
+   id="stop121" />
+					<stop
+   offset="0.2022"
+   style="stop-color:rgb(255,194,0)"
+   id="stop123" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(255,255,0)"
+   id="stop125" />
+					<a:midPointStop
+   offset="0"
+   style="stop-color:#FF8B00" />
+					<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FF8B00" />
+					<a:midPointStop
+   offset="0.2022"
+   style="stop-color:#FFC200" />
+					<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFC200" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#FFFF00" />
+				</linearGradient>
+				<path
+   d="M 27.508,74.111 C 27.508,74.111 31.565,73.183 33.962,73.183 C 36.357,73.183 40.23,74.111 40.23,74.111 L 33.962,81.713 L 27.508,74.111 z"
+   style="fill:url(#linearGradient3169)"
+   id="path127" />
+				<linearGradient
+   id="XMLID_11_"
+   gradientUnits="userSpaceOnUse"
+   x1="33.480999"
+   y1="127.388"
+   x2="33.480999"
+   y2="105.1">
+					<stop
+   offset="0"
+   style="stop-color:rgb(255,255,255)"
+   id="stop130" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(0,0,0)"
+   id="stop132" />
+					<a:midPointStop
+   offset="0"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#000000" />
+				</linearGradient>
+				<path
+   a:adobe-blending-mode="screen"
+   d="M 58.923,86.796 C 58.349,86.812 57.873,87.249 57.806,87.822 C 57.389,91.381 56.392,94.776 54.842,97.915 C 50.548,106.606 42.532,112.006 33.923,112.006 C 25.895,112.006 18.417,107.379 13.92,99.629 C 11.962,96.255 10.686,92.525 10.129,88.537 C 10.05,87.974 9.579,87.553 9.015,87.538 C 9.015,87.538 5.377,87.443 2.734,87.376 C 5.106,85.012 9.769,80.361 9.769,80.361 C 9.95,80.182 10.067,79.946 10.101,79.692 C 11.908,66.21 22.148,56.043 33.923,56.043 C 45.869,56.043 56.131,66.384 57.792,80.096 C 57.824,80.362 57.944,80.607 58.135,80.79 C 58.135,80.79 61.931,84.479 64.177,86.665 C 61.805,86.724 58.923,86.796 58.923,86.796 z M 58.938,79.956 C 57.22,65.788 46.678,54.881 33.922,54.881 C 21.292,54.881 10.827,65.573 8.957,79.537 L 0,88.467 L 8.985,88.698 C 9.573,92.908 10.948,96.812 12.922,100.214 C 17.453,108.022 25.164,113.166 33.922,113.166 C 43.33,113.166 51.529,107.229 55.875,98.432 C 57.44,95.263 58.511,91.727 58.952,87.957 L 66.962,87.756 L 58.938,79.956 z"
+   style="fill:url(#linearGradient3171)"
+   id="path134" />
+				<linearGradient
+   id="XMLID_12_"
+   gradientUnits="userSpaceOnUse"
+   x1="33.829601"
+   y1="100.71"
+   x2="33.829601"
+   y2="110.822">
+					<stop
+   offset="0.0337"
+   style="stop-color:rgb(255,255,255)"
+   id="stop137" />
+					<stop
+   offset="1"
+   style="stop-color:rgb(178,178,178)"
+   id="stop139" />
+					<a:midPointStop
+   offset="0.0337"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFFFFF" />
+					<a:midPointStop
+   offset="1"
+   style="stop-color:#B2B2B2" />
+				</linearGradient>
+				<path
+   a:adobe-blending-mode="multiply"
+   d="M 33.468,106.637 C 24.457,106.637 16.656,102.019 12.85,95.287 C 12.579,96.826 12.409,98.415 12.353,100.04 C 16.883,107.848 24.595,112.993 33.352,112.993 C 42.76,112.993 50.958,107.055 55.304,98.257 C 55.183,96.848 54.976,95.47 54.692,94.131 C 51.158,101.486 42.985,106.637 33.468,106.637 z"
+   style="opacity:0.4;fill:url(#linearGradient3173)"
+   id="path141" />
+				<g
+   id="g143">
+					<path
+   d="M 48.325,106.81 C 41.816,106.81 36.539,109.02 36.539,111.749 C 36.539,112.226 36.704,112.687 37.007,113.125 C 41.615,112.267 45.839,110.049 49.38,106.831 C 49.031,106.819 48.68,106.81 48.325,106.81 z"
+   style="opacity:0.2"
+   id="path145" />
+					<path
+   d="M 21.593,106.975 C 20.52,106.975 19.485,107.041 18.506,107.163 C 22.263,110.512 26.836,112.645 31.812,113.079 C 32.232,112.596 32.462,112.072 32.462,111.526 C 32.463,109.012 27.597,106.975 21.593,106.975 z"
+   style="opacity:0.2"
+   id="path147" />
+					<g
+   id="g149">
+						<linearGradient
+   id="XMLID_13_"
+   gradientUnits="userSpaceOnUse"
+   x1="49.4258"
+   y1="117.758"
+   x2="49.4258"
+   y2="105.512">
+							<stop
+   offset="0"
+   style="stop-color:rgb(255,194,0)"
+   id="stop152" />
+							<stop
+   offset="0.1548"
+   style="stop-color:rgb(247,181,0)"
+   id="stop154" />
+							<stop
+   offset="0.716"
+   style="stop-color:rgb(222,136,0)"
+   id="stop156" />
+							<stop
+   offset="1"
+   style="stop-color:rgb(212,119,0)"
+   id="stop158" />
+							<a:midPointStop
+   offset="0"
+   style="stop-color:#FFC200" />
+							<a:midPointStop
+   offset="0.4463"
+   style="stop-color:#FFC200" />
+							<a:midPointStop
+   offset="1"
+   style="stop-color:#D47700" />
+						</linearGradient>
+						<path
+   d="M 37.949,111.906 C 37.949,114.554 43.097,116.711 49.425,116.711 C 55.755,116.711 60.903,114.555 60.903,111.906 C 60.903,109.259 55.755,107.101 49.425,107.101 C 43.097,107.102 37.949,109.259 37.949,111.906 z M 38.992,111.906 C 38.992,109.498 43.672,107.539 49.425,107.539 C 55.179,107.539 59.859,109.498 59.859,111.906 C 59.859,114.315 55.18,116.273 49.425,116.273 C 43.672,116.273 38.992,114.315 38.992,111.906 z"
+   style="fill:url(#linearGradient3175)"
+   id="path160" />
+						<linearGradient
+   id="XMLID_14_"
+   gradientUnits="userSpaceOnUse"
+   x1="49.4263"
+   y1="109.792"
+   x2="49.4263"
+   y2="117.86">
+							<stop
+   offset="0"
+   style="stop-color:rgb(255,167,0)"
+   id="stop163" />
+							<stop
+   offset="0.691"
+   style="stop-color:rgb(255,255,0)"
+   id="stop165" />
+							<stop
+   offset="0.792"
+   style="stop-color:rgb(255,252,0)"
+   id="stop167" />
+							<stop
+   offset="0.8546"
+   style="stop-color:rgb(255,244,0)"
+   id="stop169" />
+							<stop
+   offset="0.9067"
+   style="stop-color:rgb(255,229,0)"
+   id="stop171" />
+							<stop
+   offset="0.953"
+   style="stop-color:rgb(255,209,0)"
+   id="stop173" />
+							<stop
+   offset="0.9952"
+   style="stop-color:rgb(255,183,0)"
+   id="stop175" />
+							<stop
+   offset="1"
+   style="stop-color:rgb(255,179,0)"
+   id="stop177" />
+							<a:midPointStop
+   offset="0"
+   style="stop-color:#FFA700" />
+							<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFA700" />
+							<a:midPointStop
+   offset="0.691"
+   style="stop-color:#FFFF00" />
+							<a:midPointStop
+   offset="0.7952"
+   style="stop-color:#FFFF00" />
+							<a:midPointStop
+   offset="1"
+   style="stop-color:#FFB300" />
+						</linearGradient>
+						<path
+   d="M 60.382,111.906 C 60.382,114.439 55.476,116.491 49.425,116.491 C 43.374,116.491 38.47,114.439 38.47,111.906 C 38.47,109.374 43.374,107.321 49.425,107.321 C 55.476,107.321 60.382,109.374 60.382,111.906 z"
+   style="fill:url(#linearGradient3177)"
+   id="path179" />
+						<radialGradient
+   id="XMLID_15_"
+   cx="50.122101"
+   cy="-1005.98"
+   r="17.6775"
+   fx="50.122101"
+   fy="-1005.98"
+   gradientTransform="matrix(0.9706,0,0,0.4062,0.2742,524.622)"
+   gradientUnits="userSpaceOnUse">
+							<stop
+   offset="0"
+   style="stop-color:rgb(255,255,0)"
+   id="stop182" />
+							<stop
+   offset="0.1643"
+   style="stop-color:rgb(255,241,0)"
+   id="stop184" />
+							<stop
+   offset="0.7192"
+   style="stop-color:rgb(255,196,0)"
+   id="stop186" />
+							<stop
+   offset="1"
+   style="stop-color:rgb(255,179,0)"
+   id="stop188" />
+							<a:midPointStop
+   offset="0"
+   style="stop-color:#FFFF00" />
+							<a:midPointStop
+   offset="0.4463"
+   style="stop-color:#FFFF00" />
+							<a:midPointStop
+   offset="1"
+   style="stop-color:#FFB300" />
+						</radialGradient>
+						<path
+   d="M 59.397,112.671 C 59.397,114.576 54.933,116.121 49.425,116.121 C 43.918,116.121 39.454,114.576 39.454,112.671 C 39.454,110.767 43.918,109.222 49.425,109.222 C 54.933,109.222 59.397,110.767 59.397,112.671 z"
+   style="fill:url(#radialGradient3179)"
+   id="path190" />
+						<linearGradient
+   id="XMLID_16_"
+   gradientUnits="userSpaceOnUse"
+   x1="49.4263"
+   y1="107.75"
+   x2="49.4263"
+   y2="112.283">
+							<stop
+   offset="9.77011%"
+   style="stop-color:rgb(255,255,255)"
+   id="stop193" />
+							<stop
+   offset="100%"
+   style="stop-opacity:0;stop-color:rgb(255,255,255)"
+   id="stop195" />
+						</linearGradient>
+						<path
+   a:adobe-blending-mode="screen"
+   d="M 58.592,110.335 C 58.592,111.863 54.488,113.105 49.425,113.105 C 44.363,113.105 40.26,111.864 40.26,110.335 C 40.26,108.806 44.363,107.567 49.425,107.567 C 54.488,107.567 58.592,108.807 58.592,110.335 z"
+   style="fill:url(#linearGradient3181)"
+   id="path197" />
+					</g>
+					<g
+   id="g199">
+						<linearGradient
+   id="XMLID_17_"
+   gradientUnits="userSpaceOnUse"
+   x1="20.0718"
+   y1="118.006"
+   x2="20.0718"
+   y2="105.762">
+							<stop
+   offset="0"
+   style="stop-color:rgb(255,194,0)"
+   id="stop202" />
+							<stop
+   offset="0.1548"
+   style="stop-color:rgb(247,181,0)"
+   id="stop204" />
+							<stop
+   offset="0.716"
+   style="stop-color:rgb(222,136,0)"
+   id="stop206" />
+							<stop
+   offset="1"
+   style="stop-color:rgb(212,119,0)"
+   id="stop208" />
+							<a:midPointStop
+   offset="0"
+   style="stop-color:#FFC200" />
+							<a:midPointStop
+   offset="0.4463"
+   style="stop-color:#FFC200" />
+							<a:midPointStop
+   offset="1"
+   style="stop-color:#D47700" />
+						</linearGradient>
+						<path
+   d="M 8.595,112.155 C 8.595,114.805 13.743,116.96 20.072,116.96 C 26.401,116.96 31.55,114.806 31.55,112.155 C 31.55,109.508 26.401,107.352 20.072,107.352 C 13.743,107.352 8.595,109.508 8.595,112.155 z M 9.637,112.155 C 9.637,109.747 14.319,107.788 20.072,107.788 C 25.825,107.788 30.505,109.747 30.505,112.155 C 30.505,114.563 25.826,116.523 20.072,116.523 C 14.319,116.523 9.637,114.563 9.637,112.155 z"
+   style="fill:url(#linearGradient3183)"
+   id="path210" />
+						<linearGradient
+   id="XMLID_18_"
+   gradientUnits="userSpaceOnUse"
+   x1="20.0718"
+   y1="110.042"
+   x2="20.0718"
+   y2="118.111">
+							<stop
+   offset="0"
+   style="stop-color:rgb(255,167,0)"
+   id="stop213" />
+							<stop
+   offset="0.691"
+   style="stop-color:rgb(255,255,0)"
+   id="stop215" />
+							<stop
+   offset="0.792"
+   style="stop-color:rgb(255,252,0)"
+   id="stop217" />
+							<stop
+   offset="0.8546"
+   style="stop-color:rgb(255,244,0)"
+   id="stop219" />
+							<stop
+   offset="0.9067"
+   style="stop-color:rgb(255,229,0)"
+   id="stop221" />
+							<stop
+   offset="0.953"
+   style="stop-color:rgb(255,209,0)"
+   id="stop223" />
+							<stop
+   offset="0.9952"
+   style="stop-color:rgb(255,183,0)"
+   id="stop225" />
+							<stop
+   offset="1"
+   style="stop-color:rgb(255,179,0)"
+   id="stop227" />
+							<a:midPointStop
+   offset="0"
+   style="stop-color:#FFA700" />
+							<a:midPointStop
+   offset="0.5"
+   style="stop-color:#FFA700" />
+							<a:midPointStop
+   offset="0.691"
+   style="stop-color:#FFFF00" />
+							<a:midPointStop
+   offset="0.7952"
+   style="stop-color:#FFFF00" />
+							<a:midPointStop
+   offset="1"
+   style="stop-color:#FFB300" />
+						</linearGradient>
+						<path
+   d="M 31.028,112.155 C 31.028,114.689 26.123,116.743 20.072,116.743 C 14.02,116.743 9.116,114.689 9.116,112.155 C 9.116,109.624 14.02,107.571 20.072,107.571 C 26.123,107.571 31.028,109.624 31.028,112.155 z"
+   style="fill:url(#linearGradient3185)"
+   id="path229" />
+						<radialGradient
+   id="XMLID_19_"
+   cx="19.8799"
+   cy="-1005.37"
+   r="17.6759"
+   fx="19.8799"
+   fy="-1005.37"
+   gradientTransform="matrix(0.9706,0,0,0.4062,0.2742,524.622)"
+   gradientUnits="userSpaceOnUse">
+							<stop
+   offset="0"
+   style="stop-color:rgb(255,255,0)"
+   id="stop232" />
+							<stop
+   offset="0.1643"
+   style="stop-color:rgb(255,241,0)"
+   id="stop234" />
+							<stop
+   offset="0.7192"
+   style="stop-color:rgb(255,196,0)"
+   id="stop236" />
+							<stop
+   offset="1"
+   style="stop-color:rgb(255,179,0)"
+   id="stop238" />
+							<a:midPointStop
+   offset="0"
+   style="stop-color:#FFFF00" />
+							<a:midPointStop
+   offset="0.4463"
+   style="stop-color:#FFFF00" />
+							<a:midPointStop
+   offset="1"
+   style="stop-color:#FFB300" />
+						</radialGradient>
+						<path
+   d="M 30.043,112.92 C 30.043,114.826 25.579,116.371 20.072,116.371 C 14.565,116.371 10.101,114.826 10.101,112.92 C 10.101,111.017 14.565,109.472 20.072,109.472 C 25.579,109.472 30.043,111.017 30.043,112.92 z"
+   style="fill:url(#radialGradient3187)"
+   id="path240" />
+						<linearGradient
+   id="XMLID_20_"
+   gradientUnits="userSpaceOnUse"
+   x1="20.0718"
+   y1="107.999"
+   x2="20.0718"
+   y2="112.532">
+							<stop
+   offset="10.9195%"
+   style="stop-color:rgb(255,255,255)"
+   id="stop243" />
+							<stop
+   offset="100%"
+   style="stop-opacity:0;stop-color:rgb(255,255,255)"
+   id="stop245" />
+						</linearGradient>
+						<path
+   a:adobe-blending-mode="screen"
+   d="M 29.238,110.584 C 29.238,112.113 25.134,113.354 20.071,113.354 C 15.008,113.354 10.904,112.114 10.904,110.584 C 10.904,109.056 15.008,107.816 20.071,107.816 C 25.134,107.816 29.238,109.056 29.238,110.584 z"
+   style="fill:url(#linearGradient3189)"
+   id="path247" />
+					</g>
+				</g>
+				<path
+   d="M 58.257,80.14 L 53.519,87.286 L 58.257,87.112 L 58.257,80.14 z"
+   id="path249" />
+			</g>
+<path
+   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+   id="path3924"
+   d="M 40.671773,71.969328 C 41.905218,71.721478 43.175578,71.644648 44.430337,71.540077 C 49.503727,71.190685 54.589443,71.088307 59.671561,70.942659 C 60.394015,70.92064 61.116464,70.89862 61.838919,70.8766 L 60.293152,72.003846 C 59.597102,72.006908 58.901046,72.00997 58.204991,72.013033 C 53.053005,72.087429 47.892547,72.22499 42.765899,72.774464 C 41.414487,72.926847 40.069232,73.111331 38.737341,73.374778 L 40.671773,71.969328 z" /><path
+   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+   id="path3926"
+   d="M 52.815851,50.979956 C 54.821217,49.894393 53.496851,50.730117 51.923357,52.171788 C 50.02155,54.051911 48.58631,56.268364 47.629107,58.754935 C 46.817087,60.955697 46.933511,63.048757 47.685679,65.228416 C 48.410358,66.873548 49.450395,68.012472 51.314534,67.94777 C 53.395432,67.264213 53.522501,67.31769 54.519303,64.27802 C 54.79471,61.862169 53.449064,59.998139 51.628786,58.584205 C 50.142422,57.559139 48.514138,58.877454 51.634307,57.1384 C 51.594158,57.174169 51.554015,57.209938 51.513866,57.245708 L 49.348738,58.172845 C 49.381578,58.115814 49.414423,58.058783 49.447269,58.001752 C 51.394219,56.87295 51.79475,56.16538 53.498758,57.413207 C 55.279892,58.963418 56.651812,60.904927 56.42918,63.376821 C 55.481142,66.546441 52.725321,68.499748 49.533241,69.243282 C 47.578641,69.198887 46.543314,68.010138 45.792111,66.272859 C 45.039932,64.033484 44.883722,61.906425 45.71301,59.645332 C 46.649245,57.137419 48.093593,54.919453 49.948061,52.982734 C 51.372513,51.61022 52.892375,50.293902 54.750283,49.574509 L 52.815851,50.979956 z" /><path
+   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+   id="path3930"
+   d="M 45.008,76.709 C 45.575863,75.448548 47.18433,74.971249 48.489669,75.020739 C 51.206549,75.445819 53.678762,76.936342 55.873172,78.530129 C 57.573627,79.764681 58.699592,81.645968 56.764485,83.161233 C 54.269386,84.859362 52.277905,84.816796 49.54122,84.214141 C 46.931962,83.437396 51.046583,82.793361 52.330942,83.453739 C 54.337409,84.524245 56.266252,85.759772 57.959421,87.282863 C 59.112812,88.416829 59.495297,89.605091 58.144429,90.683019 C 54.925763,92.772111 51.778458,92.038852 48.252872,91.344084 C 47.870966,91.255688 47.489048,91.167298 47.107142,91.078908 L 48.863193,89.866925 C 49.22875,89.963186 49.594308,90.059447 49.959865,90.155708 C 51.653766,90.514643 58.904366,90.353917 56.064031,91.50703 C 57.456057,90.587269 57.173028,89.589736 56.092734,88.436027 C 54.463117,86.865932 52.555958,85.618232 50.506782,84.66011 C 48.176983,83.657129 50.079273,82.54543 51.383454,82.938913 C 52.685342,83.258136 56.996027,82.798173 54.711802,83.969865 C 56.741638,82.709721 55.72577,80.856415 54.128674,79.636085 C 51.945182,78.017675 49.450509,76.544675 46.681063,76.341558 C 44.510334,76.527214 45.456255,76.919982 47.138478,75.623468 L 45.008,76.709 z" /><path
+   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+   id="path3932"
+   d="M 63.353509,69.117757 C 64.069614,68.334202 65.158341,68.038609 66.058177,67.546006 C 66.976655,67.344437 67.928132,67.481014 68.851071,67.597311 C 70.046364,67.727738 71.239592,67.862287 72.428973,68.038431 C 73.807266,68.271412 73.539417,67.931086 73.19689,68.220294 L 73.509375,68.21604 C 71.660524,69.402635 71.998609,69.658659 70.534848,69.367465 C 69.377945,69.157713 68.214969,68.991033 67.043533,68.883243 C 66.098565,68.812332 65.12011,68.682892 64.20528,68.998748 C 64.650035,68.72185 64.407394,68.751304 64.045099,69.129755 L 63.353509,69.117757 z"
+   sodipodi:nodetypes="ccccccccccc" /><path
+   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+   id="path3934"
+   d="M 65.44179,74.366018 C 66.530517,74.436158 67.62178,74.335919 68.708935,74.27365 C 69.91938,74.221959 71.123867,74.099684 72.328382,73.975282 L 70.472131,75.349598 C 69.297153,75.442057 68.122124,75.527961 66.944082,75.57202 C 65.799913,75.642932 64.657122,75.739471 63.510853,75.768923 L 65.44179,74.366018 z" /><path
+   style="opacity:0.13934427999999999;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#111111;stroke-width:1.50000011999999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+   id="path4001"
+   d="M 74.324771,65.663258 C 74.53026,65.087481 75.035246,64.665845 75.530795,64.208818 C 79.375989,61.029341 82.378821,61.212434 85.618796,61.512766 C 88.504762,62.230825 92.487791,62.425001 93.058576,65.594813 C 92.342919,69.241053 87.089599,71.772635 83.960022,73.625373 C 81.493155,75.120664 77.296391,76.73041 80.033871,78.332203 C 83.605791,79.482438 87.929181,79.377403 92.183549,79.243313 L 90.08359,80.599289 C 85.849152,80.592937 81.521835,80.672395 77.804368,79.689924 C 74.620216,78.055839 79.117078,76.079627 81.889032,74.499095 C 84.886524,72.735696 89.893082,70.344687 90.75887,66.869364 C 90.375738,63.674456 86.418263,62.784431 83.563225,62.823634 C 78.989742,62.886433 78.721326,63.444877 76.919513,64.339433 C 74.789114,65.397121 74.324771,65.663258 74.324771,65.663258 z"
+   sodipodi:nodetypes="cccccccccccssc" /><path
+   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+   id="path3958"
+   d="M 74.324771,65.663258 C 74.53026,65.087481 75.035246,64.665845 75.530795,64.208818 C 79.375989,61.029341 82.378821,61.212434 85.618796,61.512766 C 88.504762,62.230825 92.487791,62.425001 93.058576,65.594813 C 92.342919,69.241053 87.089599,71.772635 83.960022,73.625373 C 81.493155,75.120664 77.296391,76.73041 80.033871,78.332203 C 83.605791,79.482438 87.929181,79.377403 92.183549,79.243313 L 90.08359,80.599289 C 85.849152,80.592937 81.521835,80.672395 77.804368,79.689924 C 74.620216,78.055839 79.117078,76.079627 81.889032,74.499095 C 84.886524,72.735696 89.893082,70.344687 90.75887,66.869364 C 90.375738,63.674456 86.368683,62.651081 83.563225,62.823634 C 78.797458,63.116758 78.746777,63.478252 76.919513,64.339433 C 74.759946,65.357226 74.324771,65.663258 74.324771,65.663258 z"
+   sodipodi:nodetypes="cccccccccccssc" /><path
+   d="M 40.671773,71.969328 C 41.905218,71.721478 43.175578,71.644648 44.430337,71.540077 C 49.503727,71.190685 54.589443,71.088307 59.671561,70.942659 C 60.394015,70.92064 61.116464,70.89862 61.838919,70.8766 L 60.293152,72.003846 C 59.597102,72.006908 58.901046,72.00997 58.204991,72.013033 C 53.053005,72.087429 47.892547,72.22499 42.765899,72.774464 C 41.414487,72.926847 40.069232,73.111331 38.737341,73.374778 L 40.671773,71.969328 z"
+   id="path3979"
+   style="opacity:0.13934427999999999;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+   d="M 52.815851,50.979956 C 54.821217,49.894393 53.496851,50.730117 51.923357,52.171788 C 50.02155,54.051911 48.58631,56.268364 47.629107,58.754935 C 46.817087,60.955697 46.933511,63.048757 47.685679,65.228416 C 48.410358,66.873548 49.450395,68.012472 51.314534,67.94777 C 53.395432,67.264213 53.522501,67.31769 54.519303,64.27802 C 54.79471,61.862169 53.449064,59.998139 51.628786,58.584205 C 50.142422,57.559139 48.514138,58.877454 51.634307,57.1384 C 51.594158,57.174169 51.554015,57.209938 51.513866,57.245708 L 49.348738,58.172845 C 49.381578,58.115814 49.414423,58.058783 49.447269,58.001752 C 51.394219,56.87295 51.79475,56.16538 53.498758,57.413207 C 55.279892,58.963418 56.651812,60.904927 56.42918,63.376821 C 55.481142,66.546441 52.725321,68.499748 49.533241,69.243282 C 47.578641,69.198887 46.543314,68.010138 45.792111,66.272859 C 45.039932,64.033484 44.883722,61.906425 45.71301,59.645332 C 46.649245,57.137419 48.093593,54.919453 49.948061,52.982734 C 51.372513,51.61022 52.892375,50.293902 54.750283,49.574509 L 52.815851,50.979956 z"
+   id="path3981"
+   style="opacity:0.13934427999999999;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+   d="M 45.008,76.709 C 45.575863,75.448548 47.18433,74.971249 48.489669,75.020739 C 51.206549,75.445819 53.678762,76.936342 55.873172,78.530129 C 57.573627,79.764681 58.699592,81.645968 56.764485,83.161233 C 54.269386,84.859362 52.277905,84.816796 49.54122,84.214141 C 46.931962,83.437396 51.046583,82.793361 52.330942,83.453739 C 54.337409,84.524245 56.266252,85.759772 57.959421,87.282863 C 59.112812,88.416829 59.495297,89.605091 58.144429,90.683019 C 54.925763,92.772111 51.778458,92.038852 48.252872,91.344084 C 47.870966,91.255688 47.489048,91.167298 47.107142,91.078908 L 48.863193,89.866925 C 49.22875,89.963186 49.594308,90.059447 49.959865,90.155708 C 51.653766,90.514643 58.904366,90.353917 56.064031,91.50703 C 57.456057,90.587269 57.173028,89.589736 56.092734,88.436027 C 54.463117,86.865932 52.555958,85.618232 50.506782,84.66011 C 48.176983,83.657129 50.079273,82.54543 51.383454,82.938913 C 52.685342,83.258136 56.996027,82.798173 54.711802,83.969865 C 56.741638,82.709721 55.72577,80.856415 54.128674,79.636085 C 51.945182,78.017675 49.450509,76.544675 46.681063,76.341558 C 44.510334,76.527214 45.456255,76.919982 47.138478,75.623468 L 45.008,76.709 z"
+   id="path3983"
+   style="opacity:0.13934428;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+   d="M 63.353509,69.117757 C 64.069614,68.334202 65.158341,68.038609 66.058177,67.546006 C 66.976655,67.344437 67.928132,67.481014 68.851071,67.597311 C 70.046364,67.727738 71.239592,67.862287 72.428973,68.038431 C 73.807266,68.271412 74.297333,67.510022 71.386313,69.315062 L 73.509375,68.21604 C 71.660524,69.402635 71.998609,69.658659 70.534848,69.367465 C 69.377945,69.157713 68.214969,68.991033 67.043533,68.883243 C 66.098565,68.812332 65.12011,68.682892 64.20528,68.998748 C 64.650035,68.72185 65.923226,67.824962 65.560931,68.203413 L 63.353509,69.117757 z"
+   id="path3985"
+   style="opacity:0.13934428;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+   d="M 65.44179,74.366018 C 66.530517,74.436158 67.62178,74.335919 68.708935,74.27365 C 69.91938,74.221959 71.123867,74.099684 72.328382,73.975282 L 70.472131,75.349598 C 69.297153,75.442057 68.122124,75.527961 66.944082,75.57202 C 65.799913,75.642932 64.657122,75.739471 63.510853,75.768923 L 65.44179,74.366018 z"
+   id="path3987"
+   style="opacity:0.13934427999999999;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000000999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+   d="M 74.324771,65.663258 C 74.53026,65.087481 75.035246,64.665845 75.530795,64.208818 C 79.375989,61.029341 82.378821,61.212434 85.618796,61.512766 C 88.504762,62.230825 92.487791,62.425001 93.058576,65.594813 C 92.342919,69.241053 87.089599,71.772635 83.960022,73.625373 C 81.493155,75.120664 77.296391,76.73041 80.033871,78.332203 C 83.605791,79.482438 87.929181,79.377403 92.183549,79.243313 L 90.08359,80.599289 C 85.849152,80.592937 81.521835,80.672395 77.804368,79.689924 C 74.620216,78.055839 79.117078,76.079627 81.889032,74.499095 C 84.886524,72.735696 89.893082,70.344687 90.75887,66.869364 C 90.375738,63.674456 86.469835,62.861079 83.607528,62.882707 C 78.498296,62.921311 78.456564,63.713141 76.963816,64.398505 C 74.795861,65.393876 74.324771,65.663258 74.324771,65.663258 z"
+   id="path3989"
+   style="opacity:0.13934428;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+   sodipodi:nodetypes="cccccccccccssc" /><path
+   style="opacity:0.13934428;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+   id="path3991"
+   d="M 40.671773,71.969328 C 41.905218,71.721478 43.175578,71.644648 44.430337,71.540077 C 49.503727,71.190685 54.589443,71.088307 59.671561,70.942659 C 60.394015,70.92064 61.116464,70.89862 61.838919,70.8766 L 60.293152,72.003846 C 59.597102,72.006908 58.901046,72.00997 58.204991,72.013033 C 53.053005,72.087429 47.892547,72.22499 42.765899,72.774464 C 41.414487,72.926847 40.069232,73.111331 38.737341,73.374778 L 40.671773,71.969328 z" /><path
+   style="opacity:0.13934428;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+   id="path3993"
+   d="M 52.815851,50.979956 C 54.821217,49.894393 53.496851,50.730117 51.923357,52.171788 C 50.02155,54.051911 48.58631,56.268364 47.629107,58.754935 C 46.817087,60.955697 46.933511,63.048757 47.685679,65.228416 C 48.410358,66.873548 49.450395,68.012472 51.314534,67.94777 C 53.395432,67.264213 53.522501,67.31769 54.519303,64.27802 C 54.79471,61.862169 53.449064,59.998139 51.628786,58.584205 C 50.142422,57.559139 48.514138,58.877454 51.634307,57.1384 C 51.594158,57.174169 51.554015,57.209938 51.513866,57.245708 L 49.348738,58.172845 C 49.381578,58.115814 49.414423,58.058783 49.447269,58.001752 C 51.394219,56.87295 51.79475,56.16538 53.498758,57.413207 C 55.279892,58.963418 56.651812,60.904927 56.42918,63.376821 C 55.481142,66.546441 52.725321,68.499748 49.533241,69.243282 C 47.578641,69.198887 46.543314,68.010138 45.792111,66.272859 C 45.039932,64.033484 44.883722,61.906425 45.71301,59.645332 C 46.649245,57.137419 48.093593,54.919453 49.948061,52.982734 C 51.372513,51.61022 52.892375,50.293902 54.750283,49.574509 L 52.815851,50.979956 z" /><path
+   style="opacity:0.13934428;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+   id="path3997"
+   d="M 63.353509,69.117757 C 64.069614,68.334202 65.158341,68.038609 66.058177,67.546006 C 66.976655,67.344437 67.928132,67.481014 68.851071,67.597311 C 70.046364,67.727738 71.239592,67.862287 72.428973,68.038431 C 73.807266,68.271412 74.297333,67.510022 71.386313,69.315062 L 73.509375,68.21604 C 71.660524,69.402635 71.998609,69.658659 70.534848,69.367465 C 69.377945,69.157713 68.214969,68.991033 67.043533,68.883243 C 66.098565,68.812332 65.12011,68.682892 64.20528,68.998748 C 64.650035,68.72185 65.923226,67.824962 65.560931,68.203413 L 63.353509,69.117757 z" /><path
+   style="opacity:0.13934428;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+   id="path3999"
+   d="M 65.44179,74.366018 C 66.530517,74.436158 67.62178,74.335919 68.708935,74.27365 C 69.91938,74.221959 71.123867,74.099684 72.328382,73.975282 L 70.472131,75.349598 C 69.297153,75.442057 68.122124,75.527961 66.944082,75.57202 C 65.799913,75.642932 64.657122,75.739471 63.510853,75.768923 L 65.44179,74.366018 z" /></svg>

Modified: tuxmath/trunk/doc/changelog
===================================================================
--- tuxmath/trunk/doc/changelog	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/doc/changelog	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,3 +1,10 @@
+2009.Feb.06 (svn.debian.org/tux4kids - revision 871)
+	Moved linewrapping source files into main src directory and
+	adjusted autotools files accordingly. Note - plan to combine most of
+	the libgettextpo-derived files into one larger file to reduce clutter.
+
+	David Bruce <davidstuartbruce at gmail.com>
+	
 2009.Feb.04 (svn.debian.org/tux4kids - revision 869)
 	Added algorithmic linewrapping to the code.  This should make life
 	easier for the translators.

Deleted: tuxmath/trunk/linebreak/lbrkprop.h
===================================================================
--- tuxmath/trunk/linebreak/lbrkprop.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/lbrkprop.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,1895 +0,0 @@
-/* Line breaking properties of Unicode characters.  */
-/* Generated automatically by gen-lbrkprop for Unicode 3.1.0.  */
-
-/* Copyright (C) 2000-2004 Free Software Foundation, Inc.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#define lbrkprop_header_0 16
-#define lbrkprop_header_1 15
-#define lbrkprop_header_2 7
-#define lbrkprop_header_3 511
-#define lbrkprop_header_4 127
-static const
-struct
-  {
-    int level1[15];
-    int level2[4 << 9];
-    unsigned char level3[100 << 7];
-  }
-lbrkprop =
-{
-  {     0,   512,  1024,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,  1536 },
-  {
-        0,   128,   256,   384,   512,   640,   768,   896,
-     1024,  1152,  1280,  1408,  1536,  1664,  1792,  1920,
-       -1,    -1,  2048,  2176,  2304,  2432,  2560,  2688,
-     2816,  2944,  3072,  3200,  3328,  3456,  3584,  3712,
-     3840,  3968,  4096,  4224,  4352,  4480,  4608,  4736,
-     4864,  4992,  4992,  4992,  5120,  5248,    -1,  5376,
-     5504,  5632,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,  4992,  5760,  5888,  6016,
-     6144,  6272,  6400,  6528,  6656,  6784,  6912,  7040,
-     7168,  7296,  7424,  7552,  7680,    -1,  7808,  7936,
-     4992,  4992,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,  8064,  8192,  8320,
-     8448,  8576,  8704,  8832,  8960,  9088,  9216,  9344,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  9472,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  9600,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  9728,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  9856,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,  8192,  8192,  9984,    -1, 10112, 10240,
-     4992,  4992, 10368, 10496, 10624, 10752, 10880, 11008,
-       -1,    -1,    -1,    -1,    -1,    -1, 11136,    -1,
-    11264,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     4992, 11392, 11520, 11648,    -1,    -1,    -1,    -1,
-    11776, 11904, 12032,  4992,  4992, 12160,  4992, 12288,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  8192,  8192,  8192,  8192, 12416,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     8192,  8192,  8192,  8192, 12544,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    12672,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
-  },
-  {
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_BA, LBP_BK, LBP_CM, LBP_BK, LBP_BK, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_SP, LBP_EX, LBP_QU, LBP_AL, LBP_PR, LBP_PO, LBP_AL, LBP_QU,
-    LBP_OP, LBP_CL, LBP_AL, LBP_PR, LBP_IS, LBP_HY, LBP_IS, LBP_SY,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_IS, LBP_IS, LBP_AL, LBP_AL, LBP_AL, LBP_EX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_PR, LBP_CL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_BA, LBP_CL, LBP_AL, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BK, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_GL, LBP_AI, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_AL, LBP_AI,
-    LBP_AI, LBP_AL, LBP_AI, LBP_QU, LBP_AL, LBP_BA, LBP_AL, LBP_AL,
-    LBP_PO, LBP_PR, LBP_AI, LBP_AI, LBP_BB, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_QU, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
-    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
-    LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL,
-    LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
-    LBP_BB, LBP_AI, LBP_AI, LBP_AI, LBP_BB, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_XX, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX,
-    LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
-    LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_IS, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM,
-    LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM,
-    LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_CM,
-    LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
-    LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM,
-    LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
-    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_AL, LBP_AL, LBP_PR, LBP_PR, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL,
-    LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
-    LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM,
-    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
-    LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
-    LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_CM, LBP_SA, LBP_SA, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_PR,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NS, LBP_NS, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA,
-    LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_SA,
-    LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_CM, LBP_SA, LBP_SA, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_SA, LBP_XX, LBP_XX,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_GL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_CM,
-    LBP_AL, LBP_CM, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_CM, LBP_CM,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
-    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_NS, LBP_BA, LBP_NS, LBP_NS,
-    LBP_NS, LBP_NS, LBP_NS, LBP_PR, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BB, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_GL,
-    LBP_BA, LBP_BA, LBP_BA, LBP_ZW, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_BA, LBP_GL, LBP_BA, LBP_BA, LBP_B2, LBP_AI, LBP_AI, LBP_AL,
-    LBP_QU, LBP_QU, LBP_OP, LBP_QU, LBP_QU, LBP_QU, LBP_OP, LBP_QU,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_IN, LBP_IN, LBP_IN, LBP_BA,
-    LBP_BK, LBP_BK, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL,
-    LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO,
-    LBP_AL, LBP_QU, LBP_QU, LBP_AI, LBP_NS, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NS, LBP_OP, LBP_CL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AI,
-    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PO,
-    LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_PO, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_PR, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
-    LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
-    LBP_AL, LBP_AI, LBP_PR, LBP_PR, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL,
-    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI,
-    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AI,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_CL, LBP_CL, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID,
-    LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL,
-    LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL,
-    LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_NS, LBP_OP, LBP_CL, LBP_CL,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_ID, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID,
-    LBP_XX, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS,
-    LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_XX,
-    LBP_XX, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS,
-    LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP,
-    LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP,
-    LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_CL, LBP_ID, LBP_CL, LBP_XX, LBP_NS, LBP_NS, LBP_EX, LBP_EX,
-    LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
-    LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_GL,
-    LBP_XX, LBP_EX, LBP_ID, LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_ID,
-    LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_CL, LBP_ID, LBP_CL, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_EX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_XX,
-    LBP_XX, LBP_CL, LBP_OP, LBP_CL, LBP_CL, LBP_NS, LBP_AL, LBP_NS,
-    LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS,
-    LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NS, LBP_NS,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_PO, LBP_PR, LBP_ID, LBP_ID, LBP_ID, LBP_PR, LBP_PR, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CB, LBP_AI, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM
-  }
-};

Deleted: tuxmath/trunk/linebreak/linebreak.c
===================================================================
--- tuxmath/trunk/linebreak/linebreak.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/linebreak.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,1335 +0,0 @@
-/* linebreak.c - line breaking of Unicode strings
-   Copyright (C) 2001-2003, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <haible at clisp.cons.org>, 2001.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "linebreak.h"
-
-#include <stdlib.h>
-#include <string.h>
-//#include "c-ctype.h"
-#include "ctype.h"
-#include "xsize.h"
-#include "unistr.h"
-#include "uniwidth.h"
-#include "uniwidth/cjk.h"
-#include "streq.h"
-
-
-static int
-is_utf8_encoding (const char *encoding)
-{
-  if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0))
-    return 1;
-  return 0;
-}
-
-
-/* Determine the line break points in S, and store the result at p[0..n-1].  */
-/* We don't support line breaking of complex-context dependent characters
-   (Thai, Lao, Myanmar, Khmer) yet, because it requires dictionary lookup. */
-
-/* Line breaking classification.  */
-
-enum
-{
-  /* Values >= 20 are resolved at run time. */
-  LBP_BK =  0, /* mandatory break */
-/*LBP_CR,         carriage return - not used here because it's a DOSism */
-/*LBP_LF,         line feed - not used here because it's a DOSism */
-  LBP_CM = 20, /* attached characters and combining marks */
-/*LBP_SG,         surrogates - not used here because they are not characters */
-  LBP_ZW =  1, /* zero width space */
-  LBP_IN =  2, /* inseparable */
-  LBP_GL =  3, /* non-breaking (glue) */
-  LBP_CB = 22, /* contingent break opportunity */
-  LBP_SP = 21, /* space */
-  LBP_BA =  4, /* break opportunity after */
-  LBP_BB =  5, /* break opportunity before */
-  LBP_B2 =  6, /* break opportunity before and after */
-  LBP_HY =  7, /* hyphen */
-  LBP_NS =  8, /* non starter */
-  LBP_OP =  9, /* opening punctuation */
-  LBP_CL = 10, /* closing punctuation */
-  LBP_QU = 11, /* ambiguous quotation */
-  LBP_EX = 12, /* exclamation/interrogation */
-  LBP_ID = 13, /* ideographic */
-  LBP_NU = 14, /* numeric */
-  LBP_IS = 15, /* infix separator (numeric) */
-  LBP_SY = 16, /* symbols allowing breaks */
-  LBP_AL = 17, /* ordinary alphabetic and symbol characters */
-  LBP_PR = 18, /* prefix (numeric) */
-  LBP_PO = 19, /* postfix (numeric) */
-  LBP_SA = 23, /* complex context (South East Asian) */
-  LBP_AI = 24, /* ambiguous (alphabetic or ideograph) */
-  LBP_XX = 25  /* unknown */
-};
-
-#include "lbrkprop.h"
-
-static inline unsigned char
-lbrkprop_lookup (unsigned int uc)
-{
-  unsigned int index1 = uc >> lbrkprop_header_0;
-  if (index1 < lbrkprop_header_1)
-    {
-      int lookup1 = lbrkprop.level1[index1];
-      if (lookup1 >= 0)
-        {
-          unsigned int index2 = (uc >> lbrkprop_header_2) & lbrkprop_header_3;
-          int lookup2 = lbrkprop.level2[lookup1 + index2];
-          if (lookup2 >= 0)
-            {
-              unsigned int index3 = uc & lbrkprop_header_4;
-              return lbrkprop.level3[lookup2 + index3];
-            }
-        }
-    }
-  return LBP_XX;
-}
-
-/* Table indexed by two line breaking classifications.  */
-#define D 1  /* direct break opportunity, empty in table 7.3 of UTR #14 */
-#define I 2  /* indirect break opportunity, '%' in table 7.3 of UTR #14 */
-#define P 3  /* prohibited break,           '^' in table 7.3 of UTR #14 */
-static const unsigned char lbrk_table[19][19] = {
-                                /* after */
-        /* ZW IN GL BA BB B2 HY NS OP CL QU EX ID NU IS SY AL PR PO */
-/* ZW */ { P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, },
-/* IN */ { P, I, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
-/* GL */ { P, I, I, I, I, I, I, I, I, P, I, P, I, I, P, P, I, I, I, },
-/* BA */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
-/* BB */ { P, I, I, I, I, I, I, I, I, P, I, P, I, I, P, P, I, I, I, },
-/* B2 */ { P, D, I, I, D, P, I, I, D, P, I, P, D, D, P, P, D, D, D, },
-/* HY */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
-/* NS */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
-/* OP */ { P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, },
-/* CL */ { P, D, I, I, D, D, I, P, D, P, I, P, D, D, P, P, D, D, I, },
-/* QU */ { P, I, I, I, I, I, I, I, P, P, I, P, I, I, P, P, I, I, I, },
-/* EX */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
-/* ID */ { P, I, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, I, },
-/* NU */ { P, I, I, I, D, D, I, I, D, P, I, P, D, I, P, P, I, D, I, },
-/* IS */ { P, D, I, I, D, D, I, I, D, P, I, P, D, I, P, P, D, D, D, },
-/* SY */ { P, D, I, I, D, D, I, I, D, P, I, P, D, I, P, P, D, D, D, },
-/* AL */ { P, I, I, I, D, D, I, I, D, P, I, P, D, I, P, P, I, D, D, },
-/* PR */ { P, D, I, I, D, D, I, I, I, P, I, P, I, I, P, P, I, D, D, },
-/* PO */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
-/* "" */
-/* before */
-};
-/* Note: The (B2,B2) entry should probably be D instead of P.  */
-/* Note: The (PR,ID) entry should probably be D instead of I.  */
-
-void
-u8_possible_linebreaks (const unsigned char *s, size_t n, const char *encoding, char *p)
-{
-  int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL);
-  const unsigned char *s_end = s + n;
-  int last_prop = LBP_BK; /* line break property of last non-space character */
-  char *seen_space = NULL; /* Was a space seen after the last non-space character? */
-  char *seen_space2 = NULL; /* At least two spaces after the last non-space? */
-
-  /* Don't break inside multibyte characters.  */
-  memset (p, UC_BREAK_PROHIBITED, n);
-
-  while (s < s_end)
-    {
-      unsigned int uc;
-      int count = u8_mbtouc_unsafe (&uc, s, s_end - s);
-      int prop = lbrkprop_lookup (uc);
-
-      if (prop == LBP_BK)
-        {
-          /* Mandatory break.  */
-          *p = UC_BREAK_MANDATORY;
-          last_prop = LBP_BK;
-          seen_space = NULL;
-          seen_space2 = NULL;
-        }
-      else
-        {
-          char *q;
-
-          /* Resolve property values whose behaviour is not fixed.  */
-          switch (prop)
-            {
-              case LBP_AI:
-                /* Resolve ambiguous.  */
-                prop = LBP_AI_REPLACEMENT;
-                break;
-              case LBP_CB:
-                /* This is arbitrary.  */
-                prop = LBP_ID;
-                break;
-              case LBP_SA:
-                /* We don't handle complex scripts yet.
-                   Treat LBP_SA like LBP_XX.  */
-              case LBP_XX:
-                /* This is arbitrary.  */
-                prop = LBP_AL;
-                break;
-            }
-
-          /* Deal with combining characters.  */
-          q = p;
-          if (prop == LBP_CM)
-            {
-              /* Don't break just before a combining character.  */
-              *p = UC_BREAK_PROHIBITED;
-              /* A combining character turns a preceding space into LBP_AL.  */
-              if (seen_space != NULL)
-                {
-                  q = seen_space;
-                  seen_space = seen_space2;
-                  prop = LBP_AL;
-                  goto lookup_via_table;
-                }
-            }
-          else if (prop == LBP_SP)
-            {
-              /* Don't break just before a space.  */
-              *p = UC_BREAK_PROHIBITED;
-              seen_space2 = seen_space;
-              seen_space = p;
-            }
-          else
-            {
-             lookup_via_table:
-              /* prop must be usable as an index for table 7.3 of UTR #14.  */
-              if (!(prop >= 1 && prop <= sizeof(lbrk_table) / sizeof(lbrk_table[0])))
-                abort ();
-
-              if (last_prop == LBP_BK)
-                {
-                  /* Don't break at the beginning of a line.  */
-                  *q = UC_BREAK_PROHIBITED;
-                }
-              else
-                {
-                  switch (lbrk_table [last_prop-1] [prop-1])
-                    {
-                      case D:
-                        *q = UC_BREAK_POSSIBLE;
-                        break;
-                      case I:
-                        *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED);
-                        break;
-                      case P:
-                        *q = UC_BREAK_PROHIBITED;
-                        break;
-                      default:
-                        abort ();
-                    }
-                }
-              last_prop = prop;
-              seen_space = NULL;
-              seen_space2 = NULL;
-            }
-        }
-
-      s += count;
-      p += count;
-    }
-}
-
-#ifdef unused
-
-void
-u16_possible_linebreaks (const unsigned short *s, size_t n, const char *encoding, char *p)
-{
-  int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL);
-  const unsigned short *s_end = s + n;
-  int last_prop = LBP_BK; /* line break property of last non-space character */
-  char *seen_space = NULL; /* Was a space seen after the last non-space character? */
-  char *seen_space2 = NULL; /* At least two spaces after the last non-space? */
-
-  /* Don't break inside multibyte characters.  */
-  memset (p, UC_BREAK_PROHIBITED, n);
-
-  while (s < s_end)
-    {
-      unsigned int uc;
-      int count = u16_mbtouc_unsafe (&uc, s, s_end - s);
-      int prop = lbrkprop_lookup (uc);
-
-      if (prop == LBP_BK)
-        {
-          /* Mandatory break.  */
-          *p = UC_BREAK_MANDATORY;
-          last_prop = LBP_BK;
-          seen_space = NULL;
-          seen_space2 = NULL;
-        }
-      else
-        {
-          char *q;
-
-          /* Resolve property values whose behaviour is not fixed.  */
-          switch (prop)
-            {
-              case LBP_AI:
-                /* Resolve ambiguous.  */
-                prop = LBP_AI_REPLACEMENT;
-                break;
-              case LBP_CB:
-                /* This is arbitrary.  */
-                prop = LBP_ID;
-                break;
-              case LBP_SA:
-                /* We don't handle complex scripts yet.
-                   Treat LBP_SA like LBP_XX.  */
-              case LBP_XX:
-                /* This is arbitrary.  */
-                prop = LBP_AL;
-                break;
-            }
-
-          /* Deal with combining characters.  */
-          q = p;
-          if (prop == LBP_CM)
-            {
-              /* Don't break just before a combining character.  */
-              *p = UC_BREAK_PROHIBITED;
-              /* A combining character turns a preceding space into LBP_AL.  */
-              if (seen_space != NULL)
-                {
-                  q = seen_space;
-                  seen_space = seen_space2;
-                  prop = LBP_AL;
-                  goto lookup_via_table;
-                }
-            }
-          else if (prop == LBP_SP)
-            {
-              /* Don't break just before a space.  */
-              *p = UC_BREAK_PROHIBITED;
-              seen_space2 = seen_space;
-              seen_space = p;
-            }
-          else
-            {
-             lookup_via_table:
-              /* prop must be usable as an index for table 7.3 of UTR #14.  */
-              if (!(prop >= 1 && prop <= sizeof(lbrk_table) / sizeof(lbrk_table[0])))
-                abort ();
-
-              if (last_prop == LBP_BK)
-                {
-                  /* Don't break at the beginning of a line.  */
-                  *q = UC_BREAK_PROHIBITED;
-                }
-              else
-                {
-                  switch (lbrk_table [last_prop-1] [prop-1])
-                    {
-                      case D:
-                        *q = UC_BREAK_POSSIBLE;
-                        break;
-                      case I:
-                        *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED);
-                        break;
-                      case P:
-                        *q = UC_BREAK_PROHIBITED;
-                        break;
-                      default:
-                        abort ();
-                    }
-                }
-              last_prop = prop;
-              seen_space = NULL;
-              seen_space2 = NULL;
-            }
-        }
-
-      s += count;
-      p += count;
-    }
-}
-
-void
-u32_possible_linebreaks (const unsigned int *s, size_t n, const char *encoding, char *p)
-{
-  int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL);
-  const unsigned int *s_end = s + n;
-  int last_prop = LBP_BK; /* line break property of last non-space character */
-  char *seen_space = NULL; /* Was a space seen after the last non-space character? */
-  char *seen_space2 = NULL; /* At least two spaces after the last non-space? */
-
-  while (s < s_end)
-    {
-      unsigned int uc = *s;
-      int prop = lbrkprop_lookup (uc);
-
-      if (prop == LBP_BK)
-        {
-          /* Mandatory break.  */
-          *p = UC_BREAK_MANDATORY;
-          last_prop = LBP_BK;
-          seen_space = NULL;
-          seen_space2 = NULL;
-        }
-      else
-        {
-          char *q;
-
-          /* Resolve property values whose behaviour is not fixed.  */
-          switch (prop)
-            {
-              case LBP_AI:
-                /* Resolve ambiguous.  */
-                prop = LBP_AI_REPLACEMENT;
-                break;
-              case LBP_CB:
-                /* This is arbitrary.  */
-                prop = LBP_ID;
-                break;
-              case LBP_SA:
-                /* We don't handle complex scripts yet.
-                   Treat LBP_SA like LBP_XX.  */
-              case LBP_XX:
-                /* This is arbitrary.  */
-                prop = LBP_AL;
-                break;
-            }
-
-          /* Deal with combining characters.  */
-          q = p;
-          if (prop == LBP_CM)
-            {
-              /* Don't break just before a combining character.  */
-              *p = UC_BREAK_PROHIBITED;
-              /* A combining character turns a preceding space into LBP_AL.  */
-              if (seen_space != NULL)
-                {
-                  q = seen_space;
-                  seen_space = seen_space2;
-                  prop = LBP_AL;
-                  goto lookup_via_table;
-                }
-            }
-          else if (prop == LBP_SP)
-            {
-              /* Don't break just before a space.  */
-              *p = UC_BREAK_PROHIBITED;
-              seen_space2 = seen_space;
-              seen_space = p;
-            }
-          else
-            {
-             lookup_via_table:
-              /* prop must be usable as an index for table 7.3 of UTR #14.  */
-              if (!(prop >= 1 && prop <= sizeof(lbrk_table) / sizeof(lbrk_table[0])))
-                abort ();
-
-              if (last_prop == LBP_BK)
-                {
-                  /* Don't break at the beginning of a line.  */
-                  *q = UC_BREAK_PROHIBITED;
-                }
-              else
-                {
-                  switch (lbrk_table [last_prop-1] [prop-1])
-                    {
-                      case D:
-                        *q = UC_BREAK_POSSIBLE;
-                        break;
-                      case I:
-                        *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED);
-                        break;
-                      case P:
-                        *q = UC_BREAK_PROHIBITED;
-                        break;
-                      default:
-                        abort ();
-                    }
-                }
-              last_prop = prop;
-              seen_space = NULL;
-              seen_space2 = NULL;
-            }
-        }
-
-      s++;
-      p++;
-    }
-}
-
-#endif
-
-
-/* Choose the best line breaks, assuming the uc_width function.
-   Return the column after the end of the string.  */
-
-int
-u8_width_linebreaks (const unsigned char *s, size_t n,
-                     int width, int start_column, int at_end_columns,
-                     const char *o, const char *encoding,
-                     char *p)
-{
-  const unsigned char *s_end;
-  char *last_p;
-  int last_column;
-  int piece_width;
-
-  u8_possible_linebreaks (s, n, encoding, p);
-
-  s_end = s + n;
-  last_p = NULL;
-  last_column = start_column;
-  piece_width = 0;
-  while (s < s_end)
-    {
-      unsigned int uc;
-      int count = u8_mbtouc_unsafe (&uc, s, s_end - s);
-
-      /* Respect the override.  */
-      if (o != NULL && *o != UC_BREAK_UNDEFINED)
-        *p = *o;
-
-      if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY)
-        {
-          /* An atomic piece of text ends here.  */
-          if (last_p != NULL && last_column + piece_width > width)
-            {
-              /* Insert a line break.  */
-              *last_p = UC_BREAK_POSSIBLE;
-              last_column = 0;
-            }
-        }
-
-      if (*p == UC_BREAK_MANDATORY)
-        {
-          /* uc is a line break character.  */
-          /* Start a new piece at column 0.  */
-          last_p = NULL;
-          last_column = 0;
-          piece_width = 0;
-        }
-      else
-        {
-          /* uc is not a line break character.  */
-          int w;
-
-          if (*p == UC_BREAK_POSSIBLE)
-            {
-              /* Start a new piece.  */
-              last_p = p;
-              last_column += piece_width;
-              piece_width = 0;
-              /* No line break for the moment, may be turned into
-                 UC_BREAK_POSSIBLE later, via last_p. */
-            }
-
-          *p = UC_BREAK_PROHIBITED;
-
-          w = uc_width (uc, encoding);
-          if (w >= 0) /* ignore control characters in the string */
-            piece_width += w;
-         }
-
-      s += count;
-      p += count;
-      if (o != NULL)
-        o += count;
-    }
-
-  /* The last atomic piece of text ends here.  */
-  if (last_p != NULL && last_column + piece_width + at_end_columns > width)
-    {
-      /* Insert a line break.  */
-      *last_p = UC_BREAK_POSSIBLE;
-      last_column = 0;
-    }
-
-  return last_column + piece_width;
-}
-
-#ifdef unused
-
-int
-u16_width_linebreaks (const unsigned short *s, size_t n,
-                      int width, int start_column, int at_end_columns,
-                      const char *o, const char *encoding,
-                      char *p)
-{
-  const unsigned short *s_end;
-  char *last_p;
-  int last_column;
-  int piece_width;
-
-  u16_possible_linebreaks (s, n, encoding, p);
-
-  s_end = s + n;
-  last_p = NULL;
-  last_column = start_column;
-  piece_width = 0;
-  while (s < s_end)
-    {
-      unsigned int uc;
-      int count = u16_mbtouc_unsafe (&uc, s, s_end - s);
-
-      /* Respect the override.  */
-      if (o != NULL && *o != UC_BREAK_UNDEFINED)
-        *p = *o;
-
-      if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY)
-        {
-          /* An atomic piece of text ends here.  */
-          if (last_p != NULL && last_column + piece_width > width)
-            {
-              /* Insert a line break.  */
-              *last_p = UC_BREAK_POSSIBLE;
-              last_column = 0;
-            }
-        }
-
-      if (*p == UC_BREAK_MANDATORY)
-        {
-          /* uc is a line break character.  */
-          /* Start a new piece at column 0.  */
-          last_p = NULL;
-          last_column = 0;
-          piece_width = 0;
-        }
-      else
-        {
-          /* uc is not a line break character.  */
-          int w;
-
-          if (*p == UC_BREAK_POSSIBLE)
-            {
-              /* Start a new piece.  */
-              last_p = p;
-              last_column += piece_width;
-              piece_width = 0;
-              /* No line break for the moment, may be turned into
-                 UC_BREAK_POSSIBLE later, via last_p. */
-            }
-
-          *p = UC_BREAK_PROHIBITED;
-
-          w = uc_width (uc, encoding);
-          if (w >= 0) /* ignore control characters in the string */
-            piece_width += w;
-         }
-
-      s += count;
-      p += count;
-      if (o != NULL)
-        o += count;
-    }
-
-  /* The last atomic piece of text ends here.  */
-  if (last_p != NULL && last_column + piece_width + at_end_columns > width)
-    {
-      /* Insert a line break.  */
-      *last_p = UC_BREAK_POSSIBLE;
-      last_column = 0;
-    }
-
-  return last_column + piece_width;
-}
-
-int
-u32_width_linebreaks (const unsigned int *s, size_t n,
-                      int width, int start_column, int at_end_columns,
-                      const char *o, const char *encoding,
-                      char *p)
-{
-  const unsigned int *s_end;
-  char *last_p;
-  int last_column;
-  int piece_width;
-
-  u32_possible_linebreaks (s, n, encoding, p);
-
-  s_end = s + n;
-  last_p = NULL;
-  last_column = start_column;
-  piece_width = 0;
-  while (s < s_end)
-    {
-      unsigned int uc = *s;
-
-      /* Respect the override.  */
-      if (o != NULL && *o != UC_BREAK_UNDEFINED)
-        *p = *o;
-
-      if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY)
-        {
-          /* An atomic piece of text ends here.  */
-          if (last_p != NULL && last_column + piece_width > width)
-            {
-              /* Insert a line break.  */
-              *last_p = UC_BREAK_POSSIBLE;
-              last_column = 0;
-            }
-        }
-
-      if (*p == UC_BREAK_MANDATORY)
-        {
-          /* uc is a line break character.  */
-          /* Start a new piece at column 0.  */
-          last_p = NULL;
-          last_column = 0;
-          piece_width = 0;
-        }
-      else
-        {
-          /* uc is not a line break character.  */
-          int w;
-
-          if (*p == UC_BREAK_POSSIBLE)
-            {
-              /* Start a new piece.  */
-              last_p = p;
-              last_column += piece_width;
-              piece_width = 0;
-              /* No line break for the moment, may be turned into
-                 UC_BREAK_POSSIBLE later, via last_p. */
-            }
-
-          *p = UC_BREAK_PROHIBITED;
-
-          w = uc_width (uc, encoding);
-          if (w >= 0) /* ignore control characters in the string */
-            piece_width += w;
-         }
-
-      s++;
-      p++;
-      if (o != NULL)
-        o++;
-    }
-
-  /* The last atomic piece of text ends here.  */
-  if (last_p != NULL && last_column + piece_width + at_end_columns > width)
-    {
-      /* Insert a line break.  */
-      *last_p = UC_BREAK_POSSIBLE;
-      last_column = 0;
-    }
-
-  return last_column + piece_width;
-}
-
-#endif
-
-
-#ifdef TEST1
-
-#include <stdio.h>
-
-/* Read the contents of an input stream, and return it, terminated with a NUL
-   byte. */
-char *
-read_file (FILE *stream)
-{
-#define BUFSIZE 4096
-  char *buf = NULL;
-  int alloc = 0;
-  int size = 0;
-  int count;
-
-  while (! feof (stream))
-    {
-      if (size + BUFSIZE > alloc)
-        {
-          alloc = alloc + alloc / 2;
-          if (alloc < size + BUFSIZE)
-            alloc = size + BUFSIZE;
-          buf = realloc (buf, alloc);
-          if (buf == NULL)
-            {
-              fprintf (stderr, "out of memory\n");
-              exit (1);
-            }
-        }
-      count = fread (buf + size, 1, BUFSIZE, stream);
-      if (count == 0)
-        {
-          if (ferror (stream))
-            {
-              perror ("fread");
-              exit (1);
-            }
-        }
-      else
-        size += count;
-    }
-  buf = realloc (buf, size + 1);
-  if (buf == NULL)
-    {
-      fprintf (stderr, "out of memory\n");
-      exit (1);
-    }
-  buf[size] = '\0';
-  return buf;
-#undef BUFSIZE
-}
-
-int
-main (int argc, char * argv[])
-{
-  if (argc == 1)
-    {
-      /* Display all the break opportunities in the input string.  */
-      char *input = read_file (stdin);
-      int length = strlen (input);
-      char *breaks = malloc (length);
-      int i;
-
-      u8_possible_linebreaks ((unsigned char *) input, length, "UTF-8", breaks);
-
-      for (i = 0; i < length; i++)
-        {
-          switch (breaks[i])
-            {
-              case UC_BREAK_POSSIBLE:
-                /* U+2027 in UTF-8 encoding */
-                putc (0xe2, stdout); putc (0x80, stdout); putc (0xa7, stdout);
-                break;
-              case UC_BREAK_MANDATORY:
-                /* U+21B2 (or U+21B5) in UTF-8 encoding */
-                putc (0xe2, stdout); putc (0x86, stdout); putc (0xb2, stdout);
-                break;
-              case UC_BREAK_PROHIBITED:
-                break;
-              default:
-                abort ();
-            }
-          putc (input[i], stdout);
-        }
-
-      free (breaks);
-
-      return 0;
-    }
-  else if (argc == 2)
-    {
-      /* Insert line breaks for a given width.  */
-      int width = atoi (argv[1]);
-      char *input = read_file (stdin);
-      int length = strlen (input);
-      char *breaks = malloc (length);
-      int i;
-
-      u8_width_linebreaks ((unsigned char *) input, length, width, 0, 0, NULL, "UTF-8", breaks);
-
-      for (i = 0; i < length; i++)
-        {
-          switch (breaks[i])
-            {
-              case UC_BREAK_POSSIBLE:
-                putc ('\n', stdout);
-                break;
-              case UC_BREAK_MANDATORY:
-                break;
-              case UC_BREAK_PROHIBITED:
-                break;
-              default:
-                abort ();
-            }
-          putc (input[i], stdout);
-        }
-
-      free (breaks);
-
-      return 0;
-    }
-  else
-    return 1;
-}
-
-#endif /* TEST1 */
-
-
-/* Now the same thing with an arbitrary encoding.
-
-   We convert the input string to Unicode.
-
-   The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16,
-   UTF-16BE, UTF-16LE, UTF-7.  UCS-2 supports only characters up to
-   \U0000FFFF.  UTF-16 and variants support only characters up to
-   \U0010FFFF.  UTF-7 is way too complex and not supported by glibc-2.1.
-   UCS-4 specification leaves doubts about endianness and byte order mark.
-   glibc currently interprets it as big endian without byte order mark,
-   but this is not backed by an RFC.  So we use UTF-8. It supports
-   characters up to \U7FFFFFFF and is unambiguously defined.  */
-
-#if HAVE_ICONV
-
-#include <iconv.h>
-#include <errno.h>
-
-/* Luckily, the encoding's name is platform independent.  */
-#define UTF8_NAME "UTF-8"
-
-/* Return the length of a string after conversion through an iconv_t.  */
-static size_t
-iconv_string_length (iconv_t cd, const char *s, size_t n)
-{
-#define TMPBUFSIZE 4096
-  size_t count = 0;
-  char tmpbuf[TMPBUFSIZE];
-  const char *inptr = s;
-  size_t insize = n;
-  while (insize > 0)
-    {
-      char *outptr = tmpbuf;
-      size_t outsize = TMPBUFSIZE;
-      size_t res = iconv (cd, (ICONV_CONST char **) &inptr, &insize, &outptr, &outsize);
-      if (res == (size_t)(-1) && errno != E2BIG)
-        return (size_t)(-1);
-      count += outptr - tmpbuf;
-    }
-  /* Avoid glibc-2.1 bug and Solaris 7 through 9 bug.  */
-#if defined _LIBICONV_VERSION \
-    || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun)
-  {
-    char *outptr = tmpbuf;
-    size_t outsize = TMPBUFSIZE;
-    size_t res = iconv (cd, NULL, NULL, &outptr, &outsize);
-    if (res == (size_t)(-1))
-      return (size_t)(-1);
-    count += outptr - tmpbuf;
-  }
-  /* Return to the initial state.  */
-  iconv (cd, NULL, NULL, NULL, NULL);
-#endif
-  return count;
-#undef TMPBUFSIZE
-}
-
-static void
-iconv_string_keeping_offsets (iconv_t cd, const char *s, size_t n,
-                              size_t *offtable, char *t, size_t m)
-{
-  size_t i;
-  const char *s_end;
-  const char *inptr;
-  char *outptr;
-  size_t outsize;
-  /* Avoid glibc-2.1 bug.  */
-#if !defined _LIBICONV_VERSION && (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1)
-  const size_t extra = 1;
-#else
-  const size_t extra = 0;
-#endif
-
-  for (i = 0; i < n; i++)
-    offtable[i] = (size_t)(-1);
-
-  s_end = s + n;
-  inptr = s;
-  outptr = t;
-  outsize = m + extra;
-  while (inptr < s_end)
-    {
-      const char *saved_inptr;
-      size_t insize;
-      size_t res;
-
-      offtable[inptr - s] = outptr - t;
-
-      saved_inptr = inptr;
-      res = (size_t)(-1);
-      for (insize = 1; inptr + insize <= s_end; insize++)
-        {
-          res = iconv (cd, (ICONV_CONST char **) &inptr, &insize, &outptr, &outsize);
-          if (!(res == (size_t)(-1) && errno == EINVAL))
-            break;
-          /* We expect that no input bytes have been consumed so far.  */
-          if (inptr != saved_inptr)
-            abort ();
-        }
-      /* After we verified the convertibility and computed the translation's
-         size m, there shouldn't be any conversion error here. */
-      if (res == (size_t)(-1))
-        abort ();
-    }
-  /* Avoid glibc-2.1 bug and Solaris 7 bug.  */
-#if defined _LIBICONV_VERSION \
-    || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun)
-  if (iconv (cd, NULL, NULL, &outptr, &outsize) == (size_t)(-1))
-    abort ();
-#endif
-  /* We should have produced exactly m output bytes.  */
-  if (outsize != extra)
-    abort ();
-}
-
-#endif /* HAVE_ICONV */
-
-#if C_CTYPE_ASCII
-
-/* Tests whether a string is entirely ASCII.  Returns 1 if yes.
-   Returns 0 if the string is in an 8-bit encoding or an ISO-2022 encoding.  */
-static int
-is_all_ascii (const char *s, size_t n)
-{
-  for (; n > 0; s++, n--)
-    {
-      unsigned char c = (unsigned char) *s;
-
-      if (!(c_isprint (c) || c_isspace (c)))
-	return 0;
-    }
-  return 1;
-}
-
-#endif /* C_CTYPE_ASCII */
-
-#if defined unused || defined TEST2
-
-void
-mbs_possible_linebreaks (const char *s, size_t n, const char *encoding,
-                         char *p)
-{
-  if (n == 0)
-    return;
-  if (is_utf8_encoding (encoding))
-    u8_possible_linebreaks ((const unsigned char *) s, n, encoding, p);
-  else
-    {
-#if HAVE_ICONV
-      iconv_t to_utf8;
-      /* Avoid glibc-2.1 bug with EUC-KR.  */
-# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION
-      if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0))
-	to_utf8 = (iconv_t)(-1);
-      else
-# endif
-      /* Avoid Solaris 9 bug with GB2312, EUC-TW, BIG5, BIG5-HKSCS, GBK,
-         GB18030.  */
-# if defined __sun && !defined _LIBICONV_VERSION
-      if (   STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
-          || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
-          || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
-          || STREQ (encoding, "BIG5-HKSCS", 'B', 'I', 'G', '5', '-', 'H', 'K', 'S', 'C')
-          || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
-          || STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
-        to_utf8 = (iconv_t)(-1);
-      else
-# endif
-      to_utf8 = iconv_open (UTF8_NAME, encoding);
-      if (to_utf8 != (iconv_t)(-1))
-        {
-          /* Determine the length of the resulting UTF-8 string.  */
-          size_t m = iconv_string_length (to_utf8, s, n);
-          if (m != (size_t)(-1))
-            {
-              /* Convert the string to UTF-8 and build a translation table
-                 from offsets into s to offsets into the translated string.  */
-	      size_t memory_size = xsum3 (xtimes (n, sizeof (size_t)), m, m);
-              char *memory =
-		(size_in_bounds_p (memory_size) ? malloc (memory_size) : NULL);
-              if (memory != NULL)
-                {
-                  size_t *offtable = (size_t *) memory;
-                  char *t = (char *) (offtable + n);
-                  char *q = (char *) (t + m);
-                  size_t i;
-
-                  iconv_string_keeping_offsets (to_utf8, s, n, offtable, t, m);
-
-                  /* Determine the possible line breaks of the UTF-8 string.  */
-                  u8_possible_linebreaks ((const unsigned char *) t, m, encoding, q);
-
-                  /* Translate the result back to the original string.  */
-                  memset (p, UC_BREAK_PROHIBITED, n);
-                  for (i = 0; i < n; i++)
-                    if (offtable[i] != (size_t)(-1))
-                      p[i] = q[offtable[i]];
-
-                  free (memory);
-                  iconv_close (to_utf8);
-                  return;
-                }
-            }
-          iconv_close (to_utf8);
-        }
-#endif
-      /* Impossible to convert.  */
-#if C_CTYPE_ASCII
-      if (is_all_ascii (s, n))
-	{
-	  /* ASCII is a subset of UTF-8.  */
-	  u8_possible_linebreaks ((const unsigned char *) s, n, encoding, p);
-	  return;
-	}
-#endif
-      /* We have a non-ASCII string and cannot convert it.
-	 Don't produce line breaks except those already present in the
-	 input string.  All we assume here is that the encoding is
-	 minimally ASCII compatible.  */
-      {
-        const char *s_end = s + n;
-        while (s < s_end)
-          {
-            *p = (*s == '\n' ? UC_BREAK_MANDATORY : UC_BREAK_PROHIBITED);
-            s++;
-            p++;
-          }
-      }
-    }
-}
-
-#endif
-
-int
-mbs_width_linebreaks (const char *s, size_t n,
-                      int width, int start_column, int at_end_columns,
-                      const char *o, const char *encoding,
-                      char *p)
-{
-  if (n == 0)
-    return start_column;
-  if (is_utf8_encoding (encoding))
-    return u8_width_linebreaks ((const unsigned char *) s, n, width, start_column, at_end_columns, o, encoding, p);
-  else
-    {
-#if HAVE_ICONV
-      iconv_t to_utf8;
-      /* Avoid glibc-2.1 bug with EUC-KR.  */
-# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION
-      if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0))
-	to_utf8 = (iconv_t)(-1);
-      else
-# endif
-      /* Avoid Solaris 9 bug with GB2312, EUC-TW, BIG5, BIG5-HKSCS, GBK,
-         GB18030.  */
-# if defined __sun && !defined _LIBICONV_VERSION
-      if (   STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
-          || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
-          || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
-          || STREQ (encoding, "BIG5-HKSCS", 'B', 'I', 'G', '5', '-', 'H', 'K', 'S', 'C')
-          || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
-          || STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
-        to_utf8 = (iconv_t)(-1);
-      else
-# endif
-      to_utf8 = iconv_open (UTF8_NAME, encoding);
-      if (to_utf8 != (iconv_t)(-1))
-        {
-          /* Determine the length of the resulting UTF-8 string.  */
-          size_t m = iconv_string_length (to_utf8, s, n);
-          if (m != (size_t)(-1))
-            {
-              /* Convert the string to UTF-8 and build a translation table
-                 from offsets into s to offsets into the translated string.  */
-	      size_t memory_size =
-		xsum4 (xtimes (n, sizeof (size_t)), m, m,
-		       (o != NULL ? m : 0));
-	      char *memory =
-		(char *)
-		(size_in_bounds_p (memory_size) ? malloc (memory_size) : NULL);
-              if (memory != NULL)
-                {
-                  size_t *offtable = (size_t *) memory;
-                  char *t = (char *) (offtable + n);
-                  char *q = (char *) (t + m);
-                  char *o8 = (o != NULL ? (char *) (q + m) : NULL);
-                  int res_column;
-                  size_t i;
-
-                  iconv_string_keeping_offsets (to_utf8, s, n, offtable, t, m);
-
-                  /* Translate the overrides to the UTF-8 string.  */
-                  if (o != NULL)
-                    {
-                      memset (o8, UC_BREAK_UNDEFINED, m);
-                      for (i = 0; i < n; i++)
-                        if (offtable[i] != (size_t)(-1))
-                          o8[offtable[i]] = o[i];
-                    }
-
-                  /* Determine the line breaks of the UTF-8 string.  */
-                  res_column =
-                    u8_width_linebreaks ((const unsigned char *) t, m, width, start_column, at_end_columns, o8, encoding, q);
-
-                  /* Translate the result back to the original string.  */
-                  memset (p, UC_BREAK_PROHIBITED, n);
-                  for (i = 0; i < n; i++)
-                    if (offtable[i] != (size_t)(-1))
-                      p[i] = q[offtable[i]];
-
-                  free (memory);
-                  iconv_close (to_utf8);
-                  return res_column;
-                }
-            }
-          iconv_close (to_utf8);
-        }
-#endif
-      /* Impossible to convert.  */
-#if C_CTYPE_ASCII
-      if (is_all_ascii (s, n))
-	{
-	  /* ASCII is a subset of UTF-8.  */
-	  return u8_width_linebreaks ((const unsigned char *) s, n, width, start_column, at_end_columns, o, encoding, p);
-	}
-#endif
-      /* We have a non-ASCII string and cannot convert it.
-	 Don't produce line breaks except those already present in the
-	 input string.  All we assume here is that the encoding is
-	 minimally ASCII compatible.  */
-      {
-        const char *s_end = s + n;
-        while (s < s_end)
-          {
-            *p = ((o != NULL && *o == UC_BREAK_MANDATORY) || *s == '\n'
-                  ? UC_BREAK_MANDATORY
-                  : UC_BREAK_PROHIBITED);
-            s++;
-            p++;
-            if (o != NULL)
-              o++;
-          }
-        /* We cannot compute widths in this case.  */
-        return start_column;
-      }
-    }
-}
-
-
-#ifdef TEST2
-
-#include <stdio.h>
-#include <locale.h>
-
-/* Read the contents of an input stream, and return it, terminated with a NUL
-   byte. */
-char *
-read_file (FILE *stream)
-{
-#define BUFSIZE 4096
-  char *buf = NULL;
-  int alloc = 0;
-  int size = 0;
-  int count;
-
-  while (! feof (stream))
-    {
-      if (size + BUFSIZE > alloc)
-        {
-          alloc = alloc + alloc / 2;
-          if (alloc < size + BUFSIZE)
-            alloc = size + BUFSIZE;
-          buf = realloc (buf, alloc);
-          if (buf == NULL)
-            {
-              fprintf (stderr, "out of memory\n");
-              exit (1);
-            }
-        }
-      count = fread (buf + size, 1, BUFSIZE, stream);
-      if (count == 0)
-        {
-          if (ferror (stream))
-            {
-              perror ("fread");
-              exit (1);
-            }
-        }
-      else
-        size += count;
-    }
-  buf = realloc (buf, size + 1);
-  if (buf == NULL)
-    {
-      fprintf (stderr, "out of memory\n");
-      exit (1);
-    }
-  buf[size] = '\0';
-  return buf;
-#undef BUFSIZE
-}
-
-int
-main (int argc, char * argv[])
-{
-  setlocale (LC_CTYPE, "");
-  if (argc == 1)
-    {
-      /* Display all the break opportunities in the input string.  */
-      char *input = read_file (stdin);
-      int length = strlen (input);
-      char *breaks = malloc (length);
-      int i;
-
-      mbs_possible_linebreaks (input, length, locale_charset (), breaks);
-
-      for (i = 0; i < length; i++)
-        {
-          switch (breaks[i])
-            {
-              case UC_BREAK_POSSIBLE:
-                putc ('|', stdout);
-                break;
-              case UC_BREAK_MANDATORY:
-                break;
-              case UC_BREAK_PROHIBITED:
-                break;
-              default:
-                abort ();
-            }
-          putc (input[i], stdout);
-        }
-
-      free (breaks);
-
-      return 0;
-    }
-  else if (argc == 2)
-    {
-      /* Insert line breaks for a given width.  */
-      int width = atoi (argv[1]);
-      char *input = read_file (stdin);
-      int length = strlen (input);
-      char *breaks = malloc (length);
-      int i;
-
-      mbs_width_linebreaks (input, length, width, 0, 0, NULL, locale_charset (), breaks);
-
-      for (i = 0; i < length; i++)
-        {
-          switch (breaks[i])
-            {
-              case UC_BREAK_POSSIBLE:
-                putc ('\n', stdout);
-                break;
-              case UC_BREAK_MANDATORY:
-                break;
-              case UC_BREAK_PROHIBITED:
-                break;
-              default:
-                abort ();
-            }
-          putc (input[i], stdout);
-        }
-
-      free (breaks);
-
-      return 0;
-    }
-  else
-    return 1;
-}
-
-#endif /* TEST2 */

Deleted: tuxmath/trunk/linebreak/linebreak.h
===================================================================
--- tuxmath/trunk/linebreak/linebreak.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/linebreak.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,94 +0,0 @@
-/* linebreak.h - line breaking of Unicode strings
-   Copyright (C) 2001-2003, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <haible at clisp.cons.org>, 2001.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _LINEBREAK_H
-#define _LINEBREAK_H
-
-/* Get size_t.  */
-#include <stddef.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Line breaking.  */
-
-enum {
-  UC_BREAK_UNDEFINED,
-  UC_BREAK_PROHIBITED,
-  UC_BREAK_POSSIBLE,
-  UC_BREAK_MANDATORY,
-  UC_BREAK_HYPHENATION
-};
-
-/* Determine the line break points in S, and store the result at p[0..n-1].
-   p[i] = UC_BREAK_MANDATORY means that s[i] is a line break character.
-   p[i] = UC_BREAK_POSSIBLE means that a line break may be inserted between
-          s[i-1] and s[i].
-   p[i] = UC_BREAK_HYPHENATION means that a hyphen and a line break may be
-          inserted between s[i-1] and s[i].  But beware of language dependent
-          hyphenation rules.
-   p[i] = UC_BREAK_PROHIBITED means that s[i-1] and s[i] must not be separated.
- */
-extern void u8_possible_linebreaks (const unsigned char *s, size_t n,
-                                    const char *encoding,
-                                    char *p);
-extern void u16_possible_linebreaks (const unsigned short *s, size_t n,
-                                     const char *encoding,
-                                     char *p);
-extern void u32_possible_linebreaks (const unsigned int *s, size_t n,
-                                     const char *encoding,
-                                     char *p);
-extern void mbs_possible_linebreaks (const char *s, size_t n,
-                                     const char *encoding,
-                                     char *p);
-
-/* Choose the best line breaks, assuming the uc_width function.
-   Return the column after the end of the string.
-   o is an optional override; if o[i] != UC_BREAK_UNDEFINED, o[i] takes
-   precedence over p[i] as returned by the *_possible_linebreaks function.
- */
-extern int
-       u8_width_linebreaks (const unsigned char *s, size_t n,
-                            int width, int start_column, int at_end_columns,
-                            const char *o, const char *encoding,
-                            char *p);
-extern int
-       u16_width_linebreaks (const unsigned short *s, size_t n,
-                             int width, int start_column, int at_end_columns,
-                             const char *o, const char *encoding,
-                             char *p);
-extern int
-       u32_width_linebreaks (const unsigned int *s, size_t n,
-                             int width, int start_column, int at_end_columns,
-                             const char *o, const char *encoding,
-                             char *p);
-extern int
-       mbs_width_linebreaks (const char *s, size_t n,
-                             int width, int start_column, int at_end_columns,
-                             const char *o, const char *encoding,
-                             char *p);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LINEBREAK_H */

Deleted: tuxmath/trunk/linebreak/localcharset.h
===================================================================
--- tuxmath/trunk/linebreak/localcharset.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/localcharset.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,41 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-   Copyright (C) 2000-2003 Free Software Foundation, Inc.
-   This file is part of the GNU CHARSET Library.
-
-   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, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _LOCALCHARSET_H
-#define _LOCALCHARSET_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-extern const char * locale_charset (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LOCALCHARSET_H */

Deleted: tuxmath/trunk/linebreak/streq.h
===================================================================
--- tuxmath/trunk/linebreak/streq.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/streq.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,176 +0,0 @@
-/* Optimized string comparison.
-   Copyright (C) 2001-2002, 2007 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible <bruno at clisp.org>.  */
-
-#ifndef _GL_STREQ_H
-#define _GL_STREQ_H
-
-#include <string.h>
-
-/* STREQ allows to optimize string comparison with a small literal string.
-     STREQ (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-   is semantically equivalent to
-     strcmp (s, "EUC-KR") == 0
-   just faster.  */
-
-/* Help GCC to generate good code for string comparisons with
-   immediate strings. */
-#if defined (__GNUC__) && defined (__OPTIMIZE__)
-
-static inline int
-streq9 (const char *s1, const char *s2)
-{
-  return strcmp (s1 + 9, s2 + 9) == 0;
-}
-
-static inline int
-streq8 (const char *s1, const char *s2, char s28)
-{
-  if (s1[8] == s28)
-    {
-      if (s28 == 0)
-        return 1;
-      else
-        return streq9 (s1, s2);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq7 (const char *s1, const char *s2, char s27, char s28)
-{
-  if (s1[7] == s27)
-    {
-      if (s27 == 0)
-        return 1;
-      else
-        return streq8 (s1, s2, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
-{
-  if (s1[6] == s26)
-    {
-      if (s26 == 0)
-        return 1;
-      else
-        return streq7 (s1, s2, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
-{
-  if (s1[5] == s25)
-    {
-      if (s25 == 0)
-        return 1;
-      else
-        return streq6 (s1, s2, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[4] == s24)
-    {
-      if (s24 == 0)
-        return 1;
-      else
-        return streq5 (s1, s2, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[3] == s23)
-    {
-      if (s23 == 0)
-        return 1;
-      else
-        return streq4 (s1, s2, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[2] == s22)
-    {
-      if (s22 == 0)
-        return 1;
-      else
-        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[1] == s21)
-    {
-      if (s21 == 0)
-        return 1;
-      else
-        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[0] == s20)
-    {
-      if (s20 == 0)
-        return 1;
-      else
-        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
-  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
-
-#else
-
-#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
-  (strcmp (s1, s2) == 0)
-
-#endif
-
-#endif /* _GL_STREQ_H */

Deleted: tuxmath/trunk/linebreak/unistr/u16-mbtouc-aux.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u16-mbtouc-aux.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u16-mbtouc-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,51 +0,0 @@
-/* Conversion UTF-16 to UCS-4.
-   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2001.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if HAVE_INLINE
-
-int
-u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n)
-{
-  uint16_t c = *s;
-
-  if (c < 0xdc00)
-    {
-      if (n >= 2)
-	{
-	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
-	    {
-	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
-	      return 2;
-	    }
-	  /* invalid multibyte character */
-	}
-      else
-	{
-	  /* incomplete multibyte character */
-	}
-    }
-  /* invalid multibyte character */
-  *puc = 0xfffd;
-  return 1;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr/u16-mbtouc-unsafe-aux.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u16-mbtouc-unsafe-aux.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u16-mbtouc-unsafe-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,55 +0,0 @@
-/* Conversion UTF-16 to UCS-4.
-   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2001.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if HAVE_INLINE
-
-int
-u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n)
-{
-  uint16_t c = *s;
-
-#if CONFIG_UNICODE_SAFETY
-  if (c < 0xdc00)
-#endif
-    {
-      if (n >= 2)
-	{
-#if CONFIG_UNICODE_SAFETY
-	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
-#endif
-	    {
-	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
-	      return 2;
-	    }
-	  /* invalid multibyte character */
-	}
-      else
-	{
-	  /* incomplete multibyte character */
-	}
-    }
-  /* invalid multibyte character */
-  *puc = 0xfffd;
-  return 1;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr/u16-mbtouc-unsafe.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u16-mbtouc-unsafe.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u16-mbtouc-unsafe.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,60 +0,0 @@
-/* Look at first character in UTF-16 string.
-   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2001.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if !HAVE_INLINE
-
-int
-u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n)
-{
-  uint16_t c = *s;
-
-  if (c < 0xd800 || c >= 0xe000)
-    {
-      *puc = c;
-      return 1;
-    }
-#if CONFIG_UNICODE_SAFETY
-  if (c < 0xdc00)
-#endif
-    {
-      if (n >= 2)
-	{
-#if CONFIG_UNICODE_SAFETY
-	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
-#endif
-	    {
-	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
-	      return 2;
-	    }
-	  /* invalid multibyte character */
-	}
-      else
-	{
-	  /* incomplete multibyte character */
-	}
-    }
-  /* invalid multibyte character */
-  *puc = 0xfffd;
-  return 1;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr/u16-mbtouc.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u16-mbtouc.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u16-mbtouc.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,56 +0,0 @@
-/* Look at first character in UTF-16 string.
-   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2001.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if !HAVE_INLINE
-
-int
-u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n)
-{
-  uint16_t c = *s;
-
-  if (c < 0xd800 || c >= 0xe000)
-    {
-      *puc = c;
-      return 1;
-    }
-  if (c < 0xdc00)
-    {
-      if (n >= 2)
-	{
-	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
-	    {
-	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
-	      return 2;
-	    }
-	  /* invalid multibyte character */
-	}
-      else
-	{
-	  /* incomplete multibyte character */
-	}
-    }
-  /* invalid multibyte character */
-  *puc = 0xfffd;
-  return 1;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr/u8-mbtouc-aux.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u8-mbtouc-aux.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u8-mbtouc-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,158 +0,0 @@
-/* Conversion UTF-8 to UCS-4.
-   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2001.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if HAVE_INLINE
-
-int
-u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n)
-{
-  uint8_t c = *s;
-
-  if (c >= 0xc2)
-    {
-      if (c < 0xe0)
-	{
-	  if (n >= 2)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40)
-		{
-		  *puc = ((unsigned int) (c & 0x1f) << 6)
-		         | (unsigned int) (s[1] ^ 0x80);
-		  return 2;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xf0)
-	{
-	  if (n >= 3)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (c >= 0xe1 || s[1] >= 0xa0)
-		  && (c != 0xed || s[1] < 0xa0))
-		{
-		  *puc = ((unsigned int) (c & 0x0f) << 12)
-		         | ((unsigned int) (s[1] ^ 0x80) << 6)
-		         | (unsigned int) (s[2] ^ 0x80);
-		  return 3;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xf8)
-	{
-	  if (n >= 4)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40
-		  && (c >= 0xf1 || s[1] >= 0x90)
-#if 1
-		  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
-#endif
-		 )
-		{
-		  *puc = ((unsigned int) (c & 0x07) << 18)
-		         | ((unsigned int) (s[1] ^ 0x80) << 12)
-		         | ((unsigned int) (s[2] ^ 0x80) << 6)
-		         | (unsigned int) (s[3] ^ 0x80);
-		  return 4;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-#if 0
-      else if (c < 0xfc)
-	{
-	  if (n >= 5)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-		  && (c >= 0xf9 || s[1] >= 0x88))
-		{
-		  *puc = ((unsigned int) (c & 0x03) << 24)
-		         | ((unsigned int) (s[1] ^ 0x80) << 18)
-		         | ((unsigned int) (s[2] ^ 0x80) << 12)
-		         | ((unsigned int) (s[3] ^ 0x80) << 6)
-		         | (unsigned int) (s[4] ^ 0x80);
-		  return 5;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xfe)
-	{
-	  if (n >= 6)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-		  && (s[5] ^ 0x80) < 0x40
-		  && (c >= 0xfd || s[1] >= 0x84))
-		{
-		  *puc = ((unsigned int) (c & 0x01) << 30)
-		         | ((unsigned int) (s[1] ^ 0x80) << 24)
-		         | ((unsigned int) (s[2] ^ 0x80) << 18)
-		         | ((unsigned int) (s[3] ^ 0x80) << 12)
-		         | ((unsigned int) (s[4] ^ 0x80) << 6)
-		         | (unsigned int) (s[5] ^ 0x80);
-		  return 6;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-#endif
-    }
-  /* invalid multibyte character */
-  *puc = 0xfffd;
-  return 1;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr/u8-mbtouc-unsafe-aux.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u8-mbtouc-unsafe-aux.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u8-mbtouc-unsafe-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,168 +0,0 @@
-/* Conversion UTF-8 to UCS-4.
-   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2001.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if HAVE_INLINE
-
-int
-u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n)
-{
-  uint8_t c = *s;
-
-  if (c >= 0xc2)
-    {
-      if (c < 0xe0)
-	{
-	  if (n >= 2)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40)
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x1f) << 6)
-		         | (unsigned int) (s[1] ^ 0x80);
-		  return 2;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xf0)
-	{
-	  if (n >= 3)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (c >= 0xe1 || s[1] >= 0xa0)
-		  && (c != 0xed || s[1] < 0xa0))
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x0f) << 12)
-		         | ((unsigned int) (s[1] ^ 0x80) << 6)
-		         | (unsigned int) (s[2] ^ 0x80);
-		  return 3;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xf8)
-	{
-	  if (n >= 4)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40
-		  && (c >= 0xf1 || s[1] >= 0x90)
-#if 1
-		  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
-#endif
-		 )
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x07) << 18)
-		         | ((unsigned int) (s[1] ^ 0x80) << 12)
-		         | ((unsigned int) (s[2] ^ 0x80) << 6)
-		         | (unsigned int) (s[3] ^ 0x80);
-		  return 4;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-#if 0
-      else if (c < 0xfc)
-	{
-	  if (n >= 5)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-		  && (c >= 0xf9 || s[1] >= 0x88))
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x03) << 24)
-		         | ((unsigned int) (s[1] ^ 0x80) << 18)
-		         | ((unsigned int) (s[2] ^ 0x80) << 12)
-		         | ((unsigned int) (s[3] ^ 0x80) << 6)
-		         | (unsigned int) (s[4] ^ 0x80);
-		  return 5;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xfe)
-	{
-	  if (n >= 6)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-		  && (s[5] ^ 0x80) < 0x40
-		  && (c >= 0xfd || s[1] >= 0x84))
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x01) << 30)
-		         | ((unsigned int) (s[1] ^ 0x80) << 24)
-		         | ((unsigned int) (s[2] ^ 0x80) << 18)
-		         | ((unsigned int) (s[3] ^ 0x80) << 12)
-		         | ((unsigned int) (s[4] ^ 0x80) << 6)
-		         | (unsigned int) (s[5] ^ 0x80);
-		  return 6;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-#endif
-    }
-  /* invalid multibyte character */
-  *puc = 0xfffd;
-  return 1;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr/u8-mbtouc-unsafe.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u8-mbtouc-unsafe.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u8-mbtouc-unsafe.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,173 +0,0 @@
-/* Look at first character in UTF-8 string.
-   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2001.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if !HAVE_INLINE
-
-int
-u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n)
-{
-  uint8_t c = *s;
-
-  if (c < 0x80)
-    {
-      *puc = c;
-      return 1;
-    }
-  else if (c >= 0xc2)
-    {
-      if (c < 0xe0)
-	{
-	  if (n >= 2)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40)
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x1f) << 6)
-		         | (unsigned int) (s[1] ^ 0x80);
-		  return 2;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xf0)
-	{
-	  if (n >= 3)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (c >= 0xe1 || s[1] >= 0xa0)
-		  && (c != 0xed || s[1] < 0xa0))
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x0f) << 12)
-		         | ((unsigned int) (s[1] ^ 0x80) << 6)
-		         | (unsigned int) (s[2] ^ 0x80);
-		  return 3;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xf8)
-	{
-	  if (n >= 4)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40
-		  && (c >= 0xf1 || s[1] >= 0x90)
-#if 1
-		  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
-#endif
-		 )
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x07) << 18)
-		         | ((unsigned int) (s[1] ^ 0x80) << 12)
-		         | ((unsigned int) (s[2] ^ 0x80) << 6)
-		         | (unsigned int) (s[3] ^ 0x80);
-		  return 4;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-#if 0
-      else if (c < 0xfc)
-	{
-	  if (n >= 5)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-		  && (c >= 0xf9 || s[1] >= 0x88))
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x03) << 24)
-		         | ((unsigned int) (s[1] ^ 0x80) << 18)
-		         | ((unsigned int) (s[2] ^ 0x80) << 12)
-		         | ((unsigned int) (s[3] ^ 0x80) << 6)
-		         | (unsigned int) (s[4] ^ 0x80);
-		  return 5;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xfe)
-	{
-	  if (n >= 6)
-	    {
-#if CONFIG_UNICODE_SAFETY
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-		  && (s[5] ^ 0x80) < 0x40
-		  && (c >= 0xfd || s[1] >= 0x84))
-#endif
-		{
-		  *puc = ((unsigned int) (c & 0x01) << 30)
-		         | ((unsigned int) (s[1] ^ 0x80) << 24)
-		         | ((unsigned int) (s[2] ^ 0x80) << 18)
-		         | ((unsigned int) (s[3] ^ 0x80) << 12)
-		         | ((unsigned int) (s[4] ^ 0x80) << 6)
-		         | (unsigned int) (s[5] ^ 0x80);
-		  return 6;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-#endif
-    }
-  /* invalid multibyte character */
-  *puc = 0xfffd;
-  return 1;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr/u8-mbtouc.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u8-mbtouc.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u8-mbtouc.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,163 +0,0 @@
-/* Look at first character in UTF-8 string.
-   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2001.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if !HAVE_INLINE
-
-int
-u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n)
-{
-  uint8_t c = *s;
-
-  if (c < 0x80)
-    {
-      *puc = c;
-      return 1;
-    }
-  else if (c >= 0xc2)
-    {
-      if (c < 0xe0)
-	{
-	  if (n >= 2)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40)
-		{
-		  *puc = ((unsigned int) (c & 0x1f) << 6)
-		         | (unsigned int) (s[1] ^ 0x80);
-		  return 2;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xf0)
-	{
-	  if (n >= 3)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (c >= 0xe1 || s[1] >= 0xa0)
-		  && (c != 0xed || s[1] < 0xa0))
-		{
-		  *puc = ((unsigned int) (c & 0x0f) << 12)
-		         | ((unsigned int) (s[1] ^ 0x80) << 6)
-		         | (unsigned int) (s[2] ^ 0x80);
-		  return 3;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xf8)
-	{
-	  if (n >= 4)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40
-		  && (c >= 0xf1 || s[1] >= 0x90)
-#if 1
-		  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
-#endif
-		 )
-		{
-		  *puc = ((unsigned int) (c & 0x07) << 18)
-		         | ((unsigned int) (s[1] ^ 0x80) << 12)
-		         | ((unsigned int) (s[2] ^ 0x80) << 6)
-		         | (unsigned int) (s[3] ^ 0x80);
-		  return 4;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-#if 0
-      else if (c < 0xfc)
-	{
-	  if (n >= 5)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-		  && (c >= 0xf9 || s[1] >= 0x88))
-		{
-		  *puc = ((unsigned int) (c & 0x03) << 24)
-		         | ((unsigned int) (s[1] ^ 0x80) << 18)
-		         | ((unsigned int) (s[2] ^ 0x80) << 12)
-		         | ((unsigned int) (s[3] ^ 0x80) << 6)
-		         | (unsigned int) (s[4] ^ 0x80);
-		  return 5;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-      else if (c < 0xfe)
-	{
-	  if (n >= 6)
-	    {
-	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-		  && (s[5] ^ 0x80) < 0x40
-		  && (c >= 0xfd || s[1] >= 0x84))
-		{
-		  *puc = ((unsigned int) (c & 0x01) << 30)
-		         | ((unsigned int) (s[1] ^ 0x80) << 24)
-		         | ((unsigned int) (s[2] ^ 0x80) << 18)
-		         | ((unsigned int) (s[3] ^ 0x80) << 12)
-		         | ((unsigned int) (s[4] ^ 0x80) << 6)
-		         | (unsigned int) (s[5] ^ 0x80);
-		  return 6;
-		}
-	      /* invalid multibyte character */
-	    }
-	  else
-	    {
-	      /* incomplete multibyte character */
-	      *puc = 0xfffd;
-	      return n;
-	    }
-	}
-#endif
-    }
-  /* invalid multibyte character */
-  *puc = 0xfffd;
-  return 1;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr/u8-uctomb-aux.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u8-uctomb-aux.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u8-uctomb-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,69 +0,0 @@
-/* Conversion UCS-4 to UTF-8.
-   Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2002.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-int
-u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n)
-{
-  int count;
-
-  if (uc < 0x80)
-    /* The case n >= 1 is already handled by the caller.  */
-    return -2;
-  else if (uc < 0x800)
-    count = 2;
-  else if (uc < 0x10000)
-    {
-      if (uc < 0xd800 || uc >= 0xe000)
-	count = 3;
-      else
-	return -1;
-    }
-#if 0
-  else if (uc < 0x200000)
-    count = 4;
-  else if (uc < 0x4000000)
-    count = 5;
-  else if (uc <= 0x7fffffff)
-    count = 6;
-#else
-  else if (uc < 0x110000)
-    count = 4;
-#endif
-  else
-    return -1;
-
-  if (n < count)
-    return -2;
-
-  switch (count) /* note: code falls through cases! */
-    {
-#if 0
-    case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000;
-    case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000;
-#endif
-    case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000;
-    case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800;
-    case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0;
-  /*case 1:*/ s[0] = uc;
-    }
-  return count;
-}

Deleted: tuxmath/trunk/linebreak/unistr/u8-uctomb.c
===================================================================
--- tuxmath/trunk/linebreak/unistr/u8-uctomb.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr/u8-uctomb.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,83 +0,0 @@
-/* Store a character in UTF-8 string.
-   Copyright (C) 2002, 2005-2006 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2002.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "unistr.h"
-
-#if !HAVE_INLINE
-
-int
-u8_uctomb (uint8_t *s, ucs4_t uc, int n)
-{
-  if (uc < 0x80)
-    {
-      if (n > 0)
-	{
-	  s[0] = uc;
-	  return 1;
-	}
-      /* else return -2, below.  */
-    }
-  else
-    {
-      int count;
-
-      if (uc < 0x800)
-	count = 2;
-      else if (uc < 0x10000)
-	{
-	  if (uc < 0xd800 || uc >= 0xe000)
-	    count = 3;
-	  else
-	    return -1;
-	}
-#if 0
-      else if (uc < 0x200000)
-	count = 4;
-      else if (uc < 0x4000000)
-	count = 5;
-      else if (uc <= 0x7fffffff)
-	count = 6;
-#else
-      else if (uc < 0x110000)
-	count = 4;
-#endif
-      else
-	return -1;
-
-      if (n >= count)
-	{
-	  switch (count) /* note: code falls through cases! */
-	    {
-#if 0
-	    case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000;
-	    case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000;
-#endif
-	    case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000;
-	    case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800;
-	    case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0;
-	  /*case 1:*/ s[0] = uc;
-	    }
-	  return count;
-	}
-    }
-  return -2;
-}
-
-#endif

Deleted: tuxmath/trunk/linebreak/unistr.h
===================================================================
--- tuxmath/trunk/linebreak/unistr.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unistr.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,661 +0,0 @@
-/* Elementary Unicode string functions.
-   Copyright (C) 2001-2002, 2005-2007 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _UNISTR_H
-#define _UNISTR_H
-
-#include "unitypes.h"
-
-/* Get bool.  */
-#include <stdbool.h>
-
-/* Get size_t.  */
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Conventions:
-
-   All functions prefixed with u8_ operate on UTF-8 encoded strings.
-   Their unit is an uint8_t (1 byte).
-
-   All functions prefixed with u16_ operate on UTF-16 encoded strings.
-   Their unit is an uint16_t (a 2-byte word).
-
-   All functions prefixed with u32_ operate on UCS-4 encoded strings.
-   Their unit is an uint32_t (a 4-byte word).
-
-   All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly
-   n units.
-
-   All arguments starting with "str" and the arguments of functions starting
-   with u8_str/u16_str/u32_str denote a NUL terminated string, i.e. a string
-   which terminates at the first NUL unit.  This termination unit is
-   considered part of the string for all memory allocation purposes, but
-   is not considered part of the string for all other logical purposes.
-
-   Functions returning a string result take a (resultbuf, lengthp) argument
-   pair.  If resultbuf is not NULL and the result fits into *lengthp units,
-   it is put in resultbuf, and resultbuf is returned.  Otherwise, a freshly
-   allocated string is returned.  In both cases, *lengthp is set to the
-   length (number of units) of the returned string.  In case of error,
-   NULL is returned and errno is set.  */
-
-
-/* Elementary string checks.  */
-
-/* Check whether an UTF-8 string is well-formed.
-   Return NULL if valid, or a pointer to the first invalid unit otherwise.  */
-extern const uint8_t *
-       u8_check (const uint8_t *s, size_t n);
-
-/* Check whether an UTF-16 string is well-formed.
-   Return NULL if valid, or a pointer to the first invalid unit otherwise.  */
-extern const uint16_t *
-       u16_check (const uint16_t *s, size_t n);
-
-/* Check whether an UCS-4 string is well-formed.
-   Return NULL if valid, or a pointer to the first invalid unit otherwise.  */
-extern const uint32_t *
-       u32_check (const uint32_t *s, size_t n);
-
-
-/* Elementary string conversions.  */
-
-/* Convert an UTF-8 string to an UTF-16 string.  */
-extern uint16_t *
-       u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf,
-		  size_t *lengthp);
-
-/* Convert an UTF-8 string to an UCS-4 string.  */
-extern uint32_t *
-       u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf,
-		  size_t *lengthp);
-
-/* Convert an UTF-16 string to an UTF-8 string.  */
-extern uint8_t *
-       u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf,
-		  size_t *lengthp);
-
-/* Convert an UTF-16 string to an UCS-4 string.  */
-extern uint32_t *
-       u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf,
-		   size_t *lengthp);
-
-/* Convert an UCS-4 string to an UTF-8 string.  */
-extern uint8_t *
-       u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf,
-		  size_t *lengthp);
-
-/* Convert an UCS-4 string to an UTF-16 string.  */
-extern uint16_t *
-       u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf,
-		   size_t *lengthp);
-
-
-/* Elementary string functions.  */
-
-/* Return the length (number of units) of the first character in S, which is
-   no longer than N.  Return 0 if it is the NUL character.  Return -1 upon
-   failure.  */
-/* Similar to mblen(), except that s must not be NULL.  */
-extern int
-       u8_mblen (const uint8_t *s, size_t n);
-extern int
-       u16_mblen (const uint16_t *s, size_t n);
-extern int
-       u32_mblen (const uint32_t *s, size_t n);
-
-/* Return the length (number of units) of the first character in S, putting
-   its 'ucs4_t' representation in *PUC.  Upon failure, *PUC is set to 0xfffd,
-   and an appropriate number of units is returned.
-   The number of available units, N, must be > 0.  */
-/* Similar to mbtowc(), except that puc and s must not be NULL, n must be > 0,
-   and the NUL character is not treated specially.  */
-/* The variants with _safe suffix are safe, even if the library is compiled
-   without --enable-safety.  */
-
-#ifdef GNULIB_UNISTR_U8_MBTOUC_UNSAFE
-# if !HAVE_INLINE
-extern int
-       u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n);
-# else
-extern int
-       u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n);
-static inline int
-u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n)
-{
-  uint8_t c = *s;
-
-  if (c < 0x80)
-    {
-      *puc = c;
-      return 1;
-    }
-  else
-    return u8_mbtouc_unsafe_aux (puc, s, n);
-}
-# endif
-#endif
-
-#ifdef GNULIB_UNISTR_U16_MBTOUC_UNSAFE
-# if !HAVE_INLINE
-extern int
-       u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n);
-# else
-extern int
-       u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n);
-static inline int
-u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n)
-{
-  uint16_t c = *s;
-
-  if (c < 0xd800 || c >= 0xe000)
-    {
-      *puc = c;
-      return 1;
-    }
-  else
-    return u16_mbtouc_unsafe_aux (puc, s, n);
-}
-# endif
-#endif
-
-#ifdef GNULIB_UNISTR_U32_MBTOUC_UNSAFE
-# if !HAVE_INLINE
-extern int
-       u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n);
-# else
-static inline int
-u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n)
-{
-  uint32_t c = *s;
-
-#  if CONFIG_UNICODE_SAFETY
-  if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))
-#  endif
-    *puc = c;
-#  if CONFIG_UNICODE_SAFETY
-  else
-    /* invalid multibyte character */
-    *puc = 0xfffd;
-#  endif
-  return 1;
-}
-# endif
-#endif
-
-#ifdef GNULIB_UNISTR_U8_MBTOUC
-# if !HAVE_INLINE
-extern int
-       u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n);
-# else
-extern int
-       u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n);
-static inline int
-u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n)
-{
-  uint8_t c = *s;
-
-  if (c < 0x80)
-    {
-      *puc = c;
-      return 1;
-    }
-  else
-    return u8_mbtouc_aux (puc, s, n);
-}
-# endif
-#endif
-
-#ifdef GNULIB_UNISTR_U16_MBTOUC
-# if !HAVE_INLINE
-extern int
-       u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n);
-# else
-extern int
-       u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n);
-static inline int
-u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n)
-{
-  uint16_t c = *s;
-
-  if (c < 0xd800 || c >= 0xe000)
-    {
-      *puc = c;
-      return 1;
-    }
-  else
-    return u16_mbtouc_aux (puc, s, n);
-}
-# endif
-#endif
-
-#ifdef GNULIB_UNISTR_U32_MBTOUC
-# if !HAVE_INLINE
-extern int
-       u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n);
-# else
-static inline int
-u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n)
-{
-  uint32_t c = *s;
-
-  if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))
-    *puc = c;
-  else
-    /* invalid multibyte character */
-    *puc = 0xfffd;
-  return 1;
-}
-# endif
-#endif
-
-/* Return the length (number of units) of the first character in S, putting
-   its 'ucs4_t' representation in *PUC.  Upon failure, *PUC is set to 0xfffd,
-   and -1 is returned for an invalid sequence of units, -2 is returned for an
-   incomplete sequence of units.
-   The number of available units, N, must be > 0.  */
-/* Similar to u*_mbtouc(), except that the return value gives more details
-   about the failure, similar to mbrtowc().  */
-
-#ifdef GNULIB_UNISTR_U8_MBTOUCR
-extern int
-       u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n);
-#endif
-
-#ifdef GNULIB_UNISTR_U16_MBTOUCR
-extern int
-       u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n);
-#endif
-
-#ifdef GNULIB_UNISTR_U32_MBTOUCR
-extern int
-       u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n);
-#endif
-
-/* Put the multibyte character represented by UC in S, returning its
-   length.  Return -1 upon failure, -2 if the number of available units, N,
-   is too small.  The latter case cannot occur if N >= 6/2/1, respectively.  */
-/* Similar to wctomb(), except that s must not be NULL, and the argument n
-   must be specified.  */
-
-#ifdef GNULIB_UNISTR_U8_UCTOMB
-/* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr.  */
-extern int
-       u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n);
-# if !HAVE_INLINE
-extern int
-       u8_uctomb (uint8_t *s, ucs4_t uc, int n);
-# else
-static inline int
-u8_uctomb (uint8_t *s, ucs4_t uc, int n)
-{
-  if (uc < 0x80 && n > 0)
-    {
-      s[0] = uc;
-      return 1;
-    }
-  else
-    return u8_uctomb_aux (s, uc, n);
-}
-# endif
-#endif
-
-#ifdef GNULIB_UNISTR_U16_UCTOMB
-/* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr.  */
-extern int
-       u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n);
-# if !HAVE_INLINE
-extern int
-       u16_uctomb (uint16_t *s, ucs4_t uc, int n);
-# else
-static inline int
-u16_uctomb (uint16_t *s, ucs4_t uc, int n)
-{
-  if (uc < 0xd800 && n > 0)
-    {
-      s[0] = uc;
-      return 1;
-    }
-  else
-    return u16_uctomb_aux (s, uc, n);
-}
-# endif
-#endif
-
-#ifdef GNULIB_UNISTR_U32_UCTOMB
-# if !HAVE_INLINE
-extern int
-       u32_uctomb (uint32_t *s, ucs4_t uc, int n);
-# else
-static inline int
-u32_uctomb (uint32_t *s, ucs4_t uc, int n)
-{
-  if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000))
-    {
-      if (n > 0)
-	{
-	  *s = uc;
-	  return 1;
-	}
-      else
-	return -2;
-    }
-  else
-    return -1;
-}
-# endif
-#endif
-
-/* Copy N units from SRC to DEST.  */
-/* Similar to memcpy().  */
-extern uint8_t *
-       u8_cpy (uint8_t *dest, const uint8_t *src, size_t n);
-extern uint16_t *
-       u16_cpy (uint16_t *dest, const uint16_t *src, size_t n);
-extern uint32_t *
-       u32_cpy (uint32_t *dest, const uint32_t *src, size_t n);
-
-/* Copy N units from SRC to DEST, guaranteeing correct behavior for
-   overlapping memory areas.  */
-/* Similar to memmove().  */
-extern uint8_t *
-       u8_move (uint8_t *dest, const uint8_t *src, size_t n);
-extern uint16_t *
-       u16_move (uint16_t *dest, const uint16_t *src, size_t n);
-extern uint32_t *
-       u32_move (uint32_t *dest, const uint32_t *src, size_t n);
-
-/* Set the first N characters of S to UC.  UC should be a character that
-   occupies only 1 unit.  */
-/* Similar to memset().  */
-extern uint8_t *
-       u8_set (uint8_t *s, ucs4_t uc, size_t n);
-extern uint16_t *
-       u16_set (uint16_t *s, ucs4_t uc, size_t n);
-extern uint32_t *
-       u32_set (uint32_t *s, ucs4_t uc, size_t n);
-
-/* Compare S1 and S2, each of length N.  */
-/* Similar to memcmp().  */
-extern int
-       u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n);
-extern int
-       u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n);
-extern int
-       u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n);
-
-/* Search the string at S for UC.  */
-/* Similar to memchr().  */
-extern uint8_t *
-       u8_chr (const uint8_t *s, size_t n, ucs4_t uc);
-extern uint16_t *
-       u16_chr (const uint16_t *s, size_t n, ucs4_t uc);
-extern uint32_t *
-       u32_chr (const uint32_t *s, size_t n, ucs4_t uc);
-
-/* Count the number of Unicode characters in the N units from S.  */
-/* Similar to mbsnlen().  */
-extern size_t
-       u8_mbsnlen (const uint8_t *s, size_t n);
-extern size_t
-       u16_mbsnlen (const uint16_t *s, size_t n);
-extern size_t
-       u32_mbsnlen (const uint32_t *s, size_t n);
-
-/* Elementary string functions with memory allocation.  */
-
-/* Make a freshly allocated copy of S, of length N.  */
-extern uint8_t *
-       u8_cpy_alloc (const uint8_t *s, size_t n);
-extern uint16_t *
-       u16_cpy_alloc (const uint16_t *s, size_t n);
-extern uint32_t *
-       u32_cpy_alloc (const uint32_t *s, size_t n);
-
-/* Elementary string functions on NUL terminated strings.  */
-
-/* Return the length (number of units) of the first character in S.
-   Return 0 if it is the NUL character.  Return -1 upon failure.  */
-extern int
-       u8_strmblen (const uint8_t *s);
-extern int
-       u16_strmblen (const uint16_t *s);
-extern int
-       u32_strmblen (const uint32_t *s);
-
-/* Return the length (number of units) of the first character in S, putting
-   its 'ucs4_t' representation in *PUC.  Return 0 if it is the NUL
-   character.  Return -1 upon failure.  */
-extern int
-       u8_strmbtouc (ucs4_t *puc, const uint8_t *s);
-extern int
-       u16_strmbtouc (ucs4_t *puc, const uint16_t *s);
-extern int
-       u32_strmbtouc (ucs4_t *puc, const uint32_t *s);
-
-/* Forward iteration step.  Advances the pointer past the next character,
-   or returns NULL if the end of the string has been reached.  Puts the
-   character's 'ucs4_t' representation in *PUC.  */
-extern const uint8_t *
-       u8_next (ucs4_t *puc, const uint8_t *s);
-extern const uint16_t *
-       u16_next (ucs4_t *puc, const uint16_t *s);
-extern const uint32_t *
-       u32_next (ucs4_t *puc, const uint32_t *s);
-
-/* Backward iteration step.  Advances the pointer to point to the previous
-   character, or returns NULL if the beginning of the string had been reached.
-   Puts the character's 'ucs4_t' representation in *PUC.  */
-extern const uint8_t *
-       u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start);
-extern const uint16_t *
-       u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start);
-extern const uint32_t *
-       u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start);
-
-/* Return the number of units in S.  */
-/* Similar to strlen(), wcslen().  */
-extern size_t
-       u8_strlen (const uint8_t *s);
-extern size_t
-       u16_strlen (const uint16_t *s);
-extern size_t
-       u32_strlen (const uint32_t *s);
-
-/* Return the number of units in S, but at most MAXLEN.  */
-/* Similar to strnlen(), wcsnlen().  */
-extern size_t
-       u8_strnlen (const uint8_t *s, size_t maxlen);
-extern size_t
-       u16_strnlen (const uint16_t *s, size_t maxlen);
-extern size_t
-       u32_strnlen (const uint32_t *s, size_t maxlen);
-
-/* Copy SRC to DEST.  */
-/* Similar to strcpy(), wcscpy().  */
-extern uint8_t *
-       u8_strcpy (uint8_t *dest, const uint8_t *src);
-extern uint16_t *
-       u16_strcpy (uint16_t *dest, const uint16_t *src);
-extern uint32_t *
-       u32_strcpy (uint32_t *dest, const uint32_t *src);
-
-/* Copy SRC to DEST, returning the address of the terminating NUL in DEST.  */
-/* Similar to stpcpy().  */
-extern uint8_t *
-       u8_stpcpy (uint8_t *dest, const uint8_t *src);
-extern uint16_t *
-       u16_stpcpy (uint16_t *dest, const uint16_t *src);
-extern uint32_t *
-       u32_stpcpy (uint32_t *dest, const uint32_t *src);
-
-/* Copy no more than N units of SRC to DEST.  */
-/* Similar to strncpy(), wcsncpy().  */
-extern uint8_t *
-       u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n);
-extern uint16_t *
-       u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n);
-extern uint32_t *
-       u32_strncpy (uint32_t *dest, const uint32_t *src, size_t n);
-
-/* Copy no more than N characters of SRC to DEST, returning the address of
-   the last character written into DEST.  */
-/* Similar to stpncpy().  */
-extern uint8_t *
-       u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n);
-extern uint16_t *
-       u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n);
-extern uint32_t *
-       u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n);
-
-/* Append SRC onto DEST.  */
-/* Similar to strcat(), wcscat().  */
-extern uint8_t *
-       u8_strcat (uint8_t *dest, const uint8_t *src);
-extern uint16_t *
-       u16_strcat (uint16_t *dest, const uint16_t *src);
-extern uint32_t *
-       u32_strcat (uint32_t *dest, const uint32_t *src);
-
-/* Append no more than N units of SRC onto DEST.  */
-/* Similar to strncat(), wcsncat().  */
-extern uint8_t *
-       u8_strncat (uint8_t *dest, const uint8_t *src, size_t n);
-extern uint16_t *
-       u16_strncat (uint16_t *dest, const uint16_t *src, size_t n);
-extern uint32_t *
-       u32_strncat (uint32_t *dest, const uint32_t *src, size_t n);
-
-/* Compare S1 and S2.  */
-/* Similar to strcmp(), wcscmp().  */
-extern int
-       u8_strcmp (const uint8_t *s1, const uint8_t *s2);
-extern int
-       u16_strcmp (const uint16_t *s1, const uint16_t *s2);
-extern int
-       u32_strcmp (const uint32_t *s1, const uint32_t *s2);
-
-/* Compare no more than N units of S1 and S2.  */
-/* Similar to strncmp(), wcsncmp().  */
-extern int
-       u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n);
-extern int
-       u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n);
-extern int
-       u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n);
-
-/* Duplicate S, returning an identical malloc'd string.  */
-/* Similar to strdup(), wcsdup().  */
-extern uint8_t *
-       u8_strdup (const uint8_t *s);
-extern uint16_t *
-       u16_strdup (const uint16_t *s);
-extern uint32_t *
-       u32_strdup (const uint32_t *s);
-
-/* Find the first occurrence of UC in STR.  */
-/* Similar to strchr(), wcschr().  */
-extern uint8_t *
-       u8_strchr (const uint8_t *str, ucs4_t uc);
-extern uint16_t *
-       u16_strchr (const uint16_t *str, ucs4_t uc);
-extern uint32_t *
-       u32_strchr (const uint32_t *str, ucs4_t uc);
-
-/* Find the last occurrence of UC in STR.  */
-/* Similar to strrchr(), wcsrchr().  */
-extern uint8_t *
-       u8_strrchr (const uint8_t *str, ucs4_t uc);
-extern uint16_t *
-       u16_strrchr (const uint16_t *str, ucs4_t uc);
-extern uint32_t *
-       u32_strrchr (const uint32_t *str, ucs4_t uc);
-
-/* Return the length of the initial segment of STR which consists entirely
-   of Unicode characters not in REJECT.  */
-/* Similar to strcspn(), wcscspn().  */
-extern size_t
-       u8_strcspn (const uint8_t *str, const uint8_t *reject);
-extern size_t
-       u16_strcspn (const uint16_t *str, const uint16_t *reject);
-extern size_t
-       u32_strcspn (const uint32_t *str, const uint32_t *reject);
-
-/* Return the length of the initial segment of STR which consists entirely
-   of Unicode characters in ACCEPT.  */
-/* Similar to strspn(), wcsspn().  */
-extern size_t
-       u8_strspn (const uint8_t *str, const uint8_t *accept);
-extern size_t
-       u16_strspn (const uint16_t *str, const uint16_t *accept);
-extern size_t
-       u32_strspn (const uint32_t *str, const uint32_t *accept);
-
-/* Find the first occurrence in STR of any character in ACCEPT.  */
-/* Similar to strpbrk(), wcspbrk().  */
-extern uint8_t *
-       u8_strpbrk (const uint8_t *str, const uint8_t *accept);
-extern uint16_t *
-       u16_strpbrk (const uint16_t *str, const uint16_t *accept);
-extern uint32_t *
-       u32_strpbrk (const uint32_t *str, const uint32_t *accept);
-
-/* Find the first occurrence of NEEDLE in HAYSTACK.  */
-/* Similar to strstr(), wcsstr().  */
-extern uint8_t *
-       u8_strstr (const uint8_t *haystack, const uint8_t *needle);
-extern uint16_t *
-       u16_strstr (const uint16_t *haystack, const uint16_t *needle);
-extern uint32_t *
-       u32_strstr (const uint32_t *haystack, const uint32_t *needle);
-
-/* Test whether STR starts with PREFIX.  */
-extern bool
-       u8_startswith (const uint8_t *str, const uint8_t *prefix);
-extern bool
-       u16_startswith (const uint16_t *str, const uint16_t *prefix);
-extern bool
-       u32_startswith (const uint32_t *str, const uint32_t *prefix);
-
-/* Test whether STR ends with SUFFIX.  */
-extern bool
-       u8_endswith (const uint8_t *str, const uint8_t *suffix);
-extern bool
-       u16_endswith (const uint16_t *str, const uint16_t *suffix);
-extern bool
-       u32_endswith (const uint32_t *str, const uint32_t *suffix);
-
-/* Divide STR into tokens separated by characters in DELIM.
-   This interface is actually more similar to wcstok than to strtok.  */
-/* Similar to strtok_r(), wcstok().  */
-extern uint8_t *
-       u8_strtok (uint8_t *str, const uint8_t *delim, uint8_t **ptr);
-extern uint16_t *
-       u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr);
-extern uint32_t *
-       u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _UNISTR_H */

Deleted: tuxmath/trunk/linebreak/unitypes.h
===================================================================
--- tuxmath/trunk/linebreak/unitypes.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/unitypes.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,26 +0,0 @@
-/* Elementary types for the GNU UniString library.
-   Copyright (C) 2002, 2005-2006 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _UNITYPES_H
-#define _UNITYPES_H
-
-/* Get uint8_t, uint16_t, uint32_t.  */
-#include <stdint.h>
-
-/* Type representing a Unicode character.  */
-typedef uint32_t ucs4_t;
-
-#endif /* _UNITYPES_H */

Deleted: tuxmath/trunk/linebreak/uniwidth/cjk.h
===================================================================
--- tuxmath/trunk/linebreak/uniwidth/cjk.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/uniwidth/cjk.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,37 +0,0 @@
-/* Test for CJK encoding.
-   Copyright (C) 2001-2002, 2005-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2002.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "streq.h"
-
-static int
-is_cjk_encoding (const char *encoding)
-{
-  if (0
-      /* Legacy Japanese encodings */
-      || STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
-      /* Legacy Chinese encodings */
-      || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
-      || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
-      || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
-      || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
-      /* Legacy Korean encodings */
-      || STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-      || STREQ (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
-      || STREQ (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
-    return 1;
-  return 0;
-}

Deleted: tuxmath/trunk/linebreak/uniwidth/width.c
===================================================================
--- tuxmath/trunk/linebreak/uniwidth/width.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/uniwidth/width.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,323 +0,0 @@
-/* Determine display width of Unicode character.
-   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno at clisp.org>, 2002.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "uniwidth.h"
-
-#include "cjk.h"
-
-/*
- * Non-spacing attribute table.
- * Consists of:
- * - Non-spacing characters; generated from PropList.txt or
- *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
- * - Format control characters; generated from
- *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
- * - Zero width characters; generated from
- *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
- */
-static const unsigned char nonspacing_table_data[22*64] = {
-  /* 0x0000-0x01ff */
-  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
-  0xff, 0xff, 0xff, 0xff, 0x00, 0x08, 0x00, 0x00, /* 0x0080-0x00bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
-  /* 0x0200-0x03ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
-  /* 0x0400-0x05ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
-  0x78, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
-  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
-  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
-  /* 0x0600-0x07ff */
-  0x0f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
-  0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
-  0x00, 0x00, 0xc0, 0xff, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
-  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
-  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
-  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
-  /* 0x0800-0x09ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0800-0x083f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0900-0x093f */
-  0xfe, 0x21, 0x1e, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
-  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
-  /* 0x0a00-0x0bff */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
-  0x86, 0x39, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0x0a40-0x0a7f */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
-  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
-  0x0e, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
-  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
-  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
-  /* 0x0c00-0x0dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
-  0xc1, 0x3d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
-  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
-  0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
-  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
-  /* 0x0e00-0x0fff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
-  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
-  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
-  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
-  0xdf, 0x00, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
-  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
-  /* 0x1000-0x11ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc5, 0x02, /* 0x1000-0x103f */
-  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0x1040-0x107f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
-  /* 0x1200-0x13ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
-  0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
-  /* 0x1600-0x17ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
-  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
-  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
-  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
-  /* 0x1800-0x19ff */
-  0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
-  0x00, 0x00, 0x00, 0x00, 0x87, 0x0f, 0x04, 0x0e, /* 0x1900-0x193f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
-  /* 0x1a00-0x1bff */
-  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a40-0x1a7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
-  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
-  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b80-0x1bbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc0-0x1bff */
-  /* 0x1c00-0x1dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c00-0x1c3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cc0-0x1cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
-  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x1dc0-0x1dff */
-  /* 0x2000-0x21ff */
-  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
-  0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
-  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x20c0-0x20ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
-  /* 0x3000-0x31ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
-  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
-  /* 0xa800-0xa9ff */
-  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8c0-0xa8ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa900-0xa93f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa980-0xa9bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
-  /* 0xfa00-0xfbff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
-  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
-  /* 0xfe00-0xffff */
-  0xff, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
-  /* 0x10a00-0x10bff */
-  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
-  /* 0x1d000-0x1d1ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
-  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xf8, /* 0x1d140-0x1d17f */
-  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
-  /* 0x1d200-0x1d3ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
-  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d3c0-0x1d3ff */
-};
-static const signed char nonspacing_table_ind[240] = {
-   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
-   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
-  14, -1, -1, -1, -1, -1, -1, -1, /* 0x2000-0x2fff */
-  15, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
-  -1, -1, -1, -1, 16, -1, -1, -1, /* 0xa000-0xafff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
-  -1, -1, -1, -1, -1, 17, -1, 18, /* 0xf000-0xffff */
-  -1, -1, -1, -1, -1, 19, -1, -1, /* 0x10000-0x10fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
-  20, 21, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
-};
-
-/* Determine number of column positions required for UC.  */
-int
-uc_width (ucs4_t uc, const char *encoding)
-{
-  /* Test for non-spacing or control character.  */
-  if ((uc >> 9) < 240)
-    {
-      int ind = nonspacing_table_ind[uc >> 9];
-      if (ind >= 0)
-	if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
-	  {
-	    if (uc > 0 && uc < 0xa0)
-	      return -1;
-	    else
-	      return 0;
-	  }
-    }
-  else if ((uc >> 9) == (0xe0000 >> 9))
-    {
-      if (uc >= 0xe0100)
-	{
-	  if (uc <= 0xe01ef)
-	    return 0;
-	}
-      else
-	{
-	  if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
-	    return 0;
-	}
-    }
-  /* Test for double-width character.
-   * Generated from "grep '^....;[WF]' EastAsianWidth.txt"
-   * and            "grep '^....;[^WF]' EastAsianWidth.txt"
-   */
-  if (uc >= 0x1100
-      && ((uc < 0x1160) /* Hangul Jamo */
-	  || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
-	  || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
-	      && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
-	  || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
-	  || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
-	  || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
-	  || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
-	  || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
-	  || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
-	  || (uc >= 0x20000 && uc <= 0x2a6d6) /* CJK */
-	  || (uc >= 0x2f800 && uc <= 0x2fa1d) /* CJK Compatibility Ideographs */
-     )   )
-    return 2;
-  /* In ancient CJK encodings, Cyrillic and most other characters are
-     double-width as well.  */
-  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
-      && is_cjk_encoding (encoding))
-    return 2;
-  return 1;
-}

Deleted: tuxmath/trunk/linebreak/uniwidth.h
===================================================================
--- tuxmath/trunk/linebreak/uniwidth.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/uniwidth.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,64 +0,0 @@
-/* Display width functions.
-   Copyright (C) 2001-2002, 2005, 2007 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _UNIWIDTH_H
-#define _UNIWIDTH_H
-
-#include "unitypes.h"
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get locale_charset() declaration.  */
-#include "localcharset.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Display width.  */
-
-/* These functions are locale dependent.  The encoding argument identifies
-   the encoding (e.g. "ISO-8859-2" for Polish).  */
-
-/* Determine number of column positions required for UC.  */
-extern int
-       uc_width (ucs4_t uc, const char *encoding);
-
-/* Determine number of column positions required for first N units
-   (or fewer if S ends before this) in S.  */
-extern int
-       u8_width (const uint8_t *s, size_t n, const char *encoding);
-extern int
-       u16_width (const uint16_t *s, size_t n, const char *encoding);
-extern int
-       u32_width (const uint32_t *s, size_t n, const char *encoding);
-
-/* Determine number of column positions required for S.  */
-extern int
-       u8_strwidth (const uint8_t *s, const char *encoding);
-extern int
-       u16_strwidth (const uint16_t *s, const char *encoding);
-extern int
-       u32_strwidth (const uint32_t *s, const char *encoding);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _UNIWIDTH_H */

Deleted: tuxmath/trunk/linebreak/xsize.h
===================================================================
--- tuxmath/trunk/linebreak/xsize.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/linebreak/xsize.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -1,108 +0,0 @@
-/* xsize.h -- Checked size_t computations.
-
-   Copyright (C) 2003 Free Software Foundation, Inc.
-
-   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, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _XSIZE_H
-#define _XSIZE_H
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get SIZE_MAX.  */
-#include <limits.h>
-#if HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-/* The size of memory objects is often computed through expressions of
-   type size_t. Example:
-      void* p = malloc (header_size + n * element_size).
-   These computations can lead to overflow.  When this happens, malloc()
-   returns a piece of memory that is way too small, and the program then
-   crashes while attempting to fill the memory.
-   To avoid this, the functions and macros in this file check for overflow.
-   The convention is that SIZE_MAX represents overflow.
-   malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
-   implementation that uses mmap --, it's recommended to use size_overflow_p()
-   or size_in_bounds_p() before invoking malloc().
-   The example thus becomes:
-      size_t size = xsum (header_size, xtimes (n, element_size));
-      void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
-*/
-
-/* Convert an arbitrary value >= 0 to type size_t.  */
-#define xcast_size_t(N) \
-  ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
-
-/* Sum of two sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum (size_t size1, size_t size2)
-{
-  size_t sum = size1 + size2;
-  return (sum >= size1 ? sum : SIZE_MAX);
-}
-
-/* Sum of three sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum3 (size_t size1, size_t size2, size_t size3)
-{
-  return xsum (xsum (size1, size2), size3);
-}
-
-/* Sum of four sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
-{
-  return xsum (xsum (xsum (size1, size2), size3), size4);
-}
-
-/* Maximum of two sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xmax (size_t size1, size_t size2)
-{
-  /* No explicit check is needed here, because for any n:
-     max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX.  */
-  return (size1 >= size2 ? size1 : size2);
-}
-
-/* Multiplication of a count with an element size, with overflow check.
-   The count must be >= 0 and the element size must be > 0.
-   This is a macro, not an inline function, so that it works correctly even
-   when N is of a wider tupe and N > SIZE_MAX.  */
-#define xtimes(N, ELSIZE) \
-  ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
-
-/* Check for overflow.  */
-#define size_overflow_p(SIZE) \
-  ((SIZE) == SIZE_MAX)
-/* Check against overflow.  */
-#define size_in_bounds_p(SIZE) \
-  ((SIZE) != SIZE_MAX)
-
-#endif /* _XSIZE_H */

Modified: tuxmath/trunk/po/ar.po
===================================================================
--- tuxmath/trunk/po/ar.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/ar.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -2,7 +2,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-02-15 03:00+0100\n"
 "Last-Translator: Caroline Ford <caroline.ford.work at googlemail.com>\n"
 "Language-Team: \n"
@@ -25,191 +25,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-#, fuzzy
-msgid "the penguins' igloos. To save their homes,"
-msgstr "اكواخ البطاريق من"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 
@@ -739,3 +654,7 @@
 #: data/missions/lessons/descr_lessons:58
 msgid "Division of Positives and Negatives"
 msgstr "قسمة الأرقام الموجية والسالبة"
+
+#, fuzzy
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "اكواخ البطاريق من"

Modified: tuxmath/trunk/po/cs.po
===================================================================
--- tuxmath/trunk/po/cs.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/cs.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2007-11-12 20:54+0100\n"
 "Last-Translator: JardaK <krejci at zstenis.com>\n"
 "Language-Team: czech <cs at li.org>\n"
@@ -30,190 +30,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/de.po
===================================================================
--- tuxmath/trunk/po/de.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/de.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-05-02 16:08+0200\n"
 "Last-Translator: Lars Vogdt <lars at linux-schulserver.de>\n"
 "MIME-Version: 1.0\n"
@@ -27,191 +27,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-#, fuzzy
-msgid "the penguins' igloos. To save their homes,"
-msgstr "die Iglus der Pinguine vor den "
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 
@@ -742,3 +657,7 @@
 #: data/missions/lessons/descr_lessons:58
 msgid "Division of Positives and Negatives"
 msgstr "Division von positiven und negativen Zahlen"
+
+#, fuzzy
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "die Iglus der Pinguine vor den "

Modified: tuxmath/trunk/po/en at boldquot.po
===================================================================
--- tuxmath/trunk/po/en at boldquot.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/en at boldquot.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -31,8 +31,8 @@
 msgstr ""
 "Project-Id-Version: tuxmath 1.7.1\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
-"PO-Revision-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
+"PO-Revision-Date: 2009-02-06 11:04-0600\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -53,190 +53,126 @@
 msgstr "I'm so glad you've come!"
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
-msgstr "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
+msgstr ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr "are falling from the sky, and are melting"
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr "the penguins' igloos. To save their homes,"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr "we need you to find the secret code that"
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr " will zap each comet."
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr "Do your best!"
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr "Mission Two: Smart Scout"
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
-msgstr "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
+msgstr ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
-msgstr "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
+msgstr ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
-msgstr "for keeping an eye out for trouble..."
-
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr "...like what's happening right now!"
-
-#: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
-msgstr "The TakeAways have come, and they're sending"
-
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr "new, trickier comets against the penguins!"
-
-#: src/campaign.h:50
+#: src/campaign.h:42
 msgid "But you can save them!"
 msgstr "But you can save them!"
 
-#: src/campaign.h:56
+#: src/campaign.h:48
 msgid "Mission Three: Royal Ranger"
 msgstr "Mission Three: Royal Ranger"
 
-#: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
-msgstr "You've done it again! The Penguin Emperor has"
+#: src/campaign.h:50
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
+msgstr ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr "chosen you to join his team of Rangers that"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
+msgstr ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 
-#: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
-msgstr "help protect the city.  We're sending you"
-
-#: src/campaign.h:61
-msgid "there now..."
-msgstr "there now..."
-
-#: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
-msgstr "...oh no! Now the Emperor himself is under attack,"
-
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr "from new types of comets: these problems are"
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr "multiplying! To fight these, you need great"
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr "skill. We think you can do it. Join the"
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr "Rangers and help save the city!"
-
-#: src/campaign.h:73
+#: src/campaign.h:58
 msgid "Mission Four: Imperial Ace"
 msgstr "Mission Four: Imperial Ace"
 
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr "You did it! The Emperor wants to thank you"
+#: src/campaign.h:60
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
+msgstr ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr "in person. We are taking you to his ice palace"
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
+msgstr ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr "for a great honor: you will become"
+#: src/campaign.h:63
+msgid "Now is no time for resting; the city needs your help!"
+msgstr "Now is no time for resting; the city needs your help!"
 
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr "the Imperial Ace!"
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr "But right in the middle of the ceremony,"
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr "a new attack from the land of Division starts!"
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr "Now is no time for resting; the city"
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr "needs your help!"
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr "Final Mission: Computing Commando"
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
-msgstr "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
+msgstr ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr "these attacks are coming from a secret"
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr "base, and they need you to go fight"
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr "the final battle. They also give you"
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr "this clue: first do multiplication and"
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr "division, and then do addition and subtraction."
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr "I hope that hint helps!"
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
-msgstr "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
+msgstr "This is it! You can stop these attacks forever, Commando!"
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr "forever, Commando!"
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr "Congratulations! You win!"
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr "Round"
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr "Sorry, try again!"
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr "Mission accomplished. The galaxy is safe!"
 

Modified: tuxmath/trunk/po/en at quot.po
===================================================================
--- tuxmath/trunk/po/en at quot.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/en at quot.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -28,8 +28,8 @@
 msgstr ""
 "Project-Id-Version: tuxmath 1.7.1\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
-"PO-Revision-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
+"PO-Revision-Date: 2009-02-06 11:04-0600\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -50,190 +50,126 @@
 msgstr "I'm so glad you've come!"
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
-msgstr "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
+msgstr ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr "are falling from the sky, and are melting"
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr "the penguins' igloos. To save their homes,"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr "we need you to find the secret code that"
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr " will zap each comet."
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr "Do your best!"
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr "Mission Two: Smart Scout"
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
-msgstr "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
+msgstr ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
-msgstr "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
+msgstr ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
-msgstr "for keeping an eye out for trouble..."
-
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr "...like what's happening right now!"
-
-#: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
-msgstr "The TakeAways have come, and they're sending"
-
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr "new, trickier comets against the penguins!"
-
-#: src/campaign.h:50
+#: src/campaign.h:42
 msgid "But you can save them!"
 msgstr "But you can save them!"
 
-#: src/campaign.h:56
+#: src/campaign.h:48
 msgid "Mission Three: Royal Ranger"
 msgstr "Mission Three: Royal Ranger"
 
-#: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
-msgstr "You've done it again! The Penguin Emperor has"
+#: src/campaign.h:50
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
+msgstr ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr "chosen you to join his team of Rangers that"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
+msgstr ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 
-#: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
-msgstr "help protect the city.  We're sending you"
-
-#: src/campaign.h:61
-msgid "there now..."
-msgstr "there now..."
-
-#: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
-msgstr "...oh no! Now the Emperor himself is under attack,"
-
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr "from new types of comets: these problems are"
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr "multiplying! To fight these, you need great"
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr "skill. We think you can do it. Join the"
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr "Rangers and help save the city!"
-
-#: src/campaign.h:73
+#: src/campaign.h:58
 msgid "Mission Four: Imperial Ace"
 msgstr "Mission Four: Imperial Ace"
 
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr "You did it! The Emperor wants to thank you"
+#: src/campaign.h:60
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
+msgstr ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr "in person. We are taking you to his ice palace"
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
+msgstr ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr "for a great honor: you will become"
+#: src/campaign.h:63
+msgid "Now is no time for resting; the city needs your help!"
+msgstr "Now is no time for resting; the city needs your help!"
 
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr "the Imperial Ace!"
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr "But right in the middle of the ceremony,"
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr "a new attack from the land of Division starts!"
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr "Now is no time for resting; the city"
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr "needs your help!"
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr "Final Mission: Computing Commando"
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
-msgstr "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
+msgstr ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr "these attacks are coming from a secret"
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr "base, and they need you to go fight"
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr "the final battle. They also give you"
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr "this clue: first do multiplication and"
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr "division, and then do addition and subtraction."
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr "I hope that hint helps!"
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
-msgstr "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
+msgstr "This is it! You can stop these attacks forever, Commando!"
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr "forever, Commando!"
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr "Congratulations! You win!"
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr "Round"
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr "Sorry, try again!"
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr "Mission accomplished. The galaxy is safe!"
 

Modified: tuxmath/trunk/po/en_GB.po
===================================================================
--- tuxmath/trunk/po/en_GB.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/en_GB.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -4,7 +4,7 @@
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-05-09 21:05+0200\n"
 "Last-Translator: Karl Ove Hufthammer <karl at huftis.org>\n"
 "Language-Team: Norwegian Nynorsk <i18n-nn at lister.ping.uio.no>\n"
@@ -29,191 +29,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-#, fuzzy
-msgid "the penguins' igloos. To save their homes,"
-msgstr "penguins’ igloos from the"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 
@@ -742,3 +657,7 @@
 #: data/missions/lessons/descr_lessons:58
 msgid "Division of Positives and Negatives"
 msgstr "Division of Positives and Negatives"
+
+#, fuzzy
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "penguins’ igloos from the"

Modified: tuxmath/trunk/po/es.po
===================================================================
--- tuxmath/trunk/po/es.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/es.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: 1.6.2\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-04-26\n"
 "Last-Translator: Angela Ruiz <angieruiz211 at hotmail.com>\n"
 "Language-Team: espanol <LL at li.org>\n"
@@ -28,191 +28,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-#, fuzzy
-msgid "the penguins' igloos. To save their homes,"
-msgstr "los igloos de tus pinguinos"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 
@@ -744,3 +659,7 @@
 #: data/missions/lessons/descr_lessons:58
 msgid "Division of Positives and Negatives"
 msgstr "division de numeros positivos y negativos"
+
+#, fuzzy
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "los igloos de tus pinguinos"

Modified: tuxmath/trunk/po/fi.po
===================================================================
--- tuxmath/trunk/po/fi.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/fi.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-03-22 06:59+0000\n"
 "Last-Translator: Miika Metsälä <Unknown>\n"
 "Language-Team: Finnish <fi at li.org>\n"
@@ -32,190 +32,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/fr.po
===================================================================
--- tuxmath/trunk/po/fr.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/fr.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: 1.5.8\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2007-11-15 09:00+0100\n"
 "Last-Translator: Grumeau Rémi <remi at beosfrance.com>\n"
 "Language-Team: Dutch <LL at li.org>\n"
@@ -28,190 +28,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/ga.po
===================================================================
--- tuxmath/trunk/po/ga.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/ga.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-07-13 23:16-0000\n"
 "Last-Translator: Seanán à Coistín <seananoc at gmail.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -27,191 +27,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-#, fuzzy
-msgid "the penguins' igloos. To save their homes,"
-msgstr "íoglúanna do phiongain a chosaint"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 
@@ -740,3 +655,7 @@
 #: data/missions/lessons/descr_lessons:58
 msgid "Division of Positives and Negatives"
 msgstr "Roinnt Deimhneacha agus Diúltacha"
+
+#, fuzzy
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "íoglúanna do phiongain a chosaint"

Modified: tuxmath/trunk/po/he.po
===================================================================
--- tuxmath/trunk/po/he.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/he.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2009-01-17 10:32+0200\n"
 "Last-Translator: Yaron Shahrabani <sh.yaron at gmail.com>\n"
 "Language-Team: Hebrew <sh.yaron at gmail.com>\n"
@@ -36,191 +36,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-#, fuzzy
-msgid "the penguins' igloos. To save their homes,"
-msgstr "הפינגווינים שלך מפני"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 
@@ -749,3 +664,7 @@
 #: data/missions/lessons/descr_lessons:58
 msgid "Division of Positives and Negatives"
 msgstr "חלוקת מספרים חיוביים בשליליים"
+
+#, fuzzy
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "הפינגווינים שלך מפני"

Modified: tuxmath/trunk/po/hu.po
===================================================================
--- tuxmath/trunk/po/hu.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/hu.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-02-11 21:56+0100\n"
 "Last-Translator: Miklos Merenyi <mermik at freemail.hu>\n"
 "Language-Team: LANGUAGE <HU at li.org>\n"
@@ -27,191 +27,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-#, fuzzy
-msgid "the penguins' igloos. To save their homes,"
-msgstr "jégkunyhóinak megvédése"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 
@@ -741,3 +656,7 @@
 #: data/missions/lessons/descr_lessons:58
 msgid "Division of Positives and Negatives"
 msgstr "Pozitív és negatív számok osztása"
+
+#, fuzzy
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "jégkunyhóinak megvédése"

Modified: tuxmath/trunk/po/it.po
===================================================================
--- tuxmath/trunk/po/it.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/it.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -12,7 +12,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-03-01 11:49+0000\n"
 "Last-Translator: Giovanni Condello <condellog at gmail.com>\n"
 "Language-Team: Italian <it at li.org>\n"
@@ -35,190 +35,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/ja.po
===================================================================
--- tuxmath/trunk/po/ja.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/ja.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-03-05 15:29+0000\n"
 "Last-Translator: CMasami <Unknown>\n"
 "Language-Team: Japanese <ja at li.org>\n"
@@ -33,190 +33,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/nb.po
===================================================================
--- tuxmath/trunk/po/nb.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/nb.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: nb\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-09-21 19:08+0200\n"
 "Last-Translator: Karl Ove Hufthammer <karl at huftis.org>\n"
 "Language-Team: Norwegian Nynorsk <i18n-nn at lister.ping.uio.no>\n"
@@ -30,192 +30,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-#, fuzzy
-msgid "the penguins' igloos. To save their homes,"
-msgstr "igloene til pingvinene fra"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-#, fuzzy
-msgid "forever, Commando!"
-msgstr "Romkommandør"
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 
@@ -746,5 +660,13 @@
 msgid "Division of Positives and Negatives"
 msgstr "Divisjon av positive og negative tall"
 
+#, fuzzy
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "igloene til pingvinene fra"
+
+#, fuzzy
+#~ msgid "forever, Commando!"
+#~ msgstr "Romkommandør"
+
 #~ msgid "Other Math Command Activities"
 #~ msgstr "Andre aktiviteter"

Modified: tuxmath/trunk/po/nl.po
===================================================================
--- tuxmath/trunk/po/nl.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/nl.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2007-11-15 09:00+0100\n"
 "Last-Translator: Schrijvers Luc <Begasus at skynet.be>\n"
 "Language-Team: Dutch <LL at li.org>\n"
@@ -28,190 +28,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/nn.po
===================================================================
--- tuxmath/trunk/po/nn.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/nn.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: nn\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2009-01-13 23:58+0100\n"
 "Last-Translator: Karl Ove Hufthammer <karl at huftis.org>\n"
 "Language-Team: Norwegian Nynorsk <i18n-nn at lister.ping.uio.no>\n"
@@ -30,190 +30,109 @@
 msgstr "Eg er så glad du endeleg er her!"
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
-msgstr "Pingvinane treng hjelp frå deg! Det fell"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
+msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr "kometar frå himmelen, og dei smeltar"
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr "igloane til pingvinane. For å redda heimane"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr "deira, må du finna dei hemmelege kodane"
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr "som øydeleggjer kometane."
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr "Gjer ditt beste!"
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr "Oppdrag 2: Listige læring"
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
-msgstr "Bra jobba! Sidan du klarte å redda heimane til"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
+msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
-msgstr "pingvinane, forfremjar me deg til romlærling."
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
+msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
-msgstr "Håpar du har lært å hanska vanskar …"
-
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr "… for no får du nokon rett i hendene!"
-
-#: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
-msgstr "TaVekk-arane kjem, og dei sender nye og"
-
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr "endå skumlare kometar mot pingvinane!"
-
-#: src/campaign.h:50
+#: src/campaign.h:42
 msgid "But you can save them!"
 msgstr "Men du kan redda dei!"
 
-#: src/campaign.h:56
+#: src/campaign.h:48
 msgid "Mission Three: Royal Ranger"
 msgstr "Oppdrag 3: Vaktsam vaktar"
 
-#: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
-msgstr "Du klarte det igjen! Keisarpingvinen har valt"
+#: src/campaign.h:50
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
+msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr "deg til å delta i den offisielle romvaktargruppa"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
+msgstr ""
 
-#: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
-msgstr "som vernar om byen. Me sender deg"
-
-#: src/campaign.h:61
-msgid "there now..."
-msgstr "der no …"
-
-#: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
-msgstr "Å nei, å nei! Keisarpingvinen sjølv vert no angripen,"
-
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr "av dei nye gongekometane. Desse er endå"
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr "vanskelegare, og for å øydeleggja dei må du"
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr "vera dugande dyktig. Men me trur du vil"
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr "klara det. Vert med romvaktarane og redd byen!"
-
-#: src/campaign.h:73
+#: src/campaign.h:58
 msgid "Mission Four: Imperial Ace"
 msgstr "Oppdrag fire: Supersjef"
 
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr "Du klarte det! Keisaren ønskjer å takka deg"
+#: src/campaign.h:60
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
+msgstr ""
 
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr "personleg. Me tek deg med til ispalasset hans,"
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr "der du får æra av å verta utnemnd"
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr "til keisarleg romsjef!"
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr "Men midt under seremonien"
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
+#: src/campaign.h:62
+#, fuzzy
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr "kjem det eit angrep frå deleland!"
 
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
+#: src/campaign.h:63
+#, fuzzy
+msgid "Now is no time for resting; the city needs your help!"
 msgstr "Inga tid til å kvila på laurbæra; byen"
 
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr "treng di hjelp!"
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr "Siste oppdrag: Kodeknekkingskommandør"
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
-msgstr "Forskarpingvinane har funne ut alle"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
+msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr "angrepa kjem frå ein hemmeleg base,"
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr "og dei treng hjelp frå deg til å"
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr "øydeleggja basen. Dei har òg eit"
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr "lite tips: Gonga først, dela så, og"
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr "avslutt med å leggja til og trekkja frå."
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr "Håpar tipset er til hjelp!"
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+#, fuzzy
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr "Endeleg! No kan du klara å stoppa angrepa"
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr "for alltid, romkommandør!"
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr "Gratulerer! Du vann!"
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr "Runde"
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr "Prøv på nytt!"
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr "Oppdrag utførd. Galaksen er no trygg!"
 
@@ -744,5 +663,104 @@
 msgid "Division of Positives and Negatives"
 msgstr "Divisjon av positive og negative tal"
 
+#~ msgid "The penguins need your help! Comets"
+#~ msgstr "Pingvinane treng hjelp frå deg! Det fell"
+
+#~ msgid "are falling from the sky, and are melting"
+#~ msgstr "kometar frå himmelen, og dei smeltar"
+
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "igloane til pingvinane. For å redda heimane"
+
+#~ msgid "we need you to find the secret code that"
+#~ msgstr "deira, må du finna dei hemmelege kodane"
+
+#~ msgid " will zap each comet."
+#~ msgstr "som øydeleggjer kometane."
+
+#~ msgid "Great job! Since you saved the penguins' homes,"
+#~ msgstr "Bra jobba! Sidan du klarte å redda heimane til"
+
+#~ msgid "we are promoting you to Scout. Scouts are good"
+#~ msgstr "pingvinane, forfremjar me deg til romlærling."
+
+#~ msgid "for keeping an eye out for trouble..."
+#~ msgstr "Håpar du har lært å hanska vanskar …"
+
+#~ msgid "...like what's happening right now!"
+#~ msgstr "… for no får du nokon rett i hendene!"
+
+#~ msgid "The TakeAways have come, and they're sending"
+#~ msgstr "TaVekk-arane kjem, og dei sender nye og"
+
+#~ msgid "new, trickier comets against the penguins!"
+#~ msgstr "endå skumlare kometar mot pingvinane!"
+
+#~ msgid "You've done it again! The Penguin Emperor has"
+#~ msgstr "Du klarte det igjen! Keisarpingvinen har valt"
+
+#~ msgid "chosen you to join his team of Rangers that"
+#~ msgstr "deg til å delta i den offisielle romvaktargruppa"
+
+#~ msgid "help protect the city.  We're sending you"
+#~ msgstr "som vernar om byen. Me sender deg"
+
+#~ msgid "there now..."
+#~ msgstr "der no …"
+
+#~ msgid "...oh no! Now the Emperor himself is under attack,"
+#~ msgstr "Å nei, å nei! Keisarpingvinen sjølv vert no angripen,"
+
+#~ msgid "from new types of comets: these problems are"
+#~ msgstr "av dei nye gongekometane. Desse er endå"
+
+#~ msgid "multiplying! To fight these, you need great"
+#~ msgstr "vanskelegare, og for å øydeleggja dei må du"
+
+#~ msgid "skill. We think you can do it. Join the"
+#~ msgstr "vera dugande dyktig. Men me trur du vil"
+
+#~ msgid "Rangers and help save the city!"
+#~ msgstr "klara det. Vert med romvaktarane og redd byen!"
+
+#~ msgid "You did it! The Emperor wants to thank you"
+#~ msgstr "Du klarte det! Keisaren ønskjer å takka deg"
+
+#~ msgid "in person. We are taking you to his ice palace"
+#~ msgstr "personleg. Me tek deg med til ispalasset hans,"
+
+#~ msgid "for a great honor: you will become"
+#~ msgstr "der du får æra av å verta utnemnd"
+
+#~ msgid "the Imperial Ace!"
+#~ msgstr "til keisarleg romsjef!"
+
+#~ msgid "But right in the middle of the ceremony,"
+#~ msgstr "Men midt under seremonien"
+
+#~ msgid "needs your help!"
+#~ msgstr "treng di hjelp!"
+
+#~ msgid "Penguin scientists have learned that all"
+#~ msgstr "Forskarpingvinane har funne ut alle"
+
+#~ msgid "these attacks are coming from a secret"
+#~ msgstr "angrepa kjem frå ein hemmeleg base,"
+
+#~ msgid "base, and they need you to go fight"
+#~ msgstr "og dei treng hjelp frå deg til å"
+
+#~ msgid "the final battle. They also give you"
+#~ msgstr "øydeleggja basen. Dei har òg eit"
+
+#~ msgid "this clue: first do multiplication and"
+#~ msgstr "lite tips: Gonga først, dela så, og"
+
+#~ msgid "division, and then do addition and subtraction."
+#~ msgstr "avslutt med å leggja til og trekkja frå."
+
+#~ msgid "forever, Commando!"
+#~ msgstr "for alltid, romkommandør!"
+
 #~ msgid "Other Math Command Activities"
 #~ msgstr "Andre aktivitetar"

Modified: tuxmath/trunk/po/oc.po
===================================================================
--- tuxmath/trunk/po/oc.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/oc.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-02-25 16:55+0000\n"
 "Last-Translator: Yannig MARCHEGAY (Kokoyaya) <yannig at marchegay.org>\n"
 "Language-Team: Occitan (post 1500) <oc at li.org>\n"
@@ -32,190 +32,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/pl.po
===================================================================
--- tuxmath/trunk/po/pl.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/pl.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -12,7 +12,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-02-25 18:43+0000\n"
 "Last-Translator: Mateusz Tybura <wujciol at gmail.com>\n"
 "Language-Team: Polish <pl at li.org>\n"
@@ -35,190 +35,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/pt.po
===================================================================
--- tuxmath/trunk/po/pt.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/pt.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-04-12 04:12+0000\n"
 "Last-Translator: Mykas0 <Mykas0 at gmail.com>\n"
 "Language-Team: Portuguese <pt at li.org>\n"
@@ -34,190 +34,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/pt_BR.po
===================================================================
--- tuxmath/trunk/po/pt_BR.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/pt_BR.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -13,7 +13,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-03-03 21:35+0000\n"
 "Last-Translator: Laudeci Oliveira <laudeci at gmail.com>\n"
 "Language-Team: Brazilian Portuguese <pt_BR at li.org>\n"
@@ -36,190 +36,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/ru.po
===================================================================
--- tuxmath/trunk/po/ru.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/ru.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-03-01 06:56+0000\n"
 "Last-Translator: Александр AldeX Крылов <Unknown>\n"
 "Language-Team: Russian <ru at li.org>\n"
@@ -33,190 +33,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/sk.po
===================================================================
--- tuxmath/trunk/po/sk.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/sk.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-03-16 09:41+0000\n"
 "Last-Translator: Štefan Lučivjanský <lucorp at azet.sk>\n"
 "Language-Team: Slovak <sk at li.org>\n"
@@ -33,190 +33,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/sv.po
===================================================================
--- tuxmath/trunk/po/sv.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/sv.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
@@ -29,190 +29,109 @@
 msgstr "Jag är så glad att du kom!"
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
-msgstr "Pingvinerna behöver din hjälp! Kometer"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
+msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr "faller från himlen och smälter"
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr "pingvinernas igloos. Vi behöver dig"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr "för att hitta hemliga koden som kan"
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr "förstöra varje komet för att rädda dem."
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr "Gör ditt yttersta!"
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr "Uppdrag 2: Smart scout"
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
-msgstr "Bra jobbat! Eftersom du räddat pingvinernas hem"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
+msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
-msgstr "så befordrar vi dig till Scout. Scoter är bra"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
+msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
-msgstr "på att se upp för problem..."
-
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr "... precis det som händer just nu!"
-
-#: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
-msgstr "Bortförarna har kommit och de skickar nya"
-
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr "svårare kometer mot pingvinerna!"
-
-#: src/campaign.h:50
+#: src/campaign.h:42
 msgid "But you can save them!"
 msgstr "Du kan rädda dem!"
 
-#: src/campaign.h:56
+#: src/campaign.h:48
 msgid "Mission Three: Royal Ranger"
 msgstr "Uppdrag 3: Kunglig jägare"
 
-#: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
-msgstr "Du har lyckats igen! Pingvinernas kejsare har"
+#: src/campaign.h:50
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
+msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr "valt dig till sin grupp av jägare som ska"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
+msgstr ""
 
-#: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
-msgstr "hjälpa till att skydda staden. Vi skickar dit"
-
-#: src/campaign.h:61
-msgid "there now..."
-msgstr "dig nu..."
-
-#: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
-msgstr "... Åh nej! Nu är själva kejsaren under attack"
-
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr "från nya typer av kometer. Problemen bara"
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr "förökar sig! Du behöver erfarenhet för"
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr "att bekämpa dessa. Vi tror att du kan göra"
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr "det. Gå med jägarna och rädda staden!"
-
-#: src/campaign.h:73
+#: src/campaign.h:58
 msgid "Mission Four: Imperial Ace"
 msgstr "Uppdrag 4: Empirisk mästare"
 
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr "Du klarade det! Kejsaren vill tacka dig"
+#: src/campaign.h:60
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
+msgstr ""
 
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr "personligen. Vi tar dig till hans ispalats"
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr "för att ge dig ära. Du kommer att"
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr "bli en Empirisk mästare!"
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr "Men just i mitten av ceremonin så inleds"
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
+#: src/campaign.h:62
+#, fuzzy
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr "en ny attack från Divisionslandet!"
 
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
+#: src/campaign.h:63
+#, fuzzy
+msgid "Now is no time for resting; the city needs your help!"
 msgstr "Det finns ingen tid att förlora. Staden"
 
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr "behöver din hjälp!"
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr "Sista uppdraget: Beräknande kommandosoldat"
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
-msgstr "Pingvinvetenskapsmännen har upptäckt att"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
+msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr "alla dessa attacker kommer från en hemlig"
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr "bas och de behöver dig för att utkämpa"
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr "den sista striden. De har även gett dig"
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr "denna ledtråd: multiplicera och dividera"
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr "först, gör sedan addition och subtraktion."
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr "Jag hoppas att tipset hjälper!"
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+#, fuzzy
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr "Nu gäller det! Du kan stoppa dessa"
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr "attacker för alltid, Kommandosoldat!"
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr "Gratulerar! Du vann!"
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr "Omgång"
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr "Tyvärr, försök igen!"
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr "Uppdraget slutfört! Galaxen är säker!"
 
@@ -746,6 +665,105 @@
 msgid "Division of Positives and Negatives"
 msgstr "Division med positiva och negativa tal"
 
+#~ msgid "The penguins need your help! Comets"
+#~ msgstr "Pingvinerna behöver din hjälp! Kometer"
+
+#~ msgid "are falling from the sky, and are melting"
+#~ msgstr "faller från himlen och smälter"
+
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "pingvinernas igloos. Vi behöver dig"
+
+#~ msgid "we need you to find the secret code that"
+#~ msgstr "för att hitta hemliga koden som kan"
+
+#~ msgid " will zap each comet."
+#~ msgstr "förstöra varje komet för att rädda dem."
+
+#~ msgid "Great job! Since you saved the penguins' homes,"
+#~ msgstr "Bra jobbat! Eftersom du räddat pingvinernas hem"
+
+#~ msgid "we are promoting you to Scout. Scouts are good"
+#~ msgstr "så befordrar vi dig till Scout. Scoter är bra"
+
+#~ msgid "for keeping an eye out for trouble..."
+#~ msgstr "på att se upp för problem..."
+
+#~ msgid "...like what's happening right now!"
+#~ msgstr "... precis det som händer just nu!"
+
+#~ msgid "The TakeAways have come, and they're sending"
+#~ msgstr "Bortförarna har kommit och de skickar nya"
+
+#~ msgid "new, trickier comets against the penguins!"
+#~ msgstr "svårare kometer mot pingvinerna!"
+
+#~ msgid "You've done it again! The Penguin Emperor has"
+#~ msgstr "Du har lyckats igen! Pingvinernas kejsare har"
+
+#~ msgid "chosen you to join his team of Rangers that"
+#~ msgstr "valt dig till sin grupp av jägare som ska"
+
+#~ msgid "help protect the city.  We're sending you"
+#~ msgstr "hjälpa till att skydda staden. Vi skickar dit"
+
+#~ msgid "there now..."
+#~ msgstr "dig nu..."
+
+#~ msgid "...oh no! Now the Emperor himself is under attack,"
+#~ msgstr "... Åh nej! Nu är själva kejsaren under attack"
+
+#~ msgid "from new types of comets: these problems are"
+#~ msgstr "från nya typer av kometer. Problemen bara"
+
+#~ msgid "multiplying! To fight these, you need great"
+#~ msgstr "förökar sig! Du behöver erfarenhet för"
+
+#~ msgid "skill. We think you can do it. Join the"
+#~ msgstr "att bekämpa dessa. Vi tror att du kan göra"
+
+#~ msgid "Rangers and help save the city!"
+#~ msgstr "det. Gå med jägarna och rädda staden!"
+
+#~ msgid "You did it! The Emperor wants to thank you"
+#~ msgstr "Du klarade det! Kejsaren vill tacka dig"
+
+#~ msgid "in person. We are taking you to his ice palace"
+#~ msgstr "personligen. Vi tar dig till hans ispalats"
+
+#~ msgid "for a great honor: you will become"
+#~ msgstr "för att ge dig ära. Du kommer att"
+
+#~ msgid "the Imperial Ace!"
+#~ msgstr "bli en Empirisk mästare!"
+
+#~ msgid "But right in the middle of the ceremony,"
+#~ msgstr "Men just i mitten av ceremonin så inleds"
+
+#~ msgid "needs your help!"
+#~ msgstr "behöver din hjälp!"
+
+#~ msgid "Penguin scientists have learned that all"
+#~ msgstr "Pingvinvetenskapsmännen har upptäckt att"
+
+#~ msgid "these attacks are coming from a secret"
+#~ msgstr "alla dessa attacker kommer från en hemlig"
+
+#~ msgid "base, and they need you to go fight"
+#~ msgstr "bas och de behöver dig för att utkämpa"
+
+#~ msgid "the final battle. They also give you"
+#~ msgstr "den sista striden. De har även gett dig"
+
+#~ msgid "this clue: first do multiplication and"
+#~ msgstr "denna ledtråd: multiplicera och dividera"
+
+#~ msgid "division, and then do addition and subtraction."
+#~ msgstr "först, gör sedan addition och subtraktion."
+
+#~ msgid "forever, Commando!"
+#~ msgstr "attacker för alltid, Kommandosoldat!"
+
 #~ msgid "Other Math Command Activities"
 #~ msgstr "Andra matematikaktiviteter"
 

Modified: tuxmath/trunk/po/tr.po
===================================================================
--- tuxmath/trunk/po/tr.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/tr.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: tr2\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-12-07 15:54+0200\n"
 "Last-Translator: Doruk Fisek <dfisek at fisek.com.tr>\n"
 "Language-Team: Turkish <gnu-tr-u12a at lists.sourceforge.net>\n"
@@ -28,190 +28,109 @@
 msgstr "Geldiğine çok sevindim!"
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
-msgstr "Penguenlerin yardımına ihtiyacı var!"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
+msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr "Kuyruklu yıldızlar gökten düşüyor ve"
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr "penguenlerin evlerini eritiyor. Evlerini kurtarmak için,"
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr "her kuyruklu yıldızı düşürecek"
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr "gizli kodu bulmanı istiyoruz"
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr "En iyisini yap!"
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr "Görev İki: Akıllı İzci"
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
-msgstr "İyi iş çıkardın! Penguenlerin evlerini kurtardığın için,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
+msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
-msgstr "seni \"İzci\"liğe yükseltiyoruz. İzciler"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
+msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
-msgstr "olası bir soruna karşı tetikte olurlar"
-
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr "... tıpkı şimdi olan gibi!"
-
-#: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
-msgstr "Paket servisleri geldi ve penguenlere yeni  daha becerikli"
-
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr "kuyruklu yıldızlar gönderiyorlar!"
-
-#: src/campaign.h:50
+#: src/campaign.h:42
 msgid "But you can save them!"
 msgstr "Ama sen onları kurtarabilirsin!"
 
-#: src/campaign.h:56
+#: src/campaign.h:48
 msgid "Mission Three: Royal Ranger"
 msgstr "Görev Üç: Asil Korucu"
 
-#: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
-msgstr "Tekrar başardın! İmparator Penguen seni"
+#: src/campaign.h:50
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
+msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr "şehri korumaya yardımcı olan kendi korucular"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
+msgstr ""
 
-#: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
-msgstr "takımına katılman için seçti. Şimdi seni"
-
-#: src/campaign.h:61
-msgid "there now..."
-msgstr "oraya gönderiyoruz..."
-
-#: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
-msgstr "... oo hayır! Şimdi İmparator'un kendisine saldırılıyor,"
-
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr "hem de yeni tip kuyruklu yıldızlarla : problemler"
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr "katlanıyor! Bunlarla savaşmak için, harika yeteneklere"
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr "gereksinim var. Yapabileceğini düşünüyoruz."
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr "Koruculara katıl ve şehri kurtarmaya yardım et!"
-
-#: src/campaign.h:73
+#: src/campaign.h:58
 msgid "Mission Four: Imperial Ace"
 msgstr "Görev Dört: İmparatorluk Ası"
 
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr "Başardın! İmparator sana bizzat kendisi teşekkür"
+#: src/campaign.h:60
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
+msgstr ""
 
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr "etmek istiyor. Seni büyük bir onur kazanman için"
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr "buzdan kalesine götürüyoruz :"
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr "İmparatorluk Ası olacaksın!"
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr "Törenin tam ortasında Bölme Ülkesi'nden"
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
+#: src/campaign.h:62
+#, fuzzy
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr "yeni bir saldırı başlar!"
 
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
+#: src/campaign.h:63
+#, fuzzy
+msgid "Now is no time for resting; the city needs your help!"
 msgstr "Şimdi dinlenmek için zaman yok; şehrin"
 
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr "yardımında gereksinimi var!"
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr "Son Görev: Hesaplama Komandosu"
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
-msgstr "Penguen bilim adamları tüm bu saldırıların"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
+msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr "gizli bir üsten geldiğini öğrendi ve senin"
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr "gidip bu işi sona erdirecek savaşı"
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr "kazanmana ihtiyaçları var. Sana bir de ipuuc"
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr "verdiler: Önce çarpma ve bölmeyi, ondan"
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr "sonra toplama ve çıkarmayı yap."
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr "Umarım bu ipucu işine yarar!"
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+#, fuzzy
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr "Hepsi bu! Bu saldırıları sonsuza dek"
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr "durdurabilirsin Komando!"
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr "Tebrikler! Kazandın!"
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr "Tur"
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr "Üzgünüm, tekrar dene!"
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr "Görev başarıyla tamamlandı. Galaksi güvenli!"
 
@@ -746,5 +665,104 @@
 msgid "Division of Positives and Negatives"
 msgstr "Pozitif ve Negatiflerin Bölünmesi"
 
+#~ msgid "The penguins need your help! Comets"
+#~ msgstr "Penguenlerin yardımına ihtiyacı var!"
+
+#~ msgid "are falling from the sky, and are melting"
+#~ msgstr "Kuyruklu yıldızlar gökten düşüyor ve"
+
+#~ msgid "the penguins' igloos. To save their homes,"
+#~ msgstr "penguenlerin evlerini eritiyor. Evlerini kurtarmak için,"
+
+#~ msgid "we need you to find the secret code that"
+#~ msgstr "her kuyruklu yıldızı düşürecek"
+
+#~ msgid " will zap each comet."
+#~ msgstr "gizli kodu bulmanı istiyoruz"
+
+#~ msgid "Great job! Since you saved the penguins' homes,"
+#~ msgstr "İyi iş çıkardın! Penguenlerin evlerini kurtardığın için,"
+
+#~ msgid "we are promoting you to Scout. Scouts are good"
+#~ msgstr "seni \"İzci\"liğe yükseltiyoruz. İzciler"
+
+#~ msgid "for keeping an eye out for trouble..."
+#~ msgstr "olası bir soruna karşı tetikte olurlar"
+
+#~ msgid "...like what's happening right now!"
+#~ msgstr "... tıpkı şimdi olan gibi!"
+
+#~ msgid "The TakeAways have come, and they're sending"
+#~ msgstr "Paket servisleri geldi ve penguenlere yeni  daha becerikli"
+
+#~ msgid "new, trickier comets against the penguins!"
+#~ msgstr "kuyruklu yıldızlar gönderiyorlar!"
+
+#~ msgid "You've done it again! The Penguin Emperor has"
+#~ msgstr "Tekrar başardın! İmparator Penguen seni"
+
+#~ msgid "chosen you to join his team of Rangers that"
+#~ msgstr "şehri korumaya yardımcı olan kendi korucular"
+
+#~ msgid "help protect the city.  We're sending you"
+#~ msgstr "takımına katılman için seçti. Şimdi seni"
+
+#~ msgid "there now..."
+#~ msgstr "oraya gönderiyoruz..."
+
+#~ msgid "...oh no! Now the Emperor himself is under attack,"
+#~ msgstr "... oo hayır! Şimdi İmparator'un kendisine saldırılıyor,"
+
+#~ msgid "from new types of comets: these problems are"
+#~ msgstr "hem de yeni tip kuyruklu yıldızlarla : problemler"
+
+#~ msgid "multiplying! To fight these, you need great"
+#~ msgstr "katlanıyor! Bunlarla savaşmak için, harika yeteneklere"
+
+#~ msgid "skill. We think you can do it. Join the"
+#~ msgstr "gereksinim var. Yapabileceğini düşünüyoruz."
+
+#~ msgid "Rangers and help save the city!"
+#~ msgstr "Koruculara katıl ve şehri kurtarmaya yardım et!"
+
+#~ msgid "You did it! The Emperor wants to thank you"
+#~ msgstr "Başardın! İmparator sana bizzat kendisi teşekkür"
+
+#~ msgid "in person. We are taking you to his ice palace"
+#~ msgstr "etmek istiyor. Seni büyük bir onur kazanman için"
+
+#~ msgid "for a great honor: you will become"
+#~ msgstr "buzdan kalesine götürüyoruz :"
+
+#~ msgid "the Imperial Ace!"
+#~ msgstr "İmparatorluk Ası olacaksın!"
+
+#~ msgid "But right in the middle of the ceremony,"
+#~ msgstr "Törenin tam ortasında Bölme Ülkesi'nden"
+
+#~ msgid "needs your help!"
+#~ msgstr "yardımında gereksinimi var!"
+
+#~ msgid "Penguin scientists have learned that all"
+#~ msgstr "Penguen bilim adamları tüm bu saldırıların"
+
+#~ msgid "these attacks are coming from a secret"
+#~ msgstr "gizli bir üsten geldiğini öğrendi ve senin"
+
+#~ msgid "base, and they need you to go fight"
+#~ msgstr "gidip bu işi sona erdirecek savaşı"
+
+#~ msgid "the final battle. They also give you"
+#~ msgstr "kazanmana ihtiyaçları var. Sana bir de ipuuc"
+
+#~ msgid "this clue: first do multiplication and"
+#~ msgstr "verdiler: Önce çarpma ve bölmeyi, ondan"
+
+#~ msgid "division, and then do addition and subtraction."
+#~ msgstr "sonra toplama ve çıkarmayı yap."
+
+#~ msgid "forever, Commando!"
+#~ msgstr "durdurabilirsin Komando!"
+
 #~ msgid "Other Math Command Activities"
 #~ msgstr "Diğer Matematik Komutanlığı Etkinlikleri"

Modified: tuxmath/trunk/po/tuxmath.pot
===================================================================
--- tuxmath/trunk/po/tuxmath.pot	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/tuxmath.pot	2009-02-06 17:36:45 UTC (rev 871)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath 1.7.1\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -28,190 +28,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/po/zh_CN.po
===================================================================
--- tuxmath/trunk/po/zh_CN.po	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/po/zh_CN.po	2009-02-06 17:36:45 UTC (rev 871)
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: tuxmath\n"
 "Report-Msgid-Bugs-To: tuxmath-devel at lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-01-24 20:34-0600\n"
+"POT-Creation-Date: 2009-02-06 11:04-0600\n"
 "PO-Revision-Date: 2008-02-22 11:56+0000\n"
 "Last-Translator: TeliuTe <teliute at 163.com>\n"
 "Language-Team: Simplified Chinese <zh_CN at li.org>\n"
@@ -32,190 +32,106 @@
 msgstr ""
 
 #: src/campaign.h:29
-msgid "The penguins need your help! Comets"
+msgid ""
+"The penguins need your help! Comets are falling from the sky, and are "
+"melting the penguins' igloos. To save their homes, we need you to find the "
+"secret code that will zap each comet."
 msgstr ""
 
-#: src/campaign.h:30
-msgid "are falling from the sky, and are melting"
-msgstr ""
-
 #: src/campaign.h:31
-msgid "the penguins' igloos. To save their homes,"
-msgstr ""
-
-#: src/campaign.h:32
-msgid "we need you to find the secret code that"
-msgstr ""
-
-#: src/campaign.h:33
-msgid " will zap each comet."
-msgstr ""
-
-#: src/campaign.h:35
 msgid "Do your best!"
 msgstr ""
 
-#: src/campaign.h:41
+#: src/campaign.h:37
 msgid "Mission Two: Smart Scout"
 msgstr ""
 
-#: src/campaign.h:43
-msgid "Great job! Since you saved the penguins' homes,"
+#: src/campaign.h:39
+msgid ""
+"Great job! Since you saved the penguins' homes, we are promoting you to "
+"Scout. Scouts are good for keeping an eye out for trouble..."
 msgstr ""
 
-#: src/campaign.h:44
-msgid "we are promoting you to Scout. Scouts are good"
+#: src/campaign.h:41
+msgid ""
+"...like what's happening right now! The TakeAways have come, and they're "
+"sending new, trickier comets against the penguins!"
 msgstr ""
 
-#: src/campaign.h:45
-msgid "for keeping an eye out for trouble..."
+#: src/campaign.h:42
+msgid "But you can save them!"
 msgstr ""
 
-#: src/campaign.h:47
-msgid "...like what's happening right now!"
-msgstr ""
-
 #: src/campaign.h:48
-msgid "The TakeAways have come, and they're sending"
+msgid "Mission Three: Royal Ranger"
 msgstr ""
 
-#: src/campaign.h:49
-msgid "new, trickier comets against the penguins!"
-msgstr ""
-
 #: src/campaign.h:50
-msgid "But you can save them!"
+msgid ""
+"You've done it again! The Penguin Emperor has chosen you to join his team of "
+"Rangers that help protect the city.  We're sending you there now..."
 msgstr ""
 
-#: src/campaign.h:56
-msgid "Mission Three: Royal Ranger"
+#: src/campaign.h:52
+msgid ""
+"...oh no! Now the Emperor himself is under attack, from new types of comets: "
+"these problems are multiplying! To fight these, you need great skill. We "
+"think you can do it. Join the Rangers and help save the city!"
 msgstr ""
 
 #: src/campaign.h:58
-msgid "You've done it again! The Penguin Emperor has"
+msgid "Mission Four: Imperial Ace"
 msgstr ""
 
-#: src/campaign.h:59
-msgid "chosen you to join his team of Rangers that"
-msgstr ""
-
 #: src/campaign.h:60
-msgid "help protect the city.  We're sending you"
+msgid ""
+"You did it! The Emperor wants to thank you in person. We are taking you to "
+"his ice palace for a great honor: you will become the Imperial Ace!"
 msgstr ""
 
-#: src/campaign.h:61
-msgid "there now..."
+#: src/campaign.h:62
+msgid ""
+"But right in the middle of the ceremony, a new attack from the land of "
+"Division starts!"
 msgstr ""
 
 #: src/campaign.h:63
-msgid "...oh no! Now the Emperor himself is under attack,"
+msgid "Now is no time for resting; the city needs your help!"
 msgstr ""
 
-#: src/campaign.h:64
-msgid "from new types of comets: these problems are"
-msgstr ""
-
-#: src/campaign.h:65
-msgid "multiplying! To fight these, you need great"
-msgstr ""
-
-#: src/campaign.h:66
-msgid "skill. We think you can do it. Join the"
-msgstr ""
-
-#: src/campaign.h:67
-msgid "Rangers and help save the city!"
-msgstr ""
-
-#: src/campaign.h:73
-msgid "Mission Four: Imperial Ace"
-msgstr ""
-
-#: src/campaign.h:75
-msgid "You did it! The Emperor wants to thank you"
-msgstr ""
-
-#: src/campaign.h:76
-msgid "in person. We are taking you to his ice palace"
-msgstr ""
-
-#: src/campaign.h:77
-msgid "for a great honor: you will become"
-msgstr ""
-
-#: src/campaign.h:78
-msgid "the Imperial Ace!"
-msgstr ""
-
-#: src/campaign.h:80
-msgid "But right in the middle of the ceremony,"
-msgstr ""
-
-#: src/campaign.h:81
-msgid "a new attack from the land of Division starts!"
-msgstr ""
-
-#: src/campaign.h:82
-msgid "Now is no time for resting; the city"
-msgstr ""
-
-#: src/campaign.h:83
-msgid "needs your help!"
-msgstr ""
-
-#: src/campaign.h:89
+#: src/campaign.h:69
 msgid "Final Mission: Computing Commando"
 msgstr ""
 
-#: src/campaign.h:91
-msgid "Penguin scientists have learned that all"
+#: src/campaign.h:71
+msgid ""
+"Penguin scientists have learned that all these attacks are coming from a "
+"secret base, and they need you to go fight the final battle. They also give "
+"you this clue: first do multiplication and division, and then do addition "
+"and subtraction."
 msgstr ""
 
-#: src/campaign.h:92
-msgid "these attacks are coming from a secret"
-msgstr ""
-
-#: src/campaign.h:93
-msgid "base, and they need you to go fight"
-msgstr ""
-
-#: src/campaign.h:94
-msgid "the final battle. They also give you"
-msgstr ""
-
-#: src/campaign.h:95
-msgid "this clue: first do multiplication and"
-msgstr ""
-
-#: src/campaign.h:96
-msgid "division, and then do addition and subtraction."
-msgstr ""
-
-#: src/campaign.h:97
+#: src/campaign.h:72
 msgid "I hope that hint helps!"
 msgstr ""
 
-#: src/campaign.h:99
-msgid "This is it! You can stop these attacks"
+#: src/campaign.h:74
+msgid "This is it! You can stop these attacks forever, Commando!"
 msgstr ""
 
-#: src/campaign.h:100
-msgid "forever, Commando!"
-msgstr ""
-
-#: src/campaign.c:29
+#: src/campaign.c:31
 msgid "Congratulations! You win!"
 msgstr ""
 
-#: src/campaign.c:47
+#: src/campaign.c:49
 msgid "Round"
 msgstr ""
 
-#: src/campaign.c:156
+#: src/campaign.c:159
 msgid "Sorry, try again!"
 msgstr ""
 
-#: src/campaign.c:162
+#: src/campaign.c:166
 msgid "Mission accomplished. The galaxy is safe!"
 msgstr ""
 

Modified: tuxmath/trunk/src/Makefile.am
===================================================================
--- tuxmath/trunk/src/Makefile.am	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/src/Makefile.am	2009-02-06 17:36:45 UTC (rev 871)
@@ -35,6 +35,7 @@
 	options.c	\
 	credits.c	\
 	highscore.c	\
+	linewrap.c	\
 	loaders.c	\
 	audio.c 	\
 	mathcards.c	\
@@ -46,8 +47,22 @@
 	SDL_rotozoom.c	\
 	lessons.c	\
 	scandir.c	\
-	pixels.c
+	pixels.c	\
+	linebreak.c	\
+	width.c	\
+	u16-mbtouc-aux.c	\
+	u16-mbtouc.c	\
+	u16-mbtouc-unsafe-aux.c	\
+	u16-mbtouc-unsafe.c	\
+	u8-mbtouc-aux.c	\
+	u8-mbtouc.c	\
+	u8-mbtouc-unsafe-aux.c	\
+	u8-mbtouc-unsafe.c	\
+.	u8-uctomb-aux.c	\
+	u8-uctomb.c
 
+
+# HACK "TuxMath" is the Windows program, whereas "tuxmath" is the Unix program
 TuxMath_SOURCES  = $(tuxmath_SOURCES) tuxmathrc.rc
 
 tuxmathadmin_SOURCES = tuxmathadmin.c
@@ -59,37 +74,45 @@
 		lessons.c
 
 EXTRA_DIST = 	credits.h 	\
-		factoroids.h	\
-		fileops.h 	\
-		game.h		\
-		globals.h	\
-		highscore.h 	\
-		loaders.h	\
-		mathcards.h 	\
-		options.h	\
-		setup.h		\
-		titlescreen.h	\
-		campaign.h	\
-		multiplayer.h	\
-		tuxmath.h	\
-		ConvertUTF.h	\
-		SDL_extras.h	\
-		SDL_rotozoom.h	\
-		lessons.h	\
-		gettext.h	\
-		scandir.h	\
-		pixels.h	\
-		compiler.h
+	factoroids.h	\
+	fileops.h 	\
+	game.h		\
+	globals.h	\
+	highscore.h 	\
+	linewrap.h	\
+	loaders.h	\
+	mathcards.h 	\
+	options.h	\
+	setup.h		\
+	titlescreen.h	\
+	campaign.h	\
+	multiplayer.h	\
+	tuxmath.h	\
+	ConvertUTF.h	\
+	SDL_extras.h	\
+	SDL_rotozoom.h	\
+	lessons.h	\
+	gettext.h	\
+	scandir.h	\
+	pixels.h	\
+	compiler.h	 \
+	lbrkprop.h	\
+	localcharset.h	\
+	streq.h	\
+	unistr.h	\
+	xsize.h	\
+	linebreak.h	\
+	unitypes.h	\
+	uniwidth.h
 
 
+
 WINDRES=@WINDRES@
 
 # How to make an RC file
 tuxmathrc.o: tuxmathrc.rc
 	$(WINDRES) -i $< -o $@
 
-noinst_HEADERS = highscore.h
 
 
 
-

Modified: tuxmath/trunk/src/campaign.c
===================================================================
--- tuxmath/trunk/src/campaign.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/src/campaign.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -12,11 +12,9 @@
 #include "fileops.h"
 #include "mathcards.h"
 #include "options.h"
-
-#ifdef LINEBREAK
 #include "linewrap.h"
-#endif
 
+
 void briefPlayer(int stage); //show text introducing the given stage
 void readStageSettings(int stage);
 void readRoundSettings(int stage, int round);
@@ -131,12 +129,8 @@
   //show this stage's text
   tmdprintf("Briefing\n");
   SDL_BlitSurface(icon, NULL, screen, NULL);
-#ifdef LINEBREAK
   linewrap_list(briefings[stage], wrapped_lines, 40, MAX_LINES, MAX_LINEWIDTH);
   scroll_text(wrapped_lines, textarea, 1);
-#else
-  scroll_text(briefings[stage], textarea, 1);
-#endif
   tmdprintf("Finished briefing\n");
   
   SDL_FreeSurface(loadedsprite);
@@ -163,21 +157,13 @@
 void showGameOver()
 {
   char* text[2] = {N_("Sorry, try again!"), ""};
-#ifdef LINEBREAK
   linewrap_list(text, wrapped_lines, 40, MAX_LINES, MAX_LINEWIDTH);
   scroll_text(wrapped_lines, screen->clip_rect, 3);
-#else
-  scroll_text(text, screen->clip_rect, 3);
-#endif
 }
 
 void showGameWon()
 {
   char* text[2] = {N_("Mission accomplished. The galaxy is safe!"), ""};
-#ifdef LINEBREAK
   linewrap_list(text, wrapped_lines, 40, MAX_LINES, MAX_LINEWIDTH);
   scroll_text(wrapped_lines, screen->clip_rect, 3);
-#else
-  scroll_text(text, screen->clip_rect, 3);
-#endif
 }

Added: tuxmath/trunk/src/cjk.h
===================================================================
--- tuxmath/trunk/src/cjk.h	                        (rev 0)
+++ tuxmath/trunk/src/cjk.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,37 @@
+/* Test for CJK encoding.
+   Copyright (C) 2001-2002, 2005-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2002.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "streq.h"
+
+static int
+is_cjk_encoding (const char *encoding)
+{
+  if (0
+      /* Legacy Japanese encodings */
+      || STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
+      /* Legacy Chinese encodings */
+      || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+      || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
+      || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
+      || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
+      /* Legacy Korean encodings */
+      || STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+      || STREQ (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
+      || STREQ (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
+    return 1;
+  return 0;
+}

Modified: tuxmath/trunk/src/globals.h
===================================================================
--- tuxmath/trunk/src/globals.h	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/src/globals.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -30,6 +30,7 @@
 //#define TUXMATH_DEBUG
 /* for Tim's feedback speed control code           */
 //#define FEEDBACK_DEBUG
+#define LINEBREAK
 /* nice inline debugging macro */
 #ifdef TUXMATH_DEBUG
 #define tmdprintf(...) printf(__VA_ARGS__)

Added: tuxmath/trunk/src/lbrkprop.h
===================================================================
--- tuxmath/trunk/src/lbrkprop.h	                        (rev 0)
+++ tuxmath/trunk/src/lbrkprop.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,1895 @@
+/* Line breaking properties of Unicode characters.  */
+/* Generated automatically by gen-lbrkprop for Unicode 3.1.0.  */
+
+/* Copyright (C) 2000-2004 Free Software Foundation, Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#define lbrkprop_header_0 16
+#define lbrkprop_header_1 15
+#define lbrkprop_header_2 7
+#define lbrkprop_header_3 511
+#define lbrkprop_header_4 127
+static const
+struct
+  {
+    int level1[15];
+    int level2[4 << 9];
+    unsigned char level3[100 << 7];
+  }
+lbrkprop =
+{
+  {     0,   512,  1024,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,  1536 },
+  {
+        0,   128,   256,   384,   512,   640,   768,   896,
+     1024,  1152,  1280,  1408,  1536,  1664,  1792,  1920,
+       -1,    -1,  2048,  2176,  2304,  2432,  2560,  2688,
+     2816,  2944,  3072,  3200,  3328,  3456,  3584,  3712,
+     3840,  3968,  4096,  4224,  4352,  4480,  4608,  4736,
+     4864,  4992,  4992,  4992,  5120,  5248,    -1,  5376,
+     5504,  5632,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,  4992,  5760,  5888,  6016,
+     6144,  6272,  6400,  6528,  6656,  6784,  6912,  7040,
+     7168,  7296,  7424,  7552,  7680,    -1,  7808,  7936,
+     4992,  4992,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,  8064,  8192,  8320,
+     8448,  8576,  8704,  8832,  8960,  9088,  9216,  9344,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  9472,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  9600,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  9728,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  9856,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,  8192,  8192,  9984,    -1, 10112, 10240,
+     4992,  4992, 10368, 10496, 10624, 10752, 10880, 11008,
+       -1,    -1,    -1,    -1,    -1,    -1, 11136,    -1,
+    11264,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     4992, 11392, 11520, 11648,    -1,    -1,    -1,    -1,
+    11776, 11904, 12032,  4992,  4992, 12160,  4992, 12288,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192, 12416,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     8192,  8192,  8192,  8192, 12544,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    12672,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
+  },
+  {
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_BA, LBP_BK, LBP_CM, LBP_BK, LBP_BK, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_SP, LBP_EX, LBP_QU, LBP_AL, LBP_PR, LBP_PO, LBP_AL, LBP_QU,
+    LBP_OP, LBP_CL, LBP_AL, LBP_PR, LBP_IS, LBP_HY, LBP_IS, LBP_SY,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_IS, LBP_IS, LBP_AL, LBP_AL, LBP_AL, LBP_EX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_PR, LBP_CL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_BA, LBP_CL, LBP_AL, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BK, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_GL, LBP_AI, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_AL, LBP_AI,
+    LBP_AI, LBP_AL, LBP_AI, LBP_QU, LBP_AL, LBP_BA, LBP_AL, LBP_AL,
+    LBP_PO, LBP_PR, LBP_AI, LBP_AI, LBP_BB, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_QU, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
+    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
+    LBP_BB, LBP_AI, LBP_AI, LBP_AI, LBP_BB, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_XX, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX,
+    LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
+    LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_IS, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM,
+    LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM,
+    LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_CM,
+    LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
+    LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM,
+    LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_AL, LBP_AL, LBP_PR, LBP_PR, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL,
+    LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
+    LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM,
+    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
+    LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
+    LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_CM, LBP_SA, LBP_SA, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_PR,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NS, LBP_NS, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA,
+    LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_SA,
+    LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_CM, LBP_SA, LBP_SA, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_SA, LBP_XX, LBP_XX,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_GL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_CM,
+    LBP_AL, LBP_CM, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_CM, LBP_CM,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_NS, LBP_BA, LBP_NS, LBP_NS,
+    LBP_NS, LBP_NS, LBP_NS, LBP_PR, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BB, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_GL,
+    LBP_BA, LBP_BA, LBP_BA, LBP_ZW, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_BA, LBP_GL, LBP_BA, LBP_BA, LBP_B2, LBP_AI, LBP_AI, LBP_AL,
+    LBP_QU, LBP_QU, LBP_OP, LBP_QU, LBP_QU, LBP_QU, LBP_OP, LBP_QU,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_IN, LBP_IN, LBP_IN, LBP_BA,
+    LBP_BK, LBP_BK, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL,
+    LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO,
+    LBP_AL, LBP_QU, LBP_QU, LBP_AI, LBP_NS, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NS, LBP_OP, LBP_CL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AI,
+    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PO,
+    LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_PO, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_PR, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
+    LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
+    LBP_AL, LBP_AI, LBP_PR, LBP_PR, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL,
+    LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AI,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_CL, LBP_CL, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID,
+    LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL,
+    LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL,
+    LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_NS, LBP_OP, LBP_CL, LBP_CL,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_ID, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID,
+    LBP_XX, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS,
+    LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_XX,
+    LBP_XX, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS,
+    LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP,
+    LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP,
+    LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_CL, LBP_ID, LBP_CL, LBP_XX, LBP_NS, LBP_NS, LBP_EX, LBP_EX,
+    LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
+    LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_GL,
+    LBP_XX, LBP_EX, LBP_ID, LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_ID,
+    LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_CL, LBP_ID, LBP_CL, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_EX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_XX,
+    LBP_XX, LBP_CL, LBP_OP, LBP_CL, LBP_CL, LBP_NS, LBP_AL, LBP_NS,
+    LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS,
+    LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NS, LBP_NS,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_PO, LBP_PR, LBP_ID, LBP_ID, LBP_ID, LBP_PR, LBP_PR, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CB, LBP_AI, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM
+  }
+};

Added: tuxmath/trunk/src/linebreak.c
===================================================================
--- tuxmath/trunk/src/linebreak.c	                        (rev 0)
+++ tuxmath/trunk/src/linebreak.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,1335 @@
+/* linebreak.c - line breaking of Unicode strings
+   Copyright (C) 2001-2003, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible at clisp.cons.org>, 2001.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "linebreak.h"
+
+#include <stdlib.h>
+#include <string.h>
+//#include "c-ctype.h"
+#include "ctype.h"
+#include "xsize.h"
+#include "unistr.h"
+#include "uniwidth.h"
+#include "cjk.h"
+#include "streq.h"
+
+
+static int
+is_utf8_encoding (const char *encoding)
+{
+  if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0))
+    return 1;
+  return 0;
+}
+
+
+/* Determine the line break points in S, and store the result at p[0..n-1].  */
+/* We don't support line breaking of complex-context dependent characters
+   (Thai, Lao, Myanmar, Khmer) yet, because it requires dictionary lookup. */
+
+/* Line breaking classification.  */
+
+enum
+{
+  /* Values >= 20 are resolved at run time. */
+  LBP_BK =  0, /* mandatory break */
+/*LBP_CR,         carriage return - not used here because it's a DOSism */
+/*LBP_LF,         line feed - not used here because it's a DOSism */
+  LBP_CM = 20, /* attached characters and combining marks */
+/*LBP_SG,         surrogates - not used here because they are not characters */
+  LBP_ZW =  1, /* zero width space */
+  LBP_IN =  2, /* inseparable */
+  LBP_GL =  3, /* non-breaking (glue) */
+  LBP_CB = 22, /* contingent break opportunity */
+  LBP_SP = 21, /* space */
+  LBP_BA =  4, /* break opportunity after */
+  LBP_BB =  5, /* break opportunity before */
+  LBP_B2 =  6, /* break opportunity before and after */
+  LBP_HY =  7, /* hyphen */
+  LBP_NS =  8, /* non starter */
+  LBP_OP =  9, /* opening punctuation */
+  LBP_CL = 10, /* closing punctuation */
+  LBP_QU = 11, /* ambiguous quotation */
+  LBP_EX = 12, /* exclamation/interrogation */
+  LBP_ID = 13, /* ideographic */
+  LBP_NU = 14, /* numeric */
+  LBP_IS = 15, /* infix separator (numeric) */
+  LBP_SY = 16, /* symbols allowing breaks */
+  LBP_AL = 17, /* ordinary alphabetic and symbol characters */
+  LBP_PR = 18, /* prefix (numeric) */
+  LBP_PO = 19, /* postfix (numeric) */
+  LBP_SA = 23, /* complex context (South East Asian) */
+  LBP_AI = 24, /* ambiguous (alphabetic or ideograph) */
+  LBP_XX = 25  /* unknown */
+};
+
+#include "lbrkprop.h"
+
+static inline unsigned char
+lbrkprop_lookup (unsigned int uc)
+{
+  unsigned int index1 = uc >> lbrkprop_header_0;
+  if (index1 < lbrkprop_header_1)
+    {
+      int lookup1 = lbrkprop.level1[index1];
+      if (lookup1 >= 0)
+        {
+          unsigned int index2 = (uc >> lbrkprop_header_2) & lbrkprop_header_3;
+          int lookup2 = lbrkprop.level2[lookup1 + index2];
+          if (lookup2 >= 0)
+            {
+              unsigned int index3 = uc & lbrkprop_header_4;
+              return lbrkprop.level3[lookup2 + index3];
+            }
+        }
+    }
+  return LBP_XX;
+}
+
+/* Table indexed by two line breaking classifications.  */
+#define D 1  /* direct break opportunity, empty in table 7.3 of UTR #14 */
+#define I 2  /* indirect break opportunity, '%' in table 7.3 of UTR #14 */
+#define P 3  /* prohibited break,           '^' in table 7.3 of UTR #14 */
+static const unsigned char lbrk_table[19][19] = {
+                                /* after */
+        /* ZW IN GL BA BB B2 HY NS OP CL QU EX ID NU IS SY AL PR PO */
+/* ZW */ { P, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, },
+/* IN */ { P, I, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
+/* GL */ { P, I, I, I, I, I, I, I, I, P, I, P, I, I, P, P, I, I, I, },
+/* BA */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
+/* BB */ { P, I, I, I, I, I, I, I, I, P, I, P, I, I, P, P, I, I, I, },
+/* B2 */ { P, D, I, I, D, P, I, I, D, P, I, P, D, D, P, P, D, D, D, },
+/* HY */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
+/* NS */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
+/* OP */ { P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, },
+/* CL */ { P, D, I, I, D, D, I, P, D, P, I, P, D, D, P, P, D, D, I, },
+/* QU */ { P, I, I, I, I, I, I, I, P, P, I, P, I, I, P, P, I, I, I, },
+/* EX */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
+/* ID */ { P, I, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, I, },
+/* NU */ { P, I, I, I, D, D, I, I, D, P, I, P, D, I, P, P, I, D, I, },
+/* IS */ { P, D, I, I, D, D, I, I, D, P, I, P, D, I, P, P, D, D, D, },
+/* SY */ { P, D, I, I, D, D, I, I, D, P, I, P, D, I, P, P, D, D, D, },
+/* AL */ { P, I, I, I, D, D, I, I, D, P, I, P, D, I, P, P, I, D, D, },
+/* PR */ { P, D, I, I, D, D, I, I, I, P, I, P, I, I, P, P, I, D, D, },
+/* PO */ { P, D, I, I, D, D, I, I, D, P, I, P, D, D, P, P, D, D, D, },
+/* "" */
+/* before */
+};
+/* Note: The (B2,B2) entry should probably be D instead of P.  */
+/* Note: The (PR,ID) entry should probably be D instead of I.  */
+
+void
+u8_possible_linebreaks (const unsigned char *s, size_t n, const char *encoding, char *p)
+{
+  int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL);
+  const unsigned char *s_end = s + n;
+  int last_prop = LBP_BK; /* line break property of last non-space character */
+  char *seen_space = NULL; /* Was a space seen after the last non-space character? */
+  char *seen_space2 = NULL; /* At least two spaces after the last non-space? */
+
+  /* Don't break inside multibyte characters.  */
+  memset (p, UC_BREAK_PROHIBITED, n);
+
+  while (s < s_end)
+    {
+      unsigned int uc;
+      int count = u8_mbtouc_unsafe (&uc, s, s_end - s);
+      int prop = lbrkprop_lookup (uc);
+
+      if (prop == LBP_BK)
+        {
+          /* Mandatory break.  */
+          *p = UC_BREAK_MANDATORY;
+          last_prop = LBP_BK;
+          seen_space = NULL;
+          seen_space2 = NULL;
+        }
+      else
+        {
+          char *q;
+
+          /* Resolve property values whose behaviour is not fixed.  */
+          switch (prop)
+            {
+              case LBP_AI:
+                /* Resolve ambiguous.  */
+                prop = LBP_AI_REPLACEMENT;
+                break;
+              case LBP_CB:
+                /* This is arbitrary.  */
+                prop = LBP_ID;
+                break;
+              case LBP_SA:
+                /* We don't handle complex scripts yet.
+                   Treat LBP_SA like LBP_XX.  */
+              case LBP_XX:
+                /* This is arbitrary.  */
+                prop = LBP_AL;
+                break;
+            }
+
+          /* Deal with combining characters.  */
+          q = p;
+          if (prop == LBP_CM)
+            {
+              /* Don't break just before a combining character.  */
+              *p = UC_BREAK_PROHIBITED;
+              /* A combining character turns a preceding space into LBP_AL.  */
+              if (seen_space != NULL)
+                {
+                  q = seen_space;
+                  seen_space = seen_space2;
+                  prop = LBP_AL;
+                  goto lookup_via_table;
+                }
+            }
+          else if (prop == LBP_SP)
+            {
+              /* Don't break just before a space.  */
+              *p = UC_BREAK_PROHIBITED;
+              seen_space2 = seen_space;
+              seen_space = p;
+            }
+          else
+            {
+             lookup_via_table:
+              /* prop must be usable as an index for table 7.3 of UTR #14.  */
+              if (!(prop >= 1 && prop <= sizeof(lbrk_table) / sizeof(lbrk_table[0])))
+                abort ();
+
+              if (last_prop == LBP_BK)
+                {
+                  /* Don't break at the beginning of a line.  */
+                  *q = UC_BREAK_PROHIBITED;
+                }
+              else
+                {
+                  switch (lbrk_table [last_prop-1] [prop-1])
+                    {
+                      case D:
+                        *q = UC_BREAK_POSSIBLE;
+                        break;
+                      case I:
+                        *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED);
+                        break;
+                      case P:
+                        *q = UC_BREAK_PROHIBITED;
+                        break;
+                      default:
+                        abort ();
+                    }
+                }
+              last_prop = prop;
+              seen_space = NULL;
+              seen_space2 = NULL;
+            }
+        }
+
+      s += count;
+      p += count;
+    }
+}
+
+#ifdef unused
+
+void
+u16_possible_linebreaks (const unsigned short *s, size_t n, const char *encoding, char *p)
+{
+  int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL);
+  const unsigned short *s_end = s + n;
+  int last_prop = LBP_BK; /* line break property of last non-space character */
+  char *seen_space = NULL; /* Was a space seen after the last non-space character? */
+  char *seen_space2 = NULL; /* At least two spaces after the last non-space? */
+
+  /* Don't break inside multibyte characters.  */
+  memset (p, UC_BREAK_PROHIBITED, n);
+
+  while (s < s_end)
+    {
+      unsigned int uc;
+      int count = u16_mbtouc_unsafe (&uc, s, s_end - s);
+      int prop = lbrkprop_lookup (uc);
+
+      if (prop == LBP_BK)
+        {
+          /* Mandatory break.  */
+          *p = UC_BREAK_MANDATORY;
+          last_prop = LBP_BK;
+          seen_space = NULL;
+          seen_space2 = NULL;
+        }
+      else
+        {
+          char *q;
+
+          /* Resolve property values whose behaviour is not fixed.  */
+          switch (prop)
+            {
+              case LBP_AI:
+                /* Resolve ambiguous.  */
+                prop = LBP_AI_REPLACEMENT;
+                break;
+              case LBP_CB:
+                /* This is arbitrary.  */
+                prop = LBP_ID;
+                break;
+              case LBP_SA:
+                /* We don't handle complex scripts yet.
+                   Treat LBP_SA like LBP_XX.  */
+              case LBP_XX:
+                /* This is arbitrary.  */
+                prop = LBP_AL;
+                break;
+            }
+
+          /* Deal with combining characters.  */
+          q = p;
+          if (prop == LBP_CM)
+            {
+              /* Don't break just before a combining character.  */
+              *p = UC_BREAK_PROHIBITED;
+              /* A combining character turns a preceding space into LBP_AL.  */
+              if (seen_space != NULL)
+                {
+                  q = seen_space;
+                  seen_space = seen_space2;
+                  prop = LBP_AL;
+                  goto lookup_via_table;
+                }
+            }
+          else if (prop == LBP_SP)
+            {
+              /* Don't break just before a space.  */
+              *p = UC_BREAK_PROHIBITED;
+              seen_space2 = seen_space;
+              seen_space = p;
+            }
+          else
+            {
+             lookup_via_table:
+              /* prop must be usable as an index for table 7.3 of UTR #14.  */
+              if (!(prop >= 1 && prop <= sizeof(lbrk_table) / sizeof(lbrk_table[0])))
+                abort ();
+
+              if (last_prop == LBP_BK)
+                {
+                  /* Don't break at the beginning of a line.  */
+                  *q = UC_BREAK_PROHIBITED;
+                }
+              else
+                {
+                  switch (lbrk_table [last_prop-1] [prop-1])
+                    {
+                      case D:
+                        *q = UC_BREAK_POSSIBLE;
+                        break;
+                      case I:
+                        *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED);
+                        break;
+                      case P:
+                        *q = UC_BREAK_PROHIBITED;
+                        break;
+                      default:
+                        abort ();
+                    }
+                }
+              last_prop = prop;
+              seen_space = NULL;
+              seen_space2 = NULL;
+            }
+        }
+
+      s += count;
+      p += count;
+    }
+}
+
+void
+u32_possible_linebreaks (const unsigned int *s, size_t n, const char *encoding, char *p)
+{
+  int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL);
+  const unsigned int *s_end = s + n;
+  int last_prop = LBP_BK; /* line break property of last non-space character */
+  char *seen_space = NULL; /* Was a space seen after the last non-space character? */
+  char *seen_space2 = NULL; /* At least two spaces after the last non-space? */
+
+  while (s < s_end)
+    {
+      unsigned int uc = *s;
+      int prop = lbrkprop_lookup (uc);
+
+      if (prop == LBP_BK)
+        {
+          /* Mandatory break.  */
+          *p = UC_BREAK_MANDATORY;
+          last_prop = LBP_BK;
+          seen_space = NULL;
+          seen_space2 = NULL;
+        }
+      else
+        {
+          char *q;
+
+          /* Resolve property values whose behaviour is not fixed.  */
+          switch (prop)
+            {
+              case LBP_AI:
+                /* Resolve ambiguous.  */
+                prop = LBP_AI_REPLACEMENT;
+                break;
+              case LBP_CB:
+                /* This is arbitrary.  */
+                prop = LBP_ID;
+                break;
+              case LBP_SA:
+                /* We don't handle complex scripts yet.
+                   Treat LBP_SA like LBP_XX.  */
+              case LBP_XX:
+                /* This is arbitrary.  */
+                prop = LBP_AL;
+                break;
+            }
+
+          /* Deal with combining characters.  */
+          q = p;
+          if (prop == LBP_CM)
+            {
+              /* Don't break just before a combining character.  */
+              *p = UC_BREAK_PROHIBITED;
+              /* A combining character turns a preceding space into LBP_AL.  */
+              if (seen_space != NULL)
+                {
+                  q = seen_space;
+                  seen_space = seen_space2;
+                  prop = LBP_AL;
+                  goto lookup_via_table;
+                }
+            }
+          else if (prop == LBP_SP)
+            {
+              /* Don't break just before a space.  */
+              *p = UC_BREAK_PROHIBITED;
+              seen_space2 = seen_space;
+              seen_space = p;
+            }
+          else
+            {
+             lookup_via_table:
+              /* prop must be usable as an index for table 7.3 of UTR #14.  */
+              if (!(prop >= 1 && prop <= sizeof(lbrk_table) / sizeof(lbrk_table[0])))
+                abort ();
+
+              if (last_prop == LBP_BK)
+                {
+                  /* Don't break at the beginning of a line.  */
+                  *q = UC_BREAK_PROHIBITED;
+                }
+              else
+                {
+                  switch (lbrk_table [last_prop-1] [prop-1])
+                    {
+                      case D:
+                        *q = UC_BREAK_POSSIBLE;
+                        break;
+                      case I:
+                        *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED);
+                        break;
+                      case P:
+                        *q = UC_BREAK_PROHIBITED;
+                        break;
+                      default:
+                        abort ();
+                    }
+                }
+              last_prop = prop;
+              seen_space = NULL;
+              seen_space2 = NULL;
+            }
+        }
+
+      s++;
+      p++;
+    }
+}
+
+#endif
+
+
+/* Choose the best line breaks, assuming the uc_width function.
+   Return the column after the end of the string.  */
+
+int
+u8_width_linebreaks (const unsigned char *s, size_t n,
+                     int width, int start_column, int at_end_columns,
+                     const char *o, const char *encoding,
+                     char *p)
+{
+  const unsigned char *s_end;
+  char *last_p;
+  int last_column;
+  int piece_width;
+
+  u8_possible_linebreaks (s, n, encoding, p);
+
+  s_end = s + n;
+  last_p = NULL;
+  last_column = start_column;
+  piece_width = 0;
+  while (s < s_end)
+    {
+      unsigned int uc;
+      int count = u8_mbtouc_unsafe (&uc, s, s_end - s);
+
+      /* Respect the override.  */
+      if (o != NULL && *o != UC_BREAK_UNDEFINED)
+        *p = *o;
+
+      if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY)
+        {
+          /* An atomic piece of text ends here.  */
+          if (last_p != NULL && last_column + piece_width > width)
+            {
+              /* Insert a line break.  */
+              *last_p = UC_BREAK_POSSIBLE;
+              last_column = 0;
+            }
+        }
+
+      if (*p == UC_BREAK_MANDATORY)
+        {
+          /* uc is a line break character.  */
+          /* Start a new piece at column 0.  */
+          last_p = NULL;
+          last_column = 0;
+          piece_width = 0;
+        }
+      else
+        {
+          /* uc is not a line break character.  */
+          int w;
+
+          if (*p == UC_BREAK_POSSIBLE)
+            {
+              /* Start a new piece.  */
+              last_p = p;
+              last_column += piece_width;
+              piece_width = 0;
+              /* No line break for the moment, may be turned into
+                 UC_BREAK_POSSIBLE later, via last_p. */
+            }
+
+          *p = UC_BREAK_PROHIBITED;
+
+          w = uc_width (uc, encoding);
+          if (w >= 0) /* ignore control characters in the string */
+            piece_width += w;
+         }
+
+      s += count;
+      p += count;
+      if (o != NULL)
+        o += count;
+    }
+
+  /* The last atomic piece of text ends here.  */
+  if (last_p != NULL && last_column + piece_width + at_end_columns > width)
+    {
+      /* Insert a line break.  */
+      *last_p = UC_BREAK_POSSIBLE;
+      last_column = 0;
+    }
+
+  return last_column + piece_width;
+}
+
+#ifdef unused
+
+int
+u16_width_linebreaks (const unsigned short *s, size_t n,
+                      int width, int start_column, int at_end_columns,
+                      const char *o, const char *encoding,
+                      char *p)
+{
+  const unsigned short *s_end;
+  char *last_p;
+  int last_column;
+  int piece_width;
+
+  u16_possible_linebreaks (s, n, encoding, p);
+
+  s_end = s + n;
+  last_p = NULL;
+  last_column = start_column;
+  piece_width = 0;
+  while (s < s_end)
+    {
+      unsigned int uc;
+      int count = u16_mbtouc_unsafe (&uc, s, s_end - s);
+
+      /* Respect the override.  */
+      if (o != NULL && *o != UC_BREAK_UNDEFINED)
+        *p = *o;
+
+      if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY)
+        {
+          /* An atomic piece of text ends here.  */
+          if (last_p != NULL && last_column + piece_width > width)
+            {
+              /* Insert a line break.  */
+              *last_p = UC_BREAK_POSSIBLE;
+              last_column = 0;
+            }
+        }
+
+      if (*p == UC_BREAK_MANDATORY)
+        {
+          /* uc is a line break character.  */
+          /* Start a new piece at column 0.  */
+          last_p = NULL;
+          last_column = 0;
+          piece_width = 0;
+        }
+      else
+        {
+          /* uc is not a line break character.  */
+          int w;
+
+          if (*p == UC_BREAK_POSSIBLE)
+            {
+              /* Start a new piece.  */
+              last_p = p;
+              last_column += piece_width;
+              piece_width = 0;
+              /* No line break for the moment, may be turned into
+                 UC_BREAK_POSSIBLE later, via last_p. */
+            }
+
+          *p = UC_BREAK_PROHIBITED;
+
+          w = uc_width (uc, encoding);
+          if (w >= 0) /* ignore control characters in the string */
+            piece_width += w;
+         }
+
+      s += count;
+      p += count;
+      if (o != NULL)
+        o += count;
+    }
+
+  /* The last atomic piece of text ends here.  */
+  if (last_p != NULL && last_column + piece_width + at_end_columns > width)
+    {
+      /* Insert a line break.  */
+      *last_p = UC_BREAK_POSSIBLE;
+      last_column = 0;
+    }
+
+  return last_column + piece_width;
+}
+
+int
+u32_width_linebreaks (const unsigned int *s, size_t n,
+                      int width, int start_column, int at_end_columns,
+                      const char *o, const char *encoding,
+                      char *p)
+{
+  const unsigned int *s_end;
+  char *last_p;
+  int last_column;
+  int piece_width;
+
+  u32_possible_linebreaks (s, n, encoding, p);
+
+  s_end = s + n;
+  last_p = NULL;
+  last_column = start_column;
+  piece_width = 0;
+  while (s < s_end)
+    {
+      unsigned int uc = *s;
+
+      /* Respect the override.  */
+      if (o != NULL && *o != UC_BREAK_UNDEFINED)
+        *p = *o;
+
+      if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY)
+        {
+          /* An atomic piece of text ends here.  */
+          if (last_p != NULL && last_column + piece_width > width)
+            {
+              /* Insert a line break.  */
+              *last_p = UC_BREAK_POSSIBLE;
+              last_column = 0;
+            }
+        }
+
+      if (*p == UC_BREAK_MANDATORY)
+        {
+          /* uc is a line break character.  */
+          /* Start a new piece at column 0.  */
+          last_p = NULL;
+          last_column = 0;
+          piece_width = 0;
+        }
+      else
+        {
+          /* uc is not a line break character.  */
+          int w;
+
+          if (*p == UC_BREAK_POSSIBLE)
+            {
+              /* Start a new piece.  */
+              last_p = p;
+              last_column += piece_width;
+              piece_width = 0;
+              /* No line break for the moment, may be turned into
+                 UC_BREAK_POSSIBLE later, via last_p. */
+            }
+
+          *p = UC_BREAK_PROHIBITED;
+
+          w = uc_width (uc, encoding);
+          if (w >= 0) /* ignore control characters in the string */
+            piece_width += w;
+         }
+
+      s++;
+      p++;
+      if (o != NULL)
+        o++;
+    }
+
+  /* The last atomic piece of text ends here.  */
+  if (last_p != NULL && last_column + piece_width + at_end_columns > width)
+    {
+      /* Insert a line break.  */
+      *last_p = UC_BREAK_POSSIBLE;
+      last_column = 0;
+    }
+
+  return last_column + piece_width;
+}
+
+#endif
+
+
+#ifdef TEST1
+
+#include <stdio.h>
+
+/* Read the contents of an input stream, and return it, terminated with a NUL
+   byte. */
+char *
+read_file (FILE *stream)
+{
+#define BUFSIZE 4096
+  char *buf = NULL;
+  int alloc = 0;
+  int size = 0;
+  int count;
+
+  while (! feof (stream))
+    {
+      if (size + BUFSIZE > alloc)
+        {
+          alloc = alloc + alloc / 2;
+          if (alloc < size + BUFSIZE)
+            alloc = size + BUFSIZE;
+          buf = realloc (buf, alloc);
+          if (buf == NULL)
+            {
+              fprintf (stderr, "out of memory\n");
+              exit (1);
+            }
+        }
+      count = fread (buf + size, 1, BUFSIZE, stream);
+      if (count == 0)
+        {
+          if (ferror (stream))
+            {
+              perror ("fread");
+              exit (1);
+            }
+        }
+      else
+        size += count;
+    }
+  buf = realloc (buf, size + 1);
+  if (buf == NULL)
+    {
+      fprintf (stderr, "out of memory\n");
+      exit (1);
+    }
+  buf[size] = '\0';
+  return buf;
+#undef BUFSIZE
+}
+
+int
+main (int argc, char * argv[])
+{
+  if (argc == 1)
+    {
+      /* Display all the break opportunities in the input string.  */
+      char *input = read_file (stdin);
+      int length = strlen (input);
+      char *breaks = malloc (length);
+      int i;
+
+      u8_possible_linebreaks ((unsigned char *) input, length, "UTF-8", breaks);
+
+      for (i = 0; i < length; i++)
+        {
+          switch (breaks[i])
+            {
+              case UC_BREAK_POSSIBLE:
+                /* U+2027 in UTF-8 encoding */
+                putc (0xe2, stdout); putc (0x80, stdout); putc (0xa7, stdout);
+                break;
+              case UC_BREAK_MANDATORY:
+                /* U+21B2 (or U+21B5) in UTF-8 encoding */
+                putc (0xe2, stdout); putc (0x86, stdout); putc (0xb2, stdout);
+                break;
+              case UC_BREAK_PROHIBITED:
+                break;
+              default:
+                abort ();
+            }
+          putc (input[i], stdout);
+        }
+
+      free (breaks);
+
+      return 0;
+    }
+  else if (argc == 2)
+    {
+      /* Insert line breaks for a given width.  */
+      int width = atoi (argv[1]);
+      char *input = read_file (stdin);
+      int length = strlen (input);
+      char *breaks = malloc (length);
+      int i;
+
+      u8_width_linebreaks ((unsigned char *) input, length, width, 0, 0, NULL, "UTF-8", breaks);
+
+      for (i = 0; i < length; i++)
+        {
+          switch (breaks[i])
+            {
+              case UC_BREAK_POSSIBLE:
+                putc ('\n', stdout);
+                break;
+              case UC_BREAK_MANDATORY:
+                break;
+              case UC_BREAK_PROHIBITED:
+                break;
+              default:
+                abort ();
+            }
+          putc (input[i], stdout);
+        }
+
+      free (breaks);
+
+      return 0;
+    }
+  else
+    return 1;
+}
+
+#endif /* TEST1 */
+
+
+/* Now the same thing with an arbitrary encoding.
+
+   We convert the input string to Unicode.
+
+   The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16,
+   UTF-16BE, UTF-16LE, UTF-7.  UCS-2 supports only characters up to
+   \U0000FFFF.  UTF-16 and variants support only characters up to
+   \U0010FFFF.  UTF-7 is way too complex and not supported by glibc-2.1.
+   UCS-4 specification leaves doubts about endianness and byte order mark.
+   glibc currently interprets it as big endian without byte order mark,
+   but this is not backed by an RFC.  So we use UTF-8. It supports
+   characters up to \U7FFFFFFF and is unambiguously defined.  */
+
+#if HAVE_ICONV
+
+#include <iconv.h>
+#include <errno.h>
+
+/* Luckily, the encoding's name is platform independent.  */
+#define UTF8_NAME "UTF-8"
+
+/* Return the length of a string after conversion through an iconv_t.  */
+static size_t
+iconv_string_length (iconv_t cd, const char *s, size_t n)
+{
+#define TMPBUFSIZE 4096
+  size_t count = 0;
+  char tmpbuf[TMPBUFSIZE];
+  const char *inptr = s;
+  size_t insize = n;
+  while (insize > 0)
+    {
+      char *outptr = tmpbuf;
+      size_t outsize = TMPBUFSIZE;
+      size_t res = iconv (cd, (ICONV_CONST char **) &inptr, &insize, &outptr, &outsize);
+      if (res == (size_t)(-1) && errno != E2BIG)
+        return (size_t)(-1);
+      count += outptr - tmpbuf;
+    }
+  /* Avoid glibc-2.1 bug and Solaris 7 through 9 bug.  */
+#if defined _LIBICONV_VERSION \
+    || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun)
+  {
+    char *outptr = tmpbuf;
+    size_t outsize = TMPBUFSIZE;
+    size_t res = iconv (cd, NULL, NULL, &outptr, &outsize);
+    if (res == (size_t)(-1))
+      return (size_t)(-1);
+    count += outptr - tmpbuf;
+  }
+  /* Return to the initial state.  */
+  iconv (cd, NULL, NULL, NULL, NULL);
+#endif
+  return count;
+#undef TMPBUFSIZE
+}
+
+static void
+iconv_string_keeping_offsets (iconv_t cd, const char *s, size_t n,
+                              size_t *offtable, char *t, size_t m)
+{
+  size_t i;
+  const char *s_end;
+  const char *inptr;
+  char *outptr;
+  size_t outsize;
+  /* Avoid glibc-2.1 bug.  */
+#if !defined _LIBICONV_VERSION && (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1)
+  const size_t extra = 1;
+#else
+  const size_t extra = 0;
+#endif
+
+  for (i = 0; i < n; i++)
+    offtable[i] = (size_t)(-1);
+
+  s_end = s + n;
+  inptr = s;
+  outptr = t;
+  outsize = m + extra;
+  while (inptr < s_end)
+    {
+      const char *saved_inptr;
+      size_t insize;
+      size_t res;
+
+      offtable[inptr - s] = outptr - t;
+
+      saved_inptr = inptr;
+      res = (size_t)(-1);
+      for (insize = 1; inptr + insize <= s_end; insize++)
+        {
+          res = iconv (cd, (ICONV_CONST char **) &inptr, &insize, &outptr, &outsize);
+          if (!(res == (size_t)(-1) && errno == EINVAL))
+            break;
+          /* We expect that no input bytes have been consumed so far.  */
+          if (inptr != saved_inptr)
+            abort ();
+        }
+      /* After we verified the convertibility and computed the translation's
+         size m, there shouldn't be any conversion error here. */
+      if (res == (size_t)(-1))
+        abort ();
+    }
+  /* Avoid glibc-2.1 bug and Solaris 7 bug.  */
+#if defined _LIBICONV_VERSION \
+    || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun)
+  if (iconv (cd, NULL, NULL, &outptr, &outsize) == (size_t)(-1))
+    abort ();
+#endif
+  /* We should have produced exactly m output bytes.  */
+  if (outsize != extra)
+    abort ();
+}
+
+#endif /* HAVE_ICONV */
+
+#if C_CTYPE_ASCII
+
+/* Tests whether a string is entirely ASCII.  Returns 1 if yes.
+   Returns 0 if the string is in an 8-bit encoding or an ISO-2022 encoding.  */
+static int
+is_all_ascii (const char *s, size_t n)
+{
+  for (; n > 0; s++, n--)
+    {
+      unsigned char c = (unsigned char) *s;
+
+      if (!(c_isprint (c) || c_isspace (c)))
+	return 0;
+    }
+  return 1;
+}
+
+#endif /* C_CTYPE_ASCII */
+
+#if defined unused || defined TEST2
+
+void
+mbs_possible_linebreaks (const char *s, size_t n, const char *encoding,
+                         char *p)
+{
+  if (n == 0)
+    return;
+  if (is_utf8_encoding (encoding))
+    u8_possible_linebreaks ((const unsigned char *) s, n, encoding, p);
+  else
+    {
+#if HAVE_ICONV
+      iconv_t to_utf8;
+      /* Avoid glibc-2.1 bug with EUC-KR.  */
+# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION
+      if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0))
+	to_utf8 = (iconv_t)(-1);
+      else
+# endif
+      /* Avoid Solaris 9 bug with GB2312, EUC-TW, BIG5, BIG5-HKSCS, GBK,
+         GB18030.  */
+# if defined __sun && !defined _LIBICONV_VERSION
+      if (   STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+          || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
+          || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
+          || STREQ (encoding, "BIG5-HKSCS", 'B', 'I', 'G', '5', '-', 'H', 'K', 'S', 'C')
+          || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
+          || STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
+        to_utf8 = (iconv_t)(-1);
+      else
+# endif
+      to_utf8 = iconv_open (UTF8_NAME, encoding);
+      if (to_utf8 != (iconv_t)(-1))
+        {
+          /* Determine the length of the resulting UTF-8 string.  */
+          size_t m = iconv_string_length (to_utf8, s, n);
+          if (m != (size_t)(-1))
+            {
+              /* Convert the string to UTF-8 and build a translation table
+                 from offsets into s to offsets into the translated string.  */
+	      size_t memory_size = xsum3 (xtimes (n, sizeof (size_t)), m, m);
+              char *memory =
+		(size_in_bounds_p (memory_size) ? malloc (memory_size) : NULL);
+              if (memory != NULL)
+                {
+                  size_t *offtable = (size_t *) memory;
+                  char *t = (char *) (offtable + n);
+                  char *q = (char *) (t + m);
+                  size_t i;
+
+                  iconv_string_keeping_offsets (to_utf8, s, n, offtable, t, m);
+
+                  /* Determine the possible line breaks of the UTF-8 string.  */
+                  u8_possible_linebreaks ((const unsigned char *) t, m, encoding, q);
+
+                  /* Translate the result back to the original string.  */
+                  memset (p, UC_BREAK_PROHIBITED, n);
+                  for (i = 0; i < n; i++)
+                    if (offtable[i] != (size_t)(-1))
+                      p[i] = q[offtable[i]];
+
+                  free (memory);
+                  iconv_close (to_utf8);
+                  return;
+                }
+            }
+          iconv_close (to_utf8);
+        }
+#endif
+      /* Impossible to convert.  */
+#if C_CTYPE_ASCII
+      if (is_all_ascii (s, n))
+	{
+	  /* ASCII is a subset of UTF-8.  */
+	  u8_possible_linebreaks ((const unsigned char *) s, n, encoding, p);
+	  return;
+	}
+#endif
+      /* We have a non-ASCII string and cannot convert it.
+	 Don't produce line breaks except those already present in the
+	 input string.  All we assume here is that the encoding is
+	 minimally ASCII compatible.  */
+      {
+        const char *s_end = s + n;
+        while (s < s_end)
+          {
+            *p = (*s == '\n' ? UC_BREAK_MANDATORY : UC_BREAK_PROHIBITED);
+            s++;
+            p++;
+          }
+      }
+    }
+}
+
+#endif
+
+int
+mbs_width_linebreaks (const char *s, size_t n,
+                      int width, int start_column, int at_end_columns,
+                      const char *o, const char *encoding,
+                      char *p)
+{
+  if (n == 0)
+    return start_column;
+  if (is_utf8_encoding (encoding))
+    return u8_width_linebreaks ((const unsigned char *) s, n, width, start_column, at_end_columns, o, encoding, p);
+  else
+    {
+#if HAVE_ICONV
+      iconv_t to_utf8;
+      /* Avoid glibc-2.1 bug with EUC-KR.  */
+# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION
+      if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0))
+	to_utf8 = (iconv_t)(-1);
+      else
+# endif
+      /* Avoid Solaris 9 bug with GB2312, EUC-TW, BIG5, BIG5-HKSCS, GBK,
+         GB18030.  */
+# if defined __sun && !defined _LIBICONV_VERSION
+      if (   STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+          || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
+          || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
+          || STREQ (encoding, "BIG5-HKSCS", 'B', 'I', 'G', '5', '-', 'H', 'K', 'S', 'C')
+          || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
+          || STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
+        to_utf8 = (iconv_t)(-1);
+      else
+# endif
+      to_utf8 = iconv_open (UTF8_NAME, encoding);
+      if (to_utf8 != (iconv_t)(-1))
+        {
+          /* Determine the length of the resulting UTF-8 string.  */
+          size_t m = iconv_string_length (to_utf8, s, n);
+          if (m != (size_t)(-1))
+            {
+              /* Convert the string to UTF-8 and build a translation table
+                 from offsets into s to offsets into the translated string.  */
+	      size_t memory_size =
+		xsum4 (xtimes (n, sizeof (size_t)), m, m,
+		       (o != NULL ? m : 0));
+	      char *memory =
+		(char *)
+		(size_in_bounds_p (memory_size) ? malloc (memory_size) : NULL);
+              if (memory != NULL)
+                {
+                  size_t *offtable = (size_t *) memory;
+                  char *t = (char *) (offtable + n);
+                  char *q = (char *) (t + m);
+                  char *o8 = (o != NULL ? (char *) (q + m) : NULL);
+                  int res_column;
+                  size_t i;
+
+                  iconv_string_keeping_offsets (to_utf8, s, n, offtable, t, m);
+
+                  /* Translate the overrides to the UTF-8 string.  */
+                  if (o != NULL)
+                    {
+                      memset (o8, UC_BREAK_UNDEFINED, m);
+                      for (i = 0; i < n; i++)
+                        if (offtable[i] != (size_t)(-1))
+                          o8[offtable[i]] = o[i];
+                    }
+
+                  /* Determine the line breaks of the UTF-8 string.  */
+                  res_column =
+                    u8_width_linebreaks ((const unsigned char *) t, m, width, start_column, at_end_columns, o8, encoding, q);
+
+                  /* Translate the result back to the original string.  */
+                  memset (p, UC_BREAK_PROHIBITED, n);
+                  for (i = 0; i < n; i++)
+                    if (offtable[i] != (size_t)(-1))
+                      p[i] = q[offtable[i]];
+
+                  free (memory);
+                  iconv_close (to_utf8);
+                  return res_column;
+                }
+            }
+          iconv_close (to_utf8);
+        }
+#endif
+      /* Impossible to convert.  */
+#if C_CTYPE_ASCII
+      if (is_all_ascii (s, n))
+	{
+	  /* ASCII is a subset of UTF-8.  */
+	  return u8_width_linebreaks ((const unsigned char *) s, n, width, start_column, at_end_columns, o, encoding, p);
+	}
+#endif
+      /* We have a non-ASCII string and cannot convert it.
+	 Don't produce line breaks except those already present in the
+	 input string.  All we assume here is that the encoding is
+	 minimally ASCII compatible.  */
+      {
+        const char *s_end = s + n;
+        while (s < s_end)
+          {
+            *p = ((o != NULL && *o == UC_BREAK_MANDATORY) || *s == '\n'
+                  ? UC_BREAK_MANDATORY
+                  : UC_BREAK_PROHIBITED);
+            s++;
+            p++;
+            if (o != NULL)
+              o++;
+          }
+        /* We cannot compute widths in this case.  */
+        return start_column;
+      }
+    }
+}
+
+
+#ifdef TEST2
+
+#include <stdio.h>
+#include <locale.h>
+
+/* Read the contents of an input stream, and return it, terminated with a NUL
+   byte. */
+char *
+read_file (FILE *stream)
+{
+#define BUFSIZE 4096
+  char *buf = NULL;
+  int alloc = 0;
+  int size = 0;
+  int count;
+
+  while (! feof (stream))
+    {
+      if (size + BUFSIZE > alloc)
+        {
+          alloc = alloc + alloc / 2;
+          if (alloc < size + BUFSIZE)
+            alloc = size + BUFSIZE;
+          buf = realloc (buf, alloc);
+          if (buf == NULL)
+            {
+              fprintf (stderr, "out of memory\n");
+              exit (1);
+            }
+        }
+      count = fread (buf + size, 1, BUFSIZE, stream);
+      if (count == 0)
+        {
+          if (ferror (stream))
+            {
+              perror ("fread");
+              exit (1);
+            }
+        }
+      else
+        size += count;
+    }
+  buf = realloc (buf, size + 1);
+  if (buf == NULL)
+    {
+      fprintf (stderr, "out of memory\n");
+      exit (1);
+    }
+  buf[size] = '\0';
+  return buf;
+#undef BUFSIZE
+}
+
+int
+main (int argc, char * argv[])
+{
+  setlocale (LC_CTYPE, "");
+  if (argc == 1)
+    {
+      /* Display all the break opportunities in the input string.  */
+      char *input = read_file (stdin);
+      int length = strlen (input);
+      char *breaks = malloc (length);
+      int i;
+
+      mbs_possible_linebreaks (input, length, locale_charset (), breaks);
+
+      for (i = 0; i < length; i++)
+        {
+          switch (breaks[i])
+            {
+              case UC_BREAK_POSSIBLE:
+                putc ('|', stdout);
+                break;
+              case UC_BREAK_MANDATORY:
+                break;
+              case UC_BREAK_PROHIBITED:
+                break;
+              default:
+                abort ();
+            }
+          putc (input[i], stdout);
+        }
+
+      free (breaks);
+
+      return 0;
+    }
+  else if (argc == 2)
+    {
+      /* Insert line breaks for a given width.  */
+      int width = atoi (argv[1]);
+      char *input = read_file (stdin);
+      int length = strlen (input);
+      char *breaks = malloc (length);
+      int i;
+
+      mbs_width_linebreaks (input, length, width, 0, 0, NULL, locale_charset (), breaks);
+
+      for (i = 0; i < length; i++)
+        {
+          switch (breaks[i])
+            {
+              case UC_BREAK_POSSIBLE:
+                putc ('\n', stdout);
+                break;
+              case UC_BREAK_MANDATORY:
+                break;
+              case UC_BREAK_PROHIBITED:
+                break;
+              default:
+                abort ();
+            }
+          putc (input[i], stdout);
+        }
+
+      free (breaks);
+
+      return 0;
+    }
+  else
+    return 1;
+}
+
+#endif /* TEST2 */

Added: tuxmath/trunk/src/linebreak.h
===================================================================
--- tuxmath/trunk/src/linebreak.h	                        (rev 0)
+++ tuxmath/trunk/src/linebreak.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,94 @@
+/* linebreak.h - line breaking of Unicode strings
+   Copyright (C) 2001-2003, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible at clisp.cons.org>, 2001.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LINEBREAK_H
+#define _LINEBREAK_H
+
+/* Get size_t.  */
+#include <stddef.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Line breaking.  */
+
+enum {
+  UC_BREAK_UNDEFINED,
+  UC_BREAK_PROHIBITED,
+  UC_BREAK_POSSIBLE,
+  UC_BREAK_MANDATORY,
+  UC_BREAK_HYPHENATION
+};
+
+/* Determine the line break points in S, and store the result at p[0..n-1].
+   p[i] = UC_BREAK_MANDATORY means that s[i] is a line break character.
+   p[i] = UC_BREAK_POSSIBLE means that a line break may be inserted between
+          s[i-1] and s[i].
+   p[i] = UC_BREAK_HYPHENATION means that a hyphen and a line break may be
+          inserted between s[i-1] and s[i].  But beware of language dependent
+          hyphenation rules.
+   p[i] = UC_BREAK_PROHIBITED means that s[i-1] and s[i] must not be separated.
+ */
+extern void u8_possible_linebreaks (const unsigned char *s, size_t n,
+                                    const char *encoding,
+                                    char *p);
+extern void u16_possible_linebreaks (const unsigned short *s, size_t n,
+                                     const char *encoding,
+                                     char *p);
+extern void u32_possible_linebreaks (const unsigned int *s, size_t n,
+                                     const char *encoding,
+                                     char *p);
+extern void mbs_possible_linebreaks (const char *s, size_t n,
+                                     const char *encoding,
+                                     char *p);
+
+/* Choose the best line breaks, assuming the uc_width function.
+   Return the column after the end of the string.
+   o is an optional override; if o[i] != UC_BREAK_UNDEFINED, o[i] takes
+   precedence over p[i] as returned by the *_possible_linebreaks function.
+ */
+extern int
+       u8_width_linebreaks (const unsigned char *s, size_t n,
+                            int width, int start_column, int at_end_columns,
+                            const char *o, const char *encoding,
+                            char *p);
+extern int
+       u16_width_linebreaks (const unsigned short *s, size_t n,
+                             int width, int start_column, int at_end_columns,
+                             const char *o, const char *encoding,
+                             char *p);
+extern int
+       u32_width_linebreaks (const unsigned int *s, size_t n,
+                             int width, int start_column, int at_end_columns,
+                             const char *o, const char *encoding,
+                             char *p);
+extern int
+       mbs_width_linebreaks (const char *s, size_t n,
+                             int width, int start_column, int at_end_columns,
+                             const char *o, const char *encoding,
+                             char *p);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LINEBREAK_H */

Modified: tuxmath/trunk/src/linewrap.c
===================================================================
--- tuxmath/trunk/src/linewrap.c	2009-02-05 13:09:44 UTC (rev 870)
+++ tuxmath/trunk/src/linewrap.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -24,7 +24,7 @@
 //#include <locale.h>
 #include "gettext.h"
 
-#include "../linebreak/linebreak.h"
+#include "linebreak.h"
 #include "linewrap.h"
 
 static char *wrapped_lines0[MAX_LINES];  // for internal storage

Added: tuxmath/trunk/src/localcharset.h
===================================================================
--- tuxmath/trunk/src/localcharset.h	                        (rev 0)
+++ tuxmath/trunk/src/localcharset.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,41 @@
+/* Determine a canonical name for the current locale's character encoding.
+   Copyright (C) 2000-2003 Free Software Foundation, Inc.
+   This file is part of the GNU CHARSET Library.
+
+   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, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */

Added: tuxmath/trunk/src/streq.h
===================================================================
--- tuxmath/trunk/src/streq.h	                        (rev 0)
+++ tuxmath/trunk/src/streq.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,176 @@
+/* Optimized string comparison.
+   Copyright (C) 2001-2002, 2007 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno at clisp.org>.  */
+
+#ifndef _GL_STREQ_H
+#define _GL_STREQ_H
+
+#include <string.h>
+
+/* STREQ allows to optimize string comparison with a small literal string.
+     STREQ (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+   is semantically equivalent to
+     strcmp (s, "EUC-KR") == 0
+   just faster.  */
+
+/* Help GCC to generate good code for string comparisons with
+   immediate strings. */
+#if defined (__GNUC__) && defined (__OPTIMIZE__)
+
+static inline int
+streq9 (const char *s1, const char *s2)
+{
+  return strcmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+streq8 (const char *s1, const char *s2, char s28)
+{
+  if (s1[8] == s28)
+    {
+      if (s28 == 0)
+        return 1;
+      else
+        return streq9 (s1, s2);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq7 (const char *s1, const char *s2, char s27, char s28)
+{
+  if (s1[7] == s27)
+    {
+      if (s27 == 0)
+        return 1;
+      else
+        return streq8 (s1, s2, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+  if (s1[6] == s26)
+    {
+      if (s26 == 0)
+        return 1;
+      else
+        return streq7 (s1, s2, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+  if (s1[5] == s25)
+    {
+      if (s25 == 0)
+        return 1;
+      else
+        return streq6 (s1, s2, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[4] == s24)
+    {
+      if (s24 == 0)
+        return 1;
+      else
+        return streq5 (s1, s2, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[3] == s23)
+    {
+      if (s23 == 0)
+        return 1;
+      else
+        return streq4 (s1, s2, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[2] == s22)
+    {
+      if (s22 == 0)
+        return 1;
+      else
+        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[1] == s21)
+    {
+      if (s21 == 0)
+        return 1;
+      else
+        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[0] == s20)
+    {
+      if (s20 == 0)
+        return 1;
+      else
+        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  (strcmp (s1, s2) == 0)
+
+#endif
+
+#endif /* _GL_STREQ_H */

Added: tuxmath/trunk/src/u16-mbtouc-aux.c
===================================================================
--- tuxmath/trunk/src/u16-mbtouc-aux.c	                        (rev 0)
+++ tuxmath/trunk/src/u16-mbtouc-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,51 @@
+/* Conversion UTF-16 to UCS-4.
+   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if HAVE_INLINE
+
+int
+u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n)
+{
+  uint16_t c = *s;
+
+  if (c < 0xdc00)
+    {
+      if (n >= 2)
+	{
+	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
+	    {
+	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
+	      return 2;
+	    }
+	  /* invalid multibyte character */
+	}
+      else
+	{
+	  /* incomplete multibyte character */
+	}
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u16-mbtouc-aux.c~
===================================================================
--- tuxmath/trunk/src/u16-mbtouc-aux.c~	                        (rev 0)
+++ tuxmath/trunk/src/u16-mbtouc-aux.c~	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,51 @@
+/* Conversion UTF-16 to UCS-4.
+   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "../unistr.h"
+
+#if HAVE_INLINE
+
+int
+u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n)
+{
+  uint16_t c = *s;
+
+  if (c < 0xdc00)
+    {
+      if (n >= 2)
+	{
+	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
+	    {
+	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
+	      return 2;
+	    }
+	  /* invalid multibyte character */
+	}
+      else
+	{
+	  /* incomplete multibyte character */
+	}
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u16-mbtouc-unsafe-aux.c
===================================================================
--- tuxmath/trunk/src/u16-mbtouc-unsafe-aux.c	                        (rev 0)
+++ tuxmath/trunk/src/u16-mbtouc-unsafe-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,55 @@
+/* Conversion UTF-16 to UCS-4.
+   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if HAVE_INLINE
+
+int
+u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n)
+{
+  uint16_t c = *s;
+
+#if CONFIG_UNICODE_SAFETY
+  if (c < 0xdc00)
+#endif
+    {
+      if (n >= 2)
+	{
+#if CONFIG_UNICODE_SAFETY
+	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
+#endif
+	    {
+	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
+	      return 2;
+	    }
+	  /* invalid multibyte character */
+	}
+      else
+	{
+	  /* incomplete multibyte character */
+	}
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u16-mbtouc-unsafe.c
===================================================================
--- tuxmath/trunk/src/u16-mbtouc-unsafe.c	                        (rev 0)
+++ tuxmath/trunk/src/u16-mbtouc-unsafe.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,60 @@
+/* Look at first character in UTF-16 string.
+   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if !HAVE_INLINE
+
+int
+u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n)
+{
+  uint16_t c = *s;
+
+  if (c < 0xd800 || c >= 0xe000)
+    {
+      *puc = c;
+      return 1;
+    }
+#if CONFIG_UNICODE_SAFETY
+  if (c < 0xdc00)
+#endif
+    {
+      if (n >= 2)
+	{
+#if CONFIG_UNICODE_SAFETY
+	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
+#endif
+	    {
+	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
+	      return 2;
+	    }
+	  /* invalid multibyte character */
+	}
+      else
+	{
+	  /* incomplete multibyte character */
+	}
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u16-mbtouc.c
===================================================================
--- tuxmath/trunk/src/u16-mbtouc.c	                        (rev 0)
+++ tuxmath/trunk/src/u16-mbtouc.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,56 @@
+/* Look at first character in UTF-16 string.
+   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if !HAVE_INLINE
+
+int
+u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n)
+{
+  uint16_t c = *s;
+
+  if (c < 0xd800 || c >= 0xe000)
+    {
+      *puc = c;
+      return 1;
+    }
+  if (c < 0xdc00)
+    {
+      if (n >= 2)
+	{
+	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
+	    {
+	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
+	      return 2;
+	    }
+	  /* invalid multibyte character */
+	}
+      else
+	{
+	  /* incomplete multibyte character */
+	}
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u16-mbtouc.c~
===================================================================
--- tuxmath/trunk/src/u16-mbtouc.c~	                        (rev 0)
+++ tuxmath/trunk/src/u16-mbtouc.c~	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,56 @@
+/* Look at first character in UTF-16 string.
+   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "../unistr.h"
+
+#if !HAVE_INLINE
+
+int
+u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n)
+{
+  uint16_t c = *s;
+
+  if (c < 0xd800 || c >= 0xe000)
+    {
+      *puc = c;
+      return 1;
+    }
+  if (c < 0xdc00)
+    {
+      if (n >= 2)
+	{
+	  if (s[1] >= 0xdc00 && s[1] < 0xe000)
+	    {
+	      *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
+	      return 2;
+	    }
+	  /* invalid multibyte character */
+	}
+      else
+	{
+	  /* incomplete multibyte character */
+	}
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u8-mbtouc-aux.c
===================================================================
--- tuxmath/trunk/src/u8-mbtouc-aux.c	                        (rev 0)
+++ tuxmath/trunk/src/u8-mbtouc-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,158 @@
+/* Conversion UTF-8 to UCS-4.
+   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if HAVE_INLINE
+
+int
+u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n)
+{
+  uint8_t c = *s;
+
+  if (c >= 0xc2)
+    {
+      if (c < 0xe0)
+	{
+	  if (n >= 2)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40)
+		{
+		  *puc = ((unsigned int) (c & 0x1f) << 6)
+		         | (unsigned int) (s[1] ^ 0x80);
+		  return 2;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xf0)
+	{
+	  if (n >= 3)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (c >= 0xe1 || s[1] >= 0xa0)
+		  && (c != 0xed || s[1] < 0xa0))
+		{
+		  *puc = ((unsigned int) (c & 0x0f) << 12)
+		         | ((unsigned int) (s[1] ^ 0x80) << 6)
+		         | (unsigned int) (s[2] ^ 0x80);
+		  return 3;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xf8)
+	{
+	  if (n >= 4)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40
+		  && (c >= 0xf1 || s[1] >= 0x90)
+#if 1
+		  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
+#endif
+		 )
+		{
+		  *puc = ((unsigned int) (c & 0x07) << 18)
+		         | ((unsigned int) (s[1] ^ 0x80) << 12)
+		         | ((unsigned int) (s[2] ^ 0x80) << 6)
+		         | (unsigned int) (s[3] ^ 0x80);
+		  return 4;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+#if 0
+      else if (c < 0xfc)
+	{
+	  if (n >= 5)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
+		  && (c >= 0xf9 || s[1] >= 0x88))
+		{
+		  *puc = ((unsigned int) (c & 0x03) << 24)
+		         | ((unsigned int) (s[1] ^ 0x80) << 18)
+		         | ((unsigned int) (s[2] ^ 0x80) << 12)
+		         | ((unsigned int) (s[3] ^ 0x80) << 6)
+		         | (unsigned int) (s[4] ^ 0x80);
+		  return 5;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xfe)
+	{
+	  if (n >= 6)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
+		  && (s[5] ^ 0x80) < 0x40
+		  && (c >= 0xfd || s[1] >= 0x84))
+		{
+		  *puc = ((unsigned int) (c & 0x01) << 30)
+		         | ((unsigned int) (s[1] ^ 0x80) << 24)
+		         | ((unsigned int) (s[2] ^ 0x80) << 18)
+		         | ((unsigned int) (s[3] ^ 0x80) << 12)
+		         | ((unsigned int) (s[4] ^ 0x80) << 6)
+		         | (unsigned int) (s[5] ^ 0x80);
+		  return 6;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+#endif
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u8-mbtouc-unsafe-aux.c
===================================================================
--- tuxmath/trunk/src/u8-mbtouc-unsafe-aux.c	                        (rev 0)
+++ tuxmath/trunk/src/u8-mbtouc-unsafe-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,168 @@
+/* Conversion UTF-8 to UCS-4.
+   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if HAVE_INLINE
+
+int
+u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n)
+{
+  uint8_t c = *s;
+
+  if (c >= 0xc2)
+    {
+      if (c < 0xe0)
+	{
+	  if (n >= 2)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40)
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x1f) << 6)
+		         | (unsigned int) (s[1] ^ 0x80);
+		  return 2;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xf0)
+	{
+	  if (n >= 3)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (c >= 0xe1 || s[1] >= 0xa0)
+		  && (c != 0xed || s[1] < 0xa0))
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x0f) << 12)
+		         | ((unsigned int) (s[1] ^ 0x80) << 6)
+		         | (unsigned int) (s[2] ^ 0x80);
+		  return 3;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xf8)
+	{
+	  if (n >= 4)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40
+		  && (c >= 0xf1 || s[1] >= 0x90)
+#if 1
+		  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
+#endif
+		 )
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x07) << 18)
+		         | ((unsigned int) (s[1] ^ 0x80) << 12)
+		         | ((unsigned int) (s[2] ^ 0x80) << 6)
+		         | (unsigned int) (s[3] ^ 0x80);
+		  return 4;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+#if 0
+      else if (c < 0xfc)
+	{
+	  if (n >= 5)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
+		  && (c >= 0xf9 || s[1] >= 0x88))
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x03) << 24)
+		         | ((unsigned int) (s[1] ^ 0x80) << 18)
+		         | ((unsigned int) (s[2] ^ 0x80) << 12)
+		         | ((unsigned int) (s[3] ^ 0x80) << 6)
+		         | (unsigned int) (s[4] ^ 0x80);
+		  return 5;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xfe)
+	{
+	  if (n >= 6)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
+		  && (s[5] ^ 0x80) < 0x40
+		  && (c >= 0xfd || s[1] >= 0x84))
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x01) << 30)
+		         | ((unsigned int) (s[1] ^ 0x80) << 24)
+		         | ((unsigned int) (s[2] ^ 0x80) << 18)
+		         | ((unsigned int) (s[3] ^ 0x80) << 12)
+		         | ((unsigned int) (s[4] ^ 0x80) << 6)
+		         | (unsigned int) (s[5] ^ 0x80);
+		  return 6;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+#endif
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u8-mbtouc-unsafe.c
===================================================================
--- tuxmath/trunk/src/u8-mbtouc-unsafe.c	                        (rev 0)
+++ tuxmath/trunk/src/u8-mbtouc-unsafe.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,173 @@
+/* Look at first character in UTF-8 string.
+   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if !HAVE_INLINE
+
+int
+u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n)
+{
+  uint8_t c = *s;
+
+  if (c < 0x80)
+    {
+      *puc = c;
+      return 1;
+    }
+  else if (c >= 0xc2)
+    {
+      if (c < 0xe0)
+	{
+	  if (n >= 2)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40)
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x1f) << 6)
+		         | (unsigned int) (s[1] ^ 0x80);
+		  return 2;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xf0)
+	{
+	  if (n >= 3)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (c >= 0xe1 || s[1] >= 0xa0)
+		  && (c != 0xed || s[1] < 0xa0))
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x0f) << 12)
+		         | ((unsigned int) (s[1] ^ 0x80) << 6)
+		         | (unsigned int) (s[2] ^ 0x80);
+		  return 3;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xf8)
+	{
+	  if (n >= 4)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40
+		  && (c >= 0xf1 || s[1] >= 0x90)
+#if 1
+		  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
+#endif
+		 )
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x07) << 18)
+		         | ((unsigned int) (s[1] ^ 0x80) << 12)
+		         | ((unsigned int) (s[2] ^ 0x80) << 6)
+		         | (unsigned int) (s[3] ^ 0x80);
+		  return 4;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+#if 0
+      else if (c < 0xfc)
+	{
+	  if (n >= 5)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
+		  && (c >= 0xf9 || s[1] >= 0x88))
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x03) << 24)
+		         | ((unsigned int) (s[1] ^ 0x80) << 18)
+		         | ((unsigned int) (s[2] ^ 0x80) << 12)
+		         | ((unsigned int) (s[3] ^ 0x80) << 6)
+		         | (unsigned int) (s[4] ^ 0x80);
+		  return 5;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xfe)
+	{
+	  if (n >= 6)
+	    {
+#if CONFIG_UNICODE_SAFETY
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
+		  && (s[5] ^ 0x80) < 0x40
+		  && (c >= 0xfd || s[1] >= 0x84))
+#endif
+		{
+		  *puc = ((unsigned int) (c & 0x01) << 30)
+		         | ((unsigned int) (s[1] ^ 0x80) << 24)
+		         | ((unsigned int) (s[2] ^ 0x80) << 18)
+		         | ((unsigned int) (s[3] ^ 0x80) << 12)
+		         | ((unsigned int) (s[4] ^ 0x80) << 6)
+		         | (unsigned int) (s[5] ^ 0x80);
+		  return 6;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+#endif
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u8-mbtouc.c
===================================================================
--- tuxmath/trunk/src/u8-mbtouc.c	                        (rev 0)
+++ tuxmath/trunk/src/u8-mbtouc.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,163 @@
+/* Look at first character in UTF-8 string.
+   Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2001.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if !HAVE_INLINE
+
+int
+u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n)
+{
+  uint8_t c = *s;
+
+  if (c < 0x80)
+    {
+      *puc = c;
+      return 1;
+    }
+  else if (c >= 0xc2)
+    {
+      if (c < 0xe0)
+	{
+	  if (n >= 2)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40)
+		{
+		  *puc = ((unsigned int) (c & 0x1f) << 6)
+		         | (unsigned int) (s[1] ^ 0x80);
+		  return 2;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xf0)
+	{
+	  if (n >= 3)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (c >= 0xe1 || s[1] >= 0xa0)
+		  && (c != 0xed || s[1] < 0xa0))
+		{
+		  *puc = ((unsigned int) (c & 0x0f) << 12)
+		         | ((unsigned int) (s[1] ^ 0x80) << 6)
+		         | (unsigned int) (s[2] ^ 0x80);
+		  return 3;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xf8)
+	{
+	  if (n >= 4)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40
+		  && (c >= 0xf1 || s[1] >= 0x90)
+#if 1
+		  && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
+#endif
+		 )
+		{
+		  *puc = ((unsigned int) (c & 0x07) << 18)
+		         | ((unsigned int) (s[1] ^ 0x80) << 12)
+		         | ((unsigned int) (s[2] ^ 0x80) << 6)
+		         | (unsigned int) (s[3] ^ 0x80);
+		  return 4;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+#if 0
+      else if (c < 0xfc)
+	{
+	  if (n >= 5)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
+		  && (c >= 0xf9 || s[1] >= 0x88))
+		{
+		  *puc = ((unsigned int) (c & 0x03) << 24)
+		         | ((unsigned int) (s[1] ^ 0x80) << 18)
+		         | ((unsigned int) (s[2] ^ 0x80) << 12)
+		         | ((unsigned int) (s[3] ^ 0x80) << 6)
+		         | (unsigned int) (s[4] ^ 0x80);
+		  return 5;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+      else if (c < 0xfe)
+	{
+	  if (n >= 6)
+	    {
+	      if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
+		  && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
+		  && (s[5] ^ 0x80) < 0x40
+		  && (c >= 0xfd || s[1] >= 0x84))
+		{
+		  *puc = ((unsigned int) (c & 0x01) << 30)
+		         | ((unsigned int) (s[1] ^ 0x80) << 24)
+		         | ((unsigned int) (s[2] ^ 0x80) << 18)
+		         | ((unsigned int) (s[3] ^ 0x80) << 12)
+		         | ((unsigned int) (s[4] ^ 0x80) << 6)
+		         | (unsigned int) (s[5] ^ 0x80);
+		  return 6;
+		}
+	      /* invalid multibyte character */
+	    }
+	  else
+	    {
+	      /* incomplete multibyte character */
+	      *puc = 0xfffd;
+	      return n;
+	    }
+	}
+#endif
+    }
+  /* invalid multibyte character */
+  *puc = 0xfffd;
+  return 1;
+}
+
+#endif

Added: tuxmath/trunk/src/u8-uctomb-aux.c
===================================================================
--- tuxmath/trunk/src/u8-uctomb-aux.c	                        (rev 0)
+++ tuxmath/trunk/src/u8-uctomb-aux.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,69 @@
+/* Conversion UCS-4 to UTF-8.
+   Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2002.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+int
+u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n)
+{
+  int count;
+
+  if (uc < 0x80)
+    /* The case n >= 1 is already handled by the caller.  */
+    return -2;
+  else if (uc < 0x800)
+    count = 2;
+  else if (uc < 0x10000)
+    {
+      if (uc < 0xd800 || uc >= 0xe000)
+	count = 3;
+      else
+	return -1;
+    }
+#if 0
+  else if (uc < 0x200000)
+    count = 4;
+  else if (uc < 0x4000000)
+    count = 5;
+  else if (uc <= 0x7fffffff)
+    count = 6;
+#else
+  else if (uc < 0x110000)
+    count = 4;
+#endif
+  else
+    return -1;
+
+  if (n < count)
+    return -2;
+
+  switch (count) /* note: code falls through cases! */
+    {
+#if 0
+    case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000;
+    case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000;
+#endif
+    case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000;
+    case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800;
+    case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0;
+  /*case 1:*/ s[0] = uc;
+    }
+  return count;
+}

Added: tuxmath/trunk/src/u8-uctomb.c
===================================================================
--- tuxmath/trunk/src/u8-uctomb.c	                        (rev 0)
+++ tuxmath/trunk/src/u8-uctomb.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,83 @@
+/* Store a character in UTF-8 string.
+   Copyright (C) 2002, 2005-2006 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2002.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "unistr.h"
+
+#if !HAVE_INLINE
+
+int
+u8_uctomb (uint8_t *s, ucs4_t uc, int n)
+{
+  if (uc < 0x80)
+    {
+      if (n > 0)
+	{
+	  s[0] = uc;
+	  return 1;
+	}
+      /* else return -2, below.  */
+    }
+  else
+    {
+      int count;
+
+      if (uc < 0x800)
+	count = 2;
+      else if (uc < 0x10000)
+	{
+	  if (uc < 0xd800 || uc >= 0xe000)
+	    count = 3;
+	  else
+	    return -1;
+	}
+#if 0
+      else if (uc < 0x200000)
+	count = 4;
+      else if (uc < 0x4000000)
+	count = 5;
+      else if (uc <= 0x7fffffff)
+	count = 6;
+#else
+      else if (uc < 0x110000)
+	count = 4;
+#endif
+      else
+	return -1;
+
+      if (n >= count)
+	{
+	  switch (count) /* note: code falls through cases! */
+	    {
+#if 0
+	    case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000;
+	    case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000;
+#endif
+	    case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000;
+	    case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800;
+	    case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0;
+	  /*case 1:*/ s[0] = uc;
+	    }
+	  return count;
+	}
+    }
+  return -2;
+}
+
+#endif

Added: tuxmath/trunk/src/unistr.h
===================================================================
--- tuxmath/trunk/src/unistr.h	                        (rev 0)
+++ tuxmath/trunk/src/unistr.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,661 @@
+/* Elementary Unicode string functions.
+   Copyright (C) 2001-2002, 2005-2007 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNISTR_H
+#define _UNISTR_H
+
+#include "unitypes.h"
+
+/* Get bool.  */
+#include <stdbool.h>
+
+/* Get size_t.  */
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Conventions:
+
+   All functions prefixed with u8_ operate on UTF-8 encoded strings.
+   Their unit is an uint8_t (1 byte).
+
+   All functions prefixed with u16_ operate on UTF-16 encoded strings.
+   Their unit is an uint16_t (a 2-byte word).
+
+   All functions prefixed with u32_ operate on UCS-4 encoded strings.
+   Their unit is an uint32_t (a 4-byte word).
+
+   All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly
+   n units.
+
+   All arguments starting with "str" and the arguments of functions starting
+   with u8_str/u16_str/u32_str denote a NUL terminated string, i.e. a string
+   which terminates at the first NUL unit.  This termination unit is
+   considered part of the string for all memory allocation purposes, but
+   is not considered part of the string for all other logical purposes.
+
+   Functions returning a string result take a (resultbuf, lengthp) argument
+   pair.  If resultbuf is not NULL and the result fits into *lengthp units,
+   it is put in resultbuf, and resultbuf is returned.  Otherwise, a freshly
+   allocated string is returned.  In both cases, *lengthp is set to the
+   length (number of units) of the returned string.  In case of error,
+   NULL is returned and errno is set.  */
+
+
+/* Elementary string checks.  */
+
+/* Check whether an UTF-8 string is well-formed.
+   Return NULL if valid, or a pointer to the first invalid unit otherwise.  */
+extern const uint8_t *
+       u8_check (const uint8_t *s, size_t n);
+
+/* Check whether an UTF-16 string is well-formed.
+   Return NULL if valid, or a pointer to the first invalid unit otherwise.  */
+extern const uint16_t *
+       u16_check (const uint16_t *s, size_t n);
+
+/* Check whether an UCS-4 string is well-formed.
+   Return NULL if valid, or a pointer to the first invalid unit otherwise.  */
+extern const uint32_t *
+       u32_check (const uint32_t *s, size_t n);
+
+
+/* Elementary string conversions.  */
+
+/* Convert an UTF-8 string to an UTF-16 string.  */
+extern uint16_t *
+       u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf,
+		  size_t *lengthp);
+
+/* Convert an UTF-8 string to an UCS-4 string.  */
+extern uint32_t *
+       u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf,
+		  size_t *lengthp);
+
+/* Convert an UTF-16 string to an UTF-8 string.  */
+extern uint8_t *
+       u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf,
+		  size_t *lengthp);
+
+/* Convert an UTF-16 string to an UCS-4 string.  */
+extern uint32_t *
+       u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf,
+		   size_t *lengthp);
+
+/* Convert an UCS-4 string to an UTF-8 string.  */
+extern uint8_t *
+       u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf,
+		  size_t *lengthp);
+
+/* Convert an UCS-4 string to an UTF-16 string.  */
+extern uint16_t *
+       u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf,
+		   size_t *lengthp);
+
+
+/* Elementary string functions.  */
+
+/* Return the length (number of units) of the first character in S, which is
+   no longer than N.  Return 0 if it is the NUL character.  Return -1 upon
+   failure.  */
+/* Similar to mblen(), except that s must not be NULL.  */
+extern int
+       u8_mblen (const uint8_t *s, size_t n);
+extern int
+       u16_mblen (const uint16_t *s, size_t n);
+extern int
+       u32_mblen (const uint32_t *s, size_t n);
+
+/* Return the length (number of units) of the first character in S, putting
+   its 'ucs4_t' representation in *PUC.  Upon failure, *PUC is set to 0xfffd,
+   and an appropriate number of units is returned.
+   The number of available units, N, must be > 0.  */
+/* Similar to mbtowc(), except that puc and s must not be NULL, n must be > 0,
+   and the NUL character is not treated specially.  */
+/* The variants with _safe suffix are safe, even if the library is compiled
+   without --enable-safety.  */
+
+#ifdef GNULIB_UNISTR_U8_MBTOUC_UNSAFE
+# if !HAVE_INLINE
+extern int
+       u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n);
+# else
+extern int
+       u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n);
+static inline int
+u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n)
+{
+  uint8_t c = *s;
+
+  if (c < 0x80)
+    {
+      *puc = c;
+      return 1;
+    }
+  else
+    return u8_mbtouc_unsafe_aux (puc, s, n);
+}
+# endif
+#endif
+
+#ifdef GNULIB_UNISTR_U16_MBTOUC_UNSAFE
+# if !HAVE_INLINE
+extern int
+       u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n);
+# else
+extern int
+       u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n);
+static inline int
+u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n)
+{
+  uint16_t c = *s;
+
+  if (c < 0xd800 || c >= 0xe000)
+    {
+      *puc = c;
+      return 1;
+    }
+  else
+    return u16_mbtouc_unsafe_aux (puc, s, n);
+}
+# endif
+#endif
+
+#ifdef GNULIB_UNISTR_U32_MBTOUC_UNSAFE
+# if !HAVE_INLINE
+extern int
+       u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n);
+# else
+static inline int
+u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n)
+{
+  uint32_t c = *s;
+
+#  if CONFIG_UNICODE_SAFETY
+  if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))
+#  endif
+    *puc = c;
+#  if CONFIG_UNICODE_SAFETY
+  else
+    /* invalid multibyte character */
+    *puc = 0xfffd;
+#  endif
+  return 1;
+}
+# endif
+#endif
+
+#ifdef GNULIB_UNISTR_U8_MBTOUC
+# if !HAVE_INLINE
+extern int
+       u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n);
+# else
+extern int
+       u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n);
+static inline int
+u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n)
+{
+  uint8_t c = *s;
+
+  if (c < 0x80)
+    {
+      *puc = c;
+      return 1;
+    }
+  else
+    return u8_mbtouc_aux (puc, s, n);
+}
+# endif
+#endif
+
+#ifdef GNULIB_UNISTR_U16_MBTOUC
+# if !HAVE_INLINE
+extern int
+       u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n);
+# else
+extern int
+       u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n);
+static inline int
+u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n)
+{
+  uint16_t c = *s;
+
+  if (c < 0xd800 || c >= 0xe000)
+    {
+      *puc = c;
+      return 1;
+    }
+  else
+    return u16_mbtouc_aux (puc, s, n);
+}
+# endif
+#endif
+
+#ifdef GNULIB_UNISTR_U32_MBTOUC
+# if !HAVE_INLINE
+extern int
+       u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n);
+# else
+static inline int
+u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n)
+{
+  uint32_t c = *s;
+
+  if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))
+    *puc = c;
+  else
+    /* invalid multibyte character */
+    *puc = 0xfffd;
+  return 1;
+}
+# endif
+#endif
+
+/* Return the length (number of units) of the first character in S, putting
+   its 'ucs4_t' representation in *PUC.  Upon failure, *PUC is set to 0xfffd,
+   and -1 is returned for an invalid sequence of units, -2 is returned for an
+   incomplete sequence of units.
+   The number of available units, N, must be > 0.  */
+/* Similar to u*_mbtouc(), except that the return value gives more details
+   about the failure, similar to mbrtowc().  */
+
+#ifdef GNULIB_UNISTR_U8_MBTOUCR
+extern int
+       u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n);
+#endif
+
+#ifdef GNULIB_UNISTR_U16_MBTOUCR
+extern int
+       u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n);
+#endif
+
+#ifdef GNULIB_UNISTR_U32_MBTOUCR
+extern int
+       u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n);
+#endif
+
+/* Put the multibyte character represented by UC in S, returning its
+   length.  Return -1 upon failure, -2 if the number of available units, N,
+   is too small.  The latter case cannot occur if N >= 6/2/1, respectively.  */
+/* Similar to wctomb(), except that s must not be NULL, and the argument n
+   must be specified.  */
+
+#ifdef GNULIB_UNISTR_U8_UCTOMB
+/* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr.  */
+extern int
+       u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n);
+# if !HAVE_INLINE
+extern int
+       u8_uctomb (uint8_t *s, ucs4_t uc, int n);
+# else
+static inline int
+u8_uctomb (uint8_t *s, ucs4_t uc, int n)
+{
+  if (uc < 0x80 && n > 0)
+    {
+      s[0] = uc;
+      return 1;
+    }
+  else
+    return u8_uctomb_aux (s, uc, n);
+}
+# endif
+#endif
+
+#ifdef GNULIB_UNISTR_U16_UCTOMB
+/* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr.  */
+extern int
+       u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n);
+# if !HAVE_INLINE
+extern int
+       u16_uctomb (uint16_t *s, ucs4_t uc, int n);
+# else
+static inline int
+u16_uctomb (uint16_t *s, ucs4_t uc, int n)
+{
+  if (uc < 0xd800 && n > 0)
+    {
+      s[0] = uc;
+      return 1;
+    }
+  else
+    return u16_uctomb_aux (s, uc, n);
+}
+# endif
+#endif
+
+#ifdef GNULIB_UNISTR_U32_UCTOMB
+# if !HAVE_INLINE
+extern int
+       u32_uctomb (uint32_t *s, ucs4_t uc, int n);
+# else
+static inline int
+u32_uctomb (uint32_t *s, ucs4_t uc, int n)
+{
+  if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000))
+    {
+      if (n > 0)
+	{
+	  *s = uc;
+	  return 1;
+	}
+      else
+	return -2;
+    }
+  else
+    return -1;
+}
+# endif
+#endif
+
+/* Copy N units from SRC to DEST.  */
+/* Similar to memcpy().  */
+extern uint8_t *
+       u8_cpy (uint8_t *dest, const uint8_t *src, size_t n);
+extern uint16_t *
+       u16_cpy (uint16_t *dest, const uint16_t *src, size_t n);
+extern uint32_t *
+       u32_cpy (uint32_t *dest, const uint32_t *src, size_t n);
+
+/* Copy N units from SRC to DEST, guaranteeing correct behavior for
+   overlapping memory areas.  */
+/* Similar to memmove().  */
+extern uint8_t *
+       u8_move (uint8_t *dest, const uint8_t *src, size_t n);
+extern uint16_t *
+       u16_move (uint16_t *dest, const uint16_t *src, size_t n);
+extern uint32_t *
+       u32_move (uint32_t *dest, const uint32_t *src, size_t n);
+
+/* Set the first N characters of S to UC.  UC should be a character that
+   occupies only 1 unit.  */
+/* Similar to memset().  */
+extern uint8_t *
+       u8_set (uint8_t *s, ucs4_t uc, size_t n);
+extern uint16_t *
+       u16_set (uint16_t *s, ucs4_t uc, size_t n);
+extern uint32_t *
+       u32_set (uint32_t *s, ucs4_t uc, size_t n);
+
+/* Compare S1 and S2, each of length N.  */
+/* Similar to memcmp().  */
+extern int
+       u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n);
+extern int
+       u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n);
+extern int
+       u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n);
+
+/* Search the string at S for UC.  */
+/* Similar to memchr().  */
+extern uint8_t *
+       u8_chr (const uint8_t *s, size_t n, ucs4_t uc);
+extern uint16_t *
+       u16_chr (const uint16_t *s, size_t n, ucs4_t uc);
+extern uint32_t *
+       u32_chr (const uint32_t *s, size_t n, ucs4_t uc);
+
+/* Count the number of Unicode characters in the N units from S.  */
+/* Similar to mbsnlen().  */
+extern size_t
+       u8_mbsnlen (const uint8_t *s, size_t n);
+extern size_t
+       u16_mbsnlen (const uint16_t *s, size_t n);
+extern size_t
+       u32_mbsnlen (const uint32_t *s, size_t n);
+
+/* Elementary string functions with memory allocation.  */
+
+/* Make a freshly allocated copy of S, of length N.  */
+extern uint8_t *
+       u8_cpy_alloc (const uint8_t *s, size_t n);
+extern uint16_t *
+       u16_cpy_alloc (const uint16_t *s, size_t n);
+extern uint32_t *
+       u32_cpy_alloc (const uint32_t *s, size_t n);
+
+/* Elementary string functions on NUL terminated strings.  */
+
+/* Return the length (number of units) of the first character in S.
+   Return 0 if it is the NUL character.  Return -1 upon failure.  */
+extern int
+       u8_strmblen (const uint8_t *s);
+extern int
+       u16_strmblen (const uint16_t *s);
+extern int
+       u32_strmblen (const uint32_t *s);
+
+/* Return the length (number of units) of the first character in S, putting
+   its 'ucs4_t' representation in *PUC.  Return 0 if it is the NUL
+   character.  Return -1 upon failure.  */
+extern int
+       u8_strmbtouc (ucs4_t *puc, const uint8_t *s);
+extern int
+       u16_strmbtouc (ucs4_t *puc, const uint16_t *s);
+extern int
+       u32_strmbtouc (ucs4_t *puc, const uint32_t *s);
+
+/* Forward iteration step.  Advances the pointer past the next character,
+   or returns NULL if the end of the string has been reached.  Puts the
+   character's 'ucs4_t' representation in *PUC.  */
+extern const uint8_t *
+       u8_next (ucs4_t *puc, const uint8_t *s);
+extern const uint16_t *
+       u16_next (ucs4_t *puc, const uint16_t *s);
+extern const uint32_t *
+       u32_next (ucs4_t *puc, const uint32_t *s);
+
+/* Backward iteration step.  Advances the pointer to point to the previous
+   character, or returns NULL if the beginning of the string had been reached.
+   Puts the character's 'ucs4_t' representation in *PUC.  */
+extern const uint8_t *
+       u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start);
+extern const uint16_t *
+       u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start);
+extern const uint32_t *
+       u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start);
+
+/* Return the number of units in S.  */
+/* Similar to strlen(), wcslen().  */
+extern size_t
+       u8_strlen (const uint8_t *s);
+extern size_t
+       u16_strlen (const uint16_t *s);
+extern size_t
+       u32_strlen (const uint32_t *s);
+
+/* Return the number of units in S, but at most MAXLEN.  */
+/* Similar to strnlen(), wcsnlen().  */
+extern size_t
+       u8_strnlen (const uint8_t *s, size_t maxlen);
+extern size_t
+       u16_strnlen (const uint16_t *s, size_t maxlen);
+extern size_t
+       u32_strnlen (const uint32_t *s, size_t maxlen);
+
+/* Copy SRC to DEST.  */
+/* Similar to strcpy(), wcscpy().  */
+extern uint8_t *
+       u8_strcpy (uint8_t *dest, const uint8_t *src);
+extern uint16_t *
+       u16_strcpy (uint16_t *dest, const uint16_t *src);
+extern uint32_t *
+       u32_strcpy (uint32_t *dest, const uint32_t *src);
+
+/* Copy SRC to DEST, returning the address of the terminating NUL in DEST.  */
+/* Similar to stpcpy().  */
+extern uint8_t *
+       u8_stpcpy (uint8_t *dest, const uint8_t *src);
+extern uint16_t *
+       u16_stpcpy (uint16_t *dest, const uint16_t *src);
+extern uint32_t *
+       u32_stpcpy (uint32_t *dest, const uint32_t *src);
+
+/* Copy no more than N units of SRC to DEST.  */
+/* Similar to strncpy(), wcsncpy().  */
+extern uint8_t *
+       u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n);
+extern uint16_t *
+       u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n);
+extern uint32_t *
+       u32_strncpy (uint32_t *dest, const uint32_t *src, size_t n);
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+/* Similar to stpncpy().  */
+extern uint8_t *
+       u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n);
+extern uint16_t *
+       u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n);
+extern uint32_t *
+       u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n);
+
+/* Append SRC onto DEST.  */
+/* Similar to strcat(), wcscat().  */
+extern uint8_t *
+       u8_strcat (uint8_t *dest, const uint8_t *src);
+extern uint16_t *
+       u16_strcat (uint16_t *dest, const uint16_t *src);
+extern uint32_t *
+       u32_strcat (uint32_t *dest, const uint32_t *src);
+
+/* Append no more than N units of SRC onto DEST.  */
+/* Similar to strncat(), wcsncat().  */
+extern uint8_t *
+       u8_strncat (uint8_t *dest, const uint8_t *src, size_t n);
+extern uint16_t *
+       u16_strncat (uint16_t *dest, const uint16_t *src, size_t n);
+extern uint32_t *
+       u32_strncat (uint32_t *dest, const uint32_t *src, size_t n);
+
+/* Compare S1 and S2.  */
+/* Similar to strcmp(), wcscmp().  */
+extern int
+       u8_strcmp (const uint8_t *s1, const uint8_t *s2);
+extern int
+       u16_strcmp (const uint16_t *s1, const uint16_t *s2);
+extern int
+       u32_strcmp (const uint32_t *s1, const uint32_t *s2);
+
+/* Compare no more than N units of S1 and S2.  */
+/* Similar to strncmp(), wcsncmp().  */
+extern int
+       u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n);
+extern int
+       u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n);
+extern int
+       u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n);
+
+/* Duplicate S, returning an identical malloc'd string.  */
+/* Similar to strdup(), wcsdup().  */
+extern uint8_t *
+       u8_strdup (const uint8_t *s);
+extern uint16_t *
+       u16_strdup (const uint16_t *s);
+extern uint32_t *
+       u32_strdup (const uint32_t *s);
+
+/* Find the first occurrence of UC in STR.  */
+/* Similar to strchr(), wcschr().  */
+extern uint8_t *
+       u8_strchr (const uint8_t *str, ucs4_t uc);
+extern uint16_t *
+       u16_strchr (const uint16_t *str, ucs4_t uc);
+extern uint32_t *
+       u32_strchr (const uint32_t *str, ucs4_t uc);
+
+/* Find the last occurrence of UC in STR.  */
+/* Similar to strrchr(), wcsrchr().  */
+extern uint8_t *
+       u8_strrchr (const uint8_t *str, ucs4_t uc);
+extern uint16_t *
+       u16_strrchr (const uint16_t *str, ucs4_t uc);
+extern uint32_t *
+       u32_strrchr (const uint32_t *str, ucs4_t uc);
+
+/* Return the length of the initial segment of STR which consists entirely
+   of Unicode characters not in REJECT.  */
+/* Similar to strcspn(), wcscspn().  */
+extern size_t
+       u8_strcspn (const uint8_t *str, const uint8_t *reject);
+extern size_t
+       u16_strcspn (const uint16_t *str, const uint16_t *reject);
+extern size_t
+       u32_strcspn (const uint32_t *str, const uint32_t *reject);
+
+/* Return the length of the initial segment of STR which consists entirely
+   of Unicode characters in ACCEPT.  */
+/* Similar to strspn(), wcsspn().  */
+extern size_t
+       u8_strspn (const uint8_t *str, const uint8_t *accept);
+extern size_t
+       u16_strspn (const uint16_t *str, const uint16_t *accept);
+extern size_t
+       u32_strspn (const uint32_t *str, const uint32_t *accept);
+
+/* Find the first occurrence in STR of any character in ACCEPT.  */
+/* Similar to strpbrk(), wcspbrk().  */
+extern uint8_t *
+       u8_strpbrk (const uint8_t *str, const uint8_t *accept);
+extern uint16_t *
+       u16_strpbrk (const uint16_t *str, const uint16_t *accept);
+extern uint32_t *
+       u32_strpbrk (const uint32_t *str, const uint32_t *accept);
+
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+/* Similar to strstr(), wcsstr().  */
+extern uint8_t *
+       u8_strstr (const uint8_t *haystack, const uint8_t *needle);
+extern uint16_t *
+       u16_strstr (const uint16_t *haystack, const uint16_t *needle);
+extern uint32_t *
+       u32_strstr (const uint32_t *haystack, const uint32_t *needle);
+
+/* Test whether STR starts with PREFIX.  */
+extern bool
+       u8_startswith (const uint8_t *str, const uint8_t *prefix);
+extern bool
+       u16_startswith (const uint16_t *str, const uint16_t *prefix);
+extern bool
+       u32_startswith (const uint32_t *str, const uint32_t *prefix);
+
+/* Test whether STR ends with SUFFIX.  */
+extern bool
+       u8_endswith (const uint8_t *str, const uint8_t *suffix);
+extern bool
+       u16_endswith (const uint16_t *str, const uint16_t *suffix);
+extern bool
+       u32_endswith (const uint32_t *str, const uint32_t *suffix);
+
+/* Divide STR into tokens separated by characters in DELIM.
+   This interface is actually more similar to wcstok than to strtok.  */
+/* Similar to strtok_r(), wcstok().  */
+extern uint8_t *
+       u8_strtok (uint8_t *str, const uint8_t *delim, uint8_t **ptr);
+extern uint16_t *
+       u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr);
+extern uint32_t *
+       u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNISTR_H */

Added: tuxmath/trunk/src/unitypes.h
===================================================================
--- tuxmath/trunk/src/unitypes.h	                        (rev 0)
+++ tuxmath/trunk/src/unitypes.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,26 @@
+/* Elementary types for the GNU UniString library.
+   Copyright (C) 2002, 2005-2006 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNITYPES_H
+#define _UNITYPES_H
+
+/* Get uint8_t, uint16_t, uint32_t.  */
+#include <stdint.h>
+
+/* Type representing a Unicode character.  */
+typedef uint32_t ucs4_t;
+
+#endif /* _UNITYPES_H */

Added: tuxmath/trunk/src/uniwidth.h
===================================================================
--- tuxmath/trunk/src/uniwidth.h	                        (rev 0)
+++ tuxmath/trunk/src/uniwidth.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,64 @@
+/* Display width functions.
+   Copyright (C) 2001-2002, 2005, 2007 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _UNIWIDTH_H
+#define _UNIWIDTH_H
+
+#include "unitypes.h"
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get locale_charset() declaration.  */
+#include "localcharset.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Display width.  */
+
+/* These functions are locale dependent.  The encoding argument identifies
+   the encoding (e.g. "ISO-8859-2" for Polish).  */
+
+/* Determine number of column positions required for UC.  */
+extern int
+       uc_width (ucs4_t uc, const char *encoding);
+
+/* Determine number of column positions required for first N units
+   (or fewer if S ends before this) in S.  */
+extern int
+       u8_width (const uint8_t *s, size_t n, const char *encoding);
+extern int
+       u16_width (const uint16_t *s, size_t n, const char *encoding);
+extern int
+       u32_width (const uint32_t *s, size_t n, const char *encoding);
+
+/* Determine number of column positions required for S.  */
+extern int
+       u8_strwidth (const uint8_t *s, const char *encoding);
+extern int
+       u16_strwidth (const uint16_t *s, const char *encoding);
+extern int
+       u32_strwidth (const uint32_t *s, const char *encoding);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNIWIDTH_H */

Added: tuxmath/trunk/src/width.c
===================================================================
--- tuxmath/trunk/src/width.c	                        (rev 0)
+++ tuxmath/trunk/src/width.c	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,323 @@
+/* Determine display width of Unicode character.
+   Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2002.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "uniwidth.h"
+
+#include "cjk.h"
+
+/*
+ * Non-spacing attribute table.
+ * Consists of:
+ * - Non-spacing characters; generated from PropList.txt or
+ *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
+ * - Format control characters; generated from
+ *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
+ * - Zero width characters; generated from
+ *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
+ */
+static const unsigned char nonspacing_table_data[22*64] = {
+  /* 0x0000-0x01ff */
+  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
+  0xff, 0xff, 0xff, 0xff, 0x00, 0x08, 0x00, 0x00, /* 0x0080-0x00bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
+  /* 0x0200-0x03ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
+  /* 0x0400-0x05ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
+  0x78, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
+  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
+  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
+  /* 0x0600-0x07ff */
+  0x0f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
+  0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
+  0x00, 0x00, 0xc0, 0xff, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
+  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
+  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
+  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
+  /* 0x0800-0x09ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0800-0x083f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0900-0x093f */
+  0xfe, 0x21, 0x1e, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
+  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
+  /* 0x0a00-0x0bff */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
+  0x86, 0x39, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0x0a40-0x0a7f */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
+  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
+  0x0e, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
+  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
+  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
+  /* 0x0c00-0x0dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
+  0xc1, 0x3d, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
+  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
+  0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
+  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
+  /* 0x0e00-0x0fff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
+  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
+  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
+  0xdf, 0x00, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
+  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
+  /* 0x1000-0x11ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc5, 0x02, /* 0x1000-0x103f */
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0x1040-0x107f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
+  /* 0x1200-0x13ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
+  0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
+  /* 0x1600-0x17ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
+  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
+  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
+  /* 0x1800-0x19ff */
+  0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
+  0x00, 0x00, 0x00, 0x00, 0x87, 0x0f, 0x04, 0x0e, /* 0x1900-0x193f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
+  /* 0x1a00-0x1bff */
+  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a40-0x1a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
+  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
+  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1b80-0x1bbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc0-0x1bff */
+  /* 0x1c00-0x1dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c00-0x1c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cc0-0x1cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
+  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x1dc0-0x1dff */
+  /* 0x2000-0x21ff */
+  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
+  0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
+  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x20c0-0x20ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
+  /* 0x3000-0x31ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
+  /* 0xa800-0xa9ff */
+  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8c0-0xa8ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa900-0xa93f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa980-0xa9bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
+  /* 0xfa00-0xfbff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
+  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
+  /* 0xfe00-0xffff */
+  0xff, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
+  /* 0x10a00-0x10bff */
+  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
+  /* 0x1d000-0x1d1ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xf8, /* 0x1d140-0x1d17f */
+  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
+  /* 0x1d200-0x1d3ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
+  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d3c0-0x1d3ff */
+};
+static const signed char nonspacing_table_ind[240] = {
+   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
+   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
+  14, -1, -1, -1, -1, -1, -1, -1, /* 0x2000-0x2fff */
+  15, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
+  -1, -1, -1, -1, 16, -1, -1, -1, /* 0xa000-0xafff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
+  -1, -1, -1, -1, -1, 17, -1, 18, /* 0xf000-0xffff */
+  -1, -1, -1, -1, -1, 19, -1, -1, /* 0x10000-0x10fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
+  20, 21, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
+};
+
+/* Determine number of column positions required for UC.  */
+int
+uc_width (ucs4_t uc, const char *encoding)
+{
+  /* Test for non-spacing or control character.  */
+  if ((uc >> 9) < 240)
+    {
+      int ind = nonspacing_table_ind[uc >> 9];
+      if (ind >= 0)
+	if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
+	  {
+	    if (uc > 0 && uc < 0xa0)
+	      return -1;
+	    else
+	      return 0;
+	  }
+    }
+  else if ((uc >> 9) == (0xe0000 >> 9))
+    {
+      if (uc >= 0xe0100)
+	{
+	  if (uc <= 0xe01ef)
+	    return 0;
+	}
+      else
+	{
+	  if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
+	    return 0;
+	}
+    }
+  /* Test for double-width character.
+   * Generated from "grep '^....;[WF]' EastAsianWidth.txt"
+   * and            "grep '^....;[^WF]' EastAsianWidth.txt"
+   */
+  if (uc >= 0x1100
+      && ((uc < 0x1160) /* Hangul Jamo */
+	  || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
+	  || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
+	      && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
+	  || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
+	  || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
+	  || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
+	  || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
+	  || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
+	  || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
+	  || (uc >= 0x20000 && uc <= 0x2a6d6) /* CJK */
+	  || (uc >= 0x2f800 && uc <= 0x2fa1d) /* CJK Compatibility Ideographs */
+     )   )
+    return 2;
+  /* In ancient CJK encodings, Cyrillic and most other characters are
+     double-width as well.  */
+  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
+      && is_cjk_encoding (encoding))
+    return 2;
+  return 1;
+}

Added: tuxmath/trunk/src/xsize.h
===================================================================
--- tuxmath/trunk/src/xsize.h	                        (rev 0)
+++ tuxmath/trunk/src/xsize.h	2009-02-06 17:36:45 UTC (rev 871)
@@ -0,0 +1,108 @@
+/* xsize.h -- Checked size_t computations.
+
+   Copyright (C) 2003 Free Software Foundation, Inc.
+
+   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, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _XSIZE_H
+#define _XSIZE_H
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get SIZE_MAX.  */
+#include <limits.h>
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+/* The size of memory objects is often computed through expressions of
+   type size_t. Example:
+      void* p = malloc (header_size + n * element_size).
+   These computations can lead to overflow.  When this happens, malloc()
+   returns a piece of memory that is way too small, and the program then
+   crashes while attempting to fill the memory.
+   To avoid this, the functions and macros in this file check for overflow.
+   The convention is that SIZE_MAX represents overflow.
+   malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
+   implementation that uses mmap --, it's recommended to use size_overflow_p()
+   or size_in_bounds_p() before invoking malloc().
+   The example thus becomes:
+      size_t size = xsum (header_size, xtimes (n, element_size));
+      void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
+*/
+
+/* Convert an arbitrary value >= 0 to type size_t.  */
+#define xcast_size_t(N) \
+  ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
+
+/* Sum of two sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum (size_t size1, size_t size2)
+{
+  size_t sum = size1 + size2;
+  return (sum >= size1 ? sum : SIZE_MAX);
+}
+
+/* Sum of three sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum3 (size_t size1, size_t size2, size_t size3)
+{
+  return xsum (xsum (size1, size2), size3);
+}
+
+/* Sum of four sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
+{
+  return xsum (xsum (xsum (size1, size2), size3), size4);
+}
+
+/* Maximum of two sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xmax (size_t size1, size_t size2)
+{
+  /* No explicit check is needed here, because for any n:
+     max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX.  */
+  return (size1 >= size2 ? size1 : size2);
+}
+
+/* Multiplication of a count with an element size, with overflow check.
+   The count must be >= 0 and the element size must be > 0.
+   This is a macro, not an inline function, so that it works correctly even
+   when N is of a wider tupe and N > SIZE_MAX.  */
+#define xtimes(N, ELSIZE) \
+  ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
+
+/* Check for overflow.  */
+#define size_overflow_p(SIZE) \
+  ((SIZE) == SIZE_MAX)
+/* Check against overflow.  */
+#define size_in_bounds_p(SIZE) \
+  ((SIZE) != SIZE_MAX)
+
+#endif /* _XSIZE_H */




More information about the Tux4kids-commits mailing list