aboutsummaryrefslogtreecommitdiffstats
path: root/fastlib
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahoo-inc.com>2017-05-04 09:45:41 +0200
committerArne H Juul <arnej@yahoo-inc.com>2017-05-04 09:45:41 +0200
commit6c8f6ac515a2218552820cd169147f341a2716d8 (patch)
treed8e024c20043c3fcc7b1fd7eb936a272ae1d1986 /fastlib
parentc19b4069faa5cfa65145cc5708292d4b7b353eae (diff)
reindent
Diffstat (limited to 'fastlib')
-rw-r--r--fastlib/src/vespa/fastlib/io/bufferedfile.cpp6
-rw-r--r--fastlib/src/vespa/fastlib/io/bufferedfile.h1
-rw-r--r--fastlib/src/vespa/fastlib/io/bufferedinputstream.cpp362
-rw-r--r--fastlib/src/vespa/fastlib/io/bufferedinputstream.h8
-rw-r--r--fastlib/src/vespa/fastlib/io/bufferedoutputstream.cpp208
-rw-r--r--fastlib/src/vespa/fastlib/io/bufferedoutputstream.h6
-rw-r--r--fastlib/src/vespa/fastlib/io/fileinputstream.cpp4
-rw-r--r--fastlib/src/vespa/fastlib/io/fileinputstream.h11
-rw-r--r--fastlib/src/vespa/fastlib/io/fileoutputstream.h14
-rw-r--r--fastlib/src/vespa/fastlib/io/filterinputstream.h8
-rw-r--r--fastlib/src/vespa/fastlib/io/filteroutputstream.h8
-rw-r--r--fastlib/src/vespa/fastlib/io/inputstream.h4
-rw-r--r--fastlib/src/vespa/fastlib/io/outputstream.h5
-rw-r--r--fastlib/src/vespa/fastlib/io/tests/bufferedfiletest.cpp160
-rw-r--r--fastlib/src/vespa/fastlib/io/tests/bufferedstreamtest.cpp332
-rw-r--r--fastlib/src/vespa/fastlib/net/httpchunkedinputstream.cpp270
-rw-r--r--fastlib/src/vespa/fastlib/net/httpchunkedinputstream.h9
-rw-r--r--fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.cpp184
-rw-r--r--fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.h9
-rw-r--r--fastlib/src/vespa/fastlib/net/httpheaderparser.cpp230
-rw-r--r--fastlib/src/vespa/fastlib/net/httpheaderparser.h4
-rw-r--r--fastlib/src/vespa/fastlib/net/httpserver.cpp1546
-rw-r--r--fastlib/src/vespa/fastlib/net/httpserver.h61
-rw-r--r--fastlib/src/vespa/fastlib/net/socket.cpp56
-rw-r--r--fastlib/src/vespa/fastlib/net/socket.h20
-rw-r--r--fastlib/src/vespa/fastlib/net/tests/httpheaderparsertest.cpp69
-rw-r--r--fastlib/src/vespa/fastlib/net/url.cpp58
-rw-r--r--fastlib/src/vespa/fastlib/net/url.h6
-rw-r--r--fastlib/src/vespa/fastlib/testsuite/suite.h225
-rw-r--r--fastlib/src/vespa/fastlib/testsuite/test.cpp129
-rw-r--r--fastlib/src/vespa/fastlib/testsuite/test.h102
-rw-r--r--fastlib/src/vespa/fastlib/text/apps/extcase.cpp268
-rw-r--r--fastlib/src/vespa/fastlib/text/apps/unicode_propertydump.cpp10
-rw-r--r--fastlib/src/vespa/fastlib/text/apps/unicode_tolowerdump.cpp10
-rw-r--r--fastlib/src/vespa/fastlib/text/latintokenizer.h269
-rw-r--r--fastlib/src/vespa/fastlib/text/normwordfolder.cpp2102
-rw-r--r--fastlib/src/vespa/fastlib/text/normwordfolder.h287
-rw-r--r--fastlib/src/vespa/fastlib/text/tests/characterclasstest.cpp9
-rw-r--r--fastlib/src/vespa/fastlib/text/tests/latintokenizertest.cpp8
-rw-r--r--fastlib/src/vespa/fastlib/text/tests/latintokenizertest.h566
-rw-r--r--fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.cpp9
-rw-r--r--fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.h58
-rw-r--r--fastlib/src/vespa/fastlib/text/tests/wordfolderstest.cpp9
-rw-r--r--fastlib/src/vespa/fastlib/text/tests/wordfolderstest.h200
-rw-r--r--fastlib/src/vespa/fastlib/text/unicodeutil-charprops.cpp3328
-rw-r--r--fastlib/src/vespa/fastlib/text/unicodeutil-lowercase.cpp1280
-rw-r--r--fastlib/src/vespa/fastlib/text/unicodeutil.cpp385
-rw-r--r--fastlib/src/vespa/fastlib/text/unicodeutil.h112
-rw-r--r--fastlib/src/vespa/fastlib/text/wordfolder.h15
-rw-r--r--fastlib/src/vespa/fastlib/util/bag.h771
-rw-r--r--fastlib/src/vespa/fastlib/util/base64.cpp260
-rw-r--r--fastlib/src/vespa/fastlib/util/base64.h71
-rw-r--r--fastlib/src/vespa/fastlib/util/tests/bagtest.cpp2
-rw-r--r--fastlib/src/vespa/fastlib/util/tests/bagtest.h688
-rw-r--r--fastlib/src/vespa/fastlib/util/tests/base64test.cpp156
-rw-r--r--fastlib/src/vespa/fastlib/util/tests/wildcard_match_test.cpp56
-rw-r--r--fastlib/src/vespa/fastlib/util/wildcard_match.h63
57 files changed, 7527 insertions, 7580 deletions
diff --git a/fastlib/src/vespa/fastlib/io/bufferedfile.cpp b/fastlib/src/vespa/fastlib/io/bufferedfile.cpp
index 8d5aef0c097..ae498595e35 100644
--- a/fastlib/src/vespa/fastlib/io/bufferedfile.cpp
+++ b/fastlib/src/vespa/fastlib/io/bufferedfile.cpp
@@ -204,8 +204,8 @@ const char *
Fast_BufferedFile::GetFileName(void) const
{
return (_file.get() == NULL)
- ? ""
- : _file->GetFileName();
+ ? ""
+ : _file->GetFileName();
}
char *
@@ -382,7 +382,7 @@ size_t computeBufLen(size_t buflen)
buflen = 1 << (bitCount - 1);
if (buflen & (MIN_ALIGNMENT-1)) {
- buflen = std::max(MIN_ALIGNMENT, buflen & ~(MIN_ALIGNMENT-1));
+ buflen = std::max(MIN_ALIGNMENT, buflen & ~(MIN_ALIGNMENT-1));
}
return buflen;
}
diff --git a/fastlib/src/vespa/fastlib/io/bufferedfile.h b/fastlib/src/vespa/fastlib/io/bufferedfile.h
index 377965dff0d..a25bd82d602 100644
--- a/fastlib/src/vespa/fastlib/io/bufferedfile.h
+++ b/fastlib/src/vespa/fastlib/io/bufferedfile.h
@@ -251,4 +251,3 @@ public:
void alignEndForDirectIO();
};
-
diff --git a/fastlib/src/vespa/fastlib/io/bufferedinputstream.cpp b/fastlib/src/vespa/fastlib/io/bufferedinputstream.cpp
index 7b1da7b3293..26bab632aeb 100644
--- a/fastlib/src/vespa/fastlib/io/bufferedinputstream.cpp
+++ b/fastlib/src/vespa/fastlib/io/bufferedinputstream.cpp
@@ -3,243 +3,243 @@
#include "bufferedinputstream.h"
Fast_BufferedInputStream::Fast_BufferedInputStream(Fast_InputStream &in, size_t bufferSize)
- : Fast_FilterInputStream(in),
- _buffer(new char[bufferSize]),
- _bufferSize((_buffer != NULL) ? bufferSize : 0),
- _bufferUsed(0),
- _bufferRead(0),
- _nextWillFail(false)
+ : Fast_FilterInputStream(in),
+ _buffer(new char[bufferSize]),
+ _bufferSize((_buffer != NULL) ? bufferSize : 0),
+ _bufferUsed(0),
+ _bufferRead(0),
+ _nextWillFail(false)
{
}
Fast_BufferedInputStream::~Fast_BufferedInputStream()
{
- delete [] _buffer;
+ delete [] _buffer;
}
ssize_t
Fast_BufferedInputStream::Available()
{
- return _in->Available() + _bufferUsed - _bufferRead;
+ return _in->Available() + _bufferUsed - _bufferRead;
}
bool
Fast_BufferedInputStream::Close()
{
- return _in->Close();
+ return _in->Close();
}
ssize_t
Fast_BufferedInputStream::Skip(size_t skipNBytes)
{
- ssize_t numBytesSkipped = 0;
-
- if (_nextWillFail) {
- _nextWillFail = false;
- return -1;
- }
-
- if (skipNBytes > _bufferUsed - _bufferRead) {
- // First, skip all bytes in buffer
- numBytesSkipped = _bufferUsed - _bufferRead;
- _bufferUsed = _bufferRead = 0;
-
- // Skip rest of bytes in slave stream
- ssize_t slaveSkipped = _in->Skip(skipNBytes - numBytesSkipped);
- if (slaveSkipped < 0) {
- if (numBytesSkipped > 0) {
- _nextWillFail = true;
- } else {
- numBytesSkipped = slaveSkipped;
- }
- } else {
- numBytesSkipped += slaveSkipped;
+ ssize_t numBytesSkipped = 0;
+
+ if (_nextWillFail) {
+ _nextWillFail = false;
+ return -1;
}
- } else {
- // Skip all skipNBytes in buffer
- _bufferRead += skipNBytes;
- if (_bufferRead == _bufferUsed) {
- _bufferUsed = _bufferRead = 0;
+ if (skipNBytes > _bufferUsed - _bufferRead) {
+ // First, skip all bytes in buffer
+ numBytesSkipped = _bufferUsed - _bufferRead;
+ _bufferUsed = _bufferRead = 0;
+
+ // Skip rest of bytes in slave stream
+ ssize_t slaveSkipped = _in->Skip(skipNBytes - numBytesSkipped);
+ if (slaveSkipped < 0) {
+ if (numBytesSkipped > 0) {
+ _nextWillFail = true;
+ } else {
+ numBytesSkipped = slaveSkipped;
+ }
+ } else {
+ numBytesSkipped += slaveSkipped;
+ }
+
+ } else {
+ // Skip all skipNBytes in buffer
+ _bufferRead += skipNBytes;
+ if (_bufferRead == _bufferUsed) {
+ _bufferUsed = _bufferRead = 0;
+ }
+ numBytesSkipped = skipNBytes;
}
- numBytesSkipped = skipNBytes;
- }
- return numBytesSkipped;
+ return numBytesSkipped;
}
ssize_t
Fast_BufferedInputStream::Read(void *targetBuffer, size_t length)
{
- // This function will under no circumstance read more than once from
- // its slave stream, in order to prevent blocking on input.
-
- if (_nextWillFail) {
- _nextWillFail = false;
- return -1;
- }
-
- ssize_t numBytesRead = 0;
- char* to = static_cast<char*>(targetBuffer);
- size_t bufferRemain = _bufferUsed - _bufferRead;
+ // This function will under no circumstance read more than once from
+ // its slave stream, in order to prevent blocking on input.
- if (length <= bufferRemain) {
- memcpy(to, &_buffer[_bufferRead], length);
- numBytesRead += length;
- _bufferRead += length;
- if (_bufferRead == _bufferUsed) {
- _bufferRead = _bufferUsed = 0;
+ if (_nextWillFail) {
+ _nextWillFail = false;
+ return -1;
}
- } else {
- // Use the data currently in the buffer, then read from slave stream.
- if (bufferRemain > 0) {
- memcpy(to, &_buffer[_bufferRead], bufferRemain);
- numBytesRead += bufferRemain;
- length -= bufferRemain;
- to += bufferRemain;
- }
- _bufferUsed = 0;
- _bufferRead = 0;
- ssize_t slaveRead;
-
- // If remaining data to be read can fit in the buffer, put it
- // there, otherwise read directly to receiver and empty the buffer.
- if (length < _bufferSize) {
- slaveRead = Fast_FilterInputStream::Read(_buffer, _bufferSize);
+ ssize_t numBytesRead = 0;
+ char* to = static_cast<char*>(targetBuffer);
+ size_t bufferRemain = _bufferUsed - _bufferRead;
+
+ if (length <= bufferRemain) {
+ memcpy(to, &_buffer[_bufferRead], length);
+ numBytesRead += length;
+ _bufferRead += length;
+ if (_bufferRead == _bufferUsed) {
+ _bufferRead = _bufferUsed = 0;
+ }
} else {
- slaveRead = Fast_FilterInputStream::Read(to, length);
- }
+ // Use the data currently in the buffer, then read from slave stream.
- if (slaveRead > 0) {
- if (length < _bufferSize) {
- // We read to buffer, so copy from buffer to receiver.
- if (length < static_cast<size_t>(slaveRead)) {
- memcpy(to, _buffer, length);
- numBytesRead += length;
- _bufferUsed = slaveRead;
- _bufferRead = length;
+ if (bufferRemain > 0) {
+ memcpy(to, &_buffer[_bufferRead], bufferRemain);
+ numBytesRead += bufferRemain;
+ length -= bufferRemain;
+ to += bufferRemain;
+ }
+ _bufferUsed = 0;
+ _bufferRead = 0;
+ ssize_t slaveRead;
+
+ // If remaining data to be read can fit in the buffer, put it
+ // there, otherwise read directly to receiver and empty the buffer.
+ if (length < _bufferSize) {
+ slaveRead = Fast_FilterInputStream::Read(_buffer, _bufferSize);
} else {
- memcpy(to, _buffer, slaveRead);
- numBytesRead += slaveRead;
+ slaveRead = Fast_FilterInputStream::Read(to, length);
}
- } else {
- // We read directly to receiver, no need to copy.
- numBytesRead += slaveRead;
- }
- } else if (slaveRead == 0) {
- // Do nothing
- } else {
- // slaveRead < 0, so an error occurred while reading from the
- // slave. If there was data in the buffer, report success and
- // fail on next operation instead.
- if (numBytesRead > 0) {
- _nextWillFail = true;
- } else {
- numBytesRead = slaveRead;
- }
- }
- } // End of slave read
+ if (slaveRead > 0) {
+ if (length < _bufferSize) {
+ // We read to buffer, so copy from buffer to receiver.
+ if (length < static_cast<size_t>(slaveRead)) {
+ memcpy(to, _buffer, length);
+ numBytesRead += length;
+ _bufferUsed = slaveRead;
+ _bufferRead = length;
+ } else {
+ memcpy(to, _buffer, slaveRead);
+ numBytesRead += slaveRead;
+ }
+ } else {
+ // We read directly to receiver, no need to copy.
+ numBytesRead += slaveRead;
+ }
+ } else if (slaveRead == 0) {
+ // Do nothing
+ } else {
+ // slaveRead < 0, so an error occurred while reading from the
+ // slave. If there was data in the buffer, report success and
+ // fail on next operation instead.
+ if (numBytesRead > 0) {
+ _nextWillFail = true;
+ } else {
+ numBytesRead = slaveRead;
+ }
+ }
- return numBytesRead;
+ } // End of slave read
+
+ return numBytesRead;
}
ssize_t
Fast_BufferedInputStream::ReadBufferFullUntil(void *targetBuffer, size_t maxlength, char stopChar)
{
- if (maxlength > _bufferSize)
- maxlength = _bufferSize;
-
- // This function will under no circumstance read more than once from
- // its slave stream, in order to prevent blocking on input.
+ if (maxlength > _bufferSize)
+ maxlength = _bufferSize;
- if (_nextWillFail) {
- _nextWillFail = false;
- return -1;
- }
+ // This function will under no circumstance read more than once from
+ // its slave stream, in order to prevent blocking on input.
- uint32_t offset = 0;
- ssize_t numBytesRead = 0;
- char* to = static_cast<char*>(targetBuffer);
- size_t bufferRemain = _bufferUsed - _bufferRead;
-
- // Check if we should scan for stopChar in buffer
- if (bufferRemain > 0) {
- for (offset = _bufferRead; offset < _bufferUsed; offset++) {
- if(_buffer[offset] == stopChar) {
- break;
- }
- }
- // Found character in buffer
- if (offset < _bufferUsed) {
- maxlength = offset - _bufferRead + 1;
+ if (_nextWillFail) {
+ _nextWillFail = false;
+ return -1;
}
- }
-
- if (maxlength <= bufferRemain) {
- memcpy(to, &_buffer[_bufferRead], maxlength);
- numBytesRead += maxlength;
- _bufferRead += maxlength;
- if (_bufferRead == _bufferUsed) {
- _bufferRead = _bufferUsed = 0;
- }
- } else {
- // Use the data currently in the buffer, then read from slave stream.
+ uint32_t offset = 0;
+ ssize_t numBytesRead = 0;
+ char* to = static_cast<char*>(targetBuffer);
+ size_t bufferRemain = _bufferUsed - _bufferRead;
+
+ // Check if we should scan for stopChar in buffer
if (bufferRemain > 0) {
- memcpy(to, &_buffer[_bufferRead], bufferRemain);
- numBytesRead += bufferRemain;
- maxlength -= bufferRemain;
- to += bufferRemain;
+ for (offset = _bufferRead; offset < _bufferUsed; offset++) {
+ if(_buffer[offset] == stopChar) {
+ break;
+ }
+ }
+ // Found character in buffer
+ if (offset < _bufferUsed) {
+ maxlength = offset - _bufferRead + 1;
+ }
}
- _bufferUsed = 0;
- _bufferRead = 0;
- ssize_t slaveRead;
-
- slaveRead = Fast_FilterInputStream::Read(_buffer, _bufferSize);
- if (slaveRead > 0) {
- for (offset = 0; offset < static_cast<uint32_t>(slaveRead); offset++) {
- if(_buffer[offset] == stopChar) {
- break;
+
+ if (maxlength <= bufferRemain) {
+ memcpy(to, &_buffer[_bufferRead], maxlength);
+ numBytesRead += maxlength;
+ _bufferRead += maxlength;
+ if (_bufferRead == _bufferUsed) {
+ _bufferRead = _bufferUsed = 0;
}
- }
+ } else {
+ // Use the data currently in the buffer, then read from slave stream.
- if (offset >= maxlength) {
- // Discard data if character was not present
- numBytesRead = -1;
- } else {
- // Found character in buffer
- if (offset < static_cast<uint32_t>(slaveRead)) {
- maxlength = offset + 1;
+ if (bufferRemain > 0) {
+ memcpy(to, &_buffer[_bufferRead], bufferRemain);
+ numBytesRead += bufferRemain;
+ maxlength -= bufferRemain;
+ to += bufferRemain;
}
- // We read to buffer, so copy from buffer to receiver.
- if (maxlength < static_cast<size_t>(slaveRead)) {
- memcpy(to, _buffer, maxlength);
- numBytesRead += maxlength;
- _bufferUsed = slaveRead;
- _bufferRead = maxlength;
+ _bufferUsed = 0;
+ _bufferRead = 0;
+ ssize_t slaveRead;
+
+ slaveRead = Fast_FilterInputStream::Read(_buffer, _bufferSize);
+ if (slaveRead > 0) {
+ for (offset = 0; offset < static_cast<uint32_t>(slaveRead); offset++) {
+ if(_buffer[offset] == stopChar) {
+ break;
+ }
+ }
+
+ if (offset >= maxlength) {
+ // Discard data if character was not present
+ numBytesRead = -1;
+ } else {
+ // Found character in buffer
+ if (offset < static_cast<uint32_t>(slaveRead)) {
+ maxlength = offset + 1;
+ }
+ // We read to buffer, so copy from buffer to receiver.
+ if (maxlength < static_cast<size_t>(slaveRead)) {
+ memcpy(to, _buffer, maxlength);
+ numBytesRead += maxlength;
+ _bufferUsed = slaveRead;
+ _bufferRead = maxlength;
+ } else {
+ memcpy(to, _buffer, slaveRead);
+ numBytesRead += slaveRead;
+ }
+ }
+ } else if (slaveRead == 0) {
+ // Do nothing
} else {
- memcpy(to, _buffer, slaveRead);
- numBytesRead += slaveRead;
+ // slaveRead < 0, so an error occurred while reading from the
+ // slave. If there was data in the buffer, report success and
+ // fail on next operation instead.
+ if (numBytesRead > 0) {
+ _nextWillFail = true;
+ } else {
+ numBytesRead = slaveRead;
+ }
}
- }
- } else if (slaveRead == 0) {
- // Do nothing
- } else {
- // slaveRead < 0, so an error occurred while reading from the
- // slave. If there was data in the buffer, report success and
- // fail on next operation instead.
- if (numBytesRead > 0) {
- _nextWillFail = true;
- } else {
- numBytesRead = slaveRead;
- }
- }
- } // End of slave read
+ } // End of slave read
- return numBytesRead;
+ return numBytesRead;
}
diff --git a/fastlib/src/vespa/fastlib/io/bufferedinputstream.h b/fastlib/src/vespa/fastlib/io/bufferedinputstream.h
index b102bd98abc..8d98abfff33 100644
--- a/fastlib/src/vespa/fastlib/io/bufferedinputstream.h
+++ b/fastlib/src/vespa/fastlib/io/bufferedinputstream.h
@@ -5,7 +5,7 @@
class Fast_BufferedInputStream : public Fast_FilterInputStream
{
- protected:
+protected:
// Buffer attributes
char *_buffer;
const size_t _bufferSize;
@@ -14,7 +14,7 @@ class Fast_BufferedInputStream : public Fast_FilterInputStream
bool _nextWillFail;
- public:
+public:
Fast_BufferedInputStream(const Fast_BufferedInputStream &) = delete;
Fast_BufferedInputStream & operator = (const Fast_BufferedInputStream &) = delete;
@@ -33,7 +33,3 @@ class Fast_BufferedInputStream : public Fast_FilterInputStream
// Additional methods
ssize_t ReadBufferFullUntil(void *targetBuffer, size_t maxlength, char stopChar);
};
-
-
-
-
diff --git a/fastlib/src/vespa/fastlib/io/bufferedoutputstream.cpp b/fastlib/src/vespa/fastlib/io/bufferedoutputstream.cpp
index b98d8111cfe..7025c85514e 100644
--- a/fastlib/src/vespa/fastlib/io/bufferedoutputstream.cpp
+++ b/fastlib/src/vespa/fastlib/io/bufferedoutputstream.cpp
@@ -22,12 +22,12 @@
Fast_BufferedOutputStream::Fast_BufferedOutputStream(Fast_OutputStream &out,
size_t bufferSize)
- : Fast_FilterOutputStream(out),
- _buffer(new char[bufferSize]),
- _bufferSize((_buffer != NULL) ? bufferSize : 0),
- _bufferUsed(0),
- _bufferWritten(0),
- _nextWillFail(false)
+ : Fast_FilterOutputStream(out),
+ _buffer(new char[bufferSize]),
+ _bufferSize((_buffer != NULL) ? bufferSize : 0),
+ _bufferUsed(0),
+ _bufferWritten(0),
+ _nextWillFail(false)
{
}
@@ -35,43 +35,43 @@ Fast_BufferedOutputStream::Fast_BufferedOutputStream(Fast_OutputStream &out,
Fast_BufferedOutputStream::~Fast_BufferedOutputStream(void)
{
- delete [] _buffer;
+ delete [] _buffer;
};
bool Fast_BufferedOutputStream::Close(void)
{
- Flush();
- return Fast_FilterOutputStream::Close();
+ Flush();
+ return Fast_FilterOutputStream::Close();
}
void Fast_BufferedOutputStream::Flush(void)
{
- if (_nextWillFail)
- {
- _nextWillFail = false;
- return;
- }
- while (_bufferWritten < _bufferUsed)
- {
- ssize_t slaveWritten;
- slaveWritten = Fast_FilterOutputStream::Write(&_buffer[_bufferWritten], _bufferUsed - _bufferWritten);
- if (slaveWritten >= 0)
+ if (_nextWillFail)
{
- _bufferWritten += slaveWritten;
+ _nextWillFail = false;
+ return;
}
- else
+ while (_bufferWritten < _bufferUsed)
{
- break;
+ ssize_t slaveWritten;
+ slaveWritten = Fast_FilterOutputStream::Write(&_buffer[_bufferWritten], _bufferUsed - _bufferWritten);
+ if (slaveWritten >= 0)
+ {
+ _bufferWritten += slaveWritten;
+ }
+ else
+ {
+ break;
+ }
}
- }
- _bufferUsed = 0;
- _bufferWritten = 0;
+ _bufferUsed = 0;
+ _bufferWritten = 0;
- Fast_FilterOutputStream::Flush();
+ Fast_FilterOutputStream::Flush();
}
@@ -79,91 +79,91 @@ void Fast_BufferedOutputStream::Flush(void)
ssize_t Fast_BufferedOutputStream::Write(const void *sourceBuffer, size_t length)
{
- // This function will under no circumstance write more than once to
- // its slave stream, in order to prevent blocking on output.
-
- if (_nextWillFail)
- {
- _nextWillFail = false;
- return -1;
- }
- ssize_t numBytesWritten = 0;
- const char* from = static_cast<const char *>(sourceBuffer);
- size_t bufferRemain = _bufferUsed - _bufferWritten;
-
- if (length <= _bufferSize - _bufferUsed)
- {
- memcpy(&_buffer[_bufferUsed], from, length);
- numBytesWritten += length;
- _bufferUsed += length;
- }
- else if (length <= _bufferSize - bufferRemain)
- {
- memmove(_buffer, &_buffer[_bufferWritten], bufferRemain);
- memcpy(&_buffer[bufferRemain], from, length);
- _bufferUsed = bufferRemain + length;
- _bufferWritten = 0;
- }
- else
- {
- ssize_t slaveWritten;
- bool writeFromBuffer = bufferRemain > 0;
+ // This function will under no circumstance write more than once to
+ // its slave stream, in order to prevent blocking on output.
- if (writeFromBuffer)
+ if (_nextWillFail)
{
- // Fill up buffer before write.
- memcpy(&_buffer[_bufferUsed], from, _bufferSize - _bufferUsed);
- from += _bufferSize - _bufferUsed;
- length -= _bufferSize - _bufferUsed;
- numBytesWritten += _bufferSize - _bufferUsed;
-
- slaveWritten = Fast_FilterOutputStream::Write(_buffer, _bufferSize);
+ _nextWillFail = false;
+ return -1;
}
- else
+ ssize_t numBytesWritten = 0;
+ const char* from = static_cast<const char *>(sourceBuffer);
+ size_t bufferRemain = _bufferUsed - _bufferWritten;
+
+ if (length <= _bufferSize - _bufferUsed)
{
- slaveWritten = Fast_FilterOutputStream::Write(from, length);
+ memcpy(&_buffer[_bufferUsed], from, length);
+ numBytesWritten += length;
+ _bufferUsed += length;
}
-
- if (slaveWritten >= 0)
+ else if (length <= _bufferSize - bufferRemain)
{
- if (writeFromBuffer)
- {
- // We wrote from buffer, so shuffle remainder of buffer before
- // filling it up.
- memmove(_buffer, &_buffer[slaveWritten], _bufferSize - slaveWritten);
- _bufferUsed = _bufferSize - slaveWritten;
- }
- else
- {
- // Buffer was empty, all data written from sender.
- numBytesWritten += slaveWritten;
- from += slaveWritten;
- length -= slaveWritten;
- _bufferUsed = 0;
- }
- size_t freeBuffer = _bufferSize - _bufferUsed;
- size_t refill = (length < freeBuffer) ? length : freeBuffer;
- memcpy(&_buffer[_bufferUsed], from, refill);
- numBytesWritten += refill;
- _bufferUsed += refill;
- _bufferWritten = 0;
+ memmove(_buffer, &_buffer[_bufferWritten], bufferRemain);
+ memcpy(&_buffer[bufferRemain], from, length);
+ _bufferUsed = bufferRemain + length;
+ _bufferWritten = 0;
}
else
{
- // slaveWritten < 0, so an error occurred while writing to the
- // slave. If there was data in the buffer, report success and
- // fail on next operation instead.
- if (numBytesWritten > 0)
- {
- _nextWillFail = true;
- }
- else
- {
- numBytesWritten = slaveWritten;
- }
- }
-
- } // End of slave write
-
- return numBytesWritten;
+ ssize_t slaveWritten;
+ bool writeFromBuffer = bufferRemain > 0;
+
+ if (writeFromBuffer)
+ {
+ // Fill up buffer before write.
+ memcpy(&_buffer[_bufferUsed], from, _bufferSize - _bufferUsed);
+ from += _bufferSize - _bufferUsed;
+ length -= _bufferSize - _bufferUsed;
+ numBytesWritten += _bufferSize - _bufferUsed;
+
+ slaveWritten = Fast_FilterOutputStream::Write(_buffer, _bufferSize);
+ }
+ else
+ {
+ slaveWritten = Fast_FilterOutputStream::Write(from, length);
+ }
+
+ if (slaveWritten >= 0)
+ {
+ if (writeFromBuffer)
+ {
+ // We wrote from buffer, so shuffle remainder of buffer before
+ // filling it up.
+ memmove(_buffer, &_buffer[slaveWritten], _bufferSize - slaveWritten);
+ _bufferUsed = _bufferSize - slaveWritten;
+ }
+ else
+ {
+ // Buffer was empty, all data written from sender.
+ numBytesWritten += slaveWritten;
+ from += slaveWritten;
+ length -= slaveWritten;
+ _bufferUsed = 0;
+ }
+ size_t freeBuffer = _bufferSize - _bufferUsed;
+ size_t refill = (length < freeBuffer) ? length : freeBuffer;
+ memcpy(&_buffer[_bufferUsed], from, refill);
+ numBytesWritten += refill;
+ _bufferUsed += refill;
+ _bufferWritten = 0;
+ }
+ else
+ {
+ // slaveWritten < 0, so an error occurred while writing to the
+ // slave. If there was data in the buffer, report success and
+ // fail on next operation instead.
+ if (numBytesWritten > 0)
+ {
+ _nextWillFail = true;
+ }
+ else
+ {
+ numBytesWritten = slaveWritten;
+ }
+ }
+
+ } // End of slave write
+
+ return numBytesWritten;
}
diff --git a/fastlib/src/vespa/fastlib/io/bufferedoutputstream.h b/fastlib/src/vespa/fastlib/io/bufferedoutputstream.h
index 789f7074f51..aabc787543e 100644
--- a/fastlib/src/vespa/fastlib/io/bufferedoutputstream.h
+++ b/fastlib/src/vespa/fastlib/io/bufferedoutputstream.h
@@ -6,14 +6,14 @@
class Fast_BufferedOutputStream : public Fast_FilterOutputStream
{
- private:
+private:
// Prevent use of:
Fast_BufferedOutputStream(const Fast_BufferedOutputStream &);
Fast_BufferedOutputStream & operator=(const Fast_BufferedOutputStream &);
- protected:
+protected:
// Buffer attributes
char *_buffer;
@@ -23,7 +23,7 @@ class Fast_BufferedOutputStream : public Fast_FilterOutputStream
bool _nextWillFail;
- public:
+public:
// Constructor
Fast_BufferedOutputStream(Fast_OutputStream &out, size_t bufferSize = 1024);
diff --git a/fastlib/src/vespa/fastlib/io/fileinputstream.cpp b/fastlib/src/vespa/fastlib/io/fileinputstream.cpp
index c1da475c5d2..b1002595aea 100644
--- a/fastlib/src/vespa/fastlib/io/fileinputstream.cpp
+++ b/fastlib/src/vespa/fastlib/io/fileinputstream.cpp
@@ -20,8 +20,8 @@
Fast_FileInputStream::Fast_FileInputStream(const char *fileName)
- : _theFile(new FastOS_File(fileName)),
- _fileOpenedOk(false)
+ : _theFile(new FastOS_File(fileName)),
+ _fileOpenedOk(false)
{
_fileOpenedOk = _theFile->OpenReadOnly();
}
diff --git a/fastlib/src/vespa/fastlib/io/fileinputstream.h b/fastlib/src/vespa/fastlib/io/fileinputstream.h
index 045fc61500f..58662ba75c7 100644
--- a/fastlib/src/vespa/fastlib/io/fileinputstream.h
+++ b/fastlib/src/vespa/fastlib/io/fileinputstream.h
@@ -8,10 +8,10 @@
class Fast_FileInputStream : public Fast_InputStream
{
private:
- Fast_FileInputStream(const Fast_FileInputStream&);
- Fast_FileInputStream& operator=(const Fast_FileInputStream&);
+ Fast_FileInputStream(const Fast_FileInputStream&);
+ Fast_FileInputStream& operator=(const Fast_FileInputStream&);
- protected:
+protected:
/** Pointer to the physical file object*/
FastOS_FileInterface *_theFile;
@@ -19,7 +19,7 @@ private:
/** File opened ok flag */
bool _fileOpenedOk;
- public:
+public:
Fast_FileInputStream(const char *fileName);
~Fast_FileInputStream();
@@ -30,6 +30,3 @@ private:
ssize_t Available() override;
ssize_t Skip(size_t) override;
};
-
-
-
diff --git a/fastlib/src/vespa/fastlib/io/fileoutputstream.h b/fastlib/src/vespa/fastlib/io/fileoutputstream.h
index 8f9b2ebfb2b..eb97b3f8207 100644
--- a/fastlib/src/vespa/fastlib/io/fileoutputstream.h
+++ b/fastlib/src/vespa/fastlib/io/fileoutputstream.h
@@ -7,22 +7,22 @@
class Fast_FileOutputStream : public Fast_OutputStream
{
private:
- Fast_FileOutputStream(const Fast_FileOutputStream&);
- Fast_FileOutputStream& operator=(const Fast_FileOutputStream&);
+ Fast_FileOutputStream(const Fast_FileOutputStream&);
+ Fast_FileOutputStream& operator=(const Fast_FileOutputStream&);
- protected:
+protected:
/** Pointer to the physical file object*/
FastOS_FileInterface *_theFile;
- public:
+public:
Fast_FileOutputStream(const char *fileName);
~Fast_FileOutputStream();
ssize_t Write(const void *sourceBuffer, size_t bufferSize) override {
- return _theFile->CheckedWrite(sourceBuffer, bufferSize) ?
- static_cast<ssize_t>(bufferSize) :
- static_cast<ssize_t>(-1);
+ return _theFile->CheckedWrite(sourceBuffer, bufferSize) ?
+ static_cast<ssize_t>(bufferSize) :
+ static_cast<ssize_t>(-1);
};
bool Close() override { return _theFile->Close(); }
diff --git a/fastlib/src/vespa/fastlib/io/filterinputstream.h b/fastlib/src/vespa/fastlib/io/filterinputstream.h
index 116a16ff89d..0c4f5160529 100644
--- a/fastlib/src/vespa/fastlib/io/filterinputstream.h
+++ b/fastlib/src/vespa/fastlib/io/filterinputstream.h
@@ -20,7 +20,7 @@
class Fast_FilterInputStream : public Fast_InputStream
{
- private:
+private:
// Prevent use of:
Fast_FilterInputStream(void);
@@ -28,13 +28,13 @@ class Fast_FilterInputStream : public Fast_InputStream
Fast_FilterInputStream &operator=(const Fast_FilterInputStream &);
- protected:
+protected:
/** The stream to forward data to */
Fast_InputStream *_in;
- public:
+public:
// Constructors
Fast_FilterInputStream(Fast_InputStream &in) : _in(&in) {}
@@ -46,6 +46,6 @@ class Fast_FilterInputStream : public Fast_InputStream
ssize_t Skip(size_t skipNBytes) override { return _in->Skip(skipNBytes); }
ssize_t Read(void *targetBuffer, size_t length) override {
- return _in->Read(targetBuffer, length);
+ return _in->Read(targetBuffer, length);
}
};
diff --git a/fastlib/src/vespa/fastlib/io/filteroutputstream.h b/fastlib/src/vespa/fastlib/io/filteroutputstream.h
index c3ec9d28399..8a778ddd38f 100644
--- a/fastlib/src/vespa/fastlib/io/filteroutputstream.h
+++ b/fastlib/src/vespa/fastlib/io/filteroutputstream.h
@@ -6,17 +6,17 @@
class Fast_FilterOutputStream : public Fast_OutputStream
{
- private:
+private:
// Prevent use of:
Fast_FilterOutputStream();
Fast_FilterOutputStream(Fast_FilterOutputStream &);
Fast_FilterOutputStream &operator=(const Fast_FilterOutputStream &);
- protected:
+protected:
/** The stream to forward data to */
Fast_OutputStream *_out;
- public:
+public:
Fast_FilterOutputStream(Fast_OutputStream &out) : _out(&out) {}
~Fast_FilterOutputStream() {}
@@ -24,6 +24,6 @@ class Fast_FilterOutputStream : public Fast_OutputStream
void Flush() override { _out->Flush(); }
ssize_t Write(const void *sourceBuffer, size_t length) override {
- return _out->Write(sourceBuffer, length);
+ return _out->Write(sourceBuffer, length);
}
};
diff --git a/fastlib/src/vespa/fastlib/io/inputstream.h b/fastlib/src/vespa/fastlib/io/inputstream.h
index d7b443d28ee..61026172a95 100644
--- a/fastlib/src/vespa/fastlib/io/inputstream.h
+++ b/fastlib/src/vespa/fastlib/io/inputstream.h
@@ -5,7 +5,7 @@
class Fast_InputStream
{
- public:
+public:
virtual ~Fast_InputStream() { }
virtual ssize_t Available() = 0;
@@ -13,5 +13,3 @@ class Fast_InputStream
virtual ssize_t Read(void *targetBuffer, size_t bufferSize) = 0;
virtual ssize_t Skip(size_t skipNBytes) = 0;
};
-
-
diff --git a/fastlib/src/vespa/fastlib/io/outputstream.h b/fastlib/src/vespa/fastlib/io/outputstream.h
index 9e6f42fd4c5..8594c209cf7 100644
--- a/fastlib/src/vespa/fastlib/io/outputstream.h
+++ b/fastlib/src/vespa/fastlib/io/outputstream.h
@@ -21,7 +21,7 @@
class Fast_OutputStream
{
- public:
+public:
virtual ~Fast_OutputStream() { }
@@ -29,6 +29,3 @@ class Fast_OutputStream
virtual void Flush(void) = 0;
virtual ssize_t Write(const void *sourceBuffer, size_t bufferSize) = 0;
};
-
-
-
diff --git a/fastlib/src/vespa/fastlib/io/tests/bufferedfiletest.cpp b/fastlib/src/vespa/fastlib/io/tests/bufferedfiletest.cpp
index a9054cfb01b..81a31bd4b77 100644
--- a/fastlib/src/vespa/fastlib/io/tests/bufferedfiletest.cpp
+++ b/fastlib/src/vespa/fastlib/io/tests/bufferedfiletest.cpp
@@ -5,96 +5,96 @@
TEST("main") {
- int i = 0;
- int j = 0;
- int value = 0;
- FastOS_StatInfo statInfo;
+ int i = 0;
+ int j = 0;
+ int value = 0;
+ FastOS_StatInfo statInfo;
- FastOS_File::Delete("testfile1");
- FastOS_File::Delete("testfile2");
- FastOS_File::Delete("testfile3");
- FastOS_File::Delete("testfile4");
- FastOS_File::Delete("testfile5");
+ FastOS_File::Delete("testfile1");
+ FastOS_File::Delete("testfile2");
+ FastOS_File::Delete("testfile3");
+ FastOS_File::Delete("testfile4");
+ FastOS_File::Delete("testfile5");
- Fast_BufferedFile bufFile(4096);
+ Fast_BufferedFile bufFile(4096);
- // test 1
- printf ("testing 11 byte long file\n");
- bufFile.WriteOpen("testfile1");
- bufFile.addNum(1,10,' ');
- bufFile.CheckedWrite("\n",1);
- bufFile.Close();
- FastOS_File::Stat("testfile1", &statInfo);
- if (statInfo._size != 11) {
- printf (" -- FAILURE\n\n");
- TEST_FATAL("exit 1");
- }
- printf (" -- SUCCESS\n\n");
+ // test 1
+ printf ("testing 11 byte long file\n");
+ bufFile.WriteOpen("testfile1");
+ bufFile.addNum(1,10,' ');
+ bufFile.CheckedWrite("\n",1);
+ bufFile.Close();
+ FastOS_File::Stat("testfile1", &statInfo);
+ if (statInfo._size != 11) {
+ printf (" -- FAILURE\n\n");
+ TEST_FATAL("exit 1");
+ }
+ printf (" -- SUCCESS\n\n");
- // test 2
- printf ("testing 4095 byte long file\n");
- bufFile.WriteOpen("testfile2");
- char buf[8192]; // allocate 8K buffer
- memset(buf,0xff,8192);
- bufFile.CheckedWrite(buf,4095); // write almost 4K
- bufFile.Close();
- FastOS_File::Stat("testfile2", &statInfo);
- if (statInfo._size != 4095) {
- printf (" -- FAILURE\n\n");
- TEST_FATAL("exit 1");
- }
- printf (" -- SUCCESS\n\n");
+ // test 2
+ printf ("testing 4095 byte long file\n");
+ bufFile.WriteOpen("testfile2");
+ char buf[8192]; // allocate 8K buffer
+ memset(buf,0xff,8192);
+ bufFile.CheckedWrite(buf,4095); // write almost 4K
+ bufFile.Close();
+ FastOS_File::Stat("testfile2", &statInfo);
+ if (statInfo._size != 4095) {
+ printf (" -- FAILURE\n\n");
+ TEST_FATAL("exit 1");
+ }
+ printf (" -- SUCCESS\n\n");
- // test 3
- printf ("testing 4096 byte long file\n");
- bufFile.WriteOpen("testfile3");
- bufFile.CheckedWrite(buf,4096); // write exactly 4K
- bufFile.Close();
- FastOS_File::Stat("testfile3", &statInfo);
- if (statInfo._size != 4096) {
- printf (" -- FAILURE\n\n");
- TEST_FATAL("exit 1");
- }
- printf (" -- SUCCESS\n\n");
+ // test 3
+ printf ("testing 4096 byte long file\n");
+ bufFile.WriteOpen("testfile3");
+ bufFile.CheckedWrite(buf,4096); // write exactly 4K
+ bufFile.Close();
+ FastOS_File::Stat("testfile3", &statInfo);
+ if (statInfo._size != 4096) {
+ printf (" -- FAILURE\n\n");
+ TEST_FATAL("exit 1");
+ }
+ printf (" -- SUCCESS\n\n");
- // test 4
- printf ("testing 4097 byte long file\n");
- bufFile.WriteOpen("testfile4");
- bufFile.CheckedWrite(buf,4097); // write a bit over 4K
- bufFile.Close();
- FastOS_File::Stat("testfile4", &statInfo);
- if (statInfo._size != 4097) {
- printf (" -- FAILURE\n\n");
- TEST_FATAL("exit 1");
- }
- printf (" -- SUCCESS\n\n");
+ // test 4
+ printf ("testing 4097 byte long file\n");
+ bufFile.WriteOpen("testfile4");
+ bufFile.CheckedWrite(buf,4097); // write a bit over 4K
+ bufFile.Close();
+ FastOS_File::Stat("testfile4", &statInfo);
+ if (statInfo._size != 4097) {
+ printf (" -- FAILURE\n\n");
+ TEST_FATAL("exit 1");
+ }
+ printf (" -- SUCCESS\n\n");
- // test 5
- printf ("testing 610000 byte long file with repeated addNum\n");
- bufFile.WriteOpen("testfile5");
- for (i = 0; i < 10000; i++) {
- for (j = 0; j < 10; j++) {
- bufFile.addNum(value,6,' ');
- value++;
+ // test 5
+ printf ("testing 610000 byte long file with repeated addNum\n");
+ bufFile.WriteOpen("testfile5");
+ for (i = 0; i < 10000; i++) {
+ for (j = 0; j < 10; j++) {
+ bufFile.addNum(value,6,' ');
+ value++;
+ }
+ bufFile.CheckedWrite("\n",1);
}
- bufFile.CheckedWrite("\n",1);
- }
- bufFile.Close();
- FastOS_File::Stat("testfile5", &statInfo);
- if (statInfo._size != 610000) {
- printf (" -- FAILURE\n\n");
- TEST_FATAL("exit 1");
- }
- printf (" -- SUCCESS\n\n");
+ bufFile.Close();
+ FastOS_File::Stat("testfile5", &statInfo);
+ if (statInfo._size != 610000) {
+ printf (" -- FAILURE\n\n");
+ TEST_FATAL("exit 1");
+ }
+ printf (" -- SUCCESS\n\n");
- FastOS_File::Delete("testfile1");
- FastOS_File::Delete("testfile2");
- FastOS_File::Delete("testfile3");
- FastOS_File::Delete("testfile4");
- FastOS_File::Delete("testfile5");
+ FastOS_File::Delete("testfile1");
+ FastOS_File::Delete("testfile2");
+ FastOS_File::Delete("testfile3");
+ FastOS_File::Delete("testfile4");
+ FastOS_File::Delete("testfile5");
- printf ("All tests OK for bufferedfiletest\n");
- printf (" -- SUCCESS\n\n");
+ printf ("All tests OK for bufferedfiletest\n");
+ printf (" -- SUCCESS\n\n");
}
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/fastlib/src/vespa/fastlib/io/tests/bufferedstreamtest.cpp b/fastlib/src/vespa/fastlib/io/tests/bufferedstreamtest.cpp
index 7ca6f8da8c2..b246d7afac6 100644
--- a/fastlib/src/vespa/fastlib/io/tests/bufferedstreamtest.cpp
+++ b/fastlib/src/vespa/fastlib/io/tests/bufferedstreamtest.cpp
@@ -14,204 +14,204 @@ using namespace std;
static bool ReadFile(const char *tag, Fast_InputStream &input,
char *buffer, int64_t fileSize, size_t chunkSize)
{
- char *pos;
- clock_t start, ticks;
-
- cout << "Starting to read file (" << tag << ")..." << endl;
- start = clock();
-
- pos = buffer;
- // Slurp file
- ssize_t numRead;
- while (pos - buffer < fileSize &&
- (numRead = input.Read(pos, chunkSize)) > 0)
- pos += numRead;
- if (pos - buffer != fileSize)
- {
- cerr << "Read " << pos - buffer << " bytes, "
- << " expected " << static_cast<int>(fileSize) << " bytes.\n";
- return false;
- }
-
- ticks = clock() - start;
- cout << "Done, used " << ticks << " ticks "
- << "(" << static_cast<double>(ticks) / CLOCKS_PER_SEC << " seconds)\n\n"
- << ends;
-
- return true;
+ char *pos;
+ clock_t start, ticks;
+
+ cout << "Starting to read file (" << tag << ")..." << endl;
+ start = clock();
+
+ pos = buffer;
+ // Slurp file
+ ssize_t numRead;
+ while (pos - buffer < fileSize &&
+ (numRead = input.Read(pos, chunkSize)) > 0)
+ pos += numRead;
+ if (pos - buffer != fileSize)
+ {
+ cerr << "Read " << pos - buffer << " bytes, "
+ << " expected " << static_cast<int>(fileSize) << " bytes.\n";
+ return false;
+ }
+
+ ticks = clock() - start;
+ cout << "Done, used " << ticks << " ticks "
+ << "(" << static_cast<double>(ticks) / CLOCKS_PER_SEC << " seconds)\n\n"
+ << ends;
+
+ return true;
}
static bool WriteAndReadBackFile(const char *tag, Fast_OutputStream &output,
char *buffer, int64_t fileSize,
const char *fileName, size_t chunkSize)
{
- char *pos;
- clock_t start, ticks;
-
- cout << "Starting to write file (" << tag << ")..." << endl;
- start = clock();
-
- pos = buffer;
- // Dump file
- ssize_t numWritten;
- size_t numToWrite = (fileSize < static_cast<int64_t>(chunkSize)) ?
- static_cast<size_t>(fileSize) : chunkSize;
- while (pos - buffer < fileSize &&
- (numWritten = output.Write(pos, numToWrite)) > 0)
- {
- pos += numWritten;
- if ((fileSize - (pos - buffer)) < static_cast<int64_t>(chunkSize)) {
- numToWrite = (fileSize - (pos - buffer));
+ char *pos;
+ clock_t start, ticks;
+
+ cout << "Starting to write file (" << tag << ")..." << endl;
+ start = clock();
+
+ pos = buffer;
+ // Dump file
+ ssize_t numWritten;
+ size_t numToWrite = (fileSize < static_cast<int64_t>(chunkSize)) ?
+ static_cast<size_t>(fileSize) : chunkSize;
+ while (pos - buffer < fileSize &&
+ (numWritten = output.Write(pos, numToWrite)) > 0)
+ {
+ pos += numWritten;
+ if ((fileSize - (pos - buffer)) < static_cast<int64_t>(chunkSize)) {
+ numToWrite = (fileSize - (pos - buffer));
+ }
+ else {
+ numToWrite = chunkSize;
+ }
+ }
+ output.Flush();
+
+ if (pos - buffer != fileSize)
+ {
+ cerr << "Wrote " << pos - buffer << " bytes, " \
+ << " expected " << static_cast<int>(fileSize) << " bytes.\n";
+ return false;
}
- else {
- numToWrite = chunkSize;
+
+ ticks = clock() - start;
+ cout << "Done, used " << ticks << " ticks "
+ << "(" << static_cast<double>(ticks) / CLOCKS_PER_SEC << " seconds)\n\n"
+ << ends;
+
+ output.Close();
+
+ FastOS_File readBackFile;
+ readBackFile.OpenReadOnly(fileName);
+ if (readBackFile.Read(buffer, fileSize) != fileSize)
+ {
+ cerr << "Error reading data back from " << fileName << ".\n";
+ return false;
}
- }
- output.Flush();
-
- if (pos - buffer != fileSize)
- {
- cerr << "Wrote " << pos - buffer << " bytes, " \
- << " expected " << static_cast<int>(fileSize) << " bytes.\n";
- return false;
- }
-
- ticks = clock() - start;
- cout << "Done, used " << ticks << " ticks "
- << "(" << static_cast<double>(ticks) / CLOCKS_PER_SEC << " seconds)\n\n"
- << ends;
-
- output.Close();
-
- FastOS_File readBackFile;
- readBackFile.OpenReadOnly(fileName);
- if (readBackFile.Read(buffer, fileSize) != fileSize)
- {
- cerr << "Error reading data back from " << fileName << ".\n";
- return false;
- }
-
- return true;
+
+ return true;
}
int main(int argc, char **argv)
{
- if (argc < 2 || argc > 4)
- {
- cerr << "Usage: " << argv[0] << " <file> [<buffer size> [<chunk size>]]\n";
- return 1;
- }
+ if (argc < 2 || argc > 4)
+ {
+ cerr << "Usage: " << argv[0] << " <file> [<buffer size> [<chunk size>]]\n";
+ return 1;
+ }
- const char *fileName = argv[1];
- unsigned long bufferSize = (argc >= 3) ? strtoul(argv[2], NULL, 10) : 1024;
- unsigned long chunkSize = (argc >= 4) ? strtoul(argv[3], NULL, 10) : 1;
+ const char *fileName = argv[1];
+ unsigned long bufferSize = (argc >= 3) ? strtoul(argv[2], NULL, 10) : 1024;
+ unsigned long chunkSize = (argc >= 4) ? strtoul(argv[3], NULL, 10) : 1;
- FastOS_StatInfo statInfo;
- if (!FastOS_File::Stat(fileName, &statInfo))
- {
- cerr << "Failed to stat " << fileName << "\n";
- return 1;
- }
+ FastOS_StatInfo statInfo;
+ if (!FastOS_File::Stat(fileName, &statInfo))
+ {
+ cerr << "Failed to stat " << fileName << "\n";
+ return 1;
+ }
- int64_t fileSize = statInfo._size;
+ int64_t fileSize = statInfo._size;
- char *unbufferedData = new char[fileSize];
- assert(unbufferedData != NULL);
+ char *unbufferedData = new char[fileSize];
+ assert(unbufferedData != NULL);
- char *bufferedData = new char[fileSize];
- assert(bufferedData != NULL);
+ char *bufferedData = new char[fileSize];
+ assert(bufferedData != NULL);
- /////////////////////////////////////////////////////////////////////
- // Start of input test
+ /////////////////////////////////////////////////////////////////////
+ // Start of input test
- Fast_FileInputStream unbufferedInputFile(fileName);
- // run unneeded functions for coverage
- unbufferedInputFile.Skip(unbufferedInputFile.Available());
+ Fast_FileInputStream unbufferedInputFile(fileName);
+ // run unneeded functions for coverage
+ unbufferedInputFile.Skip(unbufferedInputFile.Available());
- if (!ReadFile("unbuffered", unbufferedInputFile, unbufferedData, fileSize, chunkSize))
- {
- cerr << "Unbuffered read failed" << endl;
- delete [] unbufferedData;
- delete [] bufferedData;
- return 1;
- }
+ if (!ReadFile("unbuffered", unbufferedInputFile, unbufferedData, fileSize, chunkSize))
+ {
+ cerr << "Unbuffered read failed" << endl;
+ delete [] unbufferedData;
+ delete [] bufferedData;
+ return 1;
+ }
- Fast_FileInputStream slaveInputFile(fileName);
- Fast_BufferedInputStream bufferedInputFile(slaveInputFile, bufferSize);
+ Fast_FileInputStream slaveInputFile(fileName);
+ Fast_BufferedInputStream bufferedInputFile(slaveInputFile, bufferSize);
- if (!ReadFile("buffered", bufferedInputFile, bufferedData, fileSize, chunkSize))
- {
- cerr << "Buffered read failed" << endl;
- delete [] unbufferedData;
- delete [] bufferedData;
- return 1;
- }
-
- if (memcmp(unbufferedData, bufferedData, fileSize) == 0)
- {
- cout << "Buffered and unbuffered data equal -- success!\n";
- }
- else
- {
- cout << "Buffered and unbuffered data differs -- error!\n";
- cout << "Contents of unbuffered data:\n";
- cout.write(unbufferedData, fileSize);
- cout << "Contents of buffered data:\n";
- cout.write(bufferedData, fileSize);
+ if (!ReadFile("buffered", bufferedInputFile, bufferedData, fileSize, chunkSize))
+ {
+ cerr << "Buffered read failed" << endl;
+ delete [] unbufferedData;
+ delete [] bufferedData;
+ return 1;
+ }
- delete [] unbufferedData;
- delete [] bufferedData;
- return 1;
- }
+ if (memcmp(unbufferedData, bufferedData, fileSize) == 0)
+ {
+ cout << "Buffered and unbuffered data equal -- success!\n";
+ }
+ else
+ {
+ cout << "Buffered and unbuffered data differs -- error!\n";
+ cout << "Contents of unbuffered data:\n";
+ cout.write(unbufferedData, fileSize);
+ cout << "Contents of buffered data:\n";
+ cout.write(bufferedData, fileSize);
+
+ delete [] unbufferedData;
+ delete [] bufferedData;
+ return 1;
+ }
- /////////////////////////////////////////////////////////////////////
- // Start of output test
+ /////////////////////////////////////////////////////////////////////
+ // Start of output test
- const char *tempFile = "bufferedstreamtest.tmp";
+ const char *tempFile = "bufferedstreamtest.tmp";
- Fast_FileOutputStream unbufferedOutputFile(tempFile);
+ Fast_FileOutputStream unbufferedOutputFile(tempFile);
- if (!WriteAndReadBackFile("unbuffered", unbufferedOutputFile,
- unbufferedData, fileSize, tempFile, chunkSize))
- {
- cerr << "Unbuffered write and read back failed" << endl;
+ if (!WriteAndReadBackFile("unbuffered", unbufferedOutputFile,
+ unbufferedData, fileSize, tempFile, chunkSize))
+ {
+ cerr << "Unbuffered write and read back failed" << endl;
- delete [] unbufferedData;
- delete [] bufferedData;
- return 1;
- }
+ delete [] unbufferedData;
+ delete [] bufferedData;
+ return 1;
+ }
- Fast_FileOutputStream slaveOutputFile(tempFile);
- Fast_BufferedOutputStream bufferedOutputFile(slaveOutputFile, bufferSize);
+ Fast_FileOutputStream slaveOutputFile(tempFile);
+ Fast_BufferedOutputStream bufferedOutputFile(slaveOutputFile, bufferSize);
- if (!WriteAndReadBackFile("buffered", bufferedOutputFile,
- bufferedData, fileSize, tempFile, chunkSize))
- {
- cerr << "Buffered write and read back failed" << endl;
+ if (!WriteAndReadBackFile("buffered", bufferedOutputFile,
+ bufferedData, fileSize, tempFile, chunkSize))
+ {
+ cerr << "Buffered write and read back failed" << endl;
- delete [] unbufferedData;
- delete [] bufferedData;
- return 1;
- }
-
- if (memcmp(unbufferedData, bufferedData, fileSize) == 0)
- {
- cout << "Buffered and unbuffered data equal -- success!\n";
- }
- else
- {
- cout << "Buffered and unbuffered data differs -- error!\n";
- cout << "Contents of unbuffered data:\n";
- cout.write(unbufferedData, fileSize);
- cout << "Contents of buffered data:\n";
- cout.write(bufferedData, fileSize);
+ delete [] unbufferedData;
+ delete [] bufferedData;
+ return 1;
+ }
+
+ if (memcmp(unbufferedData, bufferedData, fileSize) == 0)
+ {
+ cout << "Buffered and unbuffered data equal -- success!\n";
+ }
+ else
+ {
+ cout << "Buffered and unbuffered data differs -- error!\n";
+ cout << "Contents of unbuffered data:\n";
+ cout.write(unbufferedData, fileSize);
+ cout << "Contents of buffered data:\n";
+ cout.write(bufferedData, fileSize);
+
+ delete [] unbufferedData;
+ delete [] bufferedData;
+ return 1;
+ }
delete [] unbufferedData;
delete [] bufferedData;
- return 1;
- }
-
- delete [] unbufferedData;
- delete [] bufferedData;
- return 0;
+ return 0;
}
diff --git a/fastlib/src/vespa/fastlib/net/httpchunkedinputstream.cpp b/fastlib/src/vespa/fastlib/net/httpchunkedinputstream.cpp
index a59ec16d386..7b521e17718 100644
--- a/fastlib/src/vespa/fastlib/net/httpchunkedinputstream.cpp
+++ b/fastlib/src/vespa/fastlib/net/httpchunkedinputstream.cpp
@@ -20,8 +20,8 @@
#include <vespa/fastlib/net/httpchunkedinputstream.h>
Fast_HTTPChunkedInputStream::Fast_HTTPChunkedInputStream(Fast_InputStream &in)
- : Fast_FilterInputStream(in), _chunkSize(0), _inChunk(false),
- _isClosed(false)
+ : Fast_FilterInputStream(in), _chunkSize(0), _inChunk(false),
+ _isClosed(false)
{
}
@@ -37,78 +37,78 @@ Fast_HTTPChunkedInputStream::~Fast_HTTPChunkedInputStream(void)
bool Fast_HTTPChunkedInputStream::ReadChunkHeader(void)
{
- char chunkHeader[100];
- char *pos = chunkHeader;
+ char chunkHeader[100];
+ char *pos = chunkHeader;
- // Read chunk size into chunkHeader.
- for (;;)
- {
- if (Fast_FilterInputStream::Read(pos, 1) != 1)
+ // Read chunk size into chunkHeader.
+ for (;;)
{
- return false;
- }
- if (*pos == ';' || *pos == '\n')
- {
- break;
- }
- pos++;
- if (static_cast<size_t>(pos - chunkHeader) > sizeof(chunkHeader))
- {
- return false;
+ if (Fast_FilterInputStream::Read(pos, 1) != 1)
+ {
+ return false;
+ }
+ if (*pos == ';' || *pos == '\n')
+ {
+ break;
+ }
+ pos++;
+ if (static_cast<size_t>(pos - chunkHeader) > sizeof(chunkHeader))
+ {
+ return false;
+ }
}
- }
- _chunkSize = strtoul(chunkHeader, NULL, 16);
+ _chunkSize = strtoul(chunkHeader, NULL, 16);
- // Finish reading eventual extensions.
- char c = *pos;
- while (c != '\n')
- {
- if (Fast_FilterInputStream::Read(&c, 1) != 1)
+ // Finish reading eventual extensions.
+ char c = *pos;
+ while (c != '\n')
{
- return false;
- }
- }
-
- // If this was the last chunk, read optional trailer and final CRLF.
- if (_chunkSize == 0)
- {
- for (;;) {
- if (Fast_FilterInputStream::Read(&c, 1) != 1)
- {
- return false;
- }
- if (c == '\r')
- {
if (Fast_FilterInputStream::Read(&c, 1) != 1)
{
- return false;
+ return false;
}
- }
- if (c == '\n')
- {
- // Empty line, end of last chunk.
- break;
- }
-
- // In trailing header; read rest of line.
- do
- {
- if (Fast_FilterInputStream::Read(&c, 1) != 1)
- {
- return false;
+ }
+
+ // If this was the last chunk, read optional trailer and final CRLF.
+ if (_chunkSize == 0)
+ {
+ for (;;) {
+ if (Fast_FilterInputStream::Read(&c, 1) != 1)
+ {
+ return false;
+ }
+ if (c == '\r')
+ {
+ if (Fast_FilterInputStream::Read(&c, 1) != 1)
+ {
+ return false;
+ }
+ }
+ if (c == '\n')
+ {
+ // Empty line, end of last chunk.
+ break;
+ }
+
+ // In trailing header; read rest of line.
+ do
+ {
+ if (Fast_FilterInputStream::Read(&c, 1) != 1)
+ {
+ return false;
+ }
+ } while (c != '\n');
}
- } while (c != '\n');
+ _inChunk = false;
+ _isClosed = true;
+ }
+ else
+ {
+ _inChunk = true;
}
- _inChunk = false;
- _isClosed = true;
- }
- else
- {
- _inChunk = true;
- }
- return true;
+ return true;
}
@@ -116,21 +116,21 @@ bool Fast_HTTPChunkedInputStream::ReadChunkHeader(void)
ssize_t Fast_HTTPChunkedInputStream::Available(void)
{
- if (_isClosed || !_inChunk)
- {
- return 0;
- }
-
- ssize_t slaveAvailable = Fast_FilterInputStream::Available();
- if (slaveAvailable < 0)
- {
- return slaveAvailable;
- }
- else
- {
- return (static_cast<size_t>(slaveAvailable) < _chunkSize)
- ? slaveAvailable : _chunkSize;
- }
+ if (_isClosed || !_inChunk)
+ {
+ return 0;
+ }
+
+ ssize_t slaveAvailable = Fast_FilterInputStream::Available();
+ if (slaveAvailable < 0)
+ {
+ return slaveAvailable;
+ }
+ else
+ {
+ return (static_cast<size_t>(slaveAvailable) < _chunkSize)
+ ? slaveAvailable : _chunkSize;
+ }
}
@@ -138,8 +138,8 @@ ssize_t Fast_HTTPChunkedInputStream::Available(void)
bool Fast_HTTPChunkedInputStream::Close(void)
{
- _isClosed = true;
- return true;
+ _isClosed = true;
+ return true;
}
@@ -147,61 +147,61 @@ bool Fast_HTTPChunkedInputStream::Close(void)
ssize_t Fast_HTTPChunkedInputStream::Read(void *targetBuffer, size_t length)
{
- if (_isClosed)
- {
- return 0;
- }
-
- if (!_inChunk)
- {
- // Read new header chunk, check if end of chunked entity is reached.
- if (!ReadChunkHeader())
+ if (_isClosed)
{
- _isClosed = true;
- return -1;
+ return 0;
}
- else if (_isClosed)
+
+ if (!_inChunk)
{
- return 0;
+ // Read new header chunk, check if end of chunked entity is reached.
+ if (!ReadChunkHeader())
+ {
+ _isClosed = true;
+ return -1;
+ }
+ else if (_isClosed)
+ {
+ return 0;
+ }
}
- }
-
- size_t blockLength = (length < _chunkSize) ? length : _chunkSize;
- ssize_t numBytesRead = _in->Read(targetBuffer, blockLength);
- if (numBytesRead > 0)
- {
- _chunkSize -= numBytesRead;
- }
- else
- {
- _isClosed = true;
- _inChunk = false;
- return (numBytesRead < 0) ? numBytesRead : -1;
- }
- if (_chunkSize == 0)
- {
- // End of chunk reached. Mark this, and read CRLF following
- // chunk.
-
- _inChunk = false;
-
- bool ok;
- char c;
- ok = _in->Read(&c, 1) == 1;
- if (ok && c == '\r')
+ size_t blockLength = (length < _chunkSize) ? length : _chunkSize;
+ ssize_t numBytesRead = _in->Read(targetBuffer, blockLength);
+ if (numBytesRead > 0)
{
- ok = _in->Read(&c, 1) == 1;
+ _chunkSize -= numBytesRead;
}
- ok = ok && c == '\n';
- if (!ok)
+ else
{
_isClosed = true;
- return -1;
+ _inChunk = false;
+ return (numBytesRead < 0) ? numBytesRead : -1;
+ }
+
+ if (_chunkSize == 0)
+ {
+ // End of chunk reached. Mark this, and read CRLF following
+ // chunk.
+
+ _inChunk = false;
+
+ bool ok;
+ char c;
+ ok = _in->Read(&c, 1) == 1;
+ if (ok && c == '\r')
+ {
+ ok = _in->Read(&c, 1) == 1;
+ }
+ ok = ok && c == '\n';
+ if (!ok)
+ {
+ _isClosed = true;
+ return -1;
+ }
}
- }
- return numBytesRead;
+ return numBytesRead;
}
@@ -209,16 +209,16 @@ ssize_t Fast_HTTPChunkedInputStream::Read(void *targetBuffer, size_t length)
ssize_t Fast_HTTPChunkedInputStream::Skip(size_t skipNBytes)
{
- if (_isClosed)
- {
- return -1;
- }
- else if (!_inChunk)
- {
- return 0;
- }
- else
- {
- return _in->Skip((skipNBytes < _chunkSize) ? skipNBytes : _chunkSize);
- }
+ if (_isClosed)
+ {
+ return -1;
+ }
+ else if (!_inChunk)
+ {
+ return 0;
+ }
+ else
+ {
+ return _in->Skip((skipNBytes < _chunkSize) ? skipNBytes : _chunkSize);
+ }
}
diff --git a/fastlib/src/vespa/fastlib/net/httpchunkedinputstream.h b/fastlib/src/vespa/fastlib/net/httpchunkedinputstream.h
index 122d1bb1eca..5517e912637 100644
--- a/fastlib/src/vespa/fastlib/net/httpchunkedinputstream.h
+++ b/fastlib/src/vespa/fastlib/net/httpchunkedinputstream.h
@@ -6,17 +6,17 @@
class Fast_HTTPChunkedInputStream : public Fast_FilterInputStream
{
- private:
+private:
// Prevent use of:
Fast_HTTPChunkedInputStream(const Fast_HTTPChunkedInputStream &);
Fast_HTTPChunkedInputStream & operator=(const Fast_HTTPChunkedInputStream &);
- protected:
+protected:
size_t _chunkSize;
bool _inChunk;
bool _isClosed;
bool ReadChunkHeader(void);
- public:
+public:
Fast_HTTPChunkedInputStream(Fast_InputStream &in);
~Fast_HTTPChunkedInputStream();
@@ -27,6 +27,3 @@ class Fast_HTTPChunkedInputStream : public Fast_FilterInputStream
ssize_t Read(void *targetBuffer, size_t length) override;
ssize_t Skip(size_t skipNBytes) override;
};
-
-
-
diff --git a/fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.cpp b/fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.cpp
index d0b0cc2075f..3db0946e852 100644
--- a/fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.cpp
+++ b/fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.cpp
@@ -21,105 +21,105 @@
Fast_HTTPChunkedOutputStream::Fast_HTTPChunkedOutputStream(Fast_OutputStream &out,
size_t chunkSize)
- : Fast_FilterOutputStream(out),
- _chunkSize(chunkSize),
- _buffer(NULL),
- _bufferUsed(0),
- _writeHasFailed(false)
+ : Fast_FilterOutputStream(out),
+ _chunkSize(chunkSize),
+ _buffer(NULL),
+ _bufferUsed(0),
+ _writeHasFailed(false)
{
- _buffer = new char[_chunkSize+2]; // Leave room for CRLF at end of chunk
- assert(_buffer != NULL);
+ _buffer = new char[_chunkSize+2]; // Leave room for CRLF at end of chunk
+ assert(_buffer != NULL);
}
Fast_HTTPChunkedOutputStream::~Fast_HTTPChunkedOutputStream(void)
{
- delete [] _buffer;
+ delete [] _buffer;
}
bool Fast_HTTPChunkedOutputStream::WriteChunk(void)
{
- // Don't write an empty block, as this will end the entity.
- if (_bufferUsed == 0)
- {
- return true;
- }
-
- if (_writeHasFailed)
- return false;
-
- char chunkHeader[100];
- char *from;
- size_t bytesLeft;
- ssize_t bytesWritten;
- bytesLeft = sprintf(chunkHeader, "%x\r\n",
- static_cast<unsigned int>(_bufferUsed));
- from = chunkHeader;
- while (bytesLeft > 0)
- {
- bytesWritten = Fast_FilterOutputStream::Write(from, bytesLeft);
- if (bytesWritten < 0)
- {
- _writeHasFailed = true;
- return false;
- }
- else
+ // Don't write an empty block, as this will end the entity.
+ if (_bufferUsed == 0)
{
- from += bytesWritten;
- bytesLeft -= bytesWritten;
+ return true;
}
- }
-
- _buffer[_bufferUsed++] = '\r';
- _buffer[_bufferUsed++] = '\n';
- bytesLeft = _bufferUsed;
- from = _buffer;
- while (bytesLeft > 0)
- {
- bytesWritten = Fast_FilterOutputStream::Write(from, bytesLeft);
- if (bytesWritten < 0)
+
+ if (_writeHasFailed)
+ return false;
+
+ char chunkHeader[100];
+ char *from;
+ size_t bytesLeft;
+ ssize_t bytesWritten;
+ bytesLeft = sprintf(chunkHeader, "%x\r\n",
+ static_cast<unsigned int>(_bufferUsed));
+ from = chunkHeader;
+ while (bytesLeft > 0)
{
- _bufferUsed -= 2;
- _writeHasFailed = true;
- return false;
+ bytesWritten = Fast_FilterOutputStream::Write(from, bytesLeft);
+ if (bytesWritten < 0)
+ {
+ _writeHasFailed = true;
+ return false;
+ }
+ else
+ {
+ from += bytesWritten;
+ bytesLeft -= bytesWritten;
+ }
}
- else
+
+ _buffer[_bufferUsed++] = '\r';
+ _buffer[_bufferUsed++] = '\n';
+ bytesLeft = _bufferUsed;
+ from = _buffer;
+ while (bytesLeft > 0)
{
- from += bytesWritten;
- bytesLeft -= bytesWritten;
+ bytesWritten = Fast_FilterOutputStream::Write(from, bytesLeft);
+ if (bytesWritten < 0)
+ {
+ _bufferUsed -= 2;
+ _writeHasFailed = true;
+ return false;
+ }
+ else
+ {
+ from += bytesWritten;
+ bytesLeft -= bytesWritten;
+ }
}
- }
- _bufferUsed = 0;
- return true;
+ _bufferUsed = 0;
+ return true;
}
bool Fast_HTTPChunkedOutputStream::Close(void)
{
- WriteChunk();
- char chunkHeader[] = { '0', '\r', '\n', '\r', '\n' };
- char *from = chunkHeader;
- size_t bytesLeft = sizeof(chunkHeader);
- ssize_t bytesWritten;
- while (bytesLeft > 0)
- {
- bytesWritten = Fast_FilterOutputStream::Write(from, bytesLeft);
- if (bytesWritten < 0)
- {
- break;
- }
- else
+ WriteChunk();
+ char chunkHeader[] = { '0', '\r', '\n', '\r', '\n' };
+ char *from = chunkHeader;
+ size_t bytesLeft = sizeof(chunkHeader);
+ ssize_t bytesWritten;
+ while (bytesLeft > 0)
{
- from += bytesWritten;
- bytesLeft -= bytesWritten;
+ bytesWritten = Fast_FilterOutputStream::Write(from, bytesLeft);
+ if (bytesWritten < 0)
+ {
+ break;
+ }
+ else
+ {
+ from += bytesWritten;
+ bytesLeft -= bytesWritten;
+ }
}
- }
- return (bytesLeft == 0);
+ return (bytesLeft == 0);
}
@@ -127,27 +127,27 @@ bool Fast_HTTPChunkedOutputStream::Close(void)
ssize_t
Fast_HTTPChunkedOutputStream::Write(const void *sourceBuffer, size_t length)
{
- const char *from = static_cast<const char*>(sourceBuffer);
- size_t numBytesWritten = length;
- while (length > 0)
- {
- size_t bufferRemain = _chunkSize - _bufferUsed;
- if (bufferRemain > 0) {
- size_t blockLength = (length < bufferRemain) ? length : bufferRemain;
- memcpy(_buffer + _bufferUsed, from, blockLength);
- _bufferUsed += blockLength;
- from += blockLength;
- length -= blockLength;
- }
- if (length > 0)
+ const char *from = static_cast<const char*>(sourceBuffer);
+ size_t numBytesWritten = length;
+ while (length > 0)
{
- if (!WriteChunk())
- {
- return -1;
- }
+ size_t bufferRemain = _chunkSize - _bufferUsed;
+ if (bufferRemain > 0) {
+ size_t blockLength = (length < bufferRemain) ? length : bufferRemain;
+ memcpy(_buffer + _bufferUsed, from, blockLength);
+ _bufferUsed += blockLength;
+ from += blockLength;
+ length -= blockLength;
+ }
+ if (length > 0)
+ {
+ if (!WriteChunk())
+ {
+ return -1;
+ }
+ }
}
- }
- return numBytesWritten;
+ return numBytesWritten;
}
@@ -155,6 +155,6 @@ Fast_HTTPChunkedOutputStream::Write(const void *sourceBuffer, size_t length)
void
Fast_HTTPChunkedOutputStream::Flush(void)
{
- WriteChunk();
- Fast_FilterOutputStream::Flush();
+ WriteChunk();
+ Fast_FilterOutputStream::Flush();
}
diff --git a/fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.h b/fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.h
index bc34d6f4dc7..f54b6c06922 100644
--- a/fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.h
+++ b/fastlib/src/vespa/fastlib/net/httpchunkedoutputstream.h
@@ -6,18 +6,18 @@
class Fast_HTTPChunkedOutputStream : public Fast_FilterOutputStream
{
- private:
+private:
// Prevent use of:
Fast_HTTPChunkedOutputStream(const Fast_HTTPChunkedOutputStream &);
Fast_HTTPChunkedOutputStream & operator=(const Fast_HTTPChunkedOutputStream &);
- protected:
+protected:
size_t _chunkSize;
char *_buffer;
size_t _bufferUsed;
bool _writeHasFailed;
bool WriteChunk(void);
- public:
+public:
Fast_HTTPChunkedOutputStream(Fast_OutputStream &out, size_t chunkSize = 1024);
~Fast_HTTPChunkedOutputStream();
@@ -27,6 +27,3 @@ class Fast_HTTPChunkedOutputStream : public Fast_FilterOutputStream
ssize_t Write(const void *sourceBuffer, size_t length) override;
void Flush() override;
};
-
-
-
diff --git a/fastlib/src/vespa/fastlib/net/httpheaderparser.cpp b/fastlib/src/vespa/fastlib/net/httpheaderparser.cpp
index aa56372277c..8f1dadef052 100644
--- a/fastlib/src/vespa/fastlib/net/httpheaderparser.cpp
+++ b/fastlib/src/vespa/fastlib/net/httpheaderparser.cpp
@@ -4,11 +4,11 @@
#include <vespa/fastlib/net/httpheaderparser.h>
Fast_HTTPHeaderParser::Fast_HTTPHeaderParser(Fast_BufferedInputStream &in)
- : _pushBack(0),
- _isPushBacked(false),
- _bufferSize(16384),
- _lineBuffer(new char[_bufferSize]),
- _input(&in)
+ : _pushBack(0),
+ _isPushBacked(false),
+ _bufferSize(16384),
+ _lineBuffer(new char[_bufferSize]),
+ _input(&in)
{
}
@@ -20,134 +20,134 @@ Fast_HTTPHeaderParser::~Fast_HTTPHeaderParser(void)
bool
Fast_HTTPHeaderParser::ReadRequestLine(const char *&method, const char *&url, int &versionMajor, int &versionMinor)
{
- // Read a single line from input. Repeat if line is blank, to cope
- // with buggy HTTP/1.1 clients that print extra empty lines at the
- // end of requests.
+ // Read a single line from input. Repeat if line is blank, to cope
+ // with buggy HTTP/1.1 clients that print extra empty lines at the
+ // end of requests.
+
+ do {
+ size_t idx = 0;
+ ssize_t readLen = _input->ReadBufferFullUntil(_lineBuffer, _bufferSize, '\n');
+ if (readLen <= 0) {
+ return false;
+ }
+ idx = readLen-1;
+
+ if (idx == 0 || _lineBuffer[idx] != '\n') {
+ return false;
+ }
+ _lineBuffer[idx--] = '\0';
+ if (_lineBuffer[idx] == '\r') {
+ _lineBuffer[idx] = '\0';
+ }
+ } while (_lineBuffer[0] == '\0');
+
+ // Parse request line.
- do {
- size_t idx = 0;
- ssize_t readLen = _input->ReadBufferFullUntil(_lineBuffer, _bufferSize, '\n');
- if (readLen <= 0) {
- return false;
- }
- idx = readLen-1;
-
- if (idx == 0 || _lineBuffer[idx] != '\n') {
- return false;
- }
- _lineBuffer[idx--] = '\0';
- if (_lineBuffer[idx] == '\r') {
- _lineBuffer[idx] = '\0';
- }
- } while (_lineBuffer[0] == '\0');
-
- // Parse request line.
-
- char *p = _lineBuffer;
- const char *version = "";
+ char *p = _lineBuffer;
+ const char *version = "";
- method = p;
- p = strchr(p, ' ');
- if (p != NULL) {
- *p++ = '\0';
- url = p;
+ method = p;
p = strchr(p, ' ');
if (p != NULL) {
- *p++ = '\0';
- version = p;
+ *p++ = '\0';
+ url = p;
+ p = strchr(p, ' ');
+ if (p != NULL) {
+ *p++ = '\0';
+ version = p;
+ }
}
- }
- if (sscanf(version, "HTTP/%d.%d", &versionMajor, &versionMinor) != 2) {
- versionMajor = versionMinor = -1;
- return false;
- }
+ if (sscanf(version, "HTTP/%d.%d", &versionMajor, &versionMinor) != 2) {
+ versionMajor = versionMinor = -1;
+ return false;
+ }
- return true;
+ return true;
}
bool
Fast_HTTPHeaderParser::ReadHeader(const char *&name, const char *&value)
{
- size_t idx = 0;
-
- name = NULL;
- value = NULL;
-
- if (_isPushBacked) {
- idx = 0;
- _lineBuffer[idx] = _pushBack;
- _isPushBacked = false;
- idx++;
- }
-
- constexpr size_t ROOM_FOR_PUSH_BACK = 1u;
- while ((idx + ROOM_FOR_PUSH_BACK) < _bufferSize) {
- ssize_t readLen = _input->ReadBufferFullUntil(&_lineBuffer[idx], _bufferSize - idx - ROOM_FOR_PUSH_BACK, '\n');
- if (readLen <= 0) {
- return false;
- }
- idx += readLen - 1;
- // Empty line == end of headers.
- // handle case with \r\n as \n
- if (idx == 0 || (_lineBuffer[0] == '\r' && idx == 1)) {
- idx = 0;
- break;
- }
+ size_t idx = 0;
- // Ignore double return 0xD, 0xA)
- if (idx >= 1) {
- if (_lineBuffer[idx - 1] == '\r') {
- idx--;
- _lineBuffer[idx] = '\n';
- }
- }
+ name = NULL;
+ value = NULL;
- // Check if header continues on next line.
- if (_input->Read(&_pushBack, 1) != 1) {
- break;
+ if (_isPushBacked) {
+ idx = 0;
+ _lineBuffer[idx] = _pushBack;
+ _isPushBacked = false;
+ idx++;
}
- if (_pushBack == ' ' || _pushBack == '\t') {
- // Header does continue on next line.
- // Replace newline with horizontal whitespace.
- _lineBuffer[idx] = _pushBack;
- idx++;
- } else {
- _isPushBacked = true;
- // break out of while loop
- break;
+
+ constexpr size_t ROOM_FOR_PUSH_BACK = 1u;
+ while ((idx + ROOM_FOR_PUSH_BACK) < _bufferSize) {
+ ssize_t readLen = _input->ReadBufferFullUntil(&_lineBuffer[idx], _bufferSize - idx - ROOM_FOR_PUSH_BACK, '\n');
+ if (readLen <= 0) {
+ return false;
+ }
+ idx += readLen - 1;
+ // Empty line == end of headers.
+ // handle case with \r\n as \n
+ if (idx == 0 || (_lineBuffer[0] == '\r' && idx == 1)) {
+ idx = 0;
+ break;
+ }
+
+ // Ignore double return 0xD, 0xA)
+ if (idx >= 1) {
+ if (_lineBuffer[idx - 1] == '\r') {
+ idx--;
+ _lineBuffer[idx] = '\n';
+ }
+ }
+
+ // Check if header continues on next line.
+ if (_input->Read(&_pushBack, 1) != 1) {
+ break;
+ }
+ if (_pushBack == ' ' || _pushBack == '\t') {
+ // Header does continue on next line.
+ // Replace newline with horizontal whitespace.
+ _lineBuffer[idx] = _pushBack;
+ idx++;
+ } else {
+ _isPushBacked = true;
+ // break out of while loop
+ break;
+ }
}
- }
- if (idx != 0) {
- _lineBuffer[idx] = '\0';
- char *p = _lineBuffer;
- name = p;
+ if (idx != 0) {
+ _lineBuffer[idx] = '\0';
+ char *p = _lineBuffer;
+ name = p;
+
+ // Find end of header name.
+ while (*p != ':' && *p != '\0') {
+ p++;
+ }
+
+ // If end of header name is not end of header, parse header value.
+ if (*p != '\0') {
+ // Terminate header name.
+ *p++ = '\0';
+
+ // Skip leading whitespace before header value.
+ while (*p == ' ' || *p == '\t') {
+ p++;
+ }
+ value = p;
+ // Strip trailing whitespace.
+ p += strlen(p);
+ while (p > value && (*(p-1) == ' ' || *(p-1) == '\t')) {
+ p--;
+ }
+ *p = '\0';
+ } // End of header parsing (idx != 0).
- // Find end of header name.
- while (*p != ':' && *p != '\0') {
- p++;
}
- // If end of header name is not end of header, parse header value.
- if (*p != '\0') {
- // Terminate header name.
- *p++ = '\0';
-
- // Skip leading whitespace before header value.
- while (*p == ' ' || *p == '\t') {
- p++;
- }
- value = p;
- // Strip trailing whitespace.
- p += strlen(p);
- while (p > value && (*(p-1) == ' ' || *(p-1) == '\t')) {
- p--;
- }
- *p = '\0';
- } // End of header parsing (idx != 0).
-
- }
-
- return (idx != 0);
+ return (idx != 0);
}
diff --git a/fastlib/src/vespa/fastlib/net/httpheaderparser.h b/fastlib/src/vespa/fastlib/net/httpheaderparser.h
index 59c5cb01f8a..ccd6c24ed37 100644
--- a/fastlib/src/vespa/fastlib/net/httpheaderparser.h
+++ b/fastlib/src/vespa/fastlib/net/httpheaderparser.h
@@ -6,7 +6,7 @@ class Fast_BufferedInputStream;
class Fast_HTTPHeaderParser
{
- public:
+public:
Fast_HTTPHeaderParser(const Fast_HTTPHeaderParser &) = delete;
Fast_HTTPHeaderParser & operator = (const Fast_HTTPHeaderParser &) = delete;
Fast_HTTPHeaderParser(Fast_BufferedInputStream &in);
@@ -15,7 +15,7 @@ class Fast_HTTPHeaderParser
// Methods
bool ReadRequestLine(const char *&method, const char *&url, int &versionMajor, int &versionMinor);
bool ReadHeader(const char *&name, const char *&value);
- private:
+private:
char _pushBack;
bool _isPushBacked;
const size_t _bufferSize;
diff --git a/fastlib/src/vespa/fastlib/net/httpserver.cpp b/fastlib/src/vespa/fastlib/net/httpserver.cpp
index 92e95cede03..c5570356707 100644
--- a/fastlib/src/vespa/fastlib/net/httpserver.cpp
+++ b/fastlib/src/vespa/fastlib/net/httpserver.cpp
@@ -25,26 +25,26 @@
class Fast_HTTPPersistentInputFilter : public Fast_FilterInputStream
{
- private:
+private:
// Prevent use of:
Fast_HTTPPersistentInputFilter(const Fast_HTTPPersistentInputFilter &);
Fast_HTTPPersistentInputFilter & operator=(const Fast_HTTPPersistentInputFilter &);
- protected:
+protected:
Fast_HTTPChunkedInputStream *_chunkedInput;
bool _useChunkedInput;
size_t _remainingBytes;
- public:
+public:
Fast_HTTPPersistentInputFilter(Fast_InputStream &in)
- : Fast_FilterInputStream(in),
- _chunkedInput(NULL),
- _useChunkedInput(false),
- _remainingBytes(0)
+ : Fast_FilterInputStream(in),
+ _chunkedInput(NULL),
+ _useChunkedInput(false),
+ _remainingBytes(0)
{ }
~Fast_HTTPPersistentInputFilter() {
- delete _chunkedInput;
+ delete _chunkedInput;
}
// Methods
@@ -60,59 +60,59 @@ class Fast_HTTPPersistentInputFilter : public Fast_FilterInputStream
ssize_t Fast_HTTPPersistentInputFilter::Available()
{
- if (_useChunkedInput) {
- return _chunkedInput->Available();
- } else {
- ssize_t slaveAvailable = _in->Available();
- if (slaveAvailable < 0) {
- return slaveAvailable;
+ if (_useChunkedInput) {
+ return _chunkedInput->Available();
} else {
- return ((static_cast<size_t>(slaveAvailable) < _remainingBytes))
- ? slaveAvailable : _remainingBytes;
+ ssize_t slaveAvailable = _in->Available();
+ if (slaveAvailable < 0) {
+ return slaveAvailable;
+ } else {
+ return ((static_cast<size_t>(slaveAvailable) < _remainingBytes))
+ ? slaveAvailable : _remainingBytes;
+ }
}
- }
}
bool Fast_HTTPPersistentInputFilter::Close()
{
- // Do nothing.
- return true;
+ // Do nothing.
+ return true;
}
ssize_t Fast_HTTPPersistentInputFilter::Read(void *targetBuffer, size_t length)
{
- if (_useChunkedInput) {
- return _chunkedInput->Read(targetBuffer, length);
- } else {
- if (_remainingBytes == 0) {
- return 0;
+ if (_useChunkedInput) {
+ return _chunkedInput->Read(targetBuffer, length);
} else {
- ssize_t numBytesRead;
- numBytesRead = _in->Read(targetBuffer, (length < _remainingBytes)
- ? length : _remainingBytes);
- if (numBytesRead > 0) {
- _remainingBytes -= numBytesRead;
- } else {
- _remainingBytes = 0;
- }
- return numBytesRead;
+ if (_remainingBytes == 0) {
+ return 0;
+ } else {
+ ssize_t numBytesRead;
+ numBytesRead = _in->Read(targetBuffer, (length < _remainingBytes)
+ ? length : _remainingBytes);
+ if (numBytesRead > 0) {
+ _remainingBytes -= numBytesRead;
+ } else {
+ _remainingBytes = 0;
+ }
+ return numBytesRead;
+ }
}
- }
}
ssize_t Fast_HTTPPersistentInputFilter::Skip(size_t skipNBytes)
{
- if (_useChunkedInput) {
- return _chunkedInput->Skip(skipNBytes);
- } else {
- return _in->Skip((skipNBytes < _remainingBytes) ? skipNBytes : _remainingBytes);
- }
+ if (_useChunkedInput) {
+ return _chunkedInput->Skip(skipNBytes);
+ } else {
+ return _in->Skip((skipNBytes < _remainingBytes) ? skipNBytes : _remainingBytes);
+ }
}
@@ -120,20 +120,20 @@ ssize_t Fast_HTTPPersistentInputFilter::Skip(size_t skipNBytes)
void Fast_HTTPPersistentInputFilter::SetEntityLength(size_t entityLength)
{
- _useChunkedInput = false;
- _remainingBytes = entityLength;
+ _useChunkedInput = false;
+ _remainingBytes = entityLength;
}
void Fast_HTTPPersistentInputFilter::SetChunkedEncoding()
{
- _useChunkedInput = true;
- // TODO: If input stream interface is expanded to enable resetting
- // streams, we can reuse a single chunked input stream instance
- // instead of allocating a new each time.
- delete _chunkedInput;
- _chunkedInput = new Fast_HTTPChunkedInputStream(*_in);
+ _useChunkedInput = true;
+ // TODO: If input stream interface is expanded to enable resetting
+ // streams, we can reuse a single chunked input stream instance
+ // instead of allocating a new each time.
+ delete _chunkedInput;
+ _chunkedInput = new Fast_HTTPChunkedInputStream(*_in);
}
@@ -150,11 +150,11 @@ void Fast_HTTPPersistentInputFilter::SetChunkedEncoding()
class Fast_HTTPPersistentOutputFilter : public Fast_FilterOutputStream
{
- private:
+private:
// Prevent use of:
Fast_HTTPPersistentOutputFilter(const Fast_HTTPPersistentOutputFilter &);
Fast_HTTPPersistentOutputFilter & operator=(const Fast_HTTPPersistentOutputFilter &);
- protected:
+protected:
Fast_HTTPChunkedOutputStream *_chunkedOutput;
Fast_OutputStream *_entityOutput;
@@ -165,16 +165,16 @@ class Fast_HTTPPersistentOutputFilter : public Fast_FilterOutputStream
size_t _linePos;
bool FlushHeader(void);
- public:
+public:
Fast_HTTPPersistentOutputFilter(Fast_OutputStream &out) :
- Fast_FilterOutputStream(out),
- _chunkedOutput(NULL), _entityOutput(NULL),
- _inHeaderRegion(true), _cleanHeader(false), _useChunkedOutput(true),
- _linePos(0)
+ Fast_FilterOutputStream(out),
+ _chunkedOutput(NULL), _entityOutput(NULL),
+ _inHeaderRegion(true), _cleanHeader(false), _useChunkedOutput(true),
+ _linePos(0)
{ }
~Fast_HTTPPersistentOutputFilter() {
- delete _chunkedOutput;
+ delete _chunkedOutput;
}
// Methods
@@ -187,148 +187,148 @@ class Fast_HTTPPersistentOutputFilter : public Fast_FilterOutputStream
bool Fast_HTTPPersistentOutputFilter::FlushHeader()
{
- assert(_inHeaderRegion);
- size_t i = 0;
- while (i < _linePos) {
- ssize_t numBytesWritten = Fast_FilterOutputStream::Write(_line, _linePos - i);
- if (numBytesWritten >= 0) {
- i += numBytesWritten;
- } else {
- return false;
+ assert(_inHeaderRegion);
+ size_t i = 0;
+ while (i < _linePos) {
+ ssize_t numBytesWritten = Fast_FilterOutputStream::Write(_line, _linePos - i);
+ if (numBytesWritten >= 0) {
+ i += numBytesWritten;
+ } else {
+ return false;
+ }
}
- }
- _linePos = 0;
- return true;
+ _linePos = 0;
+ return true;
}
bool Fast_HTTPPersistentOutputFilter::Close()
{
- bool retVal = true;
- if (_inHeaderRegion) {
- FlushHeader();
- } else if (_useChunkedOutput) {
- retVal = _chunkedOutput->Close();
- delete _chunkedOutput;
- _chunkedOutput = NULL;
- } else {
- // Do nothing. In particular, do not close _entityOutput, as that
- // would close the slave stream.
- }
- Fast_FilterOutputStream::Flush();
- _inHeaderRegion = true;
- _useChunkedOutput = true;
- return retVal;
+ bool retVal = true;
+ if (_inHeaderRegion) {
+ FlushHeader();
+ } else if (_useChunkedOutput) {
+ retVal = _chunkedOutput->Close();
+ delete _chunkedOutput;
+ _chunkedOutput = NULL;
+ } else {
+ // Do nothing. In particular, do not close _entityOutput, as that
+ // would close the slave stream.
+ }
+ Fast_FilterOutputStream::Flush();
+ _inHeaderRegion = true;
+ _useChunkedOutput = true;
+ return retVal;
}
ssize_t Fast_HTTPPersistentOutputFilter::Write(const void *sourceBuffer, size_t length)
{
- if (length == 0) {
- return 0;
- }
-
- ssize_t numBytesWritten = 0;
- const char *from = static_cast<const char*>(sourceBuffer);
-
- while (_inHeaderRegion && length > 0) {
- // Read a line at a time from the source buffer and check for
- // problematic headers and the end of the header region.
-
- bool endOfHeader = false;
-
- while (length > 0 && _linePos < sizeof(_line)) {
- _line[_linePos++] = *from++;
- length--;
- numBytesWritten++;
- if (_line[_linePos-1] == '\n') {
- endOfHeader = true;
- break;
- }
+ if (length == 0) {
+ return 0;
}
- // We can safely flush if the header is known to be unproblematic
- // or is at least as long as the line buffer (the headers we are
- // scared of are never that long).
- if (_cleanHeader || _linePos == sizeof(_line)) {
- _cleanHeader = !endOfHeader;
- FlushHeader();
- } else if (endOfHeader) {
- // Check for suspicious headers and end of header region.
- if (_linePos == 1 || (_linePos == 2 && _line[0] == '\r')) {
- // Empty line, end of headers reached.
- if (_useChunkedOutput) {
- //Add chunking header.
- strcpy(_line, "Transfer-Encoding: chunked\r\n\r\n");
- _linePos = strlen(_line);
+ ssize_t numBytesWritten = 0;
+ const char *from = static_cast<const char*>(sourceBuffer);
+
+ while (_inHeaderRegion && length > 0) {
+ // Read a line at a time from the source buffer and check for
+ // problematic headers and the end of the header region.
+
+ bool endOfHeader = false;
+
+ while (length > 0 && _linePos < sizeof(_line)) {
+ _line[_linePos++] = *from++;
+ length--;
+ numBytesWritten++;
+ if (_line[_linePos-1] == '\n') {
+ endOfHeader = true;
+ break;
+ }
}
- FlushHeader();
- sourceBuffer = from;
- _inHeaderRegion = false;
- } else {
- // Terminate header line.
- // (We know that _linepos < sizeof(_line), so this is safe.)
- _line[_linePos] = '\0';
-
- size_t headerLength = strcspn(_line, " \t\r\n:");
- if (headerLength == 10 && strncasecmp(_line, "connection", 10) == 0) {
- // Don't copy this header, just reset line buffer
- _linePos = 0;
- } else if (headerLength == 14 && strncasecmp(_line, "content-length", 14) == 0) {
- _useChunkedOutput = false;
- FlushHeader();
- } else if (strcasecmp(_line, "Transfer-Encoding: 8bit\n") == 0) {
- // Backward compatibility hack: older versions of
- // Fast_HTTPServer set this invalid header, and there might
- // exist subclasses that still do. Just discard it.
- _linePos = 0;
- } else {
- FlushHeader();
+ // We can safely flush if the header is known to be unproblematic
+ // or is at least as long as the line buffer (the headers we are
+ // scared of are never that long).
+ if (_cleanHeader || _linePos == sizeof(_line)) {
+ _cleanHeader = !endOfHeader;
+ FlushHeader();
+ } else if (endOfHeader) {
+ // Check for suspicious headers and end of header region.
+ if (_linePos == 1 || (_linePos == 2 && _line[0] == '\r')) {
+ // Empty line, end of headers reached.
+ if (_useChunkedOutput) {
+ //Add chunking header.
+ strcpy(_line, "Transfer-Encoding: chunked\r\n\r\n");
+ _linePos = strlen(_line);
+ }
+ FlushHeader();
+ sourceBuffer = from;
+ _inHeaderRegion = false;
+ } else {
+ // Terminate header line.
+ // (We know that _linepos < sizeof(_line), so this is safe.)
+ _line[_linePos] = '\0';
+
+ size_t headerLength = strcspn(_line, " \t\r\n:");
+ if (headerLength == 10 && strncasecmp(_line, "connection", 10) == 0) {
+ // Don't copy this header, just reset line buffer
+ _linePos = 0;
+ } else if (headerLength == 14 && strncasecmp(_line, "content-length", 14) == 0) {
+ _useChunkedOutput = false;
+ FlushHeader();
+ } else if (strcasecmp(_line, "Transfer-Encoding: 8bit\n") == 0) {
+ // Backward compatibility hack: older versions of
+ // Fast_HTTPServer set this invalid header, and there might
+ // exist subclasses that still do. Just discard it.
+ _linePos = 0;
+
+ } else {
+ FlushHeader();
+ }
+ }
}
- }
- }
- if (!_inHeaderRegion) {
- // End of header region was found, set up entity output stream.
- if (_useChunkedOutput) {
- // Free old (if it exists)
- if (_chunkedOutput != NULL)
- delete _chunkedOutput;
-
- _chunkedOutput = new Fast_HTTPChunkedOutputStream(*_out);
- assert(_chunkedOutput != NULL);
- _entityOutput = _chunkedOutput;
- } else {
- _entityOutput = _out;
- }
+ if (!_inHeaderRegion) {
+ // End of header region was found, set up entity output stream.
+ if (_useChunkedOutput) {
+ // Free old (if it exists)
+ if (_chunkedOutput != NULL)
+ delete _chunkedOutput;
+
+ _chunkedOutput = new Fast_HTTPChunkedOutputStream(*_out);
+ assert(_chunkedOutput != NULL);
+ _entityOutput = _chunkedOutput;
+ } else {
+ _entityOutput = _out;
+ }
+ }
}
- }
- if (length > 0) {
- ssize_t slaveWritten = _entityOutput->Write(sourceBuffer, length);
- if (slaveWritten >= 0) {
- numBytesWritten += slaveWritten;
- } else {
- numBytesWritten = slaveWritten;
+ if (length > 0) {
+ ssize_t slaveWritten = _entityOutput->Write(sourceBuffer, length);
+ if (slaveWritten >= 0) {
+ numBytesWritten += slaveWritten;
+ } else {
+ numBytesWritten = slaveWritten;
+ }
}
- }
- return numBytesWritten;
+ return numBytesWritten;
}
void Fast_HTTPPersistentOutputFilter::Flush(void)
{
- if (_inHeaderRegion) {
- FlushHeader();
- Fast_FilterOutputStream::Flush();
- } else {
- _entityOutput->Flush();
- }
+ if (_inHeaderRegion) {
+ FlushHeader();
+ Fast_FilterOutputStream::Flush();
+ } else {
+ _entityOutput->Flush();
+ }
}
Fast_HTTPServer::Fast_HTTPServer(int portNumber,
@@ -336,444 +336,444 @@ Fast_HTTPServer::Fast_HTTPServer(int portNumber,
int backlog, bool decode,
int stackSize, int maxThreads,
int clientReadTimeout /* = -1 no timeout */)
-: _connections(10),
- _connectionCond(),
- _threadPool(NULL),
- _acceptThread(NULL),
- _isRunning(false),
- _isListening(false),
- _stopSignalled(false),
- _runningMutex(),
- _maxThreads(maxThreads),
- _baseDir(),
- _allowUpRelativePath(false),
- _serverSocket(portNumber, backlog,
- &_serverSocketFactory,
- strictBindHostName),
- _decode(decode),
- _keepAlive(true),
- _serverSocketFactory(clientReadTimeout),
- _inBufSize(FASTLIB_HTTPSERVER_INBUFSIZE),
- _outBufSize(FASTLIB_HTTPSERVER_OUTBUFSIZE)
+ : _connections(10),
+ _connectionCond(),
+ _threadPool(NULL),
+ _acceptThread(NULL),
+ _isRunning(false),
+ _isListening(false),
+ _stopSignalled(false),
+ _runningMutex(),
+ _maxThreads(maxThreads),
+ _baseDir(),
+ _allowUpRelativePath(false),
+ _serverSocket(portNumber, backlog,
+ &_serverSocketFactory,
+ strictBindHostName),
+ _decode(decode),
+ _keepAlive(true),
+ _serverSocketFactory(clientReadTimeout),
+ _inBufSize(FASTLIB_HTTPSERVER_INBUFSIZE),
+ _outBufSize(FASTLIB_HTTPSERVER_OUTBUFSIZE)
{
- _threadPool = new FastOS_ThreadPool(stackSize, maxThreads);
+ _threadPool = new FastOS_ThreadPool(stackSize, maxThreads);
}
int Fast_HTTPServer::Start(void)
{
- int retCode = FASTLIB_SUCCESS;
-
- _runningMutex.Lock();
- if (!_isRunning) {
- // Try listening
- retCode = Listen();
-
- // Start worker thread
- if (retCode == FASTLIB_SUCCESS) {
- _acceptThread = static_cast<FastOS_Thread *>(_threadPool->NewThread(this));
- if (_acceptThread == NULL) {
- retCode = FASTLIB_HTTPSERVER_NEWTHREADFAILED;
- }
+ int retCode = FASTLIB_SUCCESS;
+
+ _runningMutex.Lock();
+ if (!_isRunning) {
+ // Try listening
+ retCode = Listen();
+
+ // Start worker thread
+ if (retCode == FASTLIB_SUCCESS) {
+ _acceptThread = static_cast<FastOS_Thread *>(_threadPool->NewThread(this));
+ if (_acceptThread == NULL) {
+ retCode = FASTLIB_HTTPSERVER_NEWTHREADFAILED;
+ }
+ }
+ } else {
+ retCode = FASTLIB_HTTPSERVER_ALREADYSTARTED;
}
- } else {
- retCode = FASTLIB_HTTPSERVER_ALREADYSTARTED;
- }
- _runningMutex.Unlock();
+ _runningMutex.Unlock();
- return retCode;
+ return retCode;
}
void
Fast_HTTPServer::Stop(void) {
- _runningMutex.Lock();
- _stopSignalled = true;
- if (_acceptThread) {
- _acceptThread->SetBreakFlag();
- }
- _runningMutex.Unlock();
- if (_acceptThread) {
- _acceptThread->Join();
- }
+ _runningMutex.Lock();
+ _stopSignalled = true;
+ if (_acceptThread) {
+ _acceptThread->SetBreakFlag();
+ }
+ _runningMutex.Unlock();
+ if (_acceptThread) {
+ _acceptThread->Join();
+ }
}
bool Fast_HTTPServer::StopSignalled(void)
{
- bool retVal;
- _runningMutex.Lock();
- retVal = _stopSignalled;
- _runningMutex.Unlock();
- return retVal;
+ bool retVal;
+ _runningMutex.Lock();
+ retVal = _stopSignalled;
+ _runningMutex.Unlock();
+ return retVal;
}
Fast_HTTPServer::~Fast_HTTPServer(void)
{
- Stop();
+ Stop();
- _connectionCond.Lock();
+ _connectionCond.Lock();
- for (Fast_BagIterator<Fast_HTTPConnection*> i(_connections); !i.End(); i.Next())
- i.GetCurrent()->Interrupt();
+ for (Fast_BagIterator<Fast_HTTPConnection*> i(_connections); !i.End(); i.Next())
+ i.GetCurrent()->Interrupt();
- while (_connections.NumberOfElements() > 0)
- _connectionCond.Wait();
+ while (_connections.NumberOfElements() > 0)
+ _connectionCond.Wait();
- _connectionCond.Unlock();
- delete _threadPool;
+ _connectionCond.Unlock();
+ delete _threadPool;
}
int Fast_HTTPServer::Listen(void)
{
- int retCode = FASTLIB_SUCCESS;
+ int retCode = FASTLIB_SUCCESS;
- if(!_isListening) {
- if (_serverSocket.Listen()) {
- _isListening = true;
- } else {
- std::string errorMsg = FastOS_Socket::getErrorString(FastOS_Socket::GetLastError());
- retCode = FASTLIB_HTTPSERVER_BADLISTEN;
+ if(!_isListening) {
+ if (_serverSocket.Listen()) {
+ _isListening = true;
+ } else {
+ std::string errorMsg = FastOS_Socket::getErrorString(FastOS_Socket::GetLastError());
+ retCode = FASTLIB_HTTPSERVER_BADLISTEN;
+ }
}
- }
- return retCode;
+ return retCode;
}
void Fast_HTTPServer::Run(FastOS_ThreadInterface *thisThread, void *params)
{
- (void) thisThread;
- (void) params;
- Fast_Socket *mySocket;
-
-
- _runningMutex.Lock();
- _isRunning = true;
- _stopSignalled = false;
- _runningMutex.Unlock();
-
- if (Listen() == FASTLIB_SUCCESS) {
- FastOS_SocketEvent socketEvent;
- if (_serverSocket.SetSocketEvent(&socketEvent)) {
- _serverSocket.EnableReadEvent(true);
- while (!thisThread->GetBreakFlag()) {
- bool waitError;
- if (!socketEvent.Wait(waitError, 500)) {
- if (waitError) {
+ (void) thisThread;
+ (void) params;
+ Fast_Socket *mySocket;
+
+
+ _runningMutex.Lock();
+ _isRunning = true;
+ _stopSignalled = false;
+ _runningMutex.Unlock();
+
+ if (Listen() == FASTLIB_SUCCESS) {
+ FastOS_SocketEvent socketEvent;
+ if (_serverSocket.SetSocketEvent(&socketEvent)) {
+ _serverSocket.EnableReadEvent(true);
+ while (!thisThread->GetBreakFlag()) {
+ bool waitError;
+ if (!socketEvent.Wait(waitError, 500)) {
+ if (waitError) {
// fprintf(stderr, "HTTPServer: ERROR: Wait on server socket failed.\n");
- }
- continue;
- }
-
- // If number of threads is limited, ensure that the limit is
- // not breached. Starvation is impossible, since threads are
- // only allocated here.
- if (_maxThreads != 0) {
- while (_threadPool->GetNumActiveThreads() == _maxThreads) {
- FastOS_Thread::Sleep(50);
- }
- }
-
- mySocket = static_cast<Fast_Socket *>(_serverSocket.Accept());
-
- if (mySocket != NULL) {
- mySocket->SetNoDelay(true);
- Fast_HTTPConnection *connectionHandler =
- new Fast_HTTPConnection(mySocket, // Takes ownership
- _decode,
- _inBufSize,
- _outBufSize);
-
- if (_keepAlive == false) {
- connectionHandler->SetKeepAlive(false);
- }
-
- auto* thread = _threadPool->NewThread(connectionHandler, this);
- if (thread == nullptr) {
- // Thread pool has been shut down; cannot service request.
- delete connectionHandler;
- }
+ }
+ continue;
+ }
+
+ // If number of threads is limited, ensure that the limit is
+ // not breached. Starvation is impossible, since threads are
+ // only allocated here.
+ if (_maxThreads != 0) {
+ while (_threadPool->GetNumActiveThreads() == _maxThreads) {
+ FastOS_Thread::Sleep(50);
+ }
+ }
+
+ mySocket = static_cast<Fast_Socket *>(_serverSocket.Accept());
+
+ if (mySocket != NULL) {
+ mySocket->SetNoDelay(true);
+ Fast_HTTPConnection *connectionHandler =
+ new Fast_HTTPConnection(mySocket, // Takes ownership
+ _decode,
+ _inBufSize,
+ _outBufSize);
+
+ if (_keepAlive == false) {
+ connectionHandler->SetKeepAlive(false);
+ }
+
+ auto* thread = _threadPool->NewThread(connectionHandler, this);
+ if (thread == nullptr) {
+ // Thread pool has been shut down; cannot service request.
+ delete connectionHandler;
+ }
+ } else {
+ FastOS_Thread::Sleep(1000);
+ // fprintf(stderr, "HTTPServer: ERROR: Accept did not return a valid socket. Terminating\n");
+ }
+ }
+ _serverSocket.EnableReadEvent(false);
} else {
- FastOS_Thread::Sleep(1000);
- // fprintf(stderr, "HTTPServer: ERROR: Accept did not return a valid socket. Terminating\n");
- }
- }
- _serverSocket.EnableReadEvent(false);
- } else {
// fprintf(stderr, "HTTPServer: ERROR: Unable to set socket event handler.\n");
+ }
+ _serverSocket.SetSocketEvent(NULL);
}
- _serverSocket.SetSocketEvent(NULL);
- }
- _runningMutex.Lock();
- _isRunning = false;
- _runningMutex.Unlock();
+ _runningMutex.Lock();
+ _isRunning = false;
+ _runningMutex.Unlock();
}
void Fast_HTTPConnection::Run(FastOS_ThreadInterface *thisThread, void *params)
{
- (void) thisThread;
- vespalib::string fLine, contentType;
- vespalib::string url, host;
-
- enum request_type { HTTPSERVER_UNSUPPORTEDREQUEST,
- HTTPSERVER_GETREQUEST,
- HTTPSERVER_POSTREQUEST,
- HTTPSERVER_PUTREQUEST,
- HTTPSERVER_DELETEREQUEST
- } requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
+ (void) thisThread;
+ vespalib::string fLine, contentType;
+ vespalib::string url, host;
+ enum request_type { HTTPSERVER_UNSUPPORTEDREQUEST,
+ HTTPSERVER_GETREQUEST,
+ HTTPSERVER_POSTREQUEST,
+ HTTPSERVER_PUTREQUEST,
+ HTTPSERVER_DELETEREQUEST
+ } requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
- _server = static_cast<Fast_HTTPServer *>(params);
- _server->AddConnection(this);
- Fast_InputStream *originalInput = _input;
- Fast_HTTPPersistentInputFilter *persistentInput = NULL;
- Fast_OutputStream *originalOutput = _output;
- Fast_HTTPPersistentOutputFilter *persistentOutput = NULL;
+ _server = static_cast<Fast_HTTPServer *>(params);
+ _server->AddConnection(this);
- Fast_HTTPHeaderParser headerParser(static_cast<Fast_BufferedInputStream &>(*_input));
+ Fast_InputStream *originalInput = _input;
+ Fast_HTTPPersistentInputFilter *persistentInput = NULL;
+ Fast_OutputStream *originalOutput = _output;
+ Fast_HTTPPersistentOutputFilter *persistentOutput = NULL;
- do {
+ Fast_HTTPHeaderParser headerParser(static_cast<Fast_BufferedInputStream &>(*_input));
- bool printContinue = false; // RFC2616, 8.2.3
- bool chunkedInput = false;
- int contentLength = 0;
+ do {
- // Get request line.
+ bool printContinue = false; // RFC2616, 8.2.3
+ bool chunkedInput = false;
+ int contentLength = 0;
- const char *requestCStr, *urlCStr;
- int versionMajor, versionMinor;
+ // Get request line.
- if (! headerParser.ReadRequestLine(requestCStr, urlCStr, versionMajor, versionMinor))
- break;
-
- if (strcmp(requestCStr, "POST") == 0) {
- requestType = HTTPSERVER_POSTREQUEST;
- } else if (strcmp(requestCStr, "GET") == 0) {
- requestType = HTTPSERVER_GETREQUEST;
- } else if (strcmp(requestCStr, "PUT") == 0) {
- requestType = HTTPSERVER_PUTREQUEST;
- } else if (strcmp(requestCStr, "DELETE") == 0) {
- requestType = HTTPSERVER_DELETEREQUEST;
- } else {
- requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
- }
+ const char *requestCStr, *urlCStr;
+ int versionMajor, versionMinor;
- if (_decode) {
- vespalib::string encodedURL(urlCStr);
- int bufferLength = encodedURL.length()+10;
- char *decodedURL = new char[bufferLength];
- Fast_URL urlCodec;
- urlCodec.decode(encodedURL.c_str(), decodedURL, bufferLength);
- urlCodec.DecodeQueryString(decodedURL);
- url = decodedURL;
- delete [] decodedURL;
- } else {
- url = urlCStr;
- }
+ if (! headerParser.ReadRequestLine(requestCStr, urlCStr, versionMajor, versionMinor))
+ break;
- if (versionMajor != 1) {
- requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
- }
- if (versionMinor < 1) {
- _keepAlive = false; // No keepAlive for HTTP/1.0 and HTTP/0.9
- }
- _versionMajor = versionMajor;
- _versionMinor = versionMinor;
- _httpVersion = vespalib::make_string("HTTP/%d.%d", _versionMajor, _versionMinor);
-
- const char *headerName, *headerValue;
- while(headerParser.ReadHeader(headerName, headerValue)) {
- if (strcasecmp(headerName, "content-length") == 0) {
- contentLength = atoi(headerValue);
- //printf("Found content length: %i\n", contentLength);
- }
-
- if (strcasecmp(headerName, "content-type") == 0) {
- contentType = headerValue;
- }
+ if (strcmp(requestCStr, "POST") == 0) {
+ requestType = HTTPSERVER_POSTREQUEST;
+ } else if (strcmp(requestCStr, "GET") == 0) {
+ requestType = HTTPSERVER_GETREQUEST;
+ } else if (strcmp(requestCStr, "PUT") == 0) {
+ requestType = HTTPSERVER_PUTREQUEST;
+ } else if (strcmp(requestCStr, "DELETE") == 0) {
+ requestType = HTTPSERVER_DELETEREQUEST;
+ } else {
+ requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
+ }
- if (strcasecmp(headerName, "connection") == 0) {
- if (strcasecmp(headerValue, "close") == 0) {
- _keepAlive = false;
+ if (_decode) {
+ vespalib::string encodedURL(urlCStr);
+ int bufferLength = encodedURL.length()+10;
+ char *decodedURL = new char[bufferLength];
+ Fast_URL urlCodec;
+ urlCodec.decode(encodedURL.c_str(), decodedURL, bufferLength);
+ urlCodec.DecodeQueryString(decodedURL);
+ url = decodedURL;
+ delete [] decodedURL;
+ } else {
+ url = urlCStr;
}
- }
- if (strcasecmp(headerName, "host") == 0) {
- host = headerValue;
- }
+ if (versionMajor != 1) {
+ requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
+ }
+ if (versionMinor < 1) {
+ _keepAlive = false; // No keepAlive for HTTP/1.0 and HTTP/0.9
+ }
+ _versionMajor = versionMajor;
+ _versionMinor = versionMinor;
+ _httpVersion = vespalib::make_string("HTTP/%d.%d", _versionMajor, _versionMinor);
+
+ const char *headerName, *headerValue;
+ while(headerParser.ReadHeader(headerName, headerValue)) {
+ if (strcasecmp(headerName, "content-length") == 0) {
+ contentLength = atoi(headerValue);
+ //printf("Found content length: %i\n", contentLength);
+ }
+
+ if (strcasecmp(headerName, "content-type") == 0) {
+ contentType = headerValue;
+ }
+
+ if (strcasecmp(headerName, "connection") == 0) {
+ if (strcasecmp(headerValue, "close") == 0) {
+ _keepAlive = false;
+ }
+ }
+
+ if (strcasecmp(headerName, "host") == 0) {
+ host = headerValue;
+ }
+
+ if (strcasecmp(headerName, "cookie") == 0) {
+ _cookies = headerValue;
+ }
+
+ if (strcasecmp(headerName, "expect") == 0) {
+ if (strcasecmp(headerValue, "100-continue") == 0) {
+ printContinue = true;
+ } else {
+ // TODO: Return reponse code 417 instead of 505.
+ requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
+ }
+ }
+
+ if (strcasecmp(headerName, "transfer-encoding") == 0) {
+ if (strcasecmp(headerValue, "chunked") == 0) {
+ chunkedInput = true;
+ } else {
+ // Only chunked is supported so far.
+ requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
+ }
+ }
+
+ if (strcasecmp(headerName, "authorization") == 0) {
+ if (strncasecmp(headerValue, "basic",5) == 0) {
+ char *auth = new char[strlen(headerValue)-4];
+ int len = Fast_Base64::Decode(headerValue+5,strlen(headerValue)-5,auth);
+ if(len>=0) auth[len]=0;
+ char *pass=strchr(auth,':');
+ if(pass!=NULL){
+ *pass++=0;
+ _auth_user=auth;
+ _auth_pass=pass;
+ }
+ delete[] auth;
+ }
+ }
+ }
- if (strcasecmp(headerName, "cookie") == 0) {
- _cookies = headerValue;
- }
- if (strcasecmp(headerName, "expect") == 0) {
- if (strcasecmp(headerValue, "100-continue") == 0) {
- printContinue = true;
+ if (_keepAlive) {
+ // Set up filters for persistent input and output.
+
+ if (persistentInput == NULL) {
+ persistentInput = new Fast_HTTPPersistentInputFilter(*originalInput);
+ assert(persistentInput != NULL);
+ }
+ if (chunkedInput) {
+ // If chunked input is specified in headers, ignore content-length
+ // and use chunked encoding, according to RFC.
+ persistentInput->SetChunkedEncoding();
+ } else {
+ // Works as intended if content length == 0 (i.e. no entity body).
+ persistentInput->SetEntityLength(contentLength);
+ }
+ _input = persistentInput;
+
+ if (persistentOutput == NULL) {
+ persistentOutput = new Fast_HTTPPersistentOutputFilter(*originalOutput);
+ assert(persistentOutput != NULL);
+ }
+ _output = persistentOutput;
} else {
- // TODO: Return reponse code 417 instead of 505.
- requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
+ _input = originalInput;
+ _output = originalOutput;
}
- }
- if (strcasecmp(headerName, "transfer-encoding") == 0) {
- if (strcasecmp(headerValue, "chunked") == 0) {
- chunkedInput = true;
- } else {
- // Only chunked is supported so far.
- requestType = HTTPSERVER_UNSUPPORTEDREQUEST;
- }
- }
-
- if (strcasecmp(headerName, "authorization") == 0) {
- if (strncasecmp(headerValue, "basic",5) == 0) {
- char *auth = new char[strlen(headerValue)-4];
- int len = Fast_Base64::Decode(headerValue+5,strlen(headerValue)-5,auth);
- if(len>=0) auth[len]=0;
- char *pass=strchr(auth,':');
- if(pass!=NULL){
- *pass++=0;
- _auth_user=auth;
- _auth_pass=pass;
- }
- delete[] auth;
+ if (printContinue) {
+ Output(_httpVersion.c_str());
+ Output(" 100 Continue\r\n");
}
- }
- }
- if (_keepAlive) {
- // Set up filters for persistent input and output.
-
- if (persistentInput == NULL) {
- persistentInput = new Fast_HTTPPersistentInputFilter(*originalInput);
- assert(persistentInput != NULL);
- }
- if (chunkedInput) {
- // If chunked input is specified in headers, ignore content-length
- // and use chunked encoding, according to RFC.
- persistentInput->SetChunkedEncoding();
- } else {
- // Works as intended if content length == 0 (i.e. no entity body).
- persistentInput->SetEntityLength(contentLength);
- }
- _input = persistentInput;
-
- if (persistentOutput == NULL) {
- persistentOutput = new Fast_HTTPPersistentOutputFilter(*originalOutput);
- assert(persistentOutput != NULL);
- }
- _output = persistentOutput;
- } else {
- _input = originalInput;
- _output = originalOutput;
- }
+ switch(requestType) {
+ case HTTPSERVER_GETREQUEST:
+ {
+ _server->onGetRequest(url, host, *this);
+ break;
+ }
- if (printContinue) {
- Output(_httpVersion.c_str());
- Output(" 100 Continue\r\n");
- }
+ case HTTPSERVER_POSTREQUEST:
+ {
+ _server->OnPostRequest(url, host, contentType, contentLength,
+ *this, *_input, *_output);
+ break;
+ }
+ case HTTPSERVER_PUTREQUEST:
+ {
+ _server->OnPutRequest(url, host, contentType, contentLength,
+ *this, *_input, *_output);
+ break;
+ }
- switch(requestType) {
- case HTTPSERVER_GETREQUEST:
- {
- _server->onGetRequest(url, host, *this);
- break;
- }
-
- case HTTPSERVER_POSTREQUEST:
- {
- _server->OnPostRequest(url, host, contentType, contentLength,
- *this, *_input, *_output);
- break;
- }
-
- case HTTPSERVER_PUTREQUEST:
- {
- _server->OnPutRequest(url, host, contentType, contentLength,
- *this, *_input, *_output);
- break;
- }
-
- case HTTPSERVER_DELETEREQUEST:
- {
- _server->OnDeleteRequest(url, host, *this);
- break;
- }
-
- case HTTPSERVER_UNSUPPORTEDREQUEST:
- default:
- {
- _server->OnUnsupportedRequest(url, host, *this);
- _keepAlive = false;
- break;
- }
- }
+ case HTTPSERVER_DELETEREQUEST:
+ {
+ _server->OnDeleteRequest(url, host, *this);
+ break;
+ }
- // Ensure all of request entity body is read if connection is
- // persistent.
- if (_keepAlive) {
- ssize_t numBytesRead;
- char buffer[1024];
- while ((numBytesRead = _input->Read(buffer, sizeof(buffer))) > 0) {
- // Keep reading
- }
- _keepAlive = (numBytesRead == 0);
- _input = originalInput;
- }
+ case HTTPSERVER_UNSUPPORTEDREQUEST:
+ default:
+ {
+ _server->OnUnsupportedRequest(url, host, *this);
+ _keepAlive = false;
+ break;
+ }
+ }
+
+ // Ensure all of request entity body is read if connection is
+ // persistent.
+ if (_keepAlive) {
+ ssize_t numBytesRead;
+ char buffer[1024];
+ while ((numBytesRead = _input->Read(buffer, sizeof(buffer))) > 0) {
+ // Keep reading
+ }
+ _keepAlive = (numBytesRead == 0);
+ _input = originalInput;
+ }
- _output->Flush();
- _output->Close();
+ _output->Flush();
+ _output->Close();
- } while (_keepAlive && !_server->StopSignalled());
+ } while (_keepAlive && !_server->StopSignalled());
- // Close connection
- _socket->Close();
+ // Close connection
+ _socket->Close();
- _input = originalInput; // To be deleted by destructor
- delete persistentInput;
+ _input = originalInput; // To be deleted by destructor
+ delete persistentInput;
- _output = originalOutput; // To be deleted by destructor
- delete persistentOutput;
+ _output = originalOutput; // To be deleted by destructor
+ delete persistentOutput;
- delete this;
+ delete this;
}
void Fast_HTTPServer::onGetRequest(const string & tmpurl, const string & host, Fast_HTTPConnection& conn)
{
- // Trim leading / if it exists
- string url(tmpurl);
- if (url.length()>0) {
- if (url[0]=='/') {
- url = url.substr(1);
+ // Trim leading / if it exists
+ string url(tmpurl);
+ if (url.length()>0) {
+ if (url[0]=='/') {
+ url = url.substr(1);
+ }
}
- }
-
- if (IsFileRequest(url)) {
- HandleFileRequest(url, conn);
- } else {
- // Output html content header
- conn.Output(conn.GetHTTPVersion().c_str());
- conn.Output(" 200 OK\r\n");
- conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
- if (conn.GetKeepAlive() == false)
- conn.Output("Connection: close\r\n");
- conn.Output("Content-Type: text/html\r\n\r\n");
- // Output user specific body
- OnWriteBody(url, host, conn);
- }
+ if (IsFileRequest(url)) {
+ HandleFileRequest(url, conn);
+ } else {
+ // Output html content header
+ conn.Output(conn.GetHTTPVersion().c_str());
+ conn.Output(" 200 OK\r\n");
+ conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
+ if (conn.GetKeepAlive() == false)
+ conn.Output("Connection: close\r\n");
+ conn.Output("Content-Type: text/html\r\n\r\n");
+
+ // Output user specific body
+ OnWriteBody(url, host, conn);
+ }
}
@@ -787,32 +787,32 @@ void Fast_HTTPServer::OnPostRequest(const string & url,
Fast_OutputStream& outputStream)
{
- // Ignore all parameters
- (void) url;
- (void) host;
- (void) contentType;
- (void) contentLength;
- (void) inputStream;
- (void) outputStream;
- (void) contentLength;
-
- // Output html content header
- conn.Output(conn.GetHTTPVersion().c_str());
- conn.Output(" 200 OK\r\n");
- conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
- if (conn.GetKeepAlive() == false)
- conn.Output("Connection: close\r\n");
- conn.Output("Content-Type: text/html\r\n\r\n");
-
- // Body output example
- conn.Output("<html> \r\n");
- conn.Output("<head> \r\n");
- conn.Output("<title>Test title</title> \r\n");
- conn.Output("</head> \r\n");
- conn.Output("<body> \r\n");
- conn.Output("<p>Implement the virtual function 'OnPostRequest()' to change this page!</p>\r\n");
- conn.Output("</body> \r\n");
- conn.Output("</html> \r\n\r\n");
+ // Ignore all parameters
+ (void) url;
+ (void) host;
+ (void) contentType;
+ (void) contentLength;
+ (void) inputStream;
+ (void) outputStream;
+ (void) contentLength;
+
+ // Output html content header
+ conn.Output(conn.GetHTTPVersion().c_str());
+ conn.Output(" 200 OK\r\n");
+ conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
+ if (conn.GetKeepAlive() == false)
+ conn.Output("Connection: close\r\n");
+ conn.Output("Content-Type: text/html\r\n\r\n");
+
+ // Body output example
+ conn.Output("<html> \r\n");
+ conn.Output("<head> \r\n");
+ conn.Output("<title>Test title</title> \r\n");
+ conn.Output("</head> \r\n");
+ conn.Output("<body> \r\n");
+ conn.Output("<p>Implement the virtual function 'OnPostRequest()' to change this page!</p>\r\n");
+ conn.Output("</body> \r\n");
+ conn.Output("</html> \r\n\r\n");
}
@@ -827,240 +827,240 @@ void Fast_HTTPServer::OnPutRequest(const string & url,
Fast_OutputStream& outputStream)
{
- // Ignore parameters not passed on to OnUnsupportedRequest()
- (void) contentType;
- (void) contentLength;
- (void) inputStream;
- (void) outputStream;
- (void) contentLength;
+ // Ignore parameters not passed on to OnUnsupportedRequest()
+ (void) contentType;
+ (void) contentLength;
+ (void) inputStream;
+ (void) outputStream;
+ (void) contentLength;
- OnUnsupportedRequest(url, host, conn);
+ OnUnsupportedRequest(url, host, conn);
}
void Fast_HTTPServer::OnDeleteRequest(const string & url, const string & host, Fast_HTTPConnection& conn)
{
- OnUnsupportedRequest(url, host, conn);
+ OnUnsupportedRequest(url, host, conn);
}
void Fast_HTTPServer::OnUnsupportedRequest(const string & url, const string & host, Fast_HTTPConnection& conn)
{
- (void) url;
- (void) host;
+ (void) url;
+ (void) host;
- conn.Output(conn.GetHTTPVersion().c_str());
- conn.Output(" 501 Not Implemented\r\n\r\n");
+ conn.Output(conn.GetHTTPVersion().c_str());
+ conn.Output(" 501 Not Implemented\r\n\r\n");
}
void Fast_HTTPServer::OnWriteBody(const string & url, const string & host, Fast_HTTPConnection& conn)
{
- (void) url;
- (void) host;
-
- // Body output example
- conn.Output("<html> \r\n");
- conn.Output("<head> \r\n");
- conn.Output("<title>Test title</title> \r\n");
- conn.Output("</head> \r\n");
- conn.Output("<body> \r\n");
- conn.Output("<p>Implement the virtual function 'OnWriteBody()' to change this page!</p>\r\n");
- conn.Output("</body> \r\n");
- conn.Output("</html> \r\n\r\n");
+ (void) url;
+ (void) host;
+
+ // Body output example
+ conn.Output("<html> \r\n");
+ conn.Output("<head> \r\n");
+ conn.Output("<title>Test title</title> \r\n");
+ conn.Output("</head> \r\n");
+ conn.Output("<body> \r\n");
+ conn.Output("<p>Implement the virtual function 'OnWriteBody()' to change this page!</p>\r\n");
+ conn.Output("</body> \r\n");
+ conn.Output("</html> \r\n\r\n");
}
void Fast_HTTPConnection::OutputData(const void *data, size_t len)
{
- const char *dataPosition = static_cast<const char *>(data);
+ const char *dataPosition = static_cast<const char *>(data);
- while (len > 0) {
- ssize_t numBytesWritten = _output->Write(dataPosition, len);
- if (numBytesWritten >= 0) {
- dataPosition += numBytesWritten;
- len -= numBytesWritten;
- } else {
- break;
+ while (len > 0) {
+ ssize_t numBytesWritten = _output->Write(dataPosition, len);
+ if (numBytesWritten >= 0) {
+ dataPosition += numBytesWritten;
+ len -= numBytesWritten;
+ } else {
+ break;
+ }
}
- }
}
void Fast_HTTPConnection::Output(const char *text)
{
- size_t length = strlen(text);
-
- while (length > 0) {
- ssize_t numBytesWritten = _output->Write(text, length);
- if (numBytesWritten >= 0) {
- text += numBytesWritten;
- length -= numBytesWritten;
- } else {
- break;
- }
- }
+ size_t length = strlen(text);
+
+ while (length > 0) {
+ ssize_t numBytesWritten = _output->Write(text, length);
+ if (numBytesWritten >= 0) {
+ text += numBytesWritten;
+ length -= numBytesWritten;
+ } else {
+ break;
+ }
+ }
}
bool Fast_HTTPServer::IsFileRequest(const string & url)
{
- bool retVal = false;
+ bool retVal = false;
- // Check if the request is for a file (stupid test now)
- if (url.length() > 4) {
- if (url[url.length()-4]=='.') retVal = true;
+ // Check if the request is for a file (stupid test now)
+ if (url.length() > 4) {
+ if (url[url.length()-4]=='.') retVal = true;
- if (url.length() > 5) {
- if (url[url.length()-5]=='.') retVal = true;
+ if (url.length() > 5) {
+ if (url[url.length()-5]=='.') retVal = true;
- if (url.length() > 6) {
- if (url[url.length()-6]=='.') retVal = true;
- }
- }
- }
+ if (url.length() > 6) {
+ if (url[url.length()-6]=='.') retVal = true;
+ }
+ }
+ }
- return retVal;
+ return retVal;
}
void Fast_HTTPServer::PushHtml(const string & url, Fast_HTTPConnection& conn)
{
- // Add base dir to relative path and file name
- string fileName = _baseDir + url;
+ // Add base dir to relative path and file name
+ string fileName = _baseDir + url;
- FastOS_File file;
+ FastOS_File file;
- if (file.OpenReadOnly(fileName.c_str())) {
- conn.OutputFile(&file);
- } else {
- OutputNotFound(conn, &url, false);
- }
+ if (file.OpenReadOnly(fileName.c_str())) {
+ conn.OutputFile(&file);
+ } else {
+ OutputNotFound(conn, &url, false);
+ }
- file.Close();
+ file.Close();
}
void Fast_HTTPServer::HandleFileRequest(const string & url, Fast_HTTPConnection& conn)
{
- string status403;
- vespalib::string upRelative(FastOS_File::GetPathSeparator());
- upRelative += "..";
- upRelative += FastOS_File::GetPathSeparator();
- vespalib::string upRelative2("/../");
-
- bool isUpRelative =
- _allowUpRelativePath == false &&
- (vespalib::contains(url, upRelative) ||
- vespalib::contains(url, upRelative2) ||
- vespalib::starts_with(url, "../") ||
- vespalib::starts_with(url, "..\\"));
-
- // Security policy:
- // Do not allow file requests if _baseDir is not set.
- // Do not allow UpRelative paths if not explicitly enabled with
- // SetAllowUpRelativePath(true);
- if (_baseDir.length() == 0 || isUpRelative ) {
- conn.Output(conn.GetHTTPVersion().c_str());
- conn.Output(" 403 FORBIDDEN\r\n");
- conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
- conn.Output("Content-Type: text/html\r\n");
- conn.Output("Connection: close\r\n");
-
- status403.append("<html> \r\n");
- status403.append("<head> \r\n");
- status403.append("<title>Error 403</title> \r\n");
- status403.append("</head> \r\n");
- status403.append("<body> \r\n");
- status403.append("<h2>HTTP Error 403</h2>\r\n");
- status403.append("<p><strong>403 Forbidden</strong></p>\r\n");
- status403.append("</body></html>\r\n\r\n");
-
- conn.Output(vespalib::make_string("Content-Length: %ld\r\n\r\n", status403.length()).c_str());
- conn.Output(status403.c_str());
- return;
- }
-
- // Add base dir to relative path and file name
- string fileName = _baseDir + url;
-
- FastOS_File file;
-
- if (file.OpenReadOnly(fileName.c_str())) {
- bool contentTypeKnown = false;
-
- conn.Output(conn.GetHTTPVersion().c_str());
- conn.Output(" 200 OK\r\n");
- conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
- conn.Output("Content-Length: ");
- conn.Output(vespalib::make_string("%ld", file.GetSize()).c_str());
- conn.Output("\r\n");
-
- if (conn.GetKeepAlive() == false)
+ string status403;
+ vespalib::string upRelative(FastOS_File::GetPathSeparator());
+ upRelative += "..";
+ upRelative += FastOS_File::GetPathSeparator();
+ vespalib::string upRelative2("/../");
+
+ bool isUpRelative =
+ _allowUpRelativePath == false &&
+ (vespalib::contains(url, upRelative) ||
+ vespalib::contains(url, upRelative2) ||
+ vespalib::starts_with(url, "../") ||
+ vespalib::starts_with(url, "..\\"));
+
+ // Security policy:
+ // Do not allow file requests if _baseDir is not set.
+ // Do not allow UpRelative paths if not explicitly enabled with
+ // SetAllowUpRelativePath(true);
+ if (_baseDir.length() == 0 || isUpRelative ) {
+ conn.Output(conn.GetHTTPVersion().c_str());
+ conn.Output(" 403 FORBIDDEN\r\n");
+ conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
+ conn.Output("Content-Type: text/html\r\n");
conn.Output("Connection: close\r\n");
- if (ends_with(url, ".gif")) {
- conn.Output("Content-Type: image/gif\r\n");
- contentTypeKnown = true;
- }
+ status403.append("<html> \r\n");
+ status403.append("<head> \r\n");
+ status403.append("<title>Error 403</title> \r\n");
+ status403.append("</head> \r\n");
+ status403.append("<body> \r\n");
+ status403.append("<h2>HTTP Error 403</h2>\r\n");
+ status403.append("<p><strong>403 Forbidden</strong></p>\r\n");
+ status403.append("</body></html>\r\n\r\n");
+
+ conn.Output(vespalib::make_string("Content-Length: %ld\r\n\r\n", status403.length()).c_str());
+ conn.Output(status403.c_str());
+ return;
+ }
+
+ // Add base dir to relative path and file name
+ string fileName = _baseDir + url;
- if (ends_with(url, ".html") || ends_with(url, ".htm")) {
- conn.Output("Content-Type: text/html\r\n");
- contentTypeKnown = true;
- }
+ FastOS_File file;
- if (ends_with(url, ".jpeg") || ends_with(url, ".jpg")) {
- conn.Output("Content-Type: image/jpeg\r\n");
- contentTypeKnown = true;
- }
+ if (file.OpenReadOnly(fileName.c_str())) {
+ bool contentTypeKnown = false;
- if (!contentTypeKnown) {
- conn.Output("Content-Type: application/octet-stream\r\n");
- }
+ conn.Output(conn.GetHTTPVersion().c_str());
+ conn.Output(" 200 OK\r\n");
+ conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
+ conn.Output("Content-Length: ");
+ conn.Output(vespalib::make_string("%ld", file.GetSize()).c_str());
+ conn.Output("\r\n");
- conn.Output("\r\n");
- conn.OutputFile(&file);
+ if (conn.GetKeepAlive() == false)
+ conn.Output("Connection: close\r\n");
- } else {
- OutputNotFound(conn, &url);
- }
+ if (ends_with(url, ".gif")) {
+ conn.Output("Content-Type: image/gif\r\n");
+ contentTypeKnown = true;
+ }
+
+ if (ends_with(url, ".html") || ends_with(url, ".htm")) {
+ conn.Output("Content-Type: text/html\r\n");
+ contentTypeKnown = true;
+ }
- file.Close();
+ if (ends_with(url, ".jpeg") || ends_with(url, ".jpg")) {
+ conn.Output("Content-Type: image/jpeg\r\n");
+ contentTypeKnown = true;
+ }
+
+ if (!contentTypeKnown) {
+ conn.Output("Content-Type: application/octet-stream\r\n");
+ }
+
+ conn.Output("\r\n");
+ conn.OutputFile(&file);
+
+ } else {
+ OutputNotFound(conn, &url);
+ }
+
+ file.Close();
}
void Fast_HTTPServer::SetBaseDir(const char *baseDir)
{
- _runningMutex.Lock();
- if (!_isRunning) {
- _baseDir = baseDir;
-
- if (_baseDir.length() > 0) {
- // Add '/' if it was not supplied
- if (_baseDir[_baseDir.length()-1] != '/') {
- _baseDir.append("/");
- }
+ _runningMutex.Lock();
+ if (!_isRunning) {
+ _baseDir = baseDir;
+
+ if (_baseDir.length() > 0) {
+ // Add '/' if it was not supplied
+ if (_baseDir[_baseDir.length()-1] != '/') {
+ _baseDir.append("/");
+ }
+ }
+ } else {
+ fprintf(stderr, "HTTPServer: Tried to set base dir after the server had been started. Request denied.\r\n");
}
- } else {
- fprintf(stderr, "HTTPServer: Tried to set base dir after the server had been started. Request denied.\r\n");
- }
- _runningMutex.Unlock();
+ _runningMutex.Unlock();
}
void
Fast_HTTPServer::SetAllowUpRelativePath(bool allowUpRelativePath) {
- _allowUpRelativePath = allowUpRelativePath;
+ _allowUpRelativePath = allowUpRelativePath;
}
bool
Fast_HTTPServer::GetAllowUpRelativePath() {
- return _allowUpRelativePath;
+ return _allowUpRelativePath;
}
@@ -1068,64 +1068,64 @@ Fast_HTTPConnection::Fast_HTTPConnection(Fast_Socket *sock,
bool decode,
size_t inBufSize,
size_t outBufSize)
- : _decode(decode),
- _socket(sock),
- _input(NULL),
- _output(NULL),
- _server(NULL),
- _chunkedInput(false),
- _chunkedOutput(false),
- _keepAlive(true), // Per default, keepalive is true for HTTP/1.1
- _auth_user(),
- _auth_pass(),
- _versionMajor(1), // Default HTTP version is 1.1
- _versionMinor(1),
- _httpVersion(),
- _cookies()
+ : _decode(decode),
+ _socket(sock),
+ _input(NULL),
+ _output(NULL),
+ _server(NULL),
+ _chunkedInput(false),
+ _chunkedOutput(false),
+ _keepAlive(true), // Per default, keepalive is true for HTTP/1.1
+ _auth_user(),
+ _auth_pass(),
+ _versionMajor(1), // Default HTTP version is 1.1
+ _versionMinor(1),
+ _httpVersion(),
+ _cookies()
{
- _input = new Fast_BufferedInputStream(*_socket, inBufSize);
- _output = new Fast_BufferedOutputStream(*_socket, outBufSize);
+ _input = new Fast_BufferedInputStream(*_socket, inBufSize);
+ _output = new Fast_BufferedOutputStream(*_socket, outBufSize);
- _httpVersion = vespalib::make_string("HTTP/%d.%d", _versionMajor, _versionMinor);
+ _httpVersion = vespalib::make_string("HTTP/%d.%d", _versionMajor, _versionMinor);
}
Fast_HTTPConnection::~Fast_HTTPConnection(void)
{
- if (_server) {
- _server->RemoveConnection(this);
- }
+ if (_server) {
+ _server->RemoveConnection(this);
+ }
- delete _input;
- delete _output;
- delete _socket;
+ delete _input;
+ delete _output;
+ delete _socket;
}
void Fast_HTTPConnection::OutputFile(FastOS_FileInterface *file)
{
- const int bufferSize = 2048;
- char buffer[bufferSize];
- int bytesRead;
-
- file->SetPosition (0); // Try to read from start of file
-
- while ((bytesRead=file->Read(buffer, 2048)) > 0) {
- ssize_t bytesLeft = bytesRead;
- char * bufferPos = buffer;
-
- while (bytesLeft > 0) {
- ssize_t numBytesWritten = _output->Write(bufferPos, bytesLeft);
- if (numBytesWritten >= 0) {
- bufferPos += numBytesWritten;
- bytesLeft -= numBytesWritten;
- } else {
- return;
- }
- }
- }
+ const int bufferSize = 2048;
+ char buffer[bufferSize];
+ int bytesRead;
+
+ file->SetPosition (0); // Try to read from start of file
+
+ while ((bytesRead=file->Read(buffer, 2048)) > 0) {
+ ssize_t bytesLeft = bytesRead;
+ char * bufferPos = buffer;
+
+ while (bytesLeft > 0) {
+ ssize_t numBytesWritten = _output->Write(bufferPos, bytesLeft);
+ if (numBytesWritten >= 0) {
+ bufferPos += numBytesWritten;
+ bytesLeft -= numBytesWritten;
+ } else {
+ return;
+ }
+ }
+ }
}
@@ -1134,64 +1134,64 @@ void Fast_HTTPServer::OutputNotFound(Fast_HTTPConnection& conn,
const string *url /* = NULL */,
bool addHeaders /* = true */)
{
- string status404;
+ string status404;
- if (addHeaders) {
- conn.Output(conn.GetHTTPVersion().c_str());
- conn.Output(" 404 Not Found\r\n");
- conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
- conn.Output("Content-Type: text/html\r\n");
+ if (addHeaders) {
+ conn.Output(conn.GetHTTPVersion().c_str());
+ conn.Output(" 404 Not Found\r\n");
+ conn.Output("Server: FAST-HTTP-Server/1.0 (Fast Generic HTTP server)\r\n");
+ conn.Output("Content-Type: text/html\r\n");
- status404.append("<html> \r\n");
- status404.append("<head> \r\n");
- status404.append("<title>Error 404</title> \r\n");
- status404.append("<meta name=\"robots\" content=\"noindex\">\r\n");
- status404.append("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">\r\n");
- status404.append("</head> \r\n");
- status404.append("<body> \r\n");
+ status404.append("<html> \r\n");
+ status404.append("<head> \r\n");
+ status404.append("<title>Error 404</title> \r\n");
+ status404.append("<meta name=\"robots\" content=\"noindex\">\r\n");
+ status404.append("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">\r\n");
+ status404.append("</head> \r\n");
+ status404.append("<body> \r\n");
- status404.append("<h2>HTTP Error 404</h2>\r\n");
- status404.append("<p><strong>404 Not Found</strong></p>\r\n");
+ status404.append("<h2>HTTP Error 404</h2>\r\n");
+ status404.append("<p><strong>404 Not Found</strong></p>\r\n");
- }
+ }
- if (url == NULL)
- status404.append("<p>The Web server cannot find the file or script you asked for.</p>\r\n");
- else
- status404.append(vespalib::make_string("<p>The Web server cannot find %s.</p>\r\n", url->c_str()));
+ if (url == NULL)
+ status404.append("<p>The Web server cannot find the file or script you asked for.</p>\r\n");
+ else
+ status404.append(vespalib::make_string("<p>The Web server cannot find %s.</p>\r\n", url->c_str()));
- status404.append("<p>Please check the URL to ensure that the path is correct.</p>\r\n");
- status404.append("<p>Contact the server's administrator if this problem persists.</p>\r\n");
+ status404.append("<p>Please check the URL to ensure that the path is correct.</p>\r\n");
+ status404.append("<p>Contact the server's administrator if this problem persists.</p>\r\n");
- if (addHeaders) {
- status404.append("</body> \r\n");
- status404.append("</html> \r\n\r\n");
+ if (addHeaders) {
+ status404.append("</body> \r\n");
+ status404.append("</html> \r\n\r\n");
- conn.Output(vespalib::make_string("Content-Length: %ld\r\n\r\n", status404.length()).c_str());
- }
+ conn.Output(vespalib::make_string("Content-Length: %ld\r\n\r\n", status404.length()).c_str());
+ }
- conn.Output(status404.c_str());
+ conn.Output(status404.c_str());
}
void
Fast_HTTPServer::AddConnection(Fast_HTTPConnection* connection)
{
- _connectionCond.Lock();
- _connections.Insert(connection);
- _connectionCond.Unlock();
+ _connectionCond.Lock();
+ _connections.Insert(connection);
+ _connectionCond.Unlock();
}
void
Fast_HTTPServer::RemoveConnection(Fast_HTTPConnection* connection)
{
- _connectionCond.Lock();
- _connections.RemoveElement(connection);
- _connectionCond.Signal();
- _connectionCond.Unlock();
+ _connectionCond.Lock();
+ _connections.RemoveElement(connection);
+ _connectionCond.Signal();
+ _connectionCond.Unlock();
}
void
Fast_HTTPConnection::Interrupt()
{
- _socket->Interrupt();
+ _socket->Interrupt();
}
diff --git a/fastlib/src/vespa/fastlib/net/httpserver.h b/fastlib/src/vespa/fastlib/net/httpserver.h
index f23650d434f..edc1078ae6f 100644
--- a/fastlib/src/vespa/fastlib/net/httpserver.h
+++ b/fastlib/src/vespa/fastlib/net/httpserver.h
@@ -61,10 +61,10 @@ class Fast_HTTPServer;
class Fast_HTTPConnection : public FastOS_Runnable
{
private:
- Fast_HTTPConnection(const Fast_HTTPConnection&);
- Fast_HTTPConnection& operator=(const Fast_HTTPConnection&);
+ Fast_HTTPConnection(const Fast_HTTPConnection&);
+ Fast_HTTPConnection& operator=(const Fast_HTTPConnection&);
- protected:
+protected:
bool _decode; // Decode incoming URLs?
Fast_Socket *_socket;
@@ -83,7 +83,7 @@ private:
vespalib::string _httpVersion;
vespalib::string _cookies;
- public:
+public:
Fast_HTTPConnection(Fast_Socket *sock,
bool decode = true,
@@ -121,19 +121,19 @@ private:
class Fast_HTTPServerSocketFactory : public FastOS_SocketFactory
{
- private:
- int _readTimeout; // Timeout value for reads.
+private:
+ int _readTimeout; // Timeout value for reads.
- public:
+public:
- Fast_HTTPServerSocketFactory(int readTimeout = -1 /* no timeout */)
- : _readTimeout(readTimeout) {}
+ Fast_HTTPServerSocketFactory(int readTimeout = -1 /* no timeout */)
+ : _readTimeout(readTimeout) {}
/**
- * Create a streaming socket object
- */
+ * Create a streaming socket object
+ */
FastOS_SocketInterface *CreateSocket() override {
- return new Fast_Socket(_readTimeout);
+ return new Fast_Socket(_readTimeout);
}
};
@@ -155,11 +155,11 @@ class Fast_HTTPServerSocketFactory : public FastOS_SocketFactory
class Fast_HTTPServer : public FastOS_Runnable
{
private:
- Fast_HTTPServer(const Fast_HTTPServer&);
- Fast_HTTPServer& operator=(const Fast_HTTPServer&);
+ Fast_HTTPServer(const Fast_HTTPServer&);
+ Fast_HTTPServer& operator=(const Fast_HTTPServer&);
- Fast_Bag<Fast_HTTPConnection*> _connections;
- FastOS_Cond _connectionCond;
+ Fast_Bag<Fast_HTTPConnection*> _connections;
+ FastOS_Cond _connectionCond;
protected:
typedef vespalib::string string;
@@ -211,7 +211,7 @@ protected:
int Listen(void);
- public:
+public:
Fast_HTTPServer(int portNumber,
const char* strictBindHostName = NULL, int backlog = 10,
bool decode = true,
@@ -296,12 +296,12 @@ protected:
* to the client.
*/
virtual void OnPostRequest( const string & url,
- const string & host,
- const string & contentType,
- int contentLength,
- Fast_HTTPConnection& conn,
- Fast_InputStream& inputStream,
- Fast_OutputStream& outputStream);
+ const string & host,
+ const string & contentType,
+ int contentLength,
+ Fast_HTTPConnection& conn,
+ Fast_InputStream& inputStream,
+ Fast_OutputStream& outputStream);
/**
* Callback for receiving all data from a PUT request, and writing
@@ -323,12 +323,12 @@ protected:
* to the client.
*/
virtual void OnPutRequest( const string & url,
- const string & host,
- const string & contentType,
- int contentLength,
- Fast_HTTPConnection& conn,
- Fast_InputStream& inputStream,
- Fast_OutputStream& outputStream);
+ const string & host,
+ const string & contentType,
+ int contentLength,
+ Fast_HTTPConnection& conn,
+ Fast_InputStream& inputStream,
+ Fast_OutputStream& outputStream);
/**
* Callback for receiving all headers for a DELETE request, and writing
@@ -365,6 +365,3 @@ protected:
void RemoveConnection(Fast_HTTPConnection* connection);
};
-
-
-
diff --git a/fastlib/src/vespa/fastlib/net/socket.cpp b/fastlib/src/vespa/fastlib/net/socket.cpp
index d9a6c910e4c..1c7d915dc10 100644
--- a/fastlib/src/vespa/fastlib/net/socket.cpp
+++ b/fastlib/src/vespa/fastlib/net/socket.cpp
@@ -9,52 +9,52 @@ Fast_Socket::~Fast_Socket()
bool
Fast_Socket::Close(void)
{
- return FastOS_Socket::Close();
+ return FastOS_Socket::Close();
}
ssize_t
Fast_Socket::Read(void* targetBuffer, size_t bufferSize)
{
- bool oldReadEventEnabled = _readEventEnabled;
- FastOS_SocketEvent* oldSocketEvent = _socketEvent;
- void* oldEventAttribute = _eventAttribute;
- bool err = false;
- bool eventOcc = false;
- ssize_t rtrn = -1;
+ bool oldReadEventEnabled = _readEventEnabled;
+ FastOS_SocketEvent* oldSocketEvent = _socketEvent;
+ void* oldEventAttribute = _eventAttribute;
+ bool err = false;
+ bool eventOcc = false;
+ ssize_t rtrn = -1;
- errno = 0;
- _lastReadTimedOut = false;
+ errno = 0;
+ _lastReadTimedOut = false;
- if (_event.GetCreateSuccess() == false)
- return rtrn;
+ if (_event.GetCreateSuccess() == false)
+ return rtrn;
- if (SetSocketEvent(&_event) == true)
- {
- EnableReadEvent(true);
- eventOcc = _event.Wait(err, _readTimeout);
- if (eventOcc == true && err == false)
- {
- rtrn = FastOS_Socket::Read(targetBuffer, bufferSize);
- _eof = (rtrn == 0);
- }
- else if(!eventOcc && !err)
+ if (SetSocketEvent(&_event) == true)
{
- _lastReadTimedOut = true;
+ EnableReadEvent(true);
+ eventOcc = _event.Wait(err, _readTimeout);
+ if (eventOcc == true && err == false)
+ {
+ rtrn = FastOS_Socket::Read(targetBuffer, bufferSize);
+ _eof = (rtrn == 0);
+ }
+ else if(!eventOcc && !err)
+ {
+ _lastReadTimedOut = true;
+ }
}
- }
- SetSocketEvent(oldSocketEvent, oldEventAttribute);
+ SetSocketEvent(oldSocketEvent, oldEventAttribute);
- if (oldSocketEvent != 0)
- EnableReadEvent(oldReadEventEnabled);
+ if (oldSocketEvent != 0)
+ EnableReadEvent(oldReadEventEnabled);
- return rtrn;
+ return rtrn;
}
void
Fast_Socket::Interrupt()
{
- _event.AsyncWakeUp();
+ _event.AsyncWakeUp();
}
ssize_t
diff --git a/fastlib/src/vespa/fastlib/net/socket.h b/fastlib/src/vespa/fastlib/net/socket.h
index f7fa9c9457c..f784c4d606c 100644
--- a/fastlib/src/vespa/fastlib/net/socket.h
+++ b/fastlib/src/vespa/fastlib/net/socket.h
@@ -10,15 +10,15 @@ class Fast_Socket : public FastOS_Socket,
public Fast_OutputStream
{
private:
- Fast_Socket(const Fast_Socket&);
- Fast_Socket& operator=(const Fast_Socket&);
+ Fast_Socket(const Fast_Socket&);
+ Fast_Socket& operator=(const Fast_Socket&);
- FastOS_SocketEvent _event;
- int _readTimeout;
- bool _lastReadTimedOut;
- bool _eof;
+ FastOS_SocketEvent _event;
+ int _readTimeout;
+ bool _lastReadTimedOut;
+ bool _eof;
- public:
+public:
/**
* The Fast_Socket constructor creates a new socket instance
@@ -55,9 +55,3 @@ private:
void Interrupt();
};
-
-
-
-
-
-
diff --git a/fastlib/src/vespa/fastlib/net/tests/httpheaderparsertest.cpp b/fastlib/src/vespa/fastlib/net/tests/httpheaderparsertest.cpp
index 5c8f8d4d8f2..8124ed63966 100644
--- a/fastlib/src/vespa/fastlib/net/tests/httpheaderparsertest.cpp
+++ b/fastlib/src/vespa/fastlib/net/tests/httpheaderparsertest.cpp
@@ -6,40 +6,40 @@
class HeaderReaderApp : public FastOS_Application
{
- public:
+public:
int Main() override
{
- if (_argc != 2)
- {
- fprintf(stderr, "Usage: %s <header file>\n", _argv[0]);
- return 1;
- }
- Fast_FileInputStream fileinput(_argv[1]);
- Fast_BufferedInputStream input(fileinput, 32768);
- Fast_HTTPHeaderParser headerParser(input);
-
- const char *headerName, *headerValue;
- while (headerParser.ReadHeader(headerName, headerValue))
- {
- printf("Header name: \"%s\"\n", headerName);
- printf("Header value: \"%s\"\n", headerValue);
- printf("\n");
- }
-
- char buffer[1024];
- size_t bytesRead = 0;
- ssize_t lastRead;
- printf("------> Remaining data in file: <------\n");
- while ((lastRead = input.Read(buffer, sizeof(buffer))) > 0)
- {
- fwrite(buffer, 1, lastRead, stdout);
- bytesRead += lastRead;
- }
- printf("------> End of remaining data <--------\n");
- printf("Total remaining data: %u bytes\n",
- static_cast<unsigned int>(bytesRead));
-
- return 0;
+ if (_argc != 2)
+ {
+ fprintf(stderr, "Usage: %s <header file>\n", _argv[0]);
+ return 1;
+ }
+ Fast_FileInputStream fileinput(_argv[1]);
+ Fast_BufferedInputStream input(fileinput, 32768);
+ Fast_HTTPHeaderParser headerParser(input);
+
+ const char *headerName, *headerValue;
+ while (headerParser.ReadHeader(headerName, headerValue))
+ {
+ printf("Header name: \"%s\"\n", headerName);
+ printf("Header value: \"%s\"\n", headerValue);
+ printf("\n");
+ }
+
+ char buffer[1024];
+ size_t bytesRead = 0;
+ ssize_t lastRead;
+ printf("------> Remaining data in file: <------\n");
+ while ((lastRead = input.Read(buffer, sizeof(buffer))) > 0)
+ {
+ fwrite(buffer, 1, lastRead, stdout);
+ bytesRead += lastRead;
+ }
+ printf("------> End of remaining data <--------\n");
+ printf("Total remaining data: %u bytes\n",
+ static_cast<unsigned int>(bytesRead));
+
+ return 0;
}
};
@@ -48,8 +48,7 @@ class HeaderReaderApp : public FastOS_Application
int main (int argc, char *argv[])
{
- HeaderReaderApp app;
+ HeaderReaderApp app;
- return app.Entry(argc, argv);
+ return app.Entry(argc, argv);
}
-
diff --git a/fastlib/src/vespa/fastlib/net/url.cpp b/fastlib/src/vespa/fastlib/net/url.cpp
index 6019d0d9932..4d3f82c0770 100644
--- a/fastlib/src/vespa/fastlib/net/url.cpp
+++ b/fastlib/src/vespa/fastlib/net/url.cpp
@@ -23,44 +23,44 @@
void
Fast_URL::decode(const char *encodedURL, char *decodedURL, int bufsize)
{
- const char *tmpPtr;
- unsigned int charVal;
- char *bufend = decodedURL + bufsize;
+ const char *tmpPtr;
+ unsigned int charVal;
+ char *bufend = decodedURL + bufsize;
- tmpPtr = encodedURL;
+ tmpPtr = encodedURL;
- /* Parse the whole encodedURL */
- while(decodedURL < bufend && *tmpPtr != '\0') {
- /* Check if an encoded character is the next one */
- if(*tmpPtr == '%') {
- tmpPtr++; /* Skip % character */
- sscanf(tmpPtr,"%02X", &charVal);
- *decodedURL = static_cast<char>(charVal);
- tmpPtr += 2;
+ /* Parse the whole encodedURL */
+ while(decodedURL < bufend && *tmpPtr != '\0') {
+ /* Check if an encoded character is the next one */
+ if(*tmpPtr == '%') {
+ tmpPtr++; /* Skip % character */
+ sscanf(tmpPtr,"%02X", &charVal);
+ *decodedURL = static_cast<char>(charVal);
+ tmpPtr += 2;
+ }
+ else
+ {
+ *decodedURL = *tmpPtr;
+ tmpPtr++;
+ }
+ decodedURL++;
}
- else
- {
- *decodedURL = *tmpPtr;
- tmpPtr++;
- }
- decodedURL++;
- }
- if (decodedURL < bufend)
- *decodedURL = '\0';
+ if (decodedURL < bufend)
+ *decodedURL = '\0';
}
int Fast_URL::DecodeQueryString(char *queryString)
{
- int numReplaced = 0;
+ int numReplaced = 0;
- for(int i=0; queryString[i] != '\0'; i++)
- {
- if (queryString[i] == '+')
+ for(int i=0; queryString[i] != '\0'; i++)
{
- queryString[i] = ' ';
- numReplaced ++;
+ if (queryString[i] == '+')
+ {
+ queryString[i] = ' ';
+ numReplaced ++;
+ }
}
- }
- return numReplaced;
+ return numReplaced;
}
diff --git a/fastlib/src/vespa/fastlib/net/url.h b/fastlib/src/vespa/fastlib/net/url.h
index 78214cfbe57..3ecc3e999b9 100644
--- a/fastlib/src/vespa/fastlib/net/url.h
+++ b/fastlib/src/vespa/fastlib/net/url.h
@@ -19,14 +19,10 @@
class Fast_URL
{
- public:
+public:
void decode(const char *encodedURL, char *unencodedURL, int bufsize);
/* bufsize is the length of the unencodedURL buffer */
/* Both methods return the number of chars replaced */
int DecodeQueryString(char *queryString);
};
-
-
-
-
diff --git a/fastlib/src/vespa/fastlib/testsuite/suite.h b/fastlib/src/vespa/fastlib/testsuite/suite.h
index 9ea242bb84d..9ba3fee163b 100644
--- a/fastlib/src/vespa/fastlib/testsuite/suite.h
+++ b/fastlib/src/vespa/fastlib/testsuite/suite.h
@@ -78,57 +78,57 @@ class TestSuiteError;
class Suite
{
public:
- Suite(const std::string& name, std::ostream* osptr = 0);
+ Suite(const std::string& name, std::ostream* osptr = 0);
- std::string GetName() const;
- long GetNumPassed() const;
- long GetNumFailed() const;
- const std::ostream* GetStream() const;
- void SetStream(std::ostream* osptr);
+ std::string GetName() const;
+ long GetNumPassed() const;
+ long GetNumFailed() const;
+ const std::ostream* GetStream() const;
+ void SetStream(std::ostream* osptr);
- void AddTest(Test* t); //throw (TestSuiteError);
- void AddSuite(const Suite&); //throw(TestSuiteError);
- void Run(); // Calls Test::run() repeatedly
- long Report() const;
- void Free(); // deletes tests
- virtual ~Suite(void) { }
+ void AddTest(Test* t); //throw (TestSuiteError);
+ void AddSuite(const Suite&); //throw(TestSuiteError);
+ void Run(); // Calls Test::run() repeatedly
+ long Report() const;
+ void Free(); // deletes tests
+ virtual ~Suite(void) { }
private:
- std::string m_name;
- std::ostream* m_osptr;
- std::vector<Test*> m_tests;
- void Reset();
- int GetLongestName() const;
-
- // Disallowed ops:
- Suite(const Suite&);
- Suite& operator=(const Suite&);
+ std::string m_name;
+ std::ostream* m_osptr;
+ std::vector<Test*> m_tests;
+ void Reset();
+ int GetLongestName() const;
+
+ // Disallowed ops:
+ Suite(const Suite&);
+ Suite& operator=(const Suite&);
};
inline
Suite::Suite(const std::string& name, std::ostream* osptr)
- : m_name(name),
- m_osptr(osptr),
- m_tests()
+ : m_name(name),
+ m_osptr(osptr),
+ m_tests()
{
}
inline
std::string Suite::GetName() const
{
- return m_name;
+ return m_name;
}
inline
const std::ostream* Suite::GetStream() const
{
- return m_osptr;
+ return m_osptr;
}
inline
void Suite::SetStream(std::ostream* osptr)
{
- m_osptr = osptr;
+ m_osptr = osptr;
}
@@ -142,127 +142,124 @@ void Suite::SetStream(std::ostream* osptr)
void Suite::AddTest(Test* t) //throw(TestSuiteError)
{
- // Make sure test has a stream:
- if (t == 0) {}
- //throw TestSuiteError("Null test in Suite::addTest");
- else if (m_osptr != 0 && t->GetStream() == 0)
- t->SetStream(m_osptr);
-
- m_tests.push_back(t);
- t->Reset();
+ // Make sure test has a stream:
+ if (t == 0) {}
+ //throw TestSuiteError("Null test in Suite::addTest");
+ else if (m_osptr != 0 && t->GetStream() == 0)
+ t->SetStream(m_osptr);
+
+ m_tests.push_back(t);
+ t->Reset();
}
void Suite::AddSuite(const Suite& s) //throw(TestSuiteError)
{
- for (size_t i = 0; i < s.m_tests.size(); ++i)
- AddTest(s.m_tests[i]);
+ for (size_t i = 0; i < s.m_tests.size(); ++i)
+ AddTest(s.m_tests[i]);
}
void Suite::Free()
{
- // This is not a destructor because tests
- // don't have to be on the heap.
- for (size_t i = 0; i < m_tests.size(); ++i)
- {
- delete m_tests[i];
- m_tests[i] = 0;
- }
+ // This is not a destructor because tests
+ // don't have to be on the heap.
+ for (size_t i = 0; i < m_tests.size(); ++i)
+ {
+ delete m_tests[i];
+ m_tests[i] = 0;
+ }
}
void Suite::Run()
{
- Reset();
- int longestName = GetLongestName();
- const char *nm;
- int x = 0;
- for (size_t i = 0; i < m_tests.size(); ++i) {
- assert(m_tests[i]);
- nm = m_tests[i]->get_name();
- if (nm) {
- *m_osptr << std::endl << nm << ": ";
- for (x = longestName - strlen(nm); x > 0; --x)
- *m_osptr << ' ';
- *m_osptr << std::flush;
+ Reset();
+ int longestName = GetLongestName();
+ const char *nm;
+ int x = 0;
+ for (size_t i = 0; i < m_tests.size(); ++i) {
+ assert(m_tests[i]);
+ nm = m_tests[i]->get_name();
+ if (nm) {
+ *m_osptr << std::endl << nm << ": ";
+ for (x = longestName - strlen(nm); x > 0; --x)
+ *m_osptr << ' ';
+ *m_osptr << std::flush;
+ }
+ m_tests[i]->Run();
}
- m_tests[i]->Run();
- }
}
// Find the longest test name
int Suite::GetLongestName() const
{
- int longestName = 0, len = 0;
- const char *nm;
- for (size_t i = 0; i < m_tests.size(); ++i) {
- assert(m_tests[i]);
- nm = m_tests[i]->get_name();
- if ( nm != NULL && (len = strlen(nm)) > longestName )
- longestName = len;
- }
- return longestName;
+ int longestName = 0, len = 0;
+ const char *nm;
+ for (size_t i = 0; i < m_tests.size(); ++i) {
+ assert(m_tests[i]);
+ nm = m_tests[i]->get_name();
+ if ( nm != NULL && (len = strlen(nm)) > longestName )
+ longestName = len;
+ }
+ return longestName;
}
long Suite::Report() const
{
- if (m_osptr) {
- int longestName = GetLongestName();
- int lineLength = longestName + 8 + 16 + 10;
- long totFail = 0;
- int x = 0;
- *m_osptr << std::endl << std::endl
- << "Suite \"" << m_name << "\"" << std::endl;
- for (x = 0; x < lineLength; ++x)
- *m_osptr << '=';
- *m_osptr << "=";
-
- // Write the individual reports
- for (size_t i = 0; i < m_tests.size(); ++i) {
- assert(m_tests[i]);
- const char *nm = m_tests[i]->get_name();
- totFail += m_tests[i]->Report(longestName -
- (nm ? strlen(nm) : longestName));
+ if (m_osptr) {
+ int longestName = GetLongestName();
+ int lineLength = longestName + 8 + 16 + 10;
+ long totFail = 0;
+ int x = 0;
+ *m_osptr << std::endl << std::endl
+ << "Suite \"" << m_name << "\"" << std::endl;
+ for (x = 0; x < lineLength; ++x)
+ *m_osptr << '=';
+ *m_osptr << "=";
+
+ // Write the individual reports
+ for (size_t i = 0; i < m_tests.size(); ++i) {
+ assert(m_tests[i]);
+ const char *nm = m_tests[i]->get_name();
+ totFail += m_tests[i]->Report(longestName -
+ (nm ? strlen(nm) : longestName));
+ }
+
+ for (x = 0; x < lineLength; ++x)
+ *m_osptr << '=';
+ *m_osptr << "=\n";
+ return totFail;
}
-
- for (x = 0; x < lineLength; ++x)
- *m_osptr << '=';
- *m_osptr << "=\n";
- return totFail;
- }
- else
- return GetNumFailed();
+ else
+ return GetNumFailed();
}
long Suite::GetNumPassed() const
{
- long totPass = 0;
- for (size_t i = 0; i < m_tests.size(); ++i)
- {
- assert(m_tests[i]);
- totPass += m_tests[i]->GetNumPassed();
- }
- return totPass;
+ long totPass = 0;
+ for (size_t i = 0; i < m_tests.size(); ++i)
+ {
+ assert(m_tests[i]);
+ totPass += m_tests[i]->GetNumPassed();
+ }
+ return totPass;
}
long Suite::GetNumFailed() const
{
- long totFail = 0;
- for (size_t i = 0; i < m_tests.size(); ++i)
- {
- assert(m_tests[i]);
- totFail += m_tests[i]->GetNumFailed();
- }
- return totFail;
+ long totFail = 0;
+ for (size_t i = 0; i < m_tests.size(); ++i)
+ {
+ assert(m_tests[i]);
+ totFail += m_tests[i]->GetNumFailed();
+ }
+ return totFail;
}
void Suite::Reset()
{
- for (size_t i = 0; i < m_tests.size(); ++i)
- {
- assert(m_tests[i]);
- m_tests[i]->Reset();
- }
+ for (size_t i = 0; i < m_tests.size(); ++i)
+ {
+ assert(m_tests[i]);
+ m_tests[i]->Reset();
+ }
}
-
-
-
diff --git a/fastlib/src/vespa/fastlib/testsuite/test.cpp b/fastlib/src/vespa/fastlib/testsuite/test.cpp
index 3e5261d8222..dce4a24ea71 100644
--- a/fastlib/src/vespa/fastlib/testsuite/test.cpp
+++ b/fastlib/src/vespa/fastlib/testsuite/test.cpp
@@ -3,136 +3,135 @@
#include "test.h"
Test::Test(std::ostream* osptr, const char*name) :
- m_osptr(osptr),
- name_(name),
- m_nPass(0),
- m_nFail(0),
- m_index(0),
- m_description()
+ m_osptr(osptr),
+ name_(name),
+ m_nPass(0),
+ m_nFail(0),
+ m_index(0),
+ m_description()
{
- m_pchar[0]= '|';
- m_pchar[1]= '-';
+ m_pchar[0]= '|';
+ m_pchar[1]= '-';
}
Test::Test(const char*name) :
- Test(nullptr, name)
+ Test(nullptr, name)
{
}
const char *Test::get_name() const {
- return (name_ == NULL) ? "Test " : name_;
+ return (name_ == NULL) ? "Test " : name_;
}
const std::string& Test::GetSourceDirectory()
{
- static const std::string srcDir = [] () {
- std::string dir(".");
- const char* env = getenv("SOURCE_DIRECTORY");
- if (env) {
- dir = env;
- }
- if (*dir.rbegin() != '/') {
- dir += "/";
- }
- return dir;
- } ();
- return srcDir;
+ static const std::string srcDir = [] () {
+ std::string dir(".");
+ const char* env = getenv("SOURCE_DIRECTORY");
+ if (env) {
+ dir = env;
+ }
+ if (*dir.rbegin() != '/') {
+ dir += "/";
+ }
+ return dir;
+ } ();
+ return srcDir;
}
long Test::GetNumPassed() const
{
- return m_nPass;
+ return m_nPass;
}
long Test::GetNumFailed() const
{
- return m_nFail;
+ return m_nFail;
}
const std::ostream* Test::GetStream() const
{
- return m_osptr;
+ return m_osptr;
}
void Test::SetStream(std::ostream* osptr)
{
- m_osptr = osptr;
+ m_osptr = osptr;
}
void Test::_Succeed()
{
- ++m_nPass;
+ ++m_nPass;
}
void Test::Reset()
{
- m_nPass = m_nFail = 0;
+ m_nPass = m_nFail = 0;
}
void Test::PushDesc(const std::string& desc)
{
- m_description.push_back(desc);
+ m_description.push_back(desc);
}
void Test::PopDesc()
{
- m_description.pop_back();
+ m_description.pop_back();
}
size_t Test::print_desc() const
{
- std::copy(m_description.begin(), m_description.end(),
- std::ostream_iterator<std::string>(*m_osptr));
- return m_description.size();
+ std::copy(m_description.begin(), m_description.end(),
+ std::ostream_iterator<std::string>(*m_osptr));
+ return m_description.size();
}
void Test::print_progress() {
- ++m_index;
- m_index = m_index % 2;
- *m_osptr << '\b' <<'\b' <<'\b';
- *m_osptr <<' ' << m_pchar[m_index] << ' ' << std::flush;
+ ++m_index;
+ m_index = m_index % 2;
+ *m_osptr << '\b' <<'\b' <<'\b';
+ *m_osptr <<' ' << m_pchar[m_index] << ' ' << std::flush;
}
bool Test::do_fail(const std::string& lbl, const char* fname, long lineno,
bool addEndl)
{
- ++m_nFail;
- if (m_osptr) {
- *m_osptr << std::endl
- << fname << ':' << lineno << ": "
- << get_name() << " failure: (" << lbl << ")"
- << std::endl;
- if (addEndl && print_desc() > 0)
- *m_osptr << std::endl << std::endl;
- }
- return false;
+ ++m_nFail;
+ if (m_osptr) {
+ *m_osptr << std::endl
+ << fname << ':' << lineno << ": "
+ << get_name() << " failure: (" << lbl << ")"
+ << std::endl;
+ if (addEndl && print_desc() > 0)
+ *m_osptr << std::endl << std::endl;
+ }
+ return false;
}
bool Test::do_test(bool cond, const std::string& lbl,
const char* fname, long lineno)
{
- if (!cond) {
- return do_fail(lbl, fname, lineno);
- }
- else {
- _Succeed();
- print_progress();
- return true;
- }
+ if (!cond) {
+ return do_fail(lbl, fname, lineno);
+ }
+ else {
+ _Succeed();
+ print_progress();
+ return true;
+ }
}
long Test::Report(int padSpaces) const
{
- if (m_osptr) {
- *m_osptr << std::endl << get_name();
+ if (m_osptr) {
+ *m_osptr << std::endl << get_name();
- // Pad the name with the given number of spaces
- for (int i= 0; i < padSpaces; ++i) *m_osptr << ' ';
+ // Pad the name with the given number of spaces
+ for (int i= 0; i < padSpaces; ++i) *m_osptr << ' ';
- *m_osptr << "\tPassed: " << m_nPass
- << "\tFailed: " << m_nFail
- << std::endl;
- }
- return m_nFail;
+ *m_osptr << "\tPassed: " << m_nPass
+ << "\tFailed: " << m_nFail
+ << std::endl;
+ }
+ return m_nFail;
}
-
diff --git a/fastlib/src/vespa/fastlib/testsuite/test.h b/fastlib/src/vespa/fastlib/testsuite/test.h
index 02e05f48444..598a16da9c2 100644
--- a/fastlib/src/vespa/fastlib/testsuite/test.h
+++ b/fastlib/src/vespa/fastlib/testsuite/test.h
@@ -75,77 +75,77 @@
// (and it's impolite to usurp other users' functions!).
// For consistency, _succeed() also has an underscore.
#define _test(cond) do_test((cond), #cond, __FILE__, __LINE__)
-#define _test_equal(lhs, rhs) \
- do_equality_test((lhs), (rhs), #lhs, __FILE__, __LINE__)
+#define _test_equal(lhs, rhs) \
+ do_equality_test((lhs), (rhs), #lhs, __FILE__, __LINE__)
#define _fail(str) do_fail((str), __FILE__, __LINE__)
class Test
{
public:
- explicit Test(std::ostream* osptr = 0, const char *name = NULL);
- explicit Test(const char *name);
- virtual ~Test(){}
- virtual void Run() = 0;
+ explicit Test(std::ostream* osptr = 0, const char *name = NULL);
+ explicit Test(const char *name);
+ virtual ~Test(){}
+ virtual void Run() = 0;
- const char *get_name() const;
- static const std::string& GetSourceDirectory();
- long GetNumPassed() const;
- long GetNumFailed() const;
- const std::ostream* GetStream() const;
- void SetStream(std::ostream* osptr);
+ const char *get_name() const;
+ static const std::string& GetSourceDirectory();
+ long GetNumPassed() const;
+ long GetNumFailed() const;
+ const std::ostream* GetStream() const;
+ void SetStream(std::ostream* osptr);
- void _Succeed();
- long Report(int padSpaces = 1) const;
- virtual void Reset();
+ void _Succeed();
+ long Report(int padSpaces = 1) const;
+ virtual void Reset();
- void PushDesc(const std::string& desc);
- void PopDesc();
+ void PushDesc(const std::string& desc);
+ void PopDesc();
protected:
- std::ostream* m_osptr;
- const char *name_;
+ std::ostream* m_osptr;
+ const char *name_;
- bool do_test(bool cond, const std::string& lbl,
- const char* fname, long lineno);
- bool do_fail(const std::string& lbl, const char* fname, long lineno,
- bool addEndl = true);
- template <typename t1, typename t2>
- bool do_equality_test(const t1& lhs, const t2& rhs,
- const char* lbl, const char* fname, long lineno);
- virtual void print_progress();
+ bool do_test(bool cond, const std::string& lbl,
+ const char* fname, long lineno);
+ bool do_fail(const std::string& lbl, const char* fname, long lineno,
+ bool addEndl = true);
+ template <typename t1, typename t2>
+ bool do_equality_test(const t1& lhs, const t2& rhs,
+ const char* lbl, const char* fname, long lineno);
+ virtual void print_progress();
private:
- long m_nPass;
- long m_nFail;
- int m_index;
- char m_pchar[4];
+ long m_nPass;
+ long m_nFail;
+ int m_index;
+ char m_pchar[4];
- std::vector<std::string> m_description;
+ std::vector<std::string> m_description;
- size_t print_desc() const;
+ size_t print_desc() const;
- // Disallowed:
- Test(const Test&);
- Test& operator=(const Test&);
+ // Disallowed:
+ Test(const Test&);
+ Test& operator=(const Test&);
};
template <typename t1, typename t2>
bool Test::do_equality_test(const t1& lhs, const t2& rhs, const char* lbl,
const char* fname, long lineno)
{
- if (lhs == rhs) {
- _Succeed();
- print_progress();
- return true;
- }
- do_fail(std::string(lbl), fname, lineno, false);
- if (m_osptr) {
- *m_osptr << "Equality test failed: "
- << "Expected '" << rhs
- << "' got '" << lhs << "'"
- << std::endl;
- if (print_desc() > 0)
- *m_osptr << std::endl << std::endl;
- }
- return false;
+ if (lhs == rhs) {
+ _Succeed();
+ print_progress();
+ return true;
+ }
+ do_fail(std::string(lbl), fname, lineno, false);
+ if (m_osptr) {
+ *m_osptr << "Equality test failed: "
+ << "Expected '" << rhs
+ << "' got '" << lhs << "'"
+ << std::endl;
+ if (print_desc() > 0)
+ *m_osptr << std::endl << std::endl;
+ }
+ return false;
}
diff --git a/fastlib/src/vespa/fastlib/text/apps/extcase.cpp b/fastlib/src/vespa/fastlib/text/apps/extcase.cpp
index 3f3f27dcecd..1200465331c 100644
--- a/fastlib/src/vespa/fastlib/text/apps/extcase.cpp
+++ b/fastlib/src/vespa/fastlib/text/apps/extcase.cpp
@@ -26,153 +26,153 @@ char linebuf[1024];
static int hexval(char cp)
{
- if (cp >= '0' && cp <= '9')
- return cp - '0';
- if (cp >= 'a' && cp <= 'f')
- return cp - 'a' + 10;
- if (cp >= 'A' && cp <= 'F')
- return cp - 'A' + 10;
- return -1;
+ if (cp >= '0' && cp <= '9')
+ return cp - '0';
+ if (cp >= 'a' && cp <= 'f')
+ return cp - 'a' + 10;
+ if (cp >= 'A' && cp <= 'F')
+ return cp - 'A' + 10;
+ return -1;
}
void DumpCase(void)
{
- Fast_BufferedFile file;
- unsigned int code;
- int xpage, checkpage, allocpage;
-
- file.WriteOpen("unicodeutil-lowercase.cpp.NEW");
-
- allocpage = 0;
- for (xpage = 0; xpage < 256; xpage++) {
- for (checkpage = (xpage == 0) ? 0 : 1; checkpage < xpage; checkpage++) {
- for (code = 0; code < 256; code++)
- if (lowercase[code + 256 * xpage] != lowercase[code + 256 * checkpage])
- break;
- if (code >= 256)
- break;
+ Fast_BufferedFile file;
+ unsigned int code;
+ int xpage, checkpage, allocpage;
+
+ file.WriteOpen("unicodeutil-lowercase.cpp.NEW");
+
+ allocpage = 0;
+ for (xpage = 0; xpage < 256; xpage++) {
+ for (checkpage = (xpage == 0) ? 0 : 1; checkpage < xpage; checkpage++) {
+ for (code = 0; code < 256; code++)
+ if (lowercase[code + 256 * xpage] != lowercase[code + 256 * checkpage])
+ break;
+ if (code >= 256)
+ break;
+ }
+ pages[xpage] = checkpage;
+ if (checkpage >= xpage) {
+ pageoff[xpage] = allocpage * 256;
+ allocpage++;
+ } else
+ pageoff[xpage] = pageoff[checkpage];
}
- pages[xpage] = checkpage;
- if (checkpage >= xpage) {
- pageoff[xpage] = allocpage * 256;
- allocpage++;
- } else
- pageoff[xpage] = pageoff[checkpage];
- }
- printf("allocpage=%d\n", allocpage);
-
- file.WriteString("/*\n"
- " * This file is auto-generated by extcase.cpp\n"
- " */\n"
- "\n"
- "static unsigned short Fast_intCompLowerCase[");
- file.addNum(256 * allocpage, 0, ' ');
- file.WriteString("]={\n");
- for (xpage = 0; xpage < 256; xpage++) {
- if (pages[xpage] == xpage) {
- for (code = 0; code < 256; code++) {
- if ((code & 7) == 0)
- file.WriteString(" ");
- file.WriteString("0x");
- file.addHexNum(lowercase[code + 256 * xpage], 4, '0');
- file.WriteString("u");
- if (code + 1 < static_cast<unsigned int>(256 * allocpage))
- file.WriteString(",");
- if ((code & 7) < 7)
- file.WriteString(" ");
- else
- file.WriteString("\n");
- }
+ printf("allocpage=%d\n", allocpage);
+
+ file.WriteString("/*\n"
+ " * This file is auto-generated by extcase.cpp\n"
+ " */\n"
+ "\n"
+ "static unsigned short Fast_intCompLowerCase[");
+ file.addNum(256 * allocpage, 0, ' ');
+ file.WriteString("]={\n");
+ for (xpage = 0; xpage < 256; xpage++) {
+ if (pages[xpage] == xpage) {
+ for (code = 0; code < 256; code++) {
+ if ((code & 7) == 0)
+ file.WriteString(" ");
+ file.WriteString("0x");
+ file.addHexNum(lowercase[code + 256 * xpage], 4, '0');
+ file.WriteString("u");
+ if (code + 1 < static_cast<unsigned int>(256 * allocpage))
+ file.WriteString(",");
+ if ((code & 7) < 7)
+ file.WriteString(" ");
+ else
+ file.WriteString("\n");
+ }
+ }
}
- }
- file.WriteString("};\n"
- "\n"
- "unsigned short *"
- "Fast_UnicodeUtil::_compLowerCase[256]={\n");
-
- for (xpage = 0; xpage < 256; xpage++) {
- file.WriteString(" Fast_intCompLowerCase+0x");
- file.addHexNum(pageoff[xpage], 4, '0');
- if (xpage < 255)
- file.WriteString(",");
- else
- file.WriteString(" ");
- file.WriteString(" /* Page 0x");
- file.addHexNum(xpage, 2, '0');
- file.WriteString(" */\n");
- }
- file.WriteString("};\n"
- "\n"
- "/* End of auto-generated file */\n");
- file.Close();
-
- rename("unicodeutil-lowercase.cpp.NEW", "unicodeutil-lowercase.cpp");
+ file.WriteString("};\n"
+ "\n"
+ "unsigned short *"
+ "Fast_UnicodeUtil::_compLowerCase[256]={\n");
+
+ for (xpage = 0; xpage < 256; xpage++) {
+ file.WriteString(" Fast_intCompLowerCase+0x");
+ file.addHexNum(pageoff[xpage], 4, '0');
+ if (xpage < 255)
+ file.WriteString(",");
+ else
+ file.WriteString(" ");
+ file.WriteString(" /* Page 0x");
+ file.addHexNum(xpage, 2, '0');
+ file.WriteString(" */\n");
+ }
+ file.WriteString("};\n"
+ "\n"
+ "/* End of auto-generated file */\n");
+ file.Close();
+
+ rename("unicodeutil-lowercase.cpp.NEW", "unicodeutil-lowercase.cpp");
}
int
main(int argc, char **argv)
{
- (void)argc;
- (void)argv;
-
- Fast_BufferedFile file;
- size_t len;
- int lowcode, code, i, j;
- bool badline;
- int semcnt;
-
- file.ReadOpenExisting("UnicodeData-4.0.0.txt");
-
- while (!file.Eof()) {
- (void) file.ReadLine(linebuf, sizeof(linebuf));
- len = strlen(linebuf);
- if (len > 0 && linebuf[len - 1] == '\n')
- len--;
- if (len > 0 && linebuf[len - 1] == '\r')
- len--;
- linebuf[len] = '\0';
-
- badline = false;
- if (hexval(linebuf[0]) >= 0) {
- code = 0;
- for (i = 0; i < 4; i++) {
- if (hexval(linebuf[i]) < 0)
- badline = true;
- code = code * 16 + hexval(linebuf[i]);
- }
-
- if (linebuf[4] == ';') {
- semcnt = 0;
- i = 4;
- while (linebuf[i] != '\0') {
- if (linebuf[i] == ';') {
- semcnt++;
- }
- i++;
- if (semcnt >= 13)
- break;
- }
- lowcode = 0;
- if (hexval(linebuf[i]) >= 0) {
- for (j = 0; j < 4; j++) {
- if (hexval(linebuf[i + j]) < 0)
- badline = true;
- lowcode = lowcode * 16 + hexval(linebuf[i + j]);
- }
- } else
- badline = true;
- if (!badline) {
- lowercase[code] = lowcode;
- } else {
- }
+ (void)argc;
+ (void)argv;
+
+ Fast_BufferedFile file;
+ size_t len;
+ int lowcode, code, i, j;
+ bool badline;
+ int semcnt;
+
+ file.ReadOpenExisting("UnicodeData-4.0.0.txt");
+
+ while (!file.Eof()) {
+ (void) file.ReadLine(linebuf, sizeof(linebuf));
+ len = strlen(linebuf);
+ if (len > 0 && linebuf[len - 1] == '\n')
+ len--;
+ if (len > 0 && linebuf[len - 1] == '\r')
+ len--;
+ linebuf[len] = '\0';
+
+ badline = false;
+ if (hexval(linebuf[0]) >= 0) {
+ code = 0;
+ for (i = 0; i < 4; i++) {
+ if (hexval(linebuf[i]) < 0)
+ badline = true;
+ code = code * 16 + hexval(linebuf[i]);
+ }
+
+ if (linebuf[4] == ';') {
+ semcnt = 0;
+ i = 4;
+ while (linebuf[i] != '\0') {
+ if (linebuf[i] == ';') {
+ semcnt++;
+ }
+ i++;
+ if (semcnt >= 13)
+ break;
+ }
+ lowcode = 0;
+ if (hexval(linebuf[i]) >= 0) {
+ for (j = 0; j < 4; j++) {
+ if (hexval(linebuf[i + j]) < 0)
+ badline = true;
+ lowcode = lowcode * 16 + hexval(linebuf[i + j]);
+ }
+ } else
+ badline = true;
+ if (!badline) {
+ lowercase[code] = lowcode;
+ } else {
+ }
- }
+ }
+ }
}
- }
- file.Close();
+ file.Close();
- DumpCase();
+ DumpCase();
- exit(0);
- return 0;
+ exit(0);
+ return 0;
}
diff --git a/fastlib/src/vespa/fastlib/text/apps/unicode_propertydump.cpp b/fastlib/src/vespa/fastlib/text/apps/unicode_propertydump.cpp
index 639c493e0cf..a0ee05b9b5d 100644
--- a/fastlib/src/vespa/fastlib/text/apps/unicode_propertydump.cpp
+++ b/fastlib/src/vespa/fastlib/text/apps/unicode_propertydump.cpp
@@ -5,15 +5,15 @@
class UnicodePropertyDumpApp : public FastOS_Application
{
public:
- virtual int Main();
+ virtual int Main();
};
int UnicodePropertyDumpApp::Main()
{
- for (ucs4_t testchar = 0; testchar < 0x10000; testchar++) {
- printf("%08x %04x\n", testchar, Fast_UnicodeUtil::GetProperty(testchar));
- }
- return 0;
+ for (ucs4_t testchar = 0; testchar < 0x10000; testchar++) {
+ printf("%08x %04x\n", testchar, Fast_UnicodeUtil::GetProperty(testchar));
+ }
+ return 0;
}
FASTOS_MAIN(UnicodePropertyDumpApp)
diff --git a/fastlib/src/vespa/fastlib/text/apps/unicode_tolowerdump.cpp b/fastlib/src/vespa/fastlib/text/apps/unicode_tolowerdump.cpp
index ca10ec0fc37..ffea4d735ba 100644
--- a/fastlib/src/vespa/fastlib/text/apps/unicode_tolowerdump.cpp
+++ b/fastlib/src/vespa/fastlib/text/apps/unicode_tolowerdump.cpp
@@ -5,15 +5,15 @@
class UnicodeToLowerDumpApp : public FastOS_Application
{
public:
- virtual int Main();
+ virtual int Main();
};
int UnicodeToLowerDumpApp::Main()
{
- for (ucs4_t testchar = 0; testchar < 0x10000; testchar++) {
- printf("%08x %08x\n", testchar, Fast_UnicodeUtil::ToLower(testchar));
- }
- return 0;
+ for (ucs4_t testchar = 0; testchar < 0x10000; testchar++) {
+ printf("%08x %08x\n", testchar, Fast_UnicodeUtil::ToLower(testchar));
+ }
+ return 0;
}
FASTOS_MAIN(UnicodeToLowerDumpApp)
diff --git a/fastlib/src/vespa/fastlib/text/latintokenizer.h b/fastlib/src/vespa/fastlib/text/latintokenizer.h
index f15ef04f07d..1378b7d6299 100644
--- a/fastlib/src/vespa/fastlib/text/latintokenizer.h
+++ b/fastlib/src/vespa/fastlib/text/latintokenizer.h
@@ -51,77 +51,77 @@
template <typename IsSeparator, typename IsPunctuation>
class Fast_LatinTokenizer {
private:
- Fast_LatinTokenizer(const Fast_LatinTokenizer &);
- Fast_LatinTokenizer& operator=(const Fast_LatinTokenizer &);
+ Fast_LatinTokenizer(const Fast_LatinTokenizer &);
+ Fast_LatinTokenizer& operator=(const Fast_LatinTokenizer &);
public:
- /** Helper class. */
- class Fast_Token {
- public:
-
- /** Member variables. */
- char *first; // Points to start of token. Named 'first' for std::pair compatibility.
- char *second; // Points to end of token. Named 'second' for std::pair compatibility.
- bool _punctuation; // Is the token a punctuation symbol?
-
- /** Constructors. */
- Fast_Token(char *begin, char *end, bool punctuation) : first(begin), second(end), _punctuation(punctuation) {}
- Fast_Token() : first(NULL), second(NULL), _punctuation(false) {}
- Fast_Token(const Fast_Token &other)
- : first(other.first),
- second(other.second),
- _punctuation(other._punctuation)
- {
- }
- Fast_Token& operator=(const Fast_Token &other)
- {
- first = other.first;
- second = other.second;
- _punctuation = other._punctuation;
- return *this;
- }
-
- };
-
- /** Constructors/destructor. */
- Fast_LatinTokenizer();
- explicit Fast_LatinTokenizer(char *text);
- Fast_LatinTokenizer(char *text, size_t length);
- virtual ~Fast_LatinTokenizer();
-
- /** Constructors, sort of. */
- void SetNewText(char *text);
- void SetNewText(char *text, size_t length);
-
- /** Are there any more tokens left? */
- bool MoreTokens();
-
- /** Return next token. */
- Fast_Token GetNextToken();
-
- /** Return text buffer. */
- char *GetOriginalText();
-
- /** Observers in case we need not perform some action specific
- * to the IsSeparator or IsPunctuation implementations
- * (such as extra initialization or statistics gathering or...)
- */
- IsPunctuation& GetIsPunctuation() { return _isPunctuation; }
- IsSeparator& GetIsSeparator() { return _isSeparator; }
+ /** Helper class. */
+ class Fast_Token {
+ public:
+
+ /** Member variables. */
+ char *first; // Points to start of token. Named 'first' for std::pair compatibility.
+ char *second; // Points to end of token. Named 'second' for std::pair compatibility.
+ bool _punctuation; // Is the token a punctuation symbol?
+
+ /** Constructors. */
+ Fast_Token(char *begin, char *end, bool punctuation) : first(begin), second(end), _punctuation(punctuation) {}
+ Fast_Token() : first(NULL), second(NULL), _punctuation(false) {}
+ Fast_Token(const Fast_Token &other)
+ : first(other.first),
+ second(other.second),
+ _punctuation(other._punctuation)
+ {
+ }
+ Fast_Token& operator=(const Fast_Token &other)
+ {
+ first = other.first;
+ second = other.second;
+ _punctuation = other._punctuation;
+ return *this;
+ }
+
+ };
+
+ /** Constructors/destructor. */
+ Fast_LatinTokenizer();
+ explicit Fast_LatinTokenizer(char *text);
+ Fast_LatinTokenizer(char *text, size_t length);
+ virtual ~Fast_LatinTokenizer();
+
+ /** Constructors, sort of. */
+ void SetNewText(char *text);
+ void SetNewText(char *text, size_t length);
+
+ /** Are there any more tokens left? */
+ bool MoreTokens();
+
+ /** Return next token. */
+ Fast_Token GetNextToken();
+
+ /** Return text buffer. */
+ char *GetOriginalText();
+
+ /** Observers in case we need not perform some action specific
+ * to the IsSeparator or IsPunctuation implementations
+ * (such as extra initialization or statistics gathering or...)
+ */
+ IsPunctuation& GetIsPunctuation() { return _isPunctuation; }
+ IsSeparator& GetIsSeparator() { return _isSeparator; }
private:
- /** Member variables. */
- char *_org; // Holds the original text buffer.
- char *_next; // Points to the current buffer position.
- char *_end; // Points to the end of the buffer.
- bool _moreTokens; // More text to process?
- IsSeparator _isSeparator; // Separator symbol predicate.
- IsPunctuation _isPunctuation; // Punctuation symbol predicate.
+ /** Member variables. */
+ char *_org; // Holds the original text buffer.
+ char *_next; // Points to the current buffer position.
+ char *_end; // Points to the end of the buffer.
+ bool _moreTokens; // More text to process?
+ IsSeparator _isSeparator; // Separator symbol predicate.
+ IsPunctuation _isPunctuation; // Punctuation symbol predicate.
- /** Helper methods. */
- void SkipBlanks();
+ /** Helper methods. */
+ void SkipBlanks();
};
@@ -134,12 +134,12 @@ private:
template <typename IsSeparator, typename IsPunctuation>
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::Fast_LatinTokenizer() :
- _org(NULL),
- _next(NULL),
- _end(NULL),
- _moreTokens(false),
- _isSeparator(),
- _isPunctuation()
+ _org(NULL),
+ _next(NULL),
+ _end(NULL),
+ _moreTokens(false),
+ _isSeparator(),
+ _isPunctuation()
{
}
@@ -153,14 +153,14 @@ Fast_LatinTokenizer<IsSeparator, IsPunctuation>::Fast_LatinTokenizer() :
template <typename IsSeparator, typename IsPunctuation>
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::Fast_LatinTokenizer(char *text) :
- _org(NULL),
- _next(NULL),
- _end(NULL),
- _moreTokens(false),
- _isSeparator(),
- _isPunctuation()
+ _org(NULL),
+ _next(NULL),
+ _end(NULL),
+ _moreTokens(false),
+ _isSeparator(),
+ _isPunctuation()
{
- SetNewText(text);
+ SetNewText(text);
}
/**
@@ -174,14 +174,14 @@ Fast_LatinTokenizer<IsSeparator, IsPunctuation>::Fast_LatinTokenizer(char *text)
template <typename IsSeparator, typename IsPunctuation>
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::Fast_LatinTokenizer(char *text, size_t length)
- : _org(NULL),
- _next(NULL),
- _end(NULL),
- _moreTokens(false),
- _isSeparator(),
- _isPunctuation()
+ : _org(NULL),
+ _next(NULL),
+ _end(NULL),
+ _moreTokens(false),
+ _isSeparator(),
+ _isPunctuation()
{
- SetNewText(text, length);
+ SetNewText(text, length);
}
/**
@@ -207,10 +207,10 @@ template <typename IsSeparator, typename IsPunctuation>
void
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::SetNewText(char *text) {
- _org = text;
- _next = text;
- _moreTokens = text != NULL;
- _end = NULL;
+ _org = text;
+ _next = text;
+ _moreTokens = text != NULL;
+ _end = NULL;
}
/**
@@ -226,10 +226,10 @@ template <typename IsSeparator, typename IsPunctuation>
void
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::SetNewText(char *text, size_t length) {
- _org = text;
- _next = text;
- _moreTokens = text != NULL;
- _end = (_next ? _next + length : NULL);
+ _org = text;
+ _next = text;
+ _moreTokens = text != NULL;
+ _end = (_next ? _next + length : NULL);
}
/**
@@ -243,26 +243,26 @@ template <typename IsSeparator, typename IsPunctuation>
void
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::SkipBlanks() {
- if (!_moreTokens) return;
- // Initialized with '\0' terminated buffer?
- if (_end == NULL) {
- while (*_next != '\0' && _isSeparator(*_next)) {
- ++_next;
+ if (!_moreTokens) return;
+ // Initialized with '\0' terminated buffer?
+ if (_end == NULL) {
+ while (*_next != '\0' && _isSeparator(*_next)) {
+ ++_next;
+ }
+ if (*_next == '\0') {
+ _moreTokens = false;
+ }
}
- if (*_next == '\0') {
- _moreTokens = false;
- }
- }
- // Initialized with specified buffer length.
- else {
- while (_next != _end && _isSeparator(*_next)) {
- ++_next;
- }
- if (_next == _end) {
- _moreTokens = false;
+ // Initialized with specified buffer length.
+ else {
+ while (_next != _end && _isSeparator(*_next)) {
+ ++_next;
+ }
+ if (_next == _end) {
+ _moreTokens = false;
+ }
}
- }
}
@@ -276,8 +276,8 @@ Fast_LatinTokenizer<IsSeparator, IsPunctuation>::SkipBlanks() {
template <typename IsSeparator, typename IsPunctuation>
bool
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::MoreTokens() {
- SkipBlanks();
- return _moreTokens;
+ SkipBlanks();
+ return _moreTokens;
}
/**
@@ -291,34 +291,34 @@ template <typename IsSeparator, typename IsPunctuation>
typename Fast_LatinTokenizer<IsSeparator, IsPunctuation>::Fast_Token
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::GetNextToken() {
- char *prev = _next;
+ char *prev = _next;
- // Skip all blanks and flag if there are no more tokens.
- SkipBlanks();
+ // Skip all blanks and flag if there are no more tokens.
+ SkipBlanks();
- // Initialized with '\0' terminated buffer? Find the next blank or punctuation.
- if (_end == NULL) {
- while (*_next != '\0' && !_isSeparator(*_next) && !_isPunctuation(*_next)) {
- ++_next;
- }
+ // Initialized with '\0' terminated buffer? Find the next blank or punctuation.
+ if (_end == NULL) {
+ while (*_next != '\0' && !_isSeparator(*_next) && !_isPunctuation(*_next)) {
+ ++_next;
+ }
- // Initialized with specified buffer length.
- } else {
- while (_next != _end && !_isSeparator(*_next) && !_isPunctuation(*_next)) {
- ++_next;
+ // Initialized with specified buffer length.
+ } else {
+ while (_next != _end && !_isSeparator(*_next) && !_isPunctuation(*_next)) {
+ ++_next;
+ }
}
- }
- // Check if this token is a punctuation symbol, and generate token.
- bool isToken = ((_next - prev == 0) && _isPunctuation(*prev));
+ // Check if this token is a punctuation symbol, and generate token.
+ bool isToken = ((_next - prev == 0) && _isPunctuation(*prev));
- if (isToken) {
- ++_next;
- }
+ if (isToken) {
+ ++_next;
+ }
- Fast_Token token(prev, _next, isToken);
+ Fast_Token token(prev, _next, isToken);
- return token;
+ return token;
}
@@ -332,7 +332,7 @@ Fast_LatinTokenizer<IsSeparator, IsPunctuation>::GetNextToken() {
template <typename IsSeparator, typename IsPunctuation>
char *
Fast_LatinTokenizer<IsSeparator, IsPunctuation>::GetOriginalText() {
- return _org;
+ return _org;
}
/**
@@ -349,7 +349,7 @@ Fast_LatinTokenizer<IsSeparator, IsPunctuation>::GetOriginalText() {
*****************************************************************************/
struct Fast_IsSpace {
- bool operator()(char c) {return (isspace(static_cast<unsigned char>(c)) != 0);}
+ bool operator()(char c) {return (isspace(static_cast<unsigned char>(c)) != 0);}
};
/**
@@ -366,7 +366,7 @@ struct Fast_IsSpace {
*****************************************************************************/
struct Fast_IsPunctuation {
- bool operator()(char c) {return (ispunct(static_cast<unsigned char>(c)) != 0);}
+ bool operator()(char c) {return (ispunct(static_cast<unsigned char>(c)) != 0);}
};
/**
@@ -380,4 +380,3 @@ struct Fast_IsPunctuation {
*****************************************************************************/
typedef Fast_LatinTokenizer<Fast_IsSpace, Fast_IsPunctuation> Fast_SimpleLatinTokenizer;
-
diff --git a/fastlib/src/vespa/fastlib/text/normwordfolder.cpp b/fastlib/src/vespa/fastlib/text/normwordfolder.cpp
index 94a2f8f2f28..93debb0a0e2 100644
--- a/fastlib/src/vespa/fastlib/text/normwordfolder.cpp
+++ b/fastlib/src/vespa/fastlib/text/normwordfolder.cpp
@@ -26,7 +26,7 @@ ucs4_t Fast_NormalizeWordFolder::_halfwidth_fullwidthMap[240];
void
Fast_NormalizeWordFolder::Setup(uint32_t flags)
{
- // Only allow setting these when not initialized or initializing...
+ // Only allow setting these when not initialized or initializing...
_initMutex.Lock();
_doAccentRemoval = (DO_ACCENT_REMOVAL & flags) != 0;
// _doSmallToNormalKana = (DO_SMALL_TO_NORMAL_KANA & flags) != 0;
@@ -44,675 +44,675 @@ Fast_NormalizeWordFolder::Setup(uint32_t flags)
void
Fast_NormalizeWordFolder::Initialize()
{
- unsigned int i;
- if (!_isInitialized) {
- _initMutex.Lock();
+ unsigned int i;
if (!_isInitialized) {
+ _initMutex.Lock();
+ if (!_isInitialized) {
- for (i = 0; i < 128; i++)
- _isWord[i] = Fast_UnicodeUtil::IsWordChar(i);
- for (i = 0; i < 767; i++) {
- _foldCase[i] = Fast_UnicodeUtil::ToLower(i);
- _keepCase[i] = i;
- }
+ for (i = 0; i < 128; i++)
+ _isWord[i] = Fast_UnicodeUtil::IsWordChar(i);
+ for (i = 0; i < 767; i++) {
+ _foldCase[i] = Fast_UnicodeUtil::ToLower(i);
+ _keepCase[i] = i;
+ }
- for (i = 0x1E00; i < 0x1F00; i++) {
- _foldCaseHighAscii[i - 0x1E00] = Fast_UnicodeUtil::ToLower(i);
- _keepCaseHighAscii[i - 0x1E00] = i;
- }
+ for (i = 0x1E00; i < 0x1F00; i++) {
+ _foldCaseHighAscii[i - 0x1E00] = Fast_UnicodeUtil::ToLower(i);
+ _keepCaseHighAscii[i - 0x1E00] = i;
+ }
- if (_doAccentRemoval) {
- _foldCase[0xc0] = 'a';
- _foldCase[0xc1] = 'a';
- _foldCase[0xc2] = 'a';
- _foldCase[0xc3] = 'a'; // A tilde
- _foldCase[0xc7] = 'c';
- _foldCase[0xc8] = 'e';
- _foldCase[0xc9] = 'e';
- _foldCase[0xca] = 'e';
- _foldCase[0xcb] = 'e';
- _foldCase[0xcc] = 'i'; // I grave
- _foldCase[0xcd] = 'i';
- _foldCase[0xce] = 'i';
- _foldCase[0xcf] = 'i';
- _foldCase[0xd1] = 'n';
- _foldCase[0xd2] = 'o';
- _foldCase[0xd3] = 'o';
- _foldCase[0xd4] = 'o';
- _foldCase[0xd5] = 'o';
- _foldCase[0xd9] = 'u';
- _foldCase[0xda] = 'u';
- _foldCase[0xdb] = 'u';
- _foldCase[0xdd] = 'y';
+ if (_doAccentRemoval) {
+ _foldCase[0xc0] = 'a';
+ _foldCase[0xc1] = 'a';
+ _foldCase[0xc2] = 'a';
+ _foldCase[0xc3] = 'a'; // A tilde
+ _foldCase[0xc7] = 'c';
+ _foldCase[0xc8] = 'e';
+ _foldCase[0xc9] = 'e';
+ _foldCase[0xca] = 'e';
+ _foldCase[0xcb] = 'e';
+ _foldCase[0xcc] = 'i'; // I grave
+ _foldCase[0xcd] = 'i';
+ _foldCase[0xce] = 'i';
+ _foldCase[0xcf] = 'i';
+ _foldCase[0xd1] = 'n';
+ _foldCase[0xd2] = 'o';
+ _foldCase[0xd3] = 'o';
+ _foldCase[0xd4] = 'o';
+ _foldCase[0xd5] = 'o';
+ _foldCase[0xd9] = 'u';
+ _foldCase[0xda] = 'u';
+ _foldCase[0xdb] = 'u';
+ _foldCase[0xdd] = 'y';
- _foldCase[0xe0] = 'a';
- _foldCase[0xe1] = 'a';
- _foldCase[0xe2] = 'a';
- _foldCase[0xe3] = 'a'; // a tilde
- _foldCase[0xe7] = 'c';
- _foldCase[0xe8] = 'e';
- _foldCase[0xe9] = 'e';
- _foldCase[0xea] = 'e';
- _foldCase[0xeb] = 'e';
- _foldCase[0xec] = 'i'; // i grave
- _foldCase[0xed] = 'i';
- _foldCase[0xee] = 'i';
- _foldCase[0xef] = 'i';
- _foldCase[0xf1] = 'n';
- _foldCase[0xf2] = 'o';
- _foldCase[0xf3] = 'o';
- _foldCase[0xf4] = 'o';
- _foldCase[0xf5] = 'o';
- _foldCase[0xf9] = 'u';
- _foldCase[0xfa] = 'u';
- _foldCase[0xfb] = 'u';
- _foldCase[0xfd] = 'y';
- _foldCase[0xff] = 'y';
- _foldCase[0x102] = 'a';
- _foldCase[0x103] = 'a';
- _foldCase[0x110] = 'd';
- _foldCase[0x111] = 'd';
- _foldCase[0x128] = 'i';
- _foldCase[0x129] = 'i';
- _foldCase[0x178] = 'y';
- _foldCase[0x1a0] = 'o';
- _foldCase[0x1a1] = 'o';
- _foldCase[0x1af] = 'u';
- _foldCase[0x1b0] = 'u';
+ _foldCase[0xe0] = 'a';
+ _foldCase[0xe1] = 'a';
+ _foldCase[0xe2] = 'a';
+ _foldCase[0xe3] = 'a'; // a tilde
+ _foldCase[0xe7] = 'c';
+ _foldCase[0xe8] = 'e';
+ _foldCase[0xe9] = 'e';
+ _foldCase[0xea] = 'e';
+ _foldCase[0xeb] = 'e';
+ _foldCase[0xec] = 'i'; // i grave
+ _foldCase[0xed] = 'i';
+ _foldCase[0xee] = 'i';
+ _foldCase[0xef] = 'i';
+ _foldCase[0xf1] = 'n';
+ _foldCase[0xf2] = 'o';
+ _foldCase[0xf3] = 'o';
+ _foldCase[0xf4] = 'o';
+ _foldCase[0xf5] = 'o';
+ _foldCase[0xf9] = 'u';
+ _foldCase[0xfa] = 'u';
+ _foldCase[0xfb] = 'u';
+ _foldCase[0xfd] = 'y';
+ _foldCase[0xff] = 'y';
+ _foldCase[0x102] = 'a';
+ _foldCase[0x103] = 'a';
+ _foldCase[0x110] = 'd';
+ _foldCase[0x111] = 'd';
+ _foldCase[0x128] = 'i';
+ _foldCase[0x129] = 'i';
+ _foldCase[0x178] = 'y';
+ _foldCase[0x1a0] = 'o';
+ _foldCase[0x1a1] = 'o';
+ _foldCase[0x1af] = 'u';
+ _foldCase[0x1b0] = 'u';
- // Superscript spacing modifiers
- _foldCase[0x2b0] = 'h';
- _foldCase[0x2b1] = 0x266;
- _foldCase[0x2b2] = 'j';
- _foldCase[0x2b3] = 'r';
- _foldCase[0x2b4] = 0x279;
- _foldCase[0x2b5] = 0x27b;
- _foldCase[0x2b6] = 0x281;
- _foldCase[0x2b7] = 'w';
- _foldCase[0x2b8] = 'y';
- _foldCase[0x2e0] = 0x263;
- _foldCase[0x2e1] = 'l';
- _foldCase[0x2e2] = 's';
- _foldCase[0x2e3] = 'x';
- _foldCase[0x2e4] = 0x295;
+ // Superscript spacing modifiers
+ _foldCase[0x2b0] = 'h';
+ _foldCase[0x2b1] = 0x266;
+ _foldCase[0x2b2] = 'j';
+ _foldCase[0x2b3] = 'r';
+ _foldCase[0x2b4] = 0x279;
+ _foldCase[0x2b5] = 0x27b;
+ _foldCase[0x2b6] = 0x281;
+ _foldCase[0x2b7] = 'w';
+ _foldCase[0x2b8] = 'y';
+ _foldCase[0x2e0] = 0x263;
+ _foldCase[0x2e1] = 'l';
+ _foldCase[0x2e2] = 's';
+ _foldCase[0x2e3] = 'x';
+ _foldCase[0x2e4] = 0x295;
- _keepCase[0xc0] = 'A';
- _keepCase[0xc1] = 'A';
- _keepCase[0xc2] = 'A';
- _keepCase[0xc3] = 'A'; // A tilde
- _keepCase[0xc7] = 'C';
- _keepCase[0xc8] = 'E';
- _keepCase[0xc9] = 'E';
- _keepCase[0xca] = 'E';
- _keepCase[0xcb] = 'E';
- _keepCase[0xcc] = 'I'; // I grave
- _keepCase[0xcd] = 'I';
- _keepCase[0xce] = 'I';
- _keepCase[0xcf] = 'I';
- _keepCase[0xd1] = 'N';
- _keepCase[0xd2] = 'O';
- _keepCase[0xd3] = 'O';
- _keepCase[0xd4] = 'O';
- _keepCase[0xd5] = 'O';
- _keepCase[0xd9] = 'U';
- _keepCase[0xda] = 'U';
- _keepCase[0xdb] = 'U';
- _keepCase[0xdd] = 'Y';
+ _keepCase[0xc0] = 'A';
+ _keepCase[0xc1] = 'A';
+ _keepCase[0xc2] = 'A';
+ _keepCase[0xc3] = 'A'; // A tilde
+ _keepCase[0xc7] = 'C';
+ _keepCase[0xc8] = 'E';
+ _keepCase[0xc9] = 'E';
+ _keepCase[0xca] = 'E';
+ _keepCase[0xcb] = 'E';
+ _keepCase[0xcc] = 'I'; // I grave
+ _keepCase[0xcd] = 'I';
+ _keepCase[0xce] = 'I';
+ _keepCase[0xcf] = 'I';
+ _keepCase[0xd1] = 'N';
+ _keepCase[0xd2] = 'O';
+ _keepCase[0xd3] = 'O';
+ _keepCase[0xd4] = 'O';
+ _keepCase[0xd5] = 'O';
+ _keepCase[0xd9] = 'U';
+ _keepCase[0xda] = 'U';
+ _keepCase[0xdb] = 'U';
+ _keepCase[0xdd] = 'Y';
- _keepCase[0xe0] = 'a';
- _keepCase[0xe1] = 'a';
- _keepCase[0xe2] = 'a';
- _keepCase[0xe3] = 'a'; // a tilde
- _keepCase[0xe7] = 'c';
- _keepCase[0xe8] = 'e';
- _keepCase[0xe9] = 'e';
- _keepCase[0xea] = 'e';
- _keepCase[0xeb] = 'e';
- _keepCase[0xec] = 'i'; // i grave
- _keepCase[0xed] = 'i';
- _keepCase[0xee] = 'i';
- _keepCase[0xef] = 'i';
- _keepCase[0xf1] = 'n';
- _keepCase[0xf2] = 'o';
- _keepCase[0xf3] = 'o';
- _keepCase[0xf4] = 'o';
- _keepCase[0xf5] = 'o';
- _keepCase[0xf9] = 'u';
- _keepCase[0xfa] = 'u';
- _keepCase[0xfb] = 'u';
- _keepCase[0xfd] = 'y';
- _keepCase[0xff] = 'y';
+ _keepCase[0xe0] = 'a';
+ _keepCase[0xe1] = 'a';
+ _keepCase[0xe2] = 'a';
+ _keepCase[0xe3] = 'a'; // a tilde
+ _keepCase[0xe7] = 'c';
+ _keepCase[0xe8] = 'e';
+ _keepCase[0xe9] = 'e';
+ _keepCase[0xea] = 'e';
+ _keepCase[0xeb] = 'e';
+ _keepCase[0xec] = 'i'; // i grave
+ _keepCase[0xed] = 'i';
+ _keepCase[0xee] = 'i';
+ _keepCase[0xef] = 'i';
+ _keepCase[0xf1] = 'n';
+ _keepCase[0xf2] = 'o';
+ _keepCase[0xf3] = 'o';
+ _keepCase[0xf4] = 'o';
+ _keepCase[0xf5] = 'o';
+ _keepCase[0xf9] = 'u';
+ _keepCase[0xfa] = 'u';
+ _keepCase[0xfb] = 'u';
+ _keepCase[0xfd] = 'y';
+ _keepCase[0xff] = 'y';
- _keepCase[0x102] = 'A';
- _keepCase[0x103] = 'a';
- _keepCase[0x110] = 'D';
- _keepCase[0x111] = 'd';
- _keepCase[0x128] = 'I';
- _keepCase[0x129] = 'i';
- _keepCase[0x178] = 'Y';
- _keepCase[0x1a0] = 'O';
- _keepCase[0x1a1] = 'o';
- _keepCase[0x1af] = 'U';
- _keepCase[0x1b0] = 'u';
+ _keepCase[0x102] = 'A';
+ _keepCase[0x103] = 'a';
+ _keepCase[0x110] = 'D';
+ _keepCase[0x111] = 'd';
+ _keepCase[0x128] = 'I';
+ _keepCase[0x129] = 'i';
+ _keepCase[0x178] = 'Y';
+ _keepCase[0x1a0] = 'O';
+ _keepCase[0x1a1] = 'o';
+ _keepCase[0x1af] = 'U';
+ _keepCase[0x1b0] = 'u';
- // Superscript spacing modifiers
- _foldCase[0x2b0] = 'h';
- _foldCase[0x2b1] = 0x266;
- _foldCase[0x2b2] = 'j';
- _foldCase[0x2b3] = 'r';
- _foldCase[0x2b4] = 0x279;
- _foldCase[0x2b5] = 0x27b;
- _foldCase[0x2b6] = 0x281;
- _foldCase[0x2b7] = 'w';
- _foldCase[0x2b8] = 'y';
- _foldCase[0x2e0] = 0x263;
- _foldCase[0x2e1] = 'l';
- _foldCase[0x2e2] = 's';
- _foldCase[0x2e3] = 'x';
- _foldCase[0x2e4] = 0x295;
+ // Superscript spacing modifiers
+ _foldCase[0x2b0] = 'h';
+ _foldCase[0x2b1] = 0x266;
+ _foldCase[0x2b2] = 'j';
+ _foldCase[0x2b3] = 'r';
+ _foldCase[0x2b4] = 0x279;
+ _foldCase[0x2b5] = 0x27b;
+ _foldCase[0x2b6] = 0x281;
+ _foldCase[0x2b7] = 'w';
+ _foldCase[0x2b8] = 'y';
+ _foldCase[0x2e0] = 0x263;
+ _foldCase[0x2e1] = 'l';
+ _foldCase[0x2e2] = 's';
+ _foldCase[0x2e3] = 'x';
+ _foldCase[0x2e4] = 0x295;
- // Deaccenting-table for Ascii Extended Additional
- _foldCaseHighAscii[0x1ea0 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea1 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea2 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea3 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea4 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea5 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea6 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea7 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea8 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ea9 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eaa - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eab - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eac - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1ead - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eae - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eaf - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb0 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb1 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb2 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb3 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb4 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb5 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb6 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb7 - 0x1e00] = 'a';
- _foldCaseHighAscii[0x1eb8 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1eb9 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1eba - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ebb - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ebc - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ebd - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ebe - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ebf - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec0 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec1 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec2 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec3 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec4 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec5 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec6 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec7 - 0x1e00] = 'e';
- _foldCaseHighAscii[0x1ec8 - 0x1e00] = 'i';
- _foldCaseHighAscii[0x1ec9 - 0x1e00] = 'i';
- _foldCaseHighAscii[0x1eca - 0x1e00] = 'i';
- _foldCaseHighAscii[0x1ecb - 0x1e00] = 'i';
- _foldCaseHighAscii[0x1ecc - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ecd - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ece - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ecf - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed0 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed1 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed2 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed3 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed4 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed5 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed6 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed7 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed8 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ed9 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1eda - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1edb - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1edc - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1edd - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ede - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1edf - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ee0 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ee1 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ee2 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ee3 - 0x1e00] = 'o';
- _foldCaseHighAscii[0x1ee4 - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1ee5 - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1ee6 - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1ee7 - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1ee8 - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1ee9 - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1eea - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1eeb - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1eec - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1eed - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1eee - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1eef - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1ef0 - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1ef1 - 0x1e00] = 'u';
- _foldCaseHighAscii[0x1ef2 - 0x1e00] = 'y';
- _foldCaseHighAscii[0x1ef3 - 0x1e00] = 'y';
- _foldCaseHighAscii[0x1ef4 - 0x1e00] = 'y';
- _foldCaseHighAscii[0x1ef5 - 0x1e00] = 'y';
- _foldCaseHighAscii[0x1ef6 - 0x1e00] = 'y';
- _foldCaseHighAscii[0x1ef7 - 0x1e00] = 'y';
- _foldCaseHighAscii[0x1ef8 - 0x1e00] = 'y';
- _foldCaseHighAscii[0x1ef9 - 0x1e00] = 'y';
+ // Deaccenting-table for Ascii Extended Additional
+ _foldCaseHighAscii[0x1ea0 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea1 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea2 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea3 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea4 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea5 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea6 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea7 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea8 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ea9 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eaa - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eab - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eac - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1ead - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eae - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eaf - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb0 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb1 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb2 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb3 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb4 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb5 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb6 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb7 - 0x1e00] = 'a';
+ _foldCaseHighAscii[0x1eb8 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1eb9 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1eba - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ebb - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ebc - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ebd - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ebe - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ebf - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec0 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec1 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec2 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec3 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec4 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec5 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec6 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec7 - 0x1e00] = 'e';
+ _foldCaseHighAscii[0x1ec8 - 0x1e00] = 'i';
+ _foldCaseHighAscii[0x1ec9 - 0x1e00] = 'i';
+ _foldCaseHighAscii[0x1eca - 0x1e00] = 'i';
+ _foldCaseHighAscii[0x1ecb - 0x1e00] = 'i';
+ _foldCaseHighAscii[0x1ecc - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ecd - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ece - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ecf - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed0 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed1 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed2 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed3 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed4 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed5 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed6 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed7 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed8 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ed9 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1eda - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1edb - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1edc - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1edd - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ede - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1edf - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ee0 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ee1 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ee2 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ee3 - 0x1e00] = 'o';
+ _foldCaseHighAscii[0x1ee4 - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1ee5 - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1ee6 - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1ee7 - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1ee8 - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1ee9 - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1eea - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1eeb - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1eec - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1eed - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1eee - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1eef - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1ef0 - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1ef1 - 0x1e00] = 'u';
+ _foldCaseHighAscii[0x1ef2 - 0x1e00] = 'y';
+ _foldCaseHighAscii[0x1ef3 - 0x1e00] = 'y';
+ _foldCaseHighAscii[0x1ef4 - 0x1e00] = 'y';
+ _foldCaseHighAscii[0x1ef5 - 0x1e00] = 'y';
+ _foldCaseHighAscii[0x1ef6 - 0x1e00] = 'y';
+ _foldCaseHighAscii[0x1ef7 - 0x1e00] = 'y';
+ _foldCaseHighAscii[0x1ef8 - 0x1e00] = 'y';
+ _foldCaseHighAscii[0x1ef9 - 0x1e00] = 'y';
- _keepCaseHighAscii[0x1ea0 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1ea1 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1ea2 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1ea3 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1ea4 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1ea5 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1ea6 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1ea7 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1ea8 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1ea9 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1eaa - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1eab - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1eac - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1ead - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1eae - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1eaf - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1eb0 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1eb1 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1eb2 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1eb3 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1eb4 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1eb5 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1eb6 - 0x1e00] = 'A';
- _keepCaseHighAscii[0x1eb7 - 0x1e00] = 'a';
- _keepCaseHighAscii[0x1eb8 - 0x1e00] = 'E';
- _keepCaseHighAscii[0x1eb9 - 0x1e00] = 'e';
- _keepCaseHighAscii[0x1eba - 0x1e00] = 'E';
- _keepCaseHighAscii[0x1ebb - 0x1e00] = 'e';
- _keepCaseHighAscii[0x1ebc - 0x1e00] = 'E';
- _keepCaseHighAscii[0x1ebd - 0x1e00] = 'e';
- _keepCaseHighAscii[0x1ebe - 0x1e00] = 'E';
- _keepCaseHighAscii[0x1ebf - 0x1e00] = 'e';
- _keepCaseHighAscii[0x1ec0 - 0x1e00] = 'E';
- _keepCaseHighAscii[0x1ec1 - 0x1e00] = 'e';
- _keepCaseHighAscii[0x1ec2 - 0x1e00] = 'E';
- _keepCaseHighAscii[0x1ec3 - 0x1e00] = 'e';
- _keepCaseHighAscii[0x1ec4 - 0x1e00] = 'E';
- _keepCaseHighAscii[0x1ec5 - 0x1e00] = 'e';
- _keepCaseHighAscii[0x1ec6 - 0x1e00] = 'E';
- _keepCaseHighAscii[0x1ec7 - 0x1e00] = 'e';
- _keepCaseHighAscii[0x1ec8 - 0x1e00] = 'I';
- _keepCaseHighAscii[0x1ec9 - 0x1e00] = 'i';
- _keepCaseHighAscii[0x1eca - 0x1e00] = 'I';
- _keepCaseHighAscii[0x1ecb - 0x1e00] = 'i';
- _keepCaseHighAscii[0x1ecc - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ecd - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ece - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ecf - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ed0 - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ed1 - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ed2 - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ed3 - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ed4 - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ed5 - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ed6 - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ed7 - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ed8 - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ed9 - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1eda - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1edb - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1edc - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1edd - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ede - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1edf - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ee0 - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ee1 - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ee2 - 0x1e00] = 'O';
- _keepCaseHighAscii[0x1ee3 - 0x1e00] = 'o';
- _keepCaseHighAscii[0x1ee4 - 0x1e00] = 'U';
- _keepCaseHighAscii[0x1ee5 - 0x1e00] = 'u';
- _keepCaseHighAscii[0x1ee6 - 0x1e00] = 'U';
- _keepCaseHighAscii[0x1ee7 - 0x1e00] = 'u';
- _keepCaseHighAscii[0x1ee8 - 0x1e00] = 'U';
- _keepCaseHighAscii[0x1ee9 - 0x1e00] = 'u';
- _keepCaseHighAscii[0x1eea - 0x1e00] = 'U';
- _keepCaseHighAscii[0x1eeb - 0x1e00] = 'u';
- _keepCaseHighAscii[0x1eec - 0x1e00] = 'U';
- _keepCaseHighAscii[0x1eed - 0x1e00] = 'u';
- _keepCaseHighAscii[0x1eee - 0x1e00] = 'U';
- _keepCaseHighAscii[0x1eef - 0x1e00] = 'u';
- _keepCaseHighAscii[0x1ef0 - 0x1e00] = 'U';
- _keepCaseHighAscii[0x1ef1 - 0x1e00] = 'u';
- _keepCaseHighAscii[0x1ef2 - 0x1e00] = 'Y';
- _keepCaseHighAscii[0x1ef3 - 0x1e00] = 'y';
- _keepCaseHighAscii[0x1ef4 - 0x1e00] = 'Y';
- _keepCaseHighAscii[0x1ef5 - 0x1e00] = 'y';
- _keepCaseHighAscii[0x1ef6 - 0x1e00] = 'Y';
- _keepCaseHighAscii[0x1ef7 - 0x1e00] = 'y';
- _keepCaseHighAscii[0x1ef8 - 0x1e00] = 'Y';
- _keepCaseHighAscii[0x1ef9 - 0x1e00] = 'y';
+ _keepCaseHighAscii[0x1ea0 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1ea1 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1ea2 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1ea3 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1ea4 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1ea5 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1ea6 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1ea7 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1ea8 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1ea9 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1eaa - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1eab - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1eac - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1ead - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1eae - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1eaf - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1eb0 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1eb1 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1eb2 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1eb3 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1eb4 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1eb5 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1eb6 - 0x1e00] = 'A';
+ _keepCaseHighAscii[0x1eb7 - 0x1e00] = 'a';
+ _keepCaseHighAscii[0x1eb8 - 0x1e00] = 'E';
+ _keepCaseHighAscii[0x1eb9 - 0x1e00] = 'e';
+ _keepCaseHighAscii[0x1eba - 0x1e00] = 'E';
+ _keepCaseHighAscii[0x1ebb - 0x1e00] = 'e';
+ _keepCaseHighAscii[0x1ebc - 0x1e00] = 'E';
+ _keepCaseHighAscii[0x1ebd - 0x1e00] = 'e';
+ _keepCaseHighAscii[0x1ebe - 0x1e00] = 'E';
+ _keepCaseHighAscii[0x1ebf - 0x1e00] = 'e';
+ _keepCaseHighAscii[0x1ec0 - 0x1e00] = 'E';
+ _keepCaseHighAscii[0x1ec1 - 0x1e00] = 'e';
+ _keepCaseHighAscii[0x1ec2 - 0x1e00] = 'E';
+ _keepCaseHighAscii[0x1ec3 - 0x1e00] = 'e';
+ _keepCaseHighAscii[0x1ec4 - 0x1e00] = 'E';
+ _keepCaseHighAscii[0x1ec5 - 0x1e00] = 'e';
+ _keepCaseHighAscii[0x1ec6 - 0x1e00] = 'E';
+ _keepCaseHighAscii[0x1ec7 - 0x1e00] = 'e';
+ _keepCaseHighAscii[0x1ec8 - 0x1e00] = 'I';
+ _keepCaseHighAscii[0x1ec9 - 0x1e00] = 'i';
+ _keepCaseHighAscii[0x1eca - 0x1e00] = 'I';
+ _keepCaseHighAscii[0x1ecb - 0x1e00] = 'i';
+ _keepCaseHighAscii[0x1ecc - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ecd - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ece - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ecf - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ed0 - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ed1 - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ed2 - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ed3 - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ed4 - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ed5 - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ed6 - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ed7 - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ed8 - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ed9 - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1eda - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1edb - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1edc - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1edd - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ede - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1edf - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ee0 - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ee1 - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ee2 - 0x1e00] = 'O';
+ _keepCaseHighAscii[0x1ee3 - 0x1e00] = 'o';
+ _keepCaseHighAscii[0x1ee4 - 0x1e00] = 'U';
+ _keepCaseHighAscii[0x1ee5 - 0x1e00] = 'u';
+ _keepCaseHighAscii[0x1ee6 - 0x1e00] = 'U';
+ _keepCaseHighAscii[0x1ee7 - 0x1e00] = 'u';
+ _keepCaseHighAscii[0x1ee8 - 0x1e00] = 'U';
+ _keepCaseHighAscii[0x1ee9 - 0x1e00] = 'u';
+ _keepCaseHighAscii[0x1eea - 0x1e00] = 'U';
+ _keepCaseHighAscii[0x1eeb - 0x1e00] = 'u';
+ _keepCaseHighAscii[0x1eec - 0x1e00] = 'U';
+ _keepCaseHighAscii[0x1eed - 0x1e00] = 'u';
+ _keepCaseHighAscii[0x1eee - 0x1e00] = 'U';
+ _keepCaseHighAscii[0x1eef - 0x1e00] = 'u';
+ _keepCaseHighAscii[0x1ef0 - 0x1e00] = 'U';
+ _keepCaseHighAscii[0x1ef1 - 0x1e00] = 'u';
+ _keepCaseHighAscii[0x1ef2 - 0x1e00] = 'Y';
+ _keepCaseHighAscii[0x1ef3 - 0x1e00] = 'y';
+ _keepCaseHighAscii[0x1ef4 - 0x1e00] = 'Y';
+ _keepCaseHighAscii[0x1ef5 - 0x1e00] = 'y';
+ _keepCaseHighAscii[0x1ef6 - 0x1e00] = 'Y';
+ _keepCaseHighAscii[0x1ef7 - 0x1e00] = 'y';
+ _keepCaseHighAscii[0x1ef8 - 0x1e00] = 'Y';
+ _keepCaseHighAscii[0x1ef9 - 0x1e00] = 'y';
- }
+ }
- // Base case hiragana - hiragana ID
- for (i = 0; i < 96; i++) {
- _kanaMap[i] = 0x3040 + i;
- }
+ // Base case hiragana - hiragana ID
+ for (i = 0; i < 96; i++) {
+ _kanaMap[i] = 0x3040 + i;
+ }
- // Modify some hiragana - hiragana
- if (_doSmallToNormalKana) {
- // A I U E O YA YU YO WA, and TSU (previously we did not convert TSU)
- _kanaMap[0x3041 - 0x3040] = 0x3042;
- _kanaMap[0x3043 - 0x3040] = 0x3044;
- _kanaMap[0x3045 - 0x3040] = 0x3046;
- _kanaMap[0x3047 - 0x3040] = 0x3048;
- _kanaMap[0x3049 - 0x3040] = 0x304A;
- _kanaMap[0x3063 - 0x3040] = 0x3064;
- _kanaMap[0x3083 - 0x3040] = 0x3084;
- _kanaMap[0x3085 - 0x3040] = 0x3086;
- _kanaMap[0x3087 - 0x3040] = 0x3088;
- _kanaMap[0x308E - 0x3040] = 0x308F;
- }
+ // Modify some hiragana - hiragana
+ if (_doSmallToNormalKana) {
+ // A I U E O YA YU YO WA, and TSU (previously we did not convert TSU)
+ _kanaMap[0x3041 - 0x3040] = 0x3042;
+ _kanaMap[0x3043 - 0x3040] = 0x3044;
+ _kanaMap[0x3045 - 0x3040] = 0x3046;
+ _kanaMap[0x3047 - 0x3040] = 0x3048;
+ _kanaMap[0x3049 - 0x3040] = 0x304A;
+ _kanaMap[0x3063 - 0x3040] = 0x3064;
+ _kanaMap[0x3083 - 0x3040] = 0x3084;
+ _kanaMap[0x3085 - 0x3040] = 0x3086;
+ _kanaMap[0x3087 - 0x3040] = 0x3088;
+ _kanaMap[0x308E - 0x3040] = 0x308F;
+ }
- if (_doKatakanaToHiragana) {
- // base katakana to hiragana
- for (i = 96; i < 192; i++) {
- _kanaMap[i] = 0x3040 + i - 0x60;
- }
+ if (_doKatakanaToHiragana) {
+ // base katakana to hiragana
+ for (i = 96; i < 192; i++) {
+ _kanaMap[i] = 0x3040 + i - 0x60;
+ }
- // modify some katakana - hiragana
+ // modify some katakana - hiragana
- // 0x30A0 -> id
- _kanaMap[0x30A0 - 0x3040] = 0x30A0;
- // 0x30F7 to 0x30FC -> id
- _kanaMap[0x30F7 - 0x3040] = 0x30F7;
- _kanaMap[0x30F8 - 0x3040] = 0x30F8;
- _kanaMap[0x30F9 - 0x3040] = 0x30F9;
- _kanaMap[0x30FA - 0x3040] = 0x30FA;
- _kanaMap[0x30FB - 0x3040] = 0x30FB;
- _kanaMap[0x30FC - 0x3040] = 0x30FC;
- // 0x30FF -> id
- _kanaMap[0x30FF - 0x3040] = 0x30FF;
+ // 0x30A0 -> id
+ _kanaMap[0x30A0 - 0x3040] = 0x30A0;
+ // 0x30F7 to 0x30FC -> id
+ _kanaMap[0x30F7 - 0x3040] = 0x30F7;
+ _kanaMap[0x30F8 - 0x3040] = 0x30F8;
+ _kanaMap[0x30F9 - 0x3040] = 0x30F9;
+ _kanaMap[0x30FA - 0x3040] = 0x30FA;
+ _kanaMap[0x30FB - 0x3040] = 0x30FB;
+ _kanaMap[0x30FC - 0x3040] = 0x30FC;
+ // 0x30FF -> id
+ _kanaMap[0x30FF - 0x3040] = 0x30FF;
- if (_doSmallToNormalKana) {
- // A I U E O YA YU YO WA, and TSU (previously we did not convert TSU)
- _kanaMap[0x30A1 - 0x3040] = 0x3042;
- _kanaMap[0x30A3 - 0x3040] = 0x3044;
- _kanaMap[0x30A5 - 0x3040] = 0x3046;
- _kanaMap[0x30A7 - 0x3040] = 0x3048;
- _kanaMap[0x30A9 - 0x3040] = 0x304A;
- _kanaMap[0x30C3 - 0x3040] = 0x30C4;
- _kanaMap[0x30E3 - 0x3040] = 0x3084;
- _kanaMap[0x30E5 - 0x3040] = 0x3086;
- _kanaMap[0x30E7 - 0x3040] = 0x3088;
- _kanaMap[0x30EE - 0x3040] = 0x308F;
- // KA KE
- _kanaMap[0x30F5 - 0x3040] = 0x304B;
- _kanaMap[0x30F6 - 0x3040] = 0x3051;
- } else { // !_doSmallToNormalKana
- // A I U E O YA YU YO WA, not TSU is normal katakana - hiragana
- // KA KE; No small hiragana exists, so id
- _kanaMap[0x30F5 - 0x3040] = 0x30F5;
- _kanaMap[0x30F6 - 0x3040] = 0x30F6;
- }
- } else { // !_doKatakanaToHiragana
- // katakana - katakana ID
- for (i = 96; i < 192; i++) {
- _kanaMap[i] = 0x3040 + i;
- }
+ if (_doSmallToNormalKana) {
+ // A I U E O YA YU YO WA, and TSU (previously we did not convert TSU)
+ _kanaMap[0x30A1 - 0x3040] = 0x3042;
+ _kanaMap[0x30A3 - 0x3040] = 0x3044;
+ _kanaMap[0x30A5 - 0x3040] = 0x3046;
+ _kanaMap[0x30A7 - 0x3040] = 0x3048;
+ _kanaMap[0x30A9 - 0x3040] = 0x304A;
+ _kanaMap[0x30C3 - 0x3040] = 0x30C4;
+ _kanaMap[0x30E3 - 0x3040] = 0x3084;
+ _kanaMap[0x30E5 - 0x3040] = 0x3086;
+ _kanaMap[0x30E7 - 0x3040] = 0x3088;
+ _kanaMap[0x30EE - 0x3040] = 0x308F;
+ // KA KE
+ _kanaMap[0x30F5 - 0x3040] = 0x304B;
+ _kanaMap[0x30F6 - 0x3040] = 0x3051;
+ } else { // !_doSmallToNormalKana
+ // A I U E O YA YU YO WA, not TSU is normal katakana - hiragana
+ // KA KE; No small hiragana exists, so id
+ _kanaMap[0x30F5 - 0x3040] = 0x30F5;
+ _kanaMap[0x30F6 - 0x3040] = 0x30F6;
+ }
+ } else { // !_doKatakanaToHiragana
+ // katakana - katakana ID
+ for (i = 96; i < 192; i++) {
+ _kanaMap[i] = 0x3040 + i;
+ }
- // modify some katakana - katakana
- if (_doSmallToNormalKana) {
- // A I U E O YA YU YO WA, not TSU
- _kanaMap[0x30A1 - 0x3040] = 0x30A2;
- _kanaMap[0x30A3 - 0x3040] = 0x30A4;
- _kanaMap[0x30A5 - 0x3040] = 0x30A6;
- _kanaMap[0x30A7 - 0x3040] = 0x30A8;
- _kanaMap[0x30A9 - 0x3040] = 0x30AA;
- _kanaMap[0x30E3 - 0x3040] = 0x30E4;
- _kanaMap[0x30E5 - 0x3040] = 0x30E6;
- _kanaMap[0x30E7 - 0x3040] = 0x30E8;
- _kanaMap[0x30EE - 0x3040] = 0x30EF;
- // KA KE
- _kanaMap[0x30F5 - 0x3040] = 0x30AB;
- _kanaMap[0x30F6 - 0x3040] = 0x30B1;
- }
- }
+ // modify some katakana - katakana
+ if (_doSmallToNormalKana) {
+ // A I U E O YA YU YO WA, not TSU
+ _kanaMap[0x30A1 - 0x3040] = 0x30A2;
+ _kanaMap[0x30A3 - 0x3040] = 0x30A4;
+ _kanaMap[0x30A5 - 0x3040] = 0x30A6;
+ _kanaMap[0x30A7 - 0x3040] = 0x30A8;
+ _kanaMap[0x30A9 - 0x3040] = 0x30AA;
+ _kanaMap[0x30E3 - 0x3040] = 0x30E4;
+ _kanaMap[0x30E5 - 0x3040] = 0x30E6;
+ _kanaMap[0x30E7 - 0x3040] = 0x30E8;
+ _kanaMap[0x30EE - 0x3040] = 0x30EF;
+ // KA KE
+ _kanaMap[0x30F5 - 0x3040] = 0x30AB;
+ _kanaMap[0x30F6 - 0x3040] = 0x30B1;
+ }
+ }
- // Fullwidth ASCII
- for (i = 0; i < 0x21; i++)
- _halfwidth_fullwidthMap[i] = 0x20 + i;
- for (i = 0x21; i < 0x3B; i++) // full uppercase to half lowercase
- _halfwidth_fullwidthMap[i] = 0x40 + i;
- for (i = 0x3B; i < 0x5F; i++)
- _halfwidth_fullwidthMap[i] = 0x20 + i;
- // 0xFF00, 0xFF5F -> id
- _halfwidth_fullwidthMap[0x00] = 0xFF00;
- _halfwidth_fullwidthMap[0x5F] = 0xFF5F;
+ // Fullwidth ASCII
+ for (i = 0; i < 0x21; i++)
+ _halfwidth_fullwidthMap[i] = 0x20 + i;
+ for (i = 0x21; i < 0x3B; i++) // full uppercase to half lowercase
+ _halfwidth_fullwidthMap[i] = 0x40 + i;
+ for (i = 0x3B; i < 0x5F; i++)
+ _halfwidth_fullwidthMap[i] = 0x20 + i;
+ // 0xFF00, 0xFF5F -> id
+ _halfwidth_fullwidthMap[0x00] = 0xFF00;
+ _halfwidth_fullwidthMap[0x5F] = 0xFF5F;
- // Halfwidth CJK Punctuation
- // 0xFF60 -> id
- _halfwidth_fullwidthMap[0x60] = 0xFF60;
- _halfwidth_fullwidthMap[0x61] = 0x3002;
- _halfwidth_fullwidthMap[0x62] = 0x300C;
- _halfwidth_fullwidthMap[0x63] = 0x300D;
- _halfwidth_fullwidthMap[0x64] = 0x3001;
+ // Halfwidth CJK Punctuation
+ // 0xFF60 -> id
+ _halfwidth_fullwidthMap[0x60] = 0xFF60;
+ _halfwidth_fullwidthMap[0x61] = 0x3002;
+ _halfwidth_fullwidthMap[0x62] = 0x300C;
+ _halfwidth_fullwidthMap[0x63] = 0x300D;
+ _halfwidth_fullwidthMap[0x64] = 0x3001;
- // Halfwidth katakana (maps directly to hiragana)
+ // Halfwidth katakana (maps directly to hiragana)
- // Common cases for halfwidth katakana
- _halfwidth_fullwidthMap[0x65] = 0x30FB;
+ // Common cases for halfwidth katakana
+ _halfwidth_fullwidthMap[0x65] = 0x30FB;
- if (_doKatakanaToHiragana) {
- _halfwidth_fullwidthMap[0x66] = 0x3092;
- _halfwidth_fullwidthMap[0x6F] = 0x3063;
- _halfwidth_fullwidthMap[0x70] = 0x30FC;
- _halfwidth_fullwidthMap[0x71] = 0x3042;
- _halfwidth_fullwidthMap[0x72] = 0x3044;
- _halfwidth_fullwidthMap[0x73] = 0x3046;
- _halfwidth_fullwidthMap[0x74] = 0x3048;
- _halfwidth_fullwidthMap[0x75] = 0x304A;
- _halfwidth_fullwidthMap[0x76] = 0x304B;
- _halfwidth_fullwidthMap[0x77] = 0x304D;
- _halfwidth_fullwidthMap[0x78] = 0x304F;
- _halfwidth_fullwidthMap[0x79] = 0x3051;
- _halfwidth_fullwidthMap[0x7A] = 0x3053;
- _halfwidth_fullwidthMap[0x7B] = 0x3055;
- _halfwidth_fullwidthMap[0x7C] = 0x3057;
- _halfwidth_fullwidthMap[0x7D] = 0x3059;
- _halfwidth_fullwidthMap[0x7E] = 0x305B;
- _halfwidth_fullwidthMap[0x7F] = 0x305D;
- _halfwidth_fullwidthMap[0x80] = 0x305F;
- _halfwidth_fullwidthMap[0x81] = 0x3061;
- _halfwidth_fullwidthMap[0x82] = 0x3064;
- _halfwidth_fullwidthMap[0x83] = 0x3066;
- _halfwidth_fullwidthMap[0x84] = 0x3068;
- _halfwidth_fullwidthMap[0x85] = 0x306A;
- _halfwidth_fullwidthMap[0x86] = 0x306B;
- _halfwidth_fullwidthMap[0x87] = 0x306C;
- _halfwidth_fullwidthMap[0x88] = 0x306D;
- _halfwidth_fullwidthMap[0x89] = 0x306E;
- _halfwidth_fullwidthMap[0x8A] = 0x306F;
- _halfwidth_fullwidthMap[0x8B] = 0x3072;
- _halfwidth_fullwidthMap[0x8C] = 0x3075;
- _halfwidth_fullwidthMap[0x8D] = 0x3078;
- _halfwidth_fullwidthMap[0x8E] = 0x307B;
- _halfwidth_fullwidthMap[0x8F] = 0x307E;
- _halfwidth_fullwidthMap[0x90] = 0x307F;
- _halfwidth_fullwidthMap[0x91] = 0x3080;
- _halfwidth_fullwidthMap[0x92] = 0x3081;
- _halfwidth_fullwidthMap[0x93] = 0x3082;
- _halfwidth_fullwidthMap[0x94] = 0x3084;
- _halfwidth_fullwidthMap[0x95] = 0x3086;
- _halfwidth_fullwidthMap[0x96] = 0x3088;
- _halfwidth_fullwidthMap[0x97] = 0x3089;
- _halfwidth_fullwidthMap[0x98] = 0x308A;
- _halfwidth_fullwidthMap[0x99] = 0x308B;
- _halfwidth_fullwidthMap[0x9A] = 0x308C;
- _halfwidth_fullwidthMap[0x9B] = 0x308D;
- _halfwidth_fullwidthMap[0x9C] = 0x308F;
- _halfwidth_fullwidthMap[0x9D] = 0x3093;
- _halfwidth_fullwidthMap[0x9E] = 0x3099;
- _halfwidth_fullwidthMap[0x9F] = 0x309A;
- if (_doSmallToNormalKana) {
- _halfwidth_fullwidthMap[0x67] = 0x3042;
- _halfwidth_fullwidthMap[0x68] = 0x3044;
- _halfwidth_fullwidthMap[0x69] = 0x3046;
- _halfwidth_fullwidthMap[0x6A] = 0x3048;
- _halfwidth_fullwidthMap[0x6B] = 0x304A;
- _halfwidth_fullwidthMap[0x6C] = 0x3084;
- _halfwidth_fullwidthMap[0x6D] = 0x3086;
- _halfwidth_fullwidthMap[0x6E] = 0x3088;
- } else { // !_doSmallToNormalKana
- _halfwidth_fullwidthMap[0x67] = 0x3041;
- _halfwidth_fullwidthMap[0x68] = 0x3043;
- _halfwidth_fullwidthMap[0x69] = 0x3045;
- _halfwidth_fullwidthMap[0x6A] = 0x3047;
- _halfwidth_fullwidthMap[0x6B] = 0x3049;
- _halfwidth_fullwidthMap[0x6C] = 0x3083;
- _halfwidth_fullwidthMap[0x6D] = 0x3085;
- _halfwidth_fullwidthMap[0x6E] = 0x3087;
- }
- } else { // !_doKatakanaToHiragana
- _halfwidth_fullwidthMap[0x66] = 0x30F2;
- _halfwidth_fullwidthMap[0x6F] = 0x30C3;
- _halfwidth_fullwidthMap[0x70] = 0x30FC;
- _halfwidth_fullwidthMap[0x71] = 0x30A2;
- _halfwidth_fullwidthMap[0x72] = 0x30A4;
- _halfwidth_fullwidthMap[0x73] = 0x30A6;
- _halfwidth_fullwidthMap[0x74] = 0x30A8;
- _halfwidth_fullwidthMap[0x75] = 0x30AA;
- _halfwidth_fullwidthMap[0x76] = 0x30AB;
- _halfwidth_fullwidthMap[0x77] = 0x30AD;
- _halfwidth_fullwidthMap[0x78] = 0x30AF;
- _halfwidth_fullwidthMap[0x79] = 0x30B1;
- _halfwidth_fullwidthMap[0x7A] = 0x30B3;
- _halfwidth_fullwidthMap[0x7B] = 0x30B5;
- _halfwidth_fullwidthMap[0x7C] = 0x30B7;
- _halfwidth_fullwidthMap[0x7D] = 0x30B9;
- _halfwidth_fullwidthMap[0x7E] = 0x30BB;
- _halfwidth_fullwidthMap[0x7F] = 0x30BD;
- _halfwidth_fullwidthMap[0x80] = 0x30BF;
- _halfwidth_fullwidthMap[0x81] = 0x30C1;
- _halfwidth_fullwidthMap[0x82] = 0x30C4;
- _halfwidth_fullwidthMap[0x83] = 0x30C6;
- _halfwidth_fullwidthMap[0x84] = 0x30C8;
- _halfwidth_fullwidthMap[0x85] = 0x30CA;
- _halfwidth_fullwidthMap[0x86] = 0x30CB;
- _halfwidth_fullwidthMap[0x87] = 0x30CC;
- _halfwidth_fullwidthMap[0x88] = 0x30CD;
- _halfwidth_fullwidthMap[0x89] = 0x30CE;
- _halfwidth_fullwidthMap[0x8A] = 0x30CF;
- _halfwidth_fullwidthMap[0x8B] = 0x30D2;
- _halfwidth_fullwidthMap[0x8C] = 0x30D5;
- _halfwidth_fullwidthMap[0x8D] = 0x30D8;
- _halfwidth_fullwidthMap[0x8E] = 0x30DB;
- _halfwidth_fullwidthMap[0x8F] = 0x30DE;
- _halfwidth_fullwidthMap[0x90] = 0x30DF;
- _halfwidth_fullwidthMap[0x91] = 0x30E0;
- _halfwidth_fullwidthMap[0x92] = 0x30E1;
- _halfwidth_fullwidthMap[0x93] = 0x30E2;
- _halfwidth_fullwidthMap[0x94] = 0x30E4;
- _halfwidth_fullwidthMap[0x95] = 0x30E6;
- _halfwidth_fullwidthMap[0x96] = 0x30E8;
- _halfwidth_fullwidthMap[0x97] = 0x30E9;
- _halfwidth_fullwidthMap[0x98] = 0x30EA;
- _halfwidth_fullwidthMap[0x99] = 0x30EB;
- _halfwidth_fullwidthMap[0x9A] = 0x30EC;
- _halfwidth_fullwidthMap[0x9B] = 0x30ED;
- _halfwidth_fullwidthMap[0x9C] = 0x30EF;
- _halfwidth_fullwidthMap[0x9D] = 0x30F3;
- _halfwidth_fullwidthMap[0x9E] = 0x3099;
- _halfwidth_fullwidthMap[0x9F] = 0x309A;
- if (_doSmallToNormalKana) {
- _halfwidth_fullwidthMap[0x67] = 0x30a2;
- _halfwidth_fullwidthMap[0x68] = 0x30a4;
- _halfwidth_fullwidthMap[0x69] = 0x30a6;
- _halfwidth_fullwidthMap[0x6A] = 0x30a8;
- _halfwidth_fullwidthMap[0x6B] = 0x30aA;
- _halfwidth_fullwidthMap[0x6C] = 0x30e4;
- _halfwidth_fullwidthMap[0x6D] = 0x30e6;
- _halfwidth_fullwidthMap[0x6E] = 0x30e8;
- } else { // !_doSmallToNormalKana
- _halfwidth_fullwidthMap[0x67] = 0x30a1;
- _halfwidth_fullwidthMap[0x68] = 0x30a3;
- _halfwidth_fullwidthMap[0x69] = 0x30a5;
- _halfwidth_fullwidthMap[0x6A] = 0x30a7;
- _halfwidth_fullwidthMap[0x6B] = 0x30a9;
- _halfwidth_fullwidthMap[0x6C] = 0x30e3;
- _halfwidth_fullwidthMap[0x6D] = 0x30e5;
- _halfwidth_fullwidthMap[0x6E] = 0x30e7;
- }
- }
+ if (_doKatakanaToHiragana) {
+ _halfwidth_fullwidthMap[0x66] = 0x3092;
+ _halfwidth_fullwidthMap[0x6F] = 0x3063;
+ _halfwidth_fullwidthMap[0x70] = 0x30FC;
+ _halfwidth_fullwidthMap[0x71] = 0x3042;
+ _halfwidth_fullwidthMap[0x72] = 0x3044;
+ _halfwidth_fullwidthMap[0x73] = 0x3046;
+ _halfwidth_fullwidthMap[0x74] = 0x3048;
+ _halfwidth_fullwidthMap[0x75] = 0x304A;
+ _halfwidth_fullwidthMap[0x76] = 0x304B;
+ _halfwidth_fullwidthMap[0x77] = 0x304D;
+ _halfwidth_fullwidthMap[0x78] = 0x304F;
+ _halfwidth_fullwidthMap[0x79] = 0x3051;
+ _halfwidth_fullwidthMap[0x7A] = 0x3053;
+ _halfwidth_fullwidthMap[0x7B] = 0x3055;
+ _halfwidth_fullwidthMap[0x7C] = 0x3057;
+ _halfwidth_fullwidthMap[0x7D] = 0x3059;
+ _halfwidth_fullwidthMap[0x7E] = 0x305B;
+ _halfwidth_fullwidthMap[0x7F] = 0x305D;
+ _halfwidth_fullwidthMap[0x80] = 0x305F;
+ _halfwidth_fullwidthMap[0x81] = 0x3061;
+ _halfwidth_fullwidthMap[0x82] = 0x3064;
+ _halfwidth_fullwidthMap[0x83] = 0x3066;
+ _halfwidth_fullwidthMap[0x84] = 0x3068;
+ _halfwidth_fullwidthMap[0x85] = 0x306A;
+ _halfwidth_fullwidthMap[0x86] = 0x306B;
+ _halfwidth_fullwidthMap[0x87] = 0x306C;
+ _halfwidth_fullwidthMap[0x88] = 0x306D;
+ _halfwidth_fullwidthMap[0x89] = 0x306E;
+ _halfwidth_fullwidthMap[0x8A] = 0x306F;
+ _halfwidth_fullwidthMap[0x8B] = 0x3072;
+ _halfwidth_fullwidthMap[0x8C] = 0x3075;
+ _halfwidth_fullwidthMap[0x8D] = 0x3078;
+ _halfwidth_fullwidthMap[0x8E] = 0x307B;
+ _halfwidth_fullwidthMap[0x8F] = 0x307E;
+ _halfwidth_fullwidthMap[0x90] = 0x307F;
+ _halfwidth_fullwidthMap[0x91] = 0x3080;
+ _halfwidth_fullwidthMap[0x92] = 0x3081;
+ _halfwidth_fullwidthMap[0x93] = 0x3082;
+ _halfwidth_fullwidthMap[0x94] = 0x3084;
+ _halfwidth_fullwidthMap[0x95] = 0x3086;
+ _halfwidth_fullwidthMap[0x96] = 0x3088;
+ _halfwidth_fullwidthMap[0x97] = 0x3089;
+ _halfwidth_fullwidthMap[0x98] = 0x308A;
+ _halfwidth_fullwidthMap[0x99] = 0x308B;
+ _halfwidth_fullwidthMap[0x9A] = 0x308C;
+ _halfwidth_fullwidthMap[0x9B] = 0x308D;
+ _halfwidth_fullwidthMap[0x9C] = 0x308F;
+ _halfwidth_fullwidthMap[0x9D] = 0x3093;
+ _halfwidth_fullwidthMap[0x9E] = 0x3099;
+ _halfwidth_fullwidthMap[0x9F] = 0x309A;
+ if (_doSmallToNormalKana) {
+ _halfwidth_fullwidthMap[0x67] = 0x3042;
+ _halfwidth_fullwidthMap[0x68] = 0x3044;
+ _halfwidth_fullwidthMap[0x69] = 0x3046;
+ _halfwidth_fullwidthMap[0x6A] = 0x3048;
+ _halfwidth_fullwidthMap[0x6B] = 0x304A;
+ _halfwidth_fullwidthMap[0x6C] = 0x3084;
+ _halfwidth_fullwidthMap[0x6D] = 0x3086;
+ _halfwidth_fullwidthMap[0x6E] = 0x3088;
+ } else { // !_doSmallToNormalKana
+ _halfwidth_fullwidthMap[0x67] = 0x3041;
+ _halfwidth_fullwidthMap[0x68] = 0x3043;
+ _halfwidth_fullwidthMap[0x69] = 0x3045;
+ _halfwidth_fullwidthMap[0x6A] = 0x3047;
+ _halfwidth_fullwidthMap[0x6B] = 0x3049;
+ _halfwidth_fullwidthMap[0x6C] = 0x3083;
+ _halfwidth_fullwidthMap[0x6D] = 0x3085;
+ _halfwidth_fullwidthMap[0x6E] = 0x3087;
+ }
+ } else { // !_doKatakanaToHiragana
+ _halfwidth_fullwidthMap[0x66] = 0x30F2;
+ _halfwidth_fullwidthMap[0x6F] = 0x30C3;
+ _halfwidth_fullwidthMap[0x70] = 0x30FC;
+ _halfwidth_fullwidthMap[0x71] = 0x30A2;
+ _halfwidth_fullwidthMap[0x72] = 0x30A4;
+ _halfwidth_fullwidthMap[0x73] = 0x30A6;
+ _halfwidth_fullwidthMap[0x74] = 0x30A8;
+ _halfwidth_fullwidthMap[0x75] = 0x30AA;
+ _halfwidth_fullwidthMap[0x76] = 0x30AB;
+ _halfwidth_fullwidthMap[0x77] = 0x30AD;
+ _halfwidth_fullwidthMap[0x78] = 0x30AF;
+ _halfwidth_fullwidthMap[0x79] = 0x30B1;
+ _halfwidth_fullwidthMap[0x7A] = 0x30B3;
+ _halfwidth_fullwidthMap[0x7B] = 0x30B5;
+ _halfwidth_fullwidthMap[0x7C] = 0x30B7;
+ _halfwidth_fullwidthMap[0x7D] = 0x30B9;
+ _halfwidth_fullwidthMap[0x7E] = 0x30BB;
+ _halfwidth_fullwidthMap[0x7F] = 0x30BD;
+ _halfwidth_fullwidthMap[0x80] = 0x30BF;
+ _halfwidth_fullwidthMap[0x81] = 0x30C1;
+ _halfwidth_fullwidthMap[0x82] = 0x30C4;
+ _halfwidth_fullwidthMap[0x83] = 0x30C6;
+ _halfwidth_fullwidthMap[0x84] = 0x30C8;
+ _halfwidth_fullwidthMap[0x85] = 0x30CA;
+ _halfwidth_fullwidthMap[0x86] = 0x30CB;
+ _halfwidth_fullwidthMap[0x87] = 0x30CC;
+ _halfwidth_fullwidthMap[0x88] = 0x30CD;
+ _halfwidth_fullwidthMap[0x89] = 0x30CE;
+ _halfwidth_fullwidthMap[0x8A] = 0x30CF;
+ _halfwidth_fullwidthMap[0x8B] = 0x30D2;
+ _halfwidth_fullwidthMap[0x8C] = 0x30D5;
+ _halfwidth_fullwidthMap[0x8D] = 0x30D8;
+ _halfwidth_fullwidthMap[0x8E] = 0x30DB;
+ _halfwidth_fullwidthMap[0x8F] = 0x30DE;
+ _halfwidth_fullwidthMap[0x90] = 0x30DF;
+ _halfwidth_fullwidthMap[0x91] = 0x30E0;
+ _halfwidth_fullwidthMap[0x92] = 0x30E1;
+ _halfwidth_fullwidthMap[0x93] = 0x30E2;
+ _halfwidth_fullwidthMap[0x94] = 0x30E4;
+ _halfwidth_fullwidthMap[0x95] = 0x30E6;
+ _halfwidth_fullwidthMap[0x96] = 0x30E8;
+ _halfwidth_fullwidthMap[0x97] = 0x30E9;
+ _halfwidth_fullwidthMap[0x98] = 0x30EA;
+ _halfwidth_fullwidthMap[0x99] = 0x30EB;
+ _halfwidth_fullwidthMap[0x9A] = 0x30EC;
+ _halfwidth_fullwidthMap[0x9B] = 0x30ED;
+ _halfwidth_fullwidthMap[0x9C] = 0x30EF;
+ _halfwidth_fullwidthMap[0x9D] = 0x30F3;
+ _halfwidth_fullwidthMap[0x9E] = 0x3099;
+ _halfwidth_fullwidthMap[0x9F] = 0x309A;
+ if (_doSmallToNormalKana) {
+ _halfwidth_fullwidthMap[0x67] = 0x30a2;
+ _halfwidth_fullwidthMap[0x68] = 0x30a4;
+ _halfwidth_fullwidthMap[0x69] = 0x30a6;
+ _halfwidth_fullwidthMap[0x6A] = 0x30a8;
+ _halfwidth_fullwidthMap[0x6B] = 0x30aA;
+ _halfwidth_fullwidthMap[0x6C] = 0x30e4;
+ _halfwidth_fullwidthMap[0x6D] = 0x30e6;
+ _halfwidth_fullwidthMap[0x6E] = 0x30e8;
+ } else { // !_doSmallToNormalKana
+ _halfwidth_fullwidthMap[0x67] = 0x30a1;
+ _halfwidth_fullwidthMap[0x68] = 0x30a3;
+ _halfwidth_fullwidthMap[0x69] = 0x30a5;
+ _halfwidth_fullwidthMap[0x6A] = 0x30a7;
+ _halfwidth_fullwidthMap[0x6B] = 0x30a9;
+ _halfwidth_fullwidthMap[0x6C] = 0x30e3;
+ _halfwidth_fullwidthMap[0x6D] = 0x30e5;
+ _halfwidth_fullwidthMap[0x6E] = 0x30e7;
+ }
+ }
- // Halfwidth Hangul
- _halfwidth_fullwidthMap[0xA0] = 0x3164;
- // fill in 0xFFA1 - 0xFFBE => 0x3131 - 0x314E
- for (i = 0xA1; i < 0xBF; i++)
- _halfwidth_fullwidthMap[i] = 0x3090 + i;
- _halfwidth_fullwidthMap[0xBF] = 0xFFBF;
- _halfwidth_fullwidthMap[0xC0] = 0xFFC0;
- _halfwidth_fullwidthMap[0xC1] = 0xFFC1;
- // fill in 0xFFC2 - 0xFFC7 => 0x314F - 0x3154
- for (i = 0xC2; i < 0xC8; i++)
- _halfwidth_fullwidthMap[i] = 0x308D + i;
- _halfwidth_fullwidthMap[0xC8] = 0xFFC8;
- _halfwidth_fullwidthMap[0xC9] = 0xFFC9;
- // fill in 0xFFCA - 0xFFCF => 0x3155 - 0x315A
- for (i = 0xCA; i < 0xD0; i++)
- _halfwidth_fullwidthMap[i] = 0x308B + i;
- _halfwidth_fullwidthMap[0xD0] = 0xFFD0;
- _halfwidth_fullwidthMap[0xD1] = 0xFFD1;
- // fill in 0xFFD2 - 0xFFD7 => 0x315B - 0x3160
- for (i = 0xD2; i < 0xD8; i++)
- _halfwidth_fullwidthMap[i] = 0x3089 + i;
- _halfwidth_fullwidthMap[0xD8] = 0xFFD8;
- _halfwidth_fullwidthMap[0xD9] = 0xFFD9;
- // fill in 0xFFDA - 0xFFDC => 0x3161 - 0x3163
- for (i = 0xDA; i < 0xDD; i++)
- _halfwidth_fullwidthMap[i] = 0x3087 + i;
+ // Halfwidth Hangul
+ _halfwidth_fullwidthMap[0xA0] = 0x3164;
+ // fill in 0xFFA1 - 0xFFBE => 0x3131 - 0x314E
+ for (i = 0xA1; i < 0xBF; i++)
+ _halfwidth_fullwidthMap[i] = 0x3090 + i;
+ _halfwidth_fullwidthMap[0xBF] = 0xFFBF;
+ _halfwidth_fullwidthMap[0xC0] = 0xFFC0;
+ _halfwidth_fullwidthMap[0xC1] = 0xFFC1;
+ // fill in 0xFFC2 - 0xFFC7 => 0x314F - 0x3154
+ for (i = 0xC2; i < 0xC8; i++)
+ _halfwidth_fullwidthMap[i] = 0x308D + i;
+ _halfwidth_fullwidthMap[0xC8] = 0xFFC8;
+ _halfwidth_fullwidthMap[0xC9] = 0xFFC9;
+ // fill in 0xFFCA - 0xFFCF => 0x3155 - 0x315A
+ for (i = 0xCA; i < 0xD0; i++)
+ _halfwidth_fullwidthMap[i] = 0x308B + i;
+ _halfwidth_fullwidthMap[0xD0] = 0xFFD0;
+ _halfwidth_fullwidthMap[0xD1] = 0xFFD1;
+ // fill in 0xFFD2 - 0xFFD7 => 0x315B - 0x3160
+ for (i = 0xD2; i < 0xD8; i++)
+ _halfwidth_fullwidthMap[i] = 0x3089 + i;
+ _halfwidth_fullwidthMap[0xD8] = 0xFFD8;
+ _halfwidth_fullwidthMap[0xD9] = 0xFFD9;
+ // fill in 0xFFDA - 0xFFDC => 0x3161 - 0x3163
+ for (i = 0xDA; i < 0xDD; i++)
+ _halfwidth_fullwidthMap[i] = 0x3087 + i;
- // Fullwidth symbols
- _halfwidth_fullwidthMap[0xE0] = 0x00A2;
- _halfwidth_fullwidthMap[0xE1] = 0x00A3;
- _halfwidth_fullwidthMap[0xE2] = 0x00AC;
- _halfwidth_fullwidthMap[0xE3] = 0x00AF;
- _halfwidth_fullwidthMap[0xE4] = 0x00A6;
- _halfwidth_fullwidthMap[0xE5] = 0x00A5;
- _halfwidth_fullwidthMap[0xE6] = 0x20A9;
+ // Fullwidth symbols
+ _halfwidth_fullwidthMap[0xE0] = 0x00A2;
+ _halfwidth_fullwidthMap[0xE1] = 0x00A3;
+ _halfwidth_fullwidthMap[0xE2] = 0x00AC;
+ _halfwidth_fullwidthMap[0xE3] = 0x00AF;
+ _halfwidth_fullwidthMap[0xE4] = 0x00A6;
+ _halfwidth_fullwidthMap[0xE5] = 0x00A5;
+ _halfwidth_fullwidthMap[0xE6] = 0x20A9;
- // 0xFFE7 -> id
- _halfwidth_fullwidthMap[0xE7] = 0xFFE7;
+ // 0xFFE7 -> id
+ _halfwidth_fullwidthMap[0xE7] = 0xFFE7;
- // Halfwidth symbols
- _halfwidth_fullwidthMap[0xE8] = 0x2502;
- _halfwidth_fullwidthMap[0xE9] = 0x2190;
- _halfwidth_fullwidthMap[0xEA] = 0x2191;
- _halfwidth_fullwidthMap[0xEB] = 0x2192;
- _halfwidth_fullwidthMap[0xEC] = 0x2193;
- _halfwidth_fullwidthMap[0xED] = 0x25A0;
- _halfwidth_fullwidthMap[0xEE] = 0x25CB;
+ // Halfwidth symbols
+ _halfwidth_fullwidthMap[0xE8] = 0x2502;
+ _halfwidth_fullwidthMap[0xE9] = 0x2190;
+ _halfwidth_fullwidthMap[0xEA] = 0x2191;
+ _halfwidth_fullwidthMap[0xEB] = 0x2192;
+ _halfwidth_fullwidthMap[0xEC] = 0x2193;
+ _halfwidth_fullwidthMap[0xED] = 0x25A0;
+ _halfwidth_fullwidthMap[0xEE] = 0x25CB;
- // 0xFFEF -> id
- _halfwidth_fullwidthMap[0xEF] = 0xFFEF;
+ // 0xFFEF -> id
+ _halfwidth_fullwidthMap[0xEF] = 0xFFEF;
- //
- // DONE
- //
- _isInitialized = true;
+ //
+ // DONE
+ //
+ _isInitialized = true;
+ }
+ _initMutex.Unlock();
}
- _initMutex.Unlock();
- }
}
Fast_NormalizeWordFolder::Fast_NormalizeWordFolder()
{
- Initialize();
+ Initialize();
}
@@ -723,259 +723,259 @@ Fast_NormalizeWordFolder::~Fast_NormalizeWordFolder(void)
size_t
Fast_NormalizeWordFolder::FoldedSizeAsUTF8(const char *word) const
{
- ucs4_t c;
- size_t res;
- const unsigned char *uword;
+ ucs4_t c;
+ size_t res;
+ const unsigned char *uword;
- res = 0;
- uword = reinterpret_cast<const unsigned char *>(word);
- c = Fast_UnicodeUtil::GetUTF8Char(uword);
- while (c != 0) {
- if (c != Fast_UnicodeUtil::_BadUTF8Char) {
- const char *repl = ReplacementString(c);
- if (repl != NULL) {
- res += strlen(repl);
- } else {
- c = ToFold(c);
- res += Fast_UnicodeUtil::utf8clen(c);
- }
- }
+ res = 0;
+ uword = reinterpret_cast<const unsigned char *>(word);
c = Fast_UnicodeUtil::GetUTF8Char(uword);
- }
- return res;
+ while (c != 0) {
+ if (c != Fast_UnicodeUtil::_BadUTF8Char) {
+ const char *repl = ReplacementString(c);
+ if (repl != NULL) {
+ res += strlen(repl);
+ } else {
+ c = ToFold(c);
+ res += Fast_UnicodeUtil::utf8clen(c);
+ }
+ }
+ c = Fast_UnicodeUtil::GetUTF8Char(uword);
+ }
+ return res;
}
char *
Fast_NormalizeWordFolder::FoldUTF8WordToUTF8Quick(char *wordbufpos,
- const char *word)
- const
+ const char *word)
+ const
{
- ucs4_t c;
- const unsigned char *uword;
+ ucs4_t c;
+ const unsigned char *uword;
- uword = reinterpret_cast<const unsigned char *>(word);
- c = Fast_UnicodeUtil::GetUTF8Char(uword);
- while (c != 0) {
- if (c != Fast_UnicodeUtil::_BadUTF8Char) {
- const char *repl = ReplacementString(c);
- if (repl != NULL) {
- size_t repllen = strlen(repl);
- if (repllen > 0)
- memcpy(wordbufpos, repl, repllen);
- wordbufpos += repllen;
- } else {
- c = ToFold(c);
- wordbufpos = Fast_UnicodeUtil::utf8cput(wordbufpos, c);
- }
- }
+ uword = reinterpret_cast<const unsigned char *>(word);
c = Fast_UnicodeUtil::GetUTF8Char(uword);
- }
- return wordbufpos;
+ while (c != 0) {
+ if (c != Fast_UnicodeUtil::_BadUTF8Char) {
+ const char *repl = ReplacementString(c);
+ if (repl != NULL) {
+ size_t repllen = strlen(repl);
+ if (repllen > 0)
+ memcpy(wordbufpos, repl, repllen);
+ wordbufpos += repllen;
+ } else {
+ c = ToFold(c);
+ wordbufpos = Fast_UnicodeUtil::utf8cput(wordbufpos, c);
+ }
+ }
+ c = Fast_UnicodeUtil::GetUTF8Char(uword);
+ }
+ return wordbufpos;
}
const char*
Fast_NormalizeWordFolder::Tokenize(const char *buf,
- const char *bufend,
- char *dstbuf,
- char *dstbufend,
- const char*& origstart,
- size_t& tokenlen) const
+ const char *bufend,
+ char *dstbuf,
+ char *dstbufend,
+ const char*& origstart,
+ size_t& tokenlen) const
{
- ucs4_t c = 0;
- const unsigned char *p;
- char *q = NULL;
- char *eq = NULL;
- const unsigned char *ep;
- p = reinterpret_cast<const unsigned char *>(buf);
- ep = reinterpret_cast<const unsigned char *>(bufend);
+ ucs4_t c = 0;
+ const unsigned char *p;
+ char *q = NULL;
+ char *eq = NULL;
+ const unsigned char *ep;
+ p = reinterpret_cast<const unsigned char *>(buf);
+ ep = reinterpret_cast<const unsigned char *>(bufend);
- // Skip characters between words
- for (;;) {
- if (p >= ep) { // End of input buffer, no more words
- *dstbuf = 0;
- return reinterpret_cast<const char *>(p);
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- if (_isWord[c])
- {
- origstart = reinterpret_cast<const char *>(p) - 1;
- break;
- }
- } else {
- const unsigned char* prev_p = p;
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (IsWordCharOrIA(c))
- {
- origstart = reinterpret_cast<const char *>(prev_p);
- break;
- }
+ // Skip characters between words
+ for (;;) {
+ if (p >= ep) { // End of input buffer, no more words
+ *dstbuf = 0;
+ return reinterpret_cast<const char *>(p);
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ if (_isWord[c])
+ {
+ origstart = reinterpret_cast<const char *>(p) - 1;
+ break;
+ }
+ } else {
+ const unsigned char* prev_p = p;
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (IsWordCharOrIA(c))
+ {
+ origstart = reinterpret_cast<const char *>(prev_p);
+ break;
+ }
+ }
}
- }
- // Start saving word.
- q = dstbuf;
- eq = dstbufend - 6; // Make room for long UTF8 char and NUL
- // Doesn't check for space for the first char, assumes that
- // word buffer is at least 13 characters
- if (c < 128) { // Common case, ASCII
- *q++ = _foldCase[c];
- } else {
- const char *repl = ReplacementString(c);
- if (repl != NULL) {
- size_t repllen = strlen(repl);
- if (repllen > 0)
- memcpy(q, repl, repllen);
- q += repllen;
+ // Start saving word.
+ q = dstbuf;
+ eq = dstbufend - 6; // Make room for long UTF8 char and NUL
+ // Doesn't check for space for the first char, assumes that
+ // word buffer is at least 13 characters
+ if (c < 128) { // Common case, ASCII
+ *q++ = _foldCase[c];
} else {
- c = ToFold(c);
- q = Fast_UnicodeUtil::utf8cput(q, c);
+ const char *repl = ReplacementString(c);
+ if (repl != NULL) {
+ size_t repllen = strlen(repl);
+ if (repllen > 0)
+ memcpy(q, repl, repllen);
+ q += repllen;
+ } else {
+ c = ToFold(c);
+ q = Fast_UnicodeUtil::utf8cput(q, c);
+ }
}
- }
- // Special case for interlinear annotation
- if (c == 0xFFF9) { // ANCHOR
- // Collect up to and including terminator
- for(;;) {
- if (p >= ep) {
- c = 0;
- break;
- }
- if (*p < 128) { // Note, no exit on plain ASCII
- c = *p++;
- *q++ = c;
- if (q >= eq) { // Junk rest of annotation block
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- } else {
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (c == 0xFFFB) {
- break; // out of junking loop
- }
- }
- }
- break; // out of annotation block processing
- }
- } else {
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- q = Fast_UnicodeUtil::utf8cput(q, c);
- if (c == 0xFFFB) { // TERMINATOR => Exit condition
- break;
- }
- if (q >= eq) { // Junk rest of word
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- } else {
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (c == 0xFFFB) {
- break;
- }
- }
- }
- break;
- }
- }
- }
- } else
+ // Special case for interlinear annotation
+ if (c == 0xFFF9) { // ANCHOR
+ // Collect up to and including terminator
+ for(;;) {
+ if (p >= ep) {
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Note, no exit on plain ASCII
+ c = *p++;
+ *q++ = c;
+ if (q >= eq) { // Junk rest of annotation block
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ } else {
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (c == 0xFFFB) {
+ break; // out of junking loop
+ }
+ }
+ }
+ break; // out of annotation block processing
+ }
+ } else {
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ q = Fast_UnicodeUtil::utf8cput(q, c);
+ if (c == 0xFFFB) { // TERMINATOR => Exit condition
+ break;
+ }
+ if (q >= eq) { // Junk rest of word
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ } else {
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (c == 0xFFFB) {
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ } else
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- if (!_isWord[c])
- {
- p--;
- break;
- }
- *q++ = _foldCase[c];
- if (q >= eq) { // Junk rest of word
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- if (!_isWord[c])
- {
- p--;
- break;
- }
- } else {
- const unsigned char* prev_p = p;
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (!Fast_UnicodeUtil::IsWordChar(c))
- {
- p = prev_p;
- break;
- }
- }
- }
- break;
- }
- } else {
- const unsigned char* prev_p = p;
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (!Fast_UnicodeUtil::IsWordChar(c))
- {
- p = prev_p;
- break;
- }
- const char *repl = ReplacementString(c);
- if (repl != NULL) {
- size_t repllen = strlen(repl);
- if (repllen > 0)
- memcpy(q, repl, repllen);
- q += repllen;
- } else {
- c = ToFold(c);
- q = Fast_UnicodeUtil::utf8cput(q, c);
- }
- if (q >= eq) { // Junk rest of word
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- if (!_isWord[c])
- {
- p--;
- break;
- }
- } else {
- const unsigned char* xprev_p = p;
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (!Fast_UnicodeUtil::IsWordChar(c))
- {
- p = xprev_p;
- break;
- }
- }
- }
- break;
- }
- }
- }
- *q = 0;
- tokenlen = q - dstbuf;
- return reinterpret_cast<const char *>(p);
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ if (!_isWord[c])
+ {
+ p--;
+ break;
+ }
+ *q++ = _foldCase[c];
+ if (q >= eq) { // Junk rest of word
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ if (!_isWord[c])
+ {
+ p--;
+ break;
+ }
+ } else {
+ const unsigned char* prev_p = p;
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (!Fast_UnicodeUtil::IsWordChar(c))
+ {
+ p = prev_p;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ } else {
+ const unsigned char* prev_p = p;
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (!Fast_UnicodeUtil::IsWordChar(c))
+ {
+ p = prev_p;
+ break;
+ }
+ const char *repl = ReplacementString(c);
+ if (repl != NULL) {
+ size_t repllen = strlen(repl);
+ if (repllen > 0)
+ memcpy(q, repl, repllen);
+ q += repllen;
+ } else {
+ c = ToFold(c);
+ q = Fast_UnicodeUtil::utf8cput(q, c);
+ }
+ if (q >= eq) { // Junk rest of word
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ if (!_isWord[c])
+ {
+ p--;
+ break;
+ }
+ } else {
+ const unsigned char* xprev_p = p;
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (!Fast_UnicodeUtil::IsWordChar(c))
+ {
+ p = xprev_p;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ *q = 0;
+ tokenlen = q - dstbuf;
+ return reinterpret_cast<const char *>(p);
}
@@ -988,207 +988,207 @@ Fast_NormalizeWordFolder::UCS4Tokenize(const char *buf,
const char*& origstart,
size_t& tokenlen) const
{
- return Tokenize(buf, bufend, dstbuf, dstbufend, origstart, tokenlen);
+ return Tokenize(buf, bufend, dstbuf, dstbufend, origstart, tokenlen);
}
const char*
Fast_NormalizeWordFolder::Tokenize(const char *buf,
- const char *bufend,
- ucs4_t *dstbuf,
- ucs4_t *dstbufend,
- const char*& origstart,
- size_t& tokenlen) const
+ const char *bufend,
+ ucs4_t *dstbuf,
+ ucs4_t *dstbufend,
+ const char*& origstart,
+ size_t& tokenlen) const
{
- ucs4_t c = 0;
- const unsigned char *p;
- ucs4_t *q = NULL;
- ucs4_t *eq = NULL;
- const unsigned char *ep;
- p = reinterpret_cast<const unsigned char *>(buf);
- ep = reinterpret_cast<const unsigned char *>(bufend);
+ ucs4_t c = 0;
+ const unsigned char *p;
+ ucs4_t *q = NULL;
+ ucs4_t *eq = NULL;
+ const unsigned char *ep;
+ p = reinterpret_cast<const unsigned char *>(buf);
+ ep = reinterpret_cast<const unsigned char *>(bufend);
- // Skip characters between words
- for (;;) {
- if (p >= ep) { // End of input buffer, no more words
- *dstbuf = 0;
- return reinterpret_cast<const char *>(p);
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- if (_isWord[c])
- {
- origstart = reinterpret_cast<const char *>(p) - 1;
- break;
- }
- } else {
- const unsigned char* prev_p = p;
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (IsWordCharOrIA(c))
- {
- origstart = reinterpret_cast<const char *>(prev_p);
- break;
- }
+ // Skip characters between words
+ for (;;) {
+ if (p >= ep) { // End of input buffer, no more words
+ *dstbuf = 0;
+ return reinterpret_cast<const char *>(p);
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ if (_isWord[c])
+ {
+ origstart = reinterpret_cast<const char *>(p) - 1;
+ break;
+ }
+ } else {
+ const unsigned char* prev_p = p;
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (IsWordCharOrIA(c))
+ {
+ origstart = reinterpret_cast<const char *>(prev_p);
+ break;
+ }
+ }
}
- }
- // Start saving word.
- q = dstbuf;
- eq = dstbufend - 3; // Make room for UCS4 char replacement string and NUL
- // Doesn't check for space for the first char, assumes that
- // word buffer is at least 13 characters
- if (c < 128) { // Common case, ASCII
- *q++ = _foldCase[c];
- } else {
- const char *repl = ReplacementString(c);
- if (repl != NULL) {
- size_t repllen = strlen(repl);
- if (repllen > 0)
- q = Fast_UnicodeUtil::ucs4copy(q,repl);
+ // Start saving word.
+ q = dstbuf;
+ eq = dstbufend - 3; // Make room for UCS4 char replacement string and NUL
+ // Doesn't check for space for the first char, assumes that
+ // word buffer is at least 13 characters
+ if (c < 128) { // Common case, ASCII
+ *q++ = _foldCase[c];
} else {
- c = ToFold(c);
- *q++ = c;
+ const char *repl = ReplacementString(c);
+ if (repl != NULL) {
+ size_t repllen = strlen(repl);
+ if (repllen > 0)
+ q = Fast_UnicodeUtil::ucs4copy(q,repl);
+ } else {
+ c = ToFold(c);
+ *q++ = c;
+ }
}
- }
- // Special case for interlinear annotation
- if (c == 0xFFF9) { // ANCHOR
- // Collect up to and including terminator
- for(;;) {
- if (p >= ep) {
- c = 0;
- break;
- }
- if (*p < 128) { // Note, no exit on plain ASCII
- c = *p++;
- *q++ = c;
- if (q >= eq) { // Junk rest of annotation block
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- } else {
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (c == 0xFFFB) {
- break; // out of junking loop
- }
- }
- }
- break; // out of annotation block processing
- }
- } else {
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- *q++ = c;
- if (c == 0xFFFB) { // TERMINATOR => Exit condition
- break;
- }
- if (q >= eq) { // Junk rest of word
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- } else {
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (c == 0xFFFB) {
- break;
- }
- }
- }
- break;
- }
- }
- }
- } else
+ // Special case for interlinear annotation
+ if (c == 0xFFF9) { // ANCHOR
+ // Collect up to and including terminator
+ for(;;) {
+ if (p >= ep) {
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Note, no exit on plain ASCII
+ c = *p++;
+ *q++ = c;
+ if (q >= eq) { // Junk rest of annotation block
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ } else {
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (c == 0xFFFB) {
+ break; // out of junking loop
+ }
+ }
+ }
+ break; // out of annotation block processing
+ }
+ } else {
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ *q++ = c;
+ if (c == 0xFFFB) { // TERMINATOR => Exit condition
+ break;
+ }
+ if (q >= eq) { // Junk rest of word
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ } else {
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (c == 0xFFFB) {
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ } else
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- if (!_isWord[c])
- {
- p--;
- break;
- }
- *q++ = _foldCase[c];
- if (q >= eq) { // Junk rest of word
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- if (!_isWord[c])
- {
- p--;
- break;
- }
- } else {
- const unsigned char* prev_p = p;
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (!Fast_UnicodeUtil::IsWordChar(c))
- {
- p = prev_p;
- break;
- }
- }
- }
- break;
- }
- } else {
- const unsigned char* prev_p = p;
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (!Fast_UnicodeUtil::IsWordChar(c))
- {
- p = prev_p;
- break;
- }
- const char *repl = ReplacementString(c);
- if (repl != NULL) {
- size_t repllen = strlen(repl);
- if (repllen > 0)
- q = Fast_UnicodeUtil::ucs4copy(q,repl);
- } else {
- c = ToFold(c);
- *q++ = c;
- }
- if (q >= eq) { // Junk rest of word
- for (;;) {
- if (p >= ep) { // End of input buffer
- c = 0;
- break;
- }
- if (*p < 128) { // Common case, ASCII
- c = *p++;
- if (!_isWord[c])
- {
- p--;
- break;
- }
- } else {
- const unsigned char* xprev_p = p;
- c = Fast_UnicodeUtil::GetUTF8Char(p);
- if (!Fast_UnicodeUtil::IsWordChar(c))
- {
- p = xprev_p;
- break;
- }
- }
- }
- break;
- }
- }
- }
- *q = 0;
- tokenlen = q - dstbuf;
- return reinterpret_cast<const char *>(p);
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ if (!_isWord[c])
+ {
+ p--;
+ break;
+ }
+ *q++ = _foldCase[c];
+ if (q >= eq) { // Junk rest of word
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ if (!_isWord[c])
+ {
+ p--;
+ break;
+ }
+ } else {
+ const unsigned char* prev_p = p;
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (!Fast_UnicodeUtil::IsWordChar(c))
+ {
+ p = prev_p;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ } else {
+ const unsigned char* prev_p = p;
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (!Fast_UnicodeUtil::IsWordChar(c))
+ {
+ p = prev_p;
+ break;
+ }
+ const char *repl = ReplacementString(c);
+ if (repl != NULL) {
+ size_t repllen = strlen(repl);
+ if (repllen > 0)
+ q = Fast_UnicodeUtil::ucs4copy(q,repl);
+ } else {
+ c = ToFold(c);
+ *q++ = c;
+ }
+ if (q >= eq) { // Junk rest of word
+ for (;;) {
+ if (p >= ep) { // End of input buffer
+ c = 0;
+ break;
+ }
+ if (*p < 128) { // Common case, ASCII
+ c = *p++;
+ if (!_isWord[c])
+ {
+ p--;
+ break;
+ }
+ } else {
+ const unsigned char* xprev_p = p;
+ c = Fast_UnicodeUtil::GetUTF8Char(p);
+ if (!Fast_UnicodeUtil::IsWordChar(c))
+ {
+ p = xprev_p;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ *q = 0;
+ tokenlen = q - dstbuf;
+ return reinterpret_cast<const char *>(p);
}
diff --git a/fastlib/src/vespa/fastlib/text/normwordfolder.h b/fastlib/src/vespa/fastlib/text/normwordfolder.h
index d368b6177db..65163c851af 100644
--- a/fastlib/src/vespa/fastlib/text/normwordfolder.h
+++ b/fastlib/src/vespa/fastlib/text/normwordfolder.h
@@ -12,161 +12,161 @@
class Fast_NormalizeWordFolder : public Fast_WordFolder
{
private:
- static bool _isInitialized;
-
- /** Features */
- static bool _doAccentRemoval;
- static bool _doSmallToNormalKana;
- static bool _doKatakanaToHiragana;
- static bool _doKanaAccentCollapsing;
- static bool _doFullwidthToBasicLatin;
- static bool _doSharpSSubstitution;
- static bool _doLigatureSubstitution;
- static bool _doMulticharExpansion;
-
- /**
- * Freeze the config, either from call to Setup, environment
- * or defaults.
- */
- static void Initialize();
+ static bool _isInitialized;
+
+ /** Features */
+ static bool _doAccentRemoval;
+ static bool _doSmallToNormalKana;
+ static bool _doKatakanaToHiragana;
+ static bool _doKanaAccentCollapsing;
+ static bool _doFullwidthToBasicLatin;
+ static bool _doSharpSSubstitution;
+ static bool _doLigatureSubstitution;
+ static bool _doMulticharExpansion;
+
+ /**
+ * Freeze the config, either from call to Setup, environment
+ * or defaults.
+ */
+ static void Initialize();
public:
- enum {
- DO_ACCENT_REMOVAL = 0x1 << 0,
- DO_SMALL_TO_NORMAL_KANA = 0x1 << 1,
- DO_KATAKANA_TO_HIRAGANA = 0x1 << 2,
- DO_KANA_ACCENT_COLLAPSING = 0x1 << 3, // Code not implemented
- DO_FULLWIDTH_TO_BASIC_LATIN = 0x1 << 4, // Code not implemented
- DO_SHARP_S_SUBSTITUTION = 0x1 << 5,
- DO_LIGATURE_SUBSTITUTION = 0x1 << 6,
- DO_MULTICHAR_EXPANSION = 0x1 << 7
- };
- /**
- * Setup behaviour prior to constructing an object.
- * Not needed if default behaviour is wanted. The default is
- * DO_ACCENT_REMOVAL + DO_SHARP_S_SUBSTITUTION + DO_LIGATURE_SUBSTITUTION.
- *
- * @param flags The flags should be taken from the DO_ constants,
- * added together.
- */
- static void Setup(uint32_t flags);
+ enum {
+ DO_ACCENT_REMOVAL = 0x1 << 0,
+ DO_SMALL_TO_NORMAL_KANA = 0x1 << 1,
+ DO_KATAKANA_TO_HIRAGANA = 0x1 << 2,
+ DO_KANA_ACCENT_COLLAPSING = 0x1 << 3, // Code not implemented
+ DO_FULLWIDTH_TO_BASIC_LATIN = 0x1 << 4, // Code not implemented
+ DO_SHARP_S_SUBSTITUTION = 0x1 << 5,
+ DO_LIGATURE_SUBSTITUTION = 0x1 << 6,
+ DO_MULTICHAR_EXPANSION = 0x1 << 7
+ };
+ /**
+ * Setup behaviour prior to constructing an object.
+ * Not needed if default behaviour is wanted. The default is
+ * DO_ACCENT_REMOVAL + DO_SHARP_S_SUBSTITUTION + DO_LIGATURE_SUBSTITUTION.
+ *
+ * @param flags The flags should be taken from the DO_ constants,
+ * added together.
+ */
+ static void Setup(uint32_t flags);
public:
- /** character tables */
- static bool _isWord[128];
- static ucs4_t _foldCase[767]; // Up to Spacing Modifiers, inclusize (0x02FF)
- static ucs4_t _foldCaseHighAscii[256]; // Latin Extended Additional (0x1E00 - 0x1F00) (incl. vietnamese)
+ /** character tables */
+ static bool _isWord[128];
+ static ucs4_t _foldCase[767]; // Up to Spacing Modifiers, inclusize (0x02FF)
+ static ucs4_t _foldCaseHighAscii[256]; // Latin Extended Additional (0x1E00 - 0x1F00) (incl. vietnamese)
private:
- static ucs4_t _keepCase[767];
- static ucs4_t _keepCaseHighAscii[256];
- /** Map the values from range 0x3040 (0) - 0x30FF (191). */
- static ucs4_t _kanaMap[192];
- static ucs4_t _halfwidth_fullwidthMap[240];
+ static ucs4_t _keepCase[767];
+ static ucs4_t _keepCaseHighAscii[256];
+ /** Map the values from range 0x3040 (0) - 0x30FF (191). */
+ static ucs4_t _kanaMap[192];
+ static ucs4_t _halfwidth_fullwidthMap[240];
public:
- static ucs4_t ToFold(ucs4_t testchar) {
- if (testchar < 767)
- return _foldCase[testchar];
- else if (testchar >= 0x1E00 && testchar < 0x1F00)
- return _foldCaseHighAscii[testchar - 0x1E00];
- else
- if (testchar >= 0x3040 && testchar < 0x3100)
- return _kanaMap[testchar - 0x3040];
+ static ucs4_t ToFold(ucs4_t testchar) {
+ if (testchar < 767)
+ return _foldCase[testchar];
+ else if (testchar >= 0x1E00 && testchar < 0x1F00)
+ return _foldCaseHighAscii[testchar - 0x1E00];
else
- if (testchar >= 0xFF00 && testchar < 0xFFF0)
- return _halfwidth_fullwidthMap[testchar - 0xFF00];
- else
- return Fast_UnicodeUtil::ToLower(testchar);
-}
+ if (testchar >= 0x3040 && testchar < 0x3100)
+ return _kanaMap[testchar - 0x3040];
+ else
+ if (testchar >= 0xFF00 && testchar < 0xFFF0)
+ return _halfwidth_fullwidthMap[testchar - 0xFF00];
+ else
+ return Fast_UnicodeUtil::ToLower(testchar);
+ }
public:
- static const char *ReplacementString(ucs4_t testchar) {
- if (testchar < 0xc4 || testchar > 0x1f3) {
- return nullptr;
- }
- if (testchar == 0xdf && _doSharpSSubstitution) {
- return "ss";
+ static const char *ReplacementString(ucs4_t testchar) {
+ if (testchar < 0xc4 || testchar > 0x1f3) {
+ return nullptr;
+ }
+ if (testchar == 0xdf && _doSharpSSubstitution) {
+ return "ss";
+ }
+ if (_doLigatureSubstitution) {
+ switch (testchar) {
+ case 0x132:
+ case 0x133:
+ return "ij";
+ case 0x13f:
+ case 0x140:
+ return "l"; // Latin L with middlepoint
+ case 0x149:
+ return "n"; // Latin small n preceded by apostrophe
+ case 0x17f:
+ return "s"; // Latin small letter long s
+ case 0x1c7:
+ case 0x1c8:
+ case 0x1c9:
+ return "lj";
+ case 0x1ca:
+ case 0x1cb:
+ case 0x1cc:
+ return "nj";
+ case 0x1f1:
+ case 0x1f2:
+ case 0x1f3:
+ return "dz";
+ }
+ }
+ if (_doMulticharExpansion) {
+ switch(testchar) {
+ case 0xc4:
+ case 0xe4: // A/a with diaeresis
+ return "ae";
+
+ case 0xc5:
+ case 0xe5: // A/a with ring
+ return "aa";
+
+ case 0xc6:
+ case 0xe6: // Letter/ligature AE/ae
+ return "ae";
+
+ case 0xd6:
+ case 0xf6: // O/o with diaeresis
+ return "oe";
+
+ case 0xd8:
+ case 0xf8: // O/o with stroke
+ return "oe";
+
+ case 0xdc:
+ case 0xfc: // U/u with diaeresis
+ return "ue";
+
+ case 0xd0:
+ case 0xf0: // norse "eth"
+ return "d";
+
+ case 0xde:
+ case 0xfe: // norse "thorn"
+ return "th";
+
+ default:
+ return nullptr;
+
+ }
+
+ }
+ return nullptr;
}
- if (_doLigatureSubstitution) {
- switch (testchar) {
- case 0x132:
- case 0x133:
- return "ij";
- case 0x13f:
- case 0x140:
- return "l"; // Latin L with middlepoint
- case 0x149:
- return "n"; // Latin small n preceded by apostrophe
- case 0x17f:
- return "s"; // Latin small letter long s
- case 0x1c7:
- case 0x1c8:
- case 0x1c9:
- return "lj";
- case 0x1ca:
- case 0x1cb:
- case 0x1cc:
- return "nj";
- case 0x1f1:
- case 0x1f2:
- case 0x1f3:
- return "dz";
- }
+private:
+ /**
+ * Check if the given char is a word character or used
+ * for interlinear annotation.
+ * @param c The character to check.
+ * @return true if c is a word character, or interlinear annotation syntax characters.
+ */
+ static bool IsWordCharOrIA(ucs4_t c) {
+ return Fast_UnicodeUtil::IsWordChar(c)
+ || c == 0xFFF9 || c == 0xFFFA || c == 0xFFFB;
}
- if (_doMulticharExpansion) {
- switch(testchar) {
- case 0xc4:
- case 0xe4: // A/a with diaeresis
- return "ae";
-
- case 0xc5:
- case 0xe5: // A/a with ring
- return "aa";
-
- case 0xc6:
- case 0xe6: // Letter/ligature AE/ae
- return "ae";
-
- case 0xd6:
- case 0xf6: // O/o with diaeresis
- return "oe";
-
- case 0xd8:
- case 0xf8: // O/o with stroke
- return "oe";
-
- case 0xdc:
- case 0xfc: // U/u with diaeresis
- return "ue";
- case 0xd0:
- case 0xf0: // norse "eth"
- return "d";
-
- case 0xde:
- case 0xfe: // norse "thorn"
- return "th";
-
- default:
- return nullptr;
-
- }
-
- }
- return nullptr;
- }
- private:
- /**
- * Check if the given char is a word character or used
- * for interlinear annotation.
- * @param c The character to check.
- * @return true if c is a word character, or interlinear annotation syntax characters.
- */
- static bool IsWordCharOrIA(ucs4_t c) {
- return Fast_UnicodeUtil::IsWordChar(c)
- || c == 0xFFF9 || c == 0xFFFA || c == 0xFFFB;
- }
-
- public:
+public:
Fast_NormalizeWordFolder();
virtual ~Fast_NormalizeWordFolder();
virtual size_t FoldedSizeAsUTF8(const char *word) const;
@@ -178,4 +178,3 @@ public:
const char* UCS4Tokenize(const char *buf, const char *bufend, ucs4_t *dstbuf,
ucs4_t *dstbufend, const char*& origstart, size_t& tokenlen) const override;
};
-
diff --git a/fastlib/src/vespa/fastlib/text/tests/characterclasstest.cpp b/fastlib/src/vespa/fastlib/text/tests/characterclasstest.cpp
index 5772f66a087..fed5ab14e5f 100644
--- a/fastlib/src/vespa/fastlib/text/tests/characterclasstest.cpp
+++ b/fastlib/src/vespa/fastlib/text/tests/characterclasstest.cpp
@@ -4,11 +4,10 @@
int character_class_test_app::Main()
{
- character_class_test t("Test for the character_class");
- t.SetStream(&std::cout);
- t.Run();
- return t.Report();
+ character_class_test t("Test for the character_class");
+ t.SetStream(&std::cout);
+ t.Run();
+ return t.Report();
}
FASTOS_MAIN(character_class_test_app)
-
diff --git a/fastlib/src/vespa/fastlib/text/tests/latintokenizertest.cpp b/fastlib/src/vespa/fastlib/text/tests/latintokenizertest.cpp
index 848ef82db88..6b812ccd74d 100644
--- a/fastlib/src/vespa/fastlib/text/tests/latintokenizertest.cpp
+++ b/fastlib/src/vespa/fastlib/text/tests/latintokenizertest.cpp
@@ -4,10 +4,10 @@
int LatinTokenizerTestApp::Main()
{
- LatinTokenizerTest lta;
- lta.SetStream(&std::cout);
- lta.Run();
- return lta.Report();
+ LatinTokenizerTest lta;
+ lta.SetStream(&std::cout);
+ lta.Run();
+ return lta.Report();
}
FASTOS_MAIN(LatinTokenizerTestApp);
diff --git a/fastlib/src/vespa/fastlib/text/tests/latintokenizertest.h b/fastlib/src/vespa/fastlib/text/tests/latintokenizertest.h
index 082ab62a75e..88275199bca 100644
--- a/fastlib/src/vespa/fastlib/text/tests/latintokenizertest.h
+++ b/fastlib/src/vespa/fastlib/text/tests/latintokenizertest.h
@@ -8,35 +8,35 @@
class Mapel_Pucntuation {
private:
- /** Member variables. */
- static bool *_lookup;
+ /** Member variables. */
+ static bool *_lookup;
public:
- /** Constructors */
- Mapel_Pucntuation();
+ /** Constructors */
+ Mapel_Pucntuation();
- /** Punctuation predicate. */
- bool operator()(char c) const {
- return _lookup[static_cast<unsigned char>(c)];
- }
+ /** Punctuation predicate. */
+ bool operator()(char c) const {
+ return _lookup[static_cast<unsigned char>(c)];
+ }
};
class Maple_Space {
private:
- /** Member variables. */
- static bool *_lookup;
+ /** Member variables. */
+ static bool *_lookup;
public:
- /** Constructors */
- Maple_Space();
+ /** Constructors */
+ Maple_Space();
- /** Space predicate. */
- bool operator()(char c) const {
- return _lookup[static_cast<unsigned char>(c)];
- }
+ /** Space predicate. */
+ bool operator()(char c) const {
+ return _lookup[static_cast<unsigned char>(c)];
+ }
};
@@ -45,101 +45,101 @@ bool *Mapel_Pucntuation::_lookup = NULL;
Mapel_Pucntuation::Mapel_Pucntuation() {
- // Initialize lookup table.
- if (_lookup == NULL) {
+ // Initialize lookup table.
+ if (_lookup == NULL) {
+
+ _lookup = new bool[256];
+
+ for (unsigned int i = 0; i < 256; ++i) {
+ _lookup[i] = false;
+ }
+
+ _lookup[static_cast<unsigned char>('.')] = true;
+ _lookup[static_cast<unsigned char>(',')] = true;
+ _lookup[static_cast<unsigned char>(':')] = true;
+ _lookup[static_cast<unsigned char>(';')] = true;
+ _lookup[static_cast<unsigned char>('|')] = true;
+ _lookup[static_cast<unsigned char>('!')] = true;
+ _lookup[static_cast<unsigned char>('?')] = true;
+ _lookup[static_cast<unsigned char>('@')] = true;
+ _lookup[static_cast<unsigned char>('/')] = true;
+ _lookup[static_cast<unsigned char>('(')] = true;
+ _lookup[static_cast<unsigned char>(')')] = true;
+ _lookup[static_cast<unsigned char>('[')] = true;
+ _lookup[static_cast<unsigned char>(']')] = true;
+ _lookup[static_cast<unsigned char>('{')] = true;
+ _lookup[static_cast<unsigned char>('}')] = true;
+ _lookup[static_cast<unsigned char>('<')] = true;
+ _lookup[static_cast<unsigned char>('>')] = true;
+ _lookup[static_cast<unsigned char>('*')] = true;
+ _lookup[static_cast<unsigned char>('=')] = true;
+ _lookup[static_cast<unsigned char>('%')] = true;
+ _lookup[static_cast<unsigned char>('\\')] = true;
- _lookup = new bool[256];
-
- for (unsigned int i = 0; i < 256; ++i) {
- _lookup[i] = false;
}
- _lookup[static_cast<unsigned char>('.')] = true;
- _lookup[static_cast<unsigned char>(',')] = true;
- _lookup[static_cast<unsigned char>(':')] = true;
- _lookup[static_cast<unsigned char>(';')] = true;
- _lookup[static_cast<unsigned char>('|')] = true;
- _lookup[static_cast<unsigned char>('!')] = true;
- _lookup[static_cast<unsigned char>('?')] = true;
- _lookup[static_cast<unsigned char>('@')] = true;
- _lookup[static_cast<unsigned char>('/')] = true;
- _lookup[static_cast<unsigned char>('(')] = true;
- _lookup[static_cast<unsigned char>(')')] = true;
- _lookup[static_cast<unsigned char>('[')] = true;
- _lookup[static_cast<unsigned char>(']')] = true;
- _lookup[static_cast<unsigned char>('{')] = true;
- _lookup[static_cast<unsigned char>('}')] = true;
- _lookup[static_cast<unsigned char>('<')] = true;
- _lookup[static_cast<unsigned char>('>')] = true;
- _lookup[static_cast<unsigned char>('*')] = true;
- _lookup[static_cast<unsigned char>('=')] = true;
- _lookup[static_cast<unsigned char>('%')] = true;
- _lookup[static_cast<unsigned char>('\\')] = true;
-
- }
-
}
Maple_Space::Maple_Space() {
- // Initialize lookup table.
- if (_lookup == NULL) {
+ // Initialize lookup table.
+ if (_lookup == NULL) {
- _lookup = new bool[256];
+ _lookup = new bool[256];
- for (unsigned int i = 0; i < 256; ++i) {
- _lookup[i] = false;
- }
+ for (unsigned int i = 0; i < 256; ++i) {
+ _lookup[i] = false;
+ }
- _lookup[static_cast<unsigned char>(' ')] = true;
- _lookup[static_cast<unsigned char>('\n')] = true;
- _lookup[static_cast<unsigned char>('\t')] = true;
- _lookup[static_cast<unsigned char>('\r')] = true;
- _lookup[static_cast<unsigned char>('"')] = true;
- _lookup[static_cast<unsigned char>('\'')] = true;
- _lookup[static_cast<unsigned char>('`')] = true;
- _lookup[static_cast<unsigned char>('_')] = true;
+ _lookup[static_cast<unsigned char>(' ')] = true;
+ _lookup[static_cast<unsigned char>('\n')] = true;
+ _lookup[static_cast<unsigned char>('\t')] = true;
+ _lookup[static_cast<unsigned char>('\r')] = true;
+ _lookup[static_cast<unsigned char>('"')] = true;
+ _lookup[static_cast<unsigned char>('\'')] = true;
+ _lookup[static_cast<unsigned char>('`')] = true;
+ _lookup[static_cast<unsigned char>('_')] = true;
- }
+ }
}
class LatinTokenizerTest : public Test
{
private:
- void TestSimple();
- void TestSimpleLength();
- void TestEnding();
- void TestEndingLength();
- void TestNull();
- void TestNullLength();
- void TestEmpty();
- void TestEmptyLength();
- void TestMapelURL();
-
- template <typename IsSeparator, typename IsPunctuation>
- void TestWord(Fast_LatinTokenizer<IsSeparator,IsPunctuation>* lt,
- const char* correct,
- bool punct = false)
- {
- typename Fast_LatinTokenizer<IsSeparator,IsPunctuation>::Fast_Token token;
- _test(lt->MoreTokens());
-
- token = lt->GetNextToken();
- char temp = *token.second;
- *token.second = '\0';
- vespalib::string word = vespalib::make_string("%s", token.first);
- *token.second = temp;
-
- PushDesc(vespalib::make_string("%s%s == %s", "word: ", word.c_str(), correct).c_str());
-
- _test(word == correct);
-
- _test(token._punctuation == punct);
+ void TestSimple();
+ void TestSimpleLength();
+ void TestEnding();
+ void TestEndingLength();
+ void TestNull();
+ void TestNullLength();
+ void TestEmpty();
+ void TestEmptyLength();
+ void TestMapelURL();
+
+ template <typename IsSeparator, typename IsPunctuation>
+ void TestWord(Fast_LatinTokenizer<IsSeparator,IsPunctuation>* lt,
+ const char* correct,
+ bool punct = false)
+ {
+ typename Fast_LatinTokenizer<IsSeparator,IsPunctuation>::Fast_Token token;
+ _test(lt->MoreTokens());
- PopDesc();
- }
+ token = lt->GetNextToken();
+ char temp = *token.second;
+ *token.second = '\0';
+ vespalib::string word = vespalib::make_string("%s", token.first);
+ *token.second = temp;
+
+ PushDesc(vespalib::make_string("%s%s == %s", "word: ", word.c_str(), correct).c_str());
- void TestTypeparamObservers();
+ _test(word == correct);
+
+ _test(token._punctuation == punct);
+
+ PopDesc();
+ }
+
+ void TestTypeparamObservers();
public:
LatinTokenizerTest();
@@ -162,292 +162,292 @@ LatinTokenizerTest::~LatinTokenizerTest()
void LatinTokenizerTest::TestSimple()
{
- PushDesc("Simple");
-
- Fast_SimpleLatinTokenizer lt;
- std::string s("This is. my . test String.");
- lt.SetNewText(const_cast<char*>(s.c_str()));
-
- PushDesc("This");
- TestWord(&lt, "This");
- PopDesc();
- PushDesc("is");
- TestWord(&lt, "is");
- PopDesc();
- PushDesc(".");
- TestWord(&lt, ".", true);
- PopDesc();
- PushDesc("my");
- TestWord(&lt, "my");
- PopDesc();
- PushDesc(".");
- TestWord(&lt, ".", true);
- PopDesc();
- PushDesc("test");
- TestWord(&lt, "test");
- PopDesc();
- PushDesc("String");
- TestWord(&lt, "String");
- PopDesc();
- PushDesc(".");
- TestWord(&lt, ".", true);
- PopDesc();
-
- _test(!lt.MoreTokens());
-
- PopDesc();
+ PushDesc("Simple");
+
+ Fast_SimpleLatinTokenizer lt;
+ std::string s("This is. my . test String.");
+ lt.SetNewText(const_cast<char*>(s.c_str()));
+
+ PushDesc("This");
+ TestWord(&lt, "This");
+ PopDesc();
+ PushDesc("is");
+ TestWord(&lt, "is");
+ PopDesc();
+ PushDesc(".");
+ TestWord(&lt, ".", true);
+ PopDesc();
+ PushDesc("my");
+ TestWord(&lt, "my");
+ PopDesc();
+ PushDesc(".");
+ TestWord(&lt, ".", true);
+ PopDesc();
+ PushDesc("test");
+ TestWord(&lt, "test");
+ PopDesc();
+ PushDesc("String");
+ TestWord(&lt, "String");
+ PopDesc();
+ PushDesc(".");
+ TestWord(&lt, ".", true);
+ PopDesc();
+
+ _test(!lt.MoreTokens());
+
+ PopDesc();
}
void LatinTokenizerTest::TestSimpleLength()
{
- PushDesc("Simple");
-
- Fast_SimpleLatinTokenizer lt;
- std::string s("This is. my . test String.");
- lt.SetNewText(const_cast<char*>(s.c_str()),
- s.length());
-
- PushDesc("This");
- TestWord(&lt, "This");
- PopDesc();
- PushDesc("is");
- TestWord(&lt, "is");
- PopDesc();
- PushDesc(".");
- TestWord(&lt, ".", true);
- PopDesc();
- PushDesc("my");
- TestWord(&lt, "my");
- PopDesc();
- PushDesc(".");
- TestWord(&lt, ".", true);
- PopDesc();
- PushDesc("test");
- TestWord(&lt, "test");
- PopDesc();
- PushDesc("String");
- TestWord(&lt, "String");
- PopDesc();
- PushDesc(".");
- TestWord(&lt, ".", true);
- PopDesc();
-
- _test(!lt.MoreTokens());
-
- PopDesc();
+ PushDesc("Simple");
+
+ Fast_SimpleLatinTokenizer lt;
+ std::string s("This is. my . test String.");
+ lt.SetNewText(const_cast<char*>(s.c_str()),
+ s.length());
+
+ PushDesc("This");
+ TestWord(&lt, "This");
+ PopDesc();
+ PushDesc("is");
+ TestWord(&lt, "is");
+ PopDesc();
+ PushDesc(".");
+ TestWord(&lt, ".", true);
+ PopDesc();
+ PushDesc("my");
+ TestWord(&lt, "my");
+ PopDesc();
+ PushDesc(".");
+ TestWord(&lt, ".", true);
+ PopDesc();
+ PushDesc("test");
+ TestWord(&lt, "test");
+ PopDesc();
+ PushDesc("String");
+ TestWord(&lt, "String");
+ PopDesc();
+ PushDesc(".");
+ TestWord(&lt, ".", true);
+ PopDesc();
+
+ _test(!lt.MoreTokens());
+
+ PopDesc();
}
void LatinTokenizerTest::TestEnding()
{
- PushDesc("Ending\n");
+ PushDesc("Ending\n");
- std::string text("This is my test String ");
- Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(const_cast<char*>(text.c_str()));
+ std::string text("This is my test String ");
+ Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(const_cast<char*>(text.c_str()));
- TestWord(lt, "This");
- TestWord(lt, "is");
- TestWord(lt, "my");
- TestWord(lt, "test");
- TestWord(lt, "String");
+ TestWord(lt, "This");
+ TestWord(lt, "is");
+ TestWord(lt, "my");
+ TestWord(lt, "test");
+ TestWord(lt, "String");
- _test(!lt->MoreTokens());
+ _test(!lt->MoreTokens());
- _test(text == lt->GetOriginalText());
+ _test(text == lt->GetOriginalText());
- delete lt;
+ delete lt;
- PopDesc();
+ PopDesc();
}
void LatinTokenizerTest::TestEndingLength()
{
- PushDesc("Ending\n");
+ PushDesc("Ending\n");
- std::string text("This is my test String ");
- Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(const_cast<char*>(text.c_str()),
- text.length());
+ std::string text("This is my test String ");
+ Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(const_cast<char*>(text.c_str()),
+ text.length());
- TestWord(lt, "This");
- TestWord(lt, "is");
- TestWord(lt, "my");
- TestWord(lt, "test");
- TestWord(lt, "String");
+ TestWord(lt, "This");
+ TestWord(lt, "is");
+ TestWord(lt, "my");
+ TestWord(lt, "test");
+ TestWord(lt, "String");
- _test(!lt->MoreTokens());
+ _test(!lt->MoreTokens());
- _test(text == std::string(lt->GetOriginalText()));
+ _test(text == std::string(lt->GetOriginalText()));
- delete lt;
+ delete lt;
- PopDesc();
+ PopDesc();
}
void LatinTokenizerTest::TestNull()
{
- PushDesc("Null\n");
+ PushDesc("Null\n");
- Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(NULL);
+ Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(NULL);
- _test(!lt->MoreTokens());
+ _test(!lt->MoreTokens());
- _test(lt->GetOriginalText() == NULL);
+ _test(lt->GetOriginalText() == NULL);
- delete lt;
+ delete lt;
- PopDesc();
+ PopDesc();
}
void LatinTokenizerTest::TestNullLength()
{
- PushDesc("Null\n");
+ PushDesc("Null\n");
- Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(NULL, 0);
+ Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(NULL, 0);
- _test(!lt->MoreTokens());
+ _test(!lt->MoreTokens());
- _test(lt->GetOriginalText() == NULL);
+ _test(lt->GetOriginalText() == NULL);
- delete lt;
+ delete lt;
- PopDesc();
+ PopDesc();
}
void LatinTokenizerTest::TestEmpty()
{
- PushDesc("Empty\n");
+ PushDesc("Empty\n");
- std::string text(" ");
- Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(const_cast<char*>(text.c_str()));
+ std::string text(" ");
+ Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(const_cast<char*>(text.c_str()));
- _test(!lt->MoreTokens());
+ _test(!lt->MoreTokens());
- delete lt;
+ delete lt;
- PopDesc();
+ PopDesc();
}
void LatinTokenizerTest::TestEmptyLength()
{
- PushDesc("Empty\n");
+ PushDesc("Empty\n");
- std::string text(" ");
- Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(const_cast<char*>(text.c_str()),
- text.length());
+ std::string text(" ");
+ Fast_SimpleLatinTokenizer* lt = new Fast_SimpleLatinTokenizer(const_cast<char*>(text.c_str()),
+ text.length());
- _test(!lt->MoreTokens());
+ _test(!lt->MoreTokens());
- delete lt;
+ delete lt;
- PopDesc();
+ PopDesc();
}
- class TPS
- {
- private:
+class TPS
+{
+private:
TPS(const TPS &);
TPS& operator=(const TPS &);
- public:
+public:
TPS() : _myfunc(NULL) {}
void Init(int (*myfunc)(int c))
{
- _myfunc = myfunc;
+ _myfunc = myfunc;
}
bool operator()(char c)
{
// LatinTokenizerTest::_test(_myfunc);
- return (_myfunc(c) != 0);
+ return (_myfunc(c) != 0);
}
- private:
+private:
int (*_myfunc)(int c);
- };
+};
void LatinTokenizerTest::TestTypeparamObservers()
{
- typedef Fast_LatinTokenizer<TPS,TPS> MyTokenizer;
+ typedef Fast_LatinTokenizer<TPS,TPS> MyTokenizer;
- PushDesc("TypeparamObservers\n");
- std::string text("4Some6text");
- MyTokenizer* tok = new MyTokenizer(const_cast<char*>(text.c_str()));
- tok->GetIsPunctuation().Init(ispunct);
- tok->GetIsSeparator().Init(isdigit);
+ PushDesc("TypeparamObservers\n");
+ std::string text("4Some6text");
+ MyTokenizer* tok = new MyTokenizer(const_cast<char*>(text.c_str()));
+ tok->GetIsPunctuation().Init(ispunct);
+ tok->GetIsSeparator().Init(isdigit);
- TestWord(tok,"Some");
- TestWord(tok,"text");
- _test(!tok->MoreTokens());
- PopDesc();
+ TestWord(tok,"Some");
+ TestWord(tok,"text");
+ _test(!tok->MoreTokens());
+ PopDesc();
- delete tok;
+ delete tok;
}
void LatinTokenizerTest::TestMapelURL()
{
- typedef Fast_LatinTokenizer<Maple_Space, Mapel_Pucntuation> MyTokenizer;
-
- PushDesc("MapelURL\n");
- std::string text("http://search.msn.co.uk/results.asp?q= cfg=SMCBROWSE rn=1825822 dp=1873075 v=166:");
- MyTokenizer* tok = new MyTokenizer(const_cast<char*>(text.c_str()));
-
- TestWord(tok,"http", false);
- TestWord(tok,":", true);
- TestWord(tok,"/", true);
- TestWord(tok,"/", true);
- TestWord(tok,"search", false);
- TestWord(tok,".", true);
- TestWord(tok,"msn", false);
- TestWord(tok,".", true);
- TestWord(tok,"co", false);
- TestWord(tok,".", true);
- TestWord(tok,"uk", false);
- TestWord(tok,"/", true);
- TestWord(tok,"results", false);
- TestWord(tok,".", true);
- TestWord(tok,"asp", false);
- TestWord(tok,"?", true);
- TestWord(tok,"q", false);
- TestWord(tok,"=", true);
- TestWord(tok,"cfg", false);
- TestWord(tok,"=", true);
- TestWord(tok,"SMCBROWSE", false);
- TestWord(tok,"rn", false);
- TestWord(tok,"=", true);
- TestWord(tok,"1825822", false);
- TestWord(tok,"dp", false);
- TestWord(tok,"=", true);
- TestWord(tok,"1873075", false);
- TestWord(tok,"v", false);
- TestWord(tok,"=", true);
- TestWord(tok,"166", false);
- TestWord(tok,":", true);
- _test(!tok->MoreTokens());
- PopDesc();
-
- delete tok;
+ typedef Fast_LatinTokenizer<Maple_Space, Mapel_Pucntuation> MyTokenizer;
+
+ PushDesc("MapelURL\n");
+ std::string text("http://search.msn.co.uk/results.asp?q= cfg=SMCBROWSE rn=1825822 dp=1873075 v=166:");
+ MyTokenizer* tok = new MyTokenizer(const_cast<char*>(text.c_str()));
+
+ TestWord(tok,"http", false);
+ TestWord(tok,":", true);
+ TestWord(tok,"/", true);
+ TestWord(tok,"/", true);
+ TestWord(tok,"search", false);
+ TestWord(tok,".", true);
+ TestWord(tok,"msn", false);
+ TestWord(tok,".", true);
+ TestWord(tok,"co", false);
+ TestWord(tok,".", true);
+ TestWord(tok,"uk", false);
+ TestWord(tok,"/", true);
+ TestWord(tok,"results", false);
+ TestWord(tok,".", true);
+ TestWord(tok,"asp", false);
+ TestWord(tok,"?", true);
+ TestWord(tok,"q", false);
+ TestWord(tok,"=", true);
+ TestWord(tok,"cfg", false);
+ TestWord(tok,"=", true);
+ TestWord(tok,"SMCBROWSE", false);
+ TestWord(tok,"rn", false);
+ TestWord(tok,"=", true);
+ TestWord(tok,"1825822", false);
+ TestWord(tok,"dp", false);
+ TestWord(tok,"=", true);
+ TestWord(tok,"1873075", false);
+ TestWord(tok,"v", false);
+ TestWord(tok,"=", true);
+ TestWord(tok,"166", false);
+ TestWord(tok,":", true);
+ _test(!tok->MoreTokens());
+ PopDesc();
+
+ delete tok;
}
void LatinTokenizerTest::Run()
{
- TestSimple();
- TestSimpleLength();
- TestEnding();
- TestEndingLength();
- TestNull();
- TestNullLength();
- TestEmpty();
- TestEmptyLength();
- TestTypeparamObservers();
- TestMapelURL();
+ TestSimple();
+ TestSimpleLength();
+ TestEnding();
+ TestEndingLength();
+ TestNull();
+ TestNullLength();
+ TestEmpty();
+ TestEmptyLength();
+ TestTypeparamObservers();
+ TestMapelURL();
}
@@ -460,5 +460,3 @@ class LatinTokenizerTestApp : public FastOS_Application
public:
int Main() override;
};
-
-
diff --git a/fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.cpp b/fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.cpp
index 98860410eef..6f66bd2ace6 100644
--- a/fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.cpp
+++ b/fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.cpp
@@ -3,11 +3,10 @@
int UnicodeUtilTestApp::Main()
{
- UnicodeUtilTest t;
- t.SetStream(&std::cout);
- t.Run();
- return t.Report();
+ UnicodeUtilTest t;
+ t.SetStream(&std::cout);
+ t.Run();
+ return t.Report();
}
FASTOS_MAIN(UnicodeUtilTestApp)
-
diff --git a/fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.h b/fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.h
index a18728c51a9..aaebe145958 100644
--- a/fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.h
+++ b/fastlib/src/vespa/fastlib/text/tests/unicodeutiltest.h
@@ -5,39 +5,39 @@
class UnicodeUtilTest : public Test
{
- bool GetUTF8Char_WrongInput() {
- const char *testdata = "ab\xF8";
+ bool GetUTF8Char_WrongInput() {
+ const char *testdata = "ab\xF8";
- ucs4_t the_char = 0;
+ ucs4_t the_char = 0;
- const unsigned char *src = reinterpret_cast<const unsigned char *>(testdata);
- while (*src != 0) {
- the_char = Fast_UnicodeUtil::GetUTF8Char(src);
- // fprintf(stderr, "GetUTF8Char_WrongInput(): the_char = U+%04X\n", the_char);
+ const unsigned char *src = reinterpret_cast<const unsigned char *>(testdata);
+ while (*src != 0) {
+ the_char = Fast_UnicodeUtil::GetUTF8Char(src);
+ // fprintf(stderr, "GetUTF8Char_WrongInput(): the_char = U+%04X\n", the_char);
+ }
+ return (the_char == Fast_UnicodeUtil::_BadUTF8Char);
+ }
+ bool IsTerminalPunctuationChar(char ch, bool b) {
+ if (Fast_UnicodeUtil::IsTerminalPunctuationChar(ch) != b) {
+ printf("expected char '%c' %s terminal punctuation char\n", ch, b ? "to be" : "not to be");
+ return false;
+ }
+ return true;
}
- return (the_char == Fast_UnicodeUtil::_BadUTF8Char);
- }
- bool IsTerminalPunctuationChar(char ch, bool b) {
- if (Fast_UnicodeUtil::IsTerminalPunctuationChar(ch) != b) {
- printf("expected char '%c' %s terminal punctuation char\n", ch, b ? "to be" : "not to be");
- return false;
- }
- return true;
- }
- bool IsTerminalPunctuationChar() {
- // test a small selection
- bool retval = true;
- retval &= IsTerminalPunctuationChar('!', true);
- retval &= IsTerminalPunctuationChar(',', true);
- retval &= IsTerminalPunctuationChar('.', true);
- retval &= IsTerminalPunctuationChar(':', true);
- retval &= IsTerminalPunctuationChar(';', true);
- retval &= IsTerminalPunctuationChar(' ', false);
- retval &= IsTerminalPunctuationChar('a', false);
- retval &= IsTerminalPunctuationChar('A', false);
- return retval;
- }
+ bool IsTerminalPunctuationChar() {
+ // test a small selection
+ bool retval = true;
+ retval &= IsTerminalPunctuationChar('!', true);
+ retval &= IsTerminalPunctuationChar(',', true);
+ retval &= IsTerminalPunctuationChar('.', true);
+ retval &= IsTerminalPunctuationChar(':', true);
+ retval &= IsTerminalPunctuationChar(';', true);
+ retval &= IsTerminalPunctuationChar(' ', false);
+ retval &= IsTerminalPunctuationChar('a', false);
+ retval &= IsTerminalPunctuationChar('A', false);
+ return retval;
+ }
public:
void Run() override {
diff --git a/fastlib/src/vespa/fastlib/text/tests/wordfolderstest.cpp b/fastlib/src/vespa/fastlib/text/tests/wordfolderstest.cpp
index d3db8a38f90..c4372f2e3ac 100644
--- a/fastlib/src/vespa/fastlib/text/tests/wordfolderstest.cpp
+++ b/fastlib/src/vespa/fastlib/text/tests/wordfolderstest.cpp
@@ -4,11 +4,10 @@
int WordFoldersTestApp::Main()
{
- WordFoldersTest t;
- t.SetStream(&std::cout);
- t.Run();
- return t.Report();
+ WordFoldersTest t;
+ t.SetStream(&std::cout);
+ t.Run();
+ return t.Report();
}
FASTOS_MAIN(WordFoldersTestApp)
-
diff --git a/fastlib/src/vespa/fastlib/text/tests/wordfolderstest.h b/fastlib/src/vespa/fastlib/text/tests/wordfolderstest.h
index c4eb6867dbd..3224426f51d 100644
--- a/fastlib/src/vespa/fastlib/text/tests/wordfolderstest.h
+++ b/fastlib/src/vespa/fastlib/text/tests/wordfolderstest.h
@@ -5,110 +5,110 @@
class WordFoldersTest : public Test
{
bool NormalizeWordFolderConstruction() {
- Fast_NormalizeWordFolder::Setup(
- Fast_NormalizeWordFolder::DO_ACCENT_REMOVAL
- | Fast_NormalizeWordFolder::DO_KATAKANA_TO_HIRAGANA
- | Fast_NormalizeWordFolder::DO_SMALL_TO_NORMAL_KANA
- | Fast_NormalizeWordFolder::DO_SHARP_S_SUBSTITUTION
- | Fast_NormalizeWordFolder::DO_LIGATURE_SUBSTITUTION
- | Fast_NormalizeWordFolder::DO_MULTICHAR_EXPANSION);
-
- Fast_NormalizeWordFolder *nwf = new Fast_NormalizeWordFolder();
- delete nwf;
-
- return true;
- }
-
- bool TokenizeAnnotatedBuffer() {
- Fast_NormalizeWordFolder *nwf = new Fast_NormalizeWordFolder();
- const char *testinput = "This is a "
- "\xEF\xBF\xB9" "café" "\xEF\xBF\xBA" "cafe" "\xEF\xBF\xBB"
- " superduperextrafeaturecoolandlongplainword fun "
- "\xEF\xBF\xB9" "www" "\xEF\xBF\xBA"
- "world wide web extra long annotation block" "\xEF\xBF\xBB"
- " test\nIt is cool.\n";
- const char *correct[] = {
- "this", "is", "a",
- "\xEF\xBF\xB9" "café" "\xEF\xBF\xBA" "cafe" "\xEF\xBF\xBB",
- "superduperextrafeaturecool", "fun",
- "\xEF\xBF\xB9" "www" "\xEF\xBF\xBA" "world wide web ex",
- "test", "it", "is", "cool" };
- const char *teststart = testinput;
- const char *testend = testinput + strlen(testinput);
- char destbuf[32];
- char *destbufend = destbuf + 32;
- const char *origstart = testinput;
- size_t tokenlen = 0;
-
- int tokencounter = 0;
- bool success = true;
- while (
- (teststart
- = nwf->Tokenize(teststart, testend,
- destbuf, destbufend,
- origstart, tokenlen)) < testend) {
- // printf("found: %s, correct: %s\n", destbuf, correct[tokencounter]);
- success &= strcmp(destbuf, correct[tokencounter++]) == 0;
+ Fast_NormalizeWordFolder::Setup(
+ Fast_NormalizeWordFolder::DO_ACCENT_REMOVAL
+ | Fast_NormalizeWordFolder::DO_KATAKANA_TO_HIRAGANA
+ | Fast_NormalizeWordFolder::DO_SMALL_TO_NORMAL_KANA
+ | Fast_NormalizeWordFolder::DO_SHARP_S_SUBSTITUTION
+ | Fast_NormalizeWordFolder::DO_LIGATURE_SUBSTITUTION
+ | Fast_NormalizeWordFolder::DO_MULTICHAR_EXPANSION);
+
+ Fast_NormalizeWordFolder *nwf = new Fast_NormalizeWordFolder();
+ delete nwf;
+
+ return true;
}
- delete nwf;
-
- return success;
- }
-
- bool TokenizeAnnotatedUCS4Buffer() {
- Fast_NormalizeWordFolder *nwf = new Fast_NormalizeWordFolder();
- const char *testinput = "This is a "
- "\xEF\xBF\xB9" "café" "\xEF\xBF\xBA" "cafe" "\xEF\xBF\xBB"
- " superduperextrafeaturecoolandlongplainword fun "
- "\xEF\xBF\xB9" "www" "\xEF\xBF\xBA"
- "world wide web extra long annotation block" "\xEF\xBF\xBB"
- " test\nIt is cool.\n";
- const char *correct[] = {
- "this", "is", "a",
- "\xEF\xBF\xB9" "café" "\xEF\xBF\xBA" "cafe" "\xEF\xBF\xBB",
- "superduperextrafeaturecooland", "fun",
- "\xEF\xBF\xB9" "www" "\xEF\xBF\xBA" "world wide web extra lon",
- "test", "it", "is", "cool" };
-
- const char *teststart = testinput;
- const char *testend = testinput + strlen(testinput);
- ucs4_t destbuf[32];
- ucs4_t *destbufend = destbuf + 32;
-
- const char *origstart = testinput;
- size_t tokenlen = 0;
-
- int tokencounter = 0;
- bool success = true;
- while (
- (teststart
- = nwf->UCS4Tokenize(teststart, testend,
- destbuf, destbufend,
- origstart, tokenlen)) < testend) {
- success &= Fast_UnicodeUtil::utf8cmp(correct[tokencounter++], destbuf) == 0;
+ bool TokenizeAnnotatedBuffer() {
+ Fast_NormalizeWordFolder *nwf = new Fast_NormalizeWordFolder();
+ const char *testinput = "This is a "
+ "\xEF\xBF\xB9" "café" "\xEF\xBF\xBA" "cafe" "\xEF\xBF\xBB"
+ " superduperextrafeaturecoolandlongplainword fun "
+ "\xEF\xBF\xB9" "www" "\xEF\xBF\xBA"
+ "world wide web extra long annotation block" "\xEF\xBF\xBB"
+ " test\nIt is cool.\n";
+ const char *correct[] = {
+ "this", "is", "a",
+ "\xEF\xBF\xB9" "café" "\xEF\xBF\xBA" "cafe" "\xEF\xBF\xBB",
+ "superduperextrafeaturecool", "fun",
+ "\xEF\xBF\xB9" "www" "\xEF\xBF\xBA" "world wide web ex",
+ "test", "it", "is", "cool" };
+ const char *teststart = testinput;
+ const char *testend = testinput + strlen(testinput);
+ char destbuf[32];
+ char *destbufend = destbuf + 32;
+ const char *origstart = testinput;
+ size_t tokenlen = 0;
+
+ int tokencounter = 0;
+ bool success = true;
+ while (
+ (teststart
+ = nwf->Tokenize(teststart, testend,
+ destbuf, destbufend,
+ origstart, tokenlen)) < testend) {
+ // printf("found: %s, correct: %s\n", destbuf, correct[tokencounter]);
+ success &= strcmp(destbuf, correct[tokencounter++]) == 0;
+ }
+
+ delete nwf;
+
+ return success;
}
- delete nwf;
-
- return success;
- }
-
- bool AccentRemovalTest() {
- auto freefunction = [] (char * ptr) { free(ptr); };
- auto input = std::unique_ptr<char, decltype(freefunction)>(Fast_UnicodeUtil::strdupLAT1("¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþpþ!"),
- freefunction);
- auto yelloutput = std::unique_ptr<char, decltype(freefunction)>(Fast_UnicodeUtil::strdupLAT1("¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿AAAAAEAAAECEEEEIIIIDNOOOOOE×OEUUUUEYTHssaaaaaeaaaeceeeeiiiidnoooooe÷oeuuuueythpth!"),
- freefunction);
- Fast_NormalizeWordFolder wordfolder;
- int len = wordfolder.FoldedSizeAsUTF8(input.get());
- auto fastliboutput = std::unique_ptr<char[]>(new char[len + 1]);
- wordfolder.FoldUTF8WordToUTF8Quick(fastliboutput.get(), input.get());
- fastliboutput[len] = '\0';
- printf("\n%s\n", yelloutput.get());
- printf("%s\n", fastliboutput.get());
- return strcasecmp(yelloutput.get(), fastliboutput.get()) == 0;
- }
+ bool TokenizeAnnotatedUCS4Buffer() {
+ Fast_NormalizeWordFolder *nwf = new Fast_NormalizeWordFolder();
+ const char *testinput = "This is a "
+ "\xEF\xBF\xB9" "café" "\xEF\xBF\xBA" "cafe" "\xEF\xBF\xBB"
+ " superduperextrafeaturecoolandlongplainword fun "
+ "\xEF\xBF\xB9" "www" "\xEF\xBF\xBA"
+ "world wide web extra long annotation block" "\xEF\xBF\xBB"
+ " test\nIt is cool.\n";
+ const char *correct[] = {
+ "this", "is", "a",
+ "\xEF\xBF\xB9" "café" "\xEF\xBF\xBA" "cafe" "\xEF\xBF\xBB",
+ "superduperextrafeaturecooland", "fun",
+ "\xEF\xBF\xB9" "www" "\xEF\xBF\xBA" "world wide web extra lon",
+ "test", "it", "is", "cool" };
+
+ const char *teststart = testinput;
+ const char *testend = testinput + strlen(testinput);
+ ucs4_t destbuf[32];
+ ucs4_t *destbufend = destbuf + 32;
+
+ const char *origstart = testinput;
+ size_t tokenlen = 0;
+
+ int tokencounter = 0;
+ bool success = true;
+ while (
+ (teststart
+ = nwf->UCS4Tokenize(teststart, testend,
+ destbuf, destbufend,
+ origstart, tokenlen)) < testend) {
+ success &= Fast_UnicodeUtil::utf8cmp(correct[tokencounter++], destbuf) == 0;
+ }
+
+ delete nwf;
+
+ return success;
+ }
+
+ bool AccentRemovalTest() {
+ auto freefunction = [] (char * ptr) { free(ptr); };
+ auto input = std::unique_ptr<char, decltype(freefunction)>(Fast_UnicodeUtil::strdupLAT1("¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþpþ!"),
+ freefunction);
+ auto yelloutput = std::unique_ptr<char, decltype(freefunction)>(Fast_UnicodeUtil::strdupLAT1("¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿AAAAAEAAAECEEEEIIIIDNOOOOOE×OEUUUUEYTHssaaaaaeaaaeceeeeiiiidnoooooe÷oeuuuueythpth!"),
+ freefunction);
+ Fast_NormalizeWordFolder wordfolder;
+ int len = wordfolder.FoldedSizeAsUTF8(input.get());
+ auto fastliboutput = std::unique_ptr<char[]>(new char[len + 1]);
+ wordfolder.FoldUTF8WordToUTF8Quick(fastliboutput.get(), input.get());
+ fastliboutput[len] = '\0';
+ printf("\n%s\n", yelloutput.get());
+ printf("%s\n", fastliboutput.get());
+ return strcasecmp(yelloutput.get(), fastliboutput.get()) == 0;
+ }
public:
diff --git a/fastlib/src/vespa/fastlib/text/unicodeutil-charprops.cpp b/fastlib/src/vespa/fastlib/text/unicodeutil-charprops.cpp
index 71686781c90..ce458d8fa28 100644
--- a/fastlib/src/vespa/fastlib/text/unicodeutil-charprops.cpp
+++ b/fastlib/src/vespa/fastlib/text/unicodeutil-charprops.cpp
@@ -11,1673 +11,1673 @@
*/
static unsigned char Fast_intCompCharProps[11264]={
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x20, 0x20, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x01, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02,
- 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x20,
- 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02,
- 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x20, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x00, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x00, 0x20, 0x00, 0x00, 0x10,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x20, 0x20, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x02,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
- 0x12, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x20, 0x20, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x20, 0x20, 0x20, 0x02, 0x02,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x10, 0x10, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x20, 0x20, 0x20, 0x02,
- 0x00, 0x00, 0x20, 0x00, 0x02, 0x02, 0x00, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
- 0x20, 0x20, 0x00, 0x10, 0x10, 0x10, 0x01, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x20, 0x20, 0x00, 0x00, 0x02, 0x06, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x06, 0x06, 0x06, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x12, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
- 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x20, 0x20, 0x00, 0x20, 0x20, 0x20, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x10,
- 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00,
- 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x20, 0x20, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x12, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x20, 0x20, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x01, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02,
+ 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x20,
+ 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02,
+ 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x20, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x00, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x00, 0x20, 0x00, 0x00, 0x10,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x20, 0x20, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x02,
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x20, 0x20, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x20, 0x20, 0x20, 0x02, 0x02,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x10, 0x10, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x20, 0x20, 0x20, 0x02,
+ 0x00, 0x00, 0x20, 0x00, 0x02, 0x02, 0x00, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
+ 0x20, 0x20, 0x00, 0x10, 0x10, 0x10, 0x01, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x20, 0x20, 0x00, 0x00, 0x02, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x06, 0x06, 0x06, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x12, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x20, 0x00, 0x20, 0x20, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x10,
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x20, 0x20, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x12, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
};
unsigned char *Fast_UnicodeUtil::_compCharProps[256]={
- Fast_intCompCharProps+0x0000, /* Page 0x00 */
- Fast_intCompCharProps+0x0100, /* Page 0x01 */
- Fast_intCompCharProps+0x0200, /* Page 0x02 */
- Fast_intCompCharProps+0x0300, /* Page 0x03 */
- Fast_intCompCharProps+0x0400, /* Page 0x04 */
- Fast_intCompCharProps+0x0500, /* Page 0x05 */
- Fast_intCompCharProps+0x0600, /* Page 0x06 */
- Fast_intCompCharProps+0x0700, /* Page 0x07 */
- Fast_intCompCharProps+0x0800, /* Page 0x08 */
- Fast_intCompCharProps+0x0900, /* Page 0x09 */
- Fast_intCompCharProps+0x0A00, /* Page 0x0A */
- Fast_intCompCharProps+0x0B00, /* Page 0x0B */
- Fast_intCompCharProps+0x0C00, /* Page 0x0C */
- Fast_intCompCharProps+0x0D00, /* Page 0x0D */
- Fast_intCompCharProps+0x0E00, /* Page 0x0E */
- Fast_intCompCharProps+0x0F00, /* Page 0x0F */
- Fast_intCompCharProps+0x1000, /* Page 0x10 */
- Fast_intCompCharProps+0x1100, /* Page 0x11 */
- Fast_intCompCharProps+0x1200, /* Page 0x12 */
- Fast_intCompCharProps+0x1300, /* Page 0x13 */
- Fast_intCompCharProps+0x1400, /* Page 0x14 */
- Fast_intCompCharProps+0x0100, /* Page 0x15 */
- Fast_intCompCharProps+0x1500, /* Page 0x16 */
- Fast_intCompCharProps+0x1600, /* Page 0x17 */
- Fast_intCompCharProps+0x1700, /* Page 0x18 */
- Fast_intCompCharProps+0x1800, /* Page 0x19 */
- Fast_intCompCharProps+0x0800, /* Page 0x1A */
- Fast_intCompCharProps+0x0800, /* Page 0x1B */
- Fast_intCompCharProps+0x0800, /* Page 0x1C */
- Fast_intCompCharProps+0x1900, /* Page 0x1D */
- Fast_intCompCharProps+0x1A00, /* Page 0x1E */
- Fast_intCompCharProps+0x1B00, /* Page 0x1F */
- Fast_intCompCharProps+0x1C00, /* Page 0x20 */
- Fast_intCompCharProps+0x1D00, /* Page 0x21 */
- Fast_intCompCharProps+0x0800, /* Page 0x22 */
- Fast_intCompCharProps+0x0800, /* Page 0x23 */
- Fast_intCompCharProps+0x0800, /* Page 0x24 */
- Fast_intCompCharProps+0x0800, /* Page 0x25 */
- Fast_intCompCharProps+0x0800, /* Page 0x26 */
- Fast_intCompCharProps+0x0800, /* Page 0x27 */
- Fast_intCompCharProps+0x0800, /* Page 0x28 */
- Fast_intCompCharProps+0x0800, /* Page 0x29 */
- Fast_intCompCharProps+0x0800, /* Page 0x2A */
- Fast_intCompCharProps+0x0800, /* Page 0x2B */
- Fast_intCompCharProps+0x0800, /* Page 0x2C */
- Fast_intCompCharProps+0x0800, /* Page 0x2D */
- Fast_intCompCharProps+0x0800, /* Page 0x2E */
- Fast_intCompCharProps+0x0800, /* Page 0x2F */
- Fast_intCompCharProps+0x1E00, /* Page 0x30 */
- Fast_intCompCharProps+0x1F00, /* Page 0x31 */
- Fast_intCompCharProps+0x2000, /* Page 0x32 */
- Fast_intCompCharProps+0x0800, /* Page 0x33 */
- Fast_intCompCharProps+0x2100, /* Page 0x34 */
- Fast_intCompCharProps+0x2100, /* Page 0x35 */
- Fast_intCompCharProps+0x2100, /* Page 0x36 */
- Fast_intCompCharProps+0x2100, /* Page 0x37 */
- Fast_intCompCharProps+0x2100, /* Page 0x38 */
- Fast_intCompCharProps+0x2100, /* Page 0x39 */
- Fast_intCompCharProps+0x2100, /* Page 0x3A */
- Fast_intCompCharProps+0x2100, /* Page 0x3B */
- Fast_intCompCharProps+0x2100, /* Page 0x3C */
- Fast_intCompCharProps+0x2100, /* Page 0x3D */
- Fast_intCompCharProps+0x2100, /* Page 0x3E */
- Fast_intCompCharProps+0x2100, /* Page 0x3F */
- Fast_intCompCharProps+0x2100, /* Page 0x40 */
- Fast_intCompCharProps+0x2100, /* Page 0x41 */
- Fast_intCompCharProps+0x2100, /* Page 0x42 */
- Fast_intCompCharProps+0x2100, /* Page 0x43 */
- Fast_intCompCharProps+0x2100, /* Page 0x44 */
- Fast_intCompCharProps+0x2100, /* Page 0x45 */
- Fast_intCompCharProps+0x2100, /* Page 0x46 */
- Fast_intCompCharProps+0x2100, /* Page 0x47 */
- Fast_intCompCharProps+0x2100, /* Page 0x48 */
- Fast_intCompCharProps+0x2100, /* Page 0x49 */
- Fast_intCompCharProps+0x2100, /* Page 0x4A */
- Fast_intCompCharProps+0x2100, /* Page 0x4B */
- Fast_intCompCharProps+0x2100, /* Page 0x4C */
- Fast_intCompCharProps+0x2200, /* Page 0x4D */
- Fast_intCompCharProps+0x2100, /* Page 0x4E */
- Fast_intCompCharProps+0x2100, /* Page 0x4F */
- Fast_intCompCharProps+0x2100, /* Page 0x50 */
- Fast_intCompCharProps+0x2100, /* Page 0x51 */
- Fast_intCompCharProps+0x2100, /* Page 0x52 */
- Fast_intCompCharProps+0x2100, /* Page 0x53 */
- Fast_intCompCharProps+0x2100, /* Page 0x54 */
- Fast_intCompCharProps+0x2100, /* Page 0x55 */
- Fast_intCompCharProps+0x2100, /* Page 0x56 */
- Fast_intCompCharProps+0x2100, /* Page 0x57 */
- Fast_intCompCharProps+0x2100, /* Page 0x58 */
- Fast_intCompCharProps+0x2100, /* Page 0x59 */
- Fast_intCompCharProps+0x2100, /* Page 0x5A */
- Fast_intCompCharProps+0x2100, /* Page 0x5B */
- Fast_intCompCharProps+0x2100, /* Page 0x5C */
- Fast_intCompCharProps+0x2100, /* Page 0x5D */
- Fast_intCompCharProps+0x2100, /* Page 0x5E */
- Fast_intCompCharProps+0x2100, /* Page 0x5F */
- Fast_intCompCharProps+0x2100, /* Page 0x60 */
- Fast_intCompCharProps+0x2100, /* Page 0x61 */
- Fast_intCompCharProps+0x2100, /* Page 0x62 */
- Fast_intCompCharProps+0x2100, /* Page 0x63 */
- Fast_intCompCharProps+0x2100, /* Page 0x64 */
- Fast_intCompCharProps+0x2100, /* Page 0x65 */
- Fast_intCompCharProps+0x2100, /* Page 0x66 */
- Fast_intCompCharProps+0x2100, /* Page 0x67 */
- Fast_intCompCharProps+0x2100, /* Page 0x68 */
- Fast_intCompCharProps+0x2100, /* Page 0x69 */
- Fast_intCompCharProps+0x2100, /* Page 0x6A */
- Fast_intCompCharProps+0x2100, /* Page 0x6B */
- Fast_intCompCharProps+0x2100, /* Page 0x6C */
- Fast_intCompCharProps+0x2100, /* Page 0x6D */
- Fast_intCompCharProps+0x2100, /* Page 0x6E */
- Fast_intCompCharProps+0x2100, /* Page 0x6F */
- Fast_intCompCharProps+0x2100, /* Page 0x70 */
- Fast_intCompCharProps+0x2100, /* Page 0x71 */
- Fast_intCompCharProps+0x2100, /* Page 0x72 */
- Fast_intCompCharProps+0x2100, /* Page 0x73 */
- Fast_intCompCharProps+0x2100, /* Page 0x74 */
- Fast_intCompCharProps+0x2100, /* Page 0x75 */
- Fast_intCompCharProps+0x2100, /* Page 0x76 */
- Fast_intCompCharProps+0x2100, /* Page 0x77 */
- Fast_intCompCharProps+0x2100, /* Page 0x78 */
- Fast_intCompCharProps+0x2100, /* Page 0x79 */
- Fast_intCompCharProps+0x2100, /* Page 0x7A */
- Fast_intCompCharProps+0x2100, /* Page 0x7B */
- Fast_intCompCharProps+0x2100, /* Page 0x7C */
- Fast_intCompCharProps+0x2100, /* Page 0x7D */
- Fast_intCompCharProps+0x2100, /* Page 0x7E */
- Fast_intCompCharProps+0x2100, /* Page 0x7F */
- Fast_intCompCharProps+0x2100, /* Page 0x80 */
- Fast_intCompCharProps+0x2100, /* Page 0x81 */
- Fast_intCompCharProps+0x2100, /* Page 0x82 */
- Fast_intCompCharProps+0x2100, /* Page 0x83 */
- Fast_intCompCharProps+0x2100, /* Page 0x84 */
- Fast_intCompCharProps+0x2100, /* Page 0x85 */
- Fast_intCompCharProps+0x2100, /* Page 0x86 */
- Fast_intCompCharProps+0x2100, /* Page 0x87 */
- Fast_intCompCharProps+0x2100, /* Page 0x88 */
- Fast_intCompCharProps+0x2100, /* Page 0x89 */
- Fast_intCompCharProps+0x2100, /* Page 0x8A */
- Fast_intCompCharProps+0x2100, /* Page 0x8B */
- Fast_intCompCharProps+0x2100, /* Page 0x8C */
- Fast_intCompCharProps+0x2100, /* Page 0x8D */
- Fast_intCompCharProps+0x2100, /* Page 0x8E */
- Fast_intCompCharProps+0x2100, /* Page 0x8F */
- Fast_intCompCharProps+0x2100, /* Page 0x90 */
- Fast_intCompCharProps+0x2100, /* Page 0x91 */
- Fast_intCompCharProps+0x2100, /* Page 0x92 */
- Fast_intCompCharProps+0x2100, /* Page 0x93 */
- Fast_intCompCharProps+0x2100, /* Page 0x94 */
- Fast_intCompCharProps+0x2100, /* Page 0x95 */
- Fast_intCompCharProps+0x2100, /* Page 0x96 */
- Fast_intCompCharProps+0x2100, /* Page 0x97 */
- Fast_intCompCharProps+0x2100, /* Page 0x98 */
- Fast_intCompCharProps+0x2100, /* Page 0x99 */
- Fast_intCompCharProps+0x2100, /* Page 0x9A */
- Fast_intCompCharProps+0x2100, /* Page 0x9B */
- Fast_intCompCharProps+0x2100, /* Page 0x9C */
- Fast_intCompCharProps+0x2100, /* Page 0x9D */
- Fast_intCompCharProps+0x2100, /* Page 0x9E */
- Fast_intCompCharProps+0x2300, /* Page 0x9F */
- Fast_intCompCharProps+0x0100, /* Page 0xA0 */
- Fast_intCompCharProps+0x0100, /* Page 0xA1 */
- Fast_intCompCharProps+0x0100, /* Page 0xA2 */
- Fast_intCompCharProps+0x0100, /* Page 0xA3 */
- Fast_intCompCharProps+0x2400, /* Page 0xA4 */
- Fast_intCompCharProps+0x0800, /* Page 0xA5 */
- Fast_intCompCharProps+0x0800, /* Page 0xA6 */
- Fast_intCompCharProps+0x0800, /* Page 0xA7 */
- Fast_intCompCharProps+0x0800, /* Page 0xA8 */
- Fast_intCompCharProps+0x0800, /* Page 0xA9 */
- Fast_intCompCharProps+0x0800, /* Page 0xAA */
- Fast_intCompCharProps+0x0800, /* Page 0xAB */
- Fast_intCompCharProps+0x0100, /* Page 0xAC */
- Fast_intCompCharProps+0x0100, /* Page 0xAD */
- Fast_intCompCharProps+0x0100, /* Page 0xAE */
- Fast_intCompCharProps+0x0100, /* Page 0xAF */
- Fast_intCompCharProps+0x0100, /* Page 0xB0 */
- Fast_intCompCharProps+0x0100, /* Page 0xB1 */
- Fast_intCompCharProps+0x0100, /* Page 0xB2 */
- Fast_intCompCharProps+0x0100, /* Page 0xB3 */
- Fast_intCompCharProps+0x0100, /* Page 0xB4 */
- Fast_intCompCharProps+0x0100, /* Page 0xB5 */
- Fast_intCompCharProps+0x0100, /* Page 0xB6 */
- Fast_intCompCharProps+0x0100, /* Page 0xB7 */
- Fast_intCompCharProps+0x0100, /* Page 0xB8 */
- Fast_intCompCharProps+0x0100, /* Page 0xB9 */
- Fast_intCompCharProps+0x0100, /* Page 0xBA */
- Fast_intCompCharProps+0x0100, /* Page 0xBB */
- Fast_intCompCharProps+0x0100, /* Page 0xBC */
- Fast_intCompCharProps+0x0100, /* Page 0xBD */
- Fast_intCompCharProps+0x0100, /* Page 0xBE */
- Fast_intCompCharProps+0x0100, /* Page 0xBF */
- Fast_intCompCharProps+0x0100, /* Page 0xC0 */
- Fast_intCompCharProps+0x0100, /* Page 0xC1 */
- Fast_intCompCharProps+0x0100, /* Page 0xC2 */
- Fast_intCompCharProps+0x0100, /* Page 0xC3 */
- Fast_intCompCharProps+0x0100, /* Page 0xC4 */
- Fast_intCompCharProps+0x0100, /* Page 0xC5 */
- Fast_intCompCharProps+0x0100, /* Page 0xC6 */
- Fast_intCompCharProps+0x0100, /* Page 0xC7 */
- Fast_intCompCharProps+0x0100, /* Page 0xC8 */
- Fast_intCompCharProps+0x0100, /* Page 0xC9 */
- Fast_intCompCharProps+0x0100, /* Page 0xCA */
- Fast_intCompCharProps+0x0100, /* Page 0xCB */
- Fast_intCompCharProps+0x0100, /* Page 0xCC */
- Fast_intCompCharProps+0x0100, /* Page 0xCD */
- Fast_intCompCharProps+0x0100, /* Page 0xCE */
- Fast_intCompCharProps+0x0100, /* Page 0xCF */
- Fast_intCompCharProps+0x0100, /* Page 0xD0 */
- Fast_intCompCharProps+0x0100, /* Page 0xD1 */
- Fast_intCompCharProps+0x0100, /* Page 0xD2 */
- Fast_intCompCharProps+0x0100, /* Page 0xD3 */
- Fast_intCompCharProps+0x0100, /* Page 0xD4 */
- Fast_intCompCharProps+0x0100, /* Page 0xD5 */
- Fast_intCompCharProps+0x0100, /* Page 0xD6 */
- Fast_intCompCharProps+0x2500, /* Page 0xD7 */
- Fast_intCompCharProps+0x2600, /* Page 0xD8 */
- Fast_intCompCharProps+0x2600, /* Page 0xD9 */
- Fast_intCompCharProps+0x2600, /* Page 0xDA */
- Fast_intCompCharProps+0x2600, /* Page 0xDB */
- Fast_intCompCharProps+0x2600, /* Page 0xDC */
- Fast_intCompCharProps+0x2600, /* Page 0xDD */
- Fast_intCompCharProps+0x2600, /* Page 0xDE */
- Fast_intCompCharProps+0x2600, /* Page 0xDF */
- Fast_intCompCharProps+0x0100, /* Page 0xE0 */
- Fast_intCompCharProps+0x0100, /* Page 0xE1 */
- Fast_intCompCharProps+0x0100, /* Page 0xE2 */
- Fast_intCompCharProps+0x0100, /* Page 0xE3 */
- Fast_intCompCharProps+0x0100, /* Page 0xE4 */
- Fast_intCompCharProps+0x0100, /* Page 0xE5 */
- Fast_intCompCharProps+0x0100, /* Page 0xE6 */
- Fast_intCompCharProps+0x0100, /* Page 0xE7 */
- Fast_intCompCharProps+0x0100, /* Page 0xE8 */
- Fast_intCompCharProps+0x0100, /* Page 0xE9 */
- Fast_intCompCharProps+0x0100, /* Page 0xEA */
- Fast_intCompCharProps+0x0100, /* Page 0xEB */
- Fast_intCompCharProps+0x0100, /* Page 0xEC */
- Fast_intCompCharProps+0x0100, /* Page 0xED */
- Fast_intCompCharProps+0x0100, /* Page 0xEE */
- Fast_intCompCharProps+0x0100, /* Page 0xEF */
- Fast_intCompCharProps+0x0100, /* Page 0xF0 */
- Fast_intCompCharProps+0x0100, /* Page 0xF1 */
- Fast_intCompCharProps+0x0100, /* Page 0xF2 */
- Fast_intCompCharProps+0x0100, /* Page 0xF3 */
- Fast_intCompCharProps+0x0100, /* Page 0xF4 */
- Fast_intCompCharProps+0x0100, /* Page 0xF5 */
- Fast_intCompCharProps+0x0100, /* Page 0xF6 */
- Fast_intCompCharProps+0x0100, /* Page 0xF7 */
- Fast_intCompCharProps+0x0100, /* Page 0xF8 */
- Fast_intCompCharProps+0x2100, /* Page 0xF9 */
- Fast_intCompCharProps+0x2700, /* Page 0xFA */
- Fast_intCompCharProps+0x2800, /* Page 0xFB */
- Fast_intCompCharProps+0x0100, /* Page 0xFC */
- Fast_intCompCharProps+0x2900, /* Page 0xFD */
- Fast_intCompCharProps+0x2A00, /* Page 0xFE */
- Fast_intCompCharProps+0x2B00 /* Page 0xFF */
+ Fast_intCompCharProps+0x0000, /* Page 0x00 */
+ Fast_intCompCharProps+0x0100, /* Page 0x01 */
+ Fast_intCompCharProps+0x0200, /* Page 0x02 */
+ Fast_intCompCharProps+0x0300, /* Page 0x03 */
+ Fast_intCompCharProps+0x0400, /* Page 0x04 */
+ Fast_intCompCharProps+0x0500, /* Page 0x05 */
+ Fast_intCompCharProps+0x0600, /* Page 0x06 */
+ Fast_intCompCharProps+0x0700, /* Page 0x07 */
+ Fast_intCompCharProps+0x0800, /* Page 0x08 */
+ Fast_intCompCharProps+0x0900, /* Page 0x09 */
+ Fast_intCompCharProps+0x0A00, /* Page 0x0A */
+ Fast_intCompCharProps+0x0B00, /* Page 0x0B */
+ Fast_intCompCharProps+0x0C00, /* Page 0x0C */
+ Fast_intCompCharProps+0x0D00, /* Page 0x0D */
+ Fast_intCompCharProps+0x0E00, /* Page 0x0E */
+ Fast_intCompCharProps+0x0F00, /* Page 0x0F */
+ Fast_intCompCharProps+0x1000, /* Page 0x10 */
+ Fast_intCompCharProps+0x1100, /* Page 0x11 */
+ Fast_intCompCharProps+0x1200, /* Page 0x12 */
+ Fast_intCompCharProps+0x1300, /* Page 0x13 */
+ Fast_intCompCharProps+0x1400, /* Page 0x14 */
+ Fast_intCompCharProps+0x0100, /* Page 0x15 */
+ Fast_intCompCharProps+0x1500, /* Page 0x16 */
+ Fast_intCompCharProps+0x1600, /* Page 0x17 */
+ Fast_intCompCharProps+0x1700, /* Page 0x18 */
+ Fast_intCompCharProps+0x1800, /* Page 0x19 */
+ Fast_intCompCharProps+0x0800, /* Page 0x1A */
+ Fast_intCompCharProps+0x0800, /* Page 0x1B */
+ Fast_intCompCharProps+0x0800, /* Page 0x1C */
+ Fast_intCompCharProps+0x1900, /* Page 0x1D */
+ Fast_intCompCharProps+0x1A00, /* Page 0x1E */
+ Fast_intCompCharProps+0x1B00, /* Page 0x1F */
+ Fast_intCompCharProps+0x1C00, /* Page 0x20 */
+ Fast_intCompCharProps+0x1D00, /* Page 0x21 */
+ Fast_intCompCharProps+0x0800, /* Page 0x22 */
+ Fast_intCompCharProps+0x0800, /* Page 0x23 */
+ Fast_intCompCharProps+0x0800, /* Page 0x24 */
+ Fast_intCompCharProps+0x0800, /* Page 0x25 */
+ Fast_intCompCharProps+0x0800, /* Page 0x26 */
+ Fast_intCompCharProps+0x0800, /* Page 0x27 */
+ Fast_intCompCharProps+0x0800, /* Page 0x28 */
+ Fast_intCompCharProps+0x0800, /* Page 0x29 */
+ Fast_intCompCharProps+0x0800, /* Page 0x2A */
+ Fast_intCompCharProps+0x0800, /* Page 0x2B */
+ Fast_intCompCharProps+0x0800, /* Page 0x2C */
+ Fast_intCompCharProps+0x0800, /* Page 0x2D */
+ Fast_intCompCharProps+0x0800, /* Page 0x2E */
+ Fast_intCompCharProps+0x0800, /* Page 0x2F */
+ Fast_intCompCharProps+0x1E00, /* Page 0x30 */
+ Fast_intCompCharProps+0x1F00, /* Page 0x31 */
+ Fast_intCompCharProps+0x2000, /* Page 0x32 */
+ Fast_intCompCharProps+0x0800, /* Page 0x33 */
+ Fast_intCompCharProps+0x2100, /* Page 0x34 */
+ Fast_intCompCharProps+0x2100, /* Page 0x35 */
+ Fast_intCompCharProps+0x2100, /* Page 0x36 */
+ Fast_intCompCharProps+0x2100, /* Page 0x37 */
+ Fast_intCompCharProps+0x2100, /* Page 0x38 */
+ Fast_intCompCharProps+0x2100, /* Page 0x39 */
+ Fast_intCompCharProps+0x2100, /* Page 0x3A */
+ Fast_intCompCharProps+0x2100, /* Page 0x3B */
+ Fast_intCompCharProps+0x2100, /* Page 0x3C */
+ Fast_intCompCharProps+0x2100, /* Page 0x3D */
+ Fast_intCompCharProps+0x2100, /* Page 0x3E */
+ Fast_intCompCharProps+0x2100, /* Page 0x3F */
+ Fast_intCompCharProps+0x2100, /* Page 0x40 */
+ Fast_intCompCharProps+0x2100, /* Page 0x41 */
+ Fast_intCompCharProps+0x2100, /* Page 0x42 */
+ Fast_intCompCharProps+0x2100, /* Page 0x43 */
+ Fast_intCompCharProps+0x2100, /* Page 0x44 */
+ Fast_intCompCharProps+0x2100, /* Page 0x45 */
+ Fast_intCompCharProps+0x2100, /* Page 0x46 */
+ Fast_intCompCharProps+0x2100, /* Page 0x47 */
+ Fast_intCompCharProps+0x2100, /* Page 0x48 */
+ Fast_intCompCharProps+0x2100, /* Page 0x49 */
+ Fast_intCompCharProps+0x2100, /* Page 0x4A */
+ Fast_intCompCharProps+0x2100, /* Page 0x4B */
+ Fast_intCompCharProps+0x2100, /* Page 0x4C */
+ Fast_intCompCharProps+0x2200, /* Page 0x4D */
+ Fast_intCompCharProps+0x2100, /* Page 0x4E */
+ Fast_intCompCharProps+0x2100, /* Page 0x4F */
+ Fast_intCompCharProps+0x2100, /* Page 0x50 */
+ Fast_intCompCharProps+0x2100, /* Page 0x51 */
+ Fast_intCompCharProps+0x2100, /* Page 0x52 */
+ Fast_intCompCharProps+0x2100, /* Page 0x53 */
+ Fast_intCompCharProps+0x2100, /* Page 0x54 */
+ Fast_intCompCharProps+0x2100, /* Page 0x55 */
+ Fast_intCompCharProps+0x2100, /* Page 0x56 */
+ Fast_intCompCharProps+0x2100, /* Page 0x57 */
+ Fast_intCompCharProps+0x2100, /* Page 0x58 */
+ Fast_intCompCharProps+0x2100, /* Page 0x59 */
+ Fast_intCompCharProps+0x2100, /* Page 0x5A */
+ Fast_intCompCharProps+0x2100, /* Page 0x5B */
+ Fast_intCompCharProps+0x2100, /* Page 0x5C */
+ Fast_intCompCharProps+0x2100, /* Page 0x5D */
+ Fast_intCompCharProps+0x2100, /* Page 0x5E */
+ Fast_intCompCharProps+0x2100, /* Page 0x5F */
+ Fast_intCompCharProps+0x2100, /* Page 0x60 */
+ Fast_intCompCharProps+0x2100, /* Page 0x61 */
+ Fast_intCompCharProps+0x2100, /* Page 0x62 */
+ Fast_intCompCharProps+0x2100, /* Page 0x63 */
+ Fast_intCompCharProps+0x2100, /* Page 0x64 */
+ Fast_intCompCharProps+0x2100, /* Page 0x65 */
+ Fast_intCompCharProps+0x2100, /* Page 0x66 */
+ Fast_intCompCharProps+0x2100, /* Page 0x67 */
+ Fast_intCompCharProps+0x2100, /* Page 0x68 */
+ Fast_intCompCharProps+0x2100, /* Page 0x69 */
+ Fast_intCompCharProps+0x2100, /* Page 0x6A */
+ Fast_intCompCharProps+0x2100, /* Page 0x6B */
+ Fast_intCompCharProps+0x2100, /* Page 0x6C */
+ Fast_intCompCharProps+0x2100, /* Page 0x6D */
+ Fast_intCompCharProps+0x2100, /* Page 0x6E */
+ Fast_intCompCharProps+0x2100, /* Page 0x6F */
+ Fast_intCompCharProps+0x2100, /* Page 0x70 */
+ Fast_intCompCharProps+0x2100, /* Page 0x71 */
+ Fast_intCompCharProps+0x2100, /* Page 0x72 */
+ Fast_intCompCharProps+0x2100, /* Page 0x73 */
+ Fast_intCompCharProps+0x2100, /* Page 0x74 */
+ Fast_intCompCharProps+0x2100, /* Page 0x75 */
+ Fast_intCompCharProps+0x2100, /* Page 0x76 */
+ Fast_intCompCharProps+0x2100, /* Page 0x77 */
+ Fast_intCompCharProps+0x2100, /* Page 0x78 */
+ Fast_intCompCharProps+0x2100, /* Page 0x79 */
+ Fast_intCompCharProps+0x2100, /* Page 0x7A */
+ Fast_intCompCharProps+0x2100, /* Page 0x7B */
+ Fast_intCompCharProps+0x2100, /* Page 0x7C */
+ Fast_intCompCharProps+0x2100, /* Page 0x7D */
+ Fast_intCompCharProps+0x2100, /* Page 0x7E */
+ Fast_intCompCharProps+0x2100, /* Page 0x7F */
+ Fast_intCompCharProps+0x2100, /* Page 0x80 */
+ Fast_intCompCharProps+0x2100, /* Page 0x81 */
+ Fast_intCompCharProps+0x2100, /* Page 0x82 */
+ Fast_intCompCharProps+0x2100, /* Page 0x83 */
+ Fast_intCompCharProps+0x2100, /* Page 0x84 */
+ Fast_intCompCharProps+0x2100, /* Page 0x85 */
+ Fast_intCompCharProps+0x2100, /* Page 0x86 */
+ Fast_intCompCharProps+0x2100, /* Page 0x87 */
+ Fast_intCompCharProps+0x2100, /* Page 0x88 */
+ Fast_intCompCharProps+0x2100, /* Page 0x89 */
+ Fast_intCompCharProps+0x2100, /* Page 0x8A */
+ Fast_intCompCharProps+0x2100, /* Page 0x8B */
+ Fast_intCompCharProps+0x2100, /* Page 0x8C */
+ Fast_intCompCharProps+0x2100, /* Page 0x8D */
+ Fast_intCompCharProps+0x2100, /* Page 0x8E */
+ Fast_intCompCharProps+0x2100, /* Page 0x8F */
+ Fast_intCompCharProps+0x2100, /* Page 0x90 */
+ Fast_intCompCharProps+0x2100, /* Page 0x91 */
+ Fast_intCompCharProps+0x2100, /* Page 0x92 */
+ Fast_intCompCharProps+0x2100, /* Page 0x93 */
+ Fast_intCompCharProps+0x2100, /* Page 0x94 */
+ Fast_intCompCharProps+0x2100, /* Page 0x95 */
+ Fast_intCompCharProps+0x2100, /* Page 0x96 */
+ Fast_intCompCharProps+0x2100, /* Page 0x97 */
+ Fast_intCompCharProps+0x2100, /* Page 0x98 */
+ Fast_intCompCharProps+0x2100, /* Page 0x99 */
+ Fast_intCompCharProps+0x2100, /* Page 0x9A */
+ Fast_intCompCharProps+0x2100, /* Page 0x9B */
+ Fast_intCompCharProps+0x2100, /* Page 0x9C */
+ Fast_intCompCharProps+0x2100, /* Page 0x9D */
+ Fast_intCompCharProps+0x2100, /* Page 0x9E */
+ Fast_intCompCharProps+0x2300, /* Page 0x9F */
+ Fast_intCompCharProps+0x0100, /* Page 0xA0 */
+ Fast_intCompCharProps+0x0100, /* Page 0xA1 */
+ Fast_intCompCharProps+0x0100, /* Page 0xA2 */
+ Fast_intCompCharProps+0x0100, /* Page 0xA3 */
+ Fast_intCompCharProps+0x2400, /* Page 0xA4 */
+ Fast_intCompCharProps+0x0800, /* Page 0xA5 */
+ Fast_intCompCharProps+0x0800, /* Page 0xA6 */
+ Fast_intCompCharProps+0x0800, /* Page 0xA7 */
+ Fast_intCompCharProps+0x0800, /* Page 0xA8 */
+ Fast_intCompCharProps+0x0800, /* Page 0xA9 */
+ Fast_intCompCharProps+0x0800, /* Page 0xAA */
+ Fast_intCompCharProps+0x0800, /* Page 0xAB */
+ Fast_intCompCharProps+0x0100, /* Page 0xAC */
+ Fast_intCompCharProps+0x0100, /* Page 0xAD */
+ Fast_intCompCharProps+0x0100, /* Page 0xAE */
+ Fast_intCompCharProps+0x0100, /* Page 0xAF */
+ Fast_intCompCharProps+0x0100, /* Page 0xB0 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB1 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB2 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB3 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB4 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB5 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB6 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB7 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB8 */
+ Fast_intCompCharProps+0x0100, /* Page 0xB9 */
+ Fast_intCompCharProps+0x0100, /* Page 0xBA */
+ Fast_intCompCharProps+0x0100, /* Page 0xBB */
+ Fast_intCompCharProps+0x0100, /* Page 0xBC */
+ Fast_intCompCharProps+0x0100, /* Page 0xBD */
+ Fast_intCompCharProps+0x0100, /* Page 0xBE */
+ Fast_intCompCharProps+0x0100, /* Page 0xBF */
+ Fast_intCompCharProps+0x0100, /* Page 0xC0 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC1 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC2 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC3 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC4 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC5 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC6 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC7 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC8 */
+ Fast_intCompCharProps+0x0100, /* Page 0xC9 */
+ Fast_intCompCharProps+0x0100, /* Page 0xCA */
+ Fast_intCompCharProps+0x0100, /* Page 0xCB */
+ Fast_intCompCharProps+0x0100, /* Page 0xCC */
+ Fast_intCompCharProps+0x0100, /* Page 0xCD */
+ Fast_intCompCharProps+0x0100, /* Page 0xCE */
+ Fast_intCompCharProps+0x0100, /* Page 0xCF */
+ Fast_intCompCharProps+0x0100, /* Page 0xD0 */
+ Fast_intCompCharProps+0x0100, /* Page 0xD1 */
+ Fast_intCompCharProps+0x0100, /* Page 0xD2 */
+ Fast_intCompCharProps+0x0100, /* Page 0xD3 */
+ Fast_intCompCharProps+0x0100, /* Page 0xD4 */
+ Fast_intCompCharProps+0x0100, /* Page 0xD5 */
+ Fast_intCompCharProps+0x0100, /* Page 0xD6 */
+ Fast_intCompCharProps+0x2500, /* Page 0xD7 */
+ Fast_intCompCharProps+0x2600, /* Page 0xD8 */
+ Fast_intCompCharProps+0x2600, /* Page 0xD9 */
+ Fast_intCompCharProps+0x2600, /* Page 0xDA */
+ Fast_intCompCharProps+0x2600, /* Page 0xDB */
+ Fast_intCompCharProps+0x2600, /* Page 0xDC */
+ Fast_intCompCharProps+0x2600, /* Page 0xDD */
+ Fast_intCompCharProps+0x2600, /* Page 0xDE */
+ Fast_intCompCharProps+0x2600, /* Page 0xDF */
+ Fast_intCompCharProps+0x0100, /* Page 0xE0 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE1 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE2 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE3 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE4 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE5 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE6 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE7 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE8 */
+ Fast_intCompCharProps+0x0100, /* Page 0xE9 */
+ Fast_intCompCharProps+0x0100, /* Page 0xEA */
+ Fast_intCompCharProps+0x0100, /* Page 0xEB */
+ Fast_intCompCharProps+0x0100, /* Page 0xEC */
+ Fast_intCompCharProps+0x0100, /* Page 0xED */
+ Fast_intCompCharProps+0x0100, /* Page 0xEE */
+ Fast_intCompCharProps+0x0100, /* Page 0xEF */
+ Fast_intCompCharProps+0x0100, /* Page 0xF0 */
+ Fast_intCompCharProps+0x0100, /* Page 0xF1 */
+ Fast_intCompCharProps+0x0100, /* Page 0xF2 */
+ Fast_intCompCharProps+0x0100, /* Page 0xF3 */
+ Fast_intCompCharProps+0x0100, /* Page 0xF4 */
+ Fast_intCompCharProps+0x0100, /* Page 0xF5 */
+ Fast_intCompCharProps+0x0100, /* Page 0xF6 */
+ Fast_intCompCharProps+0x0100, /* Page 0xF7 */
+ Fast_intCompCharProps+0x0100, /* Page 0xF8 */
+ Fast_intCompCharProps+0x2100, /* Page 0xF9 */
+ Fast_intCompCharProps+0x2700, /* Page 0xFA */
+ Fast_intCompCharProps+0x2800, /* Page 0xFB */
+ Fast_intCompCharProps+0x0100, /* Page 0xFC */
+ Fast_intCompCharProps+0x2900, /* Page 0xFD */
+ Fast_intCompCharProps+0x2A00, /* Page 0xFE */
+ Fast_intCompCharProps+0x2B00 /* Page 0xFF */
};
/* End of auto-generated file */
diff --git a/fastlib/src/vespa/fastlib/text/unicodeutil-lowercase.cpp b/fastlib/src/vespa/fastlib/text/unicodeutil-lowercase.cpp
index ffc2044a759..c1230a2fb56 100644
--- a/fastlib/src/vespa/fastlib/text/unicodeutil-lowercase.cpp
+++ b/fastlib/src/vespa/fastlib/text/unicodeutil-lowercase.cpp
@@ -4,649 +4,649 @@
*/
static unsigned short Fast_intCompLowerCase[3072]={
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0061u, 0x0062u, 0x0063u, 0x0064u, 0x0065u, 0x0066u, 0x0067u,
- 0x0068u, 0x0069u, 0x006Au, 0x006Bu, 0x006Cu, 0x006Du, 0x006Eu, 0x006Fu,
- 0x0070u, 0x0071u, 0x0072u, 0x0073u, 0x0074u, 0x0075u, 0x0076u, 0x0077u,
- 0x0078u, 0x0079u, 0x007Au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x00E0u, 0x00E1u, 0x00E2u, 0x00E3u, 0x00E4u, 0x00E5u, 0x00E6u, 0x00E7u,
- 0x00E8u, 0x00E9u, 0x00EAu, 0x00EBu, 0x00ECu, 0x00EDu, 0x00EEu, 0x00EFu,
- 0x00F0u, 0x00F1u, 0x00F2u, 0x00F3u, 0x00F4u, 0x00F5u, 0x00F6u, 0x0000u,
- 0x00F8u, 0x00F9u, 0x00FAu, 0x00FBu, 0x00FCu, 0x00FDu, 0x00FEu, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0101u, 0x0000u, 0x0103u, 0x0000u, 0x0105u, 0x0000u, 0x0107u, 0x0000u,
- 0x0109u, 0x0000u, 0x010Bu, 0x0000u, 0x010Du, 0x0000u, 0x010Fu, 0x0000u,
- 0x0111u, 0x0000u, 0x0113u, 0x0000u, 0x0115u, 0x0000u, 0x0117u, 0x0000u,
- 0x0119u, 0x0000u, 0x011Bu, 0x0000u, 0x011Du, 0x0000u, 0x011Fu, 0x0000u,
- 0x0121u, 0x0000u, 0x0123u, 0x0000u, 0x0125u, 0x0000u, 0x0127u, 0x0000u,
- 0x0129u, 0x0000u, 0x012Bu, 0x0000u, 0x012Du, 0x0000u, 0x012Fu, 0x0000u,
- 0x0069u, 0x0000u, 0x0133u, 0x0000u, 0x0135u, 0x0000u, 0x0137u, 0x0000u,
- 0x0000u, 0x013Au, 0x0000u, 0x013Cu, 0x0000u, 0x013Eu, 0x0000u, 0x0140u,
- 0x0000u, 0x0142u, 0x0000u, 0x0144u, 0x0000u, 0x0146u, 0x0000u, 0x0148u,
- 0x0000u, 0x0000u, 0x014Bu, 0x0000u, 0x014Du, 0x0000u, 0x014Fu, 0x0000u,
- 0x0151u, 0x0000u, 0x0153u, 0x0000u, 0x0155u, 0x0000u, 0x0157u, 0x0000u,
- 0x0159u, 0x0000u, 0x015Bu, 0x0000u, 0x015Du, 0x0000u, 0x015Fu, 0x0000u,
- 0x0161u, 0x0000u, 0x0163u, 0x0000u, 0x0165u, 0x0000u, 0x0167u, 0x0000u,
- 0x0169u, 0x0000u, 0x016Bu, 0x0000u, 0x016Du, 0x0000u, 0x016Fu, 0x0000u,
- 0x0171u, 0x0000u, 0x0173u, 0x0000u, 0x0175u, 0x0000u, 0x0177u, 0x0000u,
- 0x00FFu, 0x017Au, 0x0000u, 0x017Cu, 0x0000u, 0x017Eu, 0x0000u, 0x0000u,
- 0x0000u, 0x0253u, 0x0183u, 0x0000u, 0x0185u, 0x0000u, 0x0254u, 0x0188u,
- 0x0000u, 0x0256u, 0x0257u, 0x018Cu, 0x0000u, 0x0000u, 0x01DDu, 0x0259u,
- 0x025Bu, 0x0192u, 0x0000u, 0x0260u, 0x0263u, 0x0000u, 0x0269u, 0x0268u,
- 0x0199u, 0x0000u, 0x0000u, 0x0000u, 0x026Fu, 0x0272u, 0x0000u, 0x0275u,
- 0x01A1u, 0x0000u, 0x01A3u, 0x0000u, 0x01A5u, 0x0000u, 0x0280u, 0x01A8u,
- 0x0000u, 0x0283u, 0x0000u, 0x0000u, 0x01ADu, 0x0000u, 0x0288u, 0x01B0u,
- 0x0000u, 0x028Au, 0x028Bu, 0x01B4u, 0x0000u, 0x01B6u, 0x0000u, 0x0292u,
- 0x01B9u, 0x0000u, 0x0000u, 0x0000u, 0x01BDu, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x01C6u, 0x01C6u, 0x0000u, 0x01C9u,
- 0x01C9u, 0x0000u, 0x01CCu, 0x01CCu, 0x0000u, 0x01CEu, 0x0000u, 0x01D0u,
- 0x0000u, 0x01D2u, 0x0000u, 0x01D4u, 0x0000u, 0x01D6u, 0x0000u, 0x01D8u,
- 0x0000u, 0x01DAu, 0x0000u, 0x01DCu, 0x0000u, 0x0000u, 0x01DFu, 0x0000u,
- 0x01E1u, 0x0000u, 0x01E3u, 0x0000u, 0x01E5u, 0x0000u, 0x01E7u, 0x0000u,
- 0x01E9u, 0x0000u, 0x01EBu, 0x0000u, 0x01EDu, 0x0000u, 0x01EFu, 0x0000u,
- 0x0000u, 0x01F3u, 0x01F3u, 0x0000u, 0x01F5u, 0x0000u, 0x0195u, 0x01BFu,
- 0x01F9u, 0x0000u, 0x01FBu, 0x0000u, 0x01FDu, 0x0000u, 0x01FFu, 0x0000u,
- 0x0201u, 0x0000u, 0x0203u, 0x0000u, 0x0205u, 0x0000u, 0x0207u, 0x0000u,
- 0x0209u, 0x0000u, 0x020Bu, 0x0000u, 0x020Du, 0x0000u, 0x020Fu, 0x0000u,
- 0x0211u, 0x0000u, 0x0213u, 0x0000u, 0x0215u, 0x0000u, 0x0217u, 0x0000u,
- 0x0219u, 0x0000u, 0x021Bu, 0x0000u, 0x021Du, 0x0000u, 0x021Fu, 0x0000u,
- 0x019Eu, 0x0000u, 0x0223u, 0x0000u, 0x0225u, 0x0000u, 0x0227u, 0x0000u,
- 0x0229u, 0x0000u, 0x022Bu, 0x0000u, 0x022Du, 0x0000u, 0x022Fu, 0x0000u,
- 0x0231u, 0x0000u, 0x0233u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x03ACu, 0x0000u,
- 0x03ADu, 0x03AEu, 0x03AFu, 0x0000u, 0x03CCu, 0x0000u, 0x03CDu, 0x03CEu,
- 0x0000u, 0x03B1u, 0x03B2u, 0x03B3u, 0x03B4u, 0x03B5u, 0x03B6u, 0x03B7u,
- 0x03B8u, 0x03B9u, 0x03BAu, 0x03BBu, 0x03BCu, 0x03BDu, 0x03BEu, 0x03BFu,
- 0x03C0u, 0x03C1u, 0x0000u, 0x03C3u, 0x03C4u, 0x03C5u, 0x03C6u, 0x03C7u,
- 0x03C8u, 0x03C9u, 0x03CAu, 0x03CBu, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x03D9u, 0x0000u, 0x03DBu, 0x0000u, 0x03DDu, 0x0000u, 0x03DFu, 0x0000u,
- 0x03E1u, 0x0000u, 0x03E3u, 0x0000u, 0x03E5u, 0x0000u, 0x03E7u, 0x0000u,
- 0x03E9u, 0x0000u, 0x03EBu, 0x0000u, 0x03EDu, 0x0000u, 0x03EFu, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x03B8u, 0x0000u, 0x0000u, 0x03F8u,
- 0x0000u, 0x03F2u, 0x03FBu, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0450u, 0x0451u, 0x0452u, 0x0453u, 0x0454u, 0x0455u, 0x0456u, 0x0457u,
- 0x0458u, 0x0459u, 0x045Au, 0x045Bu, 0x045Cu, 0x045Du, 0x045Eu, 0x045Fu,
- 0x0430u, 0x0431u, 0x0432u, 0x0433u, 0x0434u, 0x0435u, 0x0436u, 0x0437u,
- 0x0438u, 0x0439u, 0x043Au, 0x043Bu, 0x043Cu, 0x043Du, 0x043Eu, 0x043Fu,
- 0x0440u, 0x0441u, 0x0442u, 0x0443u, 0x0444u, 0x0445u, 0x0446u, 0x0447u,
- 0x0448u, 0x0449u, 0x044Au, 0x044Bu, 0x044Cu, 0x044Du, 0x044Eu, 0x044Fu,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0461u, 0x0000u, 0x0463u, 0x0000u, 0x0465u, 0x0000u, 0x0467u, 0x0000u,
- 0x0469u, 0x0000u, 0x046Bu, 0x0000u, 0x046Du, 0x0000u, 0x046Fu, 0x0000u,
- 0x0471u, 0x0000u, 0x0473u, 0x0000u, 0x0475u, 0x0000u, 0x0477u, 0x0000u,
- 0x0479u, 0x0000u, 0x047Bu, 0x0000u, 0x047Du, 0x0000u, 0x047Fu, 0x0000u,
- 0x0481u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x048Bu, 0x0000u, 0x048Du, 0x0000u, 0x048Fu, 0x0000u,
- 0x0491u, 0x0000u, 0x0493u, 0x0000u, 0x0495u, 0x0000u, 0x0497u, 0x0000u,
- 0x0499u, 0x0000u, 0x049Bu, 0x0000u, 0x049Du, 0x0000u, 0x049Fu, 0x0000u,
- 0x04A1u, 0x0000u, 0x04A3u, 0x0000u, 0x04A5u, 0x0000u, 0x04A7u, 0x0000u,
- 0x04A9u, 0x0000u, 0x04ABu, 0x0000u, 0x04ADu, 0x0000u, 0x04AFu, 0x0000u,
- 0x04B1u, 0x0000u, 0x04B3u, 0x0000u, 0x04B5u, 0x0000u, 0x04B7u, 0x0000u,
- 0x04B9u, 0x0000u, 0x04BBu, 0x0000u, 0x04BDu, 0x0000u, 0x04BFu, 0x0000u,
- 0x0000u, 0x04C2u, 0x0000u, 0x04C4u, 0x0000u, 0x04C6u, 0x0000u, 0x04C8u,
- 0x0000u, 0x04CAu, 0x0000u, 0x04CCu, 0x0000u, 0x04CEu, 0x0000u, 0x0000u,
- 0x04D1u, 0x0000u, 0x04D3u, 0x0000u, 0x04D5u, 0x0000u, 0x04D7u, 0x0000u,
- 0x04D9u, 0x0000u, 0x04DBu, 0x0000u, 0x04DDu, 0x0000u, 0x04DFu, 0x0000u,
- 0x04E1u, 0x0000u, 0x04E3u, 0x0000u, 0x04E5u, 0x0000u, 0x04E7u, 0x0000u,
- 0x04E9u, 0x0000u, 0x04EBu, 0x0000u, 0x04EDu, 0x0000u, 0x04EFu, 0x0000u,
- 0x04F1u, 0x0000u, 0x04F3u, 0x0000u, 0x04F5u, 0x0000u, 0x0000u, 0x0000u,
- 0x04F9u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0501u, 0x0000u, 0x0503u, 0x0000u, 0x0505u, 0x0000u, 0x0507u, 0x0000u,
- 0x0509u, 0x0000u, 0x050Bu, 0x0000u, 0x050Du, 0x0000u, 0x050Fu, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0561u, 0x0562u, 0x0563u, 0x0564u, 0x0565u, 0x0566u, 0x0567u,
- 0x0568u, 0x0569u, 0x056Au, 0x056Bu, 0x056Cu, 0x056Du, 0x056Eu, 0x056Fu,
- 0x0570u, 0x0571u, 0x0572u, 0x0573u, 0x0574u, 0x0575u, 0x0576u, 0x0577u,
- 0x0578u, 0x0579u, 0x057Au, 0x057Bu, 0x057Cu, 0x057Du, 0x057Eu, 0x057Fu,
- 0x0580u, 0x0581u, 0x0582u, 0x0583u, 0x0584u, 0x0585u, 0x0586u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1E01u, 0x0000u, 0x1E03u, 0x0000u, 0x1E05u, 0x0000u, 0x1E07u, 0x0000u,
- 0x1E09u, 0x0000u, 0x1E0Bu, 0x0000u, 0x1E0Du, 0x0000u, 0x1E0Fu, 0x0000u,
- 0x1E11u, 0x0000u, 0x1E13u, 0x0000u, 0x1E15u, 0x0000u, 0x1E17u, 0x0000u,
- 0x1E19u, 0x0000u, 0x1E1Bu, 0x0000u, 0x1E1Du, 0x0000u, 0x1E1Fu, 0x0000u,
- 0x1E21u, 0x0000u, 0x1E23u, 0x0000u, 0x1E25u, 0x0000u, 0x1E27u, 0x0000u,
- 0x1E29u, 0x0000u, 0x1E2Bu, 0x0000u, 0x1E2Du, 0x0000u, 0x1E2Fu, 0x0000u,
- 0x1E31u, 0x0000u, 0x1E33u, 0x0000u, 0x1E35u, 0x0000u, 0x1E37u, 0x0000u,
- 0x1E39u, 0x0000u, 0x1E3Bu, 0x0000u, 0x1E3Du, 0x0000u, 0x1E3Fu, 0x0000u,
- 0x1E41u, 0x0000u, 0x1E43u, 0x0000u, 0x1E45u, 0x0000u, 0x1E47u, 0x0000u,
- 0x1E49u, 0x0000u, 0x1E4Bu, 0x0000u, 0x1E4Du, 0x0000u, 0x1E4Fu, 0x0000u,
- 0x1E51u, 0x0000u, 0x1E53u, 0x0000u, 0x1E55u, 0x0000u, 0x1E57u, 0x0000u,
- 0x1E59u, 0x0000u, 0x1E5Bu, 0x0000u, 0x1E5Du, 0x0000u, 0x1E5Fu, 0x0000u,
- 0x1E61u, 0x0000u, 0x1E63u, 0x0000u, 0x1E65u, 0x0000u, 0x1E67u, 0x0000u,
- 0x1E69u, 0x0000u, 0x1E6Bu, 0x0000u, 0x1E6Du, 0x0000u, 0x1E6Fu, 0x0000u,
- 0x1E71u, 0x0000u, 0x1E73u, 0x0000u, 0x1E75u, 0x0000u, 0x1E77u, 0x0000u,
- 0x1E79u, 0x0000u, 0x1E7Bu, 0x0000u, 0x1E7Du, 0x0000u, 0x1E7Fu, 0x0000u,
- 0x1E81u, 0x0000u, 0x1E83u, 0x0000u, 0x1E85u, 0x0000u, 0x1E87u, 0x0000u,
- 0x1E89u, 0x0000u, 0x1E8Bu, 0x0000u, 0x1E8Du, 0x0000u, 0x1E8Fu, 0x0000u,
- 0x1E91u, 0x0000u, 0x1E93u, 0x0000u, 0x1E95u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1EA1u, 0x0000u, 0x1EA3u, 0x0000u, 0x1EA5u, 0x0000u, 0x1EA7u, 0x0000u,
- 0x1EA9u, 0x0000u, 0x1EABu, 0x0000u, 0x1EADu, 0x0000u, 0x1EAFu, 0x0000u,
- 0x1EB1u, 0x0000u, 0x1EB3u, 0x0000u, 0x1EB5u, 0x0000u, 0x1EB7u, 0x0000u,
- 0x1EB9u, 0x0000u, 0x1EBBu, 0x0000u, 0x1EBDu, 0x0000u, 0x1EBFu, 0x0000u,
- 0x1EC1u, 0x0000u, 0x1EC3u, 0x0000u, 0x1EC5u, 0x0000u, 0x1EC7u, 0x0000u,
- 0x1EC9u, 0x0000u, 0x1ECBu, 0x0000u, 0x1ECDu, 0x0000u, 0x1ECFu, 0x0000u,
- 0x1ED1u, 0x0000u, 0x1ED3u, 0x0000u, 0x1ED5u, 0x0000u, 0x1ED7u, 0x0000u,
- 0x1ED9u, 0x0000u, 0x1EDBu, 0x0000u, 0x1EDDu, 0x0000u, 0x1EDFu, 0x0000u,
- 0x1EE1u, 0x0000u, 0x1EE3u, 0x0000u, 0x1EE5u, 0x0000u, 0x1EE7u, 0x0000u,
- 0x1EE9u, 0x0000u, 0x1EEBu, 0x0000u, 0x1EEDu, 0x0000u, 0x1EEFu, 0x0000u,
- 0x1EF1u, 0x0000u, 0x1EF3u, 0x0000u, 0x1EF5u, 0x0000u, 0x1EF7u, 0x0000u,
- 0x1EF9u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F00u, 0x1F01u, 0x1F02u, 0x1F03u, 0x1F04u, 0x1F05u, 0x1F06u, 0x1F07u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F10u, 0x1F11u, 0x1F12u, 0x1F13u, 0x1F14u, 0x1F15u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F20u, 0x1F21u, 0x1F22u, 0x1F23u, 0x1F24u, 0x1F25u, 0x1F26u, 0x1F27u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F30u, 0x1F31u, 0x1F32u, 0x1F33u, 0x1F34u, 0x1F35u, 0x1F36u, 0x1F37u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F40u, 0x1F41u, 0x1F42u, 0x1F43u, 0x1F44u, 0x1F45u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x1F51u, 0x0000u, 0x1F53u, 0x0000u, 0x1F55u, 0x0000u, 0x1F57u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F60u, 0x1F61u, 0x1F62u, 0x1F63u, 0x1F64u, 0x1F65u, 0x1F66u, 0x1F67u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F80u, 0x1F81u, 0x1F82u, 0x1F83u, 0x1F84u, 0x1F85u, 0x1F86u, 0x1F87u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F90u, 0x1F91u, 0x1F92u, 0x1F93u, 0x1F94u, 0x1F95u, 0x1F96u, 0x1F97u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1FA0u, 0x1FA1u, 0x1FA2u, 0x1FA3u, 0x1FA4u, 0x1FA5u, 0x1FA6u, 0x1FA7u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1FB0u, 0x1FB1u, 0x1F70u, 0x1F71u, 0x1FB3u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F72u, 0x1F73u, 0x1F74u, 0x1F75u, 0x1FC3u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1FD0u, 0x1FD1u, 0x1F76u, 0x1F77u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1FE0u, 0x1FE1u, 0x1F7Au, 0x1F7Bu, 0x1FE5u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x1F78u, 0x1F79u, 0x1F7Cu, 0x1F7Du, 0x1FF3u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x03C9u, 0x0000u,
- 0x0000u, 0x0000u, 0x006Bu, 0x00E5u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x2170u, 0x2171u, 0x2172u, 0x2173u, 0x2174u, 0x2175u, 0x2176u, 0x2177u,
- 0x2178u, 0x2179u, 0x217Au, 0x217Bu, 0x217Cu, 0x217Du, 0x217Eu, 0x217Fu,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x24D0u, 0x24D1u,
- 0x24D2u, 0x24D3u, 0x24D4u, 0x24D5u, 0x24D6u, 0x24D7u, 0x24D8u, 0x24D9u,
- 0x24DAu, 0x24DBu, 0x24DCu, 0x24DDu, 0x24DEu, 0x24DFu, 0x24E0u, 0x24E1u,
- 0x24E2u, 0x24E3u, 0x24E4u, 0x24E5u, 0x24E6u, 0x24E7u, 0x24E8u, 0x24E9u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0xFF41u, 0xFF42u, 0xFF43u, 0xFF44u, 0xFF45u, 0xFF46u, 0xFF47u,
- 0xFF48u, 0xFF49u, 0xFF4Au, 0xFF4Bu, 0xFF4Cu, 0xFF4Du, 0xFF4Eu, 0xFF4Fu,
- 0xFF50u, 0xFF51u, 0xFF52u, 0xFF53u, 0xFF54u, 0xFF55u, 0xFF56u, 0xFF57u,
- 0xFF58u, 0xFF59u, 0xFF5Au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
- 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0061u, 0x0062u, 0x0063u, 0x0064u, 0x0065u, 0x0066u, 0x0067u,
+ 0x0068u, 0x0069u, 0x006Au, 0x006Bu, 0x006Cu, 0x006Du, 0x006Eu, 0x006Fu,
+ 0x0070u, 0x0071u, 0x0072u, 0x0073u, 0x0074u, 0x0075u, 0x0076u, 0x0077u,
+ 0x0078u, 0x0079u, 0x007Au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x00E0u, 0x00E1u, 0x00E2u, 0x00E3u, 0x00E4u, 0x00E5u, 0x00E6u, 0x00E7u,
+ 0x00E8u, 0x00E9u, 0x00EAu, 0x00EBu, 0x00ECu, 0x00EDu, 0x00EEu, 0x00EFu,
+ 0x00F0u, 0x00F1u, 0x00F2u, 0x00F3u, 0x00F4u, 0x00F5u, 0x00F6u, 0x0000u,
+ 0x00F8u, 0x00F9u, 0x00FAu, 0x00FBu, 0x00FCu, 0x00FDu, 0x00FEu, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0101u, 0x0000u, 0x0103u, 0x0000u, 0x0105u, 0x0000u, 0x0107u, 0x0000u,
+ 0x0109u, 0x0000u, 0x010Bu, 0x0000u, 0x010Du, 0x0000u, 0x010Fu, 0x0000u,
+ 0x0111u, 0x0000u, 0x0113u, 0x0000u, 0x0115u, 0x0000u, 0x0117u, 0x0000u,
+ 0x0119u, 0x0000u, 0x011Bu, 0x0000u, 0x011Du, 0x0000u, 0x011Fu, 0x0000u,
+ 0x0121u, 0x0000u, 0x0123u, 0x0000u, 0x0125u, 0x0000u, 0x0127u, 0x0000u,
+ 0x0129u, 0x0000u, 0x012Bu, 0x0000u, 0x012Du, 0x0000u, 0x012Fu, 0x0000u,
+ 0x0069u, 0x0000u, 0x0133u, 0x0000u, 0x0135u, 0x0000u, 0x0137u, 0x0000u,
+ 0x0000u, 0x013Au, 0x0000u, 0x013Cu, 0x0000u, 0x013Eu, 0x0000u, 0x0140u,
+ 0x0000u, 0x0142u, 0x0000u, 0x0144u, 0x0000u, 0x0146u, 0x0000u, 0x0148u,
+ 0x0000u, 0x0000u, 0x014Bu, 0x0000u, 0x014Du, 0x0000u, 0x014Fu, 0x0000u,
+ 0x0151u, 0x0000u, 0x0153u, 0x0000u, 0x0155u, 0x0000u, 0x0157u, 0x0000u,
+ 0x0159u, 0x0000u, 0x015Bu, 0x0000u, 0x015Du, 0x0000u, 0x015Fu, 0x0000u,
+ 0x0161u, 0x0000u, 0x0163u, 0x0000u, 0x0165u, 0x0000u, 0x0167u, 0x0000u,
+ 0x0169u, 0x0000u, 0x016Bu, 0x0000u, 0x016Du, 0x0000u, 0x016Fu, 0x0000u,
+ 0x0171u, 0x0000u, 0x0173u, 0x0000u, 0x0175u, 0x0000u, 0x0177u, 0x0000u,
+ 0x00FFu, 0x017Au, 0x0000u, 0x017Cu, 0x0000u, 0x017Eu, 0x0000u, 0x0000u,
+ 0x0000u, 0x0253u, 0x0183u, 0x0000u, 0x0185u, 0x0000u, 0x0254u, 0x0188u,
+ 0x0000u, 0x0256u, 0x0257u, 0x018Cu, 0x0000u, 0x0000u, 0x01DDu, 0x0259u,
+ 0x025Bu, 0x0192u, 0x0000u, 0x0260u, 0x0263u, 0x0000u, 0x0269u, 0x0268u,
+ 0x0199u, 0x0000u, 0x0000u, 0x0000u, 0x026Fu, 0x0272u, 0x0000u, 0x0275u,
+ 0x01A1u, 0x0000u, 0x01A3u, 0x0000u, 0x01A5u, 0x0000u, 0x0280u, 0x01A8u,
+ 0x0000u, 0x0283u, 0x0000u, 0x0000u, 0x01ADu, 0x0000u, 0x0288u, 0x01B0u,
+ 0x0000u, 0x028Au, 0x028Bu, 0x01B4u, 0x0000u, 0x01B6u, 0x0000u, 0x0292u,
+ 0x01B9u, 0x0000u, 0x0000u, 0x0000u, 0x01BDu, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x01C6u, 0x01C6u, 0x0000u, 0x01C9u,
+ 0x01C9u, 0x0000u, 0x01CCu, 0x01CCu, 0x0000u, 0x01CEu, 0x0000u, 0x01D0u,
+ 0x0000u, 0x01D2u, 0x0000u, 0x01D4u, 0x0000u, 0x01D6u, 0x0000u, 0x01D8u,
+ 0x0000u, 0x01DAu, 0x0000u, 0x01DCu, 0x0000u, 0x0000u, 0x01DFu, 0x0000u,
+ 0x01E1u, 0x0000u, 0x01E3u, 0x0000u, 0x01E5u, 0x0000u, 0x01E7u, 0x0000u,
+ 0x01E9u, 0x0000u, 0x01EBu, 0x0000u, 0x01EDu, 0x0000u, 0x01EFu, 0x0000u,
+ 0x0000u, 0x01F3u, 0x01F3u, 0x0000u, 0x01F5u, 0x0000u, 0x0195u, 0x01BFu,
+ 0x01F9u, 0x0000u, 0x01FBu, 0x0000u, 0x01FDu, 0x0000u, 0x01FFu, 0x0000u,
+ 0x0201u, 0x0000u, 0x0203u, 0x0000u, 0x0205u, 0x0000u, 0x0207u, 0x0000u,
+ 0x0209u, 0x0000u, 0x020Bu, 0x0000u, 0x020Du, 0x0000u, 0x020Fu, 0x0000u,
+ 0x0211u, 0x0000u, 0x0213u, 0x0000u, 0x0215u, 0x0000u, 0x0217u, 0x0000u,
+ 0x0219u, 0x0000u, 0x021Bu, 0x0000u, 0x021Du, 0x0000u, 0x021Fu, 0x0000u,
+ 0x019Eu, 0x0000u, 0x0223u, 0x0000u, 0x0225u, 0x0000u, 0x0227u, 0x0000u,
+ 0x0229u, 0x0000u, 0x022Bu, 0x0000u, 0x022Du, 0x0000u, 0x022Fu, 0x0000u,
+ 0x0231u, 0x0000u, 0x0233u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x03ACu, 0x0000u,
+ 0x03ADu, 0x03AEu, 0x03AFu, 0x0000u, 0x03CCu, 0x0000u, 0x03CDu, 0x03CEu,
+ 0x0000u, 0x03B1u, 0x03B2u, 0x03B3u, 0x03B4u, 0x03B5u, 0x03B6u, 0x03B7u,
+ 0x03B8u, 0x03B9u, 0x03BAu, 0x03BBu, 0x03BCu, 0x03BDu, 0x03BEu, 0x03BFu,
+ 0x03C0u, 0x03C1u, 0x0000u, 0x03C3u, 0x03C4u, 0x03C5u, 0x03C6u, 0x03C7u,
+ 0x03C8u, 0x03C9u, 0x03CAu, 0x03CBu, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x03D9u, 0x0000u, 0x03DBu, 0x0000u, 0x03DDu, 0x0000u, 0x03DFu, 0x0000u,
+ 0x03E1u, 0x0000u, 0x03E3u, 0x0000u, 0x03E5u, 0x0000u, 0x03E7u, 0x0000u,
+ 0x03E9u, 0x0000u, 0x03EBu, 0x0000u, 0x03EDu, 0x0000u, 0x03EFu, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x03B8u, 0x0000u, 0x0000u, 0x03F8u,
+ 0x0000u, 0x03F2u, 0x03FBu, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0450u, 0x0451u, 0x0452u, 0x0453u, 0x0454u, 0x0455u, 0x0456u, 0x0457u,
+ 0x0458u, 0x0459u, 0x045Au, 0x045Bu, 0x045Cu, 0x045Du, 0x045Eu, 0x045Fu,
+ 0x0430u, 0x0431u, 0x0432u, 0x0433u, 0x0434u, 0x0435u, 0x0436u, 0x0437u,
+ 0x0438u, 0x0439u, 0x043Au, 0x043Bu, 0x043Cu, 0x043Du, 0x043Eu, 0x043Fu,
+ 0x0440u, 0x0441u, 0x0442u, 0x0443u, 0x0444u, 0x0445u, 0x0446u, 0x0447u,
+ 0x0448u, 0x0449u, 0x044Au, 0x044Bu, 0x044Cu, 0x044Du, 0x044Eu, 0x044Fu,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0461u, 0x0000u, 0x0463u, 0x0000u, 0x0465u, 0x0000u, 0x0467u, 0x0000u,
+ 0x0469u, 0x0000u, 0x046Bu, 0x0000u, 0x046Du, 0x0000u, 0x046Fu, 0x0000u,
+ 0x0471u, 0x0000u, 0x0473u, 0x0000u, 0x0475u, 0x0000u, 0x0477u, 0x0000u,
+ 0x0479u, 0x0000u, 0x047Bu, 0x0000u, 0x047Du, 0x0000u, 0x047Fu, 0x0000u,
+ 0x0481u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x048Bu, 0x0000u, 0x048Du, 0x0000u, 0x048Fu, 0x0000u,
+ 0x0491u, 0x0000u, 0x0493u, 0x0000u, 0x0495u, 0x0000u, 0x0497u, 0x0000u,
+ 0x0499u, 0x0000u, 0x049Bu, 0x0000u, 0x049Du, 0x0000u, 0x049Fu, 0x0000u,
+ 0x04A1u, 0x0000u, 0x04A3u, 0x0000u, 0x04A5u, 0x0000u, 0x04A7u, 0x0000u,
+ 0x04A9u, 0x0000u, 0x04ABu, 0x0000u, 0x04ADu, 0x0000u, 0x04AFu, 0x0000u,
+ 0x04B1u, 0x0000u, 0x04B3u, 0x0000u, 0x04B5u, 0x0000u, 0x04B7u, 0x0000u,
+ 0x04B9u, 0x0000u, 0x04BBu, 0x0000u, 0x04BDu, 0x0000u, 0x04BFu, 0x0000u,
+ 0x0000u, 0x04C2u, 0x0000u, 0x04C4u, 0x0000u, 0x04C6u, 0x0000u, 0x04C8u,
+ 0x0000u, 0x04CAu, 0x0000u, 0x04CCu, 0x0000u, 0x04CEu, 0x0000u, 0x0000u,
+ 0x04D1u, 0x0000u, 0x04D3u, 0x0000u, 0x04D5u, 0x0000u, 0x04D7u, 0x0000u,
+ 0x04D9u, 0x0000u, 0x04DBu, 0x0000u, 0x04DDu, 0x0000u, 0x04DFu, 0x0000u,
+ 0x04E1u, 0x0000u, 0x04E3u, 0x0000u, 0x04E5u, 0x0000u, 0x04E7u, 0x0000u,
+ 0x04E9u, 0x0000u, 0x04EBu, 0x0000u, 0x04EDu, 0x0000u, 0x04EFu, 0x0000u,
+ 0x04F1u, 0x0000u, 0x04F3u, 0x0000u, 0x04F5u, 0x0000u, 0x0000u, 0x0000u,
+ 0x04F9u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0501u, 0x0000u, 0x0503u, 0x0000u, 0x0505u, 0x0000u, 0x0507u, 0x0000u,
+ 0x0509u, 0x0000u, 0x050Bu, 0x0000u, 0x050Du, 0x0000u, 0x050Fu, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0561u, 0x0562u, 0x0563u, 0x0564u, 0x0565u, 0x0566u, 0x0567u,
+ 0x0568u, 0x0569u, 0x056Au, 0x056Bu, 0x056Cu, 0x056Du, 0x056Eu, 0x056Fu,
+ 0x0570u, 0x0571u, 0x0572u, 0x0573u, 0x0574u, 0x0575u, 0x0576u, 0x0577u,
+ 0x0578u, 0x0579u, 0x057Au, 0x057Bu, 0x057Cu, 0x057Du, 0x057Eu, 0x057Fu,
+ 0x0580u, 0x0581u, 0x0582u, 0x0583u, 0x0584u, 0x0585u, 0x0586u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1E01u, 0x0000u, 0x1E03u, 0x0000u, 0x1E05u, 0x0000u, 0x1E07u, 0x0000u,
+ 0x1E09u, 0x0000u, 0x1E0Bu, 0x0000u, 0x1E0Du, 0x0000u, 0x1E0Fu, 0x0000u,
+ 0x1E11u, 0x0000u, 0x1E13u, 0x0000u, 0x1E15u, 0x0000u, 0x1E17u, 0x0000u,
+ 0x1E19u, 0x0000u, 0x1E1Bu, 0x0000u, 0x1E1Du, 0x0000u, 0x1E1Fu, 0x0000u,
+ 0x1E21u, 0x0000u, 0x1E23u, 0x0000u, 0x1E25u, 0x0000u, 0x1E27u, 0x0000u,
+ 0x1E29u, 0x0000u, 0x1E2Bu, 0x0000u, 0x1E2Du, 0x0000u, 0x1E2Fu, 0x0000u,
+ 0x1E31u, 0x0000u, 0x1E33u, 0x0000u, 0x1E35u, 0x0000u, 0x1E37u, 0x0000u,
+ 0x1E39u, 0x0000u, 0x1E3Bu, 0x0000u, 0x1E3Du, 0x0000u, 0x1E3Fu, 0x0000u,
+ 0x1E41u, 0x0000u, 0x1E43u, 0x0000u, 0x1E45u, 0x0000u, 0x1E47u, 0x0000u,
+ 0x1E49u, 0x0000u, 0x1E4Bu, 0x0000u, 0x1E4Du, 0x0000u, 0x1E4Fu, 0x0000u,
+ 0x1E51u, 0x0000u, 0x1E53u, 0x0000u, 0x1E55u, 0x0000u, 0x1E57u, 0x0000u,
+ 0x1E59u, 0x0000u, 0x1E5Bu, 0x0000u, 0x1E5Du, 0x0000u, 0x1E5Fu, 0x0000u,
+ 0x1E61u, 0x0000u, 0x1E63u, 0x0000u, 0x1E65u, 0x0000u, 0x1E67u, 0x0000u,
+ 0x1E69u, 0x0000u, 0x1E6Bu, 0x0000u, 0x1E6Du, 0x0000u, 0x1E6Fu, 0x0000u,
+ 0x1E71u, 0x0000u, 0x1E73u, 0x0000u, 0x1E75u, 0x0000u, 0x1E77u, 0x0000u,
+ 0x1E79u, 0x0000u, 0x1E7Bu, 0x0000u, 0x1E7Du, 0x0000u, 0x1E7Fu, 0x0000u,
+ 0x1E81u, 0x0000u, 0x1E83u, 0x0000u, 0x1E85u, 0x0000u, 0x1E87u, 0x0000u,
+ 0x1E89u, 0x0000u, 0x1E8Bu, 0x0000u, 0x1E8Du, 0x0000u, 0x1E8Fu, 0x0000u,
+ 0x1E91u, 0x0000u, 0x1E93u, 0x0000u, 0x1E95u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1EA1u, 0x0000u, 0x1EA3u, 0x0000u, 0x1EA5u, 0x0000u, 0x1EA7u, 0x0000u,
+ 0x1EA9u, 0x0000u, 0x1EABu, 0x0000u, 0x1EADu, 0x0000u, 0x1EAFu, 0x0000u,
+ 0x1EB1u, 0x0000u, 0x1EB3u, 0x0000u, 0x1EB5u, 0x0000u, 0x1EB7u, 0x0000u,
+ 0x1EB9u, 0x0000u, 0x1EBBu, 0x0000u, 0x1EBDu, 0x0000u, 0x1EBFu, 0x0000u,
+ 0x1EC1u, 0x0000u, 0x1EC3u, 0x0000u, 0x1EC5u, 0x0000u, 0x1EC7u, 0x0000u,
+ 0x1EC9u, 0x0000u, 0x1ECBu, 0x0000u, 0x1ECDu, 0x0000u, 0x1ECFu, 0x0000u,
+ 0x1ED1u, 0x0000u, 0x1ED3u, 0x0000u, 0x1ED5u, 0x0000u, 0x1ED7u, 0x0000u,
+ 0x1ED9u, 0x0000u, 0x1EDBu, 0x0000u, 0x1EDDu, 0x0000u, 0x1EDFu, 0x0000u,
+ 0x1EE1u, 0x0000u, 0x1EE3u, 0x0000u, 0x1EE5u, 0x0000u, 0x1EE7u, 0x0000u,
+ 0x1EE9u, 0x0000u, 0x1EEBu, 0x0000u, 0x1EEDu, 0x0000u, 0x1EEFu, 0x0000u,
+ 0x1EF1u, 0x0000u, 0x1EF3u, 0x0000u, 0x1EF5u, 0x0000u, 0x1EF7u, 0x0000u,
+ 0x1EF9u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F00u, 0x1F01u, 0x1F02u, 0x1F03u, 0x1F04u, 0x1F05u, 0x1F06u, 0x1F07u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F10u, 0x1F11u, 0x1F12u, 0x1F13u, 0x1F14u, 0x1F15u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F20u, 0x1F21u, 0x1F22u, 0x1F23u, 0x1F24u, 0x1F25u, 0x1F26u, 0x1F27u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F30u, 0x1F31u, 0x1F32u, 0x1F33u, 0x1F34u, 0x1F35u, 0x1F36u, 0x1F37u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F40u, 0x1F41u, 0x1F42u, 0x1F43u, 0x1F44u, 0x1F45u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x1F51u, 0x0000u, 0x1F53u, 0x0000u, 0x1F55u, 0x0000u, 0x1F57u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F60u, 0x1F61u, 0x1F62u, 0x1F63u, 0x1F64u, 0x1F65u, 0x1F66u, 0x1F67u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F80u, 0x1F81u, 0x1F82u, 0x1F83u, 0x1F84u, 0x1F85u, 0x1F86u, 0x1F87u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F90u, 0x1F91u, 0x1F92u, 0x1F93u, 0x1F94u, 0x1F95u, 0x1F96u, 0x1F97u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1FA0u, 0x1FA1u, 0x1FA2u, 0x1FA3u, 0x1FA4u, 0x1FA5u, 0x1FA6u, 0x1FA7u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1FB0u, 0x1FB1u, 0x1F70u, 0x1F71u, 0x1FB3u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F72u, 0x1F73u, 0x1F74u, 0x1F75u, 0x1FC3u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1FD0u, 0x1FD1u, 0x1F76u, 0x1F77u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1FE0u, 0x1FE1u, 0x1F7Au, 0x1F7Bu, 0x1FE5u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x1F78u, 0x1F79u, 0x1F7Cu, 0x1F7Du, 0x1FF3u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x03C9u, 0x0000u,
+ 0x0000u, 0x0000u, 0x006Bu, 0x00E5u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x2170u, 0x2171u, 0x2172u, 0x2173u, 0x2174u, 0x2175u, 0x2176u, 0x2177u,
+ 0x2178u, 0x2179u, 0x217Au, 0x217Bu, 0x217Cu, 0x217Du, 0x217Eu, 0x217Fu,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x24D0u, 0x24D1u,
+ 0x24D2u, 0x24D3u, 0x24D4u, 0x24D5u, 0x24D6u, 0x24D7u, 0x24D8u, 0x24D9u,
+ 0x24DAu, 0x24DBu, 0x24DCu, 0x24DDu, 0x24DEu, 0x24DFu, 0x24E0u, 0x24E1u,
+ 0x24E2u, 0x24E3u, 0x24E4u, 0x24E5u, 0x24E6u, 0x24E7u, 0x24E8u, 0x24E9u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0xFF41u, 0xFF42u, 0xFF43u, 0xFF44u, 0xFF45u, 0xFF46u, 0xFF47u,
+ 0xFF48u, 0xFF49u, 0xFF4Au, 0xFF4Bu, 0xFF4Cu, 0xFF4Du, 0xFF4Eu, 0xFF4Fu,
+ 0xFF50u, 0xFF51u, 0xFF52u, 0xFF53u, 0xFF54u, 0xFF55u, 0xFF56u, 0xFF57u,
+ 0xFF58u, 0xFF59u, 0xFF5Au, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
+ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
};
unsigned short *Fast_UnicodeUtil::_compLowerCase[256]={
- Fast_intCompLowerCase+0x0000, /* Page 0x00 */
- Fast_intCompLowerCase+0x0100, /* Page 0x01 */
- Fast_intCompLowerCase+0x0200, /* Page 0x02 */
- Fast_intCompLowerCase+0x0300, /* Page 0x03 */
- Fast_intCompLowerCase+0x0400, /* Page 0x04 */
- Fast_intCompLowerCase+0x0500, /* Page 0x05 */
- Fast_intCompLowerCase+0x0600, /* Page 0x06 */
- Fast_intCompLowerCase+0x0600, /* Page 0x07 */
- Fast_intCompLowerCase+0x0600, /* Page 0x08 */
- Fast_intCompLowerCase+0x0600, /* Page 0x09 */
- Fast_intCompLowerCase+0x0600, /* Page 0x0A */
- Fast_intCompLowerCase+0x0600, /* Page 0x0B */
- Fast_intCompLowerCase+0x0600, /* Page 0x0C */
- Fast_intCompLowerCase+0x0600, /* Page 0x0D */
- Fast_intCompLowerCase+0x0600, /* Page 0x0E */
- Fast_intCompLowerCase+0x0600, /* Page 0x0F */
- Fast_intCompLowerCase+0x0600, /* Page 0x10 */
- Fast_intCompLowerCase+0x0600, /* Page 0x11 */
- Fast_intCompLowerCase+0x0600, /* Page 0x12 */
- Fast_intCompLowerCase+0x0600, /* Page 0x13 */
- Fast_intCompLowerCase+0x0600, /* Page 0x14 */
- Fast_intCompLowerCase+0x0600, /* Page 0x15 */
- Fast_intCompLowerCase+0x0600, /* Page 0x16 */
- Fast_intCompLowerCase+0x0600, /* Page 0x17 */
- Fast_intCompLowerCase+0x0600, /* Page 0x18 */
- Fast_intCompLowerCase+0x0600, /* Page 0x19 */
- Fast_intCompLowerCase+0x0600, /* Page 0x1A */
- Fast_intCompLowerCase+0x0600, /* Page 0x1B */
- Fast_intCompLowerCase+0x0600, /* Page 0x1C */
- Fast_intCompLowerCase+0x0600, /* Page 0x1D */
- Fast_intCompLowerCase+0x0700, /* Page 0x1E */
- Fast_intCompLowerCase+0x0800, /* Page 0x1F */
- Fast_intCompLowerCase+0x0600, /* Page 0x20 */
- Fast_intCompLowerCase+0x0900, /* Page 0x21 */
- Fast_intCompLowerCase+0x0600, /* Page 0x22 */
- Fast_intCompLowerCase+0x0600, /* Page 0x23 */
- Fast_intCompLowerCase+0x0A00, /* Page 0x24 */
- Fast_intCompLowerCase+0x0600, /* Page 0x25 */
- Fast_intCompLowerCase+0x0600, /* Page 0x26 */
- Fast_intCompLowerCase+0x0600, /* Page 0x27 */
- Fast_intCompLowerCase+0x0600, /* Page 0x28 */
- Fast_intCompLowerCase+0x0600, /* Page 0x29 */
- Fast_intCompLowerCase+0x0600, /* Page 0x2A */
- Fast_intCompLowerCase+0x0600, /* Page 0x2B */
- Fast_intCompLowerCase+0x0600, /* Page 0x2C */
- Fast_intCompLowerCase+0x0600, /* Page 0x2D */
- Fast_intCompLowerCase+0x0600, /* Page 0x2E */
- Fast_intCompLowerCase+0x0600, /* Page 0x2F */
- Fast_intCompLowerCase+0x0600, /* Page 0x30 */
- Fast_intCompLowerCase+0x0600, /* Page 0x31 */
- Fast_intCompLowerCase+0x0600, /* Page 0x32 */
- Fast_intCompLowerCase+0x0600, /* Page 0x33 */
- Fast_intCompLowerCase+0x0600, /* Page 0x34 */
- Fast_intCompLowerCase+0x0600, /* Page 0x35 */
- Fast_intCompLowerCase+0x0600, /* Page 0x36 */
- Fast_intCompLowerCase+0x0600, /* Page 0x37 */
- Fast_intCompLowerCase+0x0600, /* Page 0x38 */
- Fast_intCompLowerCase+0x0600, /* Page 0x39 */
- Fast_intCompLowerCase+0x0600, /* Page 0x3A */
- Fast_intCompLowerCase+0x0600, /* Page 0x3B */
- Fast_intCompLowerCase+0x0600, /* Page 0x3C */
- Fast_intCompLowerCase+0x0600, /* Page 0x3D */
- Fast_intCompLowerCase+0x0600, /* Page 0x3E */
- Fast_intCompLowerCase+0x0600, /* Page 0x3F */
- Fast_intCompLowerCase+0x0600, /* Page 0x40 */
- Fast_intCompLowerCase+0x0600, /* Page 0x41 */
- Fast_intCompLowerCase+0x0600, /* Page 0x42 */
- Fast_intCompLowerCase+0x0600, /* Page 0x43 */
- Fast_intCompLowerCase+0x0600, /* Page 0x44 */
- Fast_intCompLowerCase+0x0600, /* Page 0x45 */
- Fast_intCompLowerCase+0x0600, /* Page 0x46 */
- Fast_intCompLowerCase+0x0600, /* Page 0x47 */
- Fast_intCompLowerCase+0x0600, /* Page 0x48 */
- Fast_intCompLowerCase+0x0600, /* Page 0x49 */
- Fast_intCompLowerCase+0x0600, /* Page 0x4A */
- Fast_intCompLowerCase+0x0600, /* Page 0x4B */
- Fast_intCompLowerCase+0x0600, /* Page 0x4C */
- Fast_intCompLowerCase+0x0600, /* Page 0x4D */
- Fast_intCompLowerCase+0x0600, /* Page 0x4E */
- Fast_intCompLowerCase+0x0600, /* Page 0x4F */
- Fast_intCompLowerCase+0x0600, /* Page 0x50 */
- Fast_intCompLowerCase+0x0600, /* Page 0x51 */
- Fast_intCompLowerCase+0x0600, /* Page 0x52 */
- Fast_intCompLowerCase+0x0600, /* Page 0x53 */
- Fast_intCompLowerCase+0x0600, /* Page 0x54 */
- Fast_intCompLowerCase+0x0600, /* Page 0x55 */
- Fast_intCompLowerCase+0x0600, /* Page 0x56 */
- Fast_intCompLowerCase+0x0600, /* Page 0x57 */
- Fast_intCompLowerCase+0x0600, /* Page 0x58 */
- Fast_intCompLowerCase+0x0600, /* Page 0x59 */
- Fast_intCompLowerCase+0x0600, /* Page 0x5A */
- Fast_intCompLowerCase+0x0600, /* Page 0x5B */
- Fast_intCompLowerCase+0x0600, /* Page 0x5C */
- Fast_intCompLowerCase+0x0600, /* Page 0x5D */
- Fast_intCompLowerCase+0x0600, /* Page 0x5E */
- Fast_intCompLowerCase+0x0600, /* Page 0x5F */
- Fast_intCompLowerCase+0x0600, /* Page 0x60 */
- Fast_intCompLowerCase+0x0600, /* Page 0x61 */
- Fast_intCompLowerCase+0x0600, /* Page 0x62 */
- Fast_intCompLowerCase+0x0600, /* Page 0x63 */
- Fast_intCompLowerCase+0x0600, /* Page 0x64 */
- Fast_intCompLowerCase+0x0600, /* Page 0x65 */
- Fast_intCompLowerCase+0x0600, /* Page 0x66 */
- Fast_intCompLowerCase+0x0600, /* Page 0x67 */
- Fast_intCompLowerCase+0x0600, /* Page 0x68 */
- Fast_intCompLowerCase+0x0600, /* Page 0x69 */
- Fast_intCompLowerCase+0x0600, /* Page 0x6A */
- Fast_intCompLowerCase+0x0600, /* Page 0x6B */
- Fast_intCompLowerCase+0x0600, /* Page 0x6C */
- Fast_intCompLowerCase+0x0600, /* Page 0x6D */
- Fast_intCompLowerCase+0x0600, /* Page 0x6E */
- Fast_intCompLowerCase+0x0600, /* Page 0x6F */
- Fast_intCompLowerCase+0x0600, /* Page 0x70 */
- Fast_intCompLowerCase+0x0600, /* Page 0x71 */
- Fast_intCompLowerCase+0x0600, /* Page 0x72 */
- Fast_intCompLowerCase+0x0600, /* Page 0x73 */
- Fast_intCompLowerCase+0x0600, /* Page 0x74 */
- Fast_intCompLowerCase+0x0600, /* Page 0x75 */
- Fast_intCompLowerCase+0x0600, /* Page 0x76 */
- Fast_intCompLowerCase+0x0600, /* Page 0x77 */
- Fast_intCompLowerCase+0x0600, /* Page 0x78 */
- Fast_intCompLowerCase+0x0600, /* Page 0x79 */
- Fast_intCompLowerCase+0x0600, /* Page 0x7A */
- Fast_intCompLowerCase+0x0600, /* Page 0x7B */
- Fast_intCompLowerCase+0x0600, /* Page 0x7C */
- Fast_intCompLowerCase+0x0600, /* Page 0x7D */
- Fast_intCompLowerCase+0x0600, /* Page 0x7E */
- Fast_intCompLowerCase+0x0600, /* Page 0x7F */
- Fast_intCompLowerCase+0x0600, /* Page 0x80 */
- Fast_intCompLowerCase+0x0600, /* Page 0x81 */
- Fast_intCompLowerCase+0x0600, /* Page 0x82 */
- Fast_intCompLowerCase+0x0600, /* Page 0x83 */
- Fast_intCompLowerCase+0x0600, /* Page 0x84 */
- Fast_intCompLowerCase+0x0600, /* Page 0x85 */
- Fast_intCompLowerCase+0x0600, /* Page 0x86 */
- Fast_intCompLowerCase+0x0600, /* Page 0x87 */
- Fast_intCompLowerCase+0x0600, /* Page 0x88 */
- Fast_intCompLowerCase+0x0600, /* Page 0x89 */
- Fast_intCompLowerCase+0x0600, /* Page 0x8A */
- Fast_intCompLowerCase+0x0600, /* Page 0x8B */
- Fast_intCompLowerCase+0x0600, /* Page 0x8C */
- Fast_intCompLowerCase+0x0600, /* Page 0x8D */
- Fast_intCompLowerCase+0x0600, /* Page 0x8E */
- Fast_intCompLowerCase+0x0600, /* Page 0x8F */
- Fast_intCompLowerCase+0x0600, /* Page 0x90 */
- Fast_intCompLowerCase+0x0600, /* Page 0x91 */
- Fast_intCompLowerCase+0x0600, /* Page 0x92 */
- Fast_intCompLowerCase+0x0600, /* Page 0x93 */
- Fast_intCompLowerCase+0x0600, /* Page 0x94 */
- Fast_intCompLowerCase+0x0600, /* Page 0x95 */
- Fast_intCompLowerCase+0x0600, /* Page 0x96 */
- Fast_intCompLowerCase+0x0600, /* Page 0x97 */
- Fast_intCompLowerCase+0x0600, /* Page 0x98 */
- Fast_intCompLowerCase+0x0600, /* Page 0x99 */
- Fast_intCompLowerCase+0x0600, /* Page 0x9A */
- Fast_intCompLowerCase+0x0600, /* Page 0x9B */
- Fast_intCompLowerCase+0x0600, /* Page 0x9C */
- Fast_intCompLowerCase+0x0600, /* Page 0x9D */
- Fast_intCompLowerCase+0x0600, /* Page 0x9E */
- Fast_intCompLowerCase+0x0600, /* Page 0x9F */
- Fast_intCompLowerCase+0x0600, /* Page 0xA0 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA1 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA2 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA3 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA4 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA5 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA6 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA7 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA8 */
- Fast_intCompLowerCase+0x0600, /* Page 0xA9 */
- Fast_intCompLowerCase+0x0600, /* Page 0xAA */
- Fast_intCompLowerCase+0x0600, /* Page 0xAB */
- Fast_intCompLowerCase+0x0600, /* Page 0xAC */
- Fast_intCompLowerCase+0x0600, /* Page 0xAD */
- Fast_intCompLowerCase+0x0600, /* Page 0xAE */
- Fast_intCompLowerCase+0x0600, /* Page 0xAF */
- Fast_intCompLowerCase+0x0600, /* Page 0xB0 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB1 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB2 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB3 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB4 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB5 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB6 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB7 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB8 */
- Fast_intCompLowerCase+0x0600, /* Page 0xB9 */
- Fast_intCompLowerCase+0x0600, /* Page 0xBA */
- Fast_intCompLowerCase+0x0600, /* Page 0xBB */
- Fast_intCompLowerCase+0x0600, /* Page 0xBC */
- Fast_intCompLowerCase+0x0600, /* Page 0xBD */
- Fast_intCompLowerCase+0x0600, /* Page 0xBE */
- Fast_intCompLowerCase+0x0600, /* Page 0xBF */
- Fast_intCompLowerCase+0x0600, /* Page 0xC0 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC1 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC2 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC3 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC4 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC5 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC6 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC7 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC8 */
- Fast_intCompLowerCase+0x0600, /* Page 0xC9 */
- Fast_intCompLowerCase+0x0600, /* Page 0xCA */
- Fast_intCompLowerCase+0x0600, /* Page 0xCB */
- Fast_intCompLowerCase+0x0600, /* Page 0xCC */
- Fast_intCompLowerCase+0x0600, /* Page 0xCD */
- Fast_intCompLowerCase+0x0600, /* Page 0xCE */
- Fast_intCompLowerCase+0x0600, /* Page 0xCF */
- Fast_intCompLowerCase+0x0600, /* Page 0xD0 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD1 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD2 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD3 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD4 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD5 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD6 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD7 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD8 */
- Fast_intCompLowerCase+0x0600, /* Page 0xD9 */
- Fast_intCompLowerCase+0x0600, /* Page 0xDA */
- Fast_intCompLowerCase+0x0600, /* Page 0xDB */
- Fast_intCompLowerCase+0x0600, /* Page 0xDC */
- Fast_intCompLowerCase+0x0600, /* Page 0xDD */
- Fast_intCompLowerCase+0x0600, /* Page 0xDE */
- Fast_intCompLowerCase+0x0600, /* Page 0xDF */
- Fast_intCompLowerCase+0x0600, /* Page 0xE0 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE1 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE2 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE3 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE4 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE5 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE6 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE7 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE8 */
- Fast_intCompLowerCase+0x0600, /* Page 0xE9 */
- Fast_intCompLowerCase+0x0600, /* Page 0xEA */
- Fast_intCompLowerCase+0x0600, /* Page 0xEB */
- Fast_intCompLowerCase+0x0600, /* Page 0xEC */
- Fast_intCompLowerCase+0x0600, /* Page 0xED */
- Fast_intCompLowerCase+0x0600, /* Page 0xEE */
- Fast_intCompLowerCase+0x0600, /* Page 0xEF */
- Fast_intCompLowerCase+0x0600, /* Page 0xF0 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF1 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF2 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF3 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF4 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF5 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF6 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF7 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF8 */
- Fast_intCompLowerCase+0x0600, /* Page 0xF9 */
- Fast_intCompLowerCase+0x0600, /* Page 0xFA */
- Fast_intCompLowerCase+0x0600, /* Page 0xFB */
- Fast_intCompLowerCase+0x0600, /* Page 0xFC */
- Fast_intCompLowerCase+0x0600, /* Page 0xFD */
- Fast_intCompLowerCase+0x0600, /* Page 0xFE */
- Fast_intCompLowerCase+0x0B00 /* Page 0xFF */
+ Fast_intCompLowerCase+0x0000, /* Page 0x00 */
+ Fast_intCompLowerCase+0x0100, /* Page 0x01 */
+ Fast_intCompLowerCase+0x0200, /* Page 0x02 */
+ Fast_intCompLowerCase+0x0300, /* Page 0x03 */
+ Fast_intCompLowerCase+0x0400, /* Page 0x04 */
+ Fast_intCompLowerCase+0x0500, /* Page 0x05 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x06 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x07 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x08 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x09 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x0A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x0B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x0C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x0D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x0E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x0F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x10 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x11 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x12 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x13 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x14 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x15 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x16 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x17 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x18 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x19 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x1A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x1B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x1C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x1D */
+ Fast_intCompLowerCase+0x0700, /* Page 0x1E */
+ Fast_intCompLowerCase+0x0800, /* Page 0x1F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x20 */
+ Fast_intCompLowerCase+0x0900, /* Page 0x21 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x22 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x23 */
+ Fast_intCompLowerCase+0x0A00, /* Page 0x24 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x25 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x26 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x27 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x28 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x29 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x2A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x2B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x2C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x2D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x2E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x2F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x30 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x31 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x32 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x33 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x34 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x35 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x36 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x37 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x38 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x39 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x3A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x3B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x3C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x3D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x3E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x3F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x40 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x41 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x42 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x43 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x44 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x45 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x46 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x47 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x48 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x49 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x4A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x4B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x4C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x4D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x4E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x4F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x50 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x51 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x52 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x53 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x54 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x55 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x56 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x57 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x58 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x59 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x5A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x5B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x5C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x5D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x5E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x5F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x60 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x61 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x62 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x63 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x64 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x65 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x66 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x67 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x68 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x69 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x6A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x6B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x6C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x6D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x6E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x6F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x70 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x71 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x72 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x73 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x74 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x75 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x76 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x77 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x78 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x79 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x7A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x7B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x7C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x7D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x7E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x7F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x80 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x81 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x82 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x83 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x84 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x85 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x86 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x87 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x88 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x89 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x8A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x8B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x8C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x8D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x8E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x8F */
+ Fast_intCompLowerCase+0x0600, /* Page 0x90 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x91 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x92 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x93 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x94 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x95 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x96 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x97 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x98 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x99 */
+ Fast_intCompLowerCase+0x0600, /* Page 0x9A */
+ Fast_intCompLowerCase+0x0600, /* Page 0x9B */
+ Fast_intCompLowerCase+0x0600, /* Page 0x9C */
+ Fast_intCompLowerCase+0x0600, /* Page 0x9D */
+ Fast_intCompLowerCase+0x0600, /* Page 0x9E */
+ Fast_intCompLowerCase+0x0600, /* Page 0x9F */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA0 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA1 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA2 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA3 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA4 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA5 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA6 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA7 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA8 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xA9 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xAA */
+ Fast_intCompLowerCase+0x0600, /* Page 0xAB */
+ Fast_intCompLowerCase+0x0600, /* Page 0xAC */
+ Fast_intCompLowerCase+0x0600, /* Page 0xAD */
+ Fast_intCompLowerCase+0x0600, /* Page 0xAE */
+ Fast_intCompLowerCase+0x0600, /* Page 0xAF */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB0 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB1 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB2 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB3 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB4 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB5 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB6 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB7 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB8 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xB9 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xBA */
+ Fast_intCompLowerCase+0x0600, /* Page 0xBB */
+ Fast_intCompLowerCase+0x0600, /* Page 0xBC */
+ Fast_intCompLowerCase+0x0600, /* Page 0xBD */
+ Fast_intCompLowerCase+0x0600, /* Page 0xBE */
+ Fast_intCompLowerCase+0x0600, /* Page 0xBF */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC0 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC1 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC2 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC3 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC4 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC5 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC6 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC7 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC8 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xC9 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xCA */
+ Fast_intCompLowerCase+0x0600, /* Page 0xCB */
+ Fast_intCompLowerCase+0x0600, /* Page 0xCC */
+ Fast_intCompLowerCase+0x0600, /* Page 0xCD */
+ Fast_intCompLowerCase+0x0600, /* Page 0xCE */
+ Fast_intCompLowerCase+0x0600, /* Page 0xCF */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD0 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD1 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD2 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD3 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD4 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD5 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD6 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD7 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD8 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xD9 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xDA */
+ Fast_intCompLowerCase+0x0600, /* Page 0xDB */
+ Fast_intCompLowerCase+0x0600, /* Page 0xDC */
+ Fast_intCompLowerCase+0x0600, /* Page 0xDD */
+ Fast_intCompLowerCase+0x0600, /* Page 0xDE */
+ Fast_intCompLowerCase+0x0600, /* Page 0xDF */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE0 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE1 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE2 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE3 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE4 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE5 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE6 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE7 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE8 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xE9 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xEA */
+ Fast_intCompLowerCase+0x0600, /* Page 0xEB */
+ Fast_intCompLowerCase+0x0600, /* Page 0xEC */
+ Fast_intCompLowerCase+0x0600, /* Page 0xED */
+ Fast_intCompLowerCase+0x0600, /* Page 0xEE */
+ Fast_intCompLowerCase+0x0600, /* Page 0xEF */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF0 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF1 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF2 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF3 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF4 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF5 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF6 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF7 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF8 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xF9 */
+ Fast_intCompLowerCase+0x0600, /* Page 0xFA */
+ Fast_intCompLowerCase+0x0600, /* Page 0xFB */
+ Fast_intCompLowerCase+0x0600, /* Page 0xFC */
+ Fast_intCompLowerCase+0x0600, /* Page 0xFD */
+ Fast_intCompLowerCase+0x0600, /* Page 0xFE */
+ Fast_intCompLowerCase+0x0B00 /* Page 0xFF */
};
/* End of auto-generated file */
diff --git a/fastlib/src/vespa/fastlib/text/unicodeutil.cpp b/fastlib/src/vespa/fastlib/text/unicodeutil.cpp
index 0dca87a5701..822f8044ded 100644
--- a/fastlib/src/vespa/fastlib/text/unicodeutil.cpp
+++ b/fastlib/src/vespa/fastlib/text/unicodeutil.cpp
@@ -24,144 +24,144 @@ Initialize _G_Initializer;
void
Fast_UnicodeUtil::InitTables(void)
{
- /**
- * Hack for Katakana accent marks (torgeir)
- */
- _compCharProps[(0xFF9E >> 8)][(0xFF9E & 255)] |= 32;
- _compCharProps[(0xFF9F >> 8)][(0xFF9F & 255)] |= 32;
-
- for (uint32_t i = 0; i < 256; i++) { _utf8header[i] = 0; }
-
- // Initialize _utf8header array
- for (uint32_t i = 0x00; i <= 0x7F; i++) { _utf8header[i] = 1; }
- for (uint32_t i = 0xC0; i <= 0xDF; i++) { _utf8header[i] = 2; }
- for (uint32_t i = 0xE0; i <= 0xEF; i++) { _utf8header[i] = 3; }
- for (uint32_t i = 0xF0; i <= 0xF7; i++) { _utf8header[i] = 4; }
- for (uint32_t i = 0xF8; i <= 0xFB; i++) { _utf8header[i] = 5; }
- for (uint32_t i = 0xFC; i <= 0xFD; i++) { _utf8header[i] = 6; }
+ /**
+ * Hack for Katakana accent marks (torgeir)
+ */
+ _compCharProps[(0xFF9E >> 8)][(0xFF9E & 255)] |= 32;
+ _compCharProps[(0xFF9F >> 8)][(0xFF9F & 255)] |= 32;
+
+ for (uint32_t i = 0; i < 256; i++) { _utf8header[i] = 0; }
+
+ // Initialize _utf8header array
+ for (uint32_t i = 0x00; i <= 0x7F; i++) { _utf8header[i] = 1; }
+ for (uint32_t i = 0xC0; i <= 0xDF; i++) { _utf8header[i] = 2; }
+ for (uint32_t i = 0xE0; i <= 0xEF; i++) { _utf8header[i] = 3; }
+ for (uint32_t i = 0xF0; i <= 0xF7; i++) { _utf8header[i] = 4; }
+ for (uint32_t i = 0xF8; i <= 0xFB; i++) { _utf8header[i] = 5; }
+ for (uint32_t i = 0xFC; i <= 0xFD; i++) { _utf8header[i] = 6; }
}
char *
Fast_UnicodeUtil::utf8ncopy(char *dst, const ucs4_t *src,
- int maxdst, int maxsrc)
+ int maxdst, int maxsrc)
{
- char * p = dst;
- char * edst = dst + maxdst;
-
- for (const ucs4_t *esrc(src + maxsrc); (src < esrc) && (*src != 0) && (p < edst); src++) {
- ucs4_t i(*src);
- if (i < 128)
- *p++ = i;
- else if (i < 0x800) {
- if (p + 1 >= edst)
- break;
- *p++ = (i >> 6) | 0xc0;
- *p++ = (i & 63) | 0x80;
- } else if (i < 0x10000) {
- if (p + 2 >= edst)
- break;
- *p++ = (i >> 12) | 0xe0;
- *p++ = ((i >> 6) & 63) | 0x80;
- *p++ = (i & 63) | 0x80;
- } else if (i < 0x200000) {
- if (p + 3 >= edst)
- break;
- *p++ = (i >> 18) | 0xf0;
- *p++ = ((i >> 12) & 63) | 0x80;
- *p++ = ((i >> 6) & 63) | 0x80;
- *p++ = (i & 63) | 0x80;
- } else if (i < 0x4000000) {
- if (p + 4 >= edst)
- break;
- *p++ = (i >> 24) | 0xf8;
- *p++ = ((i >> 18) & 63) | 0x80;
- *p++ = ((i >> 12) & 63) | 0x80;
- *p++ = ((i >> 6) & 63) | 0x80;
- *p++ = (i & 63) | 0x80;
- } else {
- if (p + 5 >= edst)
- break;
- *p++ = (i >> 30) | 0xfc;
- *p++ = ((i >> 24) & 63) | 0x80;
- *p++ = ((i >> 18) & 63) | 0x80;
- *p++ = ((i >> 12) & 63) | 0x80;
- *p++ = ((i >> 6) & 63) | 0x80;
- *p++ = (i & 63) | 0x80;
+ char * p = dst;
+ char * edst = dst + maxdst;
+
+ for (const ucs4_t *esrc(src + maxsrc); (src < esrc) && (*src != 0) && (p < edst); src++) {
+ ucs4_t i(*src);
+ if (i < 128)
+ *p++ = i;
+ else if (i < 0x800) {
+ if (p + 1 >= edst)
+ break;
+ *p++ = (i >> 6) | 0xc0;
+ *p++ = (i & 63) | 0x80;
+ } else if (i < 0x10000) {
+ if (p + 2 >= edst)
+ break;
+ *p++ = (i >> 12) | 0xe0;
+ *p++ = ((i >> 6) & 63) | 0x80;
+ *p++ = (i & 63) | 0x80;
+ } else if (i < 0x200000) {
+ if (p + 3 >= edst)
+ break;
+ *p++ = (i >> 18) | 0xf0;
+ *p++ = ((i >> 12) & 63) | 0x80;
+ *p++ = ((i >> 6) & 63) | 0x80;
+ *p++ = (i & 63) | 0x80;
+ } else if (i < 0x4000000) {
+ if (p + 4 >= edst)
+ break;
+ *p++ = (i >> 24) | 0xf8;
+ *p++ = ((i >> 18) & 63) | 0x80;
+ *p++ = ((i >> 12) & 63) | 0x80;
+ *p++ = ((i >> 6) & 63) | 0x80;
+ *p++ = (i & 63) | 0x80;
+ } else {
+ if (p + 5 >= edst)
+ break;
+ *p++ = (i >> 30) | 0xfc;
+ *p++ = ((i >> 24) & 63) | 0x80;
+ *p++ = ((i >> 18) & 63) | 0x80;
+ *p++ = ((i >> 12) & 63) | 0x80;
+ *p++ = ((i >> 6) & 63) | 0x80;
+ *p++ = (i & 63) | 0x80;
+ }
}
- }
- if (p < edst)
- *p = 0;
- return p;
+ if (p < edst)
+ *p = 0;
+ return p;
}
int
Fast_UnicodeUtil::utf8cmp(const char *s1, const ucs4_t *s2)
{
- ucs4_t i1;
- ucs4_t i2;
-
- const unsigned char *ps1 = reinterpret_cast<const unsigned char *>(s1);
- do {
- i1 = GetUTF8Char(ps1);
- i2 = *s2++;
- } while (i1 != 0 && i1 == i2);
- if (i1 > i2)
- return 1;
- if (i1 < i2)
- return -1;
- return 0;
+ ucs4_t i1;
+ ucs4_t i2;
+
+ const unsigned char *ps1 = reinterpret_cast<const unsigned char *>(s1);
+ do {
+ i1 = GetUTF8Char(ps1);
+ i2 = *s2++;
+ } while (i1 != 0 && i1 == i2);
+ if (i1 > i2)
+ return 1;
+ if (i1 < i2)
+ return -1;
+ return 0;
}
size_t
Fast_UnicodeUtil::ucs4strlen(const ucs4_t *str)
{
- const ucs4_t *p = str;
- while (*p++ != 0) {
- /* Do nothing */
- }
- return p - 1 - str;
+ const ucs4_t *p = str;
+ while (*p++ != 0) {
+ /* Do nothing */
+ }
+ return p - 1 - str;
}
ucs4_t *
Fast_UnicodeUtil::ucs4copy(ucs4_t *dst, const char *src)
{
- ucs4_t i;
- ucs4_t *p;
- const unsigned char *psrc = reinterpret_cast<const unsigned char *>(src);
-
- p = dst;
- while ((i = GetUTF8Char(psrc)) != 0) {
- if (i != _BadUTF8Char)
- *p++ = i;
- }
- *p = 0;
- return p;
+ ucs4_t i;
+ ucs4_t *p;
+ const unsigned char *psrc = reinterpret_cast<const unsigned char *>(src);
+
+ p = dst;
+ while ((i = GetUTF8Char(psrc)) != 0) {
+ if (i != _BadUTF8Char)
+ *p++ = i;
+ }
+ *p = 0;
+ return p;
}
char *
Fast_UnicodeUtil::strdupLAT1(const char *src)
{
- char *res;
- size_t reslen;
- ucs4_t i;
- const unsigned char *p;
- char *q;
-
- reslen = 0;
- p = reinterpret_cast<const unsigned char *>(src);
- while ((i = *p++) != 0) {
- reslen += utf8clen(i);
- }
- res = static_cast<char *>(malloc(reslen + 1));
- p = reinterpret_cast<const unsigned char *>(src);
- q = res;
- while ((i = *p++) != 0) {
- q = utf8cput(q, i);
- }
- assert(q == res + reslen);
- *q = 0;
- return res;
+ char *res;
+ size_t reslen;
+ ucs4_t i;
+ const unsigned char *p;
+ char *q;
+
+ reslen = 0;
+ p = reinterpret_cast<const unsigned char *>(src);
+ while ((i = *p++) != 0) {
+ reslen += utf8clen(i);
+ }
+ res = static_cast<char *>(malloc(reslen + 1));
+ p = reinterpret_cast<const unsigned char *>(src);
+ q = res;
+ while ((i = *p++) != 0) {
+ q = utf8cput(q, i);
+ }
+ assert(q == res + reslen);
+ *q = 0;
+ return res;
}
ucs4_t
@@ -199,11 +199,11 @@ Fast_UnicodeUtil::GetUTF8CharNonAscii(unsigned const char *&src)
return _BadUTF8Char;
} else { /* 0xfc..0xfd: 6 bytes */
retval = ((src[0] & 1) << 30) |
- ((src[1] & 63) << 24) |
- ((src[2] & 63) << 18) |
- ((src[3] & 63) << 12) |
- ((src[4] & 63) << 6) |
- (src[5] & 63);
+ ((src[1] & 63) << 24) |
+ ((src[2] & 63) << 18) |
+ ((src[3] & 63) << 12) |
+ ((src[4] & 63) << 6) |
+ (src[5] & 63);
if (retval < 0x4000000u) { /* 6 bytes: >= 0x4000000 */
retval = _BadUTF8Char;
}
@@ -212,10 +212,10 @@ Fast_UnicodeUtil::GetUTF8CharNonAscii(unsigned const char *&src)
}
} else { /* 0xf8..0xfb: 5 bytes */
retval = ((src[0] & 3) << 24) |
- ((src[1] & 63) << 18) |
- ((src[2] & 63) << 12) |
- ((src[3] & 63) << 6) |
- (src[4] & 63);
+ ((src[1] & 63) << 18) |
+ ((src[2] & 63) << 12) |
+ ((src[3] & 63) << 6) |
+ (src[4] & 63);
if (retval < 0x200000u) { /* 5 bytes: >= 0x200000 */
retval = _BadUTF8Char;
}
@@ -224,9 +224,9 @@ Fast_UnicodeUtil::GetUTF8CharNonAscii(unsigned const char *&src)
}
} else { /* 0xf0..0xf7: 4 bytes */
retval = ((src[0] & 7) << 18) |
- ((src[1] & 63) << 12) |
- ((src[2] & 63) << 6) |
- (src[3] & 63);
+ ((src[1] & 63) << 12) |
+ ((src[2] & 63) << 6) |
+ (src[3] & 63);
if (retval < 0x10000) { /* 4 bytes: >= 0x10000 */
retval = _BadUTF8Char;
}
@@ -235,8 +235,8 @@ Fast_UnicodeUtil::GetUTF8CharNonAscii(unsigned const char *&src)
}
} else { /* 0xe0..0xef: 3 bytes */
retval = ((src[0] & 15) << 12) |
- ((src[1] & 63) << 6) |
- (src[2] & 63);
+ ((src[1] & 63) << 6) |
+ (src[2] & 63);
if (retval < 0x800) { /* 3 bytes: >= 0x800 */
retval = _BadUTF8Char;
}
@@ -246,7 +246,7 @@ Fast_UnicodeUtil::GetUTF8CharNonAscii(unsigned const char *&src)
} else { /* 0xc0..0xdf: 2 bytes */
retval = ((src[0] & 31) << 6) |
- (src[1] & 63);
+ (src[1] & 63);
if (retval < 0x80) { /* 2 bytes: >= 0x80 */
retval = _BadUTF8Char;
}
@@ -263,82 +263,81 @@ ucs4_t
Fast_UnicodeUtil::GetUTF8Char(unsigned const char *&src)
{
return (*src >= 0x80)
- ? GetUTF8CharNonAscii(src)
- : *src++;
+ ? GetUTF8CharNonAscii(src)
+ : *src++;
}
- /** Move forwards or backwards a number of characters within an UTF8 buffer
- * Modify pos to yield new position if possible
- * @param start A pointer to the start of the UTF8 buffer
- * @param length The length of the UTF8 buffer
- * @param pos A pointer to the current position within the UTF8 buffer,
- * updated to reflect new position upon return. @param pos will
- * point to the start of the offset'th character before or after the character
- * currently pointed to.
- * @param offset An offset (+/-) in number of UTF8 characters.
- * Offset 0 consequently yields a move to the start of the current character.
- * @return Number of bytes moved, or -1 if out of range.
- * If -1 is returned, pos is unchanged.
- */
+/** Move forwards or backwards a number of characters within an UTF8 buffer
+ * Modify pos to yield new position if possible
+ * @param start A pointer to the start of the UTF8 buffer
+ * @param length The length of the UTF8 buffer
+ * @param pos A pointer to the current position within the UTF8 buffer,
+ * updated to reflect new position upon return. @param pos will
+ * point to the start of the offset'th character before or after the character
+ * currently pointed to.
+ * @param offset An offset (+/-) in number of UTF8 characters.
+ * Offset 0 consequently yields a move to the start of the current character.
+ * @return Number of bytes moved, or -1 if out of range.
+ * If -1 is returned, pos is unchanged.
+ */
#define UTF8_STARTCHAR(c) (!((c) & 0x80) || ((c) & 0x40))
int Fast_UnicodeUtil::UTF8move(unsigned const char* start, size_t length,
- unsigned const char*& pos, off_t offset)
+ unsigned const char*& pos, off_t offset)
{
- int increment = offset > 0 ? 1 : -1;
- unsigned const char* p = pos;
-
- /* If running backward we first need to get to the start of
- * the current character, that's an extra step.
- * Similarly, if we are running forward an are at the start of a character,
- * we count that character as a step.
- */
-
- if (increment < 0)
- {
- // Already at start?
- if (p < start) return -1;
- if (!offset)
+ int increment = offset > 0 ? 1 : -1;
+ unsigned const char* p = pos;
+
+ /* If running backward we first need to get to the start of
+ * the current character, that's an extra step.
+ * Similarly, if we are running forward an are at the start of a character,
+ * we count that character as a step.
+ */
+
+ if (increment < 0)
{
- if (p > start + length) return -1;
+ // Already at start?
+ if (p < start) return -1;
+ if (!offset)
+ {
+ if (p > start + length) return -1;
+ }
+ else if (p == start) return -1;
+
+ // Initially pointing to the first invalid char?
+ if (p == start + length)
+ p += increment;
+ else
+ offset += increment;
}
- else if (p == start) return -1;
+ else if (p >= start + length)
+ return -1;
+ else if (UTF8_STARTCHAR(*p))
+ offset += increment;
- // Initially pointing to the first invalid char?
- if (p == start + length)
- p += increment;
+
+ for (; p >= start && p < start+length; p += increment)
+ {
+ /** Are we at start of a character? (both highest bits or none of them set) */
+ if (UTF8_STARTCHAR(*p))
+ offset -= increment; // We have "eaten" another character (independent of dir)
+ if (offset == 0) break;
+ }
+
+ if (offset != 0)
+ {
+ offset -= increment;
+ if (increment < 0)
+ p -= increment;
+ }
+
+ if (offset == 0) // Enough room to make it..
+ {
+ int moved = std::abs(p - pos);
+ pos = p;
+ return moved;
+ }
else
- offset += increment;
- }
- else if (p >= start + length)
- return -1;
- else if (UTF8_STARTCHAR(*p))
- offset += increment;
-
-
- for (; p >= start && p < start+length; p += increment)
- {
- /** Are we at start of a character? (both highest bits or none of them set) */
- if (UTF8_STARTCHAR(*p))
- offset -= increment; // We have "eaten" another character (independent of dir)
- if (offset == 0) break;
- }
-
- if (offset != 0)
- {
- offset -= increment;
- if (increment < 0)
- p -= increment;
- }
-
- if (offset == 0) // Enough room to make it..
- {
- int moved = std::abs(p - pos);
- pos = p;
- return moved;
- }
- else
- return -1;
+ return -1;
}
-
diff --git a/fastlib/src/vespa/fastlib/text/unicodeutil.h b/fastlib/src/vespa/fastlib/text/unicodeutil.h
index f314f9b1c68..1bb638270fa 100644
--- a/fastlib/src/vespa/fastlib/text/unicodeutil.h
+++ b/fastlib/src/vespa/fastlib/text/unicodeutil.h
@@ -21,36 +21,36 @@ typedef unsigned int ucs4_t;
*/
class Fast_UnicodeUtil {
private:
- /**
- * Table for easy lookup of UTF8 character length in bytes
- */
- static unsigned char _utf8header[256];
- /**
- * Is true when the tables have been initialized. Is set by
- * InitTables, and should be protected by the _initMutex before
- * inspection.
- */
+ /**
+ * Table for easy lookup of UTF8 character length in bytes
+ */
+ static unsigned char _utf8header[256];
+ /**
+ * Is true when the tables have been initialized. Is set by
+ * InitTables, and should be protected by the _initMutex before
+ * inspection.
+ */
- /** Two-level lowercase table. 256 pages, 256 elements each.
- * This table is defined in unicode-lowercase.cpp, which is
- * autogenerated by the extcase application. */
- static unsigned short *_compLowerCase[256];
+ /** Two-level lowercase table. 256 pages, 256 elements each.
+ * This table is defined in unicode-lowercase.cpp, which is
+ * autogenerated by the extcase application. */
+ static unsigned short *_compLowerCase[256];
- /** Two-level character property table. 256 pages with 256 elements each.
- * This table is defined in unicode-charprops.cpp, which is
- * autogenerated by the extprop applicatoin. */
- static unsigned char *_compCharProps[256];
+ /** Two-level character property table. 256 pages with 256 elements each.
+ * This table is defined in unicode-charprops.cpp, which is
+ * autogenerated by the extprop applicatoin. */
+ static unsigned char *_compCharProps[256];
- /** The property bit identificators */
- enum {
- _spaceProp = 1,
- _wordcharProp = 2,
- _ideographicProp = 4,
- _decimalDigitCharProp = 8,
- _ignorableControlCharProp = 16,
- _terminalPunctuationCharProp = 32
- };
+ /** The property bit identificators */
+ enum {
+ _spaceProp = 1,
+ _wordcharProp = 2,
+ _ideographicProp = 4,
+ _decimalDigitCharProp = 8,
+ _ignorableControlCharProp = 16,
+ _terminalPunctuationCharProp = 32
+ };
public:
virtual ~Fast_UnicodeUtil() { }
@@ -102,35 +102,35 @@ public:
* @return Pointer to the next position in dst after the putted byte(s).
*/
static char *utf8cput(char *dst, ucs4_t i) {
- if (i < 128)
- *dst++ = i;
- else if (i < 0x800) {
- *dst++ = (i >> 6) | 0xc0;
- *dst++ = (i & 63) | 0x80;
- } else if (i < 0x10000) {
- *dst++ = (i >> 12) | 0xe0;
- *dst++ = ((i >> 6) & 63) | 0x80;
- *dst++ = (i & 63) | 0x80;
- } else if (i < 0x200000) {
- *dst++ = (i >> 18) | 0xf0;
- *dst++ = ((i >> 12) & 63) | 0x80;
- *dst++ = ((i >> 6) & 63) | 0x80;
- *dst++ = (i & 63) | 0x80;
- } else if (i < 0x4000000) {
- *dst++ = (i >> 24) | 0xf8;
- *dst++ = ((i >> 18) & 63) | 0x80;
- *dst++ = ((i >> 12) & 63) | 0x80;
- *dst++ = ((i >> 6) & 63) | 0x80;
- *dst++ = (i & 63) | 0x80;
- } else {
- *dst++ = (i >> 30) | 0xfc;
- *dst++ = ((i >> 24) & 63) | 0x80;
- *dst++ = ((i >> 18) & 63) | 0x80;
- *dst++ = ((i >> 12) & 63) | 0x80;
- *dst++ = ((i >> 6) & 63) | 0x80;
- *dst++ = (i & 63) | 0x80;
- }
- return dst;
+ if (i < 128)
+ *dst++ = i;
+ else if (i < 0x800) {
+ *dst++ = (i >> 6) | 0xc0;
+ *dst++ = (i & 63) | 0x80;
+ } else if (i < 0x10000) {
+ *dst++ = (i >> 12) | 0xe0;
+ *dst++ = ((i >> 6) & 63) | 0x80;
+ *dst++ = (i & 63) | 0x80;
+ } else if (i < 0x200000) {
+ *dst++ = (i >> 18) | 0xf0;
+ *dst++ = ((i >> 12) & 63) | 0x80;
+ *dst++ = ((i >> 6) & 63) | 0x80;
+ *dst++ = (i & 63) | 0x80;
+ } else if (i < 0x4000000) {
+ *dst++ = (i >> 24) | 0xf8;
+ *dst++ = ((i >> 18) & 63) | 0x80;
+ *dst++ = ((i >> 12) & 63) | 0x80;
+ *dst++ = ((i >> 6) & 63) | 0x80;
+ *dst++ = (i & 63) | 0x80;
+ } else {
+ *dst++ = (i >> 30) | 0xfc;
+ *dst++ = ((i >> 24) & 63) | 0x80;
+ *dst++ = ((i >> 18) & 63) | 0x80;
+ *dst++ = ((i >> 12) & 63) | 0x80;
+ *dst++ = ((i >> 6) & 63) | 0x80;
+ *dst++ = (i & 63) | 0x80;
+ }
+ return dst;
}
/**
@@ -258,5 +258,3 @@ public:
return res;
}
};
-
-
diff --git a/fastlib/src/vespa/fastlib/text/wordfolder.h b/fastlib/src/vespa/fastlib/text/wordfolder.h
index f40961a27c8..969ae0cd7ea 100644
--- a/fastlib/src/vespa/fastlib/text/wordfolder.h
+++ b/fastlib/src/vespa/fastlib/text/wordfolder.h
@@ -6,12 +6,11 @@
class Fast_WordFolder
{
public:
- virtual ~Fast_WordFolder(void);
- virtual const char* UCS4Tokenize(const char *buf,
- const char *bufend,
- ucs4_t *dstbuf,
- ucs4_t *dstbufend,
- const char*& origstart,
- size_t& tokenlen) const = 0;
+ virtual ~Fast_WordFolder(void);
+ virtual const char* UCS4Tokenize(const char *buf,
+ const char *bufend,
+ ucs4_t *dstbuf,
+ ucs4_t *dstbufend,
+ const char*& origstart,
+ size_t& tokenlen) const = 0;
};
-
diff --git a/fastlib/src/vespa/fastlib/util/bag.h b/fastlib/src/vespa/fastlib/util/bag.h
index 33c684da7e9..9ec9bd91e64 100644
--- a/fastlib/src/vespa/fastlib/util/bag.h
+++ b/fastlib/src/vespa/fastlib/util/bag.h
@@ -1,13 +1,13 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
//**************************************************************************
/**
-* @author B�rd Kvalheim
-* @version $Id$
-* @file
-*/
+ * @author B�rd Kvalheim
+ * @version $Id$
+ * @file
+ */
/*
-* @date Creation date: 2000-03-22
-**************************************************************************/
+ * @date Creation date: 2000-03-22
+ **************************************************************************/
#pragma once
@@ -15,397 +15,397 @@ template<class Type>
class Fast_BagIterator;
/**
-* A Fast_Bag is a collection which can contain duplicates. The
-* only way to access the elements in a bag is via the
-* Fast_BagIterator. The Fast_BagIterator is also capable of
-* removing the current element.
-*
-* The Fast_BagIterator is used to iterate over the elements in
-* the bag. It can be initiated by a pointer or a reference to a
-* bag. The recomended use is to init the Fast_BagIterator of the
-* stack and not on the heap - to avoid new and potential memory leaks.
-*
-* The Fast_BagIterator can be new'ed with the empty constructor
-* or initialized with a pointer or a reference to a bag. It can be
-* rewind with the Start() method accepting a bag pointer or reference.
-*
-* The internal array are resized with the private Grow() method.
-* Choose the block size carefully to avoid overhead, since the Grow
-* method is costly: If an array grows or are copied the elements in
-* the array are copied with the = operator. In other words, the copy
-* constructor of the objects are used.
-*
-* The amount the bag size are double each time the bag grows. The next
-* grow-amount can be set with the void SetBlocksize(int bs)
-* method.
-*
-* Example of use:
-* <pre>
-* // Init. 10 is start size. It grows as needed.
-* Fast_Bag<int> bag(10);
-*
-* // Insert 4 elements
-* bag.Insert(1);
-* bag.Insert(2);
-* bag.Insert(3);
-* bag.Insert(4);
-*
-* // Iterate through and delete element equal to 2.
-* for(Fast_BagIterator<int> iter(bag);
-* !iter.End();
-* iter.Next()) {
-* if(iter.GetCurrent() == 2) {
-* iter.RemoveCurrent();
-* }
-* }
-* </pre>
-*/
+ * A Fast_Bag is a collection which can contain duplicates. The
+ * only way to access the elements in a bag is via the
+ * Fast_BagIterator. The Fast_BagIterator is also capable of
+ * removing the current element.
+ *
+ * The Fast_BagIterator is used to iterate over the elements in
+ * the bag. It can be initiated by a pointer or a reference to a
+ * bag. The recomended use is to init the Fast_BagIterator of the
+ * stack and not on the heap - to avoid new and potential memory leaks.
+ *
+ * The Fast_BagIterator can be new'ed with the empty constructor
+ * or initialized with a pointer or a reference to a bag. It can be
+ * rewind with the Start() method accepting a bag pointer or reference.
+ *
+ * The internal array are resized with the private Grow() method.
+ * Choose the block size carefully to avoid overhead, since the Grow
+ * method is costly: If an array grows or are copied the elements in
+ * the array are copied with the = operator. In other words, the copy
+ * constructor of the objects are used.
+ *
+ * The amount the bag size are double each time the bag grows. The next
+ * grow-amount can be set with the void SetBlocksize(int bs)
+ * method.
+ *
+ * Example of use:
+ * <pre>
+ * // Init. 10 is start size. It grows as needed.
+ * Fast_Bag<int> bag(10);
+ *
+ * // Insert 4 elements
+ * bag.Insert(1);
+ * bag.Insert(2);
+ * bag.Insert(3);
+ * bag.Insert(4);
+ *
+ * // Iterate through and delete element equal to 2.
+ * for(Fast_BagIterator<int> iter(bag);
+ * !iter.End();
+ * iter.Next()) {
+ * if(iter.GetCurrent() == 2) {
+ * iter.RemoveCurrent();
+ * }
+ * }
+ * </pre>
+ */
template <class Type>
class Fast_Bag
{
- friend class Fast_BagIterator<Type>;
+ friend class Fast_BagIterator<Type>;
protected:
- /**
- * The current capacity of the bag
- */
- int _capacity;
-
- /**
- * The actual array
- */
- Type* _array;
-
- /**
- * The block size used when the bag is growing
- */
- int _blocksize;
-
- /**
- * The number of elements in the bag
- */
- int _numElements;
+ /**
+ * The current capacity of the bag
+ */
+ int _capacity;
+
+ /**
+ * The actual array
+ */
+ Type* _array;
+
+ /**
+ * The block size used when the bag is growing
+ */
+ int _blocksize;
+
+ /**
+ * The number of elements in the bag
+ */
+ int _numElements;
private:
- /**
- * Increases the bag size with _blocksize
- */
- void Grow();
+ /**
+ * Increases the bag size with _blocksize
+ */
+ void Grow();
public:
- typedef Type value_type;
-
- /**
- * Default constructor. Sets the capacity to 0 and the
- * _blocksize to 1. Very inefficient. Should only be used for
- * testing
- */
- Fast_Bag();
-
- /**
- * Copy constructor. Uses the element's = operator to make the
- * copy. Hence, a deep copy are only done when actual objects are
- * stored in the array and they implement a proper copy constructor.
- * @param source the orginal array to copy from.
- */
- Fast_Bag(const Fast_Bag<Type>& source);
-
- /**
- * Constructor setting the _capacity . The _blocksize is
- * set to capacity.
- * @param capacity the initial capacity of the bag
- */
- Fast_Bag(const int capacity);
-
- /**
- * Constructor setting the _capacity and the _blocksize
- * @param capacity the initial _capacity of the bag
- * @param blocksize the initial _blocksize of the bag */
- Fast_Bag(const int capacity, const int blocksize);
-
- ~Fast_Bag();
-
- /**
- * Assignment operator.
- * @param other the orginal array to assign from
- * @return reference to the newly assigned bag
- */
- Fast_Bag& operator=(const Fast_Bag<Type>& other);
-
- /**
- * Comparison operator
- * @param other the right side of ==
- * @return true/false
- */
- bool operator==(const Fast_Bag<Type>& other) const;
-
-
- /**
- * The _blocksize is the size the bag grows with when it grows
- * @return the _blocksize
- */
- inline int GetBlocksize() const { return _blocksize; }
-
- /**
- * Set a new _blocksize
- * @param blocksize the new _blocksize
- */
- void SetBlocksize(const int blocksize);
-
- /**
- * @return the number of elements in the bag
- */
- inline int NumberOfElements() const { return _numElements; }
-
- /**
- * Adds a new element to the bag
- * @param element the element to add
- */
- void Insert(const Type element);
-
- /**
- * Removes all the elements in the bag
- */
- void RemoveAllElements();
-
- /**
- * Removes a element for the bag.
- * @param element the element to be removed.
- */
- void RemoveElement(const Type element);
-
- /**
- * Returns true iff the element is in the bag
- * @param element the element to look up.
- */
- bool HasElement(const Type element);
+ typedef Type value_type;
+
+ /**
+ * Default constructor. Sets the capacity to 0 and the
+ * _blocksize to 1. Very inefficient. Should only be used for
+ * testing
+ */
+ Fast_Bag();
+
+ /**
+ * Copy constructor. Uses the element's = operator to make the
+ * copy. Hence, a deep copy are only done when actual objects are
+ * stored in the array and they implement a proper copy constructor.
+ * @param source the orginal array to copy from.
+ */
+ Fast_Bag(const Fast_Bag<Type>& source);
+
+ /**
+ * Constructor setting the _capacity . The _blocksize is
+ * set to capacity.
+ * @param capacity the initial capacity of the bag
+ */
+ Fast_Bag(const int capacity);
+
+ /**
+ * Constructor setting the _capacity and the _blocksize
+ * @param capacity the initial _capacity of the bag
+ * @param blocksize the initial _blocksize of the bag */
+ Fast_Bag(const int capacity, const int blocksize);
+
+ ~Fast_Bag();
+
+ /**
+ * Assignment operator.
+ * @param other the orginal array to assign from
+ * @return reference to the newly assigned bag
+ */
+ Fast_Bag& operator=(const Fast_Bag<Type>& other);
+
+ /**
+ * Comparison operator
+ * @param other the right side of ==
+ * @return true/false
+ */
+ bool operator==(const Fast_Bag<Type>& other) const;
+
+
+ /**
+ * The _blocksize is the size the bag grows with when it grows
+ * @return the _blocksize
+ */
+ inline int GetBlocksize() const { return _blocksize; }
+
+ /**
+ * Set a new _blocksize
+ * @param blocksize the new _blocksize
+ */
+ void SetBlocksize(const int blocksize);
+
+ /**
+ * @return the number of elements in the bag
+ */
+ inline int NumberOfElements() const { return _numElements; }
+
+ /**
+ * Adds a new element to the bag
+ * @param element the element to add
+ */
+ void Insert(const Type element);
+
+ /**
+ * Removes all the elements in the bag
+ */
+ void RemoveAllElements();
+
+ /**
+ * Removes a element for the bag.
+ * @param element the element to be removed.
+ */
+ void RemoveElement(const Type element);
+
+ /**
+ * Returns true iff the element is in the bag
+ * @param element the element to look up.
+ */
+ bool HasElement(const Type element);
};
//**************************************************************************
/**
-* A Fast_BagIterator. The Fast_BagIterator can delete the
-* current element from the Fast_Bag. Ensures that all elements
-* are visited before the end is reached. The Fast_BagIterator can
-* reused with calls to Start(Fast_Bag<Type>*) or
-* Start(Fast_Bag<Type>&)
-*
-* Example of use:
-* <pre>
-* // Init. 10 is start size. It grows as needed.
-* Fast_Bag<int> bag(10);
-*
-* // Insert 4 elements
-* bag.Insert(1);
-* bag.Insert(2);
-* bag.Insert(3);
-* bag.Insert(4);
-*
-* // Iterate through and delete element equal to 2.
-* for(Fast_BagIterator<int> iter(bag);
-* !iter.End();
-* iter.Next()) {
-* if(iter.GetCurrent() == 2) {
-* iter.RemoveCurrent();
-* }
-* }
-* </pre>
-*/
+ * A Fast_BagIterator. The Fast_BagIterator can delete the
+ * current element from the Fast_Bag. Ensures that all elements
+ * are visited before the end is reached. The Fast_BagIterator can
+ * reused with calls to Start(Fast_Bag<Type>*) or
+ * Start(Fast_Bag<Type>&)
+ *
+ * Example of use:
+ * <pre>
+ * // Init. 10 is start size. It grows as needed.
+ * Fast_Bag<int> bag(10);
+ *
+ * // Insert 4 elements
+ * bag.Insert(1);
+ * bag.Insert(2);
+ * bag.Insert(3);
+ * bag.Insert(4);
+ *
+ * // Iterate through and delete element equal to 2.
+ * for(Fast_BagIterator<int> iter(bag);
+ * !iter.End();
+ * iter.Next()) {
+ * if(iter.GetCurrent() == 2) {
+ * iter.RemoveCurrent();
+ * }
+ * }
+ * </pre>
+ */
template <class Type>
class Fast_BagIterator
{
- friend class Fast_Bag<Type>;
+ friend class Fast_Bag<Type>;
private:
- /**
- * Pointer to the Fast_Bag.
- */
- Fast_Bag<Type>* _bag;
+ /**
+ * Pointer to the Fast_Bag.
+ */
+ Fast_Bag<Type>* _bag;
- /**
- * Pointer to the array used to represent the Fast_Bag.
- */
- Type* _array;
+ /**
+ * Pointer to the array used to represent the Fast_Bag.
+ */
+ Type* _array;
- /**
- * The point in the Fast_Bag the iterator has come to.
- */
- int _index;
+ /**
+ * The point in the Fast_Bag the iterator has come to.
+ */
+ int _index;
- /**
- * Flag used to indicate if the iterator has reached the "end". The
- * value of GetCurrent() will still be the "last" element in
- * the Fast_Bag.
- */
- bool _end;
+ /**
+ * Flag used to indicate if the iterator has reached the "end". The
+ * value of GetCurrent() will still be the "last" element in
+ * the Fast_Bag.
+ */
+ bool _end;
public:
- /**
- * Private copy-constructor the avoid usage.
- */
- Fast_BagIterator(const Fast_BagIterator& source) :
- _bag(source._bag),
- _array(source._array),
- _index(source._index),
+ /**
+ * Private copy-constructor the avoid usage.
+ */
+ Fast_BagIterator(const Fast_BagIterator& source) :
+ _bag(source._bag),
+ _array(source._array),
+ _index(source._index),
_end(source._end) {}
- Fast_BagIterator &operator=(const Fast_BagIterator& source)
- {
- _bag = source._bag;
- _array = source._array;
- _index = source._index;
- _end = source._end;
- return *this;
- }
- /**
- * Default constructor, the iterator if not initialized with a
- * Fast_Bag
- */
- Fast_BagIterator(void) :
+ Fast_BagIterator &operator=(const Fast_BagIterator& source)
+ {
+ _bag = source._bag;
+ _array = source._array;
+ _index = source._index;
+ _end = source._end;
+ return *this;
+ }
+ /**
+ * Default constructor, the iterator if not initialized with a
+ * Fast_Bag
+ */
+ Fast_BagIterator(void) :
_bag(NULL),
_array(NULL),
_index(0),
_end(true)
- {
-
- }
-
- /**
- * Contructor that inits the Fast_bag with a pointer to a Fast_Bag
- * @param bag pointer to a Fast_Bag of the same Type as the iterator
- */
- inline Fast_BagIterator(Fast_Bag<Type>* bag) :
- _bag(bag),
- _array(bag->_array),
- _index(0),
- _end(bag->NumberOfElements() == 0)
- {
- }
-
-
- /**
- * Contructor that inits the Fast_BagIterator with a reference to a Fast_Bag
- * @param bag reference to a Fast_Bag of the same Type as the iterator
- */
- inline Fast_BagIterator(Fast_Bag<Type>& bag) :
- _bag(&bag),
- _array(bag._array),
- _index(0),
- _end(bag.NumberOfElements() == 0)
- {
- }
-
- /**
- * Destructor - nothing to do
- (commented out because having it generated warning)
- ~Fast_BagIterator(void){};
- */
-
- /**
- * Reinits (or intis) the Fast_BagIterator with another
- * Fast_Bag Alows the user to reuse a Fast_BagIterator
- * @param bag the Fast_Bag to init the Fast_BagIterator with
- */
- inline void Start(Fast_Bag<Type>* bag) {
+ {
+
+ }
+
+ /**
+ * Contructor that inits the Fast_bag with a pointer to a Fast_Bag
+ * @param bag pointer to a Fast_Bag of the same Type as the iterator
+ */
+ inline Fast_BagIterator(Fast_Bag<Type>* bag) :
+ _bag(bag),
+ _array(bag->_array),
+ _index(0),
+ _end(bag->NumberOfElements() == 0)
+ {
+ }
+
+
+ /**
+ * Contructor that inits the Fast_BagIterator with a reference to a Fast_Bag
+ * @param bag reference to a Fast_Bag of the same Type as the iterator
+ */
+ inline Fast_BagIterator(Fast_Bag<Type>& bag) :
+ _bag(&bag),
+ _array(bag._array),
+ _index(0),
+ _end(bag.NumberOfElements() == 0)
+ {
+ }
+
+ /**
+ * Destructor - nothing to do
+ (commented out because having it generated warning)
+ ~Fast_BagIterator(void){};
+ */
+
+ /**
+ * Reinits (or intis) the Fast_BagIterator with another
+ * Fast_Bag Alows the user to reuse a Fast_BagIterator
+ * @param bag the Fast_Bag to init the Fast_BagIterator with
+ */
+ inline void Start(Fast_Bag<Type>* bag) {
_bag = bag;
_array = bag->_array;
_index = 0;
if(_bag->NumberOfElements() == 0) {
- _end = true;
+ _end = true;
} else {
- _end = false;
+ _end = false;
}
- }
-
- /**
- * Reinits (or intis) the Fast_BagIterator with another
- * Fast_Bag. Alows the user to reuse a Fast_BagIterator.
- * @param bag the Fast_Bag to init the Fast_BagIterator with
- */
- inline void Start(Fast_Bag<Type>& bag) {
+ }
+
+ /**
+ * Reinits (or intis) the Fast_BagIterator with another
+ * Fast_Bag. Alows the user to reuse a Fast_BagIterator.
+ * @param bag the Fast_Bag to init the Fast_BagIterator with
+ */
+ inline void Start(Fast_Bag<Type>& bag) {
_bag = &bag;
_array = bag._array;
_index = 0;
if(_bag->NumberOfElements() == 0) {
- _end = true;
+ _end = true;
} else {
- _end = false;
+ _end = false;
}
- }
+ }
- /**
- * @return the current element
- */
- inline Type GetCurrent() {
+ /**
+ * @return the current element
+ */
+ inline Type GetCurrent() {
return _array[_index];
- }
+ }
- /**
- * Moves the Fast_BagIterator to the next element. If the
- * Fast_BagIterator already are at the end the _end flag is set to
- * true.
- */
- inline void Next() {
+ /**
+ * Moves the Fast_BagIterator to the next element. If the
+ * Fast_BagIterator already are at the end the _end flag is set to
+ * true.
+ */
+ inline void Next() {
// If we are at the end and should return.
if(_end) {
- return;
+ return;
}
_index = _index + 1;
if(_index == _bag->NumberOfElements()) {
- // Now the return value from GetCurrent are undefined.
- _end = true;
+ // Now the return value from GetCurrent are undefined.
+ _end = true;
}
- }
+ }
- /**
- * Deletes the current element in the Fast_Bag and moves the
- * Fast_BagIterator to the previous
- */
- inline void RemoveCurrent() {
- _bag->_numElements = _bag->_numElements - 1;
+ /**
+ * Deletes the current element in the Fast_Bag and moves the
+ * Fast_BagIterator to the previous
+ */
+ inline void RemoveCurrent() {
+ _bag->_numElements = _bag->_numElements - 1;
- _array[_index] = _array[_bag->NumberOfElements()];
+ _array[_index] = _array[_bag->NumberOfElements()];
_index = _index - 1;
- }
+ }
- /**
- * @return true if the Fast_BagIterator is at the end
- */
- inline bool End() const { return _end; }
+ /**
+ * @return true if the Fast_BagIterator is at the end
+ */
+ inline bool End() const { return _end; }
};
template <typename Type>
Fast_BagIterator<Type>& operator++(Fast_BagIterator<Type>& bi) {
- bi.Next();
- return bi;
+ bi.Next();
+ return bi;
}
template <typename Type>
Fast_BagIterator<Type> operator++(Fast_BagIterator<Type>& bi, int) {
- Fast_BagIterator<Type> old = bi;
- bi.Next();
- return old;
+ Fast_BagIterator<Type> old = bi;
+ bi.Next();
+ return old;
}
template <class Type>
Fast_Bag<Type>::Fast_Bag() :
- _capacity(1),
- _array(new Type[_capacity]),
- _blocksize(1),
- _numElements(0)
+ _capacity(1),
+ _array(new Type[_capacity]),
+ _blocksize(1),
+ _numElements(0)
{
}
@@ -413,28 +413,28 @@ Fast_Bag<Type>::Fast_Bag() :
template <class Type>
Fast_Bag<Type>::Fast_Bag(const Fast_Bag<Type>& source) :
- _capacity(source._capacity),
- _array(NULL),
- _blocksize(source._blocksize),
- _numElements(source._numElements)
+ _capacity(source._capacity),
+ _array(NULL),
+ _blocksize(source._blocksize),
+ _numElements(source._numElements)
{
- // Self assignment
- if(this == &source) return;
+ // Self assignment
+ if(this == &source) return;
- _array = new Type[_capacity];
+ _array = new Type[_capacity];
- for(int i = 0; i < _capacity; i++) {
+ for(int i = 0; i < _capacity; i++) {
_array[i] = source._array[i];
- }
+ }
}
template <class Type>
Fast_Bag<Type>::Fast_Bag(const int capacity) :
- _capacity(capacity),
- _array(new Type[capacity]),
- _blocksize(capacity),
- _numElements(0)
+ _capacity(capacity),
+ _array(new Type[capacity]),
+ _blocksize(capacity),
+ _numElements(0)
{
}
@@ -442,10 +442,10 @@ Fast_Bag<Type>::Fast_Bag(const int capacity) :
template <class Type>
Fast_Bag<Type>::Fast_Bag(const int capacity, const int blocksize) :
- _capacity(capacity),
- _array(new Type[capacity]),
- _blocksize(blocksize),
- _numElements(0)
+ _capacity(capacity),
+ _array(new Type[capacity]),
+ _blocksize(blocksize),
+ _numElements(0)
{
}
@@ -454,123 +454,120 @@ Fast_Bag<Type>::Fast_Bag(const int capacity, const int blocksize) :
template <class Type>
Fast_Bag<Type>::~Fast_Bag()
{
- delete[] _array;
+ delete[] _array;
}
template<class Type>
inline Fast_Bag<Type>& Fast_Bag<Type>::operator=(const Fast_Bag<Type>& other)
{
- // Self assignment
- if(this == &other) return *this;
+ // Self assignment
+ if(this == &other) return *this;
- if(_array != NULL) {
+ if(_array != NULL) {
delete[] _array;
- }
+ }
- _numElements = other._numElements;
- _capacity = other._capacity;
- _blocksize = other._blocksize;
- _array = new Type[_capacity];
+ _numElements = other._numElements;
+ _capacity = other._capacity;
+ _blocksize = other._blocksize;
+ _array = new Type[_capacity];
- for(int i = 0; i < _numElements; i++) {
+ for(int i = 0; i < _numElements; i++) {
_array[i] = other._array[i];
- }
+ }
- return *this;
+ return *this;
}
template<class Type>
inline bool Fast_Bag<Type>::operator==(const Fast_Bag<Type>& other) const
{
- if(_numElements == other._numElements &&
- _capacity == other._capacity &&
- _blocksize == other._blocksize)
- {
+ if(_numElements == other._numElements &&
+ _capacity == other._capacity &&
+ _blocksize == other._blocksize)
+ {
for(int i = 0; i < _numElements; i++) {
- if (!(_array[i] == other._array[i])) return false;
+ if (!(_array[i] == other._array[i])) return false;
}
return true;
- } else {
+ } else {
return false;
- }
+ }
}
template <class Type>
void Fast_Bag<Type>::Grow()
{
- int newCapacity = _capacity + _blocksize;
+ int newCapacity = _capacity + _blocksize;
- // Grow exponentially
- _blocksize = newCapacity;
+ // Grow exponentially
+ _blocksize = newCapacity;
- Type* newArray = new Type[newCapacity];
+ Type* newArray = new Type[newCapacity];
- for(int i = 0; i < _capacity; i++) {
+ for(int i = 0; i < _capacity; i++) {
newArray[i] = _array[i];
- }
+ }
- _capacity = newCapacity;
+ _capacity = newCapacity;
- delete[] _array;
- _array = newArray;
+ delete[] _array;
+ _array = newArray;
}
template <class Type>
inline void Fast_Bag<Type>::SetBlocksize(const int blocksize)
{
- if(blocksize > 0 ) {
+ if(blocksize > 0 ) {
_blocksize = blocksize;
- }
+ }
}
template <class Type>
inline void Fast_Bag<Type>::Insert(const Type element)
{
- if(_numElements == _capacity) Grow();
- _array[_numElements++] = element;
+ if(_numElements == _capacity) Grow();
+ _array[_numElements++] = element;
}
template <class Type>
void Fast_Bag<Type>::RemoveAllElements()
{
- delete[] _array;
- _numElements = 0;
- _array = new Type[_capacity];
+ delete[] _array;
+ _numElements = 0;
+ _array = new Type[_capacity];
}
template <class Type>
void Fast_Bag<Type>::RemoveElement(const Type element)
{
- for(Fast_BagIterator<Type> it(this);
- !it.End();
- it.Next()) {
- if(it.GetCurrent() == element) {
- it.RemoveCurrent();
+ for(Fast_BagIterator<Type> it(this);
+ !it.End();
+ it.Next()) {
+ if(it.GetCurrent() == element) {
+ it.RemoveCurrent();
+ }
}
- }
}
template <class Type>
bool Fast_Bag<Type>::HasElement(const Type element)
{
- bool retVal=false;
- for(Fast_BagIterator<Type> it(this);
- !it.End();
- it.Next()) {
- if(it.GetCurrent() == element) {
- retVal=true;
- break;
+ bool retVal=false;
+ for(Fast_BagIterator<Type> it(this);
+ !it.End();
+ it.Next()) {
+ if(it.GetCurrent() == element) {
+ retVal=true;
+ break;
+ }
}
- }
- return retVal;
+ return retVal;
}
-
-
-
diff --git a/fastlib/src/vespa/fastlib/util/base64.cpp b/fastlib/src/vespa/fastlib/util/base64.cpp
index cf90ba623f1..f5842812073 100644
--- a/fastlib/src/vespa/fastlib/util/base64.cpp
+++ b/fastlib/src/vespa/fastlib/util/base64.cpp
@@ -25,100 +25,100 @@ static const char _base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw
int
Fast_Base64::Decode(const char *source, unsigned int length, char *destination) {
- unsigned int i;
-
- // Sanity checks.
- if (!source || !destination)
- return -1;
-
- int state = 0;
- int index = 0;
- char symbol;
-
- // Process all source symbols.
- for (i = 0; i < length; ++i) {
-
- symbol = source[i];
-
- // Skip whitespace.
- if (isspace(symbol))
- continue;
-
- // Are we at the end?
- if (symbol == '=')
- break;
-
- // Lookup symbol in base-64 table.
- if ((symbol >= 'A') && (symbol <= 'Z'))
- symbol = symbol - 'A';
- else if ((symbol >= 'a') && (symbol <= 'z'))
- symbol = symbol - 'a' + 26;
- else if ((symbol >= '0') && (symbol <= '9'))
- symbol = symbol - '0' + 52;
- else if (symbol == '+')
- symbol = 62;
- else if (symbol == '/')
- symbol = 63;
- else
- return -1;
-
- // Write stuff into the destination buffer.
- switch (state) {
- case 0: destination[index] = symbol << 2;
- state = 1;
- break;
- case 1: destination[index] |= symbol >> 4;
- destination[++index] = (symbol & 0x0f) << 4;
- state = 2;
- break;
- case 2: destination[index] |= symbol >> 2;
- destination[++index] = (symbol & 0x03) << 6;
- state = 3;
- break;
- case 3: destination[index++] |= symbol;
- state = 0;
- break;
- }
+ unsigned int i;
+
+ // Sanity checks.
+ if (!source || !destination)
+ return -1;
+
+ int state = 0;
+ int index = 0;
+ char symbol;
+
+ // Process all source symbols.
+ for (i = 0; i < length; ++i) {
+
+ symbol = source[i];
+
+ // Skip whitespace.
+ if (isspace(symbol))
+ continue;
+
+ // Are we at the end?
+ if (symbol == '=')
+ break;
+
+ // Lookup symbol in base-64 table.
+ if ((symbol >= 'A') && (symbol <= 'Z'))
+ symbol = symbol - 'A';
+ else if ((symbol >= 'a') && (symbol <= 'z'))
+ symbol = symbol - 'a' + 26;
+ else if ((symbol >= '0') && (symbol <= '9'))
+ symbol = symbol - '0' + 52;
+ else if (symbol == '+')
+ symbol = 62;
+ else if (symbol == '/')
+ symbol = 63;
+ else
+ return -1;
+
+ // Write stuff into the destination buffer.
+ switch (state) {
+ case 0: destination[index] = symbol << 2;
+ state = 1;
+ break;
+ case 1: destination[index] |= symbol >> 4;
+ destination[++index] = (symbol & 0x0f) << 4;
+ state = 2;
+ break;
+ case 2: destination[index] |= symbol >> 2;
+ destination[++index] = (symbol & 0x03) << 6;
+ state = 3;
+ break;
+ case 3: destination[index++] |= symbol;
+ state = 0;
+ break;
+ }
- }
+ }
- // Did we end on a byte boundary, and/or with erroneous trailing characters?
- if (i < length) {
+ // Did we end on a byte boundary, and/or with erroneous trailing characters?
+ if (i < length) {
- // We've got a pad character. Skip it, and get the next symbol.
- symbol = source[++i];
+ // We've got a pad character. Skip it, and get the next symbol.
+ symbol = source[++i];
- // Check state.
- switch (state) {
- case 0:
- case 1: return -1;
- case 2: for (; i < length; ++i) {
+ // Check state.
+ switch (state) {
+ case 0:
+ case 1: return -1;
+ case 2: for (; i < length; ++i) {
symbol = source[i];
if (!isspace(symbol))
- break;
- }
- if (symbol != '=' || i == length)
+ break;
+ }
+ if (symbol != '=' || i == length)
return -1;
- symbol = source[++i];
- case 3: for (; i < length; ++i) {
+ symbol = source[++i];
+ case 3: for (; i < length; ++i) {
symbol = source[i];
if (symbol == '\0')
- break;
+ break;
if (!isspace(symbol))
- return -1;
- }
- if (destination[index] != '\0')
+ return -1;
+ }
+ if (destination[index] != '\0')
return -1;
+ }
}
- }
- // We ended by seeing the end of the string. Make sure we have no partial bytes lying around.
- else {
- if (state != 0)
- return -1;
- }
+ // We ended by seeing the end of the string. Make sure we have no partial bytes lying around.
+ else {
+ if (state != 0)
+ return -1;
+ }
- return index;
+ return index;
}
@@ -126,55 +126,55 @@ Fast_Base64::Decode(const char *source, unsigned int length, char *destination)
int
Fast_Base64::Encode(const char *source, unsigned int length, char *destination) {
- unsigned int i;
-
- // Sanity checks.
- if (!source || !destination)
- return -1;
-
- char a, b, c, d; // Holds encoded bytes.
- const char *p = source; // Points into the current location in the source buffer.
- char *q = destination; // Points into the current location in the destination buffer.
- unsigned int n = length / 3; // Number of 4-byte encodings.
- unsigned int m = length - 3 * n; // Remainder if length is not divisible by 3.
-
- // Encode symbols. Three source symbols translates into four destination synbols.
- for (i = 0; i < n; ++i) {
- a = ((p[0] & 0xfc) >> 2);
- b = ((p[0] & 0x03) << 4) | ((p[1] & 0xf0) >> 4);
- c = ((p[1] & 0x0f) << 2) | ((p[2] & 0xc0) >> 6);
- d = p[2] & 0x3f;
- p += 3;
- sprintf(q, "%c%c%c%c",
- _base64[static_cast<int>(a)],
- _base64[static_cast<int>(b)],
- _base64[static_cast<int>(c)],
- _base64[static_cast<int>(d)]);
- q += 4;
- }
-
- // Handle remaining symbols, if any.
- if (m == 0) {
- }
- else if (m == 1) {
- a = ((p[0] & 0xfc) >> 2);
- b = ((p[0] & 0x03) << 4);
- sprintf(q, "%c%c==",
- _base64[static_cast<int>(a)],
- _base64[static_cast<int>(b)]);
- q += 4;
- }
- else {
- a = ((p[0] & 0xfc) >> 2);
- b = ((p[0] & 0x03) << 4) | ((p[1] & 0xf0) >> 4);
- c = ((p[1] & 0x0f) << 2);
- sprintf(q, "%c%c%c=",
- _base64[static_cast<int>(a)],
- _base64[static_cast<int>(b)],
- _base64[static_cast<int>(c)]);
- q += 4;
- }
-
- return q - destination + 1;
+ unsigned int i;
+
+ // Sanity checks.
+ if (!source || !destination)
+ return -1;
+
+ char a, b, c, d; // Holds encoded bytes.
+ const char *p = source; // Points into the current location in the source buffer.
+ char *q = destination; // Points into the current location in the destination buffer.
+ unsigned int n = length / 3; // Number of 4-byte encodings.
+ unsigned int m = length - 3 * n; // Remainder if length is not divisible by 3.
+
+ // Encode symbols. Three source symbols translates into four destination synbols.
+ for (i = 0; i < n; ++i) {
+ a = ((p[0] & 0xfc) >> 2);
+ b = ((p[0] & 0x03) << 4) | ((p[1] & 0xf0) >> 4);
+ c = ((p[1] & 0x0f) << 2) | ((p[2] & 0xc0) >> 6);
+ d = p[2] & 0x3f;
+ p += 3;
+ sprintf(q, "%c%c%c%c",
+ _base64[static_cast<int>(a)],
+ _base64[static_cast<int>(b)],
+ _base64[static_cast<int>(c)],
+ _base64[static_cast<int>(d)]);
+ q += 4;
+ }
+
+ // Handle remaining symbols, if any.
+ if (m == 0) {
+ }
+ else if (m == 1) {
+ a = ((p[0] & 0xfc) >> 2);
+ b = ((p[0] & 0x03) << 4);
+ sprintf(q, "%c%c==",
+ _base64[static_cast<int>(a)],
+ _base64[static_cast<int>(b)]);
+ q += 4;
+ }
+ else {
+ a = ((p[0] & 0xfc) >> 2);
+ b = ((p[0] & 0x03) << 4) | ((p[1] & 0xf0) >> 4);
+ c = ((p[1] & 0x0f) << 2);
+ sprintf(q, "%c%c%c=",
+ _base64[static_cast<int>(a)],
+ _base64[static_cast<int>(b)],
+ _base64[static_cast<int>(c)]);
+ q += 4;
+ }
+
+ return q - destination + 1;
}
diff --git a/fastlib/src/vespa/fastlib/util/base64.h b/fastlib/src/vespa/fastlib/util/base64.h
index 1df209ee143..1138d7c0aaa 100644
--- a/fastlib/src/vespa/fastlib/util/base64.h
+++ b/fastlib/src/vespa/fastlib/util/base64.h
@@ -23,42 +23,41 @@
class Fast_Base64 {
public:
- /**
- *****************************************************************************
- * Encodes source in base64 into destination.
- * Returns the number of data bytes stored in destination, or -1 on error.
- *
- * @param source is the source buffer
- * @param length is the length of the source string
- * @param destination is the destination buffer
- * @return Length of the destination string, INCLUDING the trailing '\0' byte.
- * Returns -1 on error.
- * @author Aleksander �hrn
- ***************************************************************************/
- static int Encode(const char *source,
- unsigned int length,
- char *destination);
+ /**
+ *****************************************************************************
+ * Encodes source in base64 into destination.
+ * Returns the number of data bytes stored in destination, or -1 on error.
+ *
+ * @param source is the source buffer
+ * @param length is the length of the source string
+ * @param destination is the destination buffer
+ * @return Length of the destination string, INCLUDING the trailing '\0' byte.
+ * Returns -1 on error.
+ * @author Aleksander �hrn
+ ***************************************************************************/
+ static int Encode(const char *source,
+ unsigned int length,
+ char *destination);
- /**
- ***************************************************************************
- * Decodes the base64 encoded source into destination.
- * Returns the number of data bytes stored in destination, or -1 on error.
- * Note that there is no trailing '\0' byte automatically padded to the
- * destination buffer. So the length returned is the same as was originally
- * used for length the Encode() call.
- *
- * @param source is the source buffer
- * @param length is the length of the source string,
- * NOT including the terminating '\0' byte
- * @param destination is the destination buffer, identical to the buffer
- * that originally went into Encode().
- * @return Length of the destination string.
- * Returns -1 on error.
- * @author Aleksander �hrn
- **************************************************************************/
- static int Decode(const char *source,
- unsigned int length,
- char *destination);
+ /**
+ ***************************************************************************
+ * Decodes the base64 encoded source into destination.
+ * Returns the number of data bytes stored in destination, or -1 on error.
+ * Note that there is no trailing '\0' byte automatically padded to the
+ * destination buffer. So the length returned is the same as was originally
+ * used for length the Encode() call.
+ *
+ * @param source is the source buffer
+ * @param length is the length of the source string,
+ * NOT including the terminating '\0' byte
+ * @param destination is the destination buffer, identical to the buffer
+ * that originally went into Encode().
+ * @return Length of the destination string.
+ * Returns -1 on error.
+ * @author Aleksander �hrn
+ **************************************************************************/
+ static int Decode(const char *source,
+ unsigned int length,
+ char *destination);
};
-
diff --git a/fastlib/src/vespa/fastlib/util/tests/bagtest.cpp b/fastlib/src/vespa/fastlib/util/tests/bagtest.cpp
index ba53e971357..b06319c238a 100644
--- a/fastlib/src/vespa/fastlib/util/tests/bagtest.cpp
+++ b/fastlib/src/vespa/fastlib/util/tests/bagtest.cpp
@@ -9,7 +9,7 @@ int BagTest::Main() {
bt.SetStream(&std::cout);
bt.Run();
if (bt.Report() > 0) {
- return 1;
+ return 1;
}
return 0;
diff --git a/fastlib/src/vespa/fastlib/util/tests/bagtest.h b/fastlib/src/vespa/fastlib/util/tests/bagtest.h
index 597317bf38e..7da461c0189 100644
--- a/fastlib/src/vespa/fastlib/util/tests/bagtest.h
+++ b/fastlib/src/vespa/fastlib/util/tests/bagtest.h
@@ -10,520 +10,520 @@
class Tester
{
private:
- bool _isTouched;
+ bool _isTouched;
- int _i;
+ int _i;
protected:
- Tester() : _isTouched(false), _i() { }
+ Tester() : _isTouched(false), _i() { }
public:
- Tester(int i) : _isTouched(false), _i(i) { }
+ Tester(int i) : _isTouched(false), _i(i) { }
- ~Tester() { }
+ ~Tester() { }
- bool IsTouched() const { return _isTouched; }
+ bool IsTouched() const { return _isTouched; }
- void Touch() {
- if(_isTouched) { _isTouched = false; }
- else { _isTouched = true; }
- }
+ void Touch() {
+ if(_isTouched) { _isTouched = false; }
+ else { _isTouched = true; }
+ }
- int GetI() { return _i; }
+ int GetI() { return _i; }
};
std::ostream& operator<<(std::ostream& s, const Tester* t)
{
- return s << static_cast<const void*>(t) << ": " << (t->IsTouched()?"X":"-");
+ return s << static_cast<const void*>(t) << ": " << (t->IsTouched()?"X":"-");
}
//Print method, not used when thing works
template <typename T> void PrintBag(Fast_Bag<T>* bag) {
- for (Fast_BagIterator<T> bagIterator(bag);
- !bagIterator.End();
- bagIterator.Next()) {
- std::cout << bagIterator.GetCurrent() << " ";
- }
- std::cout << std::endl;
+ for (Fast_BagIterator<T> bagIterator(bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ std::cout << bagIterator.GetCurrent() << " ";
+ }
+ std::cout << std::endl;
}
//Print method, not used when thing works
template <typename T> void PrintArray(T* array, int n) {
- for(int i = 0; i < n; i++) {
- std::cout << array[i] << " ";
- }
- std::cout << std::endl;
+ for(int i = 0; i < n; i++) {
+ std::cout << array[i] << " ";
+ }
+ std::cout << std::endl;
}
class BagTester : public Test
{
private:
- BagTester(const BagTester &other);
- BagTester& operator=(const BagTester &other);
+ BagTester(const BagTester &other);
+ BagTester& operator=(const BagTester &other);
- Tester** _array;
- Fast_Bag<Tester*>* _bag;
+ Tester** _array;
+ Fast_Bag<Tester*>* _bag;
- int _elements;
+ int _elements;
- void RunTest(void (BagTester::*testFunc)()) {
- StartUp();
- (this->*testFunc)();
- TearDown();
- }
+ void RunTest(void (BagTester::*testFunc)()) {
+ StartUp();
+ (this->*testFunc)();
+ TearDown();
+ }
protected:
- /** Touches all elemenets in the bag */
- void TouchBag(Fast_Bag<Tester*>* bag) {
- for(Fast_BagIterator<Tester*> bagIterator(bag);
- !bagIterator.End();
- bagIterator.Next()) {
- bagIterator.GetCurrent()->Touch();
+ /** Touches all elemenets in the bag */
+ void TouchBag(Fast_Bag<Tester*>* bag) {
+ for(Fast_BagIterator<Tester*> bagIterator(bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ bagIterator.GetCurrent()->Touch();
+ }
}
- }
- /** Generate a test bag with num tester and init cap of max */
- void InitArray(int num, int maxCapacity = 0) {
- if (maxCapacity == 0) maxCapacity = num;
- _bag = new Fast_Bag<Tester*>(maxCapacity);
- for(int i = 0; i < num; i++) {
- Tester* tester = new Tester(i);
- _array[i] = tester;
- _bag->Insert(tester);
+ /** Generate a test bag with num tester and init cap of max */
+ void InitArray(int num, int maxCapacity = 0) {
+ if (maxCapacity == 0) maxCapacity = num;
+ _bag = new Fast_Bag<Tester*>(maxCapacity);
+ for(int i = 0; i < num; i++) {
+ Tester* tester = new Tester(i);
+ _array[i] = tester;
+ _bag->Insert(tester);
+ }
+ _elements = num;
}
- _elements = num;
- }
public:
- BagTester(void)
- : _array(NULL),
- _bag(NULL),
- _elements(0)
- {
- }
+ BagTester(void)
+ : _array(NULL),
+ _bag(NULL),
+ _elements(0)
+ {
+ }
+
+
+ /** Checks if the iterator new'ed with a bagpointer works */
+ void IterPtrInitTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
- /** Checks if the iterator new'ed with a bagpointer works */
- void IterPtrInitTest(void) {
- bool ok = true;
- int num = 10;
+ TouchBag(_bag);
- InitArray(num);
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- TouchBag(_bag);
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
+ /** Checks if the iterator new'ed with a bagref works */
+ void IterRefInitTest(void) {
+ bool ok = true;
+ int num = 10;
- _test(ok);
- }
+ InitArray(num);
- /** Checks if the iterator new'ed with a bagref works */
- void IterRefInitTest(void) {
- bool ok = true;
- int num = 10;
+ for(Fast_BagIterator<Tester*> bagIterator(*_bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ bagIterator.GetCurrent()->Touch();
+ }
- InitArray(num);
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- for(Fast_BagIterator<Tester*> bagIterator(*_bag);
- !bagIterator.End();
- bagIterator.Next()) {
- bagIterator.GetCurrent()->Touch();
- }
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
+ void IterPPOperTest(void) {
+ bool ok = true;
+ int num = 10;
- _test(ok);
- }
+ InitArray(num);
- void IterPPOperTest(void) {
- bool ok = true;
- int num = 10;
+ for(Fast_BagIterator<Tester*> bagIterator(*_bag);
+ !bagIterator.End();
+ ++bagIterator,
+ bagIterator++) {
+ bagIterator.GetCurrent()->Touch();
+ }
- InitArray(num);
+ for(int i = 0 ; i < num; i = i + 2) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- for(Fast_BagIterator<Tester*> bagIterator(*_bag);
- !bagIterator.End();
- ++bagIterator,
- bagIterator++) {
- bagIterator.GetCurrent()->Touch();
- }
+ delete _bag;
- for(int i = 0 ; i < num; i = i + 2) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
- _test(ok);
- }
+ /** Checks if the iterator new'ed with a bagref works */
+ void IterPtrStartTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
- /** Checks if the iterator new'ed with a bagref works */
- void IterPtrStartTest(void) {
- bool ok = true;
- int num = 10;
+ Fast_BagIterator<Tester*> bagIterator;
- InitArray(num);
+ for(bagIterator.Start(*_bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ bagIterator.GetCurrent()->Touch();
+ }
- Fast_BagIterator<Tester*> bagIterator;
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- for(bagIterator.Start(*_bag);
- !bagIterator.End();
- bagIterator.Next()) {
- bagIterator.GetCurrent()->Touch();
- }
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
- _test(ok);
- }
+ /** Checks if the iterator new'ed with a bagref works */
+ void IterRefStartTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
- /** Checks if the iterator new'ed with a bagref works */
- void IterRefStartTest(void) {
- bool ok = true;
- int num = 10;
+ Fast_BagIterator<Tester*> bagIterator;
- InitArray(num);
+ for(bagIterator.Start(_bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ bagIterator.GetCurrent()->Touch();
+ }
- Fast_BagIterator<Tester*> bagIterator;
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- for(bagIterator.Start(_bag);
- !bagIterator.End();
- bagIterator.Next()) {
- bagIterator.GetCurrent()->Touch();
- }
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
- _test(ok);
- }
+ void IterStartOverTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
- void IterStartOverTest(void) {
- bool ok = true;
- int num = 10;
+ int n = 0;
+ Fast_BagIterator<Tester*> bagIterator;
+ for(bagIterator.Start(_bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ if(n>4) break;
+ n++;
+ }
- InitArray(num);
+ for(bagIterator.Start(_bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ bagIterator.GetCurrent()->Touch();
+ }
- int n = 0;
- Fast_BagIterator<Tester*> bagIterator;
- for(bagIterator.Start(_bag);
- !bagIterator.End();
- bagIterator.Next()) {
- if(n>4) break;
- n++;
- }
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- for(bagIterator.Start(_bag);
- !bagIterator.End();
- bagIterator.Next()) {
- bagIterator.GetCurrent()->Touch();
- }
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
- _test(ok);
- }
+ /** Checks if the delete in iterator works */
+ void DeleteEnumTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
+ Tester* del = NULL;
- /** Checks if the delete in iterator works */
- void DeleteEnumTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num);
+ for(Fast_BagIterator<Tester*> bagIterator(_bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ if(bagIterator.GetCurrent()->GetI() == 5) {
+ del = bagIterator.GetCurrent();
+ bagIterator.RemoveCurrent();
+ }
+ }
- Tester* del = NULL;
+ // <inv: del points to a tester not in the bag anymore>
- for(Fast_BagIterator<Tester*> bagIterator(_bag);
- !bagIterator.End();
- bagIterator.Next()) {
- if(bagIterator.GetCurrent()->GetI() == 5) {
- del = bagIterator.GetCurrent();
- bagIterator.RemoveCurrent();
- }
- }
+ TouchBag(_bag);
- // <inv: del points to a tester not in the bag anymore>
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ if(_array[i] != del) {
+ ok = false;
+ }
+ }
+ }
- TouchBag(_bag);
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- if(_array[i] != del) {
- ok = false;
- }
- }
+ _test(ok);
}
- delete _bag;
+ /** Checks is the RemoveElement method in bag.*/
+ void RemoveTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num, num+num);
- _test(ok);
- }
+ Tester* del = NULL;
- /** Checks is the RemoveElement method in bag.*/
- void RemoveTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num, num+num);
+ for(Fast_BagIterator<Tester*> bagIterator(_bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ if(bagIterator.GetCurrent()->GetI() == 5) {
+ del = bagIterator.GetCurrent();
+ }
+ }
- Tester* del = NULL;
+ _bag->RemoveElement(del);
- for(Fast_BagIterator<Tester*> bagIterator(_bag);
- !bagIterator.End();
- bagIterator.Next()) {
- if(bagIterator.GetCurrent()->GetI() == 5) {
- del = bagIterator.GetCurrent();
- }
- }
+ // <inv: del points to a tester not in the bag anymore>
- _bag->RemoveElement(del);
+ TouchBag(_bag);
- // <inv: del points to a tester not in the bag anymore>
+ for(int i = 0 ; i < 10; i++) {
+ if(!_array[i]->IsTouched()) {
+ if(_array[i] != del) {
+ ok = false;
+ }
+ }
+ }
- TouchBag(_bag);
+ delete _bag;
- for(int i = 0 ; i < 10; i++) {
- if(!_array[i]->IsTouched()) {
- if(_array[i] != del) {
- ok = false;
- }
- }
+ _test(ok);
}
- delete _bag;
- _test(ok);
- }
+ /**Test the HasElement method in bag.*/
+ void HasElementTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num, num+num);
+ Tester* current= NULL;
- /**Test the HasElement method in bag.*/
- void HasElementTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num, num+num);
+ for(Fast_BagIterator<Tester*> bagIterator(_bag);
+ !bagIterator.End();
+ bagIterator.Next()) {
+ current=bagIterator.GetCurrent();
+ if(!_bag->HasElement(current)) {
+ ok=false;
+ }
+ }
+ Tester* t=new Tester(4);
+ if(_bag->HasElement(t) ) {
+ ok=false;
+ }
- Tester* current= NULL;
+ delete t;
+ delete _bag;
- for(Fast_BagIterator<Tester*> bagIterator(_bag);
- !bagIterator.End();
- bagIterator.Next()) {
- current=bagIterator.GetCurrent();
- if(!_bag->HasElement(current)) {
- ok=false;
- }
- }
- Tester* t=new Tester(4);
- if(_bag->HasElement(t) ) {
- ok=false;
+ _test(ok);
}
- delete t;
- delete _bag;
+ void GrowTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num, 2);
- _test(ok);
- }
+ // <inv: now the bag has grown many times>
+ TouchBag(_bag);
- void GrowTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num, 2);
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- // <inv: now the bag has grown many times>
- TouchBag(_bag);
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
-
- _test(ok);
- }
+ void CopyConstTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
+ Fast_Bag<Tester*> bag(*_bag);
+ TouchBag(&bag);
+
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- void CopyConstTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num);
- Fast_Bag<Tester*> bag(*_bag);
- TouchBag(&bag);
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
+ void AssignTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
- _test(ok);
- }
+ Fast_Bag<Tester*> bag;
+ bag = *_bag;
- void AssignTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num);
+ TouchBag(&bag);
- Fast_Bag<Tester*> bag;
- bag = *_bag;
+ for(int i = 0 ; i < num; i++) {
+ if(!_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- TouchBag(&bag);
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(!_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
- _test(ok);
- }
+ void EqualTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
+ Fast_Bag<Tester*> equalBag;
+ equalBag = *_bag;
- void EqualTest(void) {
- bool ok = true;
- int num = 10;
+ if(!(equalBag == *_bag)) { ok = false; }
- InitArray(num);
- Fast_Bag<Tester*> equalBag;
- equalBag = *_bag;
+ Tester *elem1 = new Tester(4);
+ equalBag.Insert(elem1);
- if(!(equalBag == *_bag)) { ok = false; }
+ if(equalBag == *_bag) { ok = false; }
- Tester *elem1 = new Tester(4);
- equalBag.Insert(elem1);
+ equalBag.RemoveElement(elem1);
+ delete elem1;
+ delete _bag;
- if(equalBag == *_bag) { ok = false; }
+ _test(ok);
+ }
- equalBag.RemoveElement(elem1);
- delete elem1;
- delete _bag;
- _test(ok);
- }
+ void RemoveAllElementsTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
+ _bag->RemoveAllElements();
+ TouchBag(_bag);
- void RemoveAllElementsTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num);
- _bag->RemoveAllElements();
+ for(int i = 0 ; i < num; i++) {
+ if(_array[i]->IsTouched()) {
+ ok = false;
+ }
+ }
- TouchBag(_bag);
+ delete _bag;
- for(int i = 0 ; i < num; i++) {
- if(_array[i]->IsTouched()) {
- ok = false;
- }
+ _test(ok);
}
- delete _bag;
+ void GetBlocksizeTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
+ if(_bag->GetBlocksize() != num) {
+ ok = false;
+ }
- _test(ok);
- }
+ delete _bag;
- void GetBlocksizeTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num);
- if(_bag->GetBlocksize() != num) {
- ok = false;
+ _test(ok);
}
- delete _bag;
+ void SetBlocksizeTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
+ _bag->SetBlocksize(19);
+ if(_bag->GetBlocksize() != 19) {
+ ok = false;
+ }
- _test(ok);
- }
+ delete _bag;
- void SetBlocksizeTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num);
- _bag->SetBlocksize(19);
- if(_bag->GetBlocksize() != 19) {
- ok = false;
+ _test(ok);
}
- delete _bag;
+ void NumberOfElementsTest(void) {
+ bool ok = true;
+ int num = 10;
+ InitArray(num);
+ if(_bag->NumberOfElements() != num) {
+ ok= false;
+ }
+ _bag->RemoveAllElements();
+ if(_bag->NumberOfElements() != 0) {
+ ok = false;
+ }
- _test(ok);
- }
+ delete _bag;
- void NumberOfElementsTest(void) {
- bool ok = true;
- int num = 10;
- InitArray(num);
- if(_bag->NumberOfElements() != num) {
- ok= false;
- }
- _bag->RemoveAllElements();
- if(_bag->NumberOfElements() != 0) {
- ok = false;
+ _test(ok);
}
- delete _bag;
-
- _test(ok);
- }
-
- void StartUp(void) {
- _array = new Tester*[1024];
- }
+ void StartUp(void) {
+ _array = new Tester*[1024];
+ }
- void TearDown(void) {
- for(int i = 0; i < _elements; i++) {
- delete _array[i];
+ void TearDown(void) {
+ for(int i = 0; i < _elements; i++) {
+ delete _array[i];
+ }
+ delete[] _array;
}
- delete[] _array;
- }
void Run() override {
RunTest(&BagTester::IterPtrInitTest);
diff --git a/fastlib/src/vespa/fastlib/util/tests/base64test.cpp b/fastlib/src/vespa/fastlib/util/tests/base64test.cpp
index 92cc2fee719..531f22a6e27 100644
--- a/fastlib/src/vespa/fastlib/util/tests/base64test.cpp
+++ b/fastlib/src/vespa/fastlib/util/tests/base64test.cpp
@@ -12,86 +12,86 @@ public:
int
Base64Test::Main(void) {
- char buffer0[1024]; // Original text.
- char buffer1[1024]; // Encoded text.
- char buffer2[1024]; // Decoded text.
-
- sprintf(buffer0, "Hello, world! This is a test. 123.");
-
- int length0 = strlen(buffer0);
- int length1 = Fast_Base64::Encode(buffer0, length0, buffer1);
-
- assert(length1 != -1);
-
- int length2 = Fast_Base64::Decode(buffer1, length1, buffer2);
-
- assert(length2 != -1);
- assert(length2 == length0);
- assert(0 == strncmp(buffer0, buffer2, length0));
-
- printf("Original = '%.*s'\n", length0, buffer0);
- printf("Encoded = '%.*s'\n", length1, buffer1);
- printf("Decoded = '%.*s'\n", length2, buffer2);
-
-
- // Big file test
- vespalib::string filename("base64test");
-
- if (_argc > 1) {
- filename.assign(_argv[1]);
- }
-
- FastOS_StatInfo statInfo;
- int filesize = 0;
- if (FastOS_File::Stat(filename.c_str(), &statInfo)) {
- filesize = statInfo._size;
- } else {
- printf("FAILURE: Could not stat file %s\n", filename.c_str());
- exit(1);
- }
-
- FastOS_File testFile;
- if (!testFile.OpenReadOnly(filename.c_str())) {
- printf ("FAILURE: Could not open file %s for reading\n", filename.c_str());
- exit(1);
- }
-
-
- auto unencoded = std::make_unique<char[]>(filesize);
- auto encoded = std::make_unique<char[]>(filesize * 2);
- auto decoded = std::make_unique<char[]>(filesize + 1);
- testFile.ReadBuf(unencoded.get(), filesize);
-
- int encLen = Fast_Base64::Encode(unencoded.get(), filesize, encoded.get());
- if (encLen == -1) {
- printf("FAILURE: Encoding failed\n");
- exit(1);
- }
-
- // encLen is including the trailing '\0' byte, so subtract one
- int decLen = Fast_Base64::Decode(encoded.get(), encLen - 1, decoded.get());
- if (decLen == -1) {
- printf("FAILURE: Decoding failed\n");
- exit(1);
- }
-
- if (filesize != decLen) {
- printf("FAILURE: decoded length != original filesize, filesize = %d, decLen = %d\n", filesize, decLen);
- exit(1);
- }
- char *uencP = unencoded.get();
- char *decP = decoded.get();
- for (int i = 0; i < filesize; i++) {
- if (*uencP != *decP) {
- printf ("FAILURE: Encode or Decode ERROR! at byte offset %d\n", i);
- exit(1);
+ char buffer0[1024]; // Original text.
+ char buffer1[1024]; // Encoded text.
+ char buffer2[1024]; // Decoded text.
+
+ sprintf(buffer0, "Hello, world! This is a test. 123.");
+
+ int length0 = strlen(buffer0);
+ int length1 = Fast_Base64::Encode(buffer0, length0, buffer1);
+
+ assert(length1 != -1);
+
+ int length2 = Fast_Base64::Decode(buffer1, length1, buffer2);
+
+ assert(length2 != -1);
+ assert(length2 == length0);
+ assert(0 == strncmp(buffer0, buffer2, length0));
+
+ printf("Original = '%.*s'\n", length0, buffer0);
+ printf("Encoded = '%.*s'\n", length1, buffer1);
+ printf("Decoded = '%.*s'\n", length2, buffer2);
+
+
+ // Big file test
+ vespalib::string filename("base64test");
+
+ if (_argc > 1) {
+ filename.assign(_argv[1]);
+ }
+
+ FastOS_StatInfo statInfo;
+ int filesize = 0;
+ if (FastOS_File::Stat(filename.c_str(), &statInfo)) {
+ filesize = statInfo._size;
+ } else {
+ printf("FAILURE: Could not stat file %s\n", filename.c_str());
+ exit(1);
+ }
+
+ FastOS_File testFile;
+ if (!testFile.OpenReadOnly(filename.c_str())) {
+ printf ("FAILURE: Could not open file %s for reading\n", filename.c_str());
+ exit(1);
+ }
+
+
+ auto unencoded = std::make_unique<char[]>(filesize);
+ auto encoded = std::make_unique<char[]>(filesize * 2);
+ auto decoded = std::make_unique<char[]>(filesize + 1);
+ testFile.ReadBuf(unencoded.get(), filesize);
+
+ int encLen = Fast_Base64::Encode(unencoded.get(), filesize, encoded.get());
+ if (encLen == -1) {
+ printf("FAILURE: Encoding failed\n");
+ exit(1);
+ }
+
+ // encLen is including the trailing '\0' byte, so subtract one
+ int decLen = Fast_Base64::Decode(encoded.get(), encLen - 1, decoded.get());
+ if (decLen == -1) {
+ printf("FAILURE: Decoding failed\n");
+ exit(1);
+ }
+
+ if (filesize != decLen) {
+ printf("FAILURE: decoded length != original filesize, filesize = %d, decLen = %d\n", filesize, decLen);
+ exit(1);
+ }
+ char *uencP = unencoded.get();
+ char *decP = decoded.get();
+ for (int i = 0; i < filesize; i++) {
+ if (*uencP != *decP) {
+ printf ("FAILURE: Encode or Decode ERROR! at byte offset %d\n", i);
+ exit(1);
+ }
+ uencP++;
+ decP++;
}
- uencP++;
- decP++;
- }
- printf("SUCCESS: Encode/decode OK\n");
+ printf("SUCCESS: Encode/decode OK\n");
- return 0;
+ return 0;
}
diff --git a/fastlib/src/vespa/fastlib/util/tests/wildcard_match_test.cpp b/fastlib/src/vespa/fastlib/util/tests/wildcard_match_test.cpp
index 0678cebf2b6..a4d8320a29c 100644
--- a/fastlib/src/vespa/fastlib/util/tests/wildcard_match_test.cpp
+++ b/fastlib/src/vespa/fastlib/util/tests/wildcard_match_test.cpp
@@ -5,44 +5,44 @@
namespace
{
- template<typename T>
- bool Test(const T* word, const T* pattern, bool expect)
- {
+template<typename T>
+bool Test(const T* word, const T* pattern, bool expect)
+{
if (fast::util::wildcard_match(word, pattern) != expect)
{
- if (expect == true)
- std::cout << "ERROR: " << word << " didn't match " << pattern << std::endl;
- else
- std::cout << "ERROR: " << word << " matched " << pattern << std::endl;
+ if (expect == true)
+ std::cout << "ERROR: " << word << " didn't match " << pattern << std::endl;
+ else
+ std::cout << "ERROR: " << word << " matched " << pattern << std::endl;
- return false;
+ return false;
}
return true;
- }
+}
}
int main(int, char **)
{
- bool success =
- Test("a", "b", false) &&
- Test("b", "b", true) &&
- Test("abc", "def", false) &&
- Test("def", "def", true) &&
- Test("def", "d?f", true) &&
- Test("def", "d?d", false) &&
- Test("def", "??d", false) &&
- Test("def", "d??", true) &&
- Test("abcdef", "a*e", false) &&
- Test("abcdef", "a*f", true) &&
- Test("abcdef", "a?c*f", true) &&
- Test("abcdef", "a?b*f", false) &&
- Test("abcdef", "a*b*f", true) &&
- Test("abcdef", "abc*", true) &&
- Test("abcdef", "*def", true);
+ bool success =
+ Test("a", "b", false) &&
+ Test("b", "b", true) &&
+ Test("abc", "def", false) &&
+ Test("def", "def", true) &&
+ Test("def", "d?f", true) &&
+ Test("def", "d?d", false) &&
+ Test("def", "??d", false) &&
+ Test("def", "d??", true) &&
+ Test("abcdef", "a*e", false) &&
+ Test("abcdef", "a*f", true) &&
+ Test("abcdef", "a?c*f", true) &&
+ Test("abcdef", "a?b*f", false) &&
+ Test("abcdef", "a*b*f", true) &&
+ Test("abcdef", "abc*", true) &&
+ Test("abcdef", "*def", true);
- if (success == true)
- std::cout << "wildcard_match_test: SUCCESS" << std::endl;
+ if (success == true)
+ std::cout << "wildcard_match_test: SUCCESS" << std::endl;
- return 0;
+ return 0;
}
diff --git a/fastlib/src/vespa/fastlib/util/wildcard_match.h b/fastlib/src/vespa/fastlib/util/wildcard_match.h
index c65330be80f..03b006610f7 100644
--- a/fastlib/src/vespa/fastlib/util/wildcard_match.h
+++ b/fastlib/src/vespa/fastlib/util/wildcard_match.h
@@ -3,53 +3,52 @@
namespace fast
{
- namespace util
- {
- template<typename T>
- bool wildcard_match(const T* word, const T* pattern, T multiple = '*',
- T single = '?')
- {
- while (*word != 0)
- if (*pattern == 0)
+namespace util
+{
+template<typename T>
+bool wildcard_match(const T* word, const T* pattern, T multiple = '*',
+ T single = '?')
+{
+ while (*word != 0)
+ if (*pattern == 0)
return false;
- else if (*pattern == multiple)
- {
+ else if (*pattern == multiple)
+ {
// advance past occurrences of multiple
while (*pattern == multiple)
- ++pattern;
+ ++pattern;
// if pattern ended with multiple, we're done
if (*pattern == 0)
- return true;
+ return true;
while (*word != 0)
{
- // does this position in the word match
- if (*pattern == single || *pattern == *word)
- {
- // test the rest of the word
- if (wildcard_match(word, pattern, multiple, single) == true)
+ // does this position in the word match
+ if (*pattern == single || *pattern == *word)
{
- // it matched
- return true;
+ // test the rest of the word
+ if (wildcard_match(word, pattern, multiple, single) == true)
+ {
+ // it matched
+ return true;
+ }
}
- }
- // try next character
- ++word;
+ // try next character
+ ++word;
}
- }
- else if (*pattern != single && *pattern != *word)
+ }
+ else if (*pattern != single && *pattern != *word)
return false;
- else
- {
+ else
+ {
++word;
++pattern;
- }
+ }
- // should be at end of pattern too if the word matched
- return *pattern == 0;
- }
- }
+ // should be at end of pattern too if the word matched
+ return *pattern == 0;
+}
+}
}
-