Preface: this article seeks the lunar calendar method is different from most Java seeks the lunar calendar method I have seen so far, this article code is translated from C++ code.
Since there is nothing technical to say in this article, let’s put the tool class directly below, and the year range is 1901-2099. If you want to debug by copying the tool class directly into the CV of the engineering tool class, you can call the solarToLunar method to get a HashMap object with all the relevant information.
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;
/** * Solar calendar to lunar calendar tools class **@packageName: cn.ymc.vip.suntimejava.util
* @fileName: CalendarUtil
* @date: 2019/1/4 were *@author: ymc
* @QQ: 745612618 * /
public class CalendarUtil {
private volatile static CalendarUtil instance;
private CalendarUtil(a) {}private static final int MIN_YEAR = 1900;
private static final int MIN_SOLAR_YEAR = 1901;
private static final int MAX_YEAR = 2099;
/** * year trunk branch */
private String[] mYearGanZhi = {"Jia"."YiChou"."BingYin"."Ding Mao"."Wu-cheng"."JiSi"."GengWu"."Now"."RenShen"."J unitary"."JiaQu"."Yi hai"."C"."丁丑"."WuYin"."JiMao"."GengChen"."Xin have"."Horse"."Not" decyl."JiaShen"."YiYou"."C xu-gou"."Ding hai"."E"."Has the ugly".Yin "g"."XinMao"."Nonyl Chen" "."Decyl have"."Sino-japanese"."Not" b."BingShen"."Ding You"."The reform"."F hai"."Boxer"."National"."Nonyl Yin"."Decyl bases"."Let-out".B the third "".Noon "c"."Ding did not"."E" "."F unitary".Xu-gou "g"."Xinhai"."RenZi"."Decyl ugly"."JiaYin"."YiMao"."Chen" c"."Reading the third"."E noon"."Have not"."GengShen"."XinYou"."I xu-gou"."Decyl hai"};
/** * The beginning year of definition, 1804 is the year of Jia Zi and belongs to the genus rat */
private final static int START_YEAR = 1804;
/** * 10 days / 12 days */
private String[] tianGan = new String[]{"甲"."乙"."丙"."Ding"."戊"."己"."庚"."Xin"."壬"."癸"};
private String[] diZhi = new String[]{"Child"."Ugly"."Yin"."Frame"."Chen"."The third"."Noon"."Not"."" "."Unitary"."Xu-gou"."Hai"};
private static String[] shuXiang = {"Rat"."Cow"."Tiger"."Rabbit"."Dragon"."Snake"."Horse"."Sheep"."Monkey"."Chicken"."Dog"."Pig"};
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};
/** * The relationship between the year and month */
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};
/** * Leap year */
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 = {"Sun"."" pulse"."Shut"."Outside the pass"."Lin chi"."Column of"."According to the sea"."According to the sea"."Si 3"};
private int year;
private int month;
private int day;
private int leap;
private int nTem;
private String baGuiStr;
/** * Leap month */
private int leapMonth;
/** * Is leap month */
private boolean isLeap;
/** * century */
private int nCentry;
/** * the last two digits of the year */
private int nLYear;
/** * index subscript */
private int rTn = -1;
private int nTradYesrs;
/** ** ** ** **
private HashMap<String, Object> resMap = new HashMap<>();
/** * is used to represent the lunar year from 1900 to 2099. It contains 24 bits in hexadecimal format, where: * 1. The first four indicate the year leap which month; * 2. 5-17 digits indicate the size month distribution of 13 months in the lunar year, 0 indicates small, 1 indicates large; * 3. The last seven digits indicate the Gregorian calendar date corresponding to the first day of the lunar year. ** 0x955ABF in 2014 is used as an example: * 1001 0101 0101 1010 1011 1111 * The first day of the first month of the lunar calendar corresponds to January 31 of the Gregorian calendar */
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};
/** * Singleton mode **@return CalendarUtil
*/
public static CalendarUtil getInstance(a) {
if (instance == null) {
synchronized (CalendarUtil.class) {
if (instance == null) {
instance = newCalendarUtil(); }}}return instance;
}
/** * Convert a Gregorian calendar date to a lunar date, indicating whether it is a leap month **@returnReturns the lunar date */ corresponding to the Gregorian date
public HashMap<String, Object> solarToLunar(String date, Calendar today) throws ParseException {
@SuppressLint("SimpleDateFormat")
SimpleDateFormat sdf = new SimpleDateFormat(Yyyy year MM Month DD Day HH hour MM minute SS second);
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(date));
int y = cal.get(Calendar.YEAR);
// The month is +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);
// iYear = iYear // iYear = iYear // iYear = iYear
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--;
}
// Lunar year
year = iYear;
leapMonth = leapMonth(iYear);
// Which month is the leap, 1-12
isLeap = false;
// Subtract the days of each month (lunar calendar) from the days offset of the current year to find the day of the month
int iMonth, daysOfMonth = 0;
for (iMonth = 1; iMonth <= 13 && offset > 0; iMonth++) {
daysOfMonth = daysInLunarMonth(iYear, iMonth);
offset -= daysOfMonth;
}
// The current month exceeds the leap month
if(leapMonth ! =0 && iMonth > leapMonth) {
--iMonth;
if (iMonth == leapMonth) {
isLeap = true; }}// If the offset is less than 0, it must be corrected
if (offset < 0) {
offset += daysOfMonth;
--iMonth;
}
month = iMonth;
day = offset + 1;
leap = isLeap ? 1 : 0;
// Obtain the year of heavenly stems and earthly branches
resMap.put("cY", tianGan[getYearTianGanIndex(year)] + diZhi[getYearDiZhiIndex(year)] + "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)] + "Month");
resMap.put("cD", tianGan[getDayGanIndex(y, m, i)] +
diZhi[getDayZhiIndex(y, m, i)] + "Day");
resMap.put("cH", tianGan[getTimeGanIndex(y, m, i, h)] +
diZhi[getTimeZhiIndex(h)] + "When");
// NAT a algorithm to query the required information
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)]);
// The NAT algorithm queries the required information
resMap.put("nazhiCH", diZhi[getTimeZhiIndex(h)]);
return resMap;
}
/** * Get the name of the year */
private int getYearTianGanIndex(int year) {
nTem = year % tianGan.length - 3;
if (nTem <= 0) {
return tianGan.length + nTem - 1;
} else {
return nTem - 1; }}/** * Get the name of the year */
private int getYearDiZhiIndex(int year) {
nTem = year % 12 - 3;
if (nTem <= 0) {
return 12 + nTem - 1;
} else {
return nTem - 1; }}/** * Get the difference between the current year and the start year **/
private int subtractYear(int year) {
int jiaziYear = START_YEAR;
// If the year is less than the start year (START_YEAR = 1804), then the start year is shifted forward
if (year < jiaziYear) {
// A 60-year cycle
jiaziYear = jiaziYear - (60 + 60 * ((jiaziYear - year) / 60));
}
return year - jiaziYear;
}
/** * Get the name of the year **@paramYear the year *@return* /
private String getAnimalYearName(int year) {
return shuXiang[subtractYear(year) % 12] + "Year";
}
/** * Return the total number of days in the lunar year **@paramYear Specifies the year to be calculated *@returnReturns the total number of days in the incoming year */
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;
}
/** * return the number of days in the month of the lunar year, including leap month **@paramYear Specifies the year to be calculated *@paramMonth Specifies the month to be calculated@returnReturn the number of days in the month of the lunar year */
private int daysInLunarMonth(int year, int month) {
return (lunarInfo[year - MIN_YEAR] & (0x100000 >> month)) == 0 ? 29 : 30;
}
/** * return lunar Year year leap month 1-12, no leap back 0 **@paramYear Specifies the year to be calculated *@returnLunar year year leap back which month 1-12, no leap back 0 */
private int leapMonth(int year) {
return ((lunarInfo[year - MIN_YEAR] & 0xF00000)) > >20;
}
/** * Calculate the lunar year by SolarTerm **@param year year
* @param month month
* @param day day
* @returnLunar year */
private int getTraditionYearBySolarTerm(int year, int month, int day) {
// Calculate the beginning of spring for the current year
if (month < 2) {
nTradYesrs = year - 1;
} else if (month > 3) {
nTradYesrs = year;
} else {
// Get the day of the beginning of spring
if (day >= ((solarterms1[(year - MIN_SOLAR_YEAR) * 12 + 1) > >4)) {
nTradYesrs = year;
} else {
nTradYesrs = year - 1; }}return nTradYesrs;
}
/** * Count month by month **@param year year
* @param month month
* @param day day
* @returnSkylight location */
private int getMonthGanIndexBySolarTerm(int year, int month, int day) {
rTn = -1;
int monthGanNTem = 0;
// Get the year's dry
int nTradYesrs = getTraditionYearBySolarTerm(year, month, day);
// The beginning of the current month
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;
}
/** * Calculate the month by SolarTerm **@param year year
* @param month month
* @param day day
* @return* /
private int getMonthZhiIndexBySolarTerm(int year, int month, int day) {
// The beginning of the current month
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;
}
/** * Get the day's heavenly stem@param year year
* @param month month
* @param day day
* @returnThe day's dry index */
private int getDayGanIndex(int year, int month, int day) {
int dayZhiNTem;
// What is the current century
nCentry = year / 100 + 1;
nCentry--;
// Take the last two digits of the year
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;
}
/** * calculate the day's branch index **@param year year
* @param month month
* @param day day
* @returnEarth branch of the day index */
private int getDayZhiIndex(int year, int month, int day) {
int dayZhinTem;
// What is the current century
nCentry = year / 100 + 1;
nCentry--;
// Take the last two digits of the year
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;
}
/** * calculate the hours of day dry index **@param year year
* @param month month
* @param day day
* @returnHour day dry index */
private int getTimeGanIndex(int year, int month, int day, int hour) {
// Find the correspondence
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;
}
/** * Calculate hours of ground branch index **@param hour hour
* @returnHour earth branch 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;
}
/** * Obtain information *@paramDayGanStr air-dried *@paramDayZhiStr day *@paramTimeGanStr Time dry *@paramTimeZhiStr Time support *@returnThe eight ways of the tortoise */
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
};
}
Copy the code