--- /dev/null
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/atscdescriptors.h mythtv-0.22-20081007/libs/libmythtv/mpeg/atscdescriptors.h
+--- mythtv-0.21/libs/libmythtv/mpeg/atscdescriptors.h 2006-08-10 22:58:51.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/atscdescriptors.h 2008-10-07 13:51:19.000000000 +0000
+@@ -7,10 +7,9 @@
+ #include <vector>
+ using namespace std;
+
+-#include <qstring.h>
+-#include <qmap.h>
++#include <QString>
++#include <QMap>
+
+-#include "mythcontext.h"
+ #include "mpegdescriptors.h"
+
+ using namespace std;
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/atsc_huffman.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/atsc_huffman.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/atsc_huffman.cpp 2006-02-21 15:27:11.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/atsc_huffman.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -72,7 +72,7 @@
+ for (int i = 0 ; i < 7 ; i++)
+ {
+ val2 |=
+- huffman1_get_bit(compressed, bit + i + 2) << 6 - i;
++ huffman1_get_bit(compressed, bit + i + 2) << (6 - i);
+ }
+ retval += QChar(val2);
+ bit += 8;
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/atscstreamdata.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/atscstreamdata.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/atscstreamdata.cpp 2007-04-23 19:37:33.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/atscstreamdata.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -56,8 +56,8 @@
+ {
+ bool reset = true;
+ const MasterGuideTable *mgt = GetCachedMGT();
+- tvct_vec_t tvcts = GetAllCachedTVCTs();
+- cvct_vec_t cvcts = GetAllCachedCVCTs();
++ tvct_vec_t tvcts = GetCachedTVCTs();
++ cvct_vec_t cvcts = GetCachedCVCTs();
+
+ if (mgt && (tvcts.size() || cvcts.size()))
+ {
+@@ -523,7 +523,7 @@
+ bool hasit = false;
+
+ {
+- tvct_vec_t tvct = GetAllCachedTVCTs();
++ tvct_vec_t tvct = GetCachedTVCTs();
+ for (uint i = 0; i < tvct.size() && !hasit; i++)
+ {
+ if (tvct[i]->Find(major, minor) >= 0)
+@@ -534,7 +534,7 @@
+
+ if (!hasit)
+ {
+- cvct_vec_t cvct = GetAllCachedCVCTs();
++ cvct_vec_t cvct = GetCachedCVCTs();
+ for (uint i = 0; i < cvct.size() && !hasit; i++)
+ {
+ if (cvct[i]->Find(major, minor) >= 0)
+@@ -612,6 +612,46 @@
+ return ret;
+ }
+
++bool ATSCStreamData::HasCachedAnyTVCTs(bool current) const
++{
++ if (!current)
++ VERBOSE(VB_IMPORTANT, "Currently we ignore \'current\' param");
++
++ if (!_cached_mgt)
++ return false;
++
++ _cache_lock.lock();
++ bool ret = false;
++ for (uint i = 0; !ret && (i < _cached_mgt->TableCount()); ++i)
++ {
++ if (TableClass::TVCTc == _cached_mgt->TableClass(i))
++ ret |= HasCachedTVCT(_cached_mgt->TablePID(i));
++ }
++ _cache_lock.unlock();
++
++ return ret;
++}
++
++bool ATSCStreamData::HasCachedAnyCVCTs(bool current) const
++{
++ if (!current)
++ VERBOSE(VB_IMPORTANT, "Currently we ignore \'current\' param");
++
++ if (!_cached_mgt)
++ return false;
++
++ _cache_lock.lock();
++ bool ret = false;
++ for (uint i = 0; !ret && (i < _cached_mgt->TableCount()); ++i)
++ {
++ if (TableClass::CVCTc == _cached_mgt->TableClass(i))
++ ret |= HasCachedCVCT(_cached_mgt->TablePID(i));
++ }
++ _cache_lock.unlock();
++
++ return ret;
++}
++
+ const MasterGuideTable *ATSCStreamData::GetCachedMGT(bool current) const
+ {
+ if (!current)
+@@ -657,7 +697,7 @@
+ return cvct;
+ }
+
+-tvct_vec_t ATSCStreamData::GetAllCachedTVCTs(bool current) const
++tvct_vec_t ATSCStreamData::GetCachedTVCTs(bool current) const
+ {
+ if (!current)
+ VERBOSE(VB_IMPORTANT, "Currently we ignore \'current\' param");
+@@ -677,7 +717,7 @@
+ return tvcts;
+ }
+
+-cvct_vec_t ATSCStreamData::GetAllCachedCVCTs(bool current) const
++cvct_vec_t ATSCStreamData::GetCachedCVCTs(bool current) const
+ {
+ if (!current)
+ VERBOSE(VB_IMPORTANT, "Currently we ignore \'current\' param");
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/atscstreamdata.h mythtv-0.22-20081007/libs/libmythtv/mpeg/atscstreamdata.h
+--- mythtv-0.21/libs/libmythtv/mpeg/atscstreamdata.h 2006-07-08 22:28:30.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/atscstreamdata.h 2008-10-07 13:51:19.000000000 +0000
+@@ -74,17 +74,23 @@
+ bool HasCachedMGT(bool current = true) const;
+ bool HasCachedTVCT(uint pid, bool current = true) const;
+ bool HasCachedCVCT(uint pid, bool current = true) const;
++
+ bool HasCachedAllTVCTs(bool current = true) const;
+ bool HasCachedAllCVCTs(bool current = true) const;
+- bool HasCachedAllVCTs(bool current = true) const
++ bool HasCachedAllVCTs(bool current = true) const
+ { return HasCachedAllTVCTs(current) && HasCachedAllCVCTs(current); }
+
++ bool HasCachedAnyTVCTs(bool current = true) const;
++ bool HasCachedAnyCVCTs(bool current = true) const;
++ bool HasCachedAnyVCTs(bool current = true) const
++ { return HasCachedAnyTVCTs(current) || HasCachedAnyCVCTs(current); }
++
+ const MasterGuideTable *GetCachedMGT(bool current = true) const;
+ const tvct_ptr_t GetCachedTVCT(uint pid, bool current = true) const;
+ const cvct_ptr_t GetCachedCVCT(uint pid, bool current = true) const;
+
+- tvct_vec_t GetAllCachedTVCTs(bool current = true) const;
+- cvct_vec_t GetAllCachedCVCTs(bool current = true) const;
++ tvct_vec_t GetCachedTVCTs(bool current = true) const;
++ cvct_vec_t GetCachedCVCTs(bool current = true) const;
+
+ void ReturnCachedTVCTTables(tvct_vec_t&) const;
+ void ReturnCachedCVCTTables(cvct_vec_t&) const;
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/atsctables.h mythtv-0.22-20081007/libs/libmythtv/mpeg/atsctables.h
+--- mythtv-0.21/libs/libmythtv/mpeg/atsctables.h 2007-01-08 00:29:53.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/atsctables.h 2008-10-07 13:51:19.000000000 +0000
+@@ -3,10 +3,11 @@
+ #ifndef _ATSC_TABLES_H_
+ #define _ATSC_TABLES_H_
+
++#include <stdint.h> // uint32_t
++#include <QString>
+ #include "mpegtables.h"
+ #include "atscdescriptors.h"
+-#include <qstring.h>
+-#include <stdint.h> // uint32_t
++#include "libmythdb/mythverbose.h"
+
+ // Some sample code is in pcHDTV's dtvscan.c,
+ // accum_sect/dequeue_buf/atsc_tables. We should stuff
+@@ -66,7 +67,7 @@
+ ETTe = 7,
+ DCCT = 8,
+ RRT = 9,
+- };
++ } kTableTypes;
+ };
+
+ /** \class MasterGuideTable
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/dvbdescriptors.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/dvbdescriptors.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/dvbdescriptors.cpp 2007-12-16 18:15:42.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/dvbdescriptors.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -1,9 +1,12 @@
++#include <unistd.h>
++
++#include <QTextCodec>
++
+ #include "dvbdescriptors.h"
+ #include "iso6937tables.h"
++#include "freesat_huffman.h"
++#include "libmythdb/mythverbose.h"
+
+-#include <unistd.h>
+-#include <qtextcodec.h>
+-#include <qdeepcopy.h>
+
+ // Only some of the QTextCodec calls are reenterant.
+ // If you use this please verify that you are using a reenterant call.
+@@ -70,6 +73,9 @@
+ if (!raw_length)
+ return "";
+
++ if (src[0] == 0x1f)
++ return freesat_huffman_to_string(src, raw_length);
++
+ if ((0x10 < src[0]) && (src[0] < 0x20))
+ {
+ // TODO: Handle multi-byte encodings
+@@ -78,13 +84,16 @@
+ return "";
+ }
+
+- // Strip formatting characters
+- // Also, if a override encoding is specified copy it in front of the text
++ // if a override encoding is specified and the default ISO 6937 encoding
++ // would be used copy the ovverride encoding in front of the text
+ unsigned char dst[raw_length + encoding_override_length];
+- uint length = encoding_override_length;
+- if (encoding_override)
++ uint length = 0;
++ if (encoding_override && src[0] >= 0x20) {
+ memcpy(dst, encoding_override, encoding_override_length);
++ length = encoding_override_length;
++ }
+
++ // Strip formatting characters
+ for (uint i = 0; i < raw_length; i++)
+ {
+ if ((src[i] < 0x80) || (src[i] > 0x9F))
+@@ -141,7 +150,7 @@
+ if ((category_type > kCategoryNone) && (category_type < kCategoryLast))
+ return QString(cattype[category_type]);
+
+- return QString::null;
++ return QString("");
+ }
+
+ MythCategoryType string_to_myth_category_type(const QString &category_type)
+@@ -174,12 +183,20 @@
+ // Try to get detailed description
+ map<uint,QString>::const_iterator it = categoryDesc.find(Nibble(i));
+ if (it != categoryDesc.end())
+- return QDeepCopy<QString>((*it).second);
++ {
++ QString ret = (*it).second;
++ ret.detach();
++ return ret;
++ }
+
+ // Fall back to category description
+ it = categoryDesc.find(Nibble1(i)<<4);
+ if (it != categoryDesc.end())
+- return QDeepCopy<QString>((*it).second);
++ {
++ QString ret = (*it).second;
++ ret.detach();
++ return ret;
++ }
+
+ // Found nothing? Just return empty string.
+ return "";
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/dvbstreamdata.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/dvbstreamdata.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/dvbstreamdata.cpp 2008-02-26 23:37:42.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/dvbstreamdata.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -9,6 +9,7 @@
+ #include "eithelper.h"
+
+ #define PREMIERE_ONID 133
++#define FREESAT_EIT_PID 3842
+
+ // service_id is synonymous with the MPEG program number in the PMT.
+ DVBStreamData::DVBStreamData(uint desired_netid, uint desired_tsid,
+@@ -97,7 +98,7 @@
+ return false;
+
+ bool is_eit = false;
+- if (DVB_EIT_PID == pid)
++ if (DVB_EIT_PID == pid || FREESAT_EIT_PID == pid)
+ {
+ // Standard Now/Next Event Information Tables for this transport
+ is_eit |= TableID::PF_EIT == table_id;
+@@ -130,7 +131,7 @@
+ return SDToSectionSeen(psip.TableIDExtension(), psip.Section());
+ }
+
+- if (DVB_EIT_PID == pid)
++ if (DVB_EIT_PID == pid || FREESAT_EIT_PID == pid)
+ {
+ // Standard Now/Next Event Information Tables for other transport
+ is_eit |= TableID::PF_EITo == table_id;
+@@ -152,8 +153,8 @@
+ return EITSectionSeen(table_id, service_id, psip.Section());
+ }
+
+- if (PREMIERE_EIT_DIREKT_PID == pid || PREMIERE_EIT_SPORT_PID == pid
+- && TableID::PREMIERE_CIT == table_id)
++ if (((PREMIERE_EIT_DIREKT_PID == pid) || (PREMIERE_EIT_SPORT_PID == pid)) &&
++ TableID::PREMIERE_CIT == table_id)
+ {
+ uint content_id = PremiereContentInformationTable(psip).ContentID();
+ if (VersionCIT(content_id) != version)
+@@ -327,7 +328,7 @@
+ }
+ }
+
+- if ((DVB_EIT_PID == pid || DVB_DNLONG_EIT_PID == pid) &&
++ if ((DVB_EIT_PID == pid || DVB_DNLONG_EIT_PID == pid || FREESAT_EIT_PID == pid) &&
+ DVBEventInformationTable::IsEIT(psip.TableID()))
+ {
+ QMutexLocker locker(&_listener_lock);
+@@ -428,6 +429,12 @@
+ {
+ add_pids.push_back(PREMIERE_EIT_SPORT_PID);
+ }
++
++ if (find(cur_pids.begin(), cur_pids.end(),
++ (uint) FREESAT_EIT_PID) == cur_pids.end())
++ {
++ add_pids.push_back(FREESAT_EIT_PID);
++ }
+ }
+ else
+ {
+@@ -457,6 +464,12 @@
+ {
+ del_pids.push_back(PREMIERE_EIT_SPORT_PID);
+ }
++
++ if (find(cur_pids.begin(), cur_pids.end(),
++ (uint) FREESAT_EIT_PID) == cur_pids.end())
++ {
++ del_pids.push_back(FREESAT_EIT_PID);
++ }
+ }
+
+ return add_pids.size() || del_pids.size();
+@@ -686,6 +699,26 @@
+ return false;
+ }
+
++bool DVBStreamData::HasCachedAnySDTs(bool current) const
++{
++ QMutexLocker locker(&_cache_lock);
++
++ if (_cached_nit.empty())
++ return false;
++
++ nit_cache_t::const_iterator it = _cached_nit.begin();
++ for (; it != _cached_nit.end(); ++it)
++ {
++ for (uint i = 0; i < (*it)->TransportStreamCount(); i++)
++ {
++ if (HasCachedAnySDT((*it)->TSID(i), current))
++ return true;
++ }
++ }
++
++ return false;
++}
++
+ bool DVBStreamData::HasCachedAllSDTs(bool current) const
+ {
+ QMutexLocker locker(&_cache_lock);
+@@ -696,7 +729,7 @@
+ nit_cache_t::const_iterator it = _cached_nit.begin();
+ for (; it != _cached_nit.end(); ++it)
+ {
+- if ((*it)->TransportStreamCount() > _cached_sdts.size())
++ if ((int)(*it)->TransportStreamCount() > _cached_sdts.size())
+ return false;
+
+ for (uint i = 0; i < (*it)->TransportStreamCount(); i++)
+@@ -724,6 +757,22 @@
+ return nit;
+ }
+
++const nit_vec_t DVBStreamData::GetCachedNIT(bool current) const
++{
++ QMutexLocker locker(&_cache_lock);
++
++ nit_vec_t nits;
++
++ for (uint i = 0; i < 256; i++)
++ {
++ nit_ptr_t nit = GetCachedNIT(i, current);
++ if (nit)
++ nits.push_back(nit);
++ }
++
++ return nits;
++}
++
+ const sdt_ptr_t DVBStreamData::GetCachedSDT(
+ uint tsid, uint section_num, bool current) const
+ {
+@@ -742,7 +791,7 @@
+ return sdt;
+ }
+
+-const sdt_vec_t DVBStreamData::GetAllCachedSDTs(bool current) const
++const sdt_vec_t DVBStreamData::GetCachedSDTs(bool current) const
+ {
+ QMutexLocker locker(&_cache_lock);
+
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/dvbstreamdata.h mythtv-0.22-20081007/libs/libmythtv/mpeg/dvbstreamdata.h
+--- mythtv-0.21/libs/libmythtv/mpeg/dvbstreamdata.h 2008-02-26 23:37:42.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/dvbstreamdata.h 2008-10-07 13:51:19.000000000 +0000
+@@ -6,12 +6,13 @@
+ #include "mpegstreamdata.h"
+
+ typedef NetworkInformationTable* nit_ptr_t;
+-typedef vector<const nit_ptr_t> nit_vec_t;
+-typedef QMap<uint, nit_ptr_t> nit_cache_t;
++typedef vector<const NetworkInformationTable*> nit_vec_t;
++typedef QMap<uint, nit_ptr_t> nit_cache_t; // section->sdts
+
+ typedef ServiceDescriptionTable* sdt_ptr_t;
+ typedef vector<const ServiceDescriptionTable*> sdt_vec_t;
+-typedef QMap<uint, sdt_ptr_t> sdt_cache_t;
++typedef QMap<uint, sdt_ptr_t> sdt_cache_t; // tsid+section->sdts
++typedef QMap<uint, sdt_vec_t> sdt_map_t; // tsid->sdts
+
+ typedef vector<DVBMainStreamListener*> dvb_main_listener_vec_t;
+ typedef vector<DVBOtherStreamListener*> dvb_other_listener_vec_t;
+@@ -161,12 +162,14 @@
+ bool HasCachedAnySDT(uint tsid, bool current = true) const;
+ bool HasCachedAllSDT(uint tsid, bool current = true) const;
+ bool HasCachedSDT(bool current = true) const;
++ bool HasCachedAnySDTs(bool current = true) const;
+ bool HasCachedAllSDTs(bool current = true) const;
+
+ const nit_ptr_t GetCachedNIT(uint section_num, bool current = true) const;
++ const nit_vec_t GetCachedNIT(bool current = true) const;
+ const sdt_ptr_t GetCachedSDT(uint tsid, uint section_num,
+ bool current = true) const;
+- const sdt_vec_t GetAllCachedSDTs(bool current = true) const;
++ const sdt_vec_t GetCachedSDTs(bool current = true) const;
+
+ void ReturnCachedSDTTables(sdt_vec_t&) const;
+
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/dvbtables.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/dvbtables.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/dvbtables.cpp 2007-07-14 16:13:10.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/dvbtables.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -36,7 +36,7 @@
+
+ for (uint i = 0; i < TransportStreamCount(); i++)
+ {
+- str.append(QString(" Transport #%1 TSID(0x%1) ")
++ str.append(QString(" Transport #%1 TSID(0x%2) ")
+ .arg(i, 2, 10).arg(TSID(i), 0, 16));
+ str.append(QString("original_network_id(0x%2) desc_len(%3)\n")
+ .arg(OriginalNetworkID(i), 0, 16)
+@@ -94,7 +94,7 @@
+ {
+ QString str =
+ QString("SDT: TSID(0x%1) original_network_id(0x%2) services(%3)\n")
+- .arg(OriginalNetworkID(), 0, 16).arg(TSID(), 0, 16)
++ .arg(TSID(), 0, 16).arg(OriginalNetworkID(), 0, 16)
+ .arg(ServiceCount());
+
+ for (uint i = 0; i < ServiceCount(); i++)
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/freesat_huffman.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/freesat_huffman.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/freesat_huffman.cpp 1970-01-01 00:00:00.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/freesat_huffman.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -0,0 +1,118 @@
++#include "freesat_huffman.h"
++
++#include <qstring.h>
++
++struct hufftab {
++ char last;
++ unsigned int value;
++ short bits;
++ char next;
++};
++
++#define START '\0'
++#define STOP '\0'
++#define ESCAPE '\1'
++
++#include "freesat_tables.h"
++
++QString freesat_huffman_to_string(const unsigned char *src, uint size)
++{
++ if (src[1] == 1 || src[1] == 2)
++ {
++ QByteArray uncompressed(size * 3);
++ int p = 0;
++ struct hufftab *table;
++ unsigned table_length;
++ if (src[1] == 1)
++ {
++ table = fsat_huffman1;
++ table_length = sizeof(fsat_huffman1) / sizeof(fsat_huffman1[0]);
++ }
++ else
++ {
++ table = fsat_huffman2;
++ table_length = sizeof(fsat_huffman2) / sizeof(fsat_huffman2[0]);
++ }
++ unsigned value = 0, byte = 2, bit = 0;
++ while (byte < 6 && byte < size)
++ {
++ value |= src[byte] << ((5-byte) * 8);
++ byte++;
++ }
++ char lastch = START;
++
++ do
++ {
++ bool found = false;
++ unsigned bitShift = 0;
++ if (lastch == ESCAPE)
++ {
++ found = true;
++ // Encoded in the next 8 bits.
++ // Terminated by the first ASCII character.
++ char nextCh = (value >> 24) & 0xff;
++ bitShift = 8;
++ if ((nextCh & 0x80) == 0)
++ lastch = nextCh;
++ if (p >= uncompressed.count())
++ uncompressed.resize(p+10);
++ uncompressed[p++] = nextCh;
++ }
++ else
++ {
++ for (unsigned j = 0; j < table_length; j++)
++ {
++ if (table[j].last == lastch)
++ {
++ unsigned mask = 0, maskbit = 0x80000000;
++ for (short kk = 0; kk < table[j].bits; kk++)
++ {
++ mask |= maskbit;
++ maskbit >>= 1;
++ }
++ if ((value & mask) == table[j].value)
++ {
++ char nextCh = table[j].next;
++ bitShift = table[j].bits;
++ if (nextCh != STOP && nextCh != ESCAPE)
++ {
++ if (p >= uncompressed.count())
++ uncompressed.resize(p+10);
++ uncompressed[p++] = nextCh;
++ }
++ found = true;
++ lastch = nextCh;
++ break;
++ }
++ }
++ }
++ }
++ if (found)
++ {
++ // Shift up by the number of bits.
++ for (unsigned b = 0; b < bitShift; b++)
++ {
++ value = (value << 1) & 0xfffffffe;
++ if (byte < size)
++ value |= (src[byte] >> (7-bit)) & 1;
++ if (bit == 7)
++ {
++ bit = 0;
++ byte++;
++ }
++ else bit++;
++ }
++ }
++ else
++ {
++ // Entry missing in table.
++ QString result = QString::fromUtf8(uncompressed, p);
++ result.append("...");
++ return result;
++ }
++ } while (lastch != STOP && value != 0);
++
++ return QString::fromUtf8(uncompressed, p);
++ }
++ else return QString("");
++}
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/freesat_huffman.h mythtv-0.22-20081007/libs/libmythtv/mpeg/freesat_huffman.h
+--- mythtv-0.21/libs/libmythtv/mpeg/freesat_huffman.h 1970-01-01 00:00:00.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/freesat_huffman.h 2008-10-07 13:51:19.000000000 +0000
+@@ -0,0 +1,12 @@
++#ifndef _FREESAT_HUFFMAN_H_
++#define _FREESAT_HUFFMAN_H_
++
++// POSIX header
++#include <unistd.h>
++
++// Qt header
++#include <qstring.h>
++
++QString freesat_huffman_to_string(const unsigned char *compressed, uint size);
++
++#endif // _FREESAT_HUFFMAN_H_
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/freesat_tables.h mythtv-0.22-20081007/libs/libmythtv/mpeg/freesat_tables.h
+--- mythtv-0.21/libs/libmythtv/mpeg/freesat_tables.h 1970-01-01 00:00:00.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/freesat_tables.h 2008-10-07 13:51:19.000000000 +0000
+@@ -0,0 +1,3042 @@
++/*
++ * This table was derived from on-air transmissions. It certainly has omissions and
++ * almost certainly contains errors. Use entirely at your own risk.
++ */
++
++static struct hufftab fsat_huffman1[] =
++{
++ { START, 0x00000000, 2, 'T'},
++ { START, 0x40000000, 3, 'B'},
++ { START, 0x60000000, 5, 'L'},
++ { START, 0x68000000, 7, 'K'},
++ { START, 0x6a000000, 8, '6'},
++ { START, 0x6c000000, 6, 'Q'},
++ { START, 0x70000000, 5, 'D'},
++ { START, 0x78000000, 5, 'H'},
++ { START, 0x80000000, 4, 'C'},
++ { START, 0x90000000, 4, 'I'},
++ { START, 0xa0000000, 5, 'R'},
++ { START, 0xa8000000, 5, 'N'},
++ { START, 0xb0000000, 5, 'E'},
++ { START, 0xb8000000, 8, 'V'},
++ { START, 0xb9000000, 10, 'Z'},
++ { START, 0xb9400000, 11, '1'},
++ { START, 0xb9600000, 11, '3'},
++ { START, 0xb9800000, 9, '2'},
++ { START, 0xba000000, 7, 'U'},
++ { START, 0xbc000000, 6, 'G'},
++ { START, 0xc0000000, 5, 'F'},
++ { START, 0xc8000000, 5, 'A'},
++ { START, 0xd0000000, 4, 'S'},
++ { START, 0xe0000000, 5, 'M'},
++ { START, 0xe8000000, 5, 'P'},
++ { START, 0xf0000000, 5, 'W'},
++ { START, 0xf8000000, 6, 'J'},
++ { START, 0xfc000000, 7, 'O'},
++ { START, 0xfe000000, 8, 'Y'},
++ { START, 0xff400000, 11, '4'},
++ { START, 0xff600000, 14, '5'},
++ { START, 0xff698000, 18, 't'},
++ { START, 0xff800000, 9, 'X'},
++ { ' ', 0x00000000, 4, 'W'},
++ { ' ', 0x10000000, 7, 'f'},
++ { ' ', 0x12000000, 7, 'Q'},
++ { ' ', 0x14000000, 8, '-'},
++ { ' ', 0x15240000, 14, '.'},
++ { ' ', 0x152c0000, 14, 'l'},
++ { ' ', 0x15300000, 13, 'g'},
++ { ' ', 0x15400000, 10, 'r'},
++ { ' ', 0x15800000, 11, 'b'},
++ { ' ', 0x15a00000, 12, 'v'},
++ { ' ', 0x15b00000, 12, 'd'},
++ { ' ', 0x15f00000, 13, 'u'},
++ { ' ', 0x16000000, 7, 'V'},
++ { ' ', 0x18000000, 5, 'I'},
++ { ' ', 0x20000000, 5, 'G'},
++ { ' ', 0x28000000, 7, STOP},
++ { ' ', 0x2a000000, 7, 'w'},
++ { ' ', 0x2c000000, 6, 'U'},
++ { ' ', 0x30000000, 4, 'M'},
++ { ' ', 0x40000000, 4, 'C'},
++ { ' ', 0x50000000, 4, 'B'},
++ { ' ', 0x60000000, 5, 'H'},
++ { ' ', 0x68000000, 5, 'D'},
++ { ' ', 0x70000000, 4, 'P'},
++ { ' ', 0x80000000, 5, 'o'},
++ { ' ', 0x88000000, 5, 'A'},
++ { ' ', 0x90000000, 4, 'T'},
++ { ' ', 0xa0000000, 5, 't'},
++ { ' ', 0xa8000000, 9, '&'},
++ { ' ', 0xa8800000, 10, '5'},
++ { ' ', 0xa8c00000, 10, 'Z'},
++ { ' ', 0xa9000000, 8, '1'},
++ { ' ', 0xaa000000, 11, '\''},
++ { ' ', 0xaa200000, 11, '0'},
++ { ' ', 0xaa400000, 10, '9'},
++ { ' ', 0xab000000, 11, '6'},
++ { ' ', 0xab200000, 12, 'n'},
++ { ' ', 0xab300000, 12, '8'},
++ { ' ', 0xab400000, 10, 's'},
++ { ' ', 0xab800000, 10, '4'},
++ { ' ', 0xabc00000, 10, '3'},
++ { ' ', 0xac000000, 6, 'O'},
++ { ' ', 0xb0000000, 5, 'a'},
++ { ' ', 0xb8000000, 5, 'F'},
++ { ' ', 0xc0000000, 4, 'N'},
++ { ' ', 0xd0000000, 5, 'L'},
++ { ' ', 0xd8000000, 5, 'R'},
++ { ' ', 0xe0000000, 7, '2'},
++ { ' ', 0xe2000000, 7, 'K'},
++ { ' ', 0xe4000000, 6, 'J'},
++ { ' ', 0xe8000000, 6, 'E'},
++ { ' ', 0xec000000, 7, 'Y'},
++ { ' ', 0xee000000, 7, 'i'},
++ { ' ', 0xf0000000, 4, 'S'},
++ { '!', 0x40000000, 2, ' '},
++ { '!', 0x80000000, 8, STOP},
++ { '&', 0x40000000, 2, 'B'},
++ { '&', 0x80000000, 1, ' '},
++ { '%', 0x80000000, 1, ' '},
++ { ',', 0x80000000, 1, ' '},
++ { '-', 0x0c000000, 7, 'L'},
++ { '-', 0x1c000000, 6, 'I'},
++ { '-', 0x20000000, 8, 'P'},
++ { '-', 0x38000000, 10, 'E'},
++ { '-', 0x40000000, 4, 'U'},
++ { '-', 0x5d000000, 8, 'i'},
++ { '-', 0x84000000, 7, 'D'},
++ { '-', 0x96af8000, 17, 'H'},
++ { '-', 0xb0000000, 4, 'S'},
++ { '-', 0xc0000000, 2, ' '},
++ { '.', 0x08000000, 5, 'T'},
++ { '.', 0x19600000, 13, ESCAPE},
++ { '.', 0x1a000000, 8, 'W'},
++ { '.', 0x20000000, 4, ' '},
++ { '.', 0x40000000, 2, STOP},
++ { '.', 0x80000000, 1, '.'},
++ { '/', 0x40000000, 3, '7'},
++ { '0', 0x40000000, 2, ' '},
++ { '0', 0x80000000, 3, '6'},
++ { '0', 0xa0000000, 4, STOP},
++ { '0', 0xb0000000, 6, '8'},
++ { '0', 0xb4000000, 7, 's'},
++ { '0', 0xb7000000, 9, '/'},
++ { '0', 0xb7800000, 9, '%'},
++ { '0', 0xb8000000, 5, '7'},
++ { '0', 0xc0000000, 2, '0'},
++ { '1', 0x30000000, 4, ' '},
++ { '1', 0x40000000, 2, STOP},
++ { '1', 0x8c000000, 6, ':'},
++ { '1', 0x98000000, 6, '\''},
++ { '1', 0xa0000000, 3, '0'},
++ { '1', 0xc0000000, 5, '3'},
++ { '1', 0xc8000000, 6, 'X'},
++ { '1', 0xcc000000, 6, '9'},
++ { '1', 0xe0000000, 3, '1'},
++ { '2', 0x00000000, 1, '0'},
++ { '2', 0x80000000, 5, ':'},
++ { '2', 0x90000000, 4, ' '},
++ { '2', 0xa0000000, 3, STOP},
++ { '2', 0xc0000000, 2, '4'},
++ { '3', 0x00000000, 1, ' '},
++ { '3', 0x80000000, 8, STOP},
++ { '3', 0xe0000000, 5, '0'},
++ { '3', 0xe8000000, 7, ':'},
++ { '4', 0x00000000, 8, STOP},
++ { '4', 0x52000000, 8, 'M'},
++ { '4', 0x90000000, 4, ':'},
++ { '4', 0xa0000000, 3, '-'},
++ { '4', 0xc0000000, 2, ' '},
++ { '5', 0xa0000000, 3, '0'},
++ { '5', 0xc0000000, 2, ' '},
++ { '6', 0x40000000, 2, ' '},
++ { '6', 0x80000000, 2, '0'},
++ { '6', 0xc6000000, 7, '4'},
++ { '6', 0xd8000000, 6, '8'},
++ { '6', 0xe0000000, 3, ':'},
++ { '7', 0x80000000, 8, STOP},
++ { '8', 0x00000000, 2, '0'},
++ { '8', 0x84000000, 7, ':'},
++ { '8', 0x86800000, 9, STOP},
++ { '8', 0x87800000, 10, '.'},
++ { '8', 0x88000000, 5, ' '},
++ { '9', 0x00000000, 1, '1'},
++ { '9', 0x80000000, 4, '9'},
++ { '9', 0x98000000, 5, '0'},
++ { '9', 0xa0000000, 3, '6'},
++ { '9', 0xc0000000, 3, STOP},
++ { ':', 0x00000000, 2, '0'},
++ { ':', 0x58000000, 8, ESCAPE},
++ { ':', 0x59000000, 8, 'T'},
++ { ':', 0x60000000, 3, '.'},
++ { ':', 0x80000000, 1, ' '},
++ { '?', 0x20000000, 3, ':'},
++ { '?', 0x40000000, 2, ' '},
++ { '?', 0x80000000, 2, STOP},
++ { 'A', 0x00000000, 4, 'm'},
++ { 'A', 0x10000000, 5, 'w'},
++ { 'A', 0x18000000, 6, 'u'},
++ { 'A', 0x1c000000, 6, STOP},
++ { 'A', 0x20000000, 3, 'r'},
++ { 'A', 0x40000000, 3, ' '},
++ { 'A', 0x68000000, 5, 'c'},
++ { 'A', 0x70000000, 4, 'g'},
++ { 'A', 0x80000000, 3, 'l'},
++ { 'A', 0xa2000000, 7, 'v'},
++ { 'A', 0xa8000000, 5, 't'},
++ { 'A', 0xb0000000, 5, 'f'},
++ { 'A', 0xb8000000, 5, 'i'},
++ { 'A', 0xc0000000, 3, 'n'},
++ { 'A', 0xe0000000, 5, 's'},
++ { 'A', 0xe8000000, 6, 'b'},
++ { 'A', 0xec000000, 7, 'p'},
++ { 'A', 0xef180000, 13, '\''},
++ { 'A', 0xef400000, 12, 'y'},
++ { 'A', 0xf0000000, 4, 'd'},
++ { 'B', 0x00000000, 2, 'C'},
++ { 'B', 0x40000000, 2, 'B'},
++ { 'B', 0x80000000, 6, STOP},
++ { 'B', 0x84000000, 7, 'y'},
++ { 'B', 0x87a00000, 11, 'h'},
++ { 'B', 0x87e00000, 11, ' '},
++ { 'B', 0x88000000, 5, 'l'},
++ { 'B', 0x90000000, 4, 'i'},
++ { 'B', 0xa0000000, 3, 'r'},
++ { 'B', 0xc0000000, 4, 'o'},
++ { 'B', 0xd0000000, 4, 'u'},
++ { 'B', 0xe0000000, 4, 'a'},
++ { 'B', 0xf0000000, 4, 'e'},
++ { 'C', 0x00000000, 2, 'o'},
++ { 'C', 0x40000000, 2, ' '},
++ { 'C', 0x80000000, 3, 'l'},
++ { 'C', 0xa0000000, 4, 'r'},
++ { 'C', 0xb0000000, 5, 'i'},
++ { 'C', 0xb8000000, 5, 'e'},
++ { 'C', 0xc0000000, 3, 'h'},
++ { 'C', 0xe0000000, 4, 'a'},
++ { 'C', 0xf0000000, 6, 'u'},
++ { 'C', 0xf4000000, 6, 'B'},
++ { 'C', 0xf8000000, 7, 'y'},
++ { 'C', 0xfa800000, 11, '4'},
++ { 'C', 0xfc000000, 7, '!'},
++ { 'C', 0xfe000000, 9, STOP},
++ { 'C', 0xfea00000, 11, 'D'},
++ { 'C', 0xfec00000, 10, 'I'},
++ { 'C', 0xff000000, 9, 'S'},
++ { 'D', 0x00000000, 3, 'r'},
++ { 'D', 0x28400000, 10, 'h'},
++ { 'D', 0x29800000, 9, '&'},
++ { 'D', 0x2a000000, 7, 'J'},
++ { 'D', 0x2c000000, 6, ' '},
++ { 'D', 0x30000000, 7, 'y'},
++ { 'D', 0x32000000, 9, '\''},
++ { 'D', 0x32a00000, 11, 'N'},
++ { 'D', 0x38000000, 5, 'u'},
++ { 'D', 0x40000000, 2, 'o'},
++ { 'D', 0x80000000, 2, 'a'},
++ { 'D', 0xc0000000, 3, 'e'},
++ { 'D', 0xe0000000, 3, 'i'},
++ { 'E', 0x00000000, 2, 'm'},
++ { 'E', 0x40000000, 4, 'E'},
++ { 'E', 0x50000000, 5, 'F'},
++ { 'E', 0x58000000, 6, 'u'},
++ { 'E', 0x5d000000, 9, 'g'},
++ { 'E', 0x5e000000, 7, 's'},
++ { 'E', 0x60000000, 3, 'v'},
++ { 'E', 0x80000000, 4, STOP},
++ { 'E', 0x90000000, 6, 'r'},
++ { 'E', 0x96000000, 8, 'R'},
++ { 'E', 0x98000000, 5, 'd'},
++ { 'E', 0xa0000000, 3, 'n'},
++ { 'E', 0xc6000000, 8, '\''},
++ { 'E', 0xc7000000, 8, ' '},
++ { 'E', 0xc8000000, 5, 'l'},
++ { 'E', 0xd0000000, 4, 'x'},
++ { 'E', 0xe0000000, 3, 'a'},
++ { 'F', 0x00000000, 2, 'i'},
++ { 'F', 0x40000000, 4, 'e'},
++ { 'F', 0x50000000, 7, 'A'},
++ { 'F', 0x52000000, 8, ' '},
++ { 'F', 0x53000000, 9, 'h'},
++ { 'F', 0x54000000, 7, 'O'},
++ { 'F', 0x57200000, 11, 'I'},
++ { 'F', 0x57600000, 11, '1'},
++ { 'F', 0x58000000, 5, 'l'},
++ { 'F', 0x60000000, 3, 'r'},
++ { 'F', 0x80000000, 2, 'a'},
++ { 'F', 0xc0000000, 3, 'u'},
++ { 'F', 0xe0000000, 3, 'o'},
++ { 'G', 0x00000000, 8, ':'},
++ { 'G', 0x01300000, 13, ESCAPE},
++ { 'G', 0x01400000, 11, 'A'},
++ { 'G', 0x01600000, 12, 'T'},
++ { 'G', 0x02000000, 7, 'y'},
++ { 'G', 0x04000000, 6, 'h'},
++ { 'G', 0x08000000, 5, 'u'},
++ { 'G', 0x1a800000, 10, 'P'},
++ { 'G', 0x1ac00000, 10, ' '},
++ { 'G', 0x1b000000, 8, 'C'},
++ { 'G', 0x1c000000, 6, 'l'},
++ { 'G', 0x20000000, 3, 'M'},
++ { 'G', 0x40000000, 3, 'a'},
++ { 'G', 0x60000000, 3, 'o'},
++ { 'G', 0x80000000, 2, 'r'},
++ { 'G', 0xc0000000, 3, 'i'},
++ { 'G', 0xe0000000, 3, 'e'},
++ { 'H', 0x00000000, 1, 'o'},
++ { 'H', 0x80000000, 3, 'a'},
++ { 'H', 0xa0000000, 3, 'i'},
++ { 'H', 0xc0000000, 3, 'e'},
++ { 'H', 0xe0000000, 4, 'u'},
++ { 'H', 0xf0000000, 5, 'R'},
++ { 'H', 0xfe200000, 14, ESCAPE},
++ { 'H', 0xfe280000, 13, 'D'},
++ { 'H', 0xff000000, 9, 'S'},
++ { 'I', 0x00000000, 1, 'T'},
++ { 'I', 0x80000000, 3, 's'},
++ { 'I', 0xa0000000, 3, 'n'},
++ { 'I', 0xc0000000, 6, 'I'},
++ { 'I', 0xc4000000, 6, STOP},
++ { 'I', 0xc8000000, 5, ' '},
++ { 'I', 0xd0000000, 4, 't'},
++ { 'I', 0xe4000000, 6, 'm'},
++ { 'I', 0xe8000000, 5, '\''},
++ { 'I', 0xf0000000, 8, 'a'},
++ { 'I', 0xf6900000, 13, ','},
++ { 'I', 0xf6980000, 13, 'A'},
++ { 'I', 0xf6c00000, 11, 'f'},
++ { 'I', 0xf6e00000, 12, 'o'},
++ { 'I', 0xf7000000, 9, 'c'},
++ { 'I', 0xf7800000, 11, 'l'},
++ { 'I', 0xf7a80000, 13, 'g'},
++ { 'I', 0xf7d40000, 14, 'b'},
++ { 'I', 0xf8000000, 5, 'r'},
++ { 'J', 0x00000000, 2, 'a'},
++ { 'J', 0x40000000, 2, 'u'},
++ { 'J', 0x80000000, 5, ' '},
++ { 'J', 0x8c800000, 9, 's'},
++ { 'J', 0x8d900000, 12, 'D'},
++ { 'J', 0x90000000, 4, 'i'},
++ { 'J', 0xa0000000, 3, 'o'},
++ { 'J', 0xc0000000, 2, 'e'},
++ { 'K', 0x00000000, 4, 'a'},
++ { 'K', 0x10000000, 8, STOP},
++ { 'K', 0x18000000, 5, 'r'},
++ { 'K', 0x20000000, 3, 'e'},
++ { 'K', 0x40000000, 2, 'i'},
++ { 'K', 0x80000000, 4, 'o'},
++ { 'K', 0x92800000, 9, 'w'},
++ { 'K', 0x93000000, 8, 'G'},
++ { 'K', 0x98000000, 6, 'n'},
++ { 'K', 0xa0000000, 3, ' '},
++ { 'K', 0xc0000000, 2, 'y'},
++ { 'L', 0x00000000, 2, 'a'},
++ { 'L', 0x40000000, 3, 'e'},
++ { 'L', 0x60000000, 7, 'l'},
++ { 'L', 0x63000000, 8, 'y'},
++ { 'L', 0x68000000, 5, 'K'},
++ { 'L', 0x70000000, 4, 'u'},
++ { 'L', 0x80000000, 2, 'o'},
++ { 'L', 0xc0000000, 2, 'i'},
++ { 'M', 0x00000000, 3, 'e'},
++ { 'M', 0x20000000, 4, 'T'},
++ { 'M', 0x30000000, 5, STOP},
++ { 'M', 0x38200000, 11, 'h'},
++ { 'M', 0x38c00000, 10, ' '},
++ { 'M', 0x39000000, 8, 'r'},
++ { 'M', 0x3a000000, 8, 'E'},
++ { 'M', 0x3b000000, 10, '1'},
++ { 'M', 0x3c000000, 6, 'c'},
++ { 'M', 0x40000000, 2, 'a'},
++ { 'M', 0x80000000, 2, 'o'},
++ { 'M', 0xc0000000, 4, 'y'},
++ { 'M', 0xd0000000, 4, 'u'},
++ { 'M', 0xe0000000, 3, 'i'},
++ { 'N', 0x00000000, 2, 'o'},
++ { 'N', 0x45400000, 12, 'M'},
++ { 'N', 0x45c00000, 11, 'A'},
++ { 'N', 0x48000000, 5, 'u'},
++ { 'N', 0x50000000, 4, 'a'},
++ { 'N', 0x60000000, 3, 'i'},
++ { 'N', 0x80000000, 1, 'e'},
++ { 'O', 0x00000000, 3, '\''},
++ { 'O', 0x30000000, 4, 'l'},
++ { 'O', 0x40000000, 3, 'f'},
++ { 'O', 0x60800000, 9, 'g'},
++ { 'O', 0x62000000, 8, 'x'},
++ { 'O', 0x64000000, 6, 'S'},
++ { 'O', 0x68000000, 5, 'r'},
++ { 'O', 0x70000000, 5, 'd'},
++ { 'O', 0x7c000000, 6, 'b'},
++ { 'O', 0x80000000, 5, 'p'},
++ { 'O', 0x8a800000, 9, 'a'},
++ { 'O', 0x8c000000, 6, 'v'},
++ { 'O', 0x90000000, 4, 'm'},
++ { 'O', 0xa8000000, 6, 'w'},
++ { 'O', 0xac000000, 6, 'U'},
++ { 'O', 0xb0000000, 5, STOP},
++ { 'O', 0xbe000000, 8, 's'},
++ { 'O', 0xc0000000, 3, 'u'},
++ { 'O', 0xe0000000, 3, 'n'},
++ { 'P', 0x00000000, 3, 'e'},
++ { 'P', 0x20000000, 3, 'a'},
++ { 'P', 0x40000000, 2, 'r'},
++ { 'P', 0x80000000, 2, 'l'},
++ { 'P', 0xc0000000, 6, 'D'},
++ { 'P', 0xc4000000, 6, 'u'},
++ { 'P', 0xc8000000, 8, ' '},
++ { 'P', 0xc9800000, 9, 'M'},
++ { 'P', 0xcb800000, 11, ':'},
++ { 'P', 0xcbc60000, 15, ESCAPE},
++ { 'P', 0xcbe80000, 13, 'G'},
++ { 'P', 0xcc000000, 6, 'h'},
++ { 'P', 0xd0000000, 4, 'i'},
++ { 'P', 0xe0000000, 3, 'o'},
++ { 'Q', 0x68000000, 5, 'C'},
++ { 'Q', 0x80000000, 1, 'u'},
++ { 'R', 0x00000000, 2, 'a'},
++ { 'R', 0x40000000, 2, 'o'},
++ { 'R', 0x80000000, 3, 'i'},
++ { 'R', 0xa4540000, 15, ESCAPE},
++ { 'R', 0xa4600000, 12, ' '},
++ { 'R', 0xa4c00000, 10, 'n'},
++ { 'R', 0xa6000000, 7, STOP},
++ { 'R', 0xa8000000, 5, 'E'},
++ { 'R', 0xb0000000, 4, 'u'},
++ { 'R', 0xc0000000, 2, 'e'},
++ { 'S', 0x00000000, 5, 'n'},
++ { 'S', 0x0a000000, 7, 'A'},
++ { 'S', 0x0c000000, 6, 'w'},
++ { 'S', 0x10000000, 4, 'a'},
++ { 'S', 0x20000000, 3, 'o'},
++ { 'S', 0x40000000, 3, 'p'},
++ { 'S', 0x60000000, 3, 'u'},
++ { 'S', 0x80000000, 8, 'O'},
++ { 'S', 0x81000000, 9, 'y'},
++ { 'S', 0x83000000, 8, ' '},
++ { 'S', 0x84000000, 7, 'l'},
++ { 'S', 0x86000000, 9, 'E'},
++ { 'S', 0x86800000, 11, 'g'},
++ { 'S', 0x88000000, 5, 'i'},
++ { 'S', 0x90000000, 4, 'e'},
++ { 'S', 0xa0000000, 6, 'm'},
++ { 'S', 0xa4000000, 7, 'q'},
++ { 'S', 0xa8000000, 5, 'k'},
++ { 'S', 0xb0000000, 4, 'c'},
++ { 'S', 0xc0000000, 3, 'h'},
++ { 'S', 0xe0000000, 3, 't'},
++ { 'T', 0x00000000, 1, 'h'},
++ { 'T', 0x80000000, 4, 'e'},
++ { 'T', 0x90000000, 4, 'r'},
++ { 'T', 0xa0000000, 3, 'o'},
++ { 'T', 0xc0000000, 5, 'a'},
++ { 'T', 0xc83e1600, 24, '-'},
++ { 'T', 0xc9000000, 8, 'y'},
++ { 'T', 0xcb800000, 9, '4'},
++ { 'T', 0xcc000000, 6, 'i'},
++ { 'T', 0xd0000000, 5, 'w'},
++ { 'T', 0xd9000000, 10, ' '},
++ { 'T', 0xdc000000, 8, 'u'},
++ { 'T', 0xdd000000, 8, 'W'},
++ { 'T', 0xde000000, 7, 'H'},
++ { 'T', 0xe0000000, 3, 'V'},
++ { 'U', 0x00000000, 1, 'n'},
++ { 'U', 0x80000000, 2, 'p'},
++ { 'U', 0xc0000000, 5, 'R'},
++ { 'U', 0xc8800000, 9, 'r'},
++ { 'U', 0xce000000, 8, 'E'},
++ { 'U', 0xd0000000, 4, 'K'},
++ { 'U', 0xe0000000, 5, 'S'},
++ { 'U', 0xec000000, 6, 's'},
++ { 'U', 0xf0000000, 4, 'l'},
++ { 'V', 0x20000000, 4, 'e'},
++ { 'V', 0x30000000, 4, 'a'},
++ { 'V', 0x50000000, 7, '\''},
++ { 'V', 0x52000000, 7, '4'},
++ { 'V', 0x58000000, 10, 's'},
++ { 'V', 0x58e00000, 14, ESCAPE},
++ { 'V', 0x5a000000, 7, 'o'},
++ { 'V', 0x5c000000, 8, STOP},
++ { 'V', 0x60000000, 3, 'i'},
++ { 'V', 0x80000000, 1, ' '},
++ { 'W', 0x10000000, 5, 'O'},
++ { 'W', 0x18000000, 5, 'r'},
++ { 'W', 0x20000000, 3, 'h'},
++ { 'W', 0x40000000, 2, 'o'},
++ { 'W', 0x80000000, 3, 'a'},
++ { 'W', 0xa0000000, 3, 'i'},
++ { 'W', 0xc0000000, 2, 'e'},
++ { 'X', 0x80000000, 2, ' '},
++ { 'X', 0xc0000000, 2, 't'},
++ { 'Y', 0x40000000, 2, 'e'},
++ { 'Y', 0x80000000, 1, 'o'},
++ { 'Z', 0x00000000, 2, 'a'},
++ { 'Z', 0x70000000, 5, 'e'},
++ { 'Z', 0x7e000000, 8, STOP},
++ { 'Z', 0x80000000, 1, 'o'},
++ { '\'', 0x00000000, 3, 'm'},
++ { '\'', 0x20000000, 4, 't'},
++ { '\'', 0x30000000, 4, ' '},
++ { '\'', 0x40000000, 3, 'C'},
++ { '\'', 0x60000000, 5, 'd'},
++ { '\'', 0x68000000, 8, 'G'},
++ { '\'', 0x69700000, 13, 'K'},
++ { '\'', 0x6c000000, 6, 'r'},
++ { '\'', 0x70000000, 5, 'v'},
++ { '\'', 0x79000000, 8, 'l'},
++ { '\'', 0x7a400000, 10, STOP},
++ { '\'', 0x7b800000, 13, '0'},
++ { '\'', 0x7b880000, 14, ESCAPE},
++ { '\'', 0x80000000, 1, 's'},
++ { 'a', 0x00000000, 7, 'e'},
++ { 'a', 0x02000000, 7, '\''},
++ { 'a', 0x04000000, 10, '!'},
++ { 'a', 0x04600000, 11, 'a'},
++ { 'a', 0x04800000, 9, ':'},
++ { 'a', 0x05000000, 8, 'f'},
++ { 'a', 0x06000000, 7, 'w'},
++ { 'a', 0x08000000, 6, 'b'},
++ { 'a', 0x0c000000, 8, STOP},
++ { 'a', 0x10000000, 4, 'm'},
++ { 'a', 0x20000000, 3, 'r'},
++ { 'a', 0x40000000, 4, 'c'},
++ { 'a', 0x50000000, 10, 'o'},
++ { 'a', 0x50400000, 10, 'x'},
++ { 'a', 0x50900000, 13, 'j'},
++ { 'a', 0x50e00000, 11, ','},
++ { 'a', 0x51000000, 8, 'h'},
++ { 'a', 0x52000000, 7, 'u'},
++ { 'a', 0x54000000, 7, 'z'},
++ { 'a', 0x56000000, 7, 'v'},
++ { 'a', 0x58000000, 6, 'p'},
++ { 'a', 0x5c000000, 6, 'g'},
++ { 'a', 0x60000000, 3, 't'},
++ { 'a', 0x80000000, 3, 'l'},
++ { 'a', 0xa0000000, 4, 's'},
++ { 'a', 0xb0000000, 5, ' '},
++ { 'a', 0xb8000000, 5, 'd'},
++ { 'a', 0xb8000000, 5, 'd'},
++ { 'a', 0xc0000000, 3, 'n'},
++ { 'a', 0xe0000000, 4, 'y'},
++ { 'a', 0xf0000000, 5, 'i'},
++ { 'a', 0xf8000000, 5, 'k'},
++ { 'b', 0x00000000, 3, 'r'},
++ { 'b', 0x20000000, 3, 'o'},
++ { 'b', 0x40000000, 3, 'e'},
++ { 'b', 0x60000000, 3, 'a'},
++ { 'b', 0x80000000, 3, 'i'},
++ { 'b', 0xa0000000, 6, 'h'},
++ { 'b', 0xa4000000, 7, ':'},
++ { 'b', 0xa6400000, 10, 't'},
++ { 'b', 0xa8000000, 5, 's'},
++ { 'b', 0xb0000000, 4, 'u'},
++ { 'b', 0xc0000000, 4, 'y'},
++ { 'b', 0xd0000000, 4, 'l'},
++ { 'b', 0xe0000000, 5, 'b'},
++ { 'b', 0xe8000000, 5, STOP},
++ { 'b', 0xf0000000, 4, ' '},
++ { 'c', 0x00000000, 2, 'k'},
++ { 'c', 0x40000000, 3, 'o'},
++ { 'c', 0x60000000, 6, 'l'},
++ { 'c', 0x64000000, 6, 'y'},
++ { 'c', 0x68000000, 6, 's'},
++ { 'c', 0x6c000000, 6, STOP},
++ { 'c', 0x70000000, 4, 'r'},
++ { 'c', 0x80000000, 3, 'h'},
++ { 'c', 0xa0000000, 5, ' '},
++ { 'c', 0xa8000000, 7, 'c'},
++ { 'c', 0xaa000000, 8, ':'},
++ { 'c', 0xac500000, 12, '\''},
++ { 'c', 0xac600000, 11, 'A'},
++ { 'c', 0xac800000, 9, 'D'},
++ { 'c', 0xad400000, 11, 'q'},
++ { 'c', 0xad680000, 13, 'I'},
++ { 'c', 0xae000000, 7, 'u'},
++ { 'c', 0xb0000000, 5, 'i'},
++ { 'c', 0xb8000000, 5, 'a'},
++ { 'c', 0xc0000000, 3, 't'},
++ { 'c', 0xe0000000, 3, 'e'},
++ { 'd', 0x00000000, 5, 'o'},
++ { 'd', 0x08000000, 7, '\''},
++ { 'd', 0x0a000000, 8, ':'},
++ { 'd', 0x0b000000, 8, 'h'},
++ { 'd', 0x0c000000, 6, 'u'},
++ { 'd', 0x10000000, 4, 'y'},
++ { 'd', 0x20000000, 3, 'e'},
++ { 'd', 0x40000000, 4, 'i'},
++ { 'd', 0x50000000, 5, 'd'},
++ { 'd', 0x58000000, 6, 'r'},
++ { 'd', 0x5c000000, 6, 'l'},
++ { 'd', 0x60000000, 4, 's'},
++ { 'd', 0x70000000, 8, 'c'},
++ { 'd', 0x71c00000, 10, 'm'},
++ { 'd', 0x72000000, 8, 'n'},
++ { 'd', 0x73000000, 8, 'w'},
++ { 'd', 0x74000000, 6, 'v'},
++ { 'd', 0x78000000, 6, 'g'},
++ { 'd', 0x7c000000, 9, '!'},
++ { 'd', 0x7c800000, 9, '-'},
++ { 'd', 0x7d000000, 9, 'f'},
++ { 'd', 0x7d800000, 10, ','},
++ { 'd', 0x7dc00000, 11, 't'},
++ { 'd', 0x7de00000, 11, 'b'},
++ { 'd', 0x7e000000, 7, '.'},
++ { 'd', 0x80000000, 3, STOP},
++ { 'd', 0xa0000000, 3, 'a'},
++ { 'd', 0xc0000000, 2, ' '},
++ { 'e', 0x00000000, 3, 's'},
++ { 'e', 0x20000000, 4, 't'},
++ { 'e', 0x30000000, 8, 'g'},
++ { 'e', 0x31000000, 8, 'f'},
++ { 'e', 0x32000000, 8, 'x'},
++ { 'e', 0x33000000, 10, 'P'},
++ { 'e', 0x33400000, 10, 'B'},
++ { 'e', 0x33800000, 9, 'h'},
++ { 'e', 0x34000000, 7, 'i'},
++ { 'e', 0x36000000, 7, 'p'},
++ { 'e', 0x38000000, 6, 'm'},
++ { 'e', 0x3c000000, 7, 'b'},
++ { 'e', 0x3e000000, 8, 'k'},
++ { 'e', 0x3f000000, 8, ':'},
++ { 'e', 0x40000000, 2, ' '},
++ { 'e', 0x80000000, 5, 'l'},
++ { 'e', 0x88000000, 6, 'c'},
++ { 'e', 0x8c000000, 6, 'd'},
++ { 'e', 0x90000000, 4, 'n'},
++ { 'e', 0xa0000000, 3, 'r'},
++ { 'e', 0xc0000000, 8, STOP},
++ { 'e', 0xd0000000, 7, 'v'},
++ { 'e', 0xd2000000, 10, ','},
++ { 'e', 0xd2400000, 11, '4'},
++ { 'e', 0xd2600000, 11, '?'},
++ { 'e', 0xd2800000, 9, '.'},
++ { 'e', 0xd3000000, 8, 'o'},
++ { 'e', 0xd4000000, 8, '\''},
++ { 'e', 0xd5000000, 10, 'V'},
++ { 'e', 0xd5400000, 10, 'z'},
++ { 'e', 0xd5820000, 15, 'G'},
++ { 'e', 0xd5840000, 14, 'q'},
++ { 'e', 0xd5880000, 13, '!'},
++ { 'e', 0xd5900000, 12, '-'},
++ { 'e', 0xd5a00000, 11, 'u'},
++ { 'e', 0xd5c00000, 10, 'j'},
++ { 'e', 0xd6000000, 7, 'y'},
++ { 'e', 0xd8000000, 5, 'e'},
++ { 'e', 0xe0000000, 4, 'a'},
++ { 'e', 0xf0000000, 4, 'w'},
++ { 'f', 0x00000000, 1, ' '},
++ { 'f', 0x80000000, 5, '.'},
++ { 'f', 0x88000000, 6, STOP},
++ { 'f', 0x8cb00000, 12, 's'},
++ { 'f', 0x8d000000, 8, 'y'},
++ { 'f', 0x8e700000, 12, ':'},
++ { 'f', 0x8f000000, 8, 'u'},
++ { 'f', 0x90000000, 4, 't'},
++ { 'f', 0xa0000000, 3, 'o'},
++ { 'f', 0xc0000000, 4, 'a'},
++ { 'f', 0xd0000000, 4, 'i'},
++ { 'f', 0xe0000000, 5, 'r'},
++ { 'f', 0xe8000000, 5, 'f'},
++ { 'f', 0xf0000000, 4, 'e'},
++ { 'g', 0x00000000, 2, 'h'},
++ { 'g', 0x40000000, 8, STOP},
++ { 'g', 0x60000000, 3, 'e'},
++ { 'g', 0x80000000, 2, ' '},
++ { 'g', 0xc0000000, 4, 'i'},
++ { 'g', 0xd0000000, 6, 's'},
++ { 'g', 0xd5000000, 10, '.'},
++ { 'g', 0xd5800000, 10, '\''},
++ { 'g', 0xd5c00000, 10, 't'},
++ { 'g', 0xd6000000, 7, 'b'},
++ { 'g', 0xd8000000, 7, 'g'},
++ { 'g', 0xda000000, 7, 'o'},
++ { 'g', 0xdc000000, 6, 'l'},
++ { 'g', 0xe0000000, 5, ':'},
++ { 'g', 0xe8000000, 5, 'r'},
++ { 'g', 0xf1000000, 11, 'w'},
++ { 'g', 0xf1300000, 12, 'm'},
++ { 'g', 0xf1400000, 10, 'y'},
++ { 'g', 0xf1800000, 9, 'd'},
++ { 'g', 0xf2000000, 7, 'n'},
++ { 'g', 0xf4000000, 6, 'u'},
++ { 'g', 0xf8000000, 5, 'a'},
++ { 'h', 0x00000000, 1, 'e'},
++ { 'h', 0x80000000, 6, 'b'},
++ { 'h', 0x84000000, 6, 'u'},
++ { 'h', 0x88000000, 8, 'w'},
++ { 'h', 0x89000000, 8, 'd'},
++ { 'h', 0x8a000000, 8, 'n'},
++ { 'h', 0x8b000000, 8, 'y'},
++ { 'h', 0x8d000000, 8, 'l'},
++ { 'h', 0x8e000000, 9, '\''},
++ { 'h', 0x8e800000, 10, 's'},
++ { 'h', 0x8ec00000, 11, 'm'},
++ { 'h', 0x8ee80000, 14, 'c'},
++ { 'h', 0x8eee0000, 16, 'g'},
++ { 'h', 0x8eef0000, 17, '-'},
++ { 'h', 0x8f000000, 8, '.'},
++ { 'h', 0x90000000, 4, 'i'},
++ { 'h', 0xa0000000, 3, 'o'},
++ { 'h', 0xc0000000, 4, 'a'},
++ { 'h', 0xd0000000, 5, 'r'},
++ { 'h', 0xd8000000, 8, STOP},
++ { 'h', 0xe0000000, 4, ' '},
++ { 'h', 0xf0000000, 4, 't'},
++ { 'i', 0x00000000, 3, 'c'},
++ { 'i', 0x20000000, 6, 'p'},
++ { 'i', 0x24060000, 15, 'j'},
++ { 'i', 0x24200000, 11, 'h'},
++ { 'i', 0x24400000, 11, ':'},
++ { 'i', 0x24600000, 11, 'w'},
++ { 'i', 0x26000000, 8, 'x'},
++ { 'i', 0x27000000, 10, 'u'},
++ { 'i', 0x28000000, 5, 'a'},
++ { 'i', 0x30000000, 5, 'v'},
++ { 'i', 0x38000000, 6, ' '},
++ { 'i', 0x3c000000, 7, 'z'},
++ { 'i', 0x3e000000, 8, STOP},
++ { 'i', 0x40000000, 2, 'n'},
++ { 'i', 0x80000000, 5, 'r'},
++ { 'i', 0x88000000, 5, 'd'},
++ { 'i', 0x90000000, 4, 'o'},
++ { 'i', 0xa0000000, 4, 'l'},
++ { 'i', 0xb0000000, 5, 'm'},
++ { 'i', 0xb8000000, 7, 'b'},
++ { 'i', 0xba000000, 7, 'k'},
++ { 'i', 0xbc000000, 6, 'f'},
++ { 'i', 0xc0000000, 4, 'g'},
++ { 'i', 0xd0000000, 4, 's'},
++ { 'i', 0xe0000000, 4, 't'},
++ { 'i', 0xf0000000, 4, 'e'},
++ { 'j', 0x00000000, 1, 'y'},
++ { 'j', 0x84000000, 6, 'i'},
++ { 'j', 0x88000000, 5, 'u'},
++ { 'j', 0x90000000, 4, 'a'},
++ { 'j', 0xa0000000, 3, 'e'},
++ { 'k', 0x00000000, 2, ' '},
++ { 'k', 0x40000000, 3, 'i'},
++ { 'k', 0x60000000, 4, 'y'},
++ { 'k', 0x70000000, 4, 's'},
++ { 'k', 0x80000000, 2, 'e'},
++ { 'k', 0xc0000000, 8, STOP},
++ { 'k', 0xe0000000, 8, '\''},
++ { 'k', 0xe1000000, 11, 'b'},
++ { 'k', 0xe1800000, 9, 'w'},
++ { 'k', 0xe2000000, 7, ':'},
++ { 'k', 0xe4000000, 6, 'a'},
++ { 'k', 0xe8000000, 6, 'l'},
++ { 'k', 0xec000000, 7, 'k'},
++ { 'k', 0xee000000, 9, 'o'},
++ { 'k', 0xeea00000, 12, '?'},
++ { 'k', 0xeeb80000, 13, 't'},
++ { 'k', 0xeee00000, 11, 'n'},
++ { 'k', 0xf0000000, 4, 'f'},
++ { 'l', 0x00000000, 3, 'l'},
++ { 'l', 0x20000000, 5, 'u'},
++ { 'l', 0x28000000, 6, 't'},
++ { 'l', 0x2c000000, 6, 'm'},
++ { 'l', 0x30000000, 4, 'y'},
++ { 'l', 0x40000000, 2, 'e'},
++ { 'l', 0x80000000, 8, STOP},
++ { 'l', 0x90000000, 4, 'd'},
++ { 'l', 0xa0000000, 3, 'a'},
++ { 'l', 0xc0000000, 4, 'o'},
++ { 'l', 0xd0000000, 5, 's'},
++ { 'l', 0xd8000000, 8, 'f'},
++ { 'l', 0xd9000000, 11, 'z'},
++ { 'l', 0xd9400000, 10, '.'},
++ { 'l', 0xd9800000, 9, 'v'},
++ { 'l', 0xda000000, 7, 'k'},
++ { 'l', 0xdc000000, 8, 'b'},
++ { 'l', 0xdd000000, 9, ':'},
++ { 'l', 0xdd800000, 10, 'w'},
++ { 'l', 0xddc00000, 13, 'g'},
++ { 'l', 0xdddb0000, 16, '?'},
++ { 'l', 0xde000000, 8, '\''},
++ { 'l', 0xdf000000, 8, 'c'},
++ { 'l', 0xe0000000, 4, 'i'},
++ { 'l', 0xf0000000, 4, ' '},
++ { 'm', 0x00000000, 4, 'i'},
++ { 'm', 0x10000000, 8, STOP},
++ { 'm', 0x20000000, 3, 'm'},
++ { 'm', 0x40000000, 4, 'y'},
++ { 'm', 0x50000000, 5, 'b'},
++ { 'm', 0x5a000000, 8, ':'},
++ { 'm', 0x5b000000, 9, 'h'},
++ { 'm', 0x5b800000, 13, ESCAPE},
++ { 'm', 0x5ba00000, 11, '.'},
++ { 'm', 0x5bc00000, 10, '\''},
++ { 'm', 0x5c000000, 7, 'f'},
++ { 'm', 0x5f000000, 9, 'w'},
++ { 'm', 0x5f800000, 10, 'r'},
++ { 'm', 0x5fc00000, 10, 'u'},
++ { 'm', 0x60000000, 3, ' '},
++ { 'm', 0x80000000, 2, 'e'},
++ { 'm', 0xc0000000, 5, 'o'},
++ { 'm', 0xc8000000, 6, 'n'},
++ { 'm', 0xcc000000, 6, 's'},
++ { 'm', 0xd0000000, 4, 'p'},
++ { 'm', 0xe0000000, 3, 'a'},
++ { 'n', 0x00000000, 3, 'i'},
++ { 'n', 0x20000000, 7, 'r'},
++ { 'n', 0x22000000, 8, 'v'},
++ { 'n', 0x23000000, 10, '!'},
++ { 'n', 0x23600000, 12, 'B'},
++ { 'n', 0x23800000, 9, ','},
++ { 'n', 0x24000000, 8, '-'},
++ { 'n', 0x25000000, 8, '.'},
++ { 'n', 0x26000000, 7, 'f'},
++ { 'n', 0x28000000, 6, 'y'},
++ { 'n', 0x2c000000, 7, 'u'},
++ { 'n', 0x2e000000, 7, 'j'},
++ { 'n', 0x30000000, 4, 'a'},
++ { 'n', 0x40000000, 4, 's'},
++ { 'n', 0x50000000, 6, '\''},
++ { 'n', 0x54000000, 6, 'k'},
++ { 'n', 0x58000000, 8, 'l'},
++ { 'n', 0x59000000, 12, 'w'},
++ { 'n', 0x59140000, 14, 'p'},
++ { 'n', 0x59180000, 13, 'q'},
++ { 'n', 0x59400000, 11, 'h'},
++ { 'n', 0x59600000, 11, 'b'},
++ { 'n', 0x59800000, 9, 'm'},
++ { 'n', 0x5a000000, 8, 'x'},
++ { 'n', 0x5b000000, 8, ':'},
++ { 'n', 0x5c000000, 6, 'o'},
++ { 'n', 0x60000000, 4, 'e'},
++ { 'n', 0x70000000, 5, 'c'},
++ { 'n', 0x78000000, 5, 'n'},
++ { 'n', 0x80000000, 3, 'g'},
++ { 'n', 0xa0000000, 3, ' '},
++ { 'n', 0xc0000000, 3, 'd'},
++ { 'n', 0xe0000000, 8, STOP},
++ { 'n', 0xf0000000, 4, 't'},
++ { 'o', 0x00000000, 2, 'r'},
++ { 'o', 0x40000000, 4, 'f'},
++ { 'o', 0x50000000, 4, ' '},
++ { 'o', 0x60000000, 4, 'w'},
++ { 'o', 0x70000000, 6, 'a'},
++ { 'o', 0x74000000, 6, 'b'},
++ { 'o', 0x78000000, 5, 't'},
++ { 'o', 0x80000000, 4, 'o'},
++ { 'o', 0x90000000, 5, 'c'},
++ { 'o', 0x98000000, 6, 'y'},
++ { 'o', 0x9c000000, 8, STOP},
++ { 'o', 0xa0000000, 5, 'p'},
++ { 'o', 0xa8000000, 5, 'd'},
++ { 'o', 0xb0000000, 4, 'u'},
++ { 'o', 0xc0000000, 3, 'n'},
++ { 'o', 0xe0000000, 5, 'm'},
++ { 'o', 0xe8000000, 6, 's'},
++ { 'o', 0xec000000, 6, 'k'},
++ { 'o', 0xf0000000, 5, 'l'},
++ { 'o', 0xf8180000, 14, ','},
++ { 'o', 0xf8200000, 11, '?'},
++ { 'o', 0xf8400000, 11, ':'},
++ { 'o', 0xf8600000, 12, '.'},
++ { 'o', 0xf8800000, 9, 'h'},
++ { 'o', 0xf9000000, 9, '!'},
++ { 'o', 0xf9800000, 10, '\''},
++ { 'o', 0xf9c00000, 11, 'z'},
++ { 'o', 0xf9e00000, 11, 'x'},
++ { 'o', 0xfa000000, 7, 'v'},
++ { 'o', 0xfc000000, 7, 'g'},
++ { 'o', 0xfe000000, 9, 'e'},
++ { 'o', 0xfe800000, 9, 'j'},
++ { 'o', 0xff000000, 8, 'i'},
++ { 'p', 0x00000000, 2, 'e'},
++ { 'p', 0x40000000, 8, STOP},
++ { 'p', 0x60000000, 4, 's'},
++ { 'p', 0x70000000, 5, 'l'},
++ { 'p', 0x78000000, 5, 'r'},
++ { 'p', 0x80000000, 3, 'i'},
++ { 'p', 0xa0000000, 4, ' '},
++ { 'p', 0xb0000000, 5, 'h'},
++ { 'p', 0xb8000000, 6, 't'},
++ { 'p', 0xbc000000, 6, '\''},
++ { 'p', 0xc0000000, 3, 'o'},
++ { 'p', 0xe0000000, 4, 'p'},
++ { 'p', 0xf0000000, 5, 'a'},
++ { 'p', 0xf8000000, 7, 'd'},
++ { 'p', 0xfa000000, 7, 'm'},
++ { 'p', 0xfc000000, 7, 'y'},
++ { 'p', 0xfe000000, 10, '?'},
++ { 'p', 0xfe600000, 11, '.'},
++ { 'p', 0xff000000, 10, 'w'},
++ { 'p', 0xff400000, 10, 'u'},
++ { 'p', 0xff800000, 9, '!'},
++ { 'q', 0x10000000, 4, '\''},
++ { 'q', 0x40000000, 8, STOP},
++ { 'q', 0x80000000, 1, 'u'},
++ { 'r', 0x00000000, 3, ' '},
++ { 'r', 0x20000000, 7, '\''},
++ { 'r', 0x22000000, 8, 'f'},
++ { 'r', 0x23000000, 8, '.'},
++ { 'r', 0x24000000, 6, 'k'},
++ { 'r', 0x28000000, 6, 'r'},
++ { 'r', 0x2c000000, 6, 'm'},
++ { 'r', 0x30000000, 4, 'y'},
++ { 'r', 0x40000000, 4, 'd'},
++ { 'r', 0x50000000, 9, ','},
++ { 'r', 0x50800000, 9, 'p'},
++ { 'r', 0x51000000, 8, 'b'},
++ { 'r', 0x52000000, 7, 'c'},
++ { 'r', 0x54000000, 6, 'u'},
++ { 'r', 0x58000000, 5, 'n'},
++ { 'r', 0x60000000, 3, 'i'},
++ { 'r', 0x80000000, 4, 's'},
++ { 'r', 0x90000000, 4, 't'},
++ { 'r', 0xa0000000, 3, 'e'},
++ { 'r', 0xc0000000, 4, 'a'},
++ { 'r', 0xd0000000, 4, STOP},
++ { 'r', 0xe0000000, 8, 'v'},
++ { 'r', 0xe1000000, 9, 'w'},
++ { 'r', 0xe1800000, 11, '-'},
++ { 'r', 0xe1a00000, 12, 'h'},
++ { 'r', 0xe1c00000, 10, 'j'},
++ { 'r', 0xe2000000, 7, ':'},
++ { 'r', 0xe4000000, 6, 'g'},
++ { 'r', 0xe8000000, 5, 'l'},
++ { 'r', 0xf0000000, 4, 'o'},
++ { 's', 0x00000000, 4, 's'},
++ { 's', 0x10000000, 7, '.'},
++ { 's', 0x12000000, 7, '!'},
++ { 's', 0x14000000, 8, ','},
++ { 's', 0x15000000, 8, 'f'},
++ { 's', 0x16000000, 7, 'y'},
++ { 's', 0x20000000, 4, 'i'},
++ { 's', 0x30000000, 4, 'h'},
++ { 's', 0x40000000, 7, 'p'},
++ { 's', 0x42000000, 11, '?'},
++ { 's', 0x42200000, 11, 'w'},
++ { 's', 0x42400000, 10, 'm'},
++ { 's', 0x42800000, 9, 'k'},
++ { 's', 0x43000000, 8, '\''},
++ { 's', 0x44000000, 6, 'o'},
++ { 's', 0x48000000, 7, 'a'},
++ { 's', 0x4a000000, 9, 'd'},
++ { 's', 0x4a800000, 11, 'g'},
++ { 's', 0x4aa00000, 12, 'q'},
++ { 's', 0x4ac00000, 10, 'b'},
++ { 's', 0x4b000000, 8, 'n'},
++ { 's', 0x4c000000, 6, 'c'},
++ { 's', 0x50000000, 5, 'e'},
++ { 's', 0x58000000, 6, ':'},
++ { 's', 0x5c000000, 8, 'l'},
++ { 's', 0x5d000000, 8, 'r'},
++ { 's', 0x5e000000, 7, 'u'},
++ { 's', 0x60000000, 3, 't'},
++ { 's', 0x80000000, 2, ' '},
++ { 's', 0xc0000000, 2, STOP},
++ { 't', 0x00000000, 3, 'i'},
++ { 't', 0x20000000, 4, 'a'},
++ { 't', 0x30000000, 7, '\''},
++ { 't', 0x32000000, 8, 'w'},
++ { 't', 0x33000000, 9, '?'},
++ { 't', 0x33c00000, 11, '-'},
++ { 't', 0x33e00000, 11, ','},
++ { 't', 0x34000000, 7, ':'},
++ { 't', 0x36000000, 8, '!'},
++ { 't', 0x37000000, 9, 'n'},
++ { 't', 0x37800000, 10, 'd'},
++ { 't', 0x38000000, 5, 't'},
++ { 't', 0x40000000, 4, 'r'},
++ { 't', 0x50000000, 5, 'y'},
++ { 't', 0x58000000, 6, 'm'},
++ { 't', 0x5c000000, 8, '.'},
++ { 't', 0x5d000000, 8, 'b'},
++ { 't', 0x5e000000, 8, 'E'},
++ { 't', 0x60000000, 8, STOP},
++ { 't', 0x80000000, 3, ' '},
++ { 't', 0xa0000000, 4, 's'},
++ { 't', 0xb0000000, 4, 'o'},
++ { 't', 0xc0000000, 5, 'u'},
++ { 't', 0xc8000000, 6, 'c'},
++ { 't', 0xcc000000, 6, 'l'},
++ { 't', 0xd0000000, 4, 'e'},
++ { 't', 0xe0000000, 3, 'h'},
++ { 'u', 0x00000000, 2, 'r'},
++ { 'u', 0x40000000, 4, 'e'},
++ { 'u', 0x50000000, 4, 'm'},
++ { 'u', 0x60000000, 5, 'c'},
++ { 'u', 0x68000000, 5, 'g'},
++ { 'u', 0x70000000, 5, 'b'},
++ { 'u', 0x78000000, 6, STOP},
++ { 'u', 0x7e800000, 10, 'f'},
++ { 'u', 0x7f000000, 8, '\''},
++ { 'u', 0x80000000, 3, 's'},
++ { 'u', 0xa0000000, 5, 'p'},
++ { 'u', 0xa8000000, 5, 'i'},
++ { 'u', 0xb0000000, 5, 'l'},
++ { 'u', 0xb8000000, 6, 'y'},
++ { 'u', 0xbc000000, 7, ' '},
++ { 'u', 0xbf000000, 10, 'w'},
++ { 'u', 0xbf400000, 12, 'v'},
++ { 'u', 0xbf500000, 12, 'x'},
++ { 'u', 0xbf600000, 13, 'j'},
++ { 'u', 0xc0000000, 4, 't'},
++ { 'u', 0xd0000000, 5, 'd'},
++ { 'u', 0xd8000000, 5, 'a'},
++ { 'u', 0xe0000000, 3, 'n'},
++ { 'v', 0x00000000, 5, '.'},
++ { 'v', 0x08000000, 7, 'y'},
++ { 'v', 0x0a000000, 10, ESCAPE},
++ { 'v', 0x0b000000, 8, 's'},
++ { 'v', 0x10000000, 4, 'o'},
++ { 'v', 0x20000000, 3, 'a'},
++ { 'v', 0x40000000, 2, 'i'},
++ { 'v', 0x80000000, 1, 'e'},
++ { 'w', 0x00000000, 1, 's'},
++ { 'w', 0x80000000, 3, ' '},
++ { 'w', 0xa0000000, 5, 'a'},
++ { 'w', 0xa8000000, 8, 'm'},
++ { 'w', 0xa9800000, 9, 'b'},
++ { 'w', 0xaa000000, 9, 'k'},
++ { 'w', 0xaa800000, 9, 'r'},
++ { 'w', 0xab000000, 8, 'd'},
++ { 'w', 0xac000000, 11, 'c'},
++ { 'w', 0xac200000, 11, 'f'},
++ { 'w', 0xacc00000, 10, 'h'},
++ { 'w', 0xad000000, 8, 'l'},
++ { 'w', 0xae000000, 7, 'y'},
++ { 'w', 0xb0000000, 4, 'i'},
++ { 'w', 0xc0000000, 3, STOP},
++ { 'w', 0xe0000000, 4, 'o'},
++ { 'w', 0xf0000000, 5, 'n'},
++ { 'w', 0xf8000000, 5, 'e'},
++ { 'x', 0x00000000, 2, 'p'},
++ { 'x', 0x40000000, 5, 'o'},
++ { 'x', 0x48000000, 6, 'e'},
++ { 'x', 0x4e000000, 7, 'f'},
++ { 'x', 0x50000000, 5, 'c'},
++ { 'x', 0x58000000, 6, 'y'},
++ { 'x', 0x5c800000, 9, 'a'},
++ { 'x', 0x5d000000, 12, ESCAPE},
++ { 'x', 0x5d400000, 10, '\''},
++ { 'x', 0x60000000, 4, STOP},
++ { 'x', 0x70000000, 5, 'i'},
++ { 'x', 0x80000000, 2, ' '},
++ { 'x', 0xc0000000, 2, 't'},
++ { 'y', 0x00000000, 1, ' '},
++ { 'y', 0x80000000, 8, 'i'},
++ { 'y', 0x81800000, 9, 'f'},
++ { 'y', 0x82000000, 7, 'n'},
++ { 'y', 0x84000000, 7, 't'},
++ { 'y', 0x86000000, 8, ','},
++ { 'y', 0x87000000, 8, 'p'},
++ { 'y', 0x88000000, 5, 'o'},
++ { 'y', 0x90000000, 5, 's'},
++ { 'y', 0x98000000, 6, 'd'},
++ { 'y', 0x9c000000, 8, 'm'},
++ { 'y', 0x9d000000, 9, 'r'},
++ { 'y', 0x9d800000, 9, 'g'},
++ { 'y', 0x9e000000, 8, 'c'},
++ { 'y', 0x9f500000, 13, 'v'},
++ { 'y', 0x9f5c0000, 15, 'h'},
++ { 'y', 0xa0000000, 5, 'a'},
++ { 'y', 0xa8000000, 7, '\''},
++ { 'y', 0xaa000000, 7, 'b'},
++ { 'y', 0xac000000, 8, 'w'},
++ { 'y', 0xad000000, 8, 'e'},
++ { 'y', 0xae000000, 7, '.'},
++ { 'y', 0xb0000000, 5, 'l'},
++ { 'y', 0xb8000000, 5, ':'},
++ { 'y', 0xc0000000, 8, STOP},
++ { 'z', 0x00000000, 2, 'z'},
++ { 'z', 0x40000000, 2, STOP},
++ { 'z', 0x80000000, 4, 'y'},
++ { 'z', 0x90000000, 4, 'e'},
++ { 'z', 0xa0000000, 3, 'i'},
++ { 'z', 0xd0000000, 4, ' '},
++ { 'z', 0xe0000000, 4, 'l'},
++ { 'z', 0xf0000000, 5, 'a'},
++ { 'z', 0xf8000000, 6, 'o'},
++ { 'z', 0xfc000000, 8, 'm'}
++};
++
++
++/*
++ * This table was derived from on-air transmissions. It certainly has omissions and
++ * almost certainly contains errors. Use entirely at your own risk.
++ */
++
++static struct hufftab fsat_huffman2[] =
++{
++ { START, 0x00000000, 5, 'H'},
++ { START, 0x08000000, 6, 'O'},
++ { START, 0x0c000000, 7, 'K'},
++ { START, 0x0e000000, 8, '2'},
++ { START, 0x0f000000, 9, 'Q'},
++ { START, 0x0f800000, 10, '9'},
++ { START, 0x0fc00000, 10, '8'},
++ { START, 0x10000000, 4, 'J'},
++ { START, 0x20000000, 5, 'I'},
++ { START, 0x28000000, 5, 'R'},
++ { START, 0x30000000, 4, 'D'},
++ { START, 0x40000000, 3, 'A'},
++ { START, 0x62000000, 8, 'U'},
++ { START, 0x63000000, 8, '('},
++ { START, 0x64000000, 6, '['},
++ { START, 0x68000000, 5, 'F'},
++ { START, 0x70000000, 5, '.'},
++ { START, 0x78000000, 5, 'W'},
++ { START, 0x80000000, 3, 'C'},
++ { START, 0xa0000000, 4, 'S'},
++ { START, 0xb0000000, 8, '1'},
++ { START, 0xb1000000, 9, '3'},
++ { START, 0xb1800000, 10, '6'},
++ { START, 0xb1c00000, 10, '5'},
++ { START, 0xb2000000, 10, 'Z'},
++ { START, 0xb2400000, 10, '7'},
++ { START, 0xb2800000, 10, '4'},
++ { START, 0xb2f00000, 12, ' '},
++ { START, 0xb3000000, 8, 'V'},
++ { START, 0xb4000000, 6, 'L'},
++ { START, 0xb8000000, 5, 'M'},
++ { START, 0xc0000000, 5, 'B'},
++ { START, 0xc8000000, 5, 'P'},
++ { START, 0xd0000000, 7, 'Y'},
++ { START, 0xd2000000, 7, 'G'},
++ { START, 0xd4000000, 6, 'E'},
++ { START, 0xd8000000, 5, 'N'},
++ { START, 0xe0000000, 3, 'T'},
++ { ' ', 0x00000000, 6, 'A'},
++ { ' ', 0x04000000, 8, 'k'},
++ { ' ', 0x05000000, 8, 'O'},
++ { ' ', 0x06000000, 7, 'v'},
++ { ' ', 0x08000000, 7, 'G'},
++ { ' ', 0x0a000000, 7, 'N'},
++ { ' ', 0x0c000000, 6, 'M'},
++ { ' ', 0x10000000, 4, 'o'},
++ { ' ', 0x20000000, 4, 's'},
++ { ' ', 0x30000000, 5, 'd'},
++ { ' ', 0x38000000, 10, '3'},
++ { ' ', 0x38400000, 10, '8'},
++ { ' ', 0x38800000, 10, '6'},
++ { ' ', 0x38c00000, 11, '0'},
++ { ' ', 0x38e60000, 15, '$'},
++ { ' ', 0x38f00000, 12, 'X'},
++ { ' ', 0x39000000, 9, 'q'},
++ { ' ', 0x39800000, 9, 'U'},
++ { ' ', 0x3a000000, 7, 'y'},
++ { ' ', 0x3c000000, 6, 'e'},
++ { ' ', 0x40000000, 3, 'a'},
++ { ' ', 0x60000000, 5, '['},
++ { ' ', 0x68000000, 8, '-'},
++ { ' ', 0x69000000, 9, 'V'},
++ { ' ', 0x69800000, 11, '\''},
++ { ' ', 0x69a00000, 11, '9'},
++ { ' ', 0x69c00000, 10, '5'},
++ { ' ', 0x6a000000, 7, 'H'},
++ { ' ', 0x6c000000, 9, 'Y'},
++ { ' ', 0x6c800000, 9, ' '},
++ { ' ', 0x6d000000, 8, '1'},
++ { ' ', 0x6e000000, 7, 'L'},
++ { ' ', 0x70000000, 6, 'B'},
++ { ' ', 0x74000000, 6, 'C'},
++ { ' ', 0x78000000, 5, 'p'},
++ { ' ', 0x80000000, 3, 't'},
++ { ' ', 0xa0000000, 6, 'T'},
++ { ' ', 0xa4000000, 7, 'J'},
++ { ' ', 0xa6000000, 7, 'F'},
++ { ' ', 0xa8000000, 5, 'b'},
++ { ' ', 0xb0000000, 10, '('},
++ { ' ', 0xb0400000, 11, 'Z'},
++ { ' ', 0xb0600000, 13, ESCAPE},
++ { ' ', 0xb0680000, 13, '.'},
++ { ' ', 0xb0700000, 13, '&'},
++ { ' ', 0xb0780000, 14, '"'},
++ { ' ', 0xb07c0000, 14, 'z'},
++ { ' ', 0xb0800000, 9, '2'},
++ { ' ', 0xb1000000, 8, 'K'},
++ { ' ', 0xb2000000, 7, 'R'},
++ { ' ', 0xb4000000, 6, 'S'},
++ { ' ', 0xb8000000, 6, 'g'},
++ { ' ', 0xbc000000, 7, 'u'},
++ { ' ', 0xbe000000, 8, 'j'},
++ { ' ', 0xbf000000, 10, STOP},
++ { ' ', 0xbf800000, 10, '7'},
++ { ' ', 0xbfc00000, 11, '4'},
++ { ' ', 0xbfe00000, 11, 'Q'},
++ { ' ', 0xc0000000, 6, 'r'},
++ { ' ', 0xc4000000, 7, 'D'},
++ { ' ', 0xc6000000, 7, 'W'},
++ { ' ', 0xc8000000, 5, 'c'},
++ { ' ', 0xd0000000, 5, 'h'},
++ { ' ', 0xd8000000, 6, 'n'},
++ { ' ', 0xdc000000, 6, 'l'},
++ { ' ', 0xe0000000, 5, 'w'},
++ { ' ', 0xe8000000, 5, 'i'},
++ { ' ', 0xf0000000, 8, 'I'},
++ { ' ', 0xf1000000, 8, 'E'},
++ { ' ', 0xf2000000, 7, 'P'},
++ { ' ', 0xf4000000, 6, 'm'},
++ { ' ', 0xf8000000, 5, 'f'},
++ { '!', 0x00000000, 4, ':'},
++ { '!', 0x11c00000, 10, '?'},
++ { '!', 0x40000000, 2, STOP},
++ { '!', 0x80000000, 1, ' '},
++ { '"', 0x20000000, 3, '.'},
++ { '"', 0x90000000, 6, 'm'},
++ { '"', 0x9e000000, 8, 'P'},
++ { '"', 0x9f000000, 10, ESCAPE},
++ { '"', 0xac000000, 6, 'I'},
++ { '"', 0xb0000000, 7, 'c'},
++ { '"', 0xb4000000, 8, 'r'},
++ { '"', 0xc0000000, 2, ' '},
++ { '$', 0x00000000, 1, '1'},
++ { '$', 0xb0000000, 4, '2'},
++ { '$', 0xde000000, 9, '3'},
++ { '%', 0x80000000, 1, ' '},
++ { '&', 0x00000000, 4, 'E'},
++ { '&', 0x16000000, 9, ESCAPE},
++ { '&', 0x18000000, 6, 'A'},
++ { '&', 0x20000000, 3, 'B'},
++ { '&', 0x40000000, 2, 'w'},
++ { '&', 0x80000000, 1, ' '},
++ { '(', 0x00000000, 3, 'P'},
++ { '(', 0x23000000, 8, 'E'},
++ { '(', 0x24000000, 6, 'a'},
++ { '(', 0x28000000, 6, 'S'},
++ { '(', 0x2c000000, 7, 'D'},
++ { '(', 0x2e000000, 8, 'W'},
++ { '(', 0x2f000000, 10, '4'},
++ { '(', 0x30000000, 6, 'R'},
++ { '(', 0x34800000, 10, '3'},
++ { '(', 0x35a00000, 13, ESCAPE},
++ { '(', 0x35a80000, 13, 'u'},
++ { '(', 0x35b00000, 12, 'O'},
++ { '(', 0x36000000, 7, 'K'},
++ { '(', 0x38000000, 5, 'T'},
++ { '(', 0x40000000, 2, '1'},
++ { '(', 0x80000000, 4, '2'},
++ { '(', 0x9c000000, 6, 'e'},
++ { '(', 0xa0000000, 3, 't'},
++ { '(', 0xc2000000, 9, 'w'},
++ { '(', 0xc2800000, 9, 'B'},
++ { '(', 0xc3000000, 8, 'g'},
++ { '(', 0xc4000000, 7, 'G'},
++ { '(', 0xc8000000, 7, 'M'},
++ { '(', 0xca000000, 7, 'H'},
++ { '(', 0xcc000000, 7, 'C'},
++ { '(', 0xd0000000, 4, '5'},
++ { '(', 0xe0000000, 4, 'N'},
++ { '(', 0xf0000000, 6, 'J'},
++ { '(', 0xf4000000, 6, 'A'},
++ { ')', 0x00000000, 1, ' '},
++ { ')', 0x80000000, 5, ':'},
++ { ')', 0x8c000000, 6, ';'},
++ { ')', 0x90000000, 4, ','},
++ { ')', 0xc0000000, 2, '.'},
++ { '+', 0x40000000, 2, ' '},
++ { ',', 0x20000000, 3, '0'},
++ { ',', 0x40000000, 2, 'S'},
++ { ',', 0x80000000, 1, ' '},
++ { '-', 0x00000000, 2, ' '},
++ { '-', 0x40000000, 4, 't'},
++ { '-', 0x50000000, 4, 'b'},
++ { '-', 0x60000000, 4, 'w'},
++ { '-', 0x70000000, 4, 'u'},
++ { '-', 0x80000000, 5, 'c'},
++ { '-', 0x88000000, 6, '9'},
++ { '-', 0x8c000000, 7, 'S'},
++ { '-', 0x8e000000, 8, 'C'},
++ { '-', 0x8f000000, 10, 'F'},
++ { '-', 0x8f480000, 13, '0'},
++ { '-', 0x8f600000, 11, 'K'},
++ { '-', 0x8f800000, 9, 'H'},
++ { '-', 0x90000000, 4, 'o'},
++ { '-', 0xa0000000, 4, 's'},
++ { '-', 0xb0000000, 4, 'f'},
++ { '-', 0xc0000000, 6, 'h'},
++ { '-', 0xc4000000, 9, 'A'},
++ { '-', 0xc4800000, 10, 'j'},
++ { '-', 0xc4c00000, 10, 'P'},
++ { '-', 0xc5000000, 8, 'W'},
++ { '-', 0xc6000000, 9, '6'},
++ { '-', 0xc6800000, 9, 'B'},
++ { '-', 0xc7000000, 8, 'g'},
++ { '-', 0xc8000000, 6, '1'},
++ { '-', 0xcc000000, 6, 'y'},
++ { '-', 0xd0000000, 7, 'e'},
++ { '-', 0xd2000000, 7, 'i'},
++ { '-', 0xd4000000, 6, 'r'},
++ { '-', 0xd8000000, 5, 'l'},
++ { '-', 0xe0000000, 6, 'a'},
++ { '-', 0xe4000000, 11, 'v'},
++ { '-', 0xe4200000, 11, 'Z'},
++ { '-', 0xe4800000, 10, '5'},
++ { '-', 0xe4c00000, 10, 'T'},
++ { '-', 0xe5000000, 8, 'J'},
++ { '-', 0xe6000000, 8, 'D'},
++ { '-', 0xe7000000, 16, '\''},
++ { '-', 0xe7080000, 14, '3'},
++ { '-', 0xe70c0000, 14, '8'},
++ { '-', 0xe7400000, 10, 'I'},
++ { '-', 0xe7800000, 9, 'M'},
++ { '-', 0xe8000000, 5, 'd'},
++ { '-', 0xf0000000, 6, 'm'},
++ { '-', 0xf4000000, 9, 'E'},
++ { '-', 0xf4800000, 9, 'L'},
++ { '-', 0xf5000000, 8, '2'},
++ { '-', 0xf6000000, 7, 'n'},
++ { '-', 0xf8000000, 6, 'p'},
++ { '-', 0xfc000000, 8, '7'},
++ { '-', 0xfd000000, 9, 'U'},
++ { '-', 0xfd800000, 9, 'k'},
++ { '-', 0xfe000000, 8, 'G'},
++ { '-', 0xff000000, 8, 'O'},
++ { '.', 0x00000000, 7, 'a'},
++ { '.', 0x02000000, 7, '['},
++ { '.', 0x04000000, 6, 'u'},
++ { '.', 0x08000000, 8, '4'},
++ { '.', 0x09000000, 10, 'N'},
++ { '.', 0x09400000, 12, 'E'},
++ { '.', 0x09500000, 12, ':'},
++ { '.', 0x09600000, 15, '?'},
++ { '.', 0x09700000, 13, 'K'},
++ { '.', 0x09780000, 13, 'Y'},
++ { '.', 0x09800000, 10, 't'},
++ { '.', 0x0a000000, 9, '5'},
++ { '.', 0x0b000000, 11, 'r'},
++ { '.', 0x0b300000, 14, '"'},
++ { '.', 0x0b360000, 17, 'd'},
++ { '.', 0x0b368000, 18, ESCAPE},
++ { '.', 0x0b370000, 16, 'k'},
++ { '.', 0x0b380000, 13, 'O'},
++ { '.', 0x0b400000, 10, 'R'},
++ { '.', 0x0c000000, 9, 'T'},
++ { '.', 0x0d000000, 9, 'M'},
++ { '.', 0x0dc00000, 10, 'P'},
++ { '.', 0x0e000000, 8, 'H'},
++ { '.', 0x0f000000, 9, 'C'},
++ { '.', 0x0f800000, 9, '2'},
++ { '.', 0x10000000, 5, 'i'},
++ { '.', 0x18000000, 8, 'S'},
++ { '.', 0x19000000, 8, 'W'},
++ { '.', 0x1a000000, 7, '3'},
++ { '.', 0x1c000000, 8, 'o'},
++ { '.', 0x1d800000, 9, 'D'},
++ { '.', 0x1e000000, 8, '1'},
++ { '.', 0x1f000000, 9, 'B'},
++ { '.', 0x1f800000, 12, '\''},
++ { '.', 0x1f980000, 13, '('},
++ { '.', 0x1fa00000, 11, 'G'},
++ { '.', 0x1fc00000, 10, 'I'},
++ { '.', 0x20000000, 5, '0'},
++ { '.', 0x28000000, 5, 'c'},
++ { '.', 0x30000000, 4, '.'},
++ { '.', 0x40000000, 4, STOP},
++ { '.', 0x80000000, 1, ' '},
++ { '/', 0x00000000, 4, '5'},
++ { '/', 0x10000000, 5, 'T'},
++ { '/', 0x20000000, 4, '8'},
++ { '/', 0x30000000, 5, 'B'},
++ { '/', 0x38000000, 5, '2'},
++ { '/', 0x45e80000, 13, 'c'},
++ { '/', 0x54800000, 9, 'U'},
++ { '/', 0x80000000, 7, 'F'},
++ { '/', 0x82000000, 11, 'v'},
++ { '/', 0x82400000, 10, 'J'},
++ { '/', 0x82a00000, 12, 'l'},
++ { '/', 0x82c00000, 10, '9'},
++ { '/', 0x83000000, 8, 'm'},
++ { '/', 0x84000000, 7, 's'},
++ { '/', 0x86000000, 7, 'M'},
++ { '/', 0x88000000, 5, '3'},
++ { '/', 0x90000000, 5, '7'},
++ { '/', 0x98000000, 7, 'H'},
++ { '/', 0x9a000000, 8, 'W'},
++ { '/', 0x9b000000, 9, 'L'},
++ { '/', 0x9b800000, 12, 'V'},
++ { '/', 0x9b900000, 14, ESCAPE},
++ { '/', 0x9c000000, 7, 'D'},
++ { '/', 0x9e000000, 7, 'A'},
++ { '/', 0xa0000000, 5, '6'},
++ { '/', 0xa8000000, 8, 'G'},
++ { '/', 0xaa000000, 7, 'S'},
++ { '/', 0xac000000, 8, 'd'},
++ { '/', 0xae000000, 8, 'N'},
++ { '/', 0xaf800000, 9, 'I'},
++ { '/', 0xb0000000, 5, 'a'},
++ { '/', 0xb8000000, 9, 'E'},
++ { '/', 0xb8800000, 9, 'R'},
++ { '/', 0xb9000000, 8, 'C'},
++ { '/', 0xba000000, 9, 'K'},
++ { '/', 0xbb000000, 8, 'P'},
++ { '/', 0xbc000000, 6, '4'},
++ { '/', 0xc0000000, 3, '1'},
++ { '0', 0x00000000, 1, '0'},
++ { '0', 0x80000000, 6, '4'},
++ { '0', 0x84000000, 6, 't'},
++ { '0', 0x88000000, 5, 's'},
++ { '0', 0x90000000, 4, 'a'},
++ { '0', 0xa0000000, 7, '3'},
++ { '0', 0xa2000000, 7, '7'},
++ { '0', 0xa4000000, 6, '5'},
++ { '0', 0xa8000000, 8, ')'},
++ { '0', 0xa9000000, 8, '/'},
++ { '0', 0xaa000000, 7, ']'},
++ { '0', 0xac000000, 7, '-'},
++ { '0', 0xae000000, 7, '1'},
++ { '0', 0xb0000000, 4, 'p'},
++ { '0', 0xc0000000, 5, '.'},
++ { '0', 0xc8000000, 5, '8'},
++ { '0', 0xd0000000, 6, '6'},
++ { '0', 0xd4000000, 8, STOP},
++ { '0', 0xd5000000, 8, '9'},
++ { '0', 0xd6000000, 9, '%'},
++ { '0', 0xd6800000, 10, ':'},
++ { '0', 0xd6e80000, 14, 'k'},
++ { '0', 0xd6f00000, 12, 'm'},
++ { '0', 0xd7000000, 8, '2'},
++ { '0', 0xd8000000, 5, ','},
++ { '0', 0xe0000000, 3, ' '},
++ { '1', 0x00000000, 2, '9'},
++ { '1', 0x40000000, 5, '6'},
++ { '1', 0x48000000, 5, '8'},
++ { '1', 0x50000000, 4, ' '},
++ { '1', 0x60000000, 7, STOP},
++ { '1', 0x62000000, 7, '-'},
++ { '1', 0x64000000, 6, '7'},
++ { '1', 0x68000000, 5, '/'},
++ { '1', 0x70000000, 4, '2'},
++ { '1', 0x80000000, 3, '1'},
++ { '1', 0xa0000000, 5, ']'},
++ { '1', 0xa8000000, 7, ')'},
++ { '1', 0xaa000000, 8, '\''},
++ { '1', 0xab000000, 9, 'X'},
++ { '1', 0xabc00000, 11, 't'},
++ { '1', 0xabe00000, 11, 'R'},
++ { '1', 0xac000000, 7, ':'},
++ { '1', 0xae000000, 7, 's'},
++ { '1', 0xb0000000, 4, '.'},
++ { '1', 0xc0000000, 4, '5'},
++ { '1', 0xd0000000, 5, '3'},
++ { '1', 0xd8000000, 6, '4'},
++ { '1', 0xdc000000, 7, ','},
++ { '1', 0xde000000, 7, 'x'},
++ { '1', 0xe0000000, 3, '0'},
++ { '2', 0x00000000, 3, ' '},
++ { '2', 0x20000000, 5, ']'},
++ { '2', 0x30000000, 4, '/'},
++ { '2', 0x40000000, 3, '.'},
++ { '2', 0x60000000, 6, '6'},
++ { '2', 0x64000000, 6, '2'},
++ { '2', 0x68000000, 5, '1'},
++ { '2', 0x70000000, 6, ':'},
++ { '2', 0x74000000, 6, '-'},
++ { '2', 0x79000000, 8, '3'},
++ { '2', 0x7a000000, 8, 't'},
++ { '2', 0x7c000000, 6, ')'},
++ { '2', 0x80000000, 3, '5'},
++ { '2', 0xa2000000, 8, 'n'},
++ { '2', 0xa3000000, 9, 'a'},
++ { '2', 0xa3800000, 10, '\''},
++ { '2', 0xa3d00000, 13, '"'},
++ { '2', 0xa3de0000, 15, 'L'},
++ { '2', 0xa4000000, 7, '8'},
++ { '2', 0xa6000000, 7, '9'},
++ { '2', 0xa8000000, 5, '4'},
++ { '2', 0xb0000000, 4, ','},
++ { '2', 0xc0000000, 2, '0'},
++ { '3', 0x00000000, 2, ' '},
++ { '3', 0x40000000, 5, '2'},
++ { '3', 0x4cda0000, 15, 'm'},
++ { '3', 0x50000000, 5, ')'},
++ { '3', 0x58000000, 6, 'D'},
++ { '3', 0x5c000000, 7, '7'},
++ { '3', 0x5e000000, 7, '3'},
++ { '3', 0x60000000, 5, ':'},
++ { '3', 0x68000000, 6, '4'},
++ { '3', 0x70000000, 5, '-'},
++ { '3', 0x78980000, 14, ESCAPE},
++ { '3', 0x7a000000, 7, '6'},
++ { '3', 0x7c000000, 6, '5'},
++ { '3', 0x80000000, 2, '0'},
++ { '3', 0xc0000000, 3, '.'},
++ { '3', 0xe0000000, 4, '/'},
++ { '3', 0xf0000000, 6, ','},
++ { '3', 0xf4000000, 8, '8'},
++ { '3', 0xf5000000, 9, '9'},
++ { '3', 0xf5800000, 10, 'r'},
++ { '3', 0xf6000000, 7, 't'},
++ { '3', 0xf8000000, 5, ']'},
++ { '4', 0x00000000, 3, '4'},
++ { '4', 0x20000000, 4, '/'},
++ { '4', 0x30000000, 5, '1'},
++ { '4', 0x38000000, 6, '2'},
++ { '4', 0x3c000000, 7, ':'},
++ { '4', 0x40000000, 2, ' '},
++ { '4', 0x80000000, 3, '.'},
++ { '4', 0xa0000000, 4, '5'},
++ { '4', 0xb0000000, 4, '-'},
++ { '4', 0xc0000000, 3, '0'},
++ { '4', 0xe0000000, 7, 't'},
++ { '4', 0xe2000000, 7, '3'},
++ { '4', 0xe4000000, 6, '8'},
++ { '4', 0xe8000000, 5, ']'},
++ { '4', 0xf0000000, 5, ','},
++ { '4', 0xf8000000, 6, ')'},
++ { '4', 0xfc000000, 10, '9'},
++ { '4', 0xfc800000, 10, '7'},
++ { '4', 0xfce40000, 15, ESCAPE},
++ { '4', 0xfd000000, 8, '6'},
++ { '5', 0x00000000, 2, '0'},
++ { '5', 0x40000000, 3, '.'},
++ { '5', 0x60000000, 5, '/'},
++ { '5', 0x68000000, 6, '3'},
++ { '5', 0x6c000000, 7, ':'},
++ { '5', 0x6e000000, 8, '4'},
++ { '5', 0x6f200000, 11, ';'},
++ { '5', 0x6f440000, 14, 'f'},
++ { '5', 0x6fc00000, 10, '1'},
++ { '5', 0x70000000, 4, 'p'},
++ { '5', 0x80000000, 2, ' '},
++ { '5', 0xc0000000, 4, '5'},
++ { '5', 0xd0000000, 5, 'a'},
++ { '5', 0xd8000000, 5, '-'},
++ { '5', 0xe0000000, 7, ')'},
++ { '5', 0xe6000000, 7, ','},
++ { '5', 0xe8000000, 5, '6'},
++ { '5', 0xf0000000, 6, '2'},
++ { '5', 0xf4000000, 7, '7'},
++ { '5', 0xf6000000, 7, '9'},
++ { '5', 0xf8000000, 6, '8'},
++ { '5', 0xfc000000, 6, ']'},
++ { '6', 0x00000000, 2, ' '},
++ { '6', 0x40000000, 7, '6'},
++ { '6', 0x44000000, 6, '-'},
++ { '6', 0x48000000, 5, '1'},
++ { '6', 0x50000000, 4, ']'},
++ { '6', 0x60000000, 5, '7'},
++ { '6', 0x68000000, 6, '5'},
++ { '6', 0x6c000000, 6, '4'},
++ { '6', 0x70000000, 5, ')'},
++ { '6', 0x78000000, 7, '3'},
++ { '6', 0x7a000000, 7, '2'},
++ { '6', 0x7c000000, 6, '8'},
++ { '6', 0x80000000, 2, '.'},
++ { '6', 0xc0000000, 5, ','},
++ { '6', 0xc8000000, 5, ':'},
++ { '6', 0xd0000000, 5, '/'},
++ { '6', 0xd9fc0000, 15, ESCAPE},
++ { '6', 0xda000000, 7, '9'},
++ { '6', 0xdc000000, 6, 't'},
++ { '6', 0xe0000000, 3, '0'},
++ { '7', 0x00000000, 4, '8'},
++ { '7', 0x10000000, 8, STOP},
++ { '7', 0x11200000, 13, ESCAPE},
++ { '7', 0x11d00000, 12, '?'},
++ { '7', 0x12000000, 7, '3'},
++ { '7', 0x14000000, 6, '6'},
++ { '7', 0x18000000, 6, '2'},
++ { '7', 0x1c000000, 6, '1'},
++ { '7', 0x20000000, 3, ' '},
++ { '7', 0x40000000, 4, '7'},
++ { '7', 0x50000000, 5, '/'},
++ { '7', 0x58000000, 8, ':'},
++ { '7', 0x59000000, 8, 'p'},
++ { '7', 0x5a000000, 7, ','},
++ { '7', 0x5c000000, 6, 't'},
++ { '7', 0x60000000, 3, '0'},
++ { '7', 0x80000000, 6, '9'},
++ { '7', 0x84000000, 7, 'a'},
++ { '7', 0x86000000, 7, '4'},
++ { '7', 0x88000000, 6, ')'},
++ { '7', 0x90000000, 4, ']'},
++ { '7', 0xa0000000, 3, '-'},
++ { '7', 0xc0000000, 2, '.'},
++ { '8', 0x00000000, 3, '4'},
++ { '8', 0x20000000, 5, '/'},
++ { '8', 0x28000000, 7, ':'},
++ { '8', 0x2a000000, 7, ','},
++ { '8', 0x2c000000, 8, 'p'},
++ { '8', 0x2d000000, 8, '-'},
++ { '8', 0x2e100000, 12, '\''},
++ { '8', 0x2e800000, 9, STOP},
++ { '8', 0x2f000000, 8, 'a'},
++ { '8', 0x30000000, 4, '0'},
++ { '8', 0x40000000, 2, ' '},
++ { '8', 0x80000000, 4, '9'},
++ { '8', 0x90000000, 4, '7'},
++ { '8', 0xa0000000, 5, '3'},
++ { '8', 0xa8000000, 6, ')'},
++ { '8', 0xad000000, 8, '2'},
++ { '8', 0xae000000, 7, 't'},
++ { '8', 0xb0000000, 4, '8'},
++ { '8', 0xc0000000, 3, '.'},
++ { '8', 0xe0000000, 4, '1'},
++ { '8', 0xf0000000, 5, '5'},
++ { '8', 0xf8000000, 6, '6'},
++ { '8', 0xfc000000, 6, ']'},
++ { '9', 0x00000000, 3, '5'},
++ { '9', 0x20000000, 3, ']'},
++ { '9', 0x40000000, 5, '2'},
++ { '9', 0x48000000, 6, '1'},
++ { '9', 0x4c000000, 6, '/'},
++ { '9', 0x50000000, 4, '0'},
++ { '9', 0x60000000, 4, '.'},
++ { '9', 0x70000000, 4, '-'},
++ { '9', 0x80000000, 4, '4'},
++ { '9', 0x90000000, 4, '8'},
++ { '9', 0xa0000000, 5, '3'},
++ { '9', 0xa8000000, 6, 't'},
++ { '9', 0xac000000, 8, ':'},
++ { '9', 0xad000000, 9, ','},
++ { '9', 0xadd80000, 15, ESCAPE},
++ { '9', 0xae000000, 7, ')'},
++ { '9', 0xb0000000, 4, '6'},
++ { '9', 0xc0000000, 4, ' '},
++ { '9', 0xd0000000, 4, '7'},
++ { '9', 0xe0000000, 3, '9'},
++ { ':', 0x40000000, 2, '0'},
++ { ':', 0x80000000, 1, ' '},
++ { ';', 0x80000000, 1, ' '},
++ { '=', 0x80000000, 1, ESCAPE},
++ { '?', 0x00000000, 3, ':'},
++ { '?', 0x20000000, 5, '!'},
++ { '?', 0x28000000, 6, ';'},
++ { '?', 0x2c000000, 7, '\''},
++ { '?', 0x40000000, 2, STOP},
++ { '?', 0x80000000, 1, ' '},
++ { '@', 0xd0000000, 4, 'b'},
++ { 'A', 0x00000000, 4, 's'},
++ { 'A', 0x10000000, 4, 'm'},
++ { 'A', 0x20000000, 4, 'd'},
++ { 'A', 0x30000000, 5, 'c'},
++ { 'A', 0x38000000, 10, 'C'},
++ { 'A', 0x38400000, 11, 'P'},
++ { 'A', 0x38700000, 12, 'K'},
++ { 'A', 0x38800000, 10, ','},
++ { 'A', 0x38c00000, 11, '-'},
++ { 'A', 0x39c80000, 13, 'W'},
++ { 'A', 0x39d00000, 12, 'M'},
++ { 'A', 0x39ef8000, 18, ESCAPE},
++ { 'A', 0x39f00000, 12, 'Y'},
++ { 'A', 0x3ac00000, 11, 'A'},
++ { 'A', 0x38f00000, 12, '&'},
++ { 'A', 0x39000000, 9, 'h'},
++ { 'A', 0x39800000, 10, 'y'},
++ { 'A', 0x3a000000, 9, '.'},
++ { 'A', 0x3a800000, 10, 'S'},
++ { 'A', 0x3b000000, 10, 'k'},
++ { 'A', 0x3b400000, 10, 'T'},
++ { 'A', 0x3b800000, 9, 'B'},
++ { 'A', 0x3c000000, 6, 'b'},
++ { 'A', 0x40000000, 2, ' '},
++ { 'A', 0x80000000, 4, 'r'},
++ { 'A', 0x90000000, 5, 'u'},
++ { 'A', 0x98100000, 13, '\''},
++ { 'A', 0x98180000, 13, ':'},
++ { 'A', 0x98800000, 10, 'F'},
++ { 'A', 0x98c00000, 10, 'z'},
++ { 'A', 0x99000000, 8, 'v'},
++ { 'A', 0x9a000000, 9, 'q'},
++ { 'A', 0x9aa00000, 11, 'x'},
++ { 'A', 0x9ac00000, 10, 'a'},
++ { 'A', 0x9b000000, 8, 'p'},
++ { 'A', 0x9c000000, 6, 't'},
++ { 'A', 0xa0000000, 5, 'g'},
++ { 'A', 0xa8000000, 7, 'w'},
++ { 'A', 0xaa000000, 7, 'i'},
++ { 'A', 0xac000000, 6, 'f'},
++ { 'A', 0xb0000000, 4, 'l'},
++ { 'A', 0xc0000000, 3, 'D'},
++ { 'A', 0xe0000000, 3, 'n'},
++ { 'B', 0x00000000, 2, 'C'},
++ { 'B', 0x40000000, 3, 'a'},
++ { 'B', 0x60000000, 8, 'T'},
++ { 'B', 0x61000000, 8, '.'},
++ { 'B', 0x62000000, 9, 'A'},
++ { 'B', 0x62800000, 10, 'O'},
++ { 'B', 0x62e80000, 15, '-'},
++ { 'B', 0x62f00000, 12, 'W'},
++ { 'B', 0x63000000, 8, 'y'},
++ { 'B', 0x64000000, 8, 'I'},
++ { 'B', 0x65000000, 11, '&'},
++ { 'B', 0x65600000, 11, 'M'},
++ { 'B', 0x65940000, 15, 'S'},
++ { 'B', 0x65960000, 15, 'F'},
++ { 'B', 0x65a00000, 12, ','},
++ { 'B', 0x65b00000, 12, '1'},
++ { 'B', 0x65e00000, 12, ESCAPE},
++ { 'B', 0x65f00000, 12, 'P'},
++ { 'B', 0x66000000, 8, 'h'},
++ { 'B', 0x67000000, 8, ' '},
++ { 'B', 0x68000000, 5, 'l'},
++ { 'B', 0x70000000, 4, 'i'},
++ { 'B', 0x80000000, 4, 'u'},
++ { 'B', 0x90000000, 4, 'o'},
++ { 'B', 0xa0000000, 3, 'r'},
++ { 'B', 0xc0000000, 3, 'e'},
++ { 'B', 0xe0000000, 3, 'B'},
++ { 'C', 0x00000000, 2, 'h'},
++ { 'C', 0x40000000, 5, '\''},
++ { 'C', 0x48000000, 9, 'A'},
++ { 'C', 0x48b00000, 13, 'z'},
++ { 'C', 0x48b80000, 16, ':'},
++ { 'C', 0x48b90000, 17, ESCAPE},
++ { 'C', 0x49000000, 8, 'I'},
++ { 'C', 0x4a000000, 7, 'y'},
++ { 'C', 0x4c000000, 6, 'e'},
++ { 'C', 0x50000000, 4, 'r'},
++ { 'C', 0x60000000, 3, 'B'},
++ { 'C', 0x80000000, 3, 'a'},
++ { 'C', 0xa0000000, 4, '.'},
++ { 'C', 0xb0400000, 10, 'D'},
++ { 'C', 0xb0920000, 15, '7'},
++ { 'C', 0xb0b00000, 12, 'H'},
++ { 'C', 0xb1000000, 10, 'S'},
++ { 'C', 0xb1400000, 10, 'T'},
++ { 'C', 0xb1900000, 14, 'P'},
++ { 'C', 0xb1a00000, 11, 'J'},
++ { 'C', 0xb1c00000, 10, 'G'},
++ { 'C', 0xb2000000, 7, ','},
++ { 'C', 0xb4000000, 6, 'u'},
++ { 'C', 0xb8000000, 5, 'i'},
++ { 'C', 0xc0000000, 3, 'o'},
++ { 'C', 0xe0000000, 4, ' '},
++ { 'C', 0xf0000000, 4, 'l'},
++ { 'D', 0x00000000, 2, 'a'},
++ { 'D', 0x40000000, 2, ','},
++ { 'D', 0x80000000, 3, 'r'},
++ { 'D', 0xa0000000, 3, 'o'},
++ { 'D', 0xc0000000, 3, 'e'},
++ { 'D', 0xe0000000, 4, 'i'},
++ { 'D', 0xf0000000, 8, '.'},
++ { 'D', 0xf2000000, 7, ' '},
++ { 'D', 0xf4140000, 16, 'B'},
++ { 'D', 0xf4180000, 14, '9'},
++ { 'D', 0xf4200000, 11, 'M'},
++ { 'D', 0xf4400000, 11, '&'},
++ { 'D', 0xf4600000, 11, 'V'},
++ { 'D', 0xf4800000, 10, 'h'},
++ { 'D', 0xf4d00000, 12, 's'},
++ { 'D', 0xf4e80000, 13, 'j'},
++ { 'D', 0xf5000000, 9, 'w'},
++ { 'D', 0xf5800000, 9, 'W'},
++ { 'D', 0xf6000000, 7, '\''},
++ { 'D', 0xf8400000, 11, '-'},
++ { 'D', 0xf8600000, 11, 'G'},
++ { 'D', 0xf8800000, 9, 'N'},
++ { 'D', 0xf9000000, 9, 'C'},
++ { 'D', 0xf9c00000, 10, 'I'},
++ { 'D', 0xfa000000, 8, 'y'},
++ { 'D', 0xfb000000, 12, 'v'},
++ { 'D', 0xfb100000, 13, ESCAPE},
++ { 'D', 0xfb400000, 10, ':'},
++ { 'D', 0xfb800000, 9, 'J'},
++ { 'D', 0xfc000000, 6, 'u'},
++ { 'E', 0x00000000, 3, 'p'},
++ { 'E', 0x20000000, 5, 's'},
++ { 'E', 0x28000000, 6, '.'},
++ { 'E', 0x2c000000, 6, 'i'},
++ { 'E', 0x30000000, 5, 'r'},
++ { 'E', 0x38000000, 5, 'u'},
++ { 'E', 0x40000000, 3, 'a'},
++ { 'E', 0x60000000, 3, 'n'},
++ { 'E', 0x80000000, 5, 'E'},
++ { 'E', 0x88000000, 5, ' '},
++ { 'E', 0x90000000, 4, 'm'},
++ { 'E', 0xa0000000, 4, 'x'},
++ { 'E', 0xb0000000, 7, 'y'},
++ { 'E', 0xb2000000, 7, 't'},
++ { 'E', 0xb4000000, 6, ':'},
++ { 'E', 0xb8000000, 7, 'g'},
++ { 'E', 0xba040000, 14, 'S'},
++ { 'E', 0xba160000, 16, ESCAPE},
++ { 'E', 0xba400000, 11, 'f'},
++ { 'E', 0xba600000, 11, 'o'},
++ { 'E', 0xba800000, 10, 'R'},
++ { 'E', 0xbac00000, 10, 'F'},
++ { 'E', 0xbb000000, 9, 'w'},
++ { 'E', 0xbbc00000, 10, 'C'},
++ { 'E', 0xbe000000, 9, 'c'},
++ { 'E', 0xbea00000, 11, 'e'},
++ { 'E', 0xbef00000, 12, '\''},
++ { 'E', 0xbf000000, 9, 'b'},
++ { 'E', 0xbf800000, 11, 'h'},
++ { 'E', 0xbfe00000, 11, 'D'},
++ { 'E', 0xc0000000, 3, 'l'},
++ { 'E', 0xe0000000, 4, 'v'},
++ { 'E', 0xf0000000, 4, 'd'},
++ { 'F', 0x00000000, 2, 'o'},
++ { 'F', 0x40000000, 3, 'e'},
++ { 'F', 0x60000000, 4, 'l'},
++ { 'F', 0x70000000, 5, 'u'},
++ { 'F', 0x78000000, 7, ' '},
++ { 'F', 0x7a000000, 7, 'O'},
++ { 'F', 0x7c000000, 10, '.'},
++ { 'F', 0x7c900000, 13, 'y'},
++ { 'F', 0x7c980000, 13, ','},
++ { 'F', 0x7ca00000, 11, 'T'},
++ { 'F', 0x7d000000, 8, 'A'},
++ { 'F', 0x7ee80000, 14, 'I'},
++ { 'F', 0x7ef00000, 12, '1'},
++ { 'F', 0x7f000000, 8, 'B'},
++ { 'F', 0x80000000, 2, 'r'},
++ { 'F', 0xc0000000, 3, 'i'},
++ { 'F', 0xe0000000, 3, 'a'},
++ { 'G', 0x00000000, 2, 'r'},
++ { 'G', 0x40000000, 2, 'a'},
++ { 'G', 0x84800000, 11, ';'},
++ { 'G', 0x84000000, 9, '-'},
++ { 'G', 0x84a00000, 11, ','},
++ { 'G', 0x84c00000, 11, 'A'},
++ { 'G', 0x86000000, 9, 'C'},
++ { 'G', 0x86d60000, 15, '\''},
++ { 'G', 0x87000000, 8, 'P'},
++ { 'G', 0x88000000, 5, 'n'},
++ { 'G', 0x90000000, 4, 'u'},
++ { 'G', 0xa0000000, 3, 'o'},
++ { 'G', 0xc0000000, 3, 'e'},
++ { 'G', 0xe0000000, 7, 'y'},
++ { 'G', 0xe2000000, 7, ' '},
++ { 'G', 0xe4000000, 10, '.'},
++ { 'G', 0xe4400000, 10, 'I'},
++ { 'G', 0xe5000000, 8, 'h'},
++ { 'G', 0xe6000000, 7, 'w'},
++ { 'G', 0xe8000000, 5, 'l'},
++ { 'G', 0xf0000000, 4, 'i'},
++ { 'H', 0x00000000, 2, 'e'},
++ { 'H', 0x40000000, 2, 'a'},
++ { 'H', 0x80000000, 2, 'o'},
++ { 'H', 0xc0000000, 3, 'i'},
++ { 'H', 0xe0000000, 5, 'R'},
++ { 'H', 0xea000000, 10, 'S'},
++ { 'H', 0xea400000, 10, '.'},
++ { 'H', 0xea8c0000, 15, 'D'},
++ { 'H', 0xea8e0000, 16, ESCAPE},
++ { 'H', 0xeaa00000, 11, 'G'},
++ { 'H', 0xeb000000, 8, 'I'},
++ { 'H', 0xec000000, 7, 'y'},
++ { 'H', 0xee000000, 9, 'Q'},
++ { 'H', 0xee800000, 9, 'M'},
++ { 'H', 0xef800000, 9, ' '},
++ { 'H', 0xf0000000, 4, 'u'},
++ { 'I', 0x00000000, 1, 'n'},
++ { 'I', 0x80000000, 5, 'T'},
++ { 'I', 0x88000000, 6, 'c'},
++ { 'I', 0x8d000000, 9, 'P'},
++ { 'I', 0x8da00000, 11, '5'},
++ { 'I', 0x8e000000, 7, '\''},
++ { 'I', 0x90000000, 4, 's'},
++ { 'I', 0xa0000000, 8, 'A'},
++ { 'I', 0xa1000000, 8, 'v'},
++ { 'I', 0xa2000000, 9, 'w'},
++ { 'I', 0xa2a00000, 11, '9'},
++ { 'I', 0xa2c00000, 10, 'y'},
++ { 'I', 0xa3000000, 9, ':'},
++ { 'I', 0xa3d00000, 12, ')'},
++ { 'I', 0xa4000000, 6, 'm'},
++ { 'I', 0xa8000000, 5, 'a'},
++ { 'I', 0xb4000000, 6, '.'},
++ { 'I', 0xb8000000, 9, 'p'},
++ { 'I', 0xb8800000, 11, 'b'},
++ { 'I', 0xb8c00000, 11, '-'},
++ { 'I', 0xb9000000, 8, 'V'},
++ { 'I', 0xba000000, 7, 'l'},
++ { 'I', 0xbc000000, 6, 'd'},
++ { 'I', 0xc0000000, 3, 't'},
++ { 'I', 0xe0000000, 5, ' '},
++ { 'I', 0xe8800000, 9, ','},
++ { 'I', 0xe9000000, 8, 'f'},
++ { 'I', 0xea000000, 10, 'g'},
++ { 'I', 0xea400000, 10, 'D'},
++ { 'I', 0xea800000, 9, 'Y'},
++ { 'I', 0xeb000000, 8, 'o'},
++ { 'I', 0xec000000, 6, 'I'},
++ { 'I', 0xf0000000, 4, 'r'},
++ { 'J', 0x00000000, 2, 'e'},
++ { 'J', 0x40000000, 5, ' '},
++ { 'J', 0x48c00000, 10, ','},
++ { 'J', 0x49000000, 8, 'r'},
++ { 'J', 0x4a400000, 10, '-'},
++ { 'J', 0x4ac00000, 11, 'n'},
++ { 'J', 0x4aec0000, 15, ESCAPE},
++ { 'J', 0x4af80000, 13, '\''},
++ { 'J', 0x4b000000, 9, 's'},
++ { 'J', 0x4b800000, 10, 'K'},
++ { 'J', 0x4bc00000, 10, 'T'},
++ { 'J', 0x4c000000, 7, 'D'},
++ { 'J', 0x4e000000, 7, '.'},
++ { 'J', 0x50000000, 4, 'i'},
++ { 'J', 0x60000000, 3, 'u'},
++ { 'J', 0x80000000, 2, 'a'},
++ { 'J', 0xc0000000, 2, 'o'},
++ { 'K', 0x00000000, 2, 'i'},
++ { 'K', 0x40000000, 2, 'a'},
++ { 'K', 0x80000000, 2, 'e'},
++ { 'K', 0xc0000000, 5, 'n'},
++ { 'K', 0xc8000000, 5, 'o'},
++ { 'K', 0xd0000000, 6, '\''},
++ { 'K', 0xd4e00000, 12, '-'},
++ { 'K', 0xd5000000, 10, 'w'},
++ { 'K', 0xd5600000, 12, ':'},
++ { 'K', 0xd5800000, 9, 'G'},
++ { 'K', 0xd6000000, 7, '.'},
++ { 'K', 0xd8000000, 5, 'r'},
++ { 'K', 0xe0000000, 6, 'u'},
++ { 'K', 0xe4500000, 12, 'S'},
++ { 'K', 0xe4800000, 9, ','},
++ { 'K', 0xe5000000, 8, 'h'},
++ { 'K', 0xe6000000, 7, 'l'},
++ { 'K', 0xe8000000, 5, ' '},
++ { 'K', 0xf0000000, 4, 'y'},
++ { 'L', 0x00000000, 2, 'i'},
++ { 'L', 0x40000000, 4, 'u'},
++ { 'L', 0x50000000, 6, 'l'},
++ { 'L', 0x54000000, 6, 'A'},
++ { 'L', 0x58000000, 9, 'I'},
++ { 'L', 0x59400000, 10, '\''},
++ { 'L', 0x59a00000, 11, '.'},
++ { 'L', 0x5a680000, 16, ESCAPE},
++ { 'L', 0x5a700000, 12, 'S'},
++ { 'L', 0x5c000000, 6, 'y'},
++ { 'L', 0x60000000, 3, ']'},
++ { 'L', 0x80000000, 2, 'o'},
++ { 'L', 0xc0000000, 3, 'e'},
++ { 'L', 0xe0000000, 3, 'a'},
++ { 'M', 0x00000000, 2, 'o'},
++ { 'M', 0x40000000, 9, '1'},
++ { 'M', 0x40800000, 10, 'A'},
++ { 'M', 0x41000000, 8, 'C'},
++ { 'M', 0x42000000, 7, ' '},
++ { 'M', 0x44000000, 9, 'h'},
++ { 'M', 0x44800000, 10, 'z'},
++ { 'M', 0x45000000, 9, 'I'},
++ { 'M', 0x45800000, 12, 'R'},
++ { 'M', 0x45b60000, 15, '2'},
++ { 'M', 0x45b80000, 13, 'D'},
++ { 'M', 0x45c00000, 11, '.'},
++ { 'M', 0x45f00000, 13, 'E'},
++ { 'M', 0x45fc0000, 14, 'w'},
++ { 'M', 0x46000000, 8, 'F'},
++ { 'M', 0x47800000, 9, 'X'},
++ { 'M', 0x48000000, 5, 'y'},
++ { 'M', 0x50000000, 4, 'c'},
++ { 'M', 0x60000000, 3, 'e'},
++ { 'M', 0x80000000, 6, 'S'},
++ { 'M', 0x84000000, 6, 'P'},
++ { 'M', 0x88000000, 5, 'r'},
++ { 'M', 0x90000000, 4, 'u'},
++ { 'M', 0xa0000000, 3, 'i'},
++ { 'M', 0xc0000000, 2, 'a'},
++ { 'N', 0x00000000, 2, 'a'},
++ { 'N', 0x43500000, 12, 'M'},
++ { 'N', 0x44000000, 7, 'y'},
++ { 'N', 0x47000000, 8, ' '},
++ { 'N', 0x48000000, 6, 'A'},
++ { 'N', 0x4e000000, 9, 'L'},
++ { 'N', 0x4f680000, 13, ESCAPE},
++ { 'N', 0x50000000, 5, 'u'},
++ { 'N', 0x58000000, 5, 'E'},
++ { 'N', 0x60000000, 3, 'i'},
++ { 'N', 0x80000000, 2, 'o'},
++ { 'N', 0xc0000000, 2, 'e'},
++ { 'O', 0x00000000, 4, 's'},
++ { 'O', 0x20000000, 6, 'o'},
++ { 'O', 0x28000000, 5, 'U'},
++ { 'O', 0x40000000, 4, 'r'},
++ { 'O', 0x50000000, 6, 'b'},
++ { 'O', 0x54000000, 6, 'm'},
++ { 'O', 0x58000000, 5, 'h'},
++ { 'O', 0x60000000, 9, 'K'},
++ { 'O', 0x60a00000, 12, ':'},
++ { 'O', 0x61000000, 8, 't'},
++ { 'O', 0x62000000, 8, 'k'},
++ { 'O', 0x63200000, 11, 'L'},
++ { 'O', 0x6c000000, 6, 'v'},
++ { 'O', 0x70000000, 5, 'f'},
++ { 'O', 0x78000000, 5, 'w'},
++ { 'O', 0x80000000, 4, 'u'},
++ { 'O', 0x90000000, 5, '.'},
++ { 'O', 0x98000000, 8, 'g'},
++ { 'O', 0x99c00000, 10, '-'},
++ { 'O', 0x9a000000, 7, 'd'},
++ { 'O', 0x9c000000, 6, 'c'},
++ { 'O', 0xa0000000, 4, 'p'},
++ { 'O', 0xb0000000, 4, 'l'},
++ { 'O', 0xc0000000, 5, ' '},
++ { 'O', 0xc8000000, 7, 'a'},
++ { 'O', 0xcb200000, 11, 'A'},
++ { 'O', 0xcb600000, 11, 'C'},
++ { 'O', 0xcc000000, 6, 'x'},
++ { 'O', 0xd0000000, 4, '\''},
++ { 'O', 0xe0000000, 3, 'n'},
++ { 'P', 0x00000000, 3, 'i'},
++ { 'P', 0x20000000, 4, 'h'},
++ { 'P', 0x31100000, 12, 'G'},
++ { 'P', 0x31400000, 10, 'y'},
++ { 'P', 0x32000000, 8, 'D'},
++ { 'P', 0x33540000, 16, ESCAPE},
++ { 'P', 0x33580000, 13, 'J'},
++ { 'P', 0x33600000, 12, 'A'},
++ { 'P', 0x33800000, 9, ','},
++ { 'P', 0x34000000, 7, 'C'},
++ { 'P', 0x36000000, 10, 'E'},
++ { 'P', 0x36400000, 10, '\''},
++ { 'P', 0x36900000, 12, 'F'},
++ { 'P', 0x36a00000, 13, 'f'},
++ { 'P', 0x36a80000, 13, 'R'},
++ { 'P', 0x36b00000, 14, 'Y'},
++ { 'P', 0x37000000, 8, 's'},
++ { 'P', 0x38000000, 7, '.'},
++ { 'P', 0x3a000000, 7, ' '},
++ { 'P', 0x3c000000, 6, 'u'},
++ { 'P', 0x40000000, 3, 'e'},
++ { 'P', 0x60000000, 3, 'l'},
++ { 'P', 0x80000000, 3, 'o'},
++ { 'P', 0xa0000000, 3, 'r'},
++ { 'P', 0xc0000000, 2, 'a'},
++ { 'Q', 0x40000000, 5, 'a'},
++ { 'Q', 0x4b000000, 8, '&'},
++ { 'Q', 0x50000000, 4, '.'},
++ { 'Q', 0x60000000, 3, ' '},
++ { 'Q', 0x80000000, 1, 'u'},
++ { 'R', 0x10000000, 6, ' '},
++ { 'R', 0x15000000, 9, 'F'},
++ { 'R', 0x16000000, 8, '.'},
++ { 'R', 0x17000000, 10, 'N'},
++ { 'R', 0x17c00000, 10, 'H'},
++ { 'R', 0x18000000, 5, 'E'},
++ { 'R', 0x20000000, 5, 'h'},
++ { 'R', 0x28000000, 6, 'y'},
++ { 'R', 0x2d800000, 9, 'n'},
++ { 'R', 0x2e000000, 8, 'S'},
++ { 'R', 0x2f800000, 9, 'A'},
++ { 'R', 0x30000000, 4, 'u'},
++ { 'R', 0x40000000, 2, 'a'},
++ { 'R', 0x80000000, 3, 'i'},
++ { 'R', 0xa0000000, 3, 'e'},
++ { 'R', 0xc0000000, 2, 'o'},
++ { 'S', 0x00000000, 4, 'a'},
++ { 'S', 0x10000000, 5, 'p'},
++ { 'S', 0x18000000, 5, ','},
++ { 'S', 0x20000000, 4, 'h'},
++ { 'S', 0x30000000, 5, 'L'},
++ { 'S', 0x38000000, 7, 'w'},
++ { 'S', 0x3a000000, 8, 'q'},
++ { 'S', 0x3b000000, 9, 'P'},
++ { 'S', 0x3b800000, 10, 'A'},
++ { 'S', 0x3bc40000, 16, 'G'},
++ { 'S', 0x3bc60000, 15, '}'},
++ { 'S', 0x3be00000, 12, 'S'},
++ { 'S', 0x3c000000, 6, 'k'},
++ { 'S', 0x40000000, 5, 'i'},
++ { 'S', 0x48000000, 5, 'u'},
++ { 'S', 0x50000000, 5, 'o'},
++ { 'S', 0x58000000, 5, 'c'},
++ { 'S', 0x60000000, 5, 'e'},
++ { 'S', 0x69000000, 8, 'n'},
++ { 'S', 0x6a000000, 7, ' '},
++ { 'S', 0x6c000000, 8, 'l'},
++ { 'S', 0x6d100000, 14, 'O'},
++ { 'S', 0x6d140000, 16, '-'},
++ { 'S', 0x6d160000, 15, 'B'},
++ { 'S', 0x6d180000, 13, ESCAPE},
++ { 'S', 0x6d200000, 11, '.'},
++ { 'S', 0x6d4c0000, 16, '3'},
++ { 'S', 0x6d4e8000, 17, 's'},
++ { 'S', 0x6d500000, 12, 'E'},
++ { 'S', 0x6d600000, 12, 'v'},
++ { 'S', 0x6d700000, 14, 'z'},
++ { 'S', 0x6d740000, 15, 'H'},
++ { 'S', 0x6d780000, 13, 'g'},
++ { 'S', 0x6d800000, 9, 'y'},
++ { 'S', 0x6e000000, 7, 'm'},
++ { 'S', 0x70000000, 4, 't'},
++ { 'S', 0x80000000, 1, ']'},
++ { 'T', 0x00000000, 1, 'h'},
++ { 'T', 0x80000000, 3, 'o'},
++ { 'T', 0xa0000000, 4, 'V'},
++ { 'T', 0xb0000000, 4, 'w'},
++ { 'T', 0xc0000000, 4, 'r'},
++ { 'T', 0xd0000000, 5, 'a'},
++ { 'T', 0xd8000000, 5, 'i'},
++ { 'T', 0xe0000000, 5, 'u'},
++ { 'T', 0xe8000000, 7, 'H'},
++ { 'T', 0xea000000, 8, ' '},
++ { 'T', 0xeb000000, 8, 'y'},
++ { 'T', 0xec000000, 7, 'W'},
++ { 'T', 0xee000000, 10, 'S'},
++ { 'T', 0xee400000, 11, 'A'},
++ { 'T', 0xee680000, 13, '-'},
++ { 'T', 0xee800000, 9, 'M'},
++ { 'T', 0xef000000, 12, '.'},
++ { 'T', 0xef140000, 14, '4'},
++ { 'T', 0xef200000, 11, 's'},
++ { 'T', 0xef400000, 13, 'C'},
++ { 'T', 0xef480000, 14, 'O'},
++ { 'T', 0xef4c0000, 15, 'E'},
++ { 'T', 0xef540000, 15, '\''},
++ { 'T', 0xef580000, 13, 'c'},
++ { 'T', 0xef800000, 9, 'x'},
++ { 'T', 0xf0000000, 4, 'e'},
++ { 'U', 0x00000000, 2, 'K'},
++ { 'U', 0x40000000, 6, 'g'},
++ { 'U', 0x44000000, 8, 'k'},
++ { 'U', 0x45000000, 8, 't'},
++ { 'U', 0x46000000, 8, 'E'},
++ { 'U', 0x47000000, 8, '-'},
++ { 'U', 0x48000000, 8, 'F'},
++ { 'U', 0x4ac00000, 11, 'b'},
++ { 'U', 0x4b800000, 9, 'Z'},
++ { 'U', 0x4c000000, 8, '2'},
++ { 'U', 0x4d000000, 10, 'i'},
++ { 'U', 0x4d800000, 10, 'a'},
++ { 'U', 0x4e000000, 10, '.'},
++ { 'U', 0x50000000, 5, 's'},
++ { 'U', 0x58000000, 5, 'r'},
++ { 'U', 0x60000000, 3, 'S'},
++ { 'U', 0x80000000, 2, 'n'},
++ { 'U', 0xc0000000, 3, 'p'},
++ { 'U', 0xe0000000, 6, ' '},
++ { 'U', 0xe4000000, 7, 'm'},
++ { 'U', 0xe8000000, 5, 'R'},
++ { 'U', 0xf0000000, 4, 'l'},
++ { 'V', 0x00000000, 3, '.'},
++ { 'V', 0x20000000, 3, 'a'},
++ { 'V', 0x40000000, 2, ' '},
++ { 'V', 0x81000000, 8, '1'},
++ { 'V', 0x84780000, 13, '8'},
++ { 'V', 0x91000000, 9, 'D'},
++ { 'V', 0x91800000, 9, 'u'},
++ { 'V', 0x94000000, 10, ';'},
++ { 'V', 0x94400000, 11, ESCAPE},
++ { 'V', 0x94780000, 13, 'W'},
++ { 'V', 0x94800000, 9, ','},
++ { 'V', 0x95000000, 8, '\''},
++ { 'V', 0x96000000, 8, ':'},
++ { 'V', 0x97000000, 8, 'l'},
++ { 'V', 0x98000000, 5, 'o'},
++ { 'V', 0xa0000000, 3, 'e'},
++ { 'V', 0xc0000000, 2, 'i'},
++ { 'W', 0x00000000, 2, 'h'},
++ { 'W', 0x40000000, 4, 'r'},
++ { 'W', 0x50800000, 9, '.'},
++ { 'W', 0x51000000, 10, '\''},
++ { 'W', 0x51800000, 11, '2'},
++ { 'W', 0x51a00000, 11, ':'},
++ { 'W', 0x52000000, 7, ' '},
++ { 'W', 0x54000000, 7, 'y'},
++ { 'W', 0x56000000, 9, 'I'},
++ { 'W', 0x56b40000, 16, ESCAPE},
++ { 'W', 0x56b80000, 13, 'u'},
++ { 'W', 0x56c00000, 11, 'V'},
++ { 'W', 0x57000000, 9, 'W'},
++ { 'W', 0x58000000, 5, 'O'},
++ { 'W', 0x60000000, 3, 'a'},
++ { 'W', 0x80000000, 2, 'i'},
++ { 'W', 0xc0000000, 3, 'o'},
++ { 'W', 0xe0000000, 3, 'e'},
++ { 'X', 0x00000000, 3, 'a'},
++ { 'X', 0x43000000, 10, ')'},
++ { 'X', 0x50000000, 5, '-'},
++ { 'X', 0x6a000000, 7, '.'},
++ { 'X', 0x70000000, 4, 't'},
++ { 'X', 0x80000000, 1, ' '},
++ { 'Y', 0x00000000, 2, 'e'},
++ { 'Y', 0x40000000, 3, 'u'},
++ { 'Y', 0x60000000, 5, 'a'},
++ { 'Y', 0x6e000000, 13, '-'},
++ { 'Y', 0x6e380000, 13, ','},
++ { 'Y', 0x6f000000, 8, 'i'},
++ { 'Y', 0x78000000, 5, ' '},
++ { 'Y', 0x80000000, 1, 'o'},
++ { 'Z', 0x08000000, 5, 'Z'},
++ { 'Z', 0x10000000, 5, ' '},
++ { 'Z', 0x18000000, 5, 'u'},
++ { 'Z', 0x20000000, 4, 'z'},
++ { 'Z', 0x30000000, 4, 'i'},
++ { 'Z', 0x03400000, 10, '-'},
++ { 'Z', 0x40000000, 2, 'a'},
++ { 'Z', 0x80000000, 2, 'e'},
++ { 'Z', 0xc0000000, 2, 'o'},
++ { '[', 0x00000000, 4, '2'},
++ { '[', 0x10000000, 11, 'J'},
++ { '[', 0x10800000, 9, 'C'},
++ { '[', 0x11000000, 9, 'f'},
++ { '[', 0x14000000, 6, 'n'},
++ { '[', 0x1c000000, 11, 'L'},
++ { '[', 0x1c240000, 15, ESCAPE},
++ { '[', 0x1c280000, 13, 'D'},
++ { '[', 0x1c400000, 10, 'T'},
++ { '[', 0x1c800000, 9, 'c'},
++ { '[', 0x30000000, 4, '1'},
++ { '[', 0x40000000, 2, 'A'},
++ { '[', 0x80000000, 1, 'S'},
++ { '\'', 0x00000000, 4, 'l'},
++ { '\'', 0x10000000, 6, 'n'},
++ { '\'', 0x14000000, 6, '.'},
++ { '\'', 0x18000000, 6, 'C'},
++ { '\'', 0x1c000000, 8, 'S'},
++ { '\'', 0x1d000000, 9, 'f'},
++ { '\'', 0x1d800000, 9, 'g'},
++ { '\'', 0x1e000000, 10, 'o'},
++ { '\'', 0x1e400000, 10, 'K'},
++ { '\'', 0x1e840000, 14, '0'},
++ { '\'', 0x1e900000, 12, 'W'},
++ { '\'', 0x1ea00000, 11, '?'},
++ { '\'', 0x1ec00000, 10, 'a'},
++ { '\'', 0x1f000000, 8, 'p'},
++ { '\'', 0x20000000, 3, 't'},
++ { '\'', 0x40000000, 3, ' '},
++ { '\'', 0x60000000, 6, 'B'},
++ { '\'', 0x64000000, 9, 'F'},
++ { '\'', 0x64800000, 9, 'h'},
++ { '\'', 0x65000000, 8, 'D'},
++ { '\'', 0x66000000, 11, 'E'},
++ { '\'', 0x66400000, 10, 'u'},
++ { '\'', 0x66800000, 9, 'H'},
++ { '\'', 0x67900000, 12, ':'},
++ { '\'', 0x67b40000, 16, ESCAPE},
++ { '\'', 0x67b80000, 13, 'y'},
++ { '\'', 0x68000000, 5, 'r'},
++ { '\'', 0x70000000, 7, 'd'},
++ { '\'', 0x72400000, 10, 'I'},
++ { '\'', 0x72800000, 9, 'R'},
++ { '\'', 0x73800000, 9, 'T'},
++ { '\'', 0x74000000, 6, 'A'},
++ { '\'', 0x78000000, 7, 'v'},
++ { '\'', 0x7a000000, 10, 'w'},
++ { '\'', 0x7a400000, 10, 'b'},
++ { '\'', 0x7a800000, 9, 'G'},
++ { '\'', 0x7b000000, 8, 'i'},
++ { '\'', 0x7c000000, 8, 'c'},
++ { '\'', 0x7d000000, 8, 'm'},
++ { '\'', 0x7e000000, 13, '6'},
++ { '\'', 0x7e100000, 12, 'q'},
++ { '\'', 0x7e220000, 15, 'U'},
++ { '\'', 0x7e300000, 12, 'M'},
++ { '\'', 0x7e400000, 10, 'e'},
++ { '\'', 0x7e800000, 9, 'L'},
++ { '\'', 0x7f000000, 8, ','},
++ { '\'', 0x80000000, 1, 's'},
++ { ']', 0x04000000, 6, ','},
++ { ']', 0x20000000, 3, '.'},
++ { ']', 0x40000000, 2, ' '},
++ { ']', 0x80000000, 1, STOP},
++ { 'a', 0x00000000, 4, 'm'},
++ { 'a', 0x10000000, 6, 'p'},
++ { 'a', 0x14000000, 7, 'w'},
++ { 'a', 0x16000000, 9, ','},
++ { 'a', 0x16800000, 9, '\''},
++ { 'a', 0x17000000, 8, 'z'},
++ { 'a', 0x18000000, 5, 'd'},
++ { 'a', 0x20000000, 3, 'r'},
++ { 'a', 0x40000000, 2, 'n'},
++ { 'a', 0x80000000, 5, 'i'},
++ { 'a', 0x88000000, 6, 'u'},
++ { 'a', 0x8c000000, 6, 'v'},
++ { 'a', 0x90000000, 4, 's'},
++ { 'a', 0xa0000000, 3, 't'},
++ { 'a', 0xc0000000, 5, 'y'},
++ { 'a', 0xc8000000, 8, '.'},
++ { 'a', 0xc9000000, 11, 'a'},
++ { 'a', 0xc9200000, 11, '-'},
++ { 'a', 0xc9400000, 12, 'q'},
++ { 'a', 0xc9500000, 14, '!'},
++ { 'a', 0xc9550000, 17, 'J'},
++ { 'a', 0xc9560000, 16, ';'},
++ { 'a', 0xc9570000, 16, ')'},
++ { 'a', 0xc9580000, 18, 'R'},
++ { 'a', 0xc9590000, 16, '/'},
++ { 'a', 0xc95c0000, 14, '?'},
++ { 'a', 0xc9600000, 11, 'j'},
++ { 'a', 0xc9800000, 9, 'e'},
++ { 'a', 0xca000000, 11, ':'},
++ { 'a', 0xca200000, 11, 'o'},
++ { 'a', 0xca400000, 10, 'x'},
++ { 'a', 0xca800000, 9, 'h'},
++ { 'a', 0xcb000000, 8, 'f'},
++ { 'a', 0xcc000000, 6, 'g'},
++ { 'a', 0xd0000000, 5, 'c'},
++ { 'a', 0xd8000000, 6, 'b'},
++ { 'a', 0xdc000000, 6, 'k'},
++ { 'a', 0xe0000000, 4, ' '},
++ { 'a', 0xf0000000, 4, 'l'},
++ { 'b', 0x00000000, 2, 'e'},
++ { 'b', 0x40000000, 3, 'u'},
++ { 'b', 0x60000000, 3, 'a'},
++ { 'b', 0x80000000, 3, 'y'},
++ { 'b', 0xa0000000, 3, 'o'},
++ { 'b', 0xc0000000, 4, 'l'},
++ { 'b', 0xd0000000, 6, 's'},
++ { 'b', 0xd4000000, 9, 'j'},
++ { 'b', 0xd4800000, 13, '?'},
++ { 'b', 0xd4880000, 14, 'f'},
++ { 'b', 0xd48c0000, 16, '/'},
++ { 'b', 0xd4900000, 13, 'v'},
++ { 'b', 0xd4984000, 19, ESCAPE},
++ { 'b', 0xd4a00000, 11, ':'},
++ { 'b', 0xd4c00000, 10, '\''},
++ { 'b', 0xd5000000, 8, 'c'},
++ { 'b', 0xd6000000, 9, ','},
++ { 'b', 0xd6800000, 9, '.'},
++ { 'b', 0xd7000000, 11, 'w'},
++ { 'b', 0xd7200000, 11, 'd'},
++ { 'b', 0xd7400000, 11, 'h'},
++ { 'b', 0xd7600000, 11, '&'},
++ { 'b', 0xd7800000, 12, 'm'},
++ { 'b', 0xd7900000, 12, 'n'},
++ { 'b', 0xd7a00000, 11, '-'},
++ { 'b', 0xd7c00000, 10, 't'},
++ { 'b', 0xd8000000, 6, ' '},
++ { 'b', 0xdc000000, 6, 'b'},
++ { 'b', 0xe0000000, 4, 'r'},
++ { 'b', 0xf0000000, 4, 'i'},
++ { 'c', 0x00000000, 2, 'o'},
++ { 'c', 0x40000000, 4, 'i'},
++ { 'c', 0x50000000, 4, 'l'},
++ { 'c', 0x60000000, 3, 'a'},
++ { 'c', 0x80000000, 3, 'e'},
++ { 'c', 0xa0000000, 5, 'u'},
++ { 'c', 0xa8000000, 5, 'r'},
++ { 'c', 0xb0000000, 4, 'k'},
++ { 'c', 0xc0000000, 3, 'h'},
++ { 'c', 0xe0000000, 5, ' '},
++ { 'c', 0xe8000000, 7, 'y'},
++ { 'c', 0xea000000, 7, 'c'},
++ { 'c', 0xec000000, 12, ':'},
++ { 'c', 0xec100000, 15, 'b'},
++ { 'c', 0xec120000, 15, ESCAPE},
++ { 'c', 0xec1b0000, 16, 'V'},
++ { 'c', 0xec1c0000, 14, 'E'},
++ { 'c', 0xec200000, 11, 'n'},
++ { 'c', 0xec400000, 10, 'G'},
++ { 'c', 0xec800000, 13, 'N'},
++ { 'c', 0xec900000, 12, '-'},
++ { 'c', 0xeca00000, 12, 'A'},
++ { 'c', 0xecb00000, 14, '?'},
++ { 'c', 0xecb80000, 15, ';'},
++ { 'c', 0xecba0000, 17, 'U'},
++ { 'c', 0xecc00000, 11, 'D'},
++ { 'c', 0xece00000, 12, 'L'},
++ { 'c', 0xecf00000, 12, '\''},
++ { 'c', 0xed000000, 8, 's'},
++ { 'c', 0xee000000, 8, '.'},
++ { 'c', 0xef000000, 11, 'K'},
++ { 'c', 0xef200000, 12, 'd'},
++ { 'c', 0xef300000, 14, 'M'},
++ { 'c', 0xef380000, 13, 'F'},
++ { 'c', 0xef400000, 12, 'q'},
++ { 'c', 0xef500000, 12, 'I'},
++ { 'c', 0xef600000, 11, 'C'},
++ { 'c', 0xef800000, 9, ','},
++ { 'c', 0xf0000000, 4, 't'},
++ { 'd', 0x00000000, 1, ' '},
++ { 'd', 0x80000000, 8, 'h'},
++ { 'd', 0x81000000, 8, ':'},
++ { 'd', 0x82000000, 8, 'm'},
++ { 'd', 0x83000000, 11, '!'},
++ { 'd', 0x83300000, 12, ')'},
++ { 'd', 0x83400000, 12, 'k'},
++ { 'd', 0x83500000, 12, ';'},
++ { 'd', 0x83600000, 15, 'z'},
++ { 'd', 0x83640000, 16, ESCAPE},
++ { 'd', 0x83660000, 15, 'q'},
++ { 'd', 0x836c0000, 14, 'j'},
++ { 'd', 0x83700000, 12, '/'},
++ { 'd', 0x83800000, 9, 'f'},
++ { 'd', 0x84000000, 6, 'd'},
++ { 'd', 0x88000000, 5, '.'},
++ { 'd', 0x90000000, 8, 'w'},
++ { 'd', 0x91000000, 8, 'n'},
++ { 'd', 0x92000000, 7, '-'},
++ { 'd', 0x94000000, 6, 'l'},
++ { 'd', 0x98000000, 5, 'o'},
++ { 'd', 0xa0000000, 3, 'e'},
++ { 'd', 0xc0000000, 4, 'a'},
++ { 'd', 0xd0000000, 6, 'u'},
++ { 'd', 0xd4000000, 11, 'p'},
++ { 'd', 0xd4200000, 11, 't'},
++ { 'd', 0xd4400000, 10, '?'},
++ { 'd', 0xd4800000, 10, 'b'},
++ { 'd', 0xd4c00000, 10, 'c'},
++ { 'd', 0xd5000000, 8, '\''},
++ { 'd', 0xd6000000, 7, 'v'},
++ { 'd', 0xd8000000, 5, 'r'},
++ { 'd', 0xe0000000, 4, 'i'},
++ { 'd', 0xf0000000, 7, 'g'},
++ { 'd', 0xf2000000, 7, ','},
++ { 'd', 0xf4000000, 6, 'y'},
++ { 'd', 0xf8000000, 5, 's'},
++ { 'e', 0x00000000, 4, 'd'},
++ { 'e', 0x10000000, 5, 'c'},
++ { 'e', 0x18000000, 6, 'x'},
++ { 'e', 0x1c000000, 7, 'f'},
++ { 'e', 0x1e000000, 8, '-'},
++ { 'e', 0x1f000000, 8, 'h'},
++ { 'e', 0x20000000, 6, 'v'},
++ { 'e', 0x24000000, 6, 'i'},
++ { 'e', 0x28000000, 6, 'y'},
++ { 'e', 0x2c000000, 8, 'k'},
++ { 'e', 0x2d000000, 10, ')'},
++ { 'e', 0x2d400000, 10, 'q'},
++ { 'e', 0x2d800000, 9, ':'},
++ { 'e', 0x2e000000, 7, 'b'},
++ { 'e', 0x30000000, 4, 'a'},
++ { 'e', 0x40000000, 3, 's'},
++ { 'e', 0x60000000, 5, 'e'},
++ { 'e', 0x68000000, 5, 'w'},
++ { 'e', 0x70000000, 6, 'm'},
++ { 'e', 0x74000000, 7, ','},
++ { 'e', 0x76000000, 8, '\''},
++ { 'e', 0x77000000, 11, 'z'},
++ { 'e', 0x77240000, 14, '4'},
++ { 'e', 0x77280000, 14, 'B'},
++ { 'e', 0x772c0000, 16, ESCAPE},
++ { 'e', 0x772d4000, 18, 'G'},
++ { 'e', 0x772f4000, 21, '2'},
++ { 'e', 0x77300000, 13, '/'},
++ { 'e', 0x77380000, 14, ']'},
++ { 'e', 0x773c0000, 14, ';'},
++ { 'e', 0x77400000, 10, '?'},
++ { 'e', 0x77800000, 10, 'u'},
++ { 'e', 0x77c00000, 11, '!'},
++ { 'e', 0x77e00000, 12, STOP},
++ { 'e', 0x77f00000, 12, 'j'},
++ { 'e', 0x78000000, 5, 't'},
++ { 'e', 0x80000000, 2, ' '},
++ { 'e', 0xc0000000, 3, 'r'},
++ { 'e', 0xe0000000, 5, 'l'},
++ { 'e', 0xe8000000, 6, '.'},
++ { 'e', 0xec000000, 7, 'p'},
++ { 'e', 0xee000000, 8, 'g'},
++ { 'e', 0xef000000, 8, 'o'},
++ { 'e', 0xf0000000, 4, 'n'},
++ { 'f', 0x00000000, 2, 'o'},
++ { 'f', 0x40000000, 3, 'i'},
++ { 'f', 0x60000000, 5, 't'},
++ { 'f', 0x68000000, 8, 's'},
++ { 'f', 0x69000000, 8, 'y'},
++ { 'f', 0x6a000000, 10, '?'},
++ { 'f', 0x6a400000, 12, 'm'},
++ { 'f', 0x6a500000, 16, 'h'},
++ { 'f', 0x6a560000, 16, ';'},
++ { 'f', 0x6a600000, 11, ':'},
++ { 'f', 0x6a800000, 11, '\''},
++ { 'f', 0x6aa00000, 11, 'g'},
++ { 'f', 0x6ac00000, 10, ','},
++ { 'f', 0x6b000000, 9, '.'},
++ { 'f', 0x6b800000, 12, ESCAPE},
++ { 'f', 0x6b980000, 14, ')'},
++ { 'f', 0x6b9c0000, 14, 'w'},
++ { 'f', 0x6bb00000, 12, 'n'},
++ { 'f', 0x6bc00000, 10, '-'},
++ { 'f', 0x6c000000, 6, 'l'},
++ { 'f', 0x70000000, 4, 'a'},
++ { 'f', 0x80000000, 2, ' '},
++ { 'f', 0xc0000000, 3, 'r'},
++ { 'f', 0xe0000000, 4, 'e'},
++ { 'f', 0xf0000000, 5, 'u'},
++ { 'f', 0xf8000000, 5, 'f'},
++ { 'g', 0x00000000, 3, 'a'},
++ { 'g', 0x20000000, 9, 'd'},
++ { 'g', 0x20800000, 10, '?'},
++ { 'g', 0x20c00000, 10, 'm'},
++ { 'g', 0x21000000, 8, '\''},
++ { 'g', 0x22000000, 8, '-'},
++ { 'g', 0x23000000, 8, ':'},
++ { 'g', 0x24000000, 6, ','},
++ { 'g', 0x28000000, 6, 'n'},
++ { 'g', 0x2c000000, 7, 'y'},
++ { 'g', 0x2e000000, 13, 'k'},
++ { 'g', 0x2e080000, 14, ')'},
++ { 'g', 0x2e0c0000, 14, '"'},
++ { 'g', 0x2e100000, 12, ';'},
++ { 'g', 0x2e200000, 11, '!'},
++ { 'g', 0x2e400000, 13, 'p'},
++ { 'g', 0x2e480000, 16, ESCAPE},
++ { 'g', 0x2e4e0000, 15, '/'},
++ { 'g', 0x2e600000, 11, 'f'},
++ { 'g', 0x2e800000, 9, 'b'},
++ { 'g', 0x2f000000, 9, 't'},
++ { 'g', 0x2f800000, 9, 'w'},
++ { 'g', 0x30000000, 4, 'u'},
++ { 'g', 0x40000000, 3, 'h'},
++ { 'g', 0x60000000, 4, 'r'},
++ { 'g', 0x70000000, 5, 'l'},
++ { 'g', 0x78000000, 6, 'g'},
++ { 'g', 0x7c000000, 6, '.'},
++ { 'g', 0x80000000, 4, 'i'},
++ { 'g', 0x90000000, 5, 's'},
++ { 'g', 0x98000000, 5, 'o'},
++ { 'g', 0xa0000000, 3, 'e'},
++ { 'g', 0xc0000000, 2, ' '},
++ { 'h', 0x00000000, 1, 'e'},
++ { 'h', 0x80000000, 3, 'o'},
++ { 'h', 0xa0000000, 3, 'i'},
++ { 'h', 0xc0000000, 3, ' '},
++ { 'h', 0xe0000000, 9, 'd'},
++ { 'h', 0xe0880000, 15, 'p'},
++ { 'h', 0xe08a0000, 15, ';'},
++ { 'h', 0xe08c0000, 15, '/'},
++ { 'h', 0xe0900000, 12, 'c'},
++ { 'h', 0xe0a00000, 13, 'h'},
++ { 'h', 0xe0a80000, 13, 'k'},
++ { 'h', 0xe0b00000, 12, '?'},
++ { 'h', 0xe0c00000, 10, 'w'},
++ { 'h', 0xe1000000, 8, 'y'},
++ { 'h', 0xe2000000, 9, 's'},
++ { 'h', 0xe2800000, 10, '\''},
++ { 'h', 0xe2c00000, 10, '-'},
++ { 'h', 0xe3000000, 8, 'l'},
++ { 'h', 0xe4000000, 6, 'r'},
++ { 'h', 0xe8000000, 8, '.'},
++ { 'h', 0xe9000000, 8, 'n'},
++ { 'h', 0xea000000, 9, ','},
++ { 'h', 0xea800000, 12, '!'},
++ { 'h', 0xea910000, 17, ESCAPE},
++ { 'h', 0xea940000, 14, 'g'},
++ { 'h', 0xea980000, 13, 'f'},
++ { 'h', 0xeaa00000, 11, 'm'},
++ { 'h', 0xeac00000, 11, ':'},
++ { 'h', 0xeae00000, 11, 'b'},
++ { 'h', 0xeb000000, 8, 'u'},
++ { 'h', 0xec000000, 6, 't'},
++ { 'h', 0xf0000000, 4, 'a'},
++ { 'i', 0x00000000, 3, 't'},
++ { 'i', 0x20000000, 5, 'a'},
++ { 'i', 0x28000000, 6, 'p'},
++ { 'i', 0x2c000000, 7, 'z'},
++ { 'i', 0x2e000000, 9, '-'},
++ { 'i', 0x2e800000, 9, 'x'},
++ { 'i', 0x2f000000, 8, 'b'},
++ { 'i', 0x30000000, 4, 'l'},
++ { 'i', 0x40000000, 3, 's'},
++ { 'i', 0x60000000, 5, 'm'},
++ { 'i', 0x68000000, 5, 'd'},
++ { 'i', 0x70000000, 5, 'v'},
++ { 'i', 0x78000000, 6, 'f'},
++ { 'i', 0x7c000000, 7, ' '},
++ { 'i', 0x7e000000, 8, 'k'},
++ { 'i', 0x7f000000, 10, 'u'},
++ { 'i', 0x7f400000, 11, '.'},
++ { 'i', 0x7f600000, 15, '/'},
++ { 'i', 0x7f622000, 19, 'C'},
++ { 'i', 0x7f624000, 19, ESCAPE},
++ { 'i', 0x7f627000, 20, ';'},
++ { 'i', 0x7f640000, 14, ':'},
++ { 'i', 0x7f680000, 13, 'i'},
++ { 'i', 0x7f700000, 12, 'w'},
++ { 'i', 0x7f800000, 10, 'q'},
++ { 'i', 0x7fc00000, 11, ','},
++ { 'i', 0x7fe00000, 14, 'h'},
++ { 'i', 0x7fe50000, 18, ')'},
++ { 'i', 0x7fe80000, 13, 'j'},
++ { 'i', 0x7ff00000, 12, '\''},
++ { 'i', 0x80000000, 2, 'n'},
++ { 'i', 0xc0000000, 4, 'o'},
++ { 'i', 0xd0000000, 4, 'c'},
++ { 'i', 0xe0000000, 5, 'g'},
++ { 'i', 0xe8000000, 5, 'r'},
++ { 'i', 0xf0000000, 4, 'e'},
++ { 'j', 0x00000000, 1, 'o'},
++ { 'j', 0x80000000, 5, 'i'},
++ { 'j', 0x88800000, 11, 'n'},
++ { 'j', 0x88a00000, 13, ESCAPE},
++ { 'j', 0x8a000000, 7, ' '},
++ { 'j', 0x90000000, 4, 'e'},
++ { 'j', 0xa0000000, 3, 'a'},
++ { 'j', 0xc0000000, 2, 'u'},
++ { 'k', 0x00000000, 3, 's'},
++ { 'k', 0x20000000, 4, '.'},
++ { 'k', 0x30000000, 6, '\''},
++ { 'k', 0x34000000, 6, 'a'},
++ { 'k', 0x38000000, 6, 'p'},
++ { 'k', 0x3c000000, 6, ','},
++ { 'k', 0x40000000, 7, '/'},
++ { 'k', 0x42000000, 10, 'r'},
++ { 'k', 0x42800000, 10, '?'},
++ { 'k', 0x42c00000, 11, 'j'},
++ { 'k', 0x42e00000, 12, ')'},
++ { 'k', 0x43000000, 10, 't'},
++ { 'k', 0x43400000, 10, 'g'},
++ { 'k', 0x43800000, 9, 'b'},
++ { 'k', 0x44000000, 7, '-'},
++ { 'k', 0x46000000, 7, 'o'},
++ { 'k', 0x48000000, 5, 'y'},
++ { 'k', 0x50000000, 6, 'l'},
++ { 'k', 0x54000000, 6, 'f'},
++ { 'k', 0x58000000, 6, 'n'},
++ { 'k', 0x5c000000, 9, 'w'},
++ { 'k', 0x5c800000, 9, 'm'},
++ { 'k', 0x5d000000, 8, ':'},
++ { 'k', 0x5e000000, 9, 'h'},
++ { 'k', 0x5e800000, 12, ';'},
++ { 'k', 0x5e900000, 12, 'c'},
++ { 'k', 0x5eb00000, 13, '!'},
++ { 'k', 0x5ec00000, 10, 'd'},
++ { 'k', 0x5f000000, 9, 'u'},
++ { 'k', 0x5f800000, 9, 'k'},
++ { 'k', 0x60000000, 3, 'i'},
++ { 'k', 0x80000000, 2, ' '},
++ { 'k', 0xc0000000, 2, 'e'},
++ { 'l', 0x00000000, 4, 'u'},
++ { 'l', 0x10000000, 4, 'd'},
++ { 'l', 0x20000000, 4, 'y'},
++ { 'l', 0x30000000, 6, '.'},
++ { 'l', 0x34000000, 7, 'v'},
++ { 'l', 0x36000000, 10, 'r'},
++ { 'l', 0x36400000, 10, 'h'},
++ { 'l', 0x36800000, 9, ':'},
++ { 'l', 0x37000000, 8, 'c'},
++ { 'l', 0x38000000, 6, 't'},
++ { 'l', 0x3c000000, 7, 'f'},
++ { 'l', 0x3e000000, 8, '-'},
++ { 'l', 0x3f000000, 10, 'n'},
++ { 'l', 0x3f400000, 10, 'g'},
++ { 'l', 0x3f800000, 9, 'b'},
++ { 'l', 0x40000000, 3, 'a'},
++ { 'l', 0x60000000, 3, 'i'},
++ { 'l', 0x80000000, 3, 'l'},
++ { 'l', 0xa0000000, 5, 's'},
++ { 'l', 0xa8000000, 7, 'm'},
++ { 'l', 0xaa000000, 7, 'k'},
++ { 'l', 0xac000000, 7, 'p'},
++ { 'l', 0xae000000, 9, '\''},
++ { 'l', 0xae800000, 11, '?'},
++ { 'l', 0xaea80000, 15, ';'},
++ { 'l', 0xaeaa0000, 17, '@'},
++ { 'l', 0xaeaa8000, 17, 'j'},
++ { 'l', 0xaeab0000, 16, ESCAPE},
++ { 'l', 0xaeac0000, 14, '/'},
++ { 'l', 0xaeb00000, 13, 'z'},
++ { 'l', 0xaeb80000, 15, 'E'},
++ { 'l', 0xaebc0000, 16, ')'},
++ { 'l', 0xaec00000, 10, 'w'},
++ { 'l', 0xaf000000, 8, ','},
++ { 'l', 0xb0000000, 4, 'o'},
++ { 'l', 0xc0000000, 3, 'e'},
++ { 'l', 0xe0000000, 3, ' '},
++ { 'm', 0x00000000, 2, 'a'},
++ { 'm', 0x40000000, 2, 'e'},
++ { 'm', 0x80000000, 5, '.'},
++ { 'm', 0x88000000, 5, 's'},
++ { 'm', 0x90000000, 4, 'p'},
++ { 'm', 0xa0000000, 7, ','},
++ { 'm', 0xa3000000, 9, ':'},
++ { 'm', 0xa3800000, 11, '?'},
++ { 'm', 0xa3a00000, 11, '!'},
++ { 'm', 0xa3c00000, 10, 'r'},
++ { 'm', 0xa4000000, 6, 'y'},
++ { 'm', 0xa8000000, 7, '/'},
++ { 'm', 0xaa000000, 9, '\''},
++ { 'm', 0xaa800200, 23, STOP},
++ { 'm', 0xaaa00000, 11, 'w'},
++ { 'm', 0xaac00000, 10, 'f'},
++ { 'm', 0xab000000, 10, 'l'},
++ { 'm', 0xab400000, 14, ')'},
++ { 'm', 0xab440000, 14, ESCAPE},
++ { 'm', 0xab490000, 17, 'k'},
++ { 'm', 0xab498000, 17, 'z'},
++ { 'm', 0xab4c0000, 14, 'd'},
++ { 'm', 0xab500000, 13, 't'},
++ { 'm', 0xab600000, 11, 'h'},
++ { 'm', 0xab800000, 10, 'n'},
++ { 'm', 0xabc00000, 11, '-'},
++ { 'm', 0xabf00000, 13, ';'},
++ { 'm', 0xabf80000, 13, 'c'},
++ { 'm', 0xac000000, 6, 'b'},
++ { 'm', 0xb0000000, 4, 'o'},
++ { 'm', 0xc0000000, 4, 'i'},
++ { 'm', 0xd0000000, 5, 'u'},
++ { 'm', 0xd8000000, 5, 'm'},
++ { 'm', 0xe0000000, 3, ' '},
++ { 'n', 0x00000000, 4, 's'},
++ { 'n', 0x10000000, 8, 'm'},
++ { 'n', 0x11000000, 11, 'p'},
++ { 'n', 0x11200000, 13, '/'},
++ { 'n', 0x11300000, 12, ';'},
++ { 'n', 0x11400000, 10, 'z'},
++ { 'n', 0x11800000, 9, 'w'},
++ { 'n', 0x12000000, 7, 'u'},
++ { 'n', 0x14000000, 8, 'l'},
++ { 'n', 0x15000000, 8, '-'},
++ { 'n', 0x16000000, 7, 'v'},
++ { 'n', 0x18000000, 7, 'f'},
++ { 'n', 0x1a000000, 10, 'h'},
++ { 'n', 0x1a400000, 13, ESCAPE},
++ { 'n', 0x1a480000, 14, 'B'},
++ { 'n', 0x1a500000, 12, ')'},
++ { 'n', 0x1a600000, 11, 'x'},
++ { 'n', 0x1a800000, 9, ':'},
++ { 'n', 0x1b000000, 10, 'b'},
++ { 'n', 0x1b400000, 10, 'j'},
++ { 'n', 0x1b800000, 10, 'r'},
++ { 'n', 0x1bc00000, 12, '!'},
++ { 'n', 0x1bd00000, 12, 'q'},
++ { 'n', 0x1be00000, 11, '?'},
++ { 'n', 0x1c000000, 6, '.'},
++ { 'n', 0x20000000, 3, 't'},
++ { 'n', 0x40000000, 2, ' '},
++ { 'n', 0x80000000, 3, 'g'},
++ { 'n', 0xa0000000, 4, 'a'},
++ { 'n', 0xb0000000, 5, 'c'},
++ { 'n', 0xb8000000, 7, 'k'},
++ { 'n', 0xba000000, 7, '\''},
++ { 'n', 0xbc000000, 6, 'n'},
++ { 'n', 0xc0000000, 5, 'i'},
++ { 'n', 0xc8000000, 7, 'y'},
++ { 'n', 0xca000000, 7, ','},
++ { 'n', 0xcc000000, 6, 'o'},
++ { 'n', 0xd0000000, 4, 'e'},
++ { 'n', 0xe0000000, 3, 'd'},
++ { 'o', 0x00000000, 4, 'l'},
++ { 'o', 0x10000000, 5, 'v'},
++ { 'o', 0x18000000, 6, 'k'},
++ { 'o', 0x1c000000, 6, 'i'},
++ { 'o', 0x20000000, 3, 'u'},
++ { 'o', 0x40000000, 5, 's'},
++ { 'o', 0x48000000, 5, 'p'},
++ { 'o', 0x50000000, 6, 'g'},
++ { 'o', 0x54000000, 9, '-'},
++ { 'o', 0x54800000, 9, ','},
++ { 'o', 0x55000000, 8, 'h'},
++ { 'o', 0x56000000, 7, 'e'},
++ { 'o', 0x58000000, 7, 'y'},
++ { 'o', 0x5a000000, 7, 'a'},
++ { 'o', 0x5c000000, 6, 'c'},
++ { 'o', 0x60000000, 3, ' '},
++ { 'o', 0x80000000, 3, 'r'},
++ { 'o', 0xa0000000, 5, 't'},
++ { 'o', 0xa8000000, 5, 'o'},
++ { 'o', 0xb0000000, 8, '.'},
++ { 'o', 0xb1000000, 13, '!'},
++ { 'o', 0xb10d0000, 16, ';'},
++ { 'o', 0xb10e0000, 16, 'G'},
++ { 'o', 0xb10ff000, 20, 'C'},
++ { 'o', 0xb1100000, 12, '?'},
++ { 'o', 0xb1200000, 11, ':'},
++ { 'o', 0xb1400000, 10, '\''},
++ { 'o', 0xb1800000, 14, '/'},
++ { 'o', 0xb1840000, 14, ')'},
++ { 'o', 0xb1880000, 13, 'q'},
++ { 'o', 0xb1900000, 12, 'j'},
++ { 'o', 0xb1a00000, 11, 'z'},
++ { 'o', 0xb1c00000, 10, 'x'},
++ { 'o', 0xb2000000, 7, 'b'},
++ { 'o', 0xb4000000, 6, 'd'},
++ { 'o', 0xb8000000, 5, 'w'},
++ { 'o', 0xc0000000, 4, 'm'},
++ { 'o', 0xd0000000, 4, 'f'},
++ { 'o', 0xe0000000, 3, 'n'},
++ { 'p', 0x00000000, 4, 'p'},
++ { 'p', 0x10000000, 8, '-'},
++ { 'p', 0x11200000, 11, 'f'},
++ { 'p', 0x11400000, 11, 'k'},
++ { 'p', 0x11600000, 11, '!'},
++ { 'p', 0x11800000, 9, '?'},
++ { 'p', 0x12000000, 7, 'd'},
++ { 'p', 0x14000000, 6, 'm'},
++ { 'p', 0x18000000, 5, 't'},
++ { 'p', 0x20000000, 3, 'l'},
++ { 'p', 0x40000000, 3, ' '},
++ { 'p', 0x60000000, 3, 'o'},
++ { 'p', 0x80000000, 5, 'u'},
++ { 'p', 0x88000000, 5, 'h'},
++ { 'p', 0x90000000, 5, 's'},
++ { 'p', 0x98000000, 17, ESCAPE},
++ { 'p', 0x98080000, 13, 'g'},
++ { 'p', 0x98100000, 12, '/'},
++ { 'p', 0x98200000, 11, 'c'},
++ { 'p', 0x98400000, 11, 'n'},
++ { 'p', 0x98600000, 11, 'w'},
++ { 'p', 0x98800000, 9, ':'},
++ { 'p', 0x99000000, 10, '\''},
++ { 'p', 0x99c00000, 10, 'b'},
++ { 'p', 0x9a000000, 7, 'y'},
++ { 'p', 0x9c000000, 7, '.'},
++ { 'p', 0x9e000000, 7, ','},
++ { 'p', 0xa0000000, 3, 'r'},
++ { 'p', 0xc0000000, 4, 'a'},
++ { 'p', 0xd0000000, 4, 'i'},
++ { 'p', 0xe0000000, 3, 'e'},
++ { 'q', 0x00000000, 3, ','},
++ { 'q', 0x20000000, 3, '.'},
++ { 'q', 0x44000000, 6, 'a'},
++ { 'q', 0x60000000, 3, ' '},
++ { 'q', 0x80000000, 1, 'u'},
++ { 'r', 0x00000000, 3, 'a'},
++ { 'r', 0x20000000, 3, 'o'},
++ { 'r', 0x40000000, 4, 's'},
++ { 'r', 0x50000000, 4, 't'},
++ { 'r', 0x60000000, 7, 'f'},
++ { 'r', 0x62018000, 17, 'Z'},
++ { 'r', 0x62040000, 16, 'x'},
++ { 'r', 0x62050000, 16, ESCAPE},
++ { 'r', 0x62080000, 13, ';'},
++ { 'r', 0x62100000, 12, 'q'},
++ { 'r', 0x62200000, 12, 'j'},
++ { 'r', 0x62400000, 11, '!'},
++ { 'r', 0x62600000, 12, '/'},
++ { 'r', 0x62740000, 14, 'z'},
++ { 'r', 0x62780000, 13, ')'},
++ { 'r', 0x62800000, 9, ':'},
++ { 'r', 0x63000000, 8, '\''},
++ { 'r', 0x64000000, 7, ','},
++ { 'r', 0x66000000, 7, 'v'},
++ { 'r', 0x68000000, 6, 'u'},
++ { 'r', 0x6c000000, 6, 'm'},
++ { 'r', 0x70000000, 5, 'd'},
++ { 'r', 0x78000000, 8, '-'},
++ { 'r', 0x79000000, 8, 'b'},
++ { 'r', 0x7a000000, 9, 'w'},
++ { 'r', 0x7a800000, 10, '?'},
++ { 'r', 0x7ac00000, 10, 'h'},
++ { 'r', 0x7b000000, 8, 'p'},
++ { 'r', 0x7c000000, 6, 'k'},
++ { 'r', 0x80000000, 3, 'i'},
++ { 'r', 0xa0000000, 5, 'n'},
++ { 'r', 0xa8000000, 5, 'y'},
++ { 'r', 0xb0000000, 7, 'c'},
++ { 'r', 0xb2000000, 7, 'g'},
++ { 'r', 0xb4000000, 6, 'l'},
++ { 'r', 0xb8000000, 6, '.'},
++ { 'r', 0xbc000000, 6, 'r'},
++ { 'r', 0xc0000000, 3, ' '},
++ { 'r', 0xe0000000, 3, 'e'},
++ { 's', 0x00000000, 1, ' '},
++ { 's', 0x80000000, 4, '.'},
++ { 's', 0x90000000, 10, '!'},
++ { 's', 0x90400000, 10, 'g'},
++ { 's', 0x90800000, 9, 'b'},
++ { 's', 0x91000000, 8, 'n'},
++ { 's', 0x92000000, 9, 'f'},
++ { 's', 0x92800000, 10, 'r'},
++ { 's', 0x92c00000, 12, '/'},
++ { 's', 0x92d00000, 12, ')'},
++ { 's', 0x92e20000, 15, '"'},
++ { 's', 0x92e58000, 17, '@'},
++ { 's', 0x92e60000, 15, 'z'},
++ { 's', 0x92e80000, 13, 'v'},
++ { 's', 0x92f00000, 12, STOP},
++ { 's', 0x93000000, 8, 'm'},
++ { 's', 0x94000000, 6, 'c'},
++ { 's', 0x98000000, 5, ','},
++ { 's', 0xa0000000, 3, 't'},
++ { 's', 0xc0000000, 5, 'o'},
++ { 's', 0xc8000000, 5, 's'},
++ { 's', 0xd0000000, 6, 'u'},
++ { 's', 0xd4000000, 8, 'y'},
++ { 's', 0xd5000000, 9, 'w'},
++ { 's', 0xd5800000, 10, '?'},
++ { 's', 0xd5c00000, 10, '-'},
++ { 's', 0xd6000000, 8, ':'},
++ { 's', 0xd7000000, 12, ']'},
++ { 's', 0xd7100000, 12, ';'},
++ { 's', 0xd7200000, 11, 'd'},
++ { 's', 0xd7400000, 10, 'q'},
++ { 's', 0xd7800000, 9, '\''},
++ { 's', 0xd8000000, 6, 'p'},
++ { 's', 0xdc000000, 8, 'l'},
++ { 's', 0xdd000000, 8, 'k'},
++ { 's', 0xde000000, 7, 'a'},
++ { 's', 0xe0000000, 4, 'e'},
++ { 's', 0xf0000000, 5, 'h'},
++ { 's', 0xf8000000, 5, 'i'},
++ { 't', 0x00000000, 3, 'i'},
++ { 't', 0x20000000, 4, 'a'},
++ { 't', 0x30000000, 5, 'u'},
++ { 't', 0x38000000, 9, 'n'},
++ { 't', 0x38800000, 11, '!'},
++ { 't', 0x38a00000, 13, 'g'},
++ { 't', 0x38a80000, 13, ';'},
++ { 't', 0x38b94000, 19, 'j'},
++ { 't', 0x38ba0000, 16, 'E'},
++ { 't', 0x38bc0000, 14, ')'},
++ { 't', 0x38c00000, 10, '?'},
++ { 't', 0x39000000, 8, '-'},
++ { 't', 0x3a000000, 7, 'c'},
++ { 't', 0x3c000000, 6, '.'},
++ { 't', 0x40000000, 3, 'o'},
++ { 't', 0x60000000, 3, 'e'},
++ { 't', 0x80000000, 2, 'h'},
++ { 't', 0xc0000000, 8, 'v'},
++ { 't', 0xc1000000, 8, 'm'},
++ { 't', 0xc2000000, 7, 'l'},
++ { 't', 0xc4000000, 6, 't'},
++ { 't', 0xc8000000, 5, 'r'},
++ { 't', 0xd0000000, 6, 'y'},
++ { 't', 0xd4000000, 11, 'z'},
++ { 't', 0xd4300000, 13, 'p'},
++ { 't', 0xd4380000, 14, '/'},
++ { 't', 0xd43c0000, 14, 'k'},
++ { 't', 0xd4400000, 10, 'b'},
++ { 't', 0xd4800000, 10, ':'},
++ { 't', 0xd4c00000, 11, 'd'},
++ { 't', 0xd4e00000, 11, 'f'},
++ { 't', 0xd5000000, 8, 'w'},
++ { 't', 0xd6000000, 8, ','},
++ { 't', 0xd7000000, 8, '\''},
++ { 't', 0xd8000000, 5, 's'},
++ { 't', 0xe0000000, 3, ' '},
++ { 'u', 0x00000000, 5, 'b'},
++ { 'u', 0x08000000, 5, ' '},
++ { 'u', 0x10000000, 4, 'd'},
++ { 'u', 0x20000000, 4, 'e'},
++ { 'u', 0x30000000, 5, 'i'},
++ { 'u', 0x38000000, 7, 'y'},
++ { 'u', 0x3a000000, 8, 'z'},
++ { 'u', 0x3b000000, 11, 'w'},
++ { 'u', 0x3b200000, 12, 'q'},
++ { 'u', 0x3b300000, 13, 'j'},
++ { 'u', 0x3b380000, 15, 'u'},
++ { 'u', 0x3b3a0000, 15, '?'},
++ { 'u', 0x3b400000, 10, '-'},
++ { 'u', 0x3b800000, 10, 'o'},
++ { 'u', 0x3bc00000, 11, ':'},
++ { 'u', 0x3be00000, 12, 'h'},
++ { 'u', 0x3bf00000, 12, 'v'},
++ { 'u', 0x3c000000, 8, '\''},
++ { 'u', 0x3d000000, 9, ','},
++ { 'u', 0x3d800000, 10, '.'},
++ { 'u', 0x3dc00000, 10, 'x'},
++ { 'u', 0x3e000000, 8, 'f'},
++ { 'u', 0x3f000000, 8, 'k'},
++ { 'u', 0x40000000, 5, 'a'},
++ { 'u', 0x48000000, 5, 'g'},
++ { 'u', 0x50000000, 4, 'l'},
++ { 'u', 0x60000000, 3, 't'},
++ { 'u', 0x80000000, 4, 'p'},
++ { 'u', 0x90000000, 5, 'c'},
++ { 'u', 0x98000000, 5, 'm'},
++ { 'u', 0xa0000000, 3, 'n'},
++ { 'u', 0xc0000000, 3, 's'},
++ { 'u', 0xe0000000, 3, 'r'},
++ { 'v', 0x00000000, 3, 'a'},
++ { 'v', 0x20000000, 9, 'u'},
++ { 'v', 0x20b00000, 12, 'v'},
++ { 'v', 0x20c00000, 11, ','},
++ { 'v', 0x20e40000, 15, 't'},
++ { 'v', 0x20e78000, 18, ESCAPE},
++ { 'v', 0x20f00000, 12, 'l'},
++ { 'v', 0x21000000, 8, '\''},
++ { 'v', 0x22000000, 9, 's'},
++ { 'v', 0x22800000, 10, 'r'},
++ { 'v', 0x22c00000, 11, 'n'},
++ { 'v', 0x22e00000, 12, '@'},
++ { 'v', 0x22f00000, 12, ':'},
++ { 'v', 0x23000000, 8, 'y'},
++ { 'v', 0x24000000, 6, ' '},
++ { 'v', 0x28000000, 5, '.'},
++ { 'v', 0x30000000, 4, 'o'},
++ { 'v', 0x40000000, 2, 'i'},
++ { 'v', 0x80000000, 1, 'e'},
++ { 'w', 0x00000000, 2, 'i'},
++ { 'w', 0x40000000, 5, '.'},
++ { 'w', 0x50000000, 4, 'a'},
++ { 'w', 0x60000000, 3, 'e'},
++ { 'w', 0x80000000, 3, ' '},
++ { 'w', 0xa0000000, 3, 's'},
++ { 'w', 0xc0000000, 3, 'h'},
++ { 'w', 0xe0000000, 5, 'n'},
++ { 'w', 0xe8000000, 11, 'f'},
++ { 'w', 0xe8200000, 11, ']'},
++ { 'w', 0xe8400000, 11, '!'},
++ { 'w', 0xe8680000, 13, 'u'},
++ { 'w', 0xe8700000, 12, 'g'},
++ { 'w', 0xe8800000, 10, ':'},
++ { 'w', 0xe8c00000, 12, '?'},
++ { 'w', 0xe8d00000, 12, 't'},
++ { 'w', 0xe8e00000, 11, 'k'},
++ { 'w', 0xe9000000, 9, 'c'},
++ { 'w', 0xe9800000, 10, 'm'},
++ { 'w', 0xe9c00000, 10, '\''},
++ { 'w', 0xea000000, 8, ','},
++ { 'w', 0xeb000000, 8, 'l'},
++ { 'w', 0xec000000, 7, 'r'},
++ { 'w', 0xee000000, 10, 'd'},
++ { 'w', 0xee400000, 11, '-'},
++ { 'w', 0xee640000, 14, 'j'},
++ { 'w', 0xee800000, 9, 'b'},
++ { 'w', 0xef000000, 8, 'y'},
++ { 'w', 0xf0000000, 4, 'o'},
++ { 'x', 0x00000000, 4, 'i'},
++ { 'x', 0x10000000, 5, 'u'},
++ { 'x', 0x18000000, 6, 'f'},
++ { 'x', 0x1c000000, 7, ','},
++ { 'x', 0x1e000000, 7, 'm'},
++ { 'x', 0x20000000, 4, 'a'},
++ { 'x', 0x30b00000, 12, '/'},
++ { 'x', 0x30c00000, 10, '?'},
++ { 'x', 0x32000000, 7, 'y'},
++ { 'x', 0x34000000, 6, 'o'},
++ { 'x', 0x38000000, 5, 'e'},
++ { 'x', 0x40000000, 2, 'p'},
++ { 'x', 0x80000000, 4, 'c'},
++ { 'x', 0x90000000, 6, '.'},
++ { 'x', 0x94000000, 9, ':'},
++ { 'x', 0x94800000, 10, 'l'},
++ { 'x', 0x94e00000, 11, 'b'},
++ { 'x', 0x95000000, 8, '\''},
++ { 'x', 0x97000000, 9, 'h'},
++ { 'x', 0x97800000, 10, 'w'},
++ { 'x', 0x97d80000, 13, ';'},
++ { 'x', 0x97e00000, 11, ')'},
++ { 'x', 0x98000000, 5, '-'},
++ { 'x', 0xa0000000, 3, ' '},
++ { 'x', 0xc0000000, 2, 't'},
++ { 'y', 0x00000000, 3, 'o'},
++ { 'y', 0x20000000, 7, 'w'},
++ { 'y', 0x22000000, 11, ')'},
++ { 'y', 0x222a0000, 15, 'x'},
++ { 'y', 0x22300000, 12, 'k'},
++ { 'y', 0x22400000, 10, ';'},
++ { 'y', 0x22c00000, 12, ESCAPE},
++ { 'y', 0x22e00000, 11, '/'},
++ { 'y', 0x23000000, 8, 'b'},
++ { 'y', 0x24000000, 6, 'a'},
++ { 'y', 0x28000000, 6, 'i'},
++ { 'y', 0x2c000000, 6, 'd'},
++ { 'y', 0x30000000, 4, 's'},
++ { 'y', 0x40000000, 8, '?'},
++ { 'y', 0x41000000, 8, 'r'},
++ { 'y', 0x42000000, 8, 'p'},
++ { 'y', 0x43000000, 8, 'f'},
++ { 'y', 0x44000000, 6, 'n'},
++ { 'y', 0x48000000, 5, ','},
++ { 'y', 0x50000000, 4, '.'},
++ { 'y', 0x60000000, 5, 'e'},
++ { 'y', 0x68000000, 7, 't'},
++ { 'y', 0x6a000000, 7, 'm'},
++ { 'y', 0x6c000000, 6, ':'},
++ { 'y', 0x70000000, 5, '\''},
++ { 'y', 0x78000000, 10, 'h'},
++ { 'y', 0x78400000, 10, '!'},
++ { 'y', 0x78810000, 16, 'T'},
++ { 'y', 0x78830000, 16, 'P'},
++ { 'y', 0x78880000, 13, '"'},
++ { 'y', 0x78900000, 12, STOP},
++ { 'y', 0x78a00000, 11, ']'},
++ { 'y', 0x78c00000, 10, 'g'},
++ { 'y', 0x79000000, 8, 'c'},
++ { 'y', 0x7a000000, 7, '-'},
++ { 'y', 0x7c000000, 6, 'l'},
++ { 'y', 0x80000000, 1, ' '},
++ { 'z', 0x04000000, 7, '\''},
++ { 'z', 0x07000000, 8, 't'},
++ { 'z', 0x08000000, 6, ','},
++ { 'z', 0x0c000000, 6, '.'},
++ { 'z', 0x10000000, 4, 'l'},
++ { 'z', 0x20000000, 3, 'a'},
++ { 'z', 0x40000000, 4, 'y'},
++ { 'z', 0x50000000, 5, 'o'},
++ { 'z', 0x5c800000, 11, 's'},
++ { 'z', 0x5cc00000, 12, 'h'},
++ { 'z', 0x5d000000, 8, 'm'},
++ { 'z', 0x5e000000, 9, '-'},
++ { 'z', 0x5e800000, 9, 'u'},
++ { 'z', 0x5f100000, 14, 'q'},
++ { 'z', 0x5f140000, 14, 'n'},
++ { 'z', 0x5f180000, 13, 'v'},
++ { 'z', 0x5f800000, 9, 'b'},
++ { 'z', 0x60000000, 3, 'z'},
++ { 'z', 0x80000000, 2, 'e'},
++ { 'z', 0xc0000000, 3, ' '},
++ { 'z', 0xe0000000, 3, 'i'},
++ { '}', 0x0819c000, 18, STOP}
++};
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/h264utils.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/h264utils.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/h264utils.cpp 2007-02-07 22:00:57.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/h264utils.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -33,15 +33,14 @@
+ // C headers
+ #include <cstring>
+
+-// C++ headers
+-#include <iostream>
+-
+ // MythTV headers
++#include "mythverbose.h"
+ #include "h264utils.h"
+
+ extern "C" {
+ // from libavcodec
+ extern const uint8_t *ff_find_start_code(const uint8_t * p, const uint8_t *end, uint32_t * state);
++#include "avcodec.h"
+ }
+
+ namespace H264
+@@ -62,9 +61,16 @@
+
+ first_NAL_byte = H264::NALUnitType::UNKNOWN;
+
++ log2_max_frame_num = -1;
++ frame_num = 0;
++ prev_frame_num = -1;
++
+ saw_AU_delimiter = false;
+ saw_first_VCL_NAL_unit = false;
+ saw_sps = false;
++ separate_colour_plane_flag = false;
++ frame_mbs_only_flag = true;
++ new_VLC_NAL = false;
+
+ did_evaluate_once = false;
+ keyframe = false;
+@@ -127,7 +133,7 @@
+ // stage 3: did we see the AU's first VCL NAL unit yet?
+ if (!saw_first_VCL_NAL_unit && NALUnitType::IsVCLType(new_NAL_type))
+ {
+- saw_first_VCL_NAL_unit = true;
++ saw_first_VCL_NAL_unit = new_VLC_NAL;
+ saw_AU_delimiter = false;
+ state_changed = true;
+ if (saw_sps)
+@@ -154,9 +160,35 @@
+ if ((sync_accumulator & 0xffffff00) == 0x00000100)
+ {
+ uint8_t k = *(local_bytes-1);
++ uint8_t NAL_type = k & 0x1f;
+ sync_stream_offset = stream_offset;
+ keyframe = false;
+
++ if (NAL_type == NALUnitType::SPS ||
++ NAL_type == NALUnitType::SLICE ||
++ NAL_type == NALUnitType::SLICE_DPA)
++ {
++ /*
++ bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE
++ bytes larger then the actual read bits
++ */
++ if (local_bytes + 20 + FF_INPUT_BUFFER_PADDING_SIZE <
++ local_bytes_end)
++ {
++ init_get_bits(&gb, local_bytes,
++ 8 * (local_bytes_end - local_bytes));
++
++ if (NAL_type == NALUnitType::SPS)
++ decode_SPS(&gb);
++ else
++ decode_Header(&gb);
++ }
++ }
++ else if (NAL_type == NALUnitType::SLICE_IDR)
++ {
++ frame_num = 0;
++ }
++
+ KeyframePredicate(k);
+ first_NAL_byte = k;
+
+@@ -175,4 +207,143 @@
+ return saw_first_VCL_NAL_unit;
+ }
+
++void KeyframeSequencer::decode_Header(GetBitContext *gb)
++{
++ uint first_mb_in_slice;
++ uint slice_type;
++ uint pic_parameter_set_id;
++ bool field_pic_flag;
++ bool bottom_field_flag;
++
++ if (log2_max_frame_num < 1)
++ {
++ VERBOSE(VB_IMPORTANT, "KeyframeSequencer::decode_Header: "
++ "SPS has not been parsed!");
++ return;
++ }
++
++ new_VLC_NAL = false;
++
++ prev_frame_num = frame_num;
++
++ first_mb_in_slice = get_ue_golomb(gb);
++ slice_type = get_ue_golomb(gb);
++
++ pic_parameter_set_id = get_ue_golomb(gb);
++ if (pic_parameter_set_id != prev_pic_parameter_set_id)
++ {
++ new_VLC_NAL = true;
++ prev_pic_parameter_set_id = pic_parameter_set_id;
++ }
++
++ if (separate_colour_plane_flag)
++ get_bits(gb, 2); // colour_plane_id
++
++ frame_num = get_bits(gb, log2_max_frame_num);
++
++ if (frame_mbs_only_flag)
++ {
++ new_VLC_NAL = true;
++ }
++ else
++ {
++ /* From section 7.3.3 Slice header syntax
++ if (!frame_mbs_only_flag)
++ {
++ field_pic_flag = get_bits1(gb);
++ if (field_pic_flag)
++ bottom_field_flag = get_bits1(gb);
++ }
++ */
++
++ field_pic_flag = get_bits1(gb);
++ if (field_pic_flag != prev_field_pic_flag)
++ {
++ new_VLC_NAL = true;
++ prev_field_pic_flag = field_pic_flag;
++ }
++
++ if (field_pic_flag)
++ {
++ bottom_field_flag = get_bits1(gb);
++ if (bottom_field_flag != prev_bottom_field_flag)
++ {
++ new_VLC_NAL = !bottom_field_flag;
++ prev_bottom_field_flag = bottom_field_flag;
++ }
++ }
++ else
++ new_VLC_NAL = true;
++ }
++}
++
++/*
++ * libavcodec used for example
++ */
++void KeyframeSequencer::decode_SPS(GetBitContext * gb)
++{
++ int profile_idc, chroma_format_idc;
++
++ profile_idc = get_bits(gb, 8); // profile_idc
++ get_bits1(gb); // constraint_set0_flag
++ get_bits1(gb); // constraint_set1_flag
++ get_bits1(gb); // constraint_set2_flag
++ get_bits1(gb); // constraint_set3_flag
++ get_bits(gb, 4); // reserved
++ get_bits(gb, 8); // level_idc
++ get_ue_golomb(gb); // sps_id
++
++ if (profile_idc >= 100)
++ { // high profile
++ if ((chroma_format_idc = get_ue_golomb(gb)) == 3) // chroma_format_idc
++ separate_colour_plane_flag = (get_bits1(gb) == 1);
++
++ get_ue_golomb(gb); // bit_depth_luma_minus8
++ get_ue_golomb(gb); // bit_depth_chroma_minus8
++ get_bits1(gb); // qpprime_y_zero_transform_bypass_flag
++
++ if (get_bits1(gb)) // seq_scaling_matrix_present_flag
++ {
++ for (int idx = 0; idx < ((chroma_format_idc != 3) ? 8 : 12); ++idx)
++ {
++ get_bits1(gb); // scaling_list
++ }
++ }
++ }
++
++ log2_max_frame_num = get_ue_golomb(gb) + 4;
++
++ uint pic_order_cnt_type;
++ uint log2_max_pic_order_cnt_lsb;
++ bool delta_pic_order_always_zero_flag;
++ int offset_for_non_ref_pic;
++ int offset_for_top_to_bottom_field;
++ uint tmp;
++ uint num_ref_frames;
++ bool gaps_in_frame_num_allowed_flag;
++ uint pic_width_in_mbs;
++ uint pic_height_in_map_units;
++
++ pic_order_cnt_type = get_ue_golomb(gb);
++ if (pic_order_cnt_type == 0)
++ {
++ log2_max_pic_order_cnt_lsb = get_ue_golomb(gb) + 4;
++ }
++ else if (pic_order_cnt_type == 1)
++ {
++ delta_pic_order_always_zero_flag = get_bits1(gb);
++ offset_for_non_ref_pic = get_se_golomb(gb);
++ offset_for_top_to_bottom_field = get_se_golomb(gb);
++ tmp = get_ue_golomb(gb);
++ for (uint idx = 0; idx < tmp; ++idx)
++ get_se_golomb(gb); // offset_for_ref_frame[i]
++ }
++
++ num_ref_frames = get_ue_golomb(gb);
++ gaps_in_frame_num_allowed_flag = get_bits1(gb);
++ pic_width_in_mbs = get_ue_golomb(gb) + 1;
++ pic_height_in_map_units = get_ue_golomb(gb) + 1;
++ frame_mbs_only_flag = get_bits1(gb);
++}
++
+ } // namespace H264
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/h264utils.h mythtv-0.22-20081007/libs/libmythtv/mpeg/h264utils.h
+--- mythtv-0.21/libs/libmythtv/mpeg/h264utils.h 2007-02-07 22:00:57.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/h264utils.h 2008-10-07 13:51:19.000000000 +0000
+@@ -35,6 +35,11 @@
+
+ #include <stdint.h>
+
++extern "C" {
++#include <limits.h> // golomb.h should include this...
++#include "golomb.h"
++}
++
+ namespace H264
+ {
+
+@@ -174,6 +179,8 @@
+
+ private:
+ void KeyframePredicate(const uint8_t new_first_NAL_byte); /* throw() */
++ void decode_Header(GetBitContext *gb);
++ void decode_SPS(GetBitContext *gb);
+
+ bool errored;
+ bool state_changed;
+@@ -182,14 +189,27 @@
+ int64_t sync_stream_offset;
+
+ uint8_t first_NAL_byte;
++ int log2_max_frame_num;
++ int frame_num;
++ int prev_frame_num;
+
+ bool saw_AU_delimiter;
+ bool saw_first_VCL_NAL_unit;
+ bool saw_sps;
++ bool new_VLC_NAL;
++
++ bool separate_colour_plane_flag;
++ bool frame_mbs_only_flag;
++ bool prev_field_pic_flag;
++ bool prev_bottom_field_flag;
++ uint prev_pic_parameter_set_id;
++
+
+ bool did_evaluate_once;
+ bool keyframe;
+ int64_t keyframe_sync_stream_offset;
++
++ GetBitContext gb;
+ };
+
+ } // namespace H264
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/iso639.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/iso639.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/iso639.cpp 2008-02-19 20:08:37.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/iso639.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -3,6 +3,7 @@
+
+ #include "iso639.h"
+ #include "mythcontext.h"
++#include "mythuihelper.h"
+
+ QMap<int, QString> _iso639_key_to_english_name;
+ static QMap<int, int> _iso639_key2_to_key3;
+@@ -34,14 +35,15 @@
+ for (uint i = 0; true; i++)
+ {
+ QString q = QString("ISO639Language%1").arg(i);
+- QString lang = gContext->GetSetting(q, "").lower();
++ QString lang = gContext->GetSetting(q, "").toLower();
+ if (lang == "")
+ break;
+ _languages << lang;
+ }
+ if (_languages.empty())
+ {
+- QString s3 = iso639_str2_to_str3(gContext->GetLanguage().lower());
++ QString s3 = iso639_str2_to_str3(
++ GetMythUI()->GetLanguage().toLower());
+ if (!s3.isEmpty())
+ _languages << s3;
+ }
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/iso639.h mythtv-0.22-20081007/libs/libmythtv/mpeg/iso639.h
+--- mythtv-0.21/libs/libmythtv/mpeg/iso639.h 2006-10-07 23:01:31.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/iso639.h 2008-10-07 13:51:19.000000000 +0000
+@@ -59,6 +59,21 @@
+ return iso639_str3_to_key((const unsigned char*)iso639_2);
+ }
+
++static inline int iso639_str3_to_key(const QString &iso639_2)
++{
++ if (iso639_2.length() < 3)
++ {
++ return iso639_str3_to_key("und");
++ }
++ else
++ {
++ return ((iso639_2.at(0).toAscii()<<16) |
++ (iso639_2.at(1).toAscii()<<8) |
++ (iso639_2.at(2).toAscii()));
++ }
++}
++
++
+ static inline int iso639_str2_to_key2(const unsigned char *iso639_1)
+ {
+ return (iso639_1[0]<<8)|iso639_1[1];
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/mpegdescriptors.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegdescriptors.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/mpegdescriptors.cpp 2006-08-10 22:58:51.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegdescriptors.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -6,6 +6,10 @@
+ #include "atscdescriptors.h"
+ #include "dvbdescriptors.h"
+
++QMutex RegistrationDescriptor::description_map_lock;
++bool RegistrationDescriptor::description_map_initialized = false;
++QMap<QString,QString> RegistrationDescriptor::description_map;
++
+ desc_list_t MPEGDescriptor::Parse(
+ const unsigned char* data, uint len)
+ {
+@@ -448,19 +452,89 @@
+ return str;
+ }
+
++void RegistrationDescriptor::InitializeDescriptionMap(void)
++{
++ QMutexLocker locker(&description_map_lock);
++ if (description_map_initialized)
++ return;
++
++ description_map["AC-3"] = "ATSC audio stream A/52";
++ description_map["AVSV"] = "China A/V Working Group";
++ description_map["BDC0"] = "Broadcast Data Corporation Software Data Service";
++ description_map["BSSD"] = "SMPTE 302M-1998 Audio data as specified in (AES3)";
++ description_map["CAPO"] = "SMPTE 315M-1999 Camera Positioning Information";
++ description_map["CUEI"] = "SCTE 35 2003, Cable Digital Program Insertion Cueing Message";
++ description_map["DDED"] = "LGEUS Digital Delivery with encryption and decryption";
++ description_map["DISH"] = "EchoStar MPEG streams";
++ description_map["DRA1"] = "Chinese EIS SJ/T11368-2006 DRA digital audio";
++ description_map["DTS1"] = "DTS Frame size of 512 bytes";
++ description_map["DTS2"] = "DTS Frame size of 1024 bytes";
++ description_map["DTS3"] = "DTS Frame size of 2048";
++ description_map["DVDF"] = "DVD compatible MPEG2-TS";
++ description_map["ETV1"] = "CableLabs ETV info is present";
++ description_map["GA94"] = "ATSC program ID A/53";
++ description_map["GWKS"] = "GuideWorks EPG info";
++ description_map["HDMV"] = "Blu-Ray A/V for read-only media (H.264 TS)";
++ description_map["HDMX"] = "Matsushita-TS";
++ description_map["KLVA"] = "SMPTE RP 217-2001 MXF KLV packets present";
++ description_map["LU-A"] = "SMPTE RDD-11 HDSDI HD serial/video data";
++ description_map["MTRM"] = "D-VHS compatible MPEG2-TS";
++ description_map["NMR1"] = "Nielsen content identifier";
++ description_map["PAUX"] = "Philips ES containing low-speed data";
++ description_map["PMSF"] = "MPEG-TS stream modified by STB";
++ description_map["PRMC"] = "Philips ES containing remote control data";
++ description_map["SCTE"] = "SCTE 54 2003 Digital Video Service Multiplex and TS for Cable";
++ description_map["SEN1"] = "ATSC Private Information identifies source of stream";
++ description_map["SESF"] = "Blu-Ray A/V for ReWritable media (H.264 TS)";
++ description_map["SPLC"] = "SMPTE Proposed 312M Splice Point compatible TS";
++ description_map["SVMD"] = "SMPTE Proposed Video Metatdata Dictionary for MPEG2-TS";
++ description_map["SZMI"] = "ATSC Private Info from Building B";
++ description_map["TRIV"] = "ATSC Private Info from Triveni Digital";
++ description_map["TSBV"] = "Toshiba self-encoded H.264 TS";
++ description_map["TSHV"] = "Sony self-encoded MPEG-TS and private data";
++ description_map["TSMV"] = "Sony self-encoded MPEG-TS and private data";
++ description_map["TVG1"] = "TV Guide EPG Data";
++ description_map["TVG2"] = "TV Guide EPG Data";
++ description_map["TVG3"] = "TV Guide EPG Data";
++ description_map["ULE1"] = "IETF RFC4326 compatible MPEG2-TS";
++ description_map["VC-1"] = "SMPTE Draft RP 227 VC-1 Bitstream Transport Encodings";
++
++ for (uint i = 0; i <= 99; i++)
++ {
++ description_map[QString("US%1").arg(i, 2, QLatin1Char('0'))] =
++ "NIMA, Unspecified military application";
++ }
++
++ description_map_initialized = true;
++}
++
++QString RegistrationDescriptor::GetDescription(const QString &fmt)
++{
++ InitializeDescriptionMap();
++
++ QString ret = QString::null;
++ {
++ QMutexLocker locker(&description_map_lock);
++ QMap<QString,QString>::const_iterator it = description_map.find(fmt);
++ if (it != description_map.end())
++ ret = *it;
++ }
++
++ if (!ret.isNull())
++ ret.detach();
++
++ return ret;
++}
++
+ QString RegistrationDescriptor::toString() const
+ {
+ QString fmt = FormatIdentifierString();
+ QString msg = QString("Registration Descriptor: '%1' ").arg(fmt);
+- QString msg2 = "Unknown";
+- if (fmt == "CUEI")
+- msg2 = "SCTE 35 2003, Cable Digital Program Insertion Cueing Message";
+- else if (fmt == "AC-3")
+- msg2 = "ATSC audio stream A/52";
+- else if (fmt == "GA94")
+- msg2 = "ATSC program ID A/53";
+- else
+- msg2 = "Unknown, see http://www.smpte-ra.org/mpegreg.html";
++
++ QString msg2 = GetDescription(fmt);
++ if (msg2.isEmpty())
++ msg2 = "Unknown, see http://www.smpte-ra.org/mpegreg/mpegreg.html";
++
+ return msg + msg2;
+ }
+
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/mpegdescriptors.h mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegdescriptors.h
+--- mythtv-0.21/libs/libmythtv/mpeg/mpegdescriptors.h 2007-04-13 03:23:09.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegdescriptors.h 2008-10-07 13:51:19.000000000 +0000
+@@ -3,7 +3,18 @@
+ #ifndef _MPEG_DESCRIPTORS_H_
+ #define _MPEG_DESCRIPTORS_H_
+
++// ANSI C headers
+ #include <cassert>
++
++// C++ headers
++#include <vector>
++using namespace std;
++
++// Qt headers
++#include <QMutex>
++#include <QString>
++
++// MythTV
+ #include "iso639.h"
+
+ typedef vector<const unsigned char*> desc_list_t;
+@@ -188,6 +199,15 @@
+ QChar(_data[4]) + QChar(_data[5]);
+ }
+ QString toString() const;
++
++ private:
++ static void InitializeDescriptionMap(void);
++ static QString GetDescription(const QString &fmt);
++
++ private:
++ static QMutex description_map_lock;
++ static bool description_map_initialized;
++ static QMap<QString,QString> description_map;
+ };
+
+ class ConditionalAccessDescriptor : public MPEGDescriptor
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/mpegstreamdata.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegstreamdata.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/mpegstreamdata.cpp 2008-03-07 21:53:09.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegstreamdata.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -8,8 +8,7 @@
+ #include <sys/time.h> // for gettimeofday
+
+ // Qt headers
+-#include <qstring.h>
+-#include <qdeepcopy.h>
++#include <QString>
+
+ // MythTV headers
+ #include "mpegstreamdata.h"
+@@ -140,7 +139,8 @@
+
+ void MPEGStreamData::SetRecordingType(const QString &recording_type)
+ {
+- _recording_type = QDeepCopy<QString>(recording_type);
++ _recording_type = recording_type;
++ _recording_type.detach();
+ uint neededVideo = (_recording_type == "tv") ? 1 : 0;
+ uint neededAudio = (_recording_type == "audio") ? 1 : 0;
+ SetVideoStreamsRequired(neededVideo);
+@@ -149,7 +149,9 @@
+
+ QString MPEGStreamData::GetRecordingType(void) const
+ {
+- return QDeepCopy<QString>(_recording_type);
++ QString tmp = _recording_type;
++ tmp.detach();
++ return tmp;
+ }
+
+ void MPEGStreamData::SetEITHelper(EITHelper *eit_helper)
+@@ -524,8 +526,8 @@
+ sd = dynamic_cast<ATSCStreamData*>(this);
+ if (sd && !MPEGDescriptor::Find(gdesc, DescriptorID::caption_service))
+ {
+- tvct = sd->GetAllCachedTVCTs();
+- cvct = sd->GetAllCachedCVCTs();
++ tvct = sd->GetCachedTVCTs();
++ cvct = sd->GetCachedCVCTs();
+
+ desc_list_t vdesc = extract_atsc_desc(
+ tvct, cvct, pmt.ProgramNumber());
+@@ -991,6 +993,12 @@
+ HandleTSTables(&tspacket);
+ }
+ }
++ else if (!tspacket.ScramplingControl() && IsWritingPID(tspacket.PID()))
++ {
++ // PCRPID and other streams we're writing may not have payload...
++ for (uint j = 0; j < _ts_writing_listeners.size(); j++)
++ _ts_writing_listeners[j]->ProcessTSPacket(tspacket);
++ }
+
+ return true;
+ }
+@@ -1263,6 +1271,21 @@
+ return pat;
+ }
+
++pat_vec_t MPEGStreamData::GetCachedPATs(uint tsid) const
++{
++ QMutexLocker locker(&_cache_lock);
++ pat_vec_t pats;
++
++ for (uint i=0; i < 256; i++)
++ {
++ ProgramAssociationTable *pat = GetCachedPAT(tsid, i);
++ if (pat)
++ pats.push_back(pat);
++ }
++
++ return pats;
++}
++
+ pat_vec_t MPEGStreamData::GetCachedPATs(void) const
+ {
+ QMutexLocker locker(&_cache_lock);
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/mpegstreamdata.h mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegstreamdata.h
+--- mythtv-0.21/libs/libmythtv/mpeg/mpegstreamdata.h 2008-01-14 16:45:33.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegstreamdata.h 2008-10-07 13:51:19.000000000 +0000
+@@ -200,6 +200,7 @@
+ bool HasCachedAllPMTs(void) const;
+
+ const pat_ptr_t GetCachedPAT(uint tsid, uint section_num) const;
++ pat_vec_t GetCachedPATs(uint tsid) const;
+ pat_vec_t GetCachedPATs(void) const;
+ pat_map_t GetCachedPATMap(void) const;
+
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/mpegtables.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegtables.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/mpegtables.cpp 2008-02-12 21:33:20.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegtables.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -2,6 +2,7 @@
+ // Copyright (c) 2003-2004, Daniel Thor Kristjansson
+ #include "mpegtables.h"
+ #include "atscdescriptors.h"
++#include "libmythdb/mythverbose.h"
+
+ const unsigned char DEFAULT_PAT_HEADER[8] =
+ {
+@@ -239,7 +240,7 @@
+ "past end of buffer").arg(i));
+ return false;
+ }
+- pos += 5 + ((ptr[3] << 8) | ptr[4]) & 0x0fff;
++ pos += 5 + (((ptr[3] << 8) | ptr[4]) & 0x0fff);
+ }
+ if (pos > bufend)
+ {
+@@ -751,65 +752,63 @@
+ const char *StreamID::toString(uint streamID)
+ {
+ // valid for some ATSC/DVB stuff too
+- char* retval = "unknown";
+-
+- // video
+- if (StreamID::MPEG2Video==streamID)
++ switch (streamID)
++ {
++ case StreamID::MPEG2Video:
+ return "video-mpeg2";
+- else if (StreamID::MPEG1Video==streamID)
++ case StreamID::MPEG1Video:
+ return "video-mpeg1";
+- else if (StreamID::MPEG4Video==streamID)
++ case StreamID::MPEG4Video:
+ return "video-mpeg4";
+- else if (StreamID::H264Video==streamID)
++ case StreamID::H264Video:
+ return "video-h264";
+- else if (StreamID::OpenCableVideo==streamID)
++ case StreamID::OpenCableVideo:
+ return "video-opencable";
+
+ // audio
+- else if (StreamID::AC3Audio==streamID)
++ case StreamID::AC3Audio:
+ return "audio-ac3"; // EIT, PMT
+- else if (StreamID::MPEG2Audio==streamID)
++ case StreamID::MPEG2Audio:
+ return "audio-mp2-layer[1,2,3]"; // EIT, PMT
+- else if (StreamID::MPEG1Audio==streamID)
++ case StreamID::MPEG1Audio:
+ return "audio-mp1-layer[1,2,3]"; // EIT, PMT
+- else if (StreamID::AACAudio==streamID)
++ case StreamID::AACAudio:
+ return "audio-aac"; // EIT, PMT
+- else if (StreamID::DTSAudio==streamID)
++ case StreamID::DTSAudio:
+ return "audio-dts"; // EIT, PMT
+
+ // other
+- else if (StreamID::PrivSec==streamID)
++ case StreamID::PrivSec:
+ return "private-sec";
+- else if (StreamID::PrivData==streamID)
++ case StreamID::PrivData:
+ return "private-data";
+
+ // DSMCC Object Carousel
+- else if (StreamID::DSMCC_A==streamID)
++ case StreamID::DSMCC_A:
+ return "dsmcc-a encap";
+- else if (StreamID::DSMCC_B==streamID)
++ case StreamID::DSMCC_B:
+ return "dsmcc-b std data";
+- else if (StreamID::DSMCC_C==streamID)
++ case StreamID::DSMCC_C:
+ return "dsmcc-c NPD data";
+- else if (StreamID::DSMCC_D==streamID)
++ case StreamID::DSMCC_D:
+ return "dsmcc-d data";
+
+- else switch (streamID)
+- {
+- case (TableID::STUFFING):
+- retval="stuffing"; break; // optionally in any
+- case (TableID::CAPTION):
+- retval="caption service"; break; // EIT, optionally in PMT
+- case (TableID::CENSOR):
+- retval="censor"; break; // EIT, optionally in PMT
+- case (TableID::ECN):
+- retval="extended channel name"; break;
+- case (TableID::SRVLOC):
+- retval="service location"; break; // required in VCT
+- case (TableID::TSS): // other channels with same stuff
+- retval="time-shifted service"; break;
+- case (TableID::CMPNAME): retval="component name"; break; //??? PMT
++ //case TableID::STUFFING: XXX: Duplicate?
++ // return "stuffing"; // optionally in any
++ case TableID::CAPTION:
++ return "caption service"; // EIT, optionally in PMT
++ case TableID::CENSOR:
++ return "censor"; // EIT, optionally in PMT
++ case TableID::ECN:
++ return "extended channel name";
++ case TableID::SRVLOC:
++ return "service location"; // required in VCT
++ case TableID::TSS: // other channels with same stuff
++ return "time-shifted service";
++ case TableID::CMPNAME:
++ return "component name"; //??? PMT
+ }
+- return retval;
++ return "unknown";
+ }
+
+ QString ProgramMapTable::GetLanguage(uint i) const
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/mpegtables.h mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegtables.h
+--- mythtv-0.21/libs/libmythtv/mpeg/mpegtables.h 2007-12-05 22:03:50.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/mpegtables.h 2008-10-07 13:51:19.000000000 +0000
+@@ -73,11 +73,11 @@
+ DataH2221End = 0xf8,
+ AncillaryData = 0xf9,
+ MPEGReservedFA = 0xfa,
+- MPEGReservedFB = 0xfb,
++ FlexMux = 0xfb, // MPEG-2 13818-1
+ MPEGReservedFC = 0xfc,
+ MPEGReservedFD = 0xfd,
+ MPEGReservedFE = 0xfe,
+- MPEGReservedFF = 0xff,
++ ProgramStreamDirectory = 0xff, // MPEG-2 13818-1
+ };
+ };
+
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/pespacket.cpp mythtv-0.22-20081007/libs/libmythtv/mpeg/pespacket.cpp
+--- mythtv-0.21/libs/libmythtv/mpeg/pespacket.cpp 2006-09-07 18:55:03.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/pespacket.cpp 2008-10-07 13:51:19.000000000 +0000
+@@ -1,15 +1,15 @@
+ // -*- Mode: c++ -*-
+ // Copyright (c) 2003-2004, Daniel Thor Kristjansson
++#include "libmythdb/mythverbose.h"
+ #include "pespacket.h"
+ #include "mpegtables.h"
+-#include "mythcontext.h"
+
+ extern "C" {
+ #include "mythconfig.h"
+-#include "../libavcodec/avcodec.h"
+-#include "../libavformat/avformat.h"
+-#include "../libavutil/crc.h"
+-#include "../libavutil/bswap.h"
++#include "libavcodec/avcodec.h"
++#include "libavformat/avformat.h"
++#include "libavutil/crc.h"
++#include "libavutil/bswap.h"
+ }
+
+ #include <vector>
+@@ -113,7 +113,7 @@
+ }
+
+ memcpy(buf, _fullbuffer, TSPacket::SIZE);
+- INCR_CC(cc); buf[3] = buf[3] & 0xf0 | cc;
++ INCR_CC(cc); buf[3] = (buf[3] & 0xf0) | cc;
+ if (size <= TSPacket::SIZE)
+ return TSPacket::SIZE;
+
+@@ -334,20 +334,24 @@
+ unsigned char *pes_alloc(uint size)
+ {
+ QMutexLocker locker(&pes_alloc_mutex);
++#ifndef USING_VALGRIND
+ if (size <= 188)
+ return get_188_block();
+ else if (size <= 4096)
+ return get_4096_block();
++#endif // USING_VALGRIND
+ return (unsigned char*) malloc(size);
+ }
+
+ void pes_free(unsigned char *ptr)
+ {
+ QMutexLocker locker(&pes_alloc_mutex);
++#ifndef USING_VALGRIND
+ if (is_188_block(ptr))
+ return_188_block(ptr);
+ else if (is_4096_block(ptr))
+ return_4096_block(ptr);
+ else
++#endif // USING_VALGRIND
+ free(ptr);
+ }
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/pespacket.h mythtv-0.22-20081007/libs/libmythtv/mpeg/pespacket.h
+--- mythtv-0.21/libs/libmythtv/mpeg/pespacket.h 2007-01-11 22:12:11.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/pespacket.h 2008-10-07 13:51:19.000000000 +0000
+@@ -9,6 +9,7 @@
+ */
+
+ #include "tspacket.h"
++#include "libmythdb/mythverbose.h"
+
+ unsigned char *pes_alloc(uint size);
+ void pes_free(unsigned char *ptr);
+@@ -45,7 +46,8 @@
+ protected:
+ // does not create it's own data
+ PESPacket(const TSPacket* tspacket, bool)
+- : _pesdata(NULL), _fullbuffer(NULL), _pesdataSize(184), _allocSize(0)
++ : _pesdata(NULL), _fullbuffer(NULL),
++ _ccLast(tspacket->ContinuityCounter()), _allocSize(0)
+ {
+ InitPESPacket(const_cast<TSPacket&>(*tspacket));
+ _fullbuffer = const_cast<unsigned char*>(tspacket->data());
+@@ -55,7 +57,7 @@
+ PESPacket(const unsigned char *pesdata, bool)
+ : _pesdata(const_cast<unsigned char*>(pesdata)),
+ _fullbuffer(const_cast<unsigned char*>(pesdata)),
+- _pesdataSize(0), _allocSize(0)
++ _psiOffset(0), _ccLast(255), _allocSize(0)
+ {
+ _badPacket = !VerifyCRC();
+ _pesdataSize = max(((int)Length())-1 + (HasCRC() ? 4 : 0), (int)0);
+@@ -260,9 +262,6 @@
+ class SequenceHeader
+ {
+ public:
+- SequenceHeader() {;}
+- ~SequenceHeader() {;}
+-
+ uint width(void) const { return (data[0] <<4) | (data[1]>>4); }
+ uint height(void) const { return ((data[1] & 0xf)<<8) | data[2]; }
+ uint aspectNum(void) const { return data[3] >> 4; }
+@@ -271,6 +270,9 @@
+ float aspect(bool mpeg1) const;
+
+ private:
++ SequenceHeader() {;} // only used via reinterpret cast
++ ~SequenceHeader() {;}
++
+ unsigned char data[11];
+ static const float mpeg1_aspect[16];
+ static const float mpeg2_aspect[16];
+diff -Nru mythtv-0.21/libs/libmythtv/mpeg/tspacket.h mythtv-0.22-20081007/libs/libmythtv/mpeg/tspacket.h
+--- mythtv-0.21/libs/libmythtv/mpeg/tspacket.h 2008-02-14 21:04:27.000000000 +0000
++++ mythtv-0.22-20081007/libs/libmythtv/mpeg/tspacket.h 2008-10-07 13:51:19.000000000 +0000
+@@ -22,10 +22,22 @@
+ */
+ class TSHeader {
+ public:
+- TSHeader() { _tsdata[0] = SYNC_BYTE; }
+- TSHeader(int cc) {
++ TSHeader()
++ {
++ _tsdata[0] = SYNC_BYTE;
++ /*
++ no need to init rest of header, this is only a part of a larger
++ packets which initialize the rest of the data differently.
++ */
++ }
++ TSHeader(int cc)
++ {
+ _tsdata[0] = SYNC_BYTE;
+ SetContinuityCounter(cc);
++ /*
++ no need to init rest of header, this is only a part of a larger
++ packets which initialize the rest of the data differently.
++ */
+ }
+ void InitHeader(const unsigned char* header) {
+ if (header)
+@@ -57,7 +69,7 @@
+ //3.0 2 bit transport_scrambling_control (00,01 OK; 10,11 scrambled)
+ unsigned int ScramplingControl() const { return (_tsdata[3] >> 6) & 0x3; }
+ //3.2 2 bit adaptation_field_control
+- // (01-no adptation field,payload only
++ // (01-no adaptation field,payload only
+ // 10-adaptation field only,no payload
+ // 11-adaptation field followed by payload
+ // 00-reserved)
+@@ -74,10 +86,6 @@
+ bool HasAdaptationField() const { return bool(_tsdata[3] & 0x20); }
+ bool HasPayload() const { return bool(_tsdata[3] & 0x10); }
+
+- unsigned int AFCOffset() const { // only works if AFC fits in TSPacket
+- return HasAdaptationField() ? _tsdata[4]+1+4 : 4;
+- }
+-
+ void SetTransportError(bool err) {
+ if (err) _tsdata[1] |= 0x80; else _tsdata[1] &= (0xff-(0x80));
+ }
+@@ -119,7 +127,9 @@
+ {
+ friend class PESPacket;
+ public:
+- TSPacket() : TSHeader() {}
++ /* note: payload is intenionally left uninitialized */
++ TSPacket() : TSHeader() { }
++
+ static TSPacket* CreatePayloadOnlyPacket()
+ {
+ TSPacket *pkt = new TSPacket();
+@@ -141,6 +151,12 @@
+ memcpy(_tspayload, payload, PAYLOAD_SIZE);
+ }
+
++ // This points outside the TSHeader data, but is declared here because
++ // it is used for the different types of packets that employ a TS Header
++ unsigned int AFCOffset() const { // only works if AFC fits in TSPacket
++ return HasAdaptationField() ? _tspayload[0]+1+4 : 4;
++ }
++
+ //4.0 8 bits, iff payloadStart(), points to start of field
+ unsigned int StartOfFieldPointer() const { return data()[AFCOffset()]; }
+ void SetStartOfFieldPointer(uint sof) { data()[AFCOffset()] = sof; }