Files
CodeRepository/Common/GdImageLib.cpp
chenzhen 222dda1e43 1,新增“App_ThermalImageSystem”;
2,新增“Apps”;
3,新增“Common”;
4,新增“FileList”;
5,新增“MediaX”;
6,新增“OpenSource”;
7,新增“Samples”;
8,新增“SoftwareBusinessLines”.
2026-02-14 23:03:23 +08:00

698 lines
60 KiB
C++

#include "GdImageLib.h"
#include <windows.h>
int GdImageLib::m_nImageWidth_Src = 0;
int GdImageLib::m_nImageHeight_Src = 0;
int GdImageLib::m_nImageWidth_Dest = 0;
int GdImageLib::m_nImageHeight_Dest = 0;
SwsContext* GdImageLib::m_pConvert = nullptr;
bool GdImageLib::m_bUpdate = false;
unsigned char* GdImageLib::m_pImageData_Src = nullptr;
unsigned char* GdImageLib::m_pImageData_Dest = nullptr;
int GdImageLib::m_nLineSize_Src[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int GdImageLib::m_nLineSize_Dest[8] = {0, 0, 0, 0, 0, 0, 0, 0};
unsigned char* GdImageLib::m_lineData_Src[8] = {0, 0, 0, 0, 0, 0, 0, 0};
unsigned char* GdImageLib::m_lineData_Dest[8] = {0, 0, 0, 0, 0, 0, 0, 0};
AVPixelFormat GdImageLib::m_pPixelFmt_Src = AV_PIX_FMT_NONE;
AVPixelFormat GdImageLib::m_pPixelFmt_Dest = AV_PIX_FMT_NONE;
QMutex GdImageLib::m_mutexConvert;
QVector<QVector<QRgb> > GdImageLib::m_varColorTable;
bool GdImageLib::m_bInitColorTable = false;
GdImageLib::GdImageLib()
{}
/*
* 将Y16数据转换成Y8数据
*/
void GdImageLib::Map16BitTo8Bit_u(unsigned char* pby8BitData, unsigned short *psh16BitData, int nDataLen, int nBrightness, int nContrast)
{
if (psh16BitData == NULL || pby8BitData == NULL || nDataLen <= 0)
{
return;
}
//指向直方图的数据指针
int pHist[65536] = { 0 };
memset(pHist, 0, 65536 * sizeof(int));
int i = 0;
for (i = 0; i < nDataLen; i++)
{
pHist[psh16BitData[i]]++;
}
//设置阈值大小为: AreaSigma*图象大小/100
//int nSigma = 3 * 768;
int nSigma = 0.05 * nDataLen;
int nSum = 0;
int nMin = 0;
int nMax = 0;
//求映射的最大最小值
for (i = 0; i < 65536; i++)
{
nSum += pHist[i];
if (nSum >= nSigma)
{
nMin = i;
break;
}
}
nSum = 0;
for (i = 65535; i >= 0; i--)
{
nSum += pHist[i];
if (nSum >= nSigma)
{
nMax = i;
break;
}
}
nBrightness = (nBrightness > 100) ? 100 : nBrightness;
nBrightness = (nBrightness < 0) ? 0 : nBrightness;
nContrast = (nContrast > 100) ? 100 : nContrast;
nContrast = (nContrast < 0) ? 0 : nContrast;
//计算对比度亮度
//float K = (float)(256.0 / (nMax - nMin + 1)) * float(nBrightness / 100.0);
//float C = (float)(-K * nMin) * float(nContrast / 100.0);
float K = (float)(256.0 / (nMax - nMin + 1)) * float(nBrightness / 100.0);
float C = (float)(128 - K * (nMax + nMin)/2) * float(nContrast / 100.0);
//图像映射
for (i = 0; i < nDataLen; i++)
{
int nValue = (int)(K * psh16BitData[i] + C);
if (nValue < 0)
{
pby8BitData[i] = 0/*255*/;
}
else if (nValue > 255)
{
pby8BitData[i] = 255/*0*/;
}
else
{
pby8BitData[i] = nValue/*255 - nValue*/;
}
}
}
/*
* 将Y16数据转换成Y8数据
*/
void GdImageLib::Map16BitTo8Bit(unsigned char* pby8BitData, short* psh16BitData, int nDataLen, int nBrightness, int nContrast)
{
if (NULL == psh16BitData || NULL == pby8BitData || nDataLen <= 0)
{
return;
}
//指向直方图的数据指针
int pHist[65536] = { 0 };
memset(pHist, 0, sizeof(pHist));
int i = 0;
for (i = 0; i < nDataLen; i++)
{
pHist[psh16BitData[i] + 32768]++;
}
//设置阈值大小为: AreaSigma*图象大小/100
//int nSigma = 3 * 768;
int nSigma = 0.05 * nDataLen;
int nSum = 0;
int nMin = 0;
int nMax = 0;
//求映射的最大最小值
for (i = 0; i < 65536; i++)
{
nSum += pHist[i];
if (nSum >= nSigma)
{
nMin = i - 32768;
break;
}
}
nSum = 0;
for (i = 65535; i >= 0; i--)
{
nSum += pHist[i];
if (nSum >= nSigma)
{
nMax = i - 32768;
break;
}
}
nBrightness = (nBrightness > 100) ? 100 : nBrightness;
nBrightness = (nBrightness < 0) ? 0 : nBrightness;
nContrast = (nContrast > 100) ? 100 : nContrast;
nContrast = (nContrast < 0) ? 0 : nContrast;
//计算对比度亮度
//float K = (float)(256.0 / (nMax - nMin + 1)) * float(nBrightness / 100.0);
//float C = (float)(-K * nMin) * float(nContrast / 100.0);
float K = (float)(256.0 / (nMax - nMin + 1)) * float(nBrightness / 100.0);
float C = (float)(128 - K * (nMax + nMin)/2) * float(nContrast / 100.0);
//图像映射
for (i = 0; i < nDataLen; i++)
{
int nValue = (int)(K * psh16BitData[i] + C);
if (nValue < 0)
{
pby8BitData[i] = 0/*255*/;
}
else if (nValue > 255)
{
pby8BitData[i] = 255/*0*/;
}
else
{
pby8BitData[i] = nValue/*(unsigned char)(255 - nValue)*/;
}
}
}
bool GdImageLib::Grey8ToRGBA(unsigned char *pRGBA, unsigned char *pGrey8, int nImageWidth, int nImageHeight, int nColorTableIndex)
{
if(!m_bInitColorTable)
{
// 初始化颜色表
for(int i = 0; i < 9; i++)
{
QVector<QRgb> tmpVector;
for (int j = 0; j < 256; ++j)
{
int b = IRImage_ColorTable[i][j][0];
int g = IRImage_ColorTable[i][j][1];
int r = IRImage_ColorTable[i][j][2];
tmpVector.push_back(qRgb(r, g, b));
}
m_varColorTable.push_back(tmpVector);
}
m_bInitColorTable = true;
}
if(nColorTableIndex > 8 || nColorTableIndex < 0)
{
return false;
}
QImage varBmpImage = QImage(pGrey8, nImageWidth, nImageHeight, QImage::Format_Indexed8);
varBmpImage.setColorTable(m_varColorTable.at(nColorTableIndex) );
varBmpImage = varBmpImage.convertToFormat(QImage::Format_RGBA8888);
memcpy(pRGBA, varBmpImage.bits(), nImageWidth*nImageHeight*4);
/*
if(!(nImageWidth > 4 && nImageHeight > 0 && nImageWidth%4 == 0) )
{
return false;
}
BITMAPINFOHEADER varBmpInfoHeader;
BITMAPFILEHEADER varBmpFileHeader;
memset(&varBmpInfoHeader, 0, sizeof(varBmpInfoHeader));
memset(&varBmpFileHeader, 0, sizeof(varBmpFileHeader));
varBmpInfoHeader.biBitCount = 8;
varBmpInfoHeader.biWidth = nImageWidth;
varBmpInfoHeader.biHeight = -nImageHeight;
varBmpInfoHeader.biPlanes = 1;
varBmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
varBmpInfoHeader.biSizeImage = nImageWidth * nImageHeight;
varBmpFileHeader.bfType = ((short)('M' << 8) | 'B'); //bmp类型
varBmpFileHeader.bfSize = 54 + nImageWidth * nImageHeight;
varBmpFileHeader.bfOffBits = 54;
//////////////////////////////////////////////////////////////////////////
QImage varBmpImage = QImage(nImageWidth, nImageHeight, QImage::Format_Indexed8);
QByteArray varImageFileData;
varImageFileData.append((char*)&varBmpFileHeader, sizeof(varBmpFileHeader));
varImageFileData.append((char*)&varBmpInfoHeader, sizeof(varBmpInfoHeader));
varImageFileData.append((char*)IRImage_ColorTable[nColorTableIndex], 1024);
varImageFileData.append((char*)pGrey8, nImageWidth*nImageHeight);
bool flag = varBmpImage.loadFromData(varImageFileData, "BMP");
varBmpImage = varBmpImage.convertToFormat(QImage::Format_RGB32);
memcpy_s(pRGBA, nImageWidth*nImageHeight*4, varBmpImage.bits(), nImageWidth*nImageHeight*4);
// test code
//varBmpImage.save("D:\\123_test.bmp", "bmp");
*/
return true;
}
void GdImageLib::Flip(unsigned char *pImgData, int nWidth, int nHeight, int nBytesOfPixel)
{
long lWidthByteCount = nWidth * nBytesOfPixel;//每行的字节数
unsigned char *pTempData = new unsigned char[lWidthByteCount];
//每两行进行交换
for (int i = 0; i < nHeight / 2; i++)
{
memcpy(pTempData, pImgData + i * lWidthByteCount, lWidthByteCount);
memcpy(pImgData + i * lWidthByteCount, pImgData + (nHeight - i - 1) * lWidthByteCount, lWidthByteCount);
memcpy(pImgData + (nHeight - i - 1) * lWidthByteCount, pTempData, lWidthByteCount);
}
delete pTempData;
}
void GdImageLib::Mirror(unsigned char *pImgData, int nWidth, int nHeight, int nBytesOfPixel)
{
long lWidthByteCount = nWidth * nBytesOfPixel;//每行的字节数
unsigned char *pTempData = new unsigned char[nBytesOfPixel];
//每两列进行交换
for (int i = 0; i < nHeight; i++)
{
for (int j = 0; j < nWidth / 2; j++)
{
memcpy(pTempData, pImgData + i * lWidthByteCount + j * nBytesOfPixel, nBytesOfPixel);
memcpy(pImgData + i * lWidthByteCount + j * nBytesOfPixel,
pImgData + i * lWidthByteCount + (nWidth - j - 1) * nBytesOfPixel, nBytesOfPixel);
memcpy(pImgData + i * lWidthByteCount + (nWidth - j - 1) * nBytesOfPixel,
pTempData, nBytesOfPixel);
}
}
delete pTempData;
}
void GdImageLib::FlipAndMirror(unsigned char *pImgData, int nWidth, int nHeight, int nBytesOfPixel)
{
//上下反转
Flip(pImgData, nWidth, nHeight, nBytesOfPixel);
//镜像变换
Mirror(pImgData, nWidth, nHeight, nBytesOfPixel);
}
// 顺时针旋转90度
void GdImageLib::Rorate90(unsigned char* pImageData_Dest, int& nImageWidth_Dest, int& nImageHeight_Dest, unsigned char* pImageData_Src, int nImageWidth_Src, int nImageHeight_Src, int nBytesOfPixel)
{
const int c_nSrcW = nImageWidth_Src;
const int c_nSrcH = nImageHeight_Src;
const int c_nDestW = c_nSrcH;
const int c_nDestH = c_nSrcW;
for(int i = 0; i < c_nDestH; i++)
{
for(int j = 0; j < c_nDestW; j++)
{
for(int k = 0; k < nBytesOfPixel; k++)
{
pImageData_Dest[(i*c_nDestW+j) * nBytesOfPixel + k] = pImageData_Src[((c_nSrcH-1-j)*c_nSrcW + i) * nBytesOfPixel + k];
}
}
}
nImageWidth_Dest = c_nDestW;
nImageHeight_Dest = c_nDestH;
}
// 顺时针旋转180度
void GdImageLib::Rorate180(unsigned char* pImageData_Dest, int& nImageWidth_Dest, int& nImageHeight_Dest, unsigned char* pImageData_Src, int nImageWidth_Src, int nImageHeight_Src, int nBytesOfPixel)
{
const int c_nSrcW = nImageWidth_Src;
const int c_nSrcH = nImageHeight_Src;
const int c_nDestW = c_nSrcW;
const int c_nDestH = c_nSrcH;
for(int i = 0; i < c_nDestH; i++)
{
for(int j = 0; j < c_nDestW; j++)
{
for(int k = 0; k < nBytesOfPixel; k++)
{
pImageData_Dest[(i * c_nDestW + j) * nBytesOfPixel + k] = pImageData_Src[((c_nSrcH - 1 - i) * c_nSrcW + c_nSrcW - 1 - j) * nBytesOfPixel + k];
}
}
}
nImageWidth_Dest = c_nDestW;
nImageHeight_Dest = c_nDestH;
}
// 顺时针旋转270度
void GdImageLib::Rorate270(unsigned char* pImageData_Dest, int& nImageWidth_Dest, int& nImageHeight_Dest, unsigned char* pImageData_Src, int nImageWidth_Src, int nImageHeight_Src, int nBytesOfPixel)
{
const int c_nSrcW = nImageWidth_Src;
const int c_nSrcH = nImageHeight_Src;
const int c_nDestW = c_nSrcH;
const int c_nDestH = c_nSrcW;
for(int i = 0; i < c_nDestH; i++)
{
for(int j = 0; j < c_nDestW; j++)
{
for(int k = 0; k < nBytesOfPixel; k++)
{
pImageData_Dest[(i * c_nDestW + j) * nBytesOfPixel + k] = pImageData_Src[(j * c_nSrcW + c_nSrcW - 1 - i) * nBytesOfPixel + k];
}
}
}
nImageWidth_Dest = c_nDestW;
nImageHeight_Dest = c_nDestH;
}
bool GdImageLib::ffmpeg_init()
{
ffmpeg_uninit();
avcodec_register_all();
return true;
}
void GdImageLib::ffmpeg_uninit()
{
if(nullptr != m_pConvert)
{
sws_freeContext(m_pConvert);
m_pConvert = nullptr;
}
}
bool GdImageLib::Convert(unsigned char* pImageData_Dest, AVPixelFormat dstFmt, int nImageWidth_Dest, int nImageHeight_Dest, unsigned char* pImageData_Src, AVPixelFormat srcFmt, int nImageWidth_Src, int nImageHeight_Src)
{
m_mutexConvert.lock();
if(nImageWidth_Src != m_nImageWidth_Src
|| nImageHeight_Src != m_nImageHeight_Src
|| nImageWidth_Dest != m_nImageWidth_Dest
|| nImageHeight_Dest != m_nImageHeight_Dest
|| pImageData_Src != m_pImageData_Src
|| pImageData_Dest != m_pImageData_Dest
|| srcFmt != m_pPixelFmt_Src
|| dstFmt != m_pPixelFmt_Dest)
{
m_nImageWidth_Src = nImageWidth_Src;
m_nImageHeight_Src = nImageHeight_Src;
m_nImageWidth_Dest = nImageWidth_Dest;
m_nImageHeight_Dest = nImageHeight_Dest;
m_pImageData_Src = pImageData_Src;
m_pImageData_Dest = pImageData_Dest;
m_pPixelFmt_Src = srcFmt;
m_pPixelFmt_Dest = dstFmt;
memset(m_pImageData_Dest, 0, m_nImageWidth_Dest*m_nImageHeight_Dest*4);
m_bUpdate = true;
}
else
{
m_bUpdate = false;
}
if(m_bUpdate)
{
AVPicture pAVPic_Src;
AVPicture pAVPic_Dest;
avpicture_fill(&pAVPic_Src,
(uint8_t*)pImageData_Src,
srcFmt,
m_nImageWidth_Src,
nImageHeight_Src);
memcpy_s(m_nLineSize_Src, 8*sizeof(int), pAVPic_Src.linesize, 8*sizeof(int) );
for(int i = 0; i < 8; i++)
{
m_lineData_Src[i] = pAVPic_Src.data[i];
}
avpicture_fill(&pAVPic_Dest,
(uint8_t*)pImageData_Dest,
dstFmt,
nImageWidth_Dest,
nImageHeight_Dest);
memcpy_s(m_nLineSize_Dest, 8*sizeof(int), pAVPic_Dest.linesize, 8*sizeof(int) );
for(int i = 0; i < 8; i++)
{
m_lineData_Dest[i] = pAVPic_Dest.data[i];
}
//
if(nullptr != m_pConvert)
{
sws_freeContext(m_pConvert);
m_pConvert = nullptr;
}
m_pConvert = sws_getContext(nImageWidth_Src,
nImageHeight_Src,
srcFmt,
nImageWidth_Dest,
nImageHeight_Dest,
dstFmt,
SWS_SINC/*SWS_BILINEAR*/,
nullptr, nullptr, nullptr);
if(nullptr == m_pConvert)
{
m_mutexConvert.unlock();
return false;
}
}
int nRs = sws_scale(m_pConvert,
(const uint8_t* const*)m_lineData_Src,
m_nLineSize_Src,
0,
nImageHeight_Src,
m_lineData_Dest,
m_nLineSize_Dest);
/*
//
uint8_t* pSrcData[8] = {(uint8_t*)pImageData_Src, 0, 0, 0, 0, 0, 0, 0};
//int nSrcLineSize[8] = {nImageWidth_Src*4, 0, 0, 0, 0, 0, 0, 0};
uint8_t* pDestData[8] = {(uint8_t*)pImageData_Dest, 0, 0, 0, 0, 0, 0, 0};
//int nDestLineSize[8] = {nImageWidth_Dest*4, 0, 0, 0, 0, 0, 0, 0};
int nRs = sws_scale(m_pConvert,
(const uint8_t* const*)pAVPic_Src.data,
pAVPic_Src.linesize,
0,
nImageHeight_Src,
pAVPic_Dest.data,
pAVPic_Dest.linesize);
*/
m_mutexConvert.unlock();
return true;
}
//////////////////////////////////////////////////////////////////////////
//调色板
//////////////////////////////////////////////////////////////////////////
unsigned char IRImage_ColorTable[9][256][4] =
{
{
{ 0, 0, 0, 0 },{ 1, 1, 1, 0 },{ 2, 2, 2, 0 },{ 3, 3, 3, 0 },{ 4, 4, 4, 0 },{ 5, 5, 5, 0 },{ 6, 6, 6, 0 },{ 7, 7, 7, 0 },{ 8, 8, 8, 0 },{ 9, 9, 9, 0 },{ 10, 10, 10, 0 },{ 11, 11, 11, 0 },{ 12, 12, 12, 0 },{ 13, 13, 13, 0 },{ 14, 14, 14, 0 },{ 15, 15, 15, 0 },
{ 16, 16, 16, 0 },{ 17, 17, 17, 0 },{ 18, 18, 18, 0 },{ 19, 19, 19, 0 },{ 20, 20, 20, 0 },{ 21, 21, 21, 0 },{ 22, 22, 22, 0 },{ 23, 23, 23, 0 },{ 24, 24, 24, 0 },{ 25, 25, 25, 0 },{ 26, 26, 26, 0 },{ 27, 27, 27, 0 },{ 28, 28, 28, 0 },{ 29, 29, 29, 0 },{ 30, 30, 30, 0 },{ 31, 31, 31, 0 },
{ 32, 32, 32, 0 },{ 33, 33, 33, 0 },{ 34, 34, 34, 0 },{ 35, 35, 35, 0 },{ 36, 36, 36, 0 },{ 37, 37, 37, 0 },{ 38, 38, 38, 0 },{ 39, 39, 39, 0 },{ 40, 40, 40, 0 },{ 41, 41, 41, 0 },{ 42, 42, 42, 0 },{ 43, 43, 43, 0 },{ 44, 44, 44, 0 },{ 45, 45, 45, 0 },{ 46, 46, 46, 0 },{ 47, 47, 47, 0 },
{ 48, 48, 48, 0 },{ 49, 49, 49, 0 },{ 50, 50, 50, 0 },{ 51, 51, 51, 0 },{ 52, 52, 52, 0 },{ 53, 53, 53, 0 },{ 54, 54, 54, 0 },{ 55, 55, 55, 0 },{ 56, 56, 56, 0 },{ 57, 57, 57, 0 },{ 58, 58, 58, 0 },{ 59, 59, 59, 0 },{ 60, 60, 60, 0 },{ 61, 61, 61, 0 },{ 62, 62, 62, 0 },{ 63, 63, 63, 0 },
{ 64, 64, 64, 0 },{ 65, 65, 65, 0 },{ 66, 66, 66, 0 },{ 67, 67, 67, 0 },{ 68, 68, 68, 0 },{ 69, 69, 69, 0 },{ 70, 70, 70, 0 },{ 71, 71, 71, 0 },{ 72, 72, 72, 0 },{ 73, 73, 73, 0 },{ 74, 74, 74, 0 },{ 75, 75, 75, 0 },{ 76, 76, 76, 0 },{ 77, 77, 77, 0 },{ 78, 78, 78, 0 },{ 79, 79, 79, 0 },
{ 80, 80, 80, 0 },{ 81, 81, 81, 0 },{ 82, 82, 82, 0 },{ 83, 83, 83, 0 },{ 84, 84, 84, 0 },{ 85, 85, 85, 0 },{ 86, 86, 86, 0 },{ 87, 87, 87, 0 },{ 88, 88, 88, 0 },{ 89, 89, 89, 0 },{ 90, 90, 90, 0 },{ 91, 91, 91, 0 },{ 92, 92, 92, 0 },{ 93, 93, 93, 0 },{ 94, 94, 94, 0 },{ 95, 95, 95, 0 },
{ 96, 96, 96, 0 },{ 97, 97, 97, 0 },{ 98, 98, 98, 0 },{ 99, 99, 99, 0 },{ 100,100,100, 0 },{ 101,101,101, 0 },{ 102,102,102, 0 },{ 103,103,103, 0 },{ 104,104,104, 0 },{ 105,105,105, 0 },{ 106,106,106, 0 },{ 107,107,107, 0 },{ 108,108,108, 0 },{ 109,109,109, 0 },{ 110,110,110, 0 },{ 111,111,111, 0 },
{ 112,112,112, 0 },{ 113,113,113, 0 },{ 114,114,114, 0 },{ 115,115,115, 0 },{ 116,116,116, 0 },{ 117,117,117, 0 },{ 118,118,118, 0 },{ 119,119,119, 0 },{ 120,120,120, 0 },{ 121,121,121, 0 },{ 122,122,122, 0 },{ 123,123,123, 0 },{ 124,124,124, 0 },{ 125,125,125, 0 },{ 126,126,126, 0 },{ 127,127,127, 0 },
{ 128,128,128, 0 },{ 129,129,129, 0 },{ 130,130,130, 0 },{ 131,131,131, 0 },{ 132,132,132, 0 },{ 133,133,133, 0 },{ 134,134,134, 0 },{ 135,135,135, 0 },{ 136,136,136, 0 },{ 137,137,137, 0 },{ 138,138,138, 0 },{ 139,139,139, 0 },{ 140,140,140, 0 },{ 141,141,141, 0 },{ 142,142,142, 0 },{ 143,143,143, 0 },
{ 144,144,144, 0 },{ 145,145,145, 0 },{ 146,146,146, 0 },{ 147,147,147, 0 },{ 148,148,148, 0 },{ 149,149,149, 0 },{ 150,150,150, 0 },{ 151,151,151, 0 },{ 152,152,152, 0 },{ 153,153,153, 0 },{ 154,154,154, 0 },{ 155,155,155, 0 },{ 156,156,156, 0 },{ 157,157,157, 0 },{ 158,158,158, 0 },{ 159,159,159, 0 },
{ 160,160,160, 0 },{ 161,161,161, 0 },{ 162,162,162, 0 },{ 163,163,163, 0 },{ 164,164,164, 0 },{ 165,165,165, 0 },{ 166,166,166, 0 },{ 167,167,167, 0 },{ 168,168,168, 0 },{ 169,169,169, 0 },{ 170,170,170, 0 },{ 171,171,171, 0 },{ 172,172,172, 0 },{ 173,173,173, 0 },{ 174,174,174, 0 },{ 175,175,175, 0 },
{ 176,176,176, 0 },{ 177,177,177, 0 },{ 178,178,178, 0 },{ 179,179,179, 0 },{ 180,180,180, 0 },{ 181,181,181, 0 },{ 182,182,182, 0 },{ 183,183,183, 0 },{ 184,184,184, 0 },{ 185,185,185, 0 },{ 186,186,186, 0 },{ 187,187,187, 0 },{ 188,188,188, 0 },{ 189,189,189, 0 },{ 190,190,190, 0 },{ 191,191,191, 0 },
{ 192,192,192, 0 },{ 193,193,193, 0 },{ 194,194,194, 0 },{ 195,195,195, 0 },{ 196,196,196, 0 },{ 197,197,197, 0 },{ 198,198,198, 0 },{ 199,199,199, 0 },{ 200,200,200, 0 },{ 201,201,201, 0 },{ 202,202,202, 0 },{ 203,203,203, 0 },{ 204,204,204, 0 },{ 205,205,205, 0 },{ 206,206,206, 0 },{ 207,207,207, 0 },
{ 208,208,208, 0 },{ 209,209,209, 0 },{ 210,210,210, 0 },{ 211,211,211, 0 },{ 212,212,212, 0 },{ 213,213,213, 0 },{ 214,214,214, 0 },{ 215,215,215, 0 },{ 216,216,216, 0 },{ 217,217,217, 0 },{ 218,218,218, 0 },{ 219,219,219, 0 },{ 220,220,220, 0 },{ 221,221,221, 0 },{ 222,222,222, 0 },{ 223,223,223, 0 },
{ 224,224,224, 0 },{ 225,225,225, 0 },{ 226,226,226, 0 },{ 227,227,227, 0 },{ 228,228,228, 0 },{ 229,229,229, 0 },{ 230,230,230, 0 },{ 231,231,231, 0 },{ 232,232,232, 0 },{ 233,233,233, 0 },{ 234,234,234, 0 },{ 235,235,235, 0 },{ 236,236,236, 0 },{ 237,237,237, 0 },{ 238,238,238, 0 },{ 239,239,239, 0 },
{ 240,240,240, 0 },{ 241,241,241, 0 },{ 242,242,242, 0 },{ 243,243,243, 0 },{ 244,244,244, 0 },{ 245,245,245, 0 },{ 246,246,246, 0 },{ 247,247,247, 0 },{ 248,248,248, 0 },{ 249,249,249, 0 },{ 250,250,250, 0 },{ 251,251,251, 0 },{ 252,252,252, 0 },{ 253,253,253, 0 },{ 254,254,254, 0 },{ 255,255,255, 0 },
},
{
{ 0, 0, 0, 0 },{ 0, 0, 0, 0 },{ 24, 0, 0, 0 },{ 39, 0, 0, 0 },{ 42, 0, 0, 0 },{ 53, 0, 0, 0 },{ 61, 0, 0, 0 },{ 67, 0, 1, 0 },{ 69, 0, 1, 0 },{ 77, 0, 0, 0 },{ 85, 0, 1, 0 },{ 89, 0, 3, 0 },{ 92, 0, 3, 0 },{ 95, 0, 4, 0 },{ 99, 0, 5, 0 },{ 105, 0, 7, 0 },
{ 107, 1, 9, 0 },{ 111, 2, 10, 0 },{ 115, 1, 11, 0 },{ 114, 1, 11, 0 },{ 117, 1, 14, 0 },{ 122, 1, 15, 0 },{ 123, 0, 18, 0 },{ 125, 0, 23, 0 },{ 128, 0, 26, 0 },{ 130, 0, 28, 0 },{ 132, 0, 32, 0 },{ 133, 0, 33, 0 },{ 135, 1, 36, 0 },{ 137, 0, 40, 0 },{ 140, 1, 46, 0 },{ 141, 1, 50, 0 },
{ 141, 0, 52, 0 },{ 142, 0, 53, 0 },{ 144, 1, 56, 0 },{ 148, 1, 62, 0 },{ 147, 0, 62, 0 },{ 148, 1, 63, 0 },{ 150, 1, 67, 0 },{ 150, 0, 71, 0 },{ 151, 0, 74, 0 },{ 152, 0, 76, 0 },{ 151, 0, 79, 0 },{ 152, 0, 84, 0 },{ 153, 0, 85, 0 },{ 153, 0, 87, 0 },{ 154, 0, 90, 0 },{ 155, 0, 92, 0 },
{ 155, 0, 97, 0 },{ 155, 0, 97, 0 },{ 155, 0,102, 0 },{ 155, 0,106, 0 },{ 157, 0,109, 0 },{ 157, 0,112, 0 },{ 157, 0,114, 0 },{ 157, 0,115, 0 },{ 159, 0,119, 0 },{ 159, 0,123, 0 },{ 157, 0,127, 0 },{ 157, 0,128, 0 },{ 157, 0,130, 0 },{ 155, 0,135, 0 },{ 155, 0,135, 0 },{ 157, 0,139, 0 },
{ 157, 0,141, 0 },{ 155, 1,142, 0 },{ 154, 1,146, 0 },{ 154, 0,150, 0 },{ 155, 0,151, 0 },{ 156, 0,155, 0 },{ 155, 0,158, 0 },{ 155, 0,160, 0 },{ 155, 0,162, 0 },{ 155, 0,164, 0 },{ 154, 0,166, 0 },{ 155, 0,168, 0 },{ 152, 1,171, 0 },{ 153, 0,174, 0 },{ 151, 1,175, 0 },{ 150, 2,175, 0 },
{ 151, 2,177, 0 },{ 150, 2,181, 0 },{ 151, 2,182, 0 },{ 150, 1,181, 0 },{ 150, 2,184, 0 },{ 149, 4,186, 0 },{ 148, 4,189, 0 },{ 146, 4,190, 0 },{ 145, 5,190, 0 },{ 144, 6,191, 0 },{ 146, 5,192, 0 },{ 144, 8,195, 0 },{ 144, 10,194, 0 },{ 142, 12,195, 0 },{ 139, 13,196, 0 },{ 137, 13,197, 0 },
{ 136, 13,199, 0 },{ 135, 15,200, 0 },{ 135, 16,201, 0 },{ 135, 17,201, 0 },{ 132, 19,201, 0 },{ 129, 20,203, 0 },{ 126, 21,204, 0 },{ 123, 23,205, 0 },{ 119, 26,207, 0 },{ 119, 27,209, 0 },{ 115, 29,211, 0 },{ 113, 30,212, 0 },{ 112, 31,213, 0 },{ 109, 34,214, 0 },{ 104, 36,213, 0 },{ 102, 38,214, 0 },
{ 99, 39,217, 0 },{ 95, 42,219, 0 },{ 90, 44,219, 0 },{ 87, 45,218, 0 },{ 85, 46,218, 0 },{ 80, 48,219, 0 },{ 72, 51,222, 0 },{ 64, 52,223, 0 },{ 62, 54,224, 0 },{ 58, 56,224, 0 },{ 49, 59,226, 0 },{ 42, 60,227, 0 },{ 37, 61,227, 0 },{ 36, 61,227, 0 },{ 29, 63,228, 0 },{ 25, 66,229, 0 },
{ 24, 69,231, 0 },{ 22, 72,231, 0 },{ 18, 73,232, 0 },{ 18, 73,230, 0 },{ 17, 75,231, 0 },{ 14, 76,232, 0 },{ 12, 78,233, 0 },{ 12, 79,234, 0 },{ 11, 80,234, 0 },{ 8, 84,235, 0 },{ 7, 86,237, 0 },{ 7, 87,236, 0 },{ 6, 88,235, 0 },{ 5, 90,236, 0 },{ 5, 91,238, 0 },{ 6, 92,238, 0 },
{ 5, 94,238, 0 },{ 4, 96,239, 0 },{ 3, 98,238, 0 },{ 2, 99,238, 0 },{ 3,101,239, 0 },{ 3,102,241, 0 },{ 2,103,241, 0 },{ 1,105,242, 0 },{ 1,108,243, 0 },{ 0,109,241, 0 },{ 1,110,242, 0 },{ 2,112,244, 0 },{ 1,113,244, 0 },{ 0,115,244, 0 },{ 0,117,244, 0 },{ 0,117,244, 0 },
{ 0,120,245, 0 },{ 1,123,246, 0 },{ 1,125,246, 0 },{ 0,126,245, 0 },{ 0,127,245, 0 },{ 1,130,245, 0 },{ 0,132,246, 0 },{ 1,133,248, 0 },{ 0,135,248, 0 },{ 1,137,249, 0 },{ 1,138,249, 0 },{ 0,139,249, 0 },{ 0,139,249, 0 },{ 0,141,248, 0 },{ 0,141,249, 0 },{ 0,145,251, 0 },
{ 0,147,250, 0 },{ 0,148,249, 0 },{ 0,150,250, 0 },{ 0,150,250, 0 },{ 0,154,252, 0 },{ 0,157,252, 0 },{ 1,161,252, 0 },{ 1,163,252, 0 },{ 0,164,252, 0 },{ 1,167,253, 0 },{ 1,168,255, 0 },{ 0,169,254, 0 },{ 0,170,253, 0 },{ 1,173,254, 0 },{ 1,176,254, 0 },{ 1,177,254, 0 },
{ 1,178,254, 0 },{ 0,181,254, 0 },{ 0,183,253, 0 },{ 0,184,254, 0 },{ 0,185,254, 0 },{ 0,187,254, 0 },{ 2,190,254, 0 },{ 2,191,254, 0 },{ 0,193,253, 0 },{ 0,195,253, 0 },{ 2,198,255, 0 },{ 2,201,255, 0 },{ 0,201,253, 0 },{ 1,201,252, 0 },{ 2,203,254, 0 },{ 1,205,253, 0 },
{ 3,207,254, 0 },{ 3,208,254, 0 },{ 6,209,255, 0 },{ 7,211,255, 0 },{ 8,214,254, 0 },{ 11,215,253, 0 },{ 13,216,253, 0 },{ 14,217,254, 0 },{ 15,218,255, 0 },{ 18,218,255, 0 },{ 23,221,255, 0 },{ 27,223,255, 0 },{ 28,223,255, 0 },{ 34,224,253, 0 },{ 37,226,255, 0 },{ 42,228,254, 0 },
{ 44,227,255, 0 },{ 48,228,254, 0 },{ 57,231,253, 0 },{ 65,232,255, 0 },{ 69,233,255, 0 },{ 75,235,255, 0 },{ 78,236,255, 0 },{ 86,237,255, 0 },{ 95,239,255, 0 },{ 100,240,255, 0 },{ 108,240,254, 0 },{ 111,241,254, 0 },{ 120,243,255, 0 },{ 130,243,255, 0 },{ 139,243,255, 0 },{ 145,243,255, 0 },
{ 148,244,255, 0 },{ 155,243,254, 0 },{ 163,245,253, 0 },{ 169,246,255, 0 },{ 177,247,255, 0 },{ 183,248,255, 0 },{ 190,248,255, 0 },{ 199,249,255, 0 },{ 202,249,255, 0 },{ 208,250,255, 0 },{ 210,252,255, 0 },{ 218,252,255, 0 },{ 222,252,255, 0 },{ 226,252,255, 0 },{ 235,253,255, 0 },{ 245,255,255, 0 },
},
{
{ 0, 0, 0, 0 },{ 3, 0, 0, 0 },{ 7, 0, 0, 0 },{ 10, 0, 0, 0 },{ 14, 0, 0, 0 },{ 17, 0, 0, 0 },{ 21, 0, 0, 0 },{ 24, 0, 0, 0 },{ 28, 0, 0, 0 },{ 32, 0, 0, 0 },{ 35, 0, 0, 0 },{ 39, 0, 0, 0 },{ 42, 0, 0, 0 },{ 46, 0, 0, 0 },{ 49, 0, 0, 0 },{ 53, 0, 0, 0 },
{ 56, 0, 0, 0 },{ 60, 0, 0, 0 },{ 64, 0, 0, 0 },{ 67, 0, 0, 0 },{ 71, 0, 0, 0 },{ 74, 0, 0, 0 },{ 78, 0, 0, 0 },{ 81, 0, 0, 0 },{ 85, 0, 0, 0 },{ 88, 0, 0, 0 },{ 92, 0, 0, 0 },{ 96, 0, 0, 0 },{ 99, 0, 0, 0 },{ 103, 0, 0, 0 },{ 106, 0, 0, 0 },{ 110, 0, 0, 0 },
{ 113, 0, 0, 0 },{ 117, 0, 0, 0 },{ 120, 0, 0, 0 },{ 124, 0, 0, 0 },{ 128, 0, 0, 0 },{ 127, 3, 0, 0 },{ 125, 6, 0, 0 },{ 123, 10, 0, 0 },{ 122, 13, 0, 0 },{ 120, 17, 0, 0 },{ 118, 20, 0, 0 },{ 116, 24, 0, 0 },{ 115, 27, 0, 0 },{ 113, 31, 0, 0 },{ 111, 34, 0, 0 },{ 109, 38, 0, 0 },
{ 108, 41, 0, 0 },{ 106, 44, 0, 0 },{ 104, 48, 0, 0 },{ 103, 51, 0, 0 },{ 101, 55, 0, 0 },{ 99, 58, 0, 0 },{ 97, 62, 0, 0 },{ 96, 65, 0, 0 },{ 94, 69, 0, 0 },{ 92, 72, 0, 0 },{ 90, 76, 0, 0 },{ 89, 79, 0, 0 },{ 87, 83, 0, 0 },{ 85, 86, 0, 0 },{ 84, 89, 0, 0 },{ 82, 93, 0, 0 },
{ 80, 96, 0, 0 },{ 78,100, 0, 0 },{ 77,103, 0, 0 },{ 75,107, 0, 0 },{ 73,110, 0, 0 },{ 71,114, 0, 0 },{ 70,117, 0, 0 },{ 68,121, 0, 0 },{ 66,124, 0, 0 },{ 64,128, 0, 0 },{ 64,131, 0, 0 },{ 64,135, 0, 0 },{ 64,138, 0, 0 },{ 64,142, 0, 0 },{ 64,145, 0, 0 },{ 64,149, 0, 0 },
{ 64,152, 0, 0 },{ 64,156, 0, 0 },{ 64,159, 0, 0 },{ 64,163, 0, 0 },{ 64,166, 0, 0 },{ 64,170, 0, 0 },{ 64,173, 0, 0 },{ 64,177, 0, 0 },{ 64,180, 0, 0 },{ 64,184, 0, 0 },{ 64,187, 0, 0 },{ 64,191, 0, 0 },{ 64,195, 0, 0 },{ 64,198, 0, 0 },{ 64,202, 0, 0 },{ 64,205, 0, 0 },
{ 64,209, 0, 0 },{ 64,212, 0, 0 },{ 64,216, 0, 0 },{ 64,219, 0, 0 },{ 64,223, 0, 0 },{ 64,226, 0, 0 },{ 64,230, 0, 0 },{ 64,233, 0, 0 },{ 64,237, 0, 0 },{ 64,240, 0, 0 },{ 64,244, 0, 0 },{ 64,247, 0, 0 },{ 64,251, 0, 0 },{ 64,255, 0, 0 },{ 63,255, 6, 0 },{ 61,255, 13, 0 },
{ 59,255, 20, 0 },{ 58,255, 27, 0 },{ 56,255, 34, 0 },{ 54,255, 41, 0 },{ 52,255, 48, 0 },{ 51,255, 55, 0 },{ 49,255, 62, 0 },{ 47,255, 68, 0 },{ 45,255, 75, 0 },{ 44,255, 82, 0 },{ 42,255, 89, 0 },{ 40,255, 96, 0 },{ 39,255,103, 0 },{ 37,255,110, 0 },{ 35,255,117, 0 },{ 33,255,124, 0 },
{ 32,255,130, 0 },{ 30,255,137, 0 },{ 28,255,144, 0 },{ 26,255,151, 0 },{ 25,255,158, 0 },{ 23,255,165, 0 },{ 21,255,172, 0 },{ 20,255,179, 0 },{ 18,255,186, 0 },{ 16,255,192, 0 },{ 14,255,199, 0 },{ 13,255,206, 0 },{ 11,255,213, 0 },{ 9,255,220, 0 },{ 7,255,227, 0 },{ 6,255,234, 0 },
{ 4,255,241, 0 },{ 2,255,248, 0 },{ 0,255,255, 0 },{ 0,248,255, 0 },{ 0,241,255, 0 },{ 0,234,255, 0 },{ 0,227,255, 0 },{ 0,220,255, 0 },{ 0,213,255, 0 },{ 0,206,255, 0 },{ 0,199,255, 0 },{ 0,192,255, 0 },{ 0,185,255, 0 },{ 0,178,255, 0 },{ 0,170,255, 0 },{ 0,163,255, 0 },
{ 0,156,255, 0 },{ 0,149,255, 0 },{ 0,142,255, 0 },{ 0,135,255, 0 },{ 0,128,255, 0 },{ 0,121,255, 0 },{ 0,114,255, 0 },{ 0,107,255, 0 },{ 0,100,255, 0 },{ 0, 93,255, 0 },{ 0, 85,255, 0 },{ 0, 78,255, 0 },{ 0, 71,255, 0 },{ 0, 64,255, 0 },{ 0, 57,255, 0 },{ 0, 50,255, 0 },
{ 0, 43,255, 0 },{ 0, 36,255, 0 },{ 0, 29,255, 0 },{ 0, 22,255, 0 },{ 0, 15,255, 0 },{ 0, 8,255, 0 },{ 0, 0,255, 0 },{ 6, 3,255, 0 },{ 13, 6,255, 0 },{ 20, 10,255, 0 },{ 27, 13,255, 0 },{ 34, 17,255, 0 },{ 41, 20,255, 0 },{ 48, 24,255, 0 },{ 55, 27,255, 0 },{ 62, 31,255, 0 },
{ 68, 34,255, 0 },{ 75, 38,255, 0 },{ 82, 41,255, 0 },{ 89, 44,255, 0 },{ 96, 48,255, 0 },{ 103, 51,255, 0 },{ 110, 55,255, 0 },{ 117, 58,255, 0 },{ 124, 62,255, 0 },{ 130, 65,255, 0 },{ 137, 69,255, 0 },{ 144, 72,255, 0 },{ 151, 76,255, 0 },{ 158, 79,255, 0 },{ 165, 83,255, 0 },{ 172, 86,255, 0 },
{ 179, 89,255, 0 },{ 186, 93,255, 0 },{ 192, 96,255, 0 },{ 199,100,255, 0 },{ 206,103,255, 0 },{ 213,107,255, 0 },{ 220,110,255, 0 },{ 227,114,255, 0 },{ 234,117,255, 0 },{ 241,121,255, 0 },{ 248,124,255, 0 },{ 255,128,255, 0 },{ 255,131,255, 0 },{ 255,135,255, 0 },{ 255,138,255, 0 },{ 255,142,255, 0 },
{ 255,145,255, 0 },{ 255,149,255, 0 },{ 255,152,255, 0 },{ 255,156,255, 0 },{ 255,159,255, 0 },{ 255,163,255, 0 },{ 255,166,255, 0 },{ 255,170,255, 0 },{ 255,173,255, 0 },{ 255,177,255, 0 },{ 255,180,255, 0 },{ 255,184,255, 0 },{ 255,187,255, 0 },{ 255,191,255, 0 },{ 255,195,255, 0 },{ 255,198,255, 0 },
{ 255,202,255, 0 },{ 255,205,255, 0 },{ 255,209,255, 0 },{ 255,212,255, 0 },{ 255,216,255, 0 },{ 255,219,255, 0 },{ 255,223,255, 0 },{ 255,226,255, 0 },{ 255,230,255, 0 },{ 255,233,255, 0 },{ 255,237,255, 0 },{ 255,240,255, 0 },{ 255,244,255, 0 },{ 255,247,255, 0 },{ 255,251,255, 0 },{ 255,255,255, 0 },
},
{
{ 219, 56, 4, 0 },{ 220, 57, 4, 0 },{ 221, 58, 4, 0 },{ 223, 60, 4, 0 },{ 225, 63, 4, 0 },{ 228, 65, 4, 0 },{ 230, 67, 5, 0 },{ 232, 70, 5, 0 },{ 234, 72, 5, 0 },{ 237, 74, 5, 0 },{ 239, 77, 6, 0 },{ 241, 79, 6, 0 },{ 243, 81, 6, 0 },{ 245, 84, 6, 0 },{ 245, 87, 7, 0 },{ 246, 88, 7, 0 },
{ 246, 90, 8, 0 },{ 247, 93, 8, 0 },{ 248, 96, 9, 0 },{ 249, 99, 9, 0 },{ 249,102, 10, 0 },{ 250,103, 10, 0 },{ 250,105, 11, 0 },{ 251,108, 11, 0 },{ 252,111, 12, 0 },{ 253,114, 12, 0 },{ 253,117, 13, 0 },{ 254,120, 13, 0 },{ 255,123, 14, 0 },{ 254,126, 15, 0 },{ 254,128, 15, 0 },{ 253,130, 16, 0 },
{ 253,133, 17, 0 },{ 252,136, 18, 0 },{ 251,140, 19, 0 },{ 250,143, 20, 0 },{ 249,146, 21, 0 },{ 249,150, 22, 0 },{ 248,153, 23, 0 },{ 247,156, 23, 0 },{ 246,160, 24, 0 },{ 245,163, 25, 0 },{ 245,166, 26, 0 },{ 243,170, 27, 0 },{ 241,173, 29, 0 },{ 239,176, 31, 0 },{ 237,179, 32, 0 },{ 234,183, 34, 0 },
{ 232,186, 36, 0 },{ 230,189, 37, 0 },{ 228,192, 39, 0 },{ 225,195, 41, 0 },{ 223,199, 42, 0 },{ 222,200, 43, 0 },{ 221,202, 44, 0 },{ 220,203, 45, 0 },{ 219,205, 46, 0 },{ 216,208, 47, 0 },{ 215,209, 48, 0 },{ 214,211, 49, 0 },{ 212,212, 50, 0 },{ 211,214, 51, 0 },{ 210,215, 52, 0 },{ 208,216, 53, 0 },
{ 207,217, 55, 0 },{ 205,219, 56, 0 },{ 203,220, 57, 0 },{ 202,221, 58, 0 },{ 200,222, 59, 0 },{ 199,223, 60, 0 },{ 197,224, 61, 0 },{ 196,224, 62, 0 },{ 195,225, 63, 0 },{ 193,226, 64, 0 },{ 192,228, 65, 0 },{ 190,229, 66, 0 },{ 189,230, 67, 0 },{ 187,231, 68, 0 },{ 186,232, 70, 0 },{ 185,233, 71, 0 },
{ 183,234, 72, 0 },{ 181,236, 73, 0 },{ 179,237, 74, 0 },{ 178,238, 75, 0 },{ 177,238, 76, 0 },{ 176,239, 77, 0 },{ 174,240, 78, 0 },{ 173,241, 79, 0 },{ 172,242, 80, 0 },{ 170,243, 81, 0 },{ 168,244, 82, 0 },{ 166,245, 84, 0 },{ 164,245, 85, 0 },{ 163,245, 87, 0 },{ 160,246, 90, 0 },{ 156,247, 93, 0 },
{ 153,248, 96, 0 },{ 150,249, 99, 0 },{ 146,249,102, 0 },{ 143,250,105, 0 },{ 140,251,108, 0 },{ 136,252,111, 0 },{ 133,253,114, 0 },{ 130,253,117, 0 },{ 126,254,120, 0 },{ 123,255,123, 0 },{ 120,254,126, 0 },{ 118,254,128, 0 },{ 117,253,130, 0 },{ 116,253,131, 0 },{ 114,253,133, 0 },{ 113,252,134, 0 },
{ 111,252,136, 0 },{ 108,251,140, 0 },{ 106,251,141, 0 },{ 105,250,143, 0 },{ 104,250,145, 0 },{ 102,249,146, 0 },{ 100,249,149, 0 },{ 99,249,150, 0 },{ 97,248,152, 0 },{ 96,248,153, 0 },{ 93,247,156, 0 },{ 90,246,160, 0 },{ 88,246,161, 0 },{ 87,245,163, 0 },{ 84,245,166, 0 },{ 81,243,170, 0 },
{ 80,240,171, 0 },{ 79,241,173, 0 },{ 77,239,176, 0 },{ 74,237,179, 0 },{ 72,234,183, 0 },{ 71,233,184, 0 },{ 70,232,186, 0 },{ 67,230,189, 0 },{ 65,228,192, 0 },{ 63,225,195, 0 },{ 61,224,197, 0 },{ 60,223,199, 0 },{ 58,221,201, 0 },{ 56,219,205, 0 },{ 54,217,206, 0 },{ 53,216,207, 0 },
{ 53,216,208, 0 },{ 51,214,211, 0 },{ 50,213,212, 0 },{ 49,211,214, 0 },{ 48,210,215, 0 },{ 47,208,216, 0 },{ 47,207,218, 0 },{ 46,205,219, 0 },{ 45,203,220, 0 },{ 44,202,221, 0 },{ 42,199,223, 0 },{ 41,200,224, 0 },{ 41,195,225, 0 },{ 40,194,226, 0 },{ 39,193,227, 0 },{ 39,192,228, 0 },
{ 37,189,230, 0 },{ 37,187,231, 0 },{ 36,186,232, 0 },{ 34,183,234, 0 },{ 33,180,236, 0 },{ 32,179,237, 0 },{ 30,177,238, 0 },{ 31,176,239, 0 },{ 30,175,240, 0 },{ 29,173,241, 0 },{ 27,170,243, 0 },{ 27,167,244, 0 },{ 25,167,244, 0 },{ 26,166,245, 0 },{ 24,160,246, 0 },{ 24,157,246, 0 },
{ 23,156,247, 0 },{ 23,155,247, 0 },{ 23,153,248, 0 },{ 22,150,249, 0 },{ 21,146,249, 0 },{ 20,143,250, 0 },{ 19,142,250, 0 },{ 19,140,251, 0 },{ 18,136,252, 0 },{ 17,133,253, 0 },{ 16,130,253, 0 },{ 15,126,254, 0 },{ 14,123,255, 0 },{ 13,120,254, 0 },{ 13,117,253, 0 },{ 12,114,253, 0 },
{ 12,111,252, 0 },{ 11,108,251, 0 },{ 11,105,250, 0 },{ 10,102,249, 0 },{ 9, 99,249, 0 },{ 9, 96,248, 0 },{ 8, 93,247, 0 },{ 8, 90,246, 0 },{ 7, 89,246, 0 },{ 7, 87,245, 0 },{ 6, 84,245, 0 },{ 6, 81,243, 0 },{ 6, 79,241, 0 },{ 6, 78,240, 0 },{ 6, 77,239, 0 },{ 5, 74,237, 0 },
{ 5, 72,234, 0 },{ 5, 70,232, 0 },{ 5, 67,230, 0 },{ 5, 66,229, 0 },{ 4, 65,228, 0 },{ 4, 64,227, 0 },{ 4, 63,225, 0 },{ 4, 60,223, 0 },{ 4, 58,221, 0 },{ 4, 56,219, 0 },{ 4, 55,217, 0 },{ 3, 53,216, 0 },{ 3, 51,214, 0 },{ 3, 49,211, 0 },{ 3, 47,208, 0 },{ 3, 46,205, 0 },
{ 3, 45,204, 0 },{ 2, 44,202, 0 },{ 2, 43,201, 0 },{ 2, 42,199, 0 },{ 2, 42,197, 0 },{ 2, 41,195, 0 },{ 2, 39,192, 0 },{ 2, 37,189, 0 },{ 2, 36,187, 0 },{ 2, 36,186, 0 },{ 2, 34,183, 0 },{ 1, 32,179, 0 },{ 1, 31,177, 0 },{ 1, 31,176, 0 },{ 1, 29,173, 0 },{ 1, 27,170, 0 },
{ 1, 26,166, 0 },{ 1, 25,163, 0 },{ 1, 24,160, 0 },{ 1, 23,156, 0 },{ 1, 23,153, 0 },{ 1, 22,150, 0 },{ 1, 21,146, 0 },{ 0, 20,143, 0 },{ 0, 19,140, 0 },{ 0, 18,136, 0 },{ 0, 17,133, 0 },{ 0, 16,131, 0 },{ 0, 16,130, 0 },{ 0, 15,128, 0 },{ 0, 15,126, 0 },{ 0, 14,125, 0 },
},
{
{ 0, 0, 0, 0 },{ 1, 1, 0, 0 },{ 3, 3, 1, 0 },{ 4, 4, 2, 0 },{ 6, 6, 3, 0 },{ 7, 7, 3, 0 },{ 9, 9, 4, 0 },{ 10, 10, 5, 0 },{ 12, 12, 6, 0 },{ 13, 13, 6, 0 },{ 15, 15, 7, 0 },{ 16, 16, 8, 0 },{ 18, 18, 9, 0 },{ 19, 19, 9, 0 },{ 21, 21, 10, 0 },{ 22, 22, 11, 0 },
{ 24, 24, 12, 0 },{ 25, 25, 12, 0 },{ 27, 27, 13, 0 },{ 28, 28, 14, 0 },{ 30, 30, 15, 0 },{ 31, 31, 15, 0 },{ 33, 33, 16, 0 },{ 34, 34, 17, 0 },{ 36, 36, 18, 0 },{ 37, 37, 18, 0 },{ 39, 39, 19, 0 },{ 40, 40, 20, 0 },{ 42, 42, 21, 0 },{ 43, 43, 21, 0 },{ 45, 45, 22, 0 },{ 46, 46, 23, 0 },
{ 48, 48, 24, 0 },{ 49, 49, 24, 0 },{ 51, 51, 25, 0 },{ 52, 52, 26, 0 },{ 54, 54, 27, 0 },{ 55, 55, 27, 0 },{ 57, 57, 28, 0 },{ 58, 58, 29, 0 },{ 60, 60, 30, 0 },{ 61, 61, 30, 0 },{ 63, 63, 31, 0 },{ 64, 64, 32, 0 },{ 66, 66, 33, 0 },{ 67, 67, 33, 0 },{ 69, 69, 34, 0 },{ 70, 70, 35, 0 },
{ 72, 72, 36, 0 },{ 73, 73, 36, 0 },{ 75, 75, 37, 0 },{ 76, 76, 38, 0 },{ 78, 78, 39, 0 },{ 79, 79, 39, 0 },{ 81, 81, 40, 0 },{ 82, 82, 41, 0 },{ 84, 84, 42, 0 },{ 85, 85, 42, 0 },{ 87, 87, 43, 0 },{ 88, 88, 44, 0 },{ 90, 90, 45, 0 },{ 91, 91, 45, 0 },{ 93, 93, 46, 0 },{ 94, 94, 47, 0 },
{ 96, 96, 48, 0 },{ 97, 97, 48, 0 },{ 99, 99, 49, 0 },{ 100,100, 50, 0 },{ 102,102, 51, 0 },{ 103,103, 51, 0 },{ 105,105, 52, 0 },{ 106,106, 53, 0 },{ 108,108, 54, 0 },{ 109,109, 54, 0 },{ 111,111, 55, 0 },{ 112,112, 56, 0 },{ 114,114, 57, 0 },{ 115,115, 57, 0 },{ 117,117, 58, 0 },{ 118,118, 59, 0 },
{ 120,120, 60, 0 },{ 121,121, 60, 0 },{ 123,123, 61, 0 },{ 124,124, 62, 0 },{ 126,126, 63, 0 },{ 128,128, 64, 0 },{ 127,129, 66, 0 },{ 125,130, 68, 0 },{ 124,132, 70, 0 },{ 122,133, 72, 0 },{ 121,135, 75, 0 },{ 119,136, 77, 0 },{ 118,138, 79, 0 },{ 116,139, 81, 0 },{ 115,141, 84, 0 },{ 113,142, 86, 0 },
{ 112,144, 88, 0 },{ 110,145, 90, 0 },{ 109,147, 93, 0 },{ 107,148, 95, 0 },{ 106,150, 97, 0 },{ 104,151, 99, 0 },{ 103,153,102, 0 },{ 101,154,104, 0 },{ 100,156,106, 0 },{ 98,157,108, 0 },{ 97,159,111, 0 },{ 95,160,113, 0 },{ 94,162,115, 0 },{ 92,163,117, 0 },{ 91,165,120, 0 },{ 89,166,122, 0 },
{ 88,168,124, 0 },{ 86,169,126, 0 },{ 85,171,129, 0 },{ 83,172,131, 0 },{ 82,174,133, 0 },{ 80,175,135, 0 },{ 79,177,138, 0 },{ 77,178,140, 0 },{ 76,180,142, 0 },{ 74,181,144, 0 },{ 73,183,147, 0 },{ 71,184,149, 0 },{ 70,186,151, 0 },{ 68,187,153, 0 },{ 67,189,156, 0 },{ 65,190,158, 0 },
{ 64,192,160, 0 },{ 62,193,162, 0 },{ 61,195,165, 0 },{ 59,196,167, 0 },{ 58,198,169, 0 },{ 56,199,171, 0 },{ 55,201,174, 0 },{ 53,202,176, 0 },{ 52,204,178, 0 },{ 50,205,180, 0 },{ 49,207,183, 0 },{ 47,208,185, 0 },{ 46,210,187, 0 },{ 44,211,189, 0 },{ 43,213,192, 0 },{ 41,214,194, 0 },
{ 40,216,196, 0 },{ 38,217,198, 0 },{ 37,219,201, 0 },{ 35,220,203, 0 },{ 34,222,205, 0 },{ 32,223,207, 0 },{ 31,225,210, 0 },{ 29,226,212, 0 },{ 28,228,214, 0 },{ 26,229,216, 0 },{ 25,231,219, 0 },{ 23,232,221, 0 },{ 22,234,223, 0 },{ 20,235,225, 0 },{ 19,237,228, 0 },{ 17,238,230, 0 },
{ 16,240,232, 0 },{ 14,241,234, 0 },{ 13,243,237, 0 },{ 11,244,239, 0 },{ 10,246,241, 0 },{ 8,247,243, 0 },{ 7,249,246, 0 },{ 5,250,248, 0 },{ 4,252,250, 0 },{ 2,253,252, 0 },{ 0,255,255, 0 },{ 0,252,255, 0 },{ 0,249,255, 0 },{ 0,246,255, 0 },{ 0,243,255, 0 },{ 0,240,255, 0 },
{ 0,237,255, 0 },{ 0,234,255, 0 },{ 0,231,255, 0 },{ 0,228,255, 0 },{ 0,225,255, 0 },{ 0,222,255, 0 },{ 0,219,255, 0 },{ 0,216,255, 0 },{ 0,213,255, 0 },{ 0,210,255, 0 },{ 0,207,255, 0 },{ 0,204,255, 0 },{ 0,201,255, 0 },{ 0,198,255, 0 },{ 0,195,255, 0 },{ 0,192,255, 0 },
{ 0,189,255, 0 },{ 0,186,255, 0 },{ 0,183,255, 0 },{ 0,180,255, 0 },{ 0,177,255, 0 },{ 0,174,255, 0 },{ 0,171,255, 0 },{ 0,168,255, 0 },{ 0,165,255, 0 },{ 0,162,255, 0 },{ 0,159,255, 0 },{ 0,156,255, 0 },{ 0,153,255, 0 },{ 0,150,255, 0 },{ 0,147,255, 0 },{ 0,144,255, 0 },
{ 0,141,255, 0 },{ 0,138,255, 0 },{ 0,135,255, 0 },{ 0,132,255, 0 },{ 0,129,255, 0 },{ 0,126,255, 0 },{ 0,123,255, 0 },{ 0,120,255, 0 },{ 0,117,255, 0 },{ 0,114,255, 0 },{ 0,111,255, 0 },{ 0,108,255, 0 },{ 0,105,255, 0 },{ 0,102,255, 0 },{ 0, 99,255, 0 },{ 0, 96,255, 0 },
{ 0, 93,255, 0 },{ 0, 90,255, 0 },{ 0, 87,255, 0 },{ 0, 84,255, 0 },{ 0, 81,255, 0 },{ 0, 78,255, 0 },{ 0, 75,255, 0 },{ 0, 72,255, 0 },{ 0, 69,255, 0 },{ 0, 66,255, 0 },{ 0, 63,255, 0 },{ 0, 60,255, 0 },{ 0, 57,255, 0 },{ 0, 54,255, 0 },{ 0, 51,255, 0 },{ 0, 48,255, 0 },
{ 0, 45,255, 0 },{ 0, 42,255, 0 },{ 0, 39,255, 0 },{ 0, 36,255, 0 },{ 0, 33,255, 0 },{ 0, 30,255, 0 },{ 0, 27,255, 0 },{ 0, 24,255, 0 },{ 0, 21,255, 0 },{ 0, 18,255, 0 },{ 0, 15,255, 0 },{ 0, 12,255, 0 },{ 0, 9,255, 0 },{ 0, 6,255, 0 },{ 0, 3,255, 0 },{ 0, 0,255, 0 },
},
{
{ 0, 0, 0, 0 },{ 5, 0, 0, 0 },{ 10, 0, 0, 0 },{ 15, 0, 0, 0 },{ 20, 0, 0, 0 },{ 25, 0, 0, 0 },{ 30, 0, 0, 0 },{ 35, 0, 0, 0 },{ 40, 0, 0, 0 },{ 45, 0, 0, 0 },{ 50, 0, 0, 0 },{ 55, 0, 0, 0 },{ 60, 0, 0, 0 },{ 65, 0, 0, 0 },{ 70, 0, 0, 0 },{ 75, 0, 0, 0 },
{ 80, 0, 0, 0 },{ 85, 0, 0, 0 },{ 90, 0, 0, 0 },{ 95, 0, 0, 0 },{ 100, 0, 0, 0 },{ 105, 0, 0, 0 },{ 110, 0, 0, 0 },{ 115, 0, 0, 0 },{ 120, 0, 0, 0 },{ 125, 0, 0, 0 },{ 130, 0, 0, 0 },{ 135, 0, 0, 0 },{ 140, 0, 0, 0 },{ 145, 0, 0, 0 },{ 150, 0, 0, 0 },{ 155, 0, 0, 0 },
{ 160, 0, 0, 0 },{ 165, 0, 0, 0 },{ 170, 0, 0, 0 },{ 175, 0, 0, 0 },{ 180, 0, 0, 0 },{ 185, 0, 0, 0 },{ 190, 0, 0, 0 },{ 195, 0, 0, 0 },{ 200, 0, 0, 0 },{ 205, 0, 0, 0 },{ 210, 0, 0, 0 },{ 215, 0, 0, 0 },{ 220, 0, 0, 0 },{ 225, 0, 0, 0 },{ 230, 0, 0, 0 },{ 235, 0, 0, 0 },
{ 240, 0, 0, 0 },{ 245, 0, 0, 0 },{ 250, 0, 0, 0 },{ 255, 0, 0, 0 },{ 255, 5, 0, 0 },{ 255, 10, 0, 0 },{ 255, 15, 0, 0 },{ 255, 20, 0, 0 },{ 255, 25, 0, 0 },{ 255, 30, 0, 0 },{ 255, 35, 0, 0 },{ 255, 40, 0, 0 },{ 255, 45, 0, 0 },{ 255, 50, 0, 0 },{ 255, 55, 0, 0 },{ 255, 60, 0, 0 },
{ 255, 65, 0, 0 },{ 255, 70, 0, 0 },{ 255, 75, 0, 0 },{ 255, 80, 0, 0 },{ 255, 85, 0, 0 },{ 255, 90, 0, 0 },{ 255, 95, 0, 0 },{ 255,100, 0, 0 },{ 255,105, 0, 0 },{ 255,110, 0, 0 },{ 255,115, 0, 0 },{ 255,120, 0, 0 },{ 255,125, 0, 0 },{ 255,130, 0, 0 },{ 255,135, 0, 0 },{ 255,140, 0, 0 },
{ 255,145, 0, 0 },{ 255,150, 0, 0 },{ 255,155, 0, 0 },{ 255,160, 0, 0 },{ 255,165, 0, 0 },{ 255,170, 0, 0 },{ 255,175, 0, 0 },{ 255,180, 0, 0 },{ 255,185, 0, 0 },{ 255,190, 0, 0 },{ 255,195, 0, 0 },{ 255,200, 0, 0 },{ 255,205, 0, 0 },{ 255,210, 0, 0 },{ 255,215, 0, 0 },{ 255,220, 0, 0 },
{ 255,225, 0, 0 },{ 255,230, 0, 0 },{ 255,235, 0, 0 },{ 255,240, 0, 0 },{ 255,245, 0, 0 },{ 255,250, 0, 0 },{ 255,255, 0, 0 },{ 250,255, 0, 0 },{ 245,255, 0, 0 },{ 240,255, 0, 0 },{ 235,255, 0, 0 },{ 230,255, 0, 0 },{ 225,255, 0, 0 },{ 220,255, 0, 0 },{ 215,255, 0, 0 },{ 210,255, 0, 0 },
{ 205,255, 0, 0 },{ 200,255, 0, 0 },{ 195,255, 0, 0 },{ 190,255, 0, 0 },{ 185,255, 0, 0 },{ 180,255, 0, 0 },{ 175,255, 0, 0 },{ 170,255, 0, 0 },{ 165,255, 0, 0 },{ 160,255, 0, 0 },{ 155,255, 0, 0 },{ 150,255, 0, 0 },{ 145,255, 0, 0 },{ 140,255, 0, 0 },{ 135,255, 0, 0 },{ 130,255, 0, 0 },
{ 125,255, 0, 0 },{ 120,255, 0, 0 },{ 115,255, 0, 0 },{ 110,255, 0, 0 },{ 105,255, 0, 0 },{ 100,255, 0, 0 },{ 95,255, 0, 0 },{ 90,255, 0, 0 },{ 85,255, 0, 0 },{ 80,255, 0, 0 },{ 75,255, 0, 0 },{ 70,255, 0, 0 },{ 65,255, 0, 0 },{ 60,255, 0, 0 },{ 55,255, 0, 0 },{ 50,255, 0, 0 },
{ 45,255, 0, 0 },{ 40,255, 0, 0 },{ 35,255, 0, 0 },{ 30,255, 0, 0 },{ 25,255, 0, 0 },{ 20,255, 0, 0 },{ 15,255, 0, 0 },{ 10,255, 0, 0 },{ 5,255, 0, 0 },{ 0,255, 0, 0 },{ 0,255, 5, 0 },{ 0,255, 10, 0 },{ 0,255, 15, 0 },{ 0,255, 20, 0 },{ 0,255, 25, 0 },{ 0,255, 30, 0 },
{ 0,255, 35, 0 },{ 0,255, 40, 0 },{ 0,255, 45, 0 },{ 0,255, 50, 0 },{ 0,255, 55, 0 },{ 0,255, 60, 0 },{ 0,255, 65, 0 },{ 0,255, 70, 0 },{ 0,255, 75, 0 },{ 0,255, 80, 0 },{ 0,255, 85, 0 },{ 0,255, 90, 0 },{ 0,255, 95, 0 },{ 0,255,100, 0 },{ 0,255,105, 0 },{ 0,255,110, 0 },
{ 0,255,115, 0 },{ 0,255,120, 0 },{ 0,255,125, 0 },{ 0,255,130, 0 },{ 0,255,135, 0 },{ 0,255,140, 0 },{ 0,255,145, 0 },{ 0,255,150, 0 },{ 0,255,155, 0 },{ 0,255,160, 0 },{ 0,255,165, 0 },{ 0,255,170, 0 },{ 0,255,175, 0 },{ 0,255,180, 0 },{ 0,255,185, 0 },{ 0,255,190, 0 },
{ 0,255,195, 0 },{ 0,255,200, 0 },{ 0,255,205, 0 },{ 0,255,210, 0 },{ 0,255,215, 0 },{ 0,255,220, 0 },{ 0,255,225, 0 },{ 0,255,230, 0 },{ 0,255,235, 0 },{ 0,255,240, 0 },{ 0,255,245, 0 },{ 0,255,250, 0 },{ 0,255,255, 0 },{ 0,250,255, 0 },{ 0,245,255, 0 },{ 0,240,255, 0 },
{ 0,235,255, 0 },{ 0,230,255, 0 },{ 0,225,255, 0 },{ 0,220,255, 0 },{ 0,215,255, 0 },{ 0,210,255, 0 },{ 0,205,255, 0 },{ 0,200,255, 0 },{ 0,195,255, 0 },{ 0,190,255, 0 },{ 0,185,255, 0 },{ 0,180,255, 0 },{ 0,175,255, 0 },{ 0,170,255, 0 },{ 0,165,255, 0 },{ 0,160,255, 0 },
{ 0,155,255, 0 },{ 0,150,255, 0 },{ 0,145,255, 0 },{ 0,140,255, 0 },{ 0,135,255, 0 },{ 0,130,255, 0 },{ 0,125,255, 0 },{ 0,120,255, 0 },{ 0,115,255, 0 },{ 0,110,255, 0 },{ 0,105,255, 0 },{ 0,100,255, 0 },{ 0, 95,255, 0 },{ 0, 90,255, 0 },{ 0, 85,255, 0 },{ 0, 80,255, 0 },
{ 0, 75,255, 0 },{ 0, 70,255, 0 },{ 0, 65,255, 0 },{ 0, 60,255, 0 },{ 0, 55,255, 0 },{ 0, 50,255, 0 },{ 0, 45,255, 0 },{ 0, 40,255, 0 },{ 0, 35,255, 0 },{ 0, 30,255, 0 },{ 0, 25,255, 0 },{ 0, 20,255, 0 },{ 0, 15,255, 0 },{ 0, 10,255, 0 },{ 0, 5,255, 0 },{ 0, 0,255, 0 },
},
{
{ 0, 0, 0, 0 },{ 4, 4, 4, 0 },{ 8, 0, 8, 0 },{ 16, 0, 16, 0 },{ 20, 0, 20, 0 },{ 24, 0, 24, 0 },{ 33, 0, 33, 0 },{ 37, 0, 37, 0 },{ 41, 0, 41, 0 },{ 44, 0, 44, 0 },{ 49, 0, 49, 0 },{ 53, 0, 53, 0 },{ 57, 0, 57, 0 },{ 60, 0, 60, 0 },{ 66, 0, 66, 0 },{ 70, 0, 70, 0 },
{ 74, 0, 74, 0 },{ 82, 0, 82, 0 },{ 90, 0, 90, 0 },{ 99, 0, 99, 0 },{ 107, 0,107, 0 },{ 115, 0,115, 0 },{ 123, 0,123, 0 },{ 132, 0,132, 0 },{ 140, 0,140, 0 },{ 148, 0,148, 0 },{ 156, 0,156, 0 },{ 165, 0,165, 0 },{ 173, 0,173, 0 },{ 181, 0,181, 0 },{ 189, 0,189, 0 },{ 198, 0,198, 0 },
{ 206, 0,206, 0 },{ 214, 0,214, 0 },{ 222, 0,222, 0 },{ 231, 0,231, 0 },{ 239, 0,239, 0 },{ 247, 0,247, 0 },{ 255, 0,255, 0 },{ 255, 0,255, 0 },{ 255, 0,247, 0 },{ 255, 0,239, 0 },{ 255, 0,231, 0 },{ 255, 0,222, 0 },{ 255, 0,214, 0 },{ 255, 0,206, 0 },{ 255, 0,198, 0 },{ 255, 0,189, 0 },
{ 255, 0,181, 0 },{ 255, 0,173, 0 },{ 255, 0,165, 0 },{ 255, 0,156, 0 },{ 255, 0,148, 0 },{ 255, 0,140, 0 },{ 255, 0,132, 0 },{ 255, 0,123, 0 },{ 255, 0,115, 0 },{ 255, 0,107, 0 },{ 255, 0, 99, 0 },{ 255, 0, 90, 0 },{ 255, 0, 82, 0 },{ 255, 0, 74, 0 },{ 255, 0, 66, 0 },{ 255, 0, 57, 0 },
{ 255, 0, 49, 0 },{ 255, 0, 41, 0 },{ 255, 0, 33, 0 },{ 255, 0, 24, 0 },{ 255, 0, 16, 0 },{ 255, 0, 8, 0 },{ 255, 0, 0, 0 },{ 255, 0, 0, 0 },{ 255, 8, 0, 0 },{ 255, 16, 0, 0 },{ 255, 24, 0, 0 },{ 255, 33, 0, 0 },{ 255, 41, 0, 0 },{ 255, 49, 0, 0 },{ 255, 57, 0, 0 },{ 255, 66, 0, 0 },
{ 255, 74, 0, 0 },{ 255, 82, 0, 0 },{ 255, 90, 0, 0 },{ 255, 99, 0, 0 },{ 255,107, 0, 0 },{ 255,115, 0, 0 },{ 255,123, 0, 0 },{ 255,132, 0, 0 },{ 255,140, 0, 0 },{ 255,148, 0, 0 },{ 255,156, 0, 0 },{ 255,165, 0, 0 },{ 255,169, 0, 0 },{ 255,173, 0, 0 },{ 255,181, 0, 0 },{ 255,189, 0, 0 },
{ 255,198, 0, 0 },{ 255,206, 0, 0 },{ 255,214, 0, 0 },{ 255,222, 0, 0 },{ 255,231, 0, 0 },{ 255,239, 0, 0 },{ 255,247, 0, 0 },{ 255,255, 0, 0 },{ 247,255, 0, 0 },{ 255,255, 0, 0 },{ 231,247, 0, 0 },{ 239,247, 0, 0 },{ 214,239, 0, 0 },{ 222,239, 0, 0 },{ 198,231, 0, 0 },{ 206,231, 0, 0 },
{ 181,222, 0, 0 },{ 189,222, 0, 0 },{ 165,214, 0, 0 },{ 173,214, 0, 0 },{ 148,206, 0, 0 },{ 156,206, 0, 0 },{ 123,198, 0, 0 },{ 132,198, 0, 0 },{ 140,198, 0, 0 },{ 115,189, 0, 0 },{ 123,189, 0, 0 },{ 99,181, 0, 0 },{ 107,181, 0, 0 },{ 94,177, 0, 0 },{ 82,173, 0, 0 },{ 90,173, 0, 0 },
{ 66,165, 0, 0 },{ 74,165, 0, 0 },{ 41,156, 0, 0 },{ 49,156, 0, 0 },{ 57,156, 0, 0 },{ 24,148, 0, 0 },{ 33,148, 0, 0 },{ 41,148, 0, 0 },{ 16,140, 0, 0 },{ 24,140, 0, 0 },{ 10,136, 0, 0 },{ 0,132, 0, 0 },{ 8,132, 0, 0 },{ 0,132, 0, 0 },{ 0,132, 8, 0 },{ 0,136, 8, 0 },
{ 0,140, 8, 0 },{ 0,140, 16, 0 },{ 0,140, 24, 0 },{ 0,148, 24, 0 },{ 0,148, 33, 0 },{ 0,148, 37, 0 },{ 0,148, 41, 0 },{ 0,156, 41, 0 },{ 0,156, 45, 0 },{ 0,156, 49, 0 },{ 0,156, 57, 0 },{ 0,165, 57, 0 },{ 0,165, 66, 0 },{ 0,165, 74, 0 },{ 0,173, 74, 0 },{ 0,173, 82, 0 },
{ 0,173, 90, 0 },{ 0,177, 94, 0 },{ 0,181, 99, 0 },{ 0,181,107, 0 },{ 0,189,115, 0 },{ 0,189,123, 0 },{ 0,198,132, 0 },{ 0,198,140, 0 },{ 0,202,144, 0 },{ 0,206,148, 0 },{ 0,206,156, 0 },{ 0,214,165, 0 },{ 0,214,169, 0 },{ 0,214,173, 0 },{ 0,222,181, 0 },{ 0,222,189, 0 },
{ 0,231,198, 0 },{ 0,231,202, 0 },{ 0,231,206, 0 },{ 0,239,214, 0 },{ 0,239,222, 0 },{ 0,247,231, 0 },{ 0,247,239, 0 },{ 0,255,247, 0 },{ 0,255,255, 0 },{ 0,255,255, 0 },{ 0,247,255, 0 },{ 0,239,255, 0 },{ 0,231,255, 0 },{ 0,222,255, 0 },{ 0,214,255, 0 },{ 0,206,255, 0 },
{ 0,198,255, 0 },{ 0,189,255, 0 },{ 0,181,255, 0 },{ 0,177,255, 0 },{ 0,173,255, 0 },{ 0,165,255, 0 },{ 0,156,255, 0 },{ 0,148,255, 0 },{ 0,144,255, 0 },{ 0,140,255, 0 },{ 0,132,255, 0 },{ 0,123,255, 0 },{ 0,115,255, 0 },{ 0,107,255, 0 },{ 0, 99,255, 0 },{ 0, 94,255, 0 },
{ 0, 90,255, 0 },{ 0, 82,255, 0 },{ 0, 74,255, 0 },{ 0, 66,255, 0 },{ 0, 57,255, 0 },{ 0, 49,255, 0 },{ 0, 41,255, 0 },{ 0, 33,255, 0 },{ 0, 24,255, 0 },{ 0, 16,255, 0 },{ 0, 8,255, 0 },{ 0, 0,255, 0 },{ 0, 0,255, 0 },{ 8, 8,255, 0 },{ 16, 16,255, 0 },{ 24, 24,255, 0 },
{ 33, 33,255, 0 },{ 41, 41,255, 0 },{ 49, 49,255, 0 },{ 57, 57,255, 0 },{ 66, 66,255, 0 },{ 74, 74,255, 0 },{ 82, 82,255, 0 },{ 90, 90,255, 0 },{ 99, 99,255, 0 },{ 107,107,255, 0 },{ 115,115,255, 0 },{ 123,123,255, 0 },{ 132,132,255, 0 },{ 140,140,255, 0 },{ 144,144,255, 0 },{ 148,148,255, 0 },
{ 152,152,255, 0 },{ 156,156,255, 0 },{ 165,165,255, 0 },{ 173,173,255, 0 },{ 181,181,255, 0 },{ 185,185,255, 0 },{ 189,189,255, 0 },{ 198,198,255, 0 },{ 206,206,255, 0 },{ 214,214,255, 0 },{ 222,222,255, 0 },{ 231,231,255, 0 },{ 239,239,255, 0 },{ 247,247,255, 0 },{ 255,255,255, 0 },{ 255,255,255, 0 },
},
{
{ 0, 0, 0, 0 },{ 0, 0, 0, 0 },{ 1, 1, 1, 0 },{ 2, 2, 2, 0 },{ 3, 3, 3, 0 },{ 4, 4, 4, 0 },{ 5, 5, 5, 0 },{ 6, 6, 6, 0 },{ 7, 7, 7, 0 },{ 8, 8, 8, 0 },{ 9, 9, 9, 0 },{ 10, 10, 10, 0 },{ 11, 11, 11, 0 },{ 12, 12, 12, 0 },{ 13, 13, 13, 0 },{ 14, 14, 14, 0 },
{ 15, 15, 15, 0 },{ 16, 16, 16, 0 },{ 17, 17, 17, 0 },{ 18, 18, 18, 0 },{ 19, 19, 19, 0 },{ 20, 20, 20, 0 },{ 21, 21, 21, 0 },{ 22, 22, 22, 0 },{ 23, 23, 23, 0 },{ 24, 24, 24, 0 },{ 25, 25, 25, 0 },{ 26, 26, 26, 0 },{ 27, 27, 27, 0 },{ 28, 28, 28, 0 },{ 29, 29, 29, 0 },{ 30, 30, 30, 0 },
{ 31, 31, 31, 0 },{ 32, 32, 32, 0 },{ 33, 33, 33, 0 },{ 34, 34, 34, 0 },{ 35, 35, 35, 0 },{ 36, 36, 36, 0 },{ 37, 37, 37, 0 },{ 38, 38, 38, 0 },{ 39, 39, 39, 0 },{ 40, 40, 40, 0 },{ 41, 41, 41, 0 },{ 42, 42, 42, 0 },{ 43, 43, 43, 0 },{ 44, 44, 44, 0 },{ 45, 45, 45, 0 },{ 46, 46, 46, 0 },
{ 47, 47, 47, 0 },{ 48, 48, 48, 0 },{ 49, 49, 49, 0 },{ 50, 50, 50, 0 },{ 51, 51, 51, 0 },{ 52, 52, 52, 0 },{ 54, 54, 54, 0 },{ 55, 55, 55, 0 },{ 56, 56, 56, 0 },{ 58, 58, 58, 0 },{ 59, 59, 59, 0 },{ 60, 60, 60, 0 },{ 62, 62, 62, 0 },{ 63, 63, 63, 0 },{ 65, 65, 65, 0 },{ 66, 66, 66, 0 },
{ 67, 67, 67, 0 },{ 69, 69, 69, 0 },{ 70, 70, 70, 0 },{ 71, 71, 71, 0 },{ 73, 73, 73, 0 },{ 74, 74, 74, 0 },{ 76, 76, 76, 0 },{ 77, 77, 77, 0 },{ 78, 78, 78, 0 },{ 80, 80, 80, 0 },{ 81, 81, 81, 0 },{ 82, 82, 82, 0 },{ 84, 84, 84, 0 },{ 85, 85, 85, 0 },{ 87, 87, 87, 0 },{ 88, 88, 88, 0 },
{ 89, 89, 89, 0 },{ 91, 91, 91, 0 },{ 92, 92, 92, 0 },{ 93, 93, 93, 0 },{ 95, 95, 95, 0 },{ 96, 96, 96, 0 },{ 98, 98, 98, 0 },{ 99, 99, 99, 0 },{ 100,100,100, 0 },{ 102,102,102, 0 },{ 103,103,103, 0 },{ 104,104,104, 0 },{ 106,106,106, 0 },{ 107,107,107, 0 },{ 109,109,109, 0 },{ 110,110,110, 0 },
{ 111,111,111, 0 },{ 113,113,113, 0 },{ 114,114,114, 0 },{ 115,115,115, 0 },{ 117,117,117, 0 },{ 118,118,118, 0 },{ 120,120,120, 0 },{ 121,121,121, 0 },{ 123,123,123, 0 },{ 124,124,124, 0 },{ 126,126,126, 0 },{ 127,127,127, 0 },{ 129,129,129, 0 },{ 130,130,130, 0 },{ 132,132,132, 0 },{ 134,134,134, 0 },
{ 135,135,135, 0 },{ 137,137,137, 0 },{ 138,138,138, 0 },{ 140,140,140, 0 },{ 141,141,141, 0 },{ 143,143,143, 0 },{ 145,145,145, 0 },{ 146,146,146, 0 },{ 148,148,148, 0 },{ 149,149,149, 0 },{ 151,151,151, 0 },{ 152,152,152, 0 },{ 154,154,154, 0 },{ 156,156,156, 0 },{ 157,157,157, 0 },{ 159,159,159, 0 },
{ 160,160,160, 0 },{ 162,162,162, 0 },{ 163,163,163, 0 },{ 165,165,165, 0 },{ 167,167,167, 0 },{ 168,168,168, 0 },{ 170,170,170, 0 },{ 171,171,171, 0 },{ 173,173,173, 0 },{ 174,174,174, 0 },{ 176,176,176, 0 },{ 178,178,178, 0 },{ 179,179,179, 0 },{ 181,181,181, 0 },{ 182,182,182, 0 },{ 184,184,184, 0 },
{ 185,185,185, 0 },{ 187,187,187, 0 },{ 189,189,189, 0 },{ 190,190,190, 0 },{ 192,192,192, 0 },{ 193,193,193, 0 },{ 195,195,195, 0 },{ 196,196,196, 0 },{ 198,198,198, 0 },{ 200,200,200, 0 },{ 200,200,201, 0 },{ 200,200,202, 0 },{ 200,200,203, 0 },{ 200,200,204, 0 },{ 200,200,205, 0 },{ 200,200,206, 0 },
{ 200,200,207, 0 },{ 200,200,208, 0 },{ 200,200,209, 0 },{ 200,200,210, 0 },{ 200,200,211, 0 },{ 200,200,212, 0 },{ 200,200,214, 0 },{ 200,200,215, 0 },{ 200,200,216, 0 },{ 200,200,217, 0 },{ 200,200,218, 0 },{ 200,200,219, 0 },{ 200,200,220, 0 },{ 200,200,221, 0 },{ 200,200,222, 0 },{ 200,200,223, 0 },
{ 200,200,224, 0 },{ 200,200,225, 0 },{ 200,200,226, 0 },{ 200,200,228, 0 },{ 200,200,229, 0 },{ 200,200,230, 0 },{ 200,200,231, 0 },{ 200,200,232, 0 },{ 200,200,233, 0 },{ 200,200,234, 0 },{ 200,200,235, 0 },{ 200,200,236, 0 },{ 200,200,237, 0 },{ 200,200,238, 0 },{ 200,200,239, 0 },{ 200,200,240, 0 },
{ 200,200,242, 0 },{ 200,200,243, 0 },{ 200,200,244, 0 },{ 200,200,245, 0 },{ 200,200,246, 0 },{ 200,200,247, 0 },{ 200,200,248, 0 },{ 200,200,249, 0 },{ 200,200,250, 0 },{ 200,200,251, 0 },{ 200,200,252, 0 },{ 200,200,253, 0 },{ 200,200,255, 0 },{ 197,197,255, 0 },{ 193,193,255, 0 },{ 189,189,255, 0 },
{ 185,185,255, 0 },{ 181,181,255, 0 },{ 177,177,255, 0 },{ 173,173,255, 0 },{ 169,169,255, 0 },{ 165,165,255, 0 },{ 161,161,255, 0 },{ 157,157,255, 0 },{ 153,153,255, 0 },{ 150,150,255, 0 },{ 146,146,255, 0 },{ 142,142,255, 0 },{ 138,138,255, 0 },{ 134,134,255, 0 },{ 130,130,255, 0 },{ 126,126,255, 0 },
{ 122,122,255, 0 },{ 118,118,255, 0 },{ 114,114,255, 0 },{ 110,110,255, 0 },{ 106,106,255, 0 },{ 102,102,255, 0 },{ 99, 99,255, 0 },{ 95, 95,255, 0 },{ 91, 91,255, 0 },{ 87, 87,255, 0 },{ 83, 83,255, 0 },{ 79, 79,255, 0 },{ 75, 75,255, 0 },{ 71, 71,255, 0 },{ 67, 67,255, 0 },{ 63, 63,255, 0 },
{ 59, 59,255, 0 },{ 55, 55,255, 0 },{ 51, 51,255, 0 },{ 48, 48,255, 0 },{ 44, 44,255, 0 },{ 40, 40,255, 0 },{ 36, 36,255, 0 },{ 32, 32,255, 0 },{ 28, 28,255, 0 },{ 24, 24,255, 0 },{ 20, 20,255, 0 },{ 16, 16,255, 0 },{ 12, 12,255, 0 },{ 8, 8,255, 0 },{ 4, 4,255, 0 },{ 0, 0,255, 0 },
},
{
{ 255,255,255, 0 },{ 254,254,254, 0 },{ 253,253,253, 0 },{ 252,252,252, 0 },{ 251,251,251, 0 },{ 250,250,250, 0 },{ 249,249,249, 0 },{ 248,248,248, 0 },{ 247,247,247, 0 },{ 246,246,246, 0 },{ 245,245,245, 0 },{ 244,244,244, 0 },{ 243,243,243, 0 },{ 242,242,242, 0 },{ 241,241,241, 0 },{ 240,240,240, 0 },
{ 239,239,239, 0 },{ 238,238,238, 0 },{ 237,237,237, 0 },{ 236,236,236, 0 },{ 235,235,235, 0 },{ 234,234,234, 0 },{ 233,233,233, 0 },{ 232,232,232, 0 },{ 231,231,231, 0 },{ 230,230,230, 0 },{ 229,229,229, 0 },{ 228,228,228, 0 },{ 227,227,227, 0 },{ 226,226,226, 0 },{ 225,225,225, 0 },{ 224,224,224, 0 },
{ 223,223,223, 0 },{ 222,222,222, 0 },{ 221,221,221, 0 },{ 220,220,220, 0 },{ 219,219,219, 0 },{ 218,218,218, 0 },{ 217,217,217, 0 },{ 216,216,216, 0 },{ 215,215,215, 0 },{ 214,214,214, 0 },{ 213,213,213, 0 },{ 212,212,212, 0 },{ 211,211,211, 0 },{ 210,210,210, 0 },{ 209,209,209, 0 },{ 208,208,208, 0 },
{ 207,207,207, 0 },{ 206,206,206, 0 },{ 205,205,205, 0 },{ 204,204,204, 0 },{ 203,203,203, 0 },{ 202,202,202, 0 },{ 201,201,201, 0 },{ 200,200,200, 0 },{ 199,199,199, 0 },{ 198,198,198, 0 },{ 197,197,197, 0 },{ 196,196,196, 0 },{ 195,195,195, 0 },{ 194,194,194, 0 },{ 193,193,193, 0 },{ 192,192,192, 0 },
{ 191,191,191, 0 },{ 190,190,190, 0 },{ 189,189,189, 0 },{ 188,188,188, 0 },{ 187,187,187, 0 },{ 186,186,186, 0 },{ 185,185,185, 0 },{ 184,184,184, 0 },{ 183,183,183, 0 },{ 182,182,182, 0 },{ 181,181,181, 0 },{ 180,180,180, 0 },{ 179,179,179, 0 },{ 178,178,178, 0 },{ 177,177,177, 0 },{ 176,176,176, 0 },
{ 175,175,175, 0 },{ 174,174,174, 0 },{ 173,173,173, 0 },{ 172,172,172, 0 },{ 171,171,171, 0 },{ 170,170,170, 0 },{ 169,169,169, 0 },{ 168,168,168, 0 },{ 167,167,167, 0 },{ 166,166,166, 0 },{ 165,165,165, 0 },{ 164,164,164, 0 },{ 163,163,163, 0 },{ 162,162,162, 0 },{ 161,161,161, 0 },{ 160,160,160, 0 },
{ 159,159,159, 0 },{ 158,158,158, 0 },{ 157,157,157, 0 },{ 156,156,156, 0 },{ 155,155,155, 0 },{ 154,154,154, 0 },{ 153,153,153, 0 },{ 152,152,152, 0 },{ 151,151,151, 0 },{ 150,150,150, 0 },{ 149,149,149, 0 },{ 148,148,148, 0 },{ 147,147,147, 0 },{ 146,146,146, 0 },{ 145,145,145, 0 },{ 144,144,144, 0 },
{ 143,143,143, 0 },{ 142,142,142, 0 },{ 141,141,141, 0 },{ 140,140,140, 0 },{ 139,139,139, 0 },{ 138,138,138, 0 },{ 137,137,137, 0 },{ 136,136,136, 0 },{ 135,135,135, 0 },{ 134,134,134, 0 },{ 133,133,133, 0 },{ 132,132,132, 0 },{ 131,131,131, 0 },{ 130,130,130, 0 },{ 129,129,129, 0 },{ 128,128,128, 0 },
{ 127,127,127, 0 },{ 126,126,126, 0 },{ 125,125,125, 0 },{ 124,124,124, 0 },{ 123,123,123, 0 },{ 122,122,122, 0 },{ 121,121,121, 0 },{ 120,120,120, 0 },{ 119,119,119, 0 },{ 118,118,118, 0 },{ 117,117,117, 0 },{ 116,116,116, 0 },{ 115,115,115, 0 },{ 114,114,114, 0 },{ 113,113,113, 0 },{ 112,112,112, 0 },
{ 111,111,111, 0 },{ 110,110,110, 0 },{ 109,109,109, 0 },{ 108,108,108, 0 },{ 107,107,107, 0 },{ 106,106,106, 0 },{ 105,105,105, 0 },{ 104,104,104, 0 },{ 103,103,103, 0 },{ 102,102,102, 0 },{ 101,101,101, 0 },{ 100,100,100, 0 },{ 99, 99, 99, 0 },{ 98, 98, 98, 0 },{ 97, 97, 97, 0 },{ 96, 96, 96, 0 },
{ 95, 95, 95, 0 },{ 94, 94, 94, 0 },{ 93, 93, 93, 0 },{ 92, 92, 92, 0 },{ 91, 91, 91, 0 },{ 90, 90, 90, 0 },{ 89, 89, 89, 0 },{ 88, 88, 88, 0 },{ 87, 87, 87, 0 },{ 86, 86, 86, 0 },{ 85, 85, 85, 0 },{ 84, 84, 84, 0 },{ 83, 83, 83, 0 },{ 82, 82, 82, 0 },{ 81, 81, 81, 0 },{ 80, 80, 80, 0 },
{ 79, 79, 79, 0 },{ 78, 78, 78, 0 },{ 77, 77, 77, 0 },{ 76, 76, 76, 0 },{ 75, 75, 75, 0 },{ 74, 74, 74, 0 },{ 73, 73, 73, 0 },{ 72, 72, 72, 0 },{ 71, 71, 71, 0 },{ 70, 70, 70, 0 },{ 69, 69, 69, 0 },{ 68, 68, 68, 0 },{ 67, 67, 67, 0 },{ 66, 66, 66, 0 },{ 65, 65, 65, 0 },{ 64, 64, 64, 0 },
{ 63, 63, 63, 0 },{ 62, 62, 62, 0 },{ 61, 61, 61, 0 },{ 60, 60, 60, 0 },{ 59, 59, 59, 0 },{ 58, 58, 58, 0 },{ 57, 57, 57, 0 },{ 56, 56, 56, 0 },{ 55, 55, 55, 0 },{ 54, 54, 54, 0 },{ 53, 53, 53, 0 },{ 52, 52, 52, 0 },{ 51, 51, 51, 0 },{ 50, 50, 50, 0 },{ 49, 49, 49, 0 },{ 48, 48, 48, 0 },
{ 47, 47, 47, 0 },{ 46, 46, 46, 0 },{ 45, 45, 45, 0 },{ 44, 44, 44, 0 },{ 43, 43, 43, 0 },{ 42, 42, 42, 0 },{ 41, 41, 41, 0 },{ 40, 40, 40, 0 },{ 39, 39, 39, 0 },{ 38, 38, 38, 0 },{ 37, 37, 37, 0 },{ 36, 36, 36, 0 },{ 35, 35, 35, 0 },{ 34, 34, 34, 0 },{ 33, 33, 33, 0 },{ 32, 32, 32, 0 },
{ 31, 31, 31, 0 },{ 30, 30, 30, 0 },{ 29, 29, 29, 0 },{ 28, 28, 28, 0 },{ 27, 27, 27, 0 },{ 26, 26, 26, 0 },{ 25, 25, 25, 0 },{ 24, 24, 24, 0 },{ 23, 23, 23, 0 },{ 22, 22, 22, 0 },{ 21, 21, 21, 0 },{ 20, 20, 20, 0 },{ 19, 19, 19, 0 },{ 18, 18, 18, 0 },{ 17, 17, 17, 0 },{ 16, 16, 16, 0 },
{ 15, 15, 15, 0 },{ 14, 14, 14, 0 },{ 13, 13, 13, 0 },{ 12, 12, 12, 0 },{ 11, 11, 11, 0 },{ 10, 10, 10, 0 },{ 9, 9, 9, 0 },{ 8, 8, 8, 0 },{ 7, 7, 7, 0 },{ 6, 6, 6, 0 },{ 5, 5, 5, 0 },{ 4, 4, 4, 0 },{ 3, 3, 3, 0 },{ 2, 2, 2, 0 },{ 1, 1, 1, 0 },{ 0, 0, 0, 0 },
}
};