前言:本篇文章求阴历方法不同于 我截止目前看到的大部分 java 求阴历方法,本篇文章代码都是从C++代码中翻译过来的。
由于本篇文章没有什么技术点可以说的,下边我们直接放上工具类,年份时间范围为 1901年 - 2099年。如果想要调试直接将工具类复制 cv到工程 工具类中,调用 solarToLunar 方法即可获取到 所有相关信息的 HashMap对象。
import android.annotation.SuppressLint;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
/**
* 阳历 转 阴历 工具类
*
* @packageName: cn.ymc.vip.suntimejava.util
* @fileName: CalendarUtil
* @date: 2019/1/4 14:49
* @author: ymc
* @QQ:745612618
*/
public class CalendarUtil {
private volatile static CalendarUtil instance;
private CalendarUtil() {
}
private static final int MIN_YEAR = 1900;
private static final int MIN_SOLAR_YEAR = 1901;
private static final int MAX_YEAR = 2099;
/**
* 年干支
*/
private String[] mYearGanZhi = {"甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉",
"甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰", "辛巳", "壬午", "癸未",
"甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳",
"甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸卯",
"甲辰", "乙巳", "丙午", "丁未", "戊申", "己酉", "庚戌", "辛亥", "壬子", "癸丑",
"甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申", "辛酉", "壬戌", "癸亥"};
/**
* 定义起始年,1804年为甲子年属鼠
*/
private final static int START_YEAR = 1804;
/**
* 10天干 / 12 地支
*/
private String[] tianGan = new String[]{"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬",
"癸"};
private String[] diZhi = new String[]{"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申",
"酉", "戌", "亥"};
private static String[] shuXiang = {"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};
private int[] mDiZhiTimes = {23, 1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 13, 13, 15, 15, 17, 17, 19, 19, 21, 21, 23};
/**
* 年干和月干的对应关系
*/
private int[] mYearAndMonthGan = {3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2,
3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2};
private int[] mDayAndTimeGan = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2,
3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2,
3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,};
private int[] normalYday = {1, 32, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};
/**
* 闰年的 情况
*/
private int[] leapYday = {1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336};
private int[] TianGanDayLG = {10, 9, 7, 8, 7, 10, 9, 7, 8, 7};
private int[] YinYang = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0};
private int[] DiZhiDayLG = {7, 10, 8, 8, 10, 7, 7, 10, 9, 9, 10, 7};
private int[] TianGanTimeLG = {9, 8, 7, 6, 5, 9, 8, 7, 6, 5};
private int[] DiZhiTimeLG = {9, 8, 7, 6, 5, 4, 9, 8, 7, 6, 5, 4};
private int[] JiuGong = {6, 1, 8, 3, 4, 9, 2, 5, 7};
private String[] m_LGAcupoint = {"公孙", "申脉", "内关", "外关", "临泣", "列缺", "照海", "照海", "后溪"};
private int year;
private int month;
private int day;
private int leap;
private int nTem;
private String baGuiStr;
/**
* 闰月
*/
private int leapMonth;
/**
* 是否 闰月
*/
private boolean isLeap;
/**
* 世纪
*/
private int nCentry;
/**
* 求年的后两位
*/
private int nLYear;
/**
* index 下标
*/
private int rTn = -1;
private int nTradYesrs;
/**
* 所求数据 包装
*/
private HashMap resMap = new HashMap<>();
/**
* 用来表示1900年到2099年间农历年份的相关信息,共24位bit的16进制表示,其中:
* 1. 前4位表示该年闰哪个月;
* 2. 5-17位表示农历年份13个月的大小月分布,0表示小,1表示大;
* 3. 最后7位表示农历年首(正月初一)对应的公历日期。** 以2014年的数据0x955ABF为例说明:
* 1001 0101 0101 1010 1011 1111
* 农历正月初一对应公历1月31号
*/
private int[] lunarInfo = {
//1900
0x84B6BF,
//1901-1910
0x04AE53, 0x0A5748, 0x5526BD, 0x0D2650, 0x0D9544, 0x46AAB9, 0x056A4D, 0x09AD42, 0x24AEB6, 0x04AE4A,
//1911-1920
0x6A4DBE, 0x0A4D52, 0x0D2546, 0x5D52BA, 0x0B544E, 0x0D6A43, 0x296D37, 0x095B4B, 0x749BC1, 0x049754,
//1921-1930
0x0A4B48, 0x5B25BC, 0x06A550, 0x06D445, 0x4ADAB8, 0x02B64D, 0x095742, 0x2497B7, 0x04974A, 0x664B3E,
//1931-1940
0x0D4A51, 0x0EA546, 0x56D4BA, 0x05AD4E, 0x02B644, 0x393738, 0x092E4B, 0x7C96BF, 0x0C9553, 0x0D4A48,
//1941-1950
0x6DA53B, 0x0B554F, 0x056A45, 0x4AADB9, 0x025D4D, 0x092D42, 0x2C95B6, 0x0A954A, 0x7B4ABD, 0x06CA51,
//1951-1960
0x0B5546, 0x555ABB, 0x04DA4E, 0x0A5B43, 0x352BB8, 0x052B4C, 0x8A953F, 0x0E9552, 0x06AA48, 0x6AD53C,
//1961-1970
0x0AB54F, 0x04B645, 0x4A5739, 0x0A574D, 0x052642, 0x3E9335, 0x0D9549, 0x75AABE, 0x056A51, 0x096D46,
//1971-1980
0x54AEBB, 0x04AD4F, 0x0A4D43, 0x4D26B7, 0x0D254B, 0x8D52BF, 0x0B5452, 0x0B6A47, 0x696D3C, 0x095B50,
//1981-1990
0x049B45, 0x4A4BB9, 0x0A4B4D, 0xAB25C2, 0x06A554, 0x06D449, 0x6ADA3D, 0x0AB651, 0x095746, 0x5497BB,
//1991-2000
0x04974F, 0x064B44, 0x36A537, 0x0EA54A, 0x86B2BF, 0x05AC53, 0x0AB647, 0x5936BC, 0x092E50, 0x0C9645,
//2001-2010
0x4D4AB8, 0x0D4A4C, 0x0DA541, 0x25AAB6, 0x056A49, 0x7AADBD, 0x025D52, 0x092D47, 0x5C95BA, 0x0A954E,
//2011-2020
0x0B4A43, 0x4B5537, 0x0AD54A, 0x955ABF, 0x04BA53, 0x0A5B48, 0x652BBC, 0x052B50, 0x0A9345, 0x474AB9,
//2021-2030
0x06AA4C, 0x0AD541, 0x24DAB6, 0x04B64A, 0x6a573D, 0x0A4E51, 0x0D2646, 0x5E933A, 0x0D534D, 0x05AA43,
//2031-2040
0x36B537, 0x096D4B, 0xB4AEBF, 0x04AD53, 0x0A4D48, 0x6D25BC, 0x0D254F, 0x0D5244, 0x5DAA38, 0x0B5A4C,
//2041-2050
0x056D41, 0x24ADB6, 0x049B4A, 0x7A4BBE, 0x0A4B51, 0x0AA546, 0x5B52BA, 0x06D24E, 0x0ADA42, 0x355B37,
//2051-2060
0x09374B, 0x8497C1, 0x049753, 0x064B48, 0x66A53C, 0x0EA54F, 0x06AA44, 0x4AB638, 0x0AAE4C, 0x092E42,
//2061-2070
0x3C9735, 0x0C9649, 0x7D4ABD, 0x0D4A51, 0x0DA545, 0x55AABA, 0x056A4E, 0x0A6D43, 0x452EB7, 0x052D4B,
//2071-2080
0x8A95BF, 0x0A9553, 0x0B4A47, 0x6B553B, 0x0AD54F, 0x055A45, 0x4A5D38, 0x0A5B4C, 0x052B42, 0x3A93B6,
//2081-2090
0x069349, 0x7729BD, 0x06AA51, 0x0AD546, 0x54DABA, 0x04B64E, 0x0A5743, 0x452738, 0x0D264A, 0x8E933E,
//2091-2099
0x0D5252, 0x0DAA47, 0x66B53B, 0x056D4F, 0x04AE45, 0x4A4EB9, 0x0A4D4C, 0x0D1541, 0x2D92B5};
/**
* 单例模式
*
* @return CalendarUtil
*/
public static CalendarUtil getInstance() {
if (instance == null) {
synchronized (CalendarUtil.class) {
if (instance == null) {
instance = new CalendarUtil();
}
}
}
return instance;
}
/**
* 将公历日期转换为农历日期,且标识是否是闰月
*
* @return 返回公历日期对应的农历日期
*/
public HashMap solarToLunar(String date, Calendar today) throws ParseException {
@SuppressLint("SimpleDateFormat")
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(date));
int y = cal.get(Calendar.YEAR);
// 月份统一 +1
int m = cal.get(Calendar.MONTH) + 1;
int i = cal.get(Calendar.DATE);
int h = cal.get(Calendar.HOUR_OF_DAY);
Date baseDate = new GregorianCalendar(MIN_YEAR, 0, 31).getTime();
Date objDate = new GregorianCalendar(y, m - 1, i).getTime();
int offset = (int) ((objDate.getTime() - baseDate.getTime()) / 86400000L);
// 用offset减去每农历年的天数计算当天是农历第几天// iYear最终结果是农历的年份, offset是当年的第几天
int iYear, daysOfYear = 0;
for (iYear = MIN_YEAR; iYear <= MAX_YEAR && offset > 0; iYear++) {
daysOfYear = daysInLunarYear(iYear);
offset -= daysOfYear;
}
if (offset < 0) {
offset += daysOfYear;
iYear--;
}
// 农历年份
year = iYear;
leapMonth = leapMonth(iYear);
// 闰哪个月,1 - 12
isLeap = false;
// 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天
int iMonth, daysOfMonth = 0;
for (iMonth = 1; iMonth <= 13 && offset > 0; iMonth++) {
daysOfMonth = daysInLunarMonth(iYear, iMonth);
offset -= daysOfMonth;
}
// 当前月超过闰月,要校正
if (leapMonth != 0 && iMonth > leapMonth) {
--iMonth;
if (iMonth == leapMonth) {
isLeap = true;
}
}
// offset小于0时,也要校正
if (offset < 0) {
offset += daysOfMonth;
--iMonth;
}
month = iMonth;
day = offset + 1;
leap = isLeap ? 1 : 0;
// 获取年份天干地支
resMap.put("cY", tianGan[getYearTianGanIndex(year)] + diZhi[getYearDiZhiIndex(year)] + "年");
resMap.put("shu", getAnimalYearName(year));
resMap.put("solar", getTraditionYearBySolarTerm(y, m, i));
resMap.put("year", year);
resMap.put("month", month);
resMap.put("day", day);
resMap.put("leap", leap);
resMap.put("cM", tianGan[getMonthGanIndexBySolarTerm(y, m, i)] +
diZhi[getMonthZhiIndexBySolarTerm(y, m, i)] + "月");
resMap.put("cD", tianGan[getDayGanIndex(y, m, i)] +
diZhi[getDayZhiIndex(y, m, i)] + "日");
resMap.put("cH", tianGan[getTimeGanIndex(y, m, i, h)] +
diZhi[getTimeZhiIndex(h)] + "时");
// 纳甲算法 查询所需信息
resMap.put("najiaCD", tianGan[getDayGanIndex(y, m, i)]);
resMap.put("najiaCDZhi", diZhi[getDayZhiIndex(y, m, i)]);
resMap.put("najiaCH", tianGan[getTimeGanIndex(y, m, i, h)] +
diZhi[getTimeZhiIndex(h)]);
resMap.put("najiaCHGan",tianGan[getTimeGanIndex(y, m, i, h)]);
// 纳支算法 查询所需信息
resMap.put("nazhiCH", diZhi[getTimeZhiIndex(h)]);
return resMap;
}
/**
* 获取该年的天干名称
*/
private int getYearTianGanIndex(int year) {
nTem = year % tianGan.length - 3;
if (nTem <= 0) {
return tianGan.length + nTem - 1;
} else {
return nTem - 1;
}
}
/**
* 获取该年的地支名称
*/
private int getYearDiZhiIndex(int year) {
nTem = year % 12 - 3;
if (nTem <= 0) {
return 12 + nTem - 1;
} else {
return nTem - 1;
}
}
/**
* 获取当前年份与起始年之间的差值
**/
private int subtractYear(int year) {
int jiaziYear = START_YEAR;
//如果年份小于起始的甲子年(START_YEAR = 1804),则起始甲子年往前偏移
if (year < jiaziYear) {
//60年一个周期
jiaziYear = jiaziYear - (60 + 60 * ((jiaziYear - year) / 60));
}
return year - jiaziYear;
}
/**
* 获取该年的生肖名称
*
* @param year 年份
* @return
*/
private String getAnimalYearName(int year) {
return shuXiang[subtractYear(year) % 12] + "年";
}
/**
* 传回农历 year年的总天数
*
* @param year 将要计算的年份
* @return 返回传入年份的总天数
*/
private int daysInLunarYear(int year) {
int i, sum = 348;
if (leapMonth(year) != 0) {
sum = 377;
}
int monthInfo = lunarInfo[year - MIN_YEAR] & 0x0FFF80;
for (i = 0x80000; i > 0x7; i >>= 1) {
if ((monthInfo & i) != 0) {
sum += 1;
}
}
return sum;
}
/**
* 传回农历 year年month月的总天数,总共有13个月包括闰月
*
* @param year 将要计算的年份
* @param month 将要计算的月份
* @return 传回农历 year年month月的总天数
*/
private int daysInLunarMonth(int year, int month) {
return (lunarInfo[year - MIN_YEAR] & (0x100000 >> month)) == 0 ? 29 : 30;
}
/**
* 传回农历 year年闰哪个月 1-12 , 没闰传回 0
*
* @param year 将要计算的年份
* @return 传回农历 year年闰哪个月1-12, 没闰传回 0
*/
private int leapMonth(int year) {
return ((lunarInfo[year - MIN_YEAR] & 0xF00000)) >> 20;
}
/**
* 通过SolarTerm 计算阴历年份
*
* @param year year
* @param month month
* @param day day
* @return 阴历年份
*/
private int getTraditionYearBySolarTerm(int year, int month, int day) {
//计算当前年的立春日期
if (month < 2) {
nTradYesrs = year - 1;
} else if (month > 3) {
nTradYesrs = year;
} else {
//获取当年立春的日子
if (day >= ((solarterms1[(year - MIN_SOLAR_YEAR) * 12 + 1]) >> 4)) {
nTradYesrs = year;
} else {
nTradYesrs = year - 1;
}
}
return nTradYesrs;
}
/**
* 通过 年月日 计算 月份 天干
*
* @param year year
* @param month month
* @param day day
* @return 天干位置
*/
private int getMonthGanIndexBySolarTerm(int year, int month, int day) {
rTn = -1;
int monthGanNTem = 0;
//获取年的天干
int nTradYesrs = getTraditionYearBySolarTerm(year, month, day);
//当前月的节气的开始
if (day >= (solarterms1[(year - MIN_SOLAR_YEAR) * 12 + month - 1] >> 4)) {
monthGanNTem = month - 1;
} else {
monthGanNTem = month - 2;
}
if (monthGanNTem <= 0) {
monthGanNTem += 12;
}
int nGanValue = mYearAndMonthGan[getYearTianGanIndex(nTradYesrs) * 12 + monthGanNTem - 1];
for (int i = 0; i < tianGan.length; i++) {
if (nGanValue == (i + 1)) {
rTn = i;
break;
}
}
return rTn;
}
/**
* 通过 SolarTerm 计算月份 地支
*
* @param year year
* @param month month
* @param day day
* @return
*/
private int getMonthZhiIndexBySolarTerm(int year, int month, int day) {
//当前月的节气的开始
int monthZhiNTem;
if (day >= (solarterms1[(year - MIN_SOLAR_YEAR) * 12 + month - 1] >> 4)) {
monthZhiNTem = month + 1;
} else {
monthZhiNTem = month;
}
if (monthZhiNTem > 12) {
monthZhiNTem = monthZhiNTem % 12;
}
for (int i = 0; i < 12; i++) {
if (monthZhiNTem == i + 1) {
rTn = i;
break;
}
}
return rTn;
}
/**
* 获取 日 的 天干
*
* @param year year
* @param month month
* @param day day
* @return 日的天干index
*/
private int getDayGanIndex(int year, int month, int day) {
int dayZhiNTem;
//计算当前是什么世纪
nCentry = year / 100 + 1;
nCentry--;
//取年份后两位数
nLYear = year % 100;
dayZhiNTem = 4 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (month + 1) / 5 + day - 3;
if (month == 1) {
nCentry = (year - 1) / 100 + 1;
nCentry--;
nLYear = (year - 1) % 100;
dayZhiNTem = 4 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (13 + 1) / 5 + day - 3;
} else if (month == 2) {
nCentry = (year - 1) / 100 + 1;
nCentry--;
nLYear = (year - 1) % 100;
dayZhiNTem = 4 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (14 + 1) / 5 + day - 3;
}
rTn = dayZhiNTem % tianGan.length - 1;
if ((dayZhiNTem % tianGan.length) == 0) {
rTn = tianGan.length - 1;
}
return rTn;
}
/**
* 计算 天的 地支index
*
* @param year year
* @param month month
* @param day day
* @return 天的 地支index
*/
private int getDayZhiIndex(int year, int month, int day) {
int dayZhinTem;
//计算当前是什么世纪
nCentry = year / 100 + 1;
nCentry--;
//取年份后两位数
nLYear = year % 100;
dayZhinTem = 8 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (month + 1) / 5 + day + 7;
if (month == 1) {
nCentry = (year - 1) / 100 + 1;
nCentry--;
nLYear = (year - 1) % 100;
dayZhinTem = 8 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (13 + 1) / 5 + day + 7;
} else if (month == 2) {
nCentry = (year - 1) / 100 + 1;
nCentry--;
nLYear = (year - 1) % 100;
dayZhinTem = 8 * nCentry + nCentry / 4 + 5 * nLYear + nLYear / 4 + 3 * (14 + 1) / 5 + day + 7;
}
if (month % 2 == 0) {
dayZhinTem += 6;
}
rTn = dayZhinTem % 12 - 1;
if ((dayZhinTem % 12) == 0) {
rTn = 12 - 1;
}
return rTn;
}
/**
* 计算小时天干index
*
* @param year year
* @param month month
* @param day day
* @return 小时天干index
*/
private int getTimeGanIndex(int year, int month, int day, int hour) {
//找对应关系
int nTimeGanIndex = mDayAndTimeGan[getDayGanIndex(year, month, day) * 12
+ getTimeZhiIndex(hour)];
for (int i = 0; i < 60; i++) {
if (nTimeGanIndex == i + 1) {
rTn = i;
break;
}
}
return rTn;
}
/**
* 计算 小时 地支 index
*
* @param hour hour
* @return 小时 地支 index
*/
private int getTimeZhiIndex(int hour) {
for (int i = 0; i < 12; i++) {
if (mDiZhiTimes[i * 2] == 23 || mDiZhiTimes[i * 2 + 1] == 1) {
if (mDiZhiTimes[i * 2] <= hour) {
rTn = i;
break;
}
if (mDiZhiTimes[i * 2 + 1] > hour) {
rTn = i;
break;
}
} else {
if (mDiZhiTimes[i * 2] <= hour && mDiZhiTimes[i * 2 + 1] > hour) {
rTn = i;
break;
}
}
}
return rTn;
}
/**
* 获取灵龟八法 信息
* @param dayGanStr 天干
* @param dayZhiStr 天支
* @param timeGanStr 时间干
* @param timeZhiStr 时间支
* @return 灵龟八法信息
*/
public String getBaGuiVal(String dayGanStr,String dayZhiStr,String timeGanStr,String timeZhiStr) {
int GanValue = 0;
int ZhiValue = 0;
int YinYangValue = -1;
for (int i = 0; i < 10; i++) {
baGuiStr = tianGan[i];
if (baGuiStr.equals(dayGanStr)) {
GanValue += TianGanDayLG[i];
YinYangValue = YinYang[i];
}
if (baGuiStr.equals(timeGanStr)) {
GanValue += TianGanTimeLG[i];
}
}
for (int i = 0; i < 12; i++) {
baGuiStr = diZhi[i];
if (baGuiStr.equals(dayZhiStr)) {
ZhiValue += DiZhiDayLG[i];
}
if (baGuiStr.equals(timeZhiStr)) {
ZhiValue += DiZhiTimeLG[i];
}
}
int sumValue = GanValue + ZhiValue;
if (YinYangValue == 1) {
sumValue %= 9;
if (sumValue == 0) {
sumValue = 9;
}
} else if (YinYangValue == 0) {
sumValue %= 6;
if (sumValue == 0) {
sumValue = 6;
}
} else {
sumValue = -1;
}
baGuiStr = "";
for (int i = 0; i < 9; i++) {
if (JiuGong[i] == sumValue) {
baGuiStr = m_LGAcupoint[i];
break;
}
}
return baGuiStr;
}
/**
* solarterms1 月日时 数组
*/
private int[] solarterms1 = {
//1901
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1902
0x66, 0x54, 0x66, 0x66, 0x67, 0x77, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1903
0x66, 0x55, 0x77, 0x66, 0x77, 0x77, 0x89, 0x99, 0x99, 0x99, 0x88, 0x88,
//1904
0x76, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1905
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1906
0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1907
0x66, 0x55, 0x77, 0x66, 0x77, 0x77, 0x89, 0x99, 0x99, 0x99, 0x88, 0x88,
//1908
0x76, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1909
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1910
0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1911
0x66, 0x55, 0x77, 0x66, 0x77, 0x77, 0x89, 0x99, 0x99, 0x99, 0x88, 0x88,
//1912
0x76, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1913
0x65, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1914
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1915
0x66, 0x55, 0x67, 0x66, 0x67, 0x77, 0x89, 0x89, 0x99, 0x99, 0x88, 0x88,
//1916
0x66, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1917
0x65, 0x44, 0x66, 0x56, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x77,
//1918
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x87,
//1919
0x66, 0x55, 0x67, 0x66, 0x67, 0x77, 0x89, 0x89, 0x99, 0x99, 0x88, 0x88,
//1920
0x66, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1921
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x77,
//1922
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x87,
//1923
0x66, 0x54, 0x66, 0x66, 0x67, 0x77, 0x89, 0x89, 0x99, 0x99, 0x88, 0x88,
//1924
0x66, 0x55, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1925
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x77,
//1926
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1927
0x66, 0x54, 0x66, 0x66, 0x67, 0x77, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1928
0x66, 0x55, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1929
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1930
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1931
0x66, 0x54, 0x66, 0x66, 0x67, 0x77, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1932
0x66, 0x55, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1933
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1934
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1935
0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1936
0x66, 0x55, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1937
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1938
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1939
0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1940
0x66, 0x55, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1941
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1942
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1943
0x66, 0x54, 0x66, 0x66, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1944
0x66, 0x55, 0x66, 0x55, 0x56, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1945
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1946
0x65, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
//1947
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1948
0x66, 0x55, 0x56, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//1949
0x55, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1950
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
//1951
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x89, 0x89, 0x89, 0x99, 0x88, 0x88,
//1952
0x66, 0x55, 0x56, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//1953
0x55, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1954
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x77,
//1955
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1956
0x66, 0x55, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//1957
0x55, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1958
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1959
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1960
0x66, 0x54, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1961
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1962
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1963
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1964
0x66, 0x54, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1965
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1966
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1967
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1968
0x66, 0x54, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1969
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1970
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1971
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x89, 0x99, 0x88, 0x87,
//1972
0x66, 0x54, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1973
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1974
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1975
0x66, 0x44, 0x66, 0x56, 0x67, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
//1976
0x66, 0x54, 0x55, 0x45, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1977
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//1978
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x88, 0x77,
//1979
0x66, 0x44, 0x66, 0x56, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
//1980
0x66, 0x54, 0x55, 0x45, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1981
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//1982
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1983
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x88, 0x89, 0x88, 0x99, 0x88, 0x87,
//1984
0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//1985
0x55, 0x44, 0x56, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//1986
0x55, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1987
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x89, 0x88, 0x99, 0x88, 0x77,
//1988
0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//1989
0x55, 0x44, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1990
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//1991
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1992
0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//1993
0x55, 0x43, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1994
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1995
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//1996
0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//1997
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//1998
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//1999
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//2000
0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2001
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2002
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//2003
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//2004
0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2005
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2006
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//2007
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x99, 0x88, 0x77,
//2008
0x66, 0x44, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
//2009
0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2010
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//2011
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x88, 0x77,
//2012
0x66, 0x44, 0x55, 0x45, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
//2013
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2014
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//2015
0x65, 0x44, 0x66, 0x55, 0x66, 0x67, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//2016
0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
//2017
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2018
0x55, 0x44, 0x56, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//2019
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//2020
0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
//2021
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2022
0x55, 0x44, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2023
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x89, 0x87, 0x77,
//2024
0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2025
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2026
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2027
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//2028
0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2029
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2030
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2031
0x55, 0x44, 0x66, 0x55, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x77, 0x77,
//2032
0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2033
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2034
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2035
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//2036
0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2037
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2038
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2039
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//2040
0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2041
0x55, 0x33, 0x55, 0x45, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
//2042
0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2043
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//2044
0x65, 0x44, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x78, 0x77, 0x66,
//2045
0x55, 0x33, 0x55, 0x44, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
//2046
0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2047
0x55, 0x44, 0x66, 0x55, 0x56, 0x66, 0x78, 0x78, 0x88, 0x88, 0x77, 0x77,
//2048
0x65, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
//2049
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
//2050
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2051
0x55, 0x44, 0x55, 0x55, 0x56, 0x66, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2052
0x55, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
//2053
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
//2054
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2055
0x55, 0x44, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2056
0x55, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
//2057
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2058
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2059
0x55, 0x44, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2060
0x55, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x77, 0x66, 0x66,
//2061
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2062
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2063
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2064
0x55, 0x44, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x77, 0x66, 0x66,
//2065
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2066
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2067
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2068
0x55, 0x44, 0x55, 0x44, 0x45, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
//2069
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2070
0x55, 0x33, 0x55, 0x45, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
//2071
0x55, 0x43, 0x55, 0x55, 0x56, 0x56, 0x78, 0x78, 0x78, 0x88, 0x77, 0x77,
//2072
0x55, 0x44, 0x55, 0x44, 0x45, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
//2073
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x78, 0x77, 0x66,
//2074
0x55, 0x33, 0x55, 0x45, 0x55, 0x56, 0x77, 0x78, 0x77, 0x88, 0x77, 0x76,
//2075
0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2076
0x55, 0x44, 0x55, 0x44, 0x45, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
//2077
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x78, 0x77, 0x66,
//2078
0x55, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x78, 0x77, 0x88, 0x77, 0x76,
//2079
0x55, 0x43, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2080
0x55, 0x44, 0x55, 0x44, 0x45, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
//2081
0x54, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
//2082
0x55, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
//2083
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2084
0x55, 0x44, 0x44, 0x44, 0x45, 0x55, 0x67, 0x67, 0x67, 0x77, 0x66, 0x66,
//2085
0x44, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
//2086
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x76,
//2087
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x77,
//2088
0x55, 0x44, 0x44, 0x44, 0x45, 0x45, 0x67, 0x67, 0x67, 0x77, 0x66, 0x66,
//2089
0x44, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x78, 0x76, 0x66,
//2090
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2091
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2092
0x55, 0x44, 0x44, 0x44, 0x45, 0x45, 0x67, 0x67, 0x67, 0x77, 0x66, 0x66,
//2093
0x44, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x77, 0x77, 0x77, 0x66, 0x66,
//2094
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2095
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76,
//2096
0x55, 0x43, 0x44, 0x44, 0x45, 0x45, 0x67, 0x67, 0x67, 0x77, 0x66, 0x66,
//2097
0x44, 0x33, 0x55, 0x44, 0x55, 0x55, 0x67, 0x67, 0x77, 0x77, 0x66, 0x66,
//2098
0x54, 0x33, 0x55, 0x44, 0x55, 0x56, 0x67, 0x77, 0x77, 0x88, 0x77, 0x66,
//2099
0x55, 0x33, 0x55, 0x45, 0x56, 0x56, 0x77, 0x78, 0x78, 0x88, 0x77, 0x76
};
}