X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/374ca955a76ecab1204ca8bfa63ff9238d998416..a01113dcd0f39d5da295ef82785beff9ed86fe38:/icuSources/i18n/astro.cpp?ds=sidebyside diff --git a/icuSources/i18n/astro.cpp b/icuSources/i18n/astro.cpp index 16fd0f2e..61b1ae91 100644 --- a/icuSources/i18n/astro.cpp +++ b/icuSources/i18n/astro.cpp @@ -1,6 +1,8 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************ - * Copyright (C) 1996-2004, International Business Machines Corporation * - * and others. All Rights Reserved. * + * Copyright (C) 1996-2014, International Business Machines Corporation + * and others. All Rights Reserved. ************************************************************************ * 2003-nov-07 srl Port from Java */ @@ -10,7 +12,7 @@ #if !UCONFIG_NO_FORMATTING #include "unicode/calendar.h" -#include "math.h" +#include #include #include "unicode/putil.h" #include "uhash.h" @@ -19,6 +21,10 @@ #include "putilimp.h" #include // for toString() +#if defined (PI) +#undef PI +#endif + #ifdef U_DEBUG_ASTRO # include "uresimp.h" // for debugging @@ -59,11 +65,13 @@ static inline UBool isINVALID(double d) { return(uprv_isNaN(d)); } -static UMTX ccLock = NULL; +static icu::UMutex *ccLock() { + static icu::UMutex *m = STATIC_NEW(icu::UMutex); + return m; +} U_CDECL_BEGIN static UBool calendar_astro_cleanup(void) { - umtx_destroy(&ccLock); return TRUE; } U_CDECL_END @@ -202,6 +210,30 @@ const double CalendarAstronomer::PI = 3.14159265358979323846; #define DEG_RAD ( CalendarAstronomer::PI / 180 ) // degrees -> radians #define RAD_DEG ( 180 / CalendarAstronomer::PI ) // radians -> degrees +/*** + * Given 'value', add or subtract 'range' until 0 <= 'value' < range. + * The modulus operator. + */ +inline static double normalize(double value, double range) { + return value - range * ClockMath::floorDivide(value, range); +} + +/** + * Normalize an angle so that it's in the range 0 - 2pi. + * For positive angles this is just (angle % 2pi), but the Java + * mod operator doesn't work that way for negative numbers.... + */ +inline static double norm2PI(double angle) { + return normalize(angle, CalendarAstronomer::PI * 2.0); +} + +/** + * Normalize an angle into the range -PI - PI + */ +inline static double normPI(double angle) { + return normalize(angle + CalendarAstronomer::PI, CalendarAstronomer::PI * 2.0) - CalendarAstronomer::PI; +} + //------------------------------------------------------------------------- // Constructors //------------------------------------------------------------------------- @@ -271,9 +303,9 @@ CalendarAstronomer::~CalendarAstronomer() * @deprecated ICU 2.4. This class may be removed or modified. */ void CalendarAstronomer::setTime(UDate aTime) { - fTime = aTime; - U_DEBUG_ASTRO_MSG(("setTime(%.1lf, %sL)\n", aTime, debug_astro_date(aTime+fGmtOffset))); - clearCache(); + fTime = aTime; + U_DEBUG_ASTRO_MSG(("setTime(%.1lf, %sL)\n", aTime, debug_astro_date(aTime+fGmtOffset))); + clearCache(); } /** @@ -292,9 +324,9 @@ void CalendarAstronomer::setTime(UDate aTime) { * @deprecated ICU 2.4. This class may be removed or modified. */ void CalendarAstronomer::setJulianDay(double jdn) { - fTime = (double)(jdn * DAY_MS) + JULIAN_EPOCH_MS; - clearCache(); - julianDay = jdn; + fTime = (double)(jdn * DAY_MS) + JULIAN_EPOCH_MS; + clearCache(); + julianDay = jdn; } /** @@ -308,7 +340,7 @@ void CalendarAstronomer::setJulianDay(double jdn) { * @deprecated ICU 2.4. This class may be removed or modified. */ UDate CalendarAstronomer::getTime() { - return fTime; + return fTime; } /** @@ -322,10 +354,10 @@ UDate CalendarAstronomer::getTime() { * @deprecated ICU 2.4. This class may be removed or modified. */ double CalendarAstronomer::getJulianDay() { - if (isINVALID(julianDay)) { - julianDay = (fTime - (double)JULIAN_EPOCH_MS) / (double)DAY_MS; - } - return julianDay; + if (isINVALID(julianDay)) { + julianDay = (fTime - (double)JULIAN_EPOCH_MS) / (double)DAY_MS; + } + return julianDay; } /** @@ -337,10 +369,10 @@ double CalendarAstronomer::getJulianDay() { * @deprecated ICU 2.4. This class may be removed or modified. */ double CalendarAstronomer::getJulianCentury() { - if (isINVALID(julianCentury)) { - julianCentury = (getJulianDay() - 2415020.0) / 36525.0; - } - return julianCentury; + if (isINVALID(julianCentury)) { + julianCentury = (getJulianDay() - 2415020.0) / 36525.0; + } + return julianCentury; } /** @@ -349,25 +381,25 @@ double CalendarAstronomer::getJulianCentury() { * @deprecated ICU 2.4. This class may be removed or modified. */ double CalendarAstronomer::getGreenwichSidereal() { - if (isINVALID(siderealTime)) { - // See page 86 of "Practial Astronomy with your Calculator", - // by Peter Duffet-Smith, for details on the algorithm. + if (isINVALID(siderealTime)) { + // See page 86 of "Practical Astronomy with your Calculator", + // by Peter Duffet-Smith, for details on the algorithm. - double UT = normalize(fTime/(double)HOUR_MS, 24.); + double UT = normalize(fTime/(double)HOUR_MS, 24.); - siderealTime = normalize(getSiderealOffset() + UT*1.002737909, 24.); - } - return siderealTime; + siderealTime = normalize(getSiderealOffset() + UT*1.002737909, 24.); + } + return siderealTime; } double CalendarAstronomer::getSiderealOffset() { - if (isINVALID(siderealT0)) { - double JD = uprv_floor(getJulianDay() - 0.5) + 0.5; - double S = JD - 2451545.0; - double T = S / 36525.0; - siderealT0 = normalize(6.697374558 + 2400.051336*T + 0.000025862*T*T, 24); - } - return siderealT0; + if (isINVALID(siderealT0)) { + double JD = uprv_floor(getJulianDay() - 0.5) + 0.5; + double S = JD - 2451545.0; + double T = S / 36525.0; + siderealT0 = normalize(6.697374558 + 2400.051336*T + 0.000025862*T*T, 24); + } + return siderealT0; } /** @@ -376,7 +408,7 @@ double CalendarAstronomer::getSiderealOffset() { * @deprecated ICU 2.4. This class may be removed or modified. */ double CalendarAstronomer::getLocalSidereal() { - return normalize(getGreenwichSidereal() + (fGmtOffset/(double)HOUR_MS), 24.); + return normalize(getGreenwichSidereal() + (fGmtOffset/(double)HOUR_MS), 24.); } /** @@ -389,16 +421,16 @@ double CalendarAstronomer::getLocalSidereal() { * 1 Jan 1970, GMT. */ double CalendarAstronomer::lstToUT(double lst) { - // Convert to local mean time - double lt = normalize((lst - getSiderealOffset()) * 0.9972695663, 24); + // Convert to local mean time + double lt = normalize((lst - getSiderealOffset()) * 0.9972695663, 24); - // Then find local midnight on this day - double base = (DAY_MS * Math::floorDivide(fTime + fGmtOffset,(double)DAY_MS)) - fGmtOffset; + // Then find local midnight on this day + double base = (DAY_MS * ClockMath::floorDivide(fTime + fGmtOffset,(double)DAY_MS)) - fGmtOffset; - //out(" lt =" + lt + " hours"); - //out(" base=" + new Date(base)); + //out(" lt =" + lt + " hours"); + //out(" base=" + new Date(base)); - return base + (long)(lt * HOUR_MS); + return base + (long)(lt * HOUR_MS); } @@ -416,7 +448,7 @@ double CalendarAstronomer::lstToUT(double lst) { */ CalendarAstronomer::Equatorial& CalendarAstronomer::eclipticToEquatorial(CalendarAstronomer::Equatorial& result, const CalendarAstronomer::Ecliptic& ecliptic) { - return eclipticToEquatorial(result, ecliptic.longitude, ecliptic.latitude); + return eclipticToEquatorial(result, ecliptic.longitude, ecliptic.latitude); } /** @@ -431,23 +463,23 @@ CalendarAstronomer::Equatorial& CalendarAstronomer::eclipticToEquatorial(Calenda */ CalendarAstronomer::Equatorial& CalendarAstronomer::eclipticToEquatorial(CalendarAstronomer::Equatorial& result, double eclipLong, double eclipLat) { - // See page 42 of "Practial Astronomy with your Calculator", - // by Peter Duffet-Smith, for details on the algorithm. + // See page 42 of "Practical Astronomy with your Calculator", + // by Peter Duffet-Smith, for details on the algorithm. - double obliq = eclipticObliquity(); - double sinE = ::sin(obliq); - double cosE = cos(obliq); + double obliq = eclipticObliquity(); + double sinE = ::sin(obliq); + double cosE = cos(obliq); - double sinL = ::sin(eclipLong); - double cosL = cos(eclipLong); + double sinL = ::sin(eclipLong); + double cosL = cos(eclipLong); - double sinB = ::sin(eclipLat); - double cosB = cos(eclipLat); - double tanB = tan(eclipLat); + double sinB = ::sin(eclipLat); + double cosB = cos(eclipLat); + double tanB = tan(eclipLat); - result.set(atan2(sinL*cosE - tanB*sinE, cosL), - asin(sinB*cosE + cosB*sinE*sinL) ); - return result; + result.set(atan2(sinL*cosE - tanB*sinE, cosL), + asin(sinB*cosE + cosB*sinE*sinL) ); + return result; } /** @@ -461,7 +493,7 @@ CalendarAstronomer::Equatorial& CalendarAstronomer::eclipticToEquatorial(Calenda */ CalendarAstronomer::Equatorial& CalendarAstronomer::eclipticToEquatorial(CalendarAstronomer::Equatorial& result, double eclipLong) { - return eclipticToEquatorial(result, eclipLong, 0); // TODO: optimize + return eclipticToEquatorial(result, eclipLong, 0); // TODO: optimize } /** @@ -470,23 +502,23 @@ CalendarAstronomer::Equatorial& CalendarAstronomer::eclipticToEquatorial(Calenda */ CalendarAstronomer::Horizon& CalendarAstronomer::eclipticToHorizon(CalendarAstronomer::Horizon& result, double eclipLong) { - Equatorial equatorial; - eclipticToEquatorial(equatorial, eclipLong); + Equatorial equatorial; + eclipticToEquatorial(equatorial, eclipLong); - double H = getLocalSidereal()*CalendarAstronomer::PI/12 - equatorial.ascension; // Hour-angle + double H = getLocalSidereal()*CalendarAstronomer::PI/12 - equatorial.ascension; // Hour-angle - double sinH = ::sin(H); - double cosH = cos(H); - double sinD = ::sin(equatorial.declination); - double cosD = cos(equatorial.declination); - double sinL = ::sin(fLatitude); - double cosL = cos(fLatitude); + double sinH = ::sin(H); + double cosH = cos(H); + double sinD = ::sin(equatorial.declination); + double cosD = cos(equatorial.declination); + double sinL = ::sin(fLatitude); + double cosL = cos(fLatitude); - double altitude = asin(sinD*sinL + cosD*cosL*cosH); - double azimuth = atan2(-cosD*cosL*sinH, sinD - sinL * ::sin(altitude)); + double altitude = asin(sinD*sinL + cosD*cosL*cosH); + double azimuth = atan2(-cosD*cosL*sinH, sinD - sinL * ::sin(altitude)); - result.set(azimuth, altitude); - return result; + result.set(azimuth, altitude); + return result; } @@ -506,6 +538,448 @@ CalendarAstronomer::Horizon& CalendarAstronomer::eclipticToHorizon(CalendarAstro //double sunR0 1.495585e8 // Semi-major axis in KM //double sunTheta0 (0.533128 * CalendarAstronomer::PI/180) // Angular diameter at R0 +// winter solstice moon date/times 1900-2100 (in UTC) +// These are in UDate/10000.0 (i.e. in units of 10 seconds) to fit into 32 bits. +// sources from e.g. +// http://www.timeanddate.com/calendar/seasons.html?year=1900&n=0 +// http://astropixels.com/ephemeris/soleq2001.html +// These 2 tables are just 808 bytes each but but greatly improve both the +// accuracy (and speed for one) of the relevant methods for the relevant time range. +// For getSunTime: +// before fix, errors of up to +73 / -101 min or more; after, errors always less than 1 min. +// about 17 times faster with the fix. +// For getSunLongitude: +// before fix, only accurate to about 0.07 degree; this was enough so Chinese calendar +// calculations were off by a month in some cases. +// after fix, about 100 times more accurate. +// speed is about the same. +static const int32_t winterSolsticeDates[] = { +// millis/10K date + -220984944, // 1899 Dec 22, 00:56 + -217829274, // 1900 Dec 22, 06:41 + -214673538, // 1901 Dec 22, 12:37 + -211517790, // 1902 Dec 22, 18:35 + -208362120, // 1903 Dec 23, 00:20 + -205206396, // 1904 Dec 22, 06:14 + -202050696, // 1905 Dec 22, 12:04 + -198895002, // 1906 Dec 22, 17:53 + -195739254, // 1907 Dec 22, 23:51 + -192583602, // 1908 Dec 22, 05:33 + -189427920, // 1909 Dec 22, 11:20 + -186272208, // 1910 Dec 22, 17:12 + -183116562, // 1911 Dec 22, 22:53 + -179960850, // 1912 Dec 22, 04:45 + -176805150, // 1913 Dec 22, 10:35 + -173649468, // 1914 Dec 22, 16:22 + -170493744, // 1915 Dec 22, 22:16 + -167338086, // 1916 Dec 22, 03:59 + -164182404, // 1917 Dec 22, 09:46 + -161026674, // 1918 Dec 22, 15:41 + -157870998, // 1919 Dec 22, 21:27 + -154715298, // 1920 Dec 22, 03:17 + -151559592, // 1921 Dec 22, 09:08 + -148403898, // 1922 Dec 22, 14:57 + -145248162, // 1923 Dec 22, 20:53 + -142092450, // 1924 Dec 22, 02:45 + -138936738, // 1925 Dec 22, 08:37 + -135781002, // 1926 Dec 22, 14:33 + -132625332, // 1927 Dec 22, 20:18 + -129469656, // 1928 Dec 22, 02:04 + -126313962, // 1929 Dec 22, 07:53 + -123158286, // 1930 Dec 22, 13:39 + -120002586, // 1931 Dec 22, 19:29 + -116846916, // 1932 Dec 22, 01:14 + -113691252, // 1933 Dec 22, 06:58 + -110535546, // 1934 Dec 22, 12:49 + -107379858, // 1935 Dec 22, 18:37 + -104224158, // 1936 Dec 22, 00:27 + -101068428, // 1937 Dec 22, 06:22 + -97912722, // 1938 Dec 22, 12:13 + -94757004, // 1939 Dec 22, 18:06 + -91601310, // 1940 Dec 21, 23:55 + -88445616, // 1941 Dec 22, 05:44 + -85289886, // 1942 Dec 22, 11:39 + -82134186, // 1943 Dec 22, 17:29 + -78978510, // 1944 Dec 21, 23:15 + -75822822, // 1945 Dec 22, 05:03 + -72667122, // 1946 Dec 22, 10:53 + -69511422, // 1947 Dec 22, 16:43 + -66355722, // 1948 Dec 21, 22:33 + -63200022, // 1949 Dec 22, 04:23 + -60044322, // 1950 Dec 22, 10:13 + -56888640, // 1951 Dec 22, 16:00 + -53732982, // 1952 Dec 21, 21:43 + -50577294, // 1953 Dec 22, 03:31 + -47421576, // 1954 Dec 22, 09:24 + -44265894, // 1955 Dec 22, 15:11 + -41110200, // 1956 Dec 21, 21:00 + -37954506, // 1957 Dec 22, 02:49 + -34798800, // 1958 Dec 22, 08:40 + -31643076, // 1959 Dec 22, 14:34 + -28487364, // 1960 Dec 21, 20:26 + -25331646, // 1961 Dec 22, 02:19 + -22175910, // 1962 Dec 22, 08:15 + -19020228, // 1963 Dec 22, 14:02 + -15864546, // 1964 Dec 21, 19:49 + -12708840, // 1965 Dec 22, 01:40 + -9553152, // 1966 Dec 22, 07:28 + -6397464, // 1967 Dec 22, 13:16 + -3241800, // 1968 Dec 21, 19:00 + -86136, // 1969 Dec 22, 00:44 + 3069576, // 1970 Dec 22, 06:36 + 6225264, // 1971 Dec 22, 12:24 + 9380958, // 1972 Dec 21, 18:13 + 12536688, // 1973 Dec 22, 00:08 + 15692376, // 1974 Dec 22, 05:56 + 18848070, // 1975 Dec 22, 11:45 + 22003770, // 1976 Dec 21, 17:35 + 25159458, // 1977 Dec 21, 23:23 + 28315206, // 1978 Dec 22, 05:21 + 31470900, // 1979 Dec 22, 11:10 + 34626576, // 1980 Dec 21, 16:56 + 37782306, // 1981 Dec 21, 22:51 + 40937988, // 1982 Dec 22, 04:38 + 44093700, // 1983 Dec 22, 10:30 + 47249418, // 1984 Dec 21, 16:23 + 50405088, // 1985 Dec 21, 22:08 + 53560812, // 1986 Dec 22, 04:02 + 56716476, // 1987 Dec 22, 09:46 + 59872128, // 1988 Dec 21, 15:28 + 63027852, // 1989 Dec 21, 21:22 + 66183522, // 1990 Dec 22, 03:07 + 69339198, // 1991 Dec 22, 08:53 + 72494898, // 1992 Dec 21, 14:43 + 75650556, // 1993 Dec 21, 20:26 + 78806298, // 1994 Dec 22, 02:23 + 81962022, // 1995 Dec 22, 08:17 + 85117716, // 1996 Dec 21, 14:06 + 88273482, // 1997 Dec 21, 20:07 + 91429176, // 1998 Dec 22, 01:56 + 94584864, // 1999 Dec 22, 07:44 + 97740588, // 2000 Dec 21, 13:38 + 100896246, // 2001 Dec 21, 19:21 + 104051964, // 2002 Dec 22, 01:14 + 107207664, // 2003 Dec 22, 07:04 + 110363292, // 2004 Dec 21, 12:42 + 113519010, // 2005 Dec 21, 18:35 + 116674692, // 2006 Dec 22, 00:22 + 119830362, // 2007 Dec 22, 06:07 + 122986104, // 2008 Dec 21, 12:04 + 126141762, // 2009 Dec 21, 17:47 + 129297468, // 2010 Dec 21, 23:38 + 132453180, // 2011 Dec 22, 05:30 + 135608832, // 2012 Dec 21, 11:12 + 138764586, // 2013 Dec 21, 17:11 + 141920298, // 2014 Dec 21, 23:03 + 145075968, // 2015 Dec 22, 04:48 + 148231704, // 2016 Dec 21, 10:44 + 151387368, // 2017 Dec 21, 16:28 + 154543092, // 2018 Dec 21, 22:22 + 157698834, // 2019 Dec 22, 04:19 + 160854492, // 2020 Dec 21, 10:02 + 164010234, // 2021 Dec 21, 15:59 + 167165928, // 2022 Dec 21, 21:48 + 170321562, // 2023 Dec 22, 03:27 + 173477280, // 2024 Dec 21, 09:20 + 176632938, // 2025 Dec 21, 15:03 + 179788620, // 2026 Dec 21, 20:50 + 182944332, // 2027 Dec 22, 02:42 + 186099960, // 2028 Dec 21, 08:20 + 189255684, // 2029 Dec 21, 14:14 + 192411414, // 2030 Dec 21, 20:09 + 195567090, // 2031 Dec 22, 01:55 + 198722856, // 2032 Dec 21, 07:56 + 201878550, // 2033 Dec 21, 13:45 + 205034244, // 2034 Dec 21, 19:34 + 208189986, // 2035 Dec 22, 01:31 + 211345638, // 2036 Dec 21, 07:13 + 214501362, // 2037 Dec 21, 13:07 + 217657092, // 2038 Dec 21, 19:02 + 220812720, // 2039 Dec 22, 00:40 + 223968438, // 2040 Dec 21, 06:33 + 227124108, // 2041 Dec 21, 12:18 + 230279784, // 2042 Dec 21, 18:04 + 233435526, // 2043 Dec 22, 00:01 + 236591184, // 2044 Dec 21, 05:44 + 239746890, // 2045 Dec 21, 11:35 + 242902608, // 2046 Dec 21, 17:28 + 246058242, // 2047 Dec 21, 23:07 + 249213972, // 2048 Dec 21, 05:02 + 252369672, // 2049 Dec 21, 10:52 + 255525348, // 2050 Dec 21, 16:38 + 258681078, // 2051 Dec 21, 22:33 + 261836742, // 2052 Dec 21, 04:17 + 264992454, // 2053 Dec 21, 10:09 + 268148214, // 2054 Dec 21, 16:09 + 271303890, // 2055 Dec 21, 21:55 + 274459626, // 2056 Dec 21, 03:51 + 277615332, // 2057 Dec 21, 09:42 + 280770990, // 2058 Dec 21, 15:25 + 283926708, // 2059 Dec 21, 21:18 + 287082366, // 2060 Dec 21, 03:01 + 290238048, // 2061 Dec 21, 08:48 + 293393772, // 2062 Dec 21, 14:42 + 296549406, // 2063 Dec 21, 20:21 + 299705088, // 2064 Dec 21, 02:08 + 302860800, // 2065 Dec 21, 08:00 + 306016470, // 2066 Dec 21, 13:45 + 309172218, // 2067 Dec 21, 19:43 + 312327912, // 2068 Dec 21, 01:32 + 315483612, // 2069 Dec 21, 07:22 + 318639354, // 2070 Dec 21, 13:19 + 321795018, // 2071 Dec 21, 19:03 + 324950736, // 2072 Dec 21, 00:56 + 328106460, // 2073 Dec 21, 06:50 + 331262130, // 2074 Dec 21, 12:35 + 334417842, // 2075 Dec 21, 18:27 + 337573518, // 2076 Dec 21, 00:13 + 340729200, // 2077 Dec 21, 06:00 + 343884942, // 2078 Dec 21, 11:57 + 347040624, // 2079 Dec 21, 17:44 + 350196312, // 2080 Dec 20, 23:32 + 353352012, // 2081 Dec 21, 05:22 + 356507664, // 2082 Dec 21, 11:04 + 359663358, // 2083 Dec 21, 16:53 + 362819046, // 2084 Dec 20, 22:41 + 365974728, // 2085 Dec 21, 04:28 + 369130452, // 2086 Dec 21, 10:22 + 372286128, // 2087 Dec 21, 16:08 + 375441816, // 2088 Dec 20, 21:56 + 378597552, // 2089 Dec 21, 03:52 + 381753258, // 2090 Dec 21, 09:43 + 384908988, // 2091 Dec 21, 15:38 + 388064706, // 2092 Dec 20, 21:31 + 391220400, // 2093 Dec 21, 03:20 + 394376118, // 2094 Dec 21, 09:13 + 397531800, // 2095 Dec 21, 15:00 + 400687476, // 2096 Dec 20, 20:46 + 403843176, // 2097 Dec 21, 02:36 + 406998840, // 2098 Dec 21, 08:20 + 410154504, // 2099 Dec 21, 14:04 + 413310186, // 2100 Dec 21, 19:51 +}; +enum { kWinterSolsticeDatesCount = sizeof(winterSolsticeDates)/sizeof(winterSolsticeDates[0]) }; + +static const UDate winterSolsticeDatesFirst = 10000.0 * -220984944; // winterSolsticeDates[0]; +static const UDate winterSolsticeDatesLast = 10000.0 * 413310186; // winterSolsticeDates[kWinterSolsticeDatesCount-1]; +static const UDate winterSolsticeDatesRange = 10000.0 * (413310186 + 220984944); // winterSolsticeDatesLast - winterSolsticeDatesFirst; + +static const int8_t sunLongitudeAdjustmts[][4] = { +// adjustments x 100000 for +// computed solar longitudes +// (in radians) at times +// corresponding to actual +// longitudes (degrees) of +// 270 0 90 180 for 12 months from +// --- --- --- --- ------------------ + { 85, 25, -89, -32 }, // 1899 Dec 22, 00:56 + { 90, 30, -88, -33 }, // 1900 Dec 22, 06:41 + { 81, 26, -86, -29 }, // 1901 Dec 22, 12:37 + { 69, 14, -87, -30 }, // 1902 Dec 22, 18:35 + { 74, 21, -84, -38 }, // 1903 Dec 23, 00:20 + { 68, 7, -98, -40 }, // 1904 Dec 22, 06:14 + { 66, 0, -100, -35 }, // 1905 Dec 22, 12:04 + { 66, 10, -91, -41 }, // 1906 Dec 22, 17:53 + { 54, 3, -100, -42 }, // 1907 Dec 22, 23:51 + { 63, 7, -97, -40 }, // 1908 Dec 22, 05:33 + { 65, 6, -90, -36 }, // 1909 Dec 22, 11:20 + { 61, 3, -88, -33 }, // 1910 Dec 22, 17:12 + { 70, 20, -79, -36 }, // 1911 Dec 22, 22:53 + { 66, 19, -84, -31 }, // 1912 Dec 22, 04:45 + { 65, 14, -80, -22 }, // 1913 Dec 22, 10:35 + { 67, 25, -64, -24 }, // 1914 Dec 22, 16:22 + { 61, 16, -71, -26 }, // 1915 Dec 22, 22:16 + { 68, 14, -72, -22 }, // 1916 Dec 22, 03:59 + { 70, 15, -68, -19 }, // 1917 Dec 22, 09:46 + { 62, 9, -74, -20 }, // 1918 Dec 22, 15:41 + { 66, 20, -71, -24 }, // 1919 Dec 22, 21:27 + { 64, 16, -80, -28 }, // 1920 Dec 22, 03:17 + { 61, 6, -82, -29 }, // 1921 Dec 22, 09:08 + { 61, 15, -67, -34 }, // 1922 Dec 22, 14:57 + { 52, 12, -76, -43 }, // 1923 Dec 22, 20:53 + { 48, 8, -78, -37 }, // 1924 Dec 22, 02:45 + { 44, 8, -68, -32 }, // 1925 Dec 22, 08:37 + { 35, -2, -72, -33 }, // 1926 Dec 22, 14:33 + { 40, 2, -67, -32 }, // 1927 Dec 22, 20:18 + { 43, 0, -74, -30 }, // 1928 Dec 22, 02:04 + { 43, -6, -78, -24 }, // 1929 Dec 22, 07:53 + { 46, 7, -62, -22 }, // 1930 Dec 22, 13:39 + { 45, 8, -69, -27 }, // 1931 Dec 22, 19:29 + { 49, 7, -69, -23 }, // 1932 Dec 22, 01:14 + { 55, 13, -54, -17 }, // 1933 Dec 22, 06:58 + { 52, 10, -56, -22 }, // 1934 Dec 22, 12:49 + { 53, 22, -49, -21 }, // 1935 Dec 22, 18:37 + { 52, 23, -52, -19 }, // 1936 Dec 22, 00:27 + { 44, 12, -54, -17 }, // 1937 Dec 22, 06:22 + { 41, 16, -40, -18 }, // 1938 Dec 22, 12:13 + { 36, 8, -49, -26 }, // 1939 Dec 22, 18:06 + { 36, 0, -59, -25 }, // 1940 Dec 21, 23:55 + { 35, -2, -52, -20 }, // 1941 Dec 22, 05:44 + { 28, -7, -60, -26 }, // 1942 Dec 22, 11:39 + { 26, -2, -62, -27 }, // 1943 Dec 22, 17:29 + { 30, -2, -63, -28 }, // 1944 Dec 21, 23:15 + { 31, -11, -68, -30 }, // 1945 Dec 22, 05:03 + { 29, -1, -51, -29 }, // 1946 Dec 22, 10:53 + { 27, 4, -55, -34 }, // 1947 Dec 22, 16:43 + { 26, 1, -59, -29 }, // 1948 Dec 21, 22:33 + { 24, 3, -40, -16 }, // 1949 Dec 22, 04:23 + { 23, 1, -41, -21 }, // 1950 Dec 22, 10:13 + { 25, 3, -40, -19 }, // 1951 Dec 22, 16:00 + { 32, 4, -38, -11 }, // 1952 Dec 21, 21:43 + { 33, 0, -44, -12 }, // 1953 Dec 22, 03:31 + { 28, 8, -31, -8 }, // 1954 Dec 22, 09:24 + { 30, 11, -35, -14 }, // 1955 Dec 22, 15:11 + { 30, 4, -45, -17 }, // 1956 Dec 21, 21:00 + { 29, 4, -30, -10 }, // 1957 Dec 22, 02:49 + { 27, 2, -35, -22 }, // 1958 Dec 22, 08:40 + { 20, 3, -39, -25 }, // 1959 Dec 22, 14:34 + { 16, 3, -38, -18 }, // 1960 Dec 21, 20:26 + { 11, -6, -44, -24 }, // 1961 Dec 22, 02:19 + { 2, -9, -34, -23 }, // 1962 Dec 22, 08:15 + { 4, -10, -39, -28 }, // 1963 Dec 22, 14:02 + { 6, -18, -50, -29 }, // 1964 Dec 21, 19:49 + { 4, -16, -37, -15 }, // 1965 Dec 22, 01:40 + { 4, -11, -38, -22 }, // 1966 Dec 22, 07:28 + { 5, -7, -40, -21 }, // 1967 Dec 22, 13:16 + { 11, -4, -32, -12 }, // 1968 Dec 21, 19:00 + { 17, -3, -31, -16 }, // 1969 Dec 22, 00:44 + { 13, 5, -16, -13 }, // 1970 Dec 22, 06:36 + { 14, 11, -14, -12 }, // 1971 Dec 22, 12:24 + { 14, 9, -21, -11 }, // 1972 Dec 21, 18:13 + { 6, 2, -7, 1 }, // 1973 Dec 22, 00:08 + { 7, 0, -7, -7 }, // 1974 Dec 22, 05:56 + { 7, -3, -18, -12 }, // 1975 Dec 22, 11:45 + { 5, -8, -19, -2 }, // 1976 Dec 21, 17:35 + { 6, -11, -28, -12 }, // 1977 Dec 21, 23:23 + { -4, -11, -24, -14 }, // 1978 Dec 22, 05:21 + { -5, -10, -27, -18 }, // 1979 Dec 22, 11:10 + { -1, -15, -38, -27 }, // 1980 Dec 21, 16:56 + { -9, -19, -25, -18 }, // 1981 Dec 21, 22:51 + { -7, -14, -21, -26 }, // 1982 Dec 22, 04:38 + { -11, -9, -27, -29 }, // 1983 Dec 22, 10:30 + { -16, -11, -19, -12 }, // 1984 Dec 21, 16:23 + { -11, -11, -16, -16 }, // 1985 Dec 21, 22:08 + { -18, -11, -7, -12 }, // 1986 Dec 22, 04:02 + { -12, -9, -3, -7 }, // 1987 Dec 22, 09:46 + { -4, -9, -12, -10 }, // 1988 Dec 21, 15:28 + { -10, -12, -2, 6 }, // 1989 Dec 21, 21:22 + { -6, -5, 0, 1 }, // 1990 Dec 22, 03:07 + { -2, -2, -6, -6 }, // 1991 Dec 22, 08:53 + { -4, -7, -3, 5 }, // 1992 Dec 21, 14:43 + { 2, -5, -2, -4 }, // 1993 Dec 21, 20:26 + { -7, -3, 0, -10 }, // 1994 Dec 22, 02:23 + { -13, -2, 0, -8 }, // 1995 Dec 22, 08:17 + { -13, -6, -9, -17 }, // 1996 Dec 21, 14:06 + { -29, -18, -2, -9 }, // 1997 Dec 21, 20:07 + { -29, -22, 0, -14 }, // 1998 Dec 22, 01:56 + { -28, -22, -11, -23 }, // 1999 Dec 22, 07:44 + { -34, -31, -12, -9 }, // 2000 Dec 21, 13:38 + { -27, -26, -10, -11 }, // 2001 Dec 21, 19:21 + { -33, -21, -7, -15 }, // 2002 Dec 22, 01:14 + { -34, -20, -4, -8 }, // 2003 Dec 22, 07:04 + { -21, -15, -4, -13 }, // 2004 Dec 21, 12:42 + { -26, -19, 5, -4 }, // 2005 Dec 21, 18:35 + { -24, -11, 15, -2 }, // 2006 Dec 22, 00:22 + { -19, -2, 10, -7 }, // 2007 Dec 22, 06:07 + { -29, -10, 12, 9 }, // 2008 Dec 21, 12:04 + { -22, -10, 19, 7 }, // 2009 Dec 21, 17:47 + { -25, -10, 21, 0 }, // 2010 Dec 21, 23:38 + { -29, -15, 17, 4 }, // 2011 Dec 22, 05:30 + { -21, -14, 9, -2 }, // 2012 Dec 21, 11:12 + { -33, -22, 11, 1 }, // 2013 Dec 21, 17:11 + { -37, -21, 13, 0 }, // 2014 Dec 21, 23:03 + { -33, -16, 5, -15 }, // 2015 Dec 22, 04:48 + { -42, -29, 3, -6 }, // 2016 Dec 21, 10:44 + { -36, -25, 10, -10 }, // 2017 Dec 21, 16:28 + { -42, -18, 12, -18 }, // 2018 Dec 21, 22:22 + { -53, -22, 12, -9 }, // 2019 Dec 22, 04:19 + { -45, -20, 11, -10 }, // 2020 Dec 21, 10:02 + { -56, -29, 19, -4 }, // 2021 Dec 21, 15:59 + { -56, -31, 26, 0 }, // 2022 Dec 21, 21:48 + { -44, -23, 20, -7 }, // 2023 Dec 22, 03:27 + { -49, -31, 17, 8 }, // 2024 Dec 21, 09:20 + { -42, -25, 24, 12 }, // 2025 Dec 21, 15:03 + { -40, -15, 27, 3 }, // 2026 Dec 21, 20:50 + { -44, -19, 24, 9 }, // 2027 Dec 22, 02:42 + { -31, -13, 28, 4 }, // 2028 Dec 21, 08:20 + { -37, -15, 34, 4 }, // 2029 Dec 21, 14:14 + { -45, -16, 37, 5 }, // 2030 Dec 21, 20:09 + { -41, -6, 34, -3 }, // 2031 Dec 22, 01:55 + { -56, -21, 30, 5 }, // 2032 Dec 21, 07:56 + { -57, -27, 37, 7 }, // 2033 Dec 21, 13:45 + { -57, -24, 36, -5 }, // 2034 Dec 21, 19:34 + { -67, -37, 24, -1 }, // 2035 Dec 22, 01:31 + { -59, -36, 23, -1 }, // 2036 Dec 21, 07:13 + { -65, -37, 25, -1 }, // 2037 Dec 21, 13:07 + { -73, -41, 26, 0 }, // 2038 Dec 21, 19:02 + { -60, -29, 26, -8 }, // 2039 Dec 22, 00:40 + { -65, -37, 24, 0 }, // 2040 Dec 21, 06:33 + { -60, -35, 34, 5 }, // 2041 Dec 21, 12:18 + { -57, -17, 42, -1 }, // 2042 Dec 21, 18:04 + { -67, -22, 37, 6 }, // 2043 Dec 22, 00:01 + { -60, -20, 45, 10 }, // 2044 Dec 21, 05:44 + { -63, -23, 53, 10 }, // 2045 Dec 21, 11:35 + { -68, -29, 54, 13 }, // 2046 Dec 21, 17:28 + { -56, -20, 51, 9 }, // 2047 Dec 21, 23:07 + { -64, -27, 46, 17 }, // 2048 Dec 21, 05:02 + { -65, -30, 49, 20 }, // 2049 Dec 21, 10:52 + { -62, -19, 54, 8 }, // 2050 Dec 21, 16:38 + { -70, -29, 43, 9 }, // 2051 Dec 21, 22:33 + { -64, -31, 44, 6 }, // 2052 Dec 21, 04:17 + { -68, -30, 51, 1 }, // 2053 Dec 21, 10:09 + { -82, -36, 47, 0 }, // 2054 Dec 21, 16:09 + { -78, -28, 47, -1 }, // 2055 Dec 21, 21:55 + { -87, -39, 44, 4 }, // 2056 Dec 21, 03:51 + { -90, -48, 48, 9 }, // 2057 Dec 21, 09:42 + { -83, -37, 56, 1 }, // 2058 Dec 21, 15:25 + { -88, -44, 44, 6 }, // 2059 Dec 21, 21:18 + { -81, -41, 46, 12 }, // 2060 Dec 21, 03:01 + { -79, -33, 58, 12 }, // 2061 Dec 21, 08:48 + { -85, -37, 55, 13 }, // 2062 Dec 21, 14:42 + { -73, -26, 62, 14 }, // 2063 Dec 21, 20:21 + { -71, -27, 64, 17 }, // 2064 Dec 21, 02:08 + { -75, -30, 69, 22 }, // 2065 Dec 21, 08:00 + { -70, -13, 80, 18 }, // 2066 Dec 21, 13:45 + { -82, -21, 70, 19 }, // 2067 Dec 21, 19:43 + { -82, -28, 71, 24 }, // 2068 Dec 21, 01:32 + { -84, -30, 80, 19 }, // 2069 Dec 21, 07:22 + { -94, -43, 69, 13 }, // 2070 Dec 21, 13:19 + { -88, -40, 63, 12 }, // 2071 Dec 21, 19:03 + { -93, -45, 58, 14 }, // 2072 Dec 21, 00:56 + { -100, -53, 55, 15 }, // 2073 Dec 21, 06:50 + { -95, -40, 63, 7 }, // 2074 Dec 21, 12:35 + { -99, -43, 55, 3 }, // 2075 Dec 21, 18:27 + { -96, -47, 57, 8 }, // 2076 Dec 21, 00:13 + { -94, -37, 73, 8 }, // 2077 Dec 21, 06:00 + { -104, -38, 70, 7 }, // 2078 Dec 21, 11:57 + { -102, -33, 74, 14 }, // 2079 Dec 21, 17:44 + { -101, -34, 82, 22 }, // 2080 Dec 20, 23:32 + { -102, -43, 84, 27 }, // 2081 Dec 21, 05:22 + { -94, -32, 94, 27 }, // 2082 Dec 21, 11:04 + { -94, -33, 85, 28 }, // 2083 Dec 21, 16:53 + { -93, -39, 81, 34 }, // 2084 Dec 20, 22:41 + { -91, -31, 95, 34 }, // 2085 Dec 21, 04:28 + { -97, -36, 85, 25 }, // 2086 Dec 21, 10:22 + { -94, -35, 83, 24 }, // 2087 Dec 21, 16:08 + { -93, -36, 86, 23 }, // 2088 Dec 20, 21:56 + { -102, -44, 81, 19 }, // 2089 Dec 21, 03:52 + { -105, -33, 89, 17 }, // 2090 Dec 21, 09:43 + { -113, -37, 80, 14 }, // 2091 Dec 21, 15:38 + { -118, -52, 75, 15 }, // 2092 Dec 20, 21:31 + { -118, -50, 91, 17 }, // 2093 Dec 21, 03:20 + { -123, -56, 83, 10 }, // 2094 Dec 21, 09:13 + { -121, -54, 79, 17 }, // 2095 Dec 21, 15:00 + { -118, -51, 86, 26 }, // 2096 Dec 20, 20:46 + { -119, -55, 84, 25 }, // 2097 Dec 21, 02:36 + { -113, -41, 97, 28 }, // 2098 Dec 21, 08:20 + { -108, -39, 94, 27 }, // 2099 Dec 21, 14:04 + { -105, 0, 0, 0 }, // 2100 Dec 21, 19:51 +}; + +static const int32_t timeDeltaToSprEquin = 768903; // avg delta in millis/10000 from winter solstice to spring equinox, within 1 hr +static const int32_t timeDeltaToSumSolst = 1570332; // avg delta in millis/10000 from winter solstice to summer solstice, within 2.7 hrs +static const int32_t timeDeltaToAutEquin = 2379459; // avg delta in millis/10000 from winter solstice to autumn equinox, within 2 hrs + // The following three methods, which compute the sun parameters // given above for an arbitrary epoch (whatever time the object is // set to), make only a small difference as compared to using the @@ -551,6 +1025,114 @@ CalendarAstronomer::Horizon& CalendarAstronomer::eclipticToHorizon(CalendarAstro // return 0.01675104 - (0.0000418 + 0.000000126*T)*T; // } +/** + * Find the "true anomaly" (longitude) of an object from + * its mean anomaly and the eccentricity of its orbit. This uses + * an iterative solution to Kepler's equation. + * + * @param meanAnomaly The object's longitude calculated as if it were in + * a regular, circular orbit, measured in radians + * from the point of perigee. + * + * @param eccentricity The eccentricity of the orbit + * + * @return The true anomaly (longitude) measured in radians + */ +static double trueAnomaly(double meanAnomaly, double eccentricity) +{ + // First, solve Kepler's equation iteratively + // Duffett-Smith, p.90 + double delta; + double E = meanAnomaly; + do { + delta = E - eccentricity * ::sin(E) - meanAnomaly; + E = E - delta / (1 - eccentricity * ::cos(E)); + } + while (uprv_fabs(delta) > 1e-5); // epsilon = 1e-5 rad + + return 2.0 * ::atan( ::tan(E/2) * ::sqrt( (1+eccentricity) + /(1-eccentricity) ) ); +} + + +/** + * Returns sunLongitude which may be adjusted for correctness + * based on the time, using a table which only has data covering + * gregorian years 1900-2100. + *

+ * @param theSunLongitude the sunLongitude to be adjusted if necessary + * @param theTime the time for which the sunLongitude is to be adjusted + * @internal + */ +double CalendarAstronomer::adjustSunLongitude(double &theSunLongitude, UDate theTime) +{ + // apply piecewise linear corrections in the range 1900-2100 + if (theTime >= winterSolsticeDatesFirst && theTime < winterSolsticeDatesLast) { + int32_t offset = (int32_t)(((double)kWinterSolsticeDatesCount)*(theTime - winterSolsticeDatesFirst)/winterSolsticeDatesRange); + const int32_t * winterSolsticeDatesPtr = winterSolsticeDates + offset; // approximate starting position + int32_t curTime = (int32_t)(theTime/10000.0); + while (curTime < *winterSolsticeDatesPtr) { + winterSolsticeDatesPtr--; + } + while (curTime >= *(winterSolsticeDatesPtr+1)) { + winterSolsticeDatesPtr++; + } + // curTime is in the 12-month period beginning with *winterSolsticeDatesPtr + offset = winterSolsticeDatesPtr - winterSolsticeDates; + curTime -= *winterSolsticeDatesPtr; + double factor = 0.0; + int32_t adjustForStart = 0, adjustForEnd = 0; + if (curTime < timeDeltaToSumSolst) { + if (curTime < timeDeltaToSprEquin) { + // curTime from winter solstice to before spring equinox + factor = (double)curTime/(double)timeDeltaToSprEquin; + adjustForStart = sunLongitudeAdjustmts[offset][0]; + adjustForEnd = sunLongitudeAdjustmts[offset][1]; + } else { + // curTime from spring equinox to before summer solstice + factor = (double)(curTime - timeDeltaToSprEquin)/(double)(timeDeltaToSumSolst - timeDeltaToSprEquin); + adjustForStart = sunLongitudeAdjustmts[offset][1]; + adjustForEnd = sunLongitudeAdjustmts[offset][2]; + } + } else { + if (curTime < timeDeltaToAutEquin) { + // curTime from summer solstice to before autumn equinox + factor = (double)(curTime - timeDeltaToSumSolst)/(double)(timeDeltaToAutEquin - timeDeltaToSumSolst); + adjustForStart = sunLongitudeAdjustmts[offset][2]; + adjustForEnd = sunLongitudeAdjustmts[offset][3]; + } else { + // curTime from autumn equinox to before next winter solstice + factor = (double)(curTime - timeDeltaToAutEquin)/(double)(*(winterSolsticeDatesPtr+1) - *winterSolsticeDatesPtr - timeDeltaToAutEquin); + adjustForStart = sunLongitudeAdjustmts[offset][3]; + adjustForEnd = sunLongitudeAdjustmts[offset+1][0]; + } + } + double adjustmt = ((double)adjustForStart + factor*((double)(adjustForEnd - adjustForStart)))/100000.0; + theSunLongitude += adjustmt; + if (theSunLongitude >= 2*PI) { + theSunLongitude -= 2*PI; + } else if (theSunLongitude < 0) { + theSunLongitude += 2*PI; + } + } + return theSunLongitude; +} + +/** + * The longitude of the sun at the time specified by theTime. + * This does not result in caching of any of the intermediate computations. + * @internal + */ +double CalendarAstronomer::getSunLongitudeForTime(UDate theTime) +{ + double jd = (theTime - (double)JULIAN_EPOCH_MS) / (double)DAY_MS; + double theSunLongitude; + double theMeanAnomalySun; + + getSunLongitude(jd, theSunLongitude, theMeanAnomalySun); + return CalendarAstronomer::adjustSunLongitude(theSunLongitude, theTime); +} + /** * The longitude of the sun at the time specified by this object. * The longitude is measured in radians along the ecliptic @@ -565,13 +1147,20 @@ CalendarAstronomer::Horizon& CalendarAstronomer::eclipticToHorizon(CalendarAstro */ double CalendarAstronomer::getSunLongitude() { - // See page 86 of "Practial Astronomy with your Calculator", - // by Peter Duffet-Smith, for details on the algorithm. + // See page 86 of "Practical Astronomy with your Calculator", + // by Peter Duffet-Smith, for details on the algorithm. - if (isINVALID(sunLongitude)) { - getSunLongitude(getJulianDay(), sunLongitude, meanAnomalySun); - } - return sunLongitude; + // Currently this is called externally by ChineseCalendar, + // and internally by getMoonPosition and getSunTime. + + if (isINVALID(sunLongitude)) { + // this sets instance variables julianDay (from fTime), sunLongitude, meanAnomalySun + getSunLongitude(getJulianDay(), sunLongitude, meanAnomalySun); + } + + // apply piecewise linear corrections in the range 1900-2100, + // update sunLongitude as necessary + return CalendarAstronomer::adjustSunLongitude(sunLongitude, fTime); } /** @@ -579,24 +1168,24 @@ double CalendarAstronomer::getSunLongitude() */ /*public*/ void CalendarAstronomer::getSunLongitude(double jDay, double &longitude, double &meanAnomaly) { - // See page 86 of "Practial Astronomy with your Calculator", - // by Peter Duffet-Smith, for details on the algorithm. + // See page 86 of "Practical Astronomy with your Calculator", + // by Peter Duffet-Smith, for details on the algorithm. - double day = jDay - JD_EPOCH; // Days since epoch + double day = jDay - JD_EPOCH; // Days since epoch - // Find the angular distance the sun in a fictitious - // circular orbit has travelled since the epoch. - double epochAngle = norm2PI(CalendarAstronomer_PI2/TROPICAL_YEAR*day); + // Find the angular distance the sun in a fictitious + // circular orbit has travelled since the epoch. + double epochAngle = norm2PI(CalendarAstronomer_PI2/TROPICAL_YEAR*day); - // The epoch wasn't at the sun's perigee; find the angular distance - // since perigee, which is called the "mean anomaly" - meanAnomaly = norm2PI(epochAngle + SUN_ETA_G - SUN_OMEGA_G); + // The epoch wasn't at the sun's perigee; find the angular distance + // since perigee, which is called the "mean anomaly" + meanAnomaly = norm2PI(epochAngle + SUN_ETA_G - SUN_OMEGA_G); - // Now find the "true anomaly", e.g. the real solar longitude - // by solving Kepler's equation for an elliptical orbit - // NOTE: The 3rd ed. of the book lists omega_g and eta_g in different - // equations; omega_g is to be correct. - longitude = norm2PI(trueAnomaly(meanAnomaly, SUN_E) + SUN_OMEGA_G); + // Now find the "true anomaly", e.g. the real solar longitude + // by solving Kepler's equation for an elliptical orbit + // NOTE: The 3rd ed. of the book lists omega_g and eta_g in different + // equations; omega_g is to be correct. + longitude = norm2PI(trueAnomaly(meanAnomaly, SUN_E) + SUN_OMEGA_G); } /** @@ -606,7 +1195,7 @@ double CalendarAstronomer::getSunLongitude() * @deprecated ICU 2.4. This class may be removed or modified. */ CalendarAstronomer::Equatorial& CalendarAstronomer::getSunPosition(CalendarAstronomer::Equatorial& result) { - return eclipticToEquatorial(result, getSunLongitude(), 0); + return eclipticToEquatorial(result, getSunLongitude(), 0); } @@ -617,9 +1206,9 @@ CalendarAstronomer::Equatorial& CalendarAstronomer::getSunPosition(CalendarAstro * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -double CalendarAstronomer::VERNAL_EQUINOX() { +/*double CalendarAstronomer::VERNAL_EQUINOX() { return 0; -} +}*/ /** * Constant representing the summer solstice. @@ -629,7 +1218,7 @@ double CalendarAstronomer::VERNAL_EQUINOX() { * @deprecated ICU 2.4. This class may be removed or modified. */ double CalendarAstronomer::SUMMER_SOLSTICE() { - return (CalendarAstronomer::PI/2); + return (CalendarAstronomer::PI/2); } /** @@ -639,9 +1228,9 @@ double CalendarAstronomer::SUMMER_SOLSTICE() { * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -double CalendarAstronomer::AUTUMN_EQUINOX() { +/*double CalendarAstronomer::AUTUMN_EQUINOX() { return (CalendarAstronomer::PI); -} +}*/ /** * Constant representing the winter solstice. @@ -651,9 +1240,11 @@ double CalendarAstronomer::AUTUMN_EQUINOX() { * @deprecated ICU 2.4. This class may be removed or modified. */ double CalendarAstronomer::WINTER_SOLSTICE() { - return ((CalendarAstronomer::PI*3)/2); + return ((CalendarAstronomer::PI*3)/2); } +CalendarAstronomer::AngleFunc::~AngleFunc() {} + /** * Find the next time at which the sun's ecliptic longitude will have * the desired value. @@ -662,44 +1253,70 @@ double CalendarAstronomer::WINTER_SOLSTICE() { */ class SunTimeAngleFunc : public CalendarAstronomer::AngleFunc { public: - virtual double eval(CalendarAstronomer& a) { return a.getSunLongitude(); } + virtual ~SunTimeAngleFunc(); + virtual double eval(CalendarAstronomer& a) { return a.getSunLongitude(); } }; +SunTimeAngleFunc::~SunTimeAngleFunc() {} + UDate CalendarAstronomer::getSunTime(double desired, UBool next) { - SunTimeAngleFunc func; - return timeOfAngle( func, - desired, - TROPICAL_YEAR, - MINUTE_MS, - next); + // Currently, the only client is ChineseCalendar, which calls + // this with desired == CalendarAstronomer::WINTER_SOLSTICE() + if (desired == CalendarAstronomer::WINTER_SOLSTICE() && fTime >= winterSolsticeDatesFirst && fTime < winterSolsticeDatesLast) { + int32_t offset = (int32_t)(((double)kWinterSolsticeDatesCount)*(fTime - winterSolsticeDatesFirst)/winterSolsticeDatesRange); + const int32_t * winterSolsticeDatesPtr = winterSolsticeDates + offset; // approximate starting position + int32_t curTime = (int32_t)(fTime/10000.0); + while (curTime < *winterSolsticeDatesPtr) { + winterSolsticeDatesPtr--; + } + while (curTime >= *(winterSolsticeDatesPtr+1)) { + winterSolsticeDatesPtr++; + } + if (next) { + winterSolsticeDatesPtr++; + } + return 10000.0 * (UDate)(*winterSolsticeDatesPtr); + } + + SunTimeAngleFunc func; + return timeOfAngle( func, + desired, + TROPICAL_YEAR, + MINUTE_MS, + next); } +CalendarAstronomer::CoordFunc::~CoordFunc() {} + class RiseSetCoordFunc : public CalendarAstronomer::CoordFunc { public: - virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer&a) { a.getSunPosition(result); } + virtual ~RiseSetCoordFunc(); + virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer&a) { a.getSunPosition(result); } }; +RiseSetCoordFunc::~RiseSetCoordFunc() {} + UDate CalendarAstronomer::getSunRiseSet(UBool rise) { - UDate t0 = fTime; + UDate t0 = fTime; - // Make a rough guess: 6am or 6pm local time on the current day - double noon = Math::floorDivide(fTime + fGmtOffset, (double)DAY_MS)*DAY_MS - fGmtOffset + (12*HOUR_MS); + // Make a rough guess: 6am or 6pm local time on the current day + double noon = ClockMath::floorDivide(fTime + fGmtOffset, (double)DAY_MS)*DAY_MS - fGmtOffset + (12*HOUR_MS); - U_DEBUG_ASTRO_MSG(("Noon=%.2lf, %sL, gmtoff %.2lf\n", noon, debug_astro_date(noon+fGmtOffset), fGmtOffset)); - setTime(noon + ((rise ? -6 : 6) * HOUR_MS)); - U_DEBUG_ASTRO_MSG(("added %.2lf ms as a guess,\n", ((rise ? -6. : 6.) * HOUR_MS))); + U_DEBUG_ASTRO_MSG(("Noon=%.2lf, %sL, gmtoff %.2lf\n", noon, debug_astro_date(noon+fGmtOffset), fGmtOffset)); + setTime(noon + ((rise ? -6 : 6) * HOUR_MS)); + U_DEBUG_ASTRO_MSG(("added %.2lf ms as a guess,\n", ((rise ? -6. : 6.) * HOUR_MS))); - RiseSetCoordFunc func; - double t = riseOrSet(func, - rise, - .533 * DEG_RAD, // Angular Diameter - 34. /60.0 * DEG_RAD, // Refraction correction - MINUTE_MS / 12.); // Desired accuracy + RiseSetCoordFunc func; + double t = riseOrSet(func, + rise, + .533 * DEG_RAD, // Angular Diameter + 34. /60.0 * DEG_RAD, // Refraction correction + MINUTE_MS / 12.); // Desired accuracy - setTime(t0); - return t; + setTime(t0); + return t; } // Commented out - currently unused. ICU 2.6, Alan @@ -989,6 +1606,5026 @@ UDate CalendarAstronomer::getSunRiseSet(UBool rise) #define moonT0 ( 0.5181 * CalendarAstronomer::PI/180 ) // Angular size at distance A #define moonPi ( 0.9507 * CalendarAstronomer::PI/180 ) // Parallax at distance A +// new moon date/times 1900-2100 (in UTC) +// These are in UDate/10000.0 (i.e. in units of 10 seconds) to fit into 32 bits. +// sources from e.g. +// http://eclipse.gsfc.nasa.gov/phase/phases2001.html +// http://www.timeanddate.com/calendar/moonphases.html?year=1900&n=0 +// From the latter: "The lunation number represents the number of times the Moon has +// cycled the Earth since January 1923 (based on a series described by Ernest W. Brown +// in _Planetary Theory_, 1933). One cycle, or lunation, starts at new moon and lasts +// until the next new moon." +// The mean synodic month (interval from one new moon to the next) is 29.530588853 days, +// but the deviation from the mean is significant and difficult to model. I tried based +// on the description in http://individual.utoronto.ca/kalendis/lunar/index.htm +// using the product of two sine waves (with periods of 109.65 days and 13.944 days and +// different phase shifts and amplitudes) but could not get anywhere near enough accuracy. +// Hence these tables. -Peter E +// These table are 9965 and 4974 bytes but greatly improve both the +// accuracy and speed of the relevant methods for the relevant time range. +// For getMoonTime: +// before fix, errors of up to +23 min / -18 min for next = true and much more for +// next = false; after, errors always less than 1 min). +// 40 to 80 times faster with the fix, depending on starting point. +// For getMoonAge: +// more accurate with the fix (and never returns values >= 2*PI), also more than 11 times faster. +static const int32_t newMoonDates[] = { +// millis/10K date lunation number + -221149158, // 1899 Dec 3, 00:47 -285 + -220893888, // 1900 Jan 1, 13:52 -284 + -220639188, // 1900 Jan 31, 01:22 -283 + -220385010, // 1900 Mar 1, 11:25 -282 + -220131180, // 1900 Mar 30, 20:30 -281 + -219877422, // 1900 Apr 29, 05:23 -280 + -219623460, // 1900 May 28, 14:50 -279 + -219369078, // 1900 Jun 27, 01:27 -278 + -219114102, // 1900 Jul 26, 13:43 -277 + -218858442, // 1900 Aug 25, 03:53 -276 + -218602098, // 1900 Sep 23, 19:57 -275 + -218345238, // 1900 Oct 23, 13:27 -274 + -218088258, // 1900 Nov 22, 07:17 -273 + -217831674, // 1900 Dec 22, 00:01 -272 + -217575864, // 1901 Jan 20, 14:36 -271 + -217320930, // 1901 Feb 19, 02:45 -270 + -217066722, // 1901 Mar 20, 12:53 -269 + -216813018, // 1901 Apr 18, 21:37 -268 + -216559572, // 1901 May 18, 05:38 -267 + -216306162, // 1901 Jun 16, 13:33 -266 + -216052500, // 1901 Jul 15, 22:10 -265 + -215798238, // 1901 Aug 14, 08:27 -264 + -215543046, // 1901 Sep 12, 21:19 -263 + -215286768, // 1901 Oct 12, 13:12 -262 + -215029590, // 1901 Nov 11, 07:35 -261 + -214772076, // 1901 Dec 11, 02:54 -260 + -214514910, // 1902 Jan 9, 21:15 -259 + -214258554, // 1902 Feb 8, 13:21 -258 + -214003140, // 1902 Mar 10, 02:50 -257 + -213748620, // 1902 Apr 8, 13:50 -256 + -213494850, // 1902 May 7, 22:45 -255 + -213241614, // 1902 Jun 6, 06:11 -254 + -212988606, // 1902 Jul 5, 12:59 -253 + -212735418, // 1902 Aug 3, 20:17 -252 + -212481606, // 1902 Sep 2, 05:19 -251 + -212226786, // 1902 Oct 1, 17:09 -250 + -211970796, // 1902 Oct 31, 08:14 -249 + -211713810, // 1902 Nov 30, 02:05 -248 + -211456290, // 1902 Dec 29, 21:25 -247 + -211198806, // 1903 Jan 28, 16:39 -246 + -210941880, // 1903 Feb 27, 10:20 -245 + -210685884, // 1903 Mar 29, 01:26 -244 + -210430974, // 1903 Apr 27, 13:31 -243 + -210177060, // 1903 May 26, 22:50 -242 + -209923854, // 1903 Jun 25, 06:11 -241 + -209670924, // 1903 Jul 24, 12:46 -240 + -209417814, // 1903 Aug 22, 19:51 -239 + -209164140, // 1903 Sep 21, 04:30 -238 + -208909620, // 1903 Oct 20, 15:30 -237 + -208654140, // 1903 Nov 19, 05:10 -236 + -208397724, // 1903 Dec 18, 21:26 -235 + -208140558, // 1904 Jan 17, 15:47 -234 + -207883050, // 1904 Feb 16, 11:05 -233 + -207625806, // 1904 Mar 17, 05:39 -232 + -207369402, // 1904 Apr 15, 21:53 -231 + -207114132, // 1904 May 15, 10:58 -230 + -206859900, // 1904 Jun 13, 21:10 -229 + -206606358, // 1904 Jul 13, 05:27 -228 + -206353092, // 1904 Aug 11, 12:58 -227 + -206099742, // 1904 Sep 9, 20:43 -226 + -205846050, // 1904 Oct 9, 05:25 -225 + -205591818, // 1904 Nov 7, 15:37 -224 + -205336884, // 1904 Dec 7, 03:46 -223 + -205081098, // 1905 Jan 5, 18:17 -222 + -204824484, // 1905 Feb 4, 11:06 -221 + -204567366, // 1905 Mar 6, 05:19 -220 + -204310296, // 1905 Apr 4, 23:24 -219 + -204053820, // 1905 May 4, 15:50 -218 + -203798178, // 1905 Jun 3, 05:57 -217 + -203543340, // 1905 Jul 2, 17:50 -216 + -203289102, // 1905 Aug 1, 04:03 -215 + -203035242, // 1905 Aug 30, 13:13 -214 + -202781520, // 1905 Sep 28, 22:00 -213 + -202527732, // 1905 Oct 28, 06:58 -212 + -202273638, // 1905 Nov 26, 16:47 -211 + -202019016, // 1905 Dec 26, 04:04 -210 + -201763746, // 1906 Jan 24, 17:09 -209 + -201507858, // 1906 Feb 23, 07:57 -208 + -201251568, // 1906 Mar 24, 23:52 -207 + -200995158, // 1906 Apr 23, 16:07 -206 + -200738874, // 1906 May 23, 08:01 -205 + -200482884, // 1906 Jun 21, 23:06 -204 + -200227326, // 1906 Jul 21, 12:59 -203 + -199972272, // 1906 Aug 20, 01:28 -202 + -199717722, // 1906 Sep 18, 12:33 -201 + -199463502, // 1906 Oct 17, 22:43 -200 + -199209378, // 1906 Nov 16, 08:37 -199 + -198955116, // 1906 Dec 15, 18:54 -198 + -198700578, // 1907 Jan 14, 05:57 -197 + -198445782, // 1907 Feb 12, 17:43 -196 + -198190770, // 1907 Mar 14, 06:05 -195 + -197935524, // 1907 Apr 12, 19:06 -194 + -197679966, // 1907 May 12, 08:59 -193 + -197424060, // 1907 Jun 10, 23:50 -192 + -197167938, // 1907 Jul 10, 15:17 -191 + -196911858, // 1907 Aug 9, 06:37 -190 + -196656096, // 1907 Sep 7, 21:04 -189 + -196400754, // 1907 Oct 7, 10:21 -188 + -196145766, // 1907 Nov 5, 22:39 -187 + -195890982, // 1907 Dec 5, 10:23 -186 + -195636336, // 1908 Jan 3, 21:44 -185 + -195381864, // 1908 Feb 2, 08:36 -184 + -195127578, // 1908 Mar 2, 18:57 -183 + -194873388, // 1908 Apr 1, 05:02 -182 + -194619042, // 1908 Apr 30, 15:33 -181 + -194364276, // 1908 May 30, 03:14 -180 + -194108934, // 1908 Jun 28, 16:31 -179 + -193853058, // 1908 Jul 28, 07:17 -178 + -193596846, // 1908 Aug 26, 22:59 -177 + -193340526, // 1908 Sep 25, 14:59 -176 + -193084278, // 1908 Oct 25, 06:47 -175 + -192828282, // 1908 Nov 23, 21:53 -174 + -192572700, // 1908 Dec 23, 11:50 -173 + -192317688, // 1909 Jan 22, 00:12 -172 + -192063288, // 1909 Feb 20, 10:52 -171 + -191809374, // 1909 Mar 21, 20:11 -170 + -191555694, // 1909 Apr 20, 04:51 -169 + -191301948, // 1909 May 19, 13:42 -168 + -191047872, // 1909 Jun 17, 23:28 -167 + -190793256, // 1909 Jul 17, 10:44 -166 + -190537950, // 1909 Aug 15, 23:55 -165 + -190281906, // 1909 Sep 14, 15:09 -164 + -190025202, // 1909 Oct 14, 08:13 -163 + -189768132, // 1909 Nov 13, 02:18 -162 + -189511206, // 1909 Dec 12, 19:59 -161 + -189254934, // 1910 Jan 11, 11:51 -160 + -188999562, // 1910 Feb 10, 01:13 -159 + -188745048, // 1910 Mar 11, 12:12 -158 + -188491170, // 1910 Apr 9, 21:25 -157 + -188237688, // 1910 May 9, 05:32 -156 + -187984344, // 1910 Jun 7, 13:16 -155 + -187730880, // 1910 Jul 6, 21:20 -154 + -187476984, // 1910 Aug 5, 06:36 -153 + -187222290, // 1910 Sep 3, 18:05 -152 + -186966528, // 1910 Oct 3, 08:32 -151 + -186709704, // 1910 Nov 2, 01:56 -150 + -186452214, // 1910 Dec 1, 21:11 -149 + -186194754, // 1910 Dec 31, 16:21 -148 + -185937930, // 1911 Jan 30, 09:45 -147 + -185682054, // 1911 Mar 1, 00:31 -146 + -185427132, // 1911 Mar 30, 12:38 -145 + -185173050, // 1911 Apr 28, 22:25 -144 + -184919616, // 1911 May 28, 06:24 -143 + -184666566, // 1911 Jun 26, 13:19 -142 + -184413534, // 1911 Jul 25, 20:11 -141 + -184160076, // 1911 Aug 24, 04:14 -140 + -183905778, // 1911 Sep 22, 14:37 -139 + -183650346, // 1911 Oct 22, 04:09 -138 + -183393786, // 1911 Nov 20, 20:49 -137 + -183136440, // 1911 Dec 20, 15:40 -136 + -182878866, // 1912 Jan 19, 11:09 -135 + -182621616, // 1912 Feb 18, 05:44 -134 + -182365152, // 1912 Mar 18, 22:08 -133 + -182109720, // 1912 Apr 17, 11:40 -132 + -181855362, // 1912 May 16, 22:13 -131 + -181601862, // 1912 Jun 15, 06:23 -130 + -181348842, // 1912 Jul 14, 13:13 -129 + -181095858, // 1912 Aug 12, 19:57 -128 + -180842472, // 1912 Sep 11, 03:48 -127 + -180588360, // 1912 Oct 10, 13:40 -126 + -180333336, // 1912 Nov 9, 02:04 -125 + -180077364, // 1912 Dec 8, 17:06 -124 + -179820552, // 1913 Jan 7, 10:28 -123 + -179563194, // 1913 Feb 6, 05:21 -122 + -179305788, // 1913 Mar 8, 00:22 -121 + -179048952, // 1913 Apr 6, 17:48 -120 + -178793136, // 1913 May 6, 08:24 -119 + -178538418, // 1913 Jun 4, 19:57 -118 + -178284564, // 1913 Jul 4, 05:06 -117 + -178031172, // 1913 Aug 2, 12:58 -116 + -177777858, // 1913 Aug 31, 20:37 -115 + -177524304, // 1913 Sep 30, 04:56 -114 + -177270306, // 1913 Oct 29, 14:29 -113 + -177015714, // 1913 Nov 28, 01:41 -112 + -176760372, // 1913 Dec 27, 14:58 -111 + -176504196, // 1914 Jan 26, 06:34 -110 + -176247348, // 1914 Feb 25, 00:02 -109 + -175990266, // 1914 Mar 26, 18:09 -108 + -175733514, // 1914 Apr 25, 11:21 -107 + -175477476, // 1914 May 25, 02:34 -106 + -175222242, // 1914 Jun 23, 15:33 -105 + -174967692, // 1914 Jul 23, 02:38 -104 + -174713604, // 1914 Aug 21, 12:26 -103 + -174459762, // 1914 Sep 19, 21:33 -102 + -174205962, // 1914 Oct 19, 06:33 -101 + -173951988, // 1914 Nov 17, 16:02 -100 + -173697630, // 1914 Dec 17, 02:35 -99 + -173442708, // 1915 Jan 15, 14:42 -98 + -173187174, // 1915 Feb 14, 04:31 -97 + -172931148, // 1915 Mar 15, 19:42 -96 + -172674870, // 1915 Apr 14, 11:35 -95 + -172418574, // 1915 May 14, 03:31 -94 + -172162458, // 1915 Jun 12, 18:57 -93 + -171906660, // 1915 Jul 12, 09:30 -92 + -171651288, // 1915 Aug 10, 22:52 -91 + -171396408, // 1915 Sep 9, 10:52 -90 + -171141954, // 1915 Oct 8, 21:41 -89 + -170887728, // 1915 Nov 7, 07:52 -88 + -170633502, // 1915 Dec 6, 18:03 -87 + -170379090, // 1916 Jan 5, 04:45 -86 + -170124450, // 1916 Feb 3, 16:05 -85 + -169869612, // 1916 Mar 4, 03:58 -84 + -169614594, // 1916 Apr 2, 16:21 -83 + -169359306, // 1916 May 2, 05:29 -82 + -169103658, // 1916 May 31, 19:37 -81 + -168847662, // 1916 Jun 30, 10:43 -80 + -168591510, // 1916 Jul 30, 02:15 -79 + -168335490, // 1916 Aug 28, 17:25 -78 + -168079836, // 1916 Sep 27, 07:34 -77 + -167824578, // 1916 Oct 26, 20:37 -76 + -167569620, // 1916 Nov 25, 08:50 -75 + -167314854, // 1916 Dec 24, 20:31 -74 + -167060280, // 1917 Jan 23, 07:40 -73 + -166805946, // 1917 Feb 21, 18:09 -72 + -166551810, // 1917 Mar 23, 04:05 -71 + -166297674, // 1917 Apr 21, 14:01 -70 + -166043238, // 1917 May 21, 00:47 -69 + -165788268, // 1917 Jun 19, 13:02 -68 + -165532680, // 1917 Jul 19, 03:00 -67 + -165276594, // 1917 Aug 17, 18:21 -66 + -165020232, // 1917 Sep 16, 10:28 -65 + -164763834, // 1917 Oct 16, 02:41 -64 + -164507592, // 1917 Nov 14, 18:28 -63 + -164251698, // 1917 Dec 14, 09:17 -62 + -163996350, // 1918 Jan 12, 22:35 -61 + -163741656, // 1918 Feb 11, 10:04 -60 + -163487568, // 1918 Mar 12, 19:52 -59 + -163233876, // 1918 Apr 11, 04:34 -58 + -162980274, // 1918 May 10, 13:01 -57 + -162726462, // 1918 Jun 8, 22:03 -56 + -162472188, // 1918 Jul 8, 08:22 -55 + -162217266, // 1918 Aug 6, 20:29 -54 + -161961576, // 1918 Sep 5, 10:44 -53 + -161705130, // 1918 Oct 5, 03:05 -52 + -161448114, // 1918 Nov 3, 21:01 -51 + -161190966, // 1918 Dec 3, 15:19 -50 + -160934256, // 1919 Jan 2, 08:24 -49 + -160678398, // 1919 Jan 31, 23:07 -48 + -160423494, // 1919 Mar 2, 11:11 -47 + -160169370, // 1919 Mar 31, 21:05 -46 + -159915780, // 1919 Apr 30, 05:30 -45 + -159662448, // 1919 May 29, 13:12 -44 + -159409128, // 1919 Jun 27, 20:52 -43 + -159155514, // 1919 Jul 27, 05:21 -42 + -158901258, // 1919 Aug 25, 15:37 -41 + -158646036, // 1919 Sep 24, 04:34 -40 + -158389686, // 1919 Oct 23, 20:39 -39 + -158132400, // 1919 Nov 22, 15:20 -38 + -157874790, // 1919 Dec 22, 10:55 -37 + -157617558, // 1920 Jan 21, 05:27 -36 + -157361196, // 1920 Feb 19, 21:34 -35 + -157105824, // 1920 Mar 20, 10:56 -34 + -156851382, // 1920 Apr 18, 21:43 -33 + -156597690, // 1920 May 18, 06:25 -32 + -156344514, // 1920 Jun 16, 13:41 -31 + -156091530, // 1920 Jul 15, 20:25 -30 + -155838336, // 1920 Aug 14, 03:44 -29 + -155584494, // 1920 Sep 12, 12:51 -28 + -155329620, // 1920 Oct 12, 00:50 -27 + -155073570, // 1920 Nov 10, 16:05 -26 + -154816536, // 1920 Dec 10, 10:04 -25 + -154558998, // 1921 Jan 9, 05:27 -24 + -154301538, // 1921 Feb 8, 00:37 -23 + -154044666, // 1921 Mar 9, 18:09 -22 + -153788730, // 1921 Apr 8, 09:05 -21 + -153533874, // 1921 May 7, 21:01 -20 + -153279990, // 1921 Jun 6, 06:15 -19 + -153026784, // 1921 Jul 5, 13:36 -18 + -152773818, // 1921 Aug 3, 20:17 -17 + -152520642, // 1921 Sep 2, 03:33 -16 + -152266884, // 1921 Oct 1, 12:26 -15 + -152012292, // 1921 Oct 30, 23:38 -14 + -151756770, // 1921 Nov 29, 13:25 -13 + -151500366, // 1921 Dec 29, 05:39 -12 + -151243272, // 1922 Jan 27, 23:48 -11 + -150985878, // 1922 Feb 26, 18:47 -10 + -150728742, // 1922 Mar 28, 13:03 -9 + -150472416, // 1922 Apr 27, 05:04 -8 + -150217176, // 1922 May 26, 18:04 -7 + -149962920, // 1922 Jun 25, 04:20 -6 + -149709318, // 1922 Jul 24, 12:47 -5 + -149455956, // 1922 Aug 22, 20:34 -4 + -149202492, // 1922 Sep 21, 04:38 -3 + -148948680, // 1922 Oct 20, 13:40 -2 + -148694364, // 1922 Nov 19, 00:06 -1 + -148439400, // 1922 Dec 18, 12:20 0 + -148183674, // 1923 Jan 17, 02:41 1 + -147927198, // 1923 Feb 15, 19:07 2 + -147670254, // 1923 Mar 17, 12:51 3 + -147413352, // 1923 Apr 16, 06:28 4 + -147156972, // 1923 May 15, 22:38 5 + -146901348, // 1923 Jun 14, 12:42 6 + -146646450, // 1923 Jul 14, 00:45 7 + -146392098, // 1923 Aug 12, 11:17 8 + -146138088, // 1923 Sep 10, 20:52 9 + -145884210, // 1923 Oct 10, 06:05 10 + -145630278, // 1923 Nov 8, 15:27 11 + -145376100, // 1923 Dec 8, 01:30 12 + -145121478, // 1924 Jan 6, 12:47 13 + -144866292, // 1924 Feb 5, 01:38 14 + -144610578, // 1924 Mar 5, 15:57 15 + -144354498, // 1924 Apr 4, 07:17 16 + -144098280, // 1924 May 3, 23:00 17 + -143842116, // 1924 Jun 2, 14:34 18 + -143586150, // 1924 Jul 2, 05:35 19 + -143330508, // 1924 Jul 31, 19:42 20 + -143075298, // 1924 Aug 30, 08:37 21 + -142820544, // 1924 Sep 28, 20:16 22 + -142566138, // 1924 Oct 28, 06:57 23 + -142311864, // 1924 Nov 26, 17:16 24 + -142057524, // 1924 Dec 26, 03:46 25 + -141803010, // 1925 Jan 24, 14:45 26 + -141548328, // 1925 Feb 23, 02:12 27 + -141293502, // 1925 Mar 24, 14:03 28 + -141038472, // 1925 Apr 23, 02:28 29 + -140783112, // 1925 May 22, 15:48 30 + -140527338, // 1925 Jun 21, 06:17 31 + -140271240, // 1925 Jul 20, 21:40 32 + -140015070, // 1925 Aug 19, 13:15 33 + -139759122, // 1925 Sep 18, 04:13 34 + -139503564, // 1925 Oct 17, 18:06 35 + -139248372, // 1925 Nov 16, 06:58 36 + -138993450, // 1925 Dec 15, 19:05 37 + -138738750, // 1926 Jan 14, 06:35 38 + -138484320, // 1926 Feb 12, 17:20 39 + -138230160, // 1926 Mar 14, 03:20 40 + -137976144, // 1926 Apr 12, 12:56 41 + -137721990, // 1926 May 11, 22:55 42 + -137467392, // 1926 Jun 10, 10:08 43 + -137212164, // 1926 Jul 9, 23:06 44 + -136956306, // 1926 Aug 8, 13:49 45 + -136700010, // 1926 Sep 7, 05:45 46 + -136443522, // 1926 Oct 6, 22:13 47 + -136187076, // 1926 Nov 5, 14:34 48 + -135930888, // 1926 Dec 5, 06:12 49 + -135675192, // 1927 Jan 3, 20:28 50 + -135420156, // 1927 Feb 2, 08:54 51 + -135165816, // 1927 Mar 3, 19:24 52 + -134912016, // 1927 Apr 2, 04:24 53 + -134658486, // 1927 May 1, 12:39 54 + -134404890, // 1927 May 30, 21:05 55 + -134150934, // 1927 Jun 29, 06:31 56 + -133896384, // 1927 Jul 28, 17:36 57 + -133641090, // 1927 Aug 27, 06:45 58 + -133384974, // 1927 Sep 25, 22:11 59 + -133128138, // 1927 Oct 25, 15:37 60 + -132870906, // 1927 Nov 24, 10:09 61 + -132613842, // 1927 Dec 24, 04:13 62 + -132357486, // 1928 Jan 22, 20:19 63 + -132102114, // 1928 Feb 21, 09:41 64 + -131847666, // 1928 Mar 21, 20:29 65 + -131593890, // 1928 Apr 20, 05:25 66 + -131340516, // 1928 May 19, 13:14 67 + -131087268, // 1928 Jun 17, 20:42 68 + -130833870, // 1928 Jul 17, 04:35 69 + -130579992, // 1928 Aug 15, 13:48 70 + -130325280, // 1928 Sep 14, 01:20 71 + -130069464, // 1928 Oct 13, 15:56 72 + -129812550, // 1928 Nov 12, 09:35 73 + -129554964, // 1928 Dec 12, 05:06 74 + -129297432, // 1929 Jan 11, 00:28 75 + -129040590, // 1929 Feb 9, 17:55 76 + -128784738, // 1929 Mar 11, 08:37 77 + -128529882, // 1929 Apr 9, 20:33 78 + -128275872, // 1929 May 9, 06:08 79 + -128022498, // 1929 Jun 7, 13:57 80 + -127769478, // 1929 Jul 6, 20:47 81 + -127516440, // 1929 Aug 5, 03:40 82 + -127262958, // 1929 Sep 3, 11:47 83 + -127008606, // 1929 Oct 2, 22:19 84 + -126753114, // 1929 Nov 1, 12:01 85 + -126496512, // 1929 Dec 1, 04:48 86 + -126239148, // 1929 Dec 30, 23:42 87 + -125981598, // 1930 Jan 29, 19:07 88 + -125724402, // 1930 Feb 28, 13:33 89 + -125467998, // 1930 Mar 30, 05:47 90 + -125212626, // 1930 Apr 28, 19:09 91 + -124958298, // 1930 May 28, 05:37 92 + -124704798, // 1930 Jun 26, 13:47 93 + -124451748, // 1930 Jul 25, 20:42 94 + -124198698, // 1930 Aug 24, 03:37 95 + -123945234, // 1930 Sep 22, 11:41 96 + -123691038, // 1930 Oct 21, 21:47 97 + -123435954, // 1930 Nov 20, 10:21 98 + -123179976, // 1930 Dec 20, 01:24 99 + -122923230, // 1931 Jan 18, 18:35 100 + -122665980, // 1931 Feb 17, 13:10 101 + -122408700, // 1931 Mar 19, 07:50 102 + -122151960, // 1931 Apr 18, 01:00 103 + -121896192, // 1931 May 17, 15:28 104 + -121641468, // 1931 Jun 16, 03:02 105 + -121387560, // 1931 Jul 15, 12:20 106 + -121134078, // 1931 Aug 13, 20:27 107 + -120880644, // 1931 Sep 12, 04:26 108 + -120626964, // 1931 Oct 11, 13:06 109 + -120372870, // 1931 Nov 9, 22:55 110 + -120118224, // 1931 Dec 9, 10:16 111 + -119862906, // 1932 Jan 7, 23:29 112 + -119606850, // 1932 Feb 6, 14:45 113 + -119350176, // 1932 Mar 7, 07:44 114 + -119093274, // 1932 Apr 6, 01:21 115 + -118836654, // 1932 May 5, 18:11 116 + -118580664, // 1932 Jun 4, 09:16 117 + -118325400, // 1932 Jul 3, 22:20 118 + -118070748, // 1932 Aug 2, 09:42 119 + -117816510, // 1932 Aug 31, 19:55 120 + -117562500, // 1932 Sep 30, 05:30 121 + -117308544, // 1932 Oct 29, 14:56 122 + -117054462, // 1932 Nov 28, 00:43 123 + -116800068, // 1932 Dec 27, 11:22 124 + -116545200, // 1933 Jan 25, 23:20 125 + -116289816, // 1933 Feb 24, 12:44 126 + -116034000, // 1933 Mar 26, 03:20 127 + -115777932, // 1933 Apr 24, 18:38 128 + -115521798, // 1933 May 24, 10:07 129 + -115265748, // 1933 Jun 23, 01:22 130 + -115009902, // 1933 Jul 22, 16:03 131 + -114754392, // 1933 Aug 21, 05:48 132 + -114499314, // 1933 Sep 19, 18:21 133 + -114244650, // 1933 Oct 19, 05:45 134 + -113990256, // 1933 Nov 17, 16:24 135 + -113735922, // 1933 Dec 17, 02:53 136 + -113481498, // 1934 Jan 15, 13:37 137 + -113226936, // 1934 Feb 14, 00:44 138 + -112972266, // 1934 Mar 15, 12:09 139 + -112717458, // 1934 Apr 13, 23:57 140 + -112462380, // 1934 May 13, 12:30 141 + -112206894, // 1934 Jun 12, 02:11 142 + -111950964, // 1934 Jul 11, 17:06 143 + -111694764, // 1934 Aug 10, 08:46 144 + -111438600, // 1934 Sep 9, 00:20 145 + -111182730, // 1934 Oct 8, 15:05 146 + -110927262, // 1934 Nov 7, 04:43 147 + -110672130, // 1934 Dec 6, 17:25 148 + -110417280, // 1935 Jan 5, 05:20 149 + -110162718, // 1935 Feb 3, 16:27 150 + -109908480, // 1935 Mar 5, 02:40 151 + -109654494, // 1935 Apr 3, 12:11 152 + -109400538, // 1935 May 2, 21:37 153 + -109146288, // 1935 Jun 1, 07:52 154 + -108891456, // 1935 Jun 30, 19:44 155 + -108635928, // 1935 Jul 30, 09:32 156 + -108379794, // 1935 Aug 29, 01:01 157 + -108123300, // 1935 Sep 27, 17:30 158 + -107866710, // 1935 Oct 27, 10:15 159 + -107610264, // 1935 Nov 26, 02:36 160 + -107354226, // 1935 Dec 25, 17:49 161 + -107098812, // 1936 Jan 24, 07:18 162 + -106844148, // 1936 Feb 22, 18:42 163 + -106590162, // 1936 Mar 23, 04:13 164 + -106336602, // 1936 Apr 21, 12:33 165 + -106083150, // 1936 May 20, 20:35 166 + -105829476, // 1936 Jun 19, 05:14 167 + -105575292, // 1936 Jul 18, 15:18 168 + -105320394, // 1936 Aug 17, 03:21 169 + -105064674, // 1936 Sep 15, 17:41 170 + -104808114, // 1936 Oct 15, 10:21 171 + -104550948, // 1936 Nov 14, 04:42 172 + -104293650, // 1936 Dec 13, 23:25 173 + -104036838, // 1937 Jan 12, 16:47 174 + -103780956, // 1937 Feb 11, 07:34 175 + -103526094, // 1937 Mar 12, 19:31 176 + -103272060, // 1937 Apr 11, 05:10 177 + -103018572, // 1937 May 10, 13:18 178 + -102765342, // 1937 Jun 8, 20:43 179 + -102512082, // 1937 Jul 8, 04:13 180 + -102258498, // 1937 Aug 6, 12:37 181 + -102004242, // 1937 Sep 4, 22:53 182 + -101748972, // 1937 Oct 4, 11:58 183 + -101492544, // 1937 Nov 3, 04:16 184 + -101235174, // 1937 Dec 2, 23:11 185 + -100977486, // 1938 Jan 1, 18:59 186 + -100720230, // 1938 Jan 31, 13:35 187 + -100463880, // 1938 Mar 2, 05:40 188 + -100208568, // 1938 Mar 31, 18:52 189 + -99954192, // 1938 Apr 30, 05:28 190 + -99700560, // 1938 May 29, 14:00 191 + -99447420, // 1938 Jun 27, 21:10 192 + -99194442, // 1938 Jul 27, 03:53 193 + -98941218, // 1938 Aug 25, 11:17 194 + -98687322, // 1938 Sep 23, 20:33 195 + -98432388, // 1938 Oct 23, 08:42 196 + -98176290, // 1938 Nov 22, 00:05 197 + -97919238, // 1938 Dec 21, 18:07 198 + -97661718, // 1939 Jan 20, 13:27 199 + -97404312, // 1939 Feb 19, 08:28 200 + -97147506, // 1939 Mar 21, 01:49 201 + -96891630, // 1939 Apr 19, 16:35 202 + -96636810, // 1939 May 19, 04:25 203 + -96382938, // 1939 Jun 17, 13:37 204 + -96129702, // 1939 Jul 16, 21:03 205 + -95876682, // 1939 Aug 15, 03:53 206 + -95623428, // 1939 Sep 13, 11:22 207 + -95369580, // 1939 Oct 12, 20:30 208 + -95114916, // 1939 Nov 11, 07:54 209 + -94859370, // 1939 Dec 10, 21:45 210 + -94603002, // 1940 Jan 9, 13:53 211 + -94346010, // 1940 Feb 8, 07:45 212 + -94088742, // 1940 Mar 9, 02:23 213 + -93831732, // 1940 Apr 7, 20:18 214 + -93575478, // 1940 May 7, 12:07 215 + -93320250, // 1940 Jun 6, 01:05 216 + -93065952, // 1940 Jul 5, 11:28 217 + -92812266, // 1940 Aug 3, 20:09 218 + -92558790, // 1940 Sep 2, 04:15 219 + -92305194, // 1940 Oct 1, 12:41 220 + -92051262, // 1940 Oct 30, 22:03 221 + -91796868, // 1940 Nov 29, 08:42 222 + -91541904, // 1940 Dec 28, 20:56 223 + -91286262, // 1941 Jan 27, 11:03 224 + -91029948, // 1941 Feb 26, 03:02 225 + -90773196, // 1941 Mar 27, 20:14 226 + -90516456, // 1941 Apr 26, 13:24 227 + -90260172, // 1941 May 26, 05:18 228 + -90004548, // 1941 Jun 24, 19:22 229 + -89749566, // 1941 Jul 24, 07:39 230 + -89495076, // 1941 Aug 22, 18:34 231 + -89240886, // 1941 Sep 21, 04:39 232 + -88986840, // 1941 Oct 20, 14:20 233 + -88732776, // 1941 Nov 19, 00:04 234 + -88478532, // 1941 Dec 18, 10:18 235 + -88223928, // 1942 Jan 16, 21:32 236 + -87968862, // 1942 Feb 15, 10:03 237 + -87713340, // 1942 Mar 16, 23:50 238 + -87457482, // 1942 Apr 15, 14:33 239 + -87201450, // 1942 May 15, 05:45 240 + -86945388, // 1942 Jun 13, 21:02 241 + -86689422, // 1942 Jul 13, 12:03 242 + -86433672, // 1942 Aug 12, 02:28 243 + -86178282, // 1942 Sep 10, 15:53 244 + -85923324, // 1942 Oct 10, 04:06 245 + -85668726, // 1942 Nov 8, 15:19 246 + -85414320, // 1942 Dec 8, 02:00 247 + -85159932, // 1943 Jan 6, 12:38 248 + -84905466, // 1943 Feb 4, 23:29 249 + -84650916, // 1943 Mar 6, 10:34 250 + -84396282, // 1943 Apr 4, 21:53 251 + -84141462, // 1943 May 4, 09:43 252 + -83886282, // 1943 Jun 2, 22:33 253 + -83630616, // 1943 Jul 2, 12:44 254 + -83374524, // 1943 Aug 1, 04:06 255 + -83118240, // 1943 Aug 30, 20:00 256 + -82862106, // 1943 Sep 29, 11:29 257 + -82606326, // 1943 Oct 29, 01:59 258 + -82350942, // 1943 Nov 27, 15:23 259 + -82095900, // 1943 Dec 27, 03:50 260 + -81841176, // 1944 Jan 25, 15:24 261 + -81586806, // 1944 Feb 24, 01:59 262 + -81332784, // 1944 Mar 24, 11:36 263 + -81078936, // 1944 Apr 22, 20:44 264 + -80824962, // 1944 May 22, 06:13 265 + -80570520, // 1944 Jun 20, 17:00 266 + -80315388, // 1944 Jul 20, 05:42 267 + -80059530, // 1944 Aug 18, 20:25 268 + -79803138, // 1944 Sep 17, 12:37 269 + -79546470, // 1944 Oct 17, 05:35 270 + -79289826, // 1944 Nov 15, 22:29 271 + -79033470, // 1944 Dec 15, 14:35 272 + -78777678, // 1945 Jan 14, 05:07 273 + -78522642, // 1945 Feb 12, 17:33 274 + -78268374, // 1945 Mar 14, 03:51 275 + -78014700, // 1945 Apr 12, 12:30 276 + -77761308, // 1945 May 11, 20:22 277 + -77507844, // 1945 Jun 10, 04:26 278 + -77253990, // 1945 Jul 9, 13:35 279 + -76999488, // 1945 Aug 8, 00:32 280 + -76744176, // 1945 Sep 6, 13:44 281 + -76487988, // 1945 Oct 6, 05:22 282 + -76231020, // 1945 Nov 4, 23:10 283 + -75973638, // 1945 Dec 4, 18:07 284 + -75716460, // 1946 Jan 3, 12:30 285 + -75460062, // 1946 Feb 2, 04:43 286 + -75204714, // 1946 Mar 3, 18:01 287 + -74950338, // 1946 Apr 2, 04:37 288 + -74696664, // 1946 May 1, 13:16 289 + -74443386, // 1946 May 30, 20:49 290 + -74190204, // 1946 Jun 29, 04:06 291 + -73936842, // 1946 Jul 28, 11:53 292 + -73682958, // 1946 Aug 26, 21:07 293 + -73428210, // 1946 Sep 25, 08:45 294 + -73172328, // 1946 Oct 24, 23:32 295 + -72915336, // 1946 Nov 23, 17:24 296 + -72657684, // 1946 Dec 23, 13:06 297 + -72400116, // 1947 Jan 22, 08:34 298 + -72143280, // 1947 Feb 21, 02:00 299 + -71887476, // 1947 Mar 22, 16:34 300 + -71632686, // 1947 Apr 21, 04:19 301 + -71378736, // 1947 May 20, 13:44 302 + -71125404, // 1947 Jun 18, 21:26 303 + -70872390, // 1947 Jul 18, 04:15 304 + -70619328, // 1947 Aug 16, 11:12 305 + -70365792, // 1947 Sep 14, 19:28 306 + -70111380, // 1947 Oct 14, 06:10 307 + -69855834, // 1947 Nov 12, 20:01 308 + -69599202, // 1947 Dec 12, 12:53 309 + -69341850, // 1948 Jan 11, 07:45 310 + -69084348, // 1948 Feb 10, 03:02 311 + -68827230, // 1948 Mar 10, 21:15 312 + -68570898, // 1948 Apr 9, 13:17 313 + -68315580, // 1948 May 9, 02:30 314 + -68061264, // 1948 Jun 7, 12:56 315 + -67807746, // 1948 Jul 6, 21:09 316 + -67554642, // 1948 Aug 5, 04:13 317 + -67301514, // 1948 Sep 3, 11:21 318 + -67047948, // 1948 Oct 2, 19:42 319 + -66793662, // 1948 Nov 1, 06:03 320 + -66538530, // 1948 Nov 30, 18:45 321 + -66282570, // 1948 Dec 30, 09:45 322 + -66025908, // 1949 Jan 29, 02:42 323 + -65768790, // 1949 Feb 27, 20:55 324 + -65511654, // 1949 Mar 29, 15:11 325 + -65255028, // 1949 Apr 28, 08:02 326 + -64999296, // 1949 May 27, 22:24 327 + -64744548, // 1949 Jun 26, 10:02 328 + -64490562, // 1949 Jul 25, 19:33 329 + -64236966, // 1949 Aug 24, 03:59 330 + -63983394, // 1949 Sep 22, 12:21 331 + -63729582, // 1949 Oct 21, 21:23 332 + -63475386, // 1949 Nov 20, 07:29 333 + -63220704, // 1949 Dec 19, 18:56 334 + -62965440, // 1950 Jan 18, 08:00 335 + -62709522, // 1950 Feb 16, 22:53 336 + -62453040, // 1950 Mar 18, 15:20 337 + -62196330, // 1950 Apr 17, 08:25 338 + -61939830, // 1950 May 17, 00:55 339 + -61683882, // 1950 Jun 15, 15:53 340 + -61428564, // 1950 Jul 15, 05:06 341 + -61173792, // 1950 Aug 13, 16:48 342 + -60919386, // 1950 Sep 12, 03:29 343 + -60665202, // 1950 Oct 11, 13:33 344 + -60411090, // 1950 Nov 9, 23:25 345 + -60156906, // 1950 Dec 9, 09:29 346 + -59902500, // 1951 Jan 7, 20:10 347 + -59647716, // 1951 Feb 6, 07:54 348 + -59392494, // 1951 Mar 7, 20:51 349 + -59136888, // 1951 Apr 6, 10:52 350 + -58881024, // 1951 May 6, 01:36 351 + -58625040, // 1951 Jun 4, 16:40 352 + -58369032, // 1951 Jul 4, 07:48 353 + -58113126, // 1951 Aug 2, 22:39 354 + -57857460, // 1951 Sep 1, 12:50 355 + -57602178, // 1951 Oct 1, 01:57 356 + -57347316, // 1951 Oct 30, 13:54 357 + -57092760, // 1951 Nov 29, 01:00 358 + -56838342, // 1951 Dec 28, 11:43 359 + -56583924, // 1952 Jan 26, 22:26 360 + -56329464, // 1952 Feb 25, 09:16 361 + -56074962, // 1952 Mar 25, 20:13 362 + -55820352, // 1952 Apr 24, 07:28 363 + -55565472, // 1952 May 23, 19:28 364 + -55310130, // 1952 Jun 22, 08:45 365 + -55054254, // 1952 Jul 21, 23:31 366 + -54797994, // 1952 Aug 20, 15:21 367 + -54541668, // 1952 Sep 19, 07:22 368 + -54285582, // 1952 Oct 18, 22:43 369 + -54029904, // 1952 Nov 17, 12:56 370 + -53774628, // 1952 Dec 17, 02:02 371 + -53519712, // 1953 Jan 15, 14:08 372 + -53265180, // 1953 Feb 14, 01:10 373 + -53011050, // 1953 Mar 15, 11:05 374 + -52757226, // 1953 Apr 13, 20:09 375 + -52503444, // 1953 May 13, 05:06 376 + -52249350, // 1953 Jun 11, 14:55 377 + -51994632, // 1953 Jul 11, 02:28 378 + -51739140, // 1953 Aug 9, 16:10 379 + -51482952, // 1953 Sep 8, 07:48 380 + -51226314, // 1953 Oct 8, 00:41 381 + -50969532, // 1953 Nov 6, 17:58 382 + -50712912, // 1953 Dec 6, 10:48 383 + -50456754, // 1954 Jan 5, 02:21 384 + -50201310, // 1954 Feb 3, 15:55 385 + -49946694, // 1954 Mar 5, 03:11 386 + -49692810, // 1954 Apr 3, 12:25 387 + -49439382, // 1954 May 2, 20:23 388 + -49186062, // 1954 Jun 1, 04:03 389 + -48932484, // 1954 Jun 30, 12:26 390 + -48678360, // 1954 Jul 29, 22:20 391 + -48423474, // 1954 Aug 28, 10:21 392 + -48167694, // 1954 Sep 27, 00:51 393 + -47911038, // 1954 Oct 26, 17:47 394 + -47653734, // 1954 Nov 25, 12:31 395 + -47396316, // 1954 Dec 25, 07:34 396 + -47139438, // 1955 Jan 24, 01:07 397 + -46883556, // 1955 Feb 22, 15:54 398 + -46628748, // 1955 Mar 24, 03:42 399 + -46374804, // 1955 Apr 22, 13:06 400 + -46121406, // 1955 May 21, 20:59 401 + -45868248, // 1955 Jun 20, 04:12 402 + -45615036, // 1955 Jul 19, 11:34 403 + -45361452, // 1955 Aug 17, 19:58 404 + -45107166, // 1955 Sep 16, 06:19 405 + -44851848, // 1955 Oct 15, 19:32 406 + -44595348, // 1955 Nov 14, 12:02 407 + -44337918, // 1955 Dec 14, 07:07 408 + -44080194, // 1956 Jan 13, 03:01 409 + -43822932, // 1956 Feb 11, 21:38 410 + -43566618, // 1956 Mar 12, 13:37 411 + -43311366, // 1956 Apr 11, 02:39 412 + -43057056, // 1956 May 10, 13:04 413 + -42803466, // 1956 Jun 8, 21:29 414 + -42550332, // 1956 Jul 8, 04:38 415 + -42297330, // 1956 Aug 6, 11:25 416 + -42044058, // 1956 Sep 4, 18:57 417 + -41790090, // 1956 Oct 4, 04:25 418 + -41535096, // 1956 Nov 2, 16:44 419 + -41278962, // 1956 Dec 2, 08:13 420 + -41021916, // 1957 Jan 1, 02:14 421 + -40764450, // 1957 Jan 30, 21:25 422 + -40507122, // 1957 Mar 1, 16:13 423 + -40250406, // 1957 Mar 31, 09:19 424 + -39994596, // 1957 Apr 29, 23:54 425 + -39739806, // 1957 May 29, 11:39 426 + -39485916, // 1957 Jun 27, 20:54 427 + -39232632, // 1957 Jul 27, 04:28 428 + -38979522, // 1957 Aug 25, 11:33 429 + -38726166, // 1957 Sep 23, 19:19 430 + -38472222, // 1957 Oct 23, 04:43 431 + -38217486, // 1957 Nov 21, 16:19 432 + -37961928, // 1957 Dec 21, 06:12 433 + -37705632, // 1958 Jan 19, 22:08 434 + -37448772, // 1958 Feb 18, 15:38 435 + -37191660, // 1958 Mar 20, 09:50 436 + -36934782, // 1958 Apr 19, 03:23 437 + -36678600, // 1958 May 18, 19:00 438 + -36423366, // 1958 Jun 17, 07:59 439 + -36169002, // 1958 Jul 16, 18:33 440 + -35915202, // 1958 Aug 15, 03:33 441 + -35661588, // 1958 Sep 13, 12:02 442 + -35407848, // 1958 Oct 12, 20:52 443 + -35153796, // 1958 Nov 11, 06:34 444 + -34899342, // 1958 Dec 10, 17:23 445 + -34644396, // 1959 Jan 9, 05:34 446 + -34388868, // 1959 Feb 7, 19:22 447 + -34132734, // 1959 Mar 9, 10:51 448 + -33876186, // 1959 Apr 8, 03:29 449 + -33619608, // 1959 May 7, 20:12 450 + -33363402, // 1959 Jun 6, 11:53 451 + -33107760, // 1959 Jul 6, 02:00 452 + -32852676, // 1959 Aug 4, 14:34 453 + -32598030, // 1959 Sep 3, 01:55 454 + -32343654, // 1959 Oct 2, 12:31 455 + -32089434, // 1959 Oct 31, 22:41 456 + -31835244, // 1959 Nov 30, 08:46 457 + -31580946, // 1959 Dec 29, 19:09 458 + -31326390, // 1960 Jan 28, 06:15 459 + -31071462, // 1960 Feb 26, 18:23 460 + -30816138, // 1960 Mar 27, 07:37 461 + -30560496, // 1960 Apr 25, 21:44 462 + -30304644, // 1960 May 25, 12:26 463 + -30048678, // 1960 Jun 24, 03:27 464 + -29792694, // 1960 Jul 23, 18:31 465 + -29536830, // 1960 Aug 22, 09:15 466 + -29281242, // 1960 Sep 20, 23:13 467 + -29026068, // 1960 Oct 20, 12:02 468 + -28771284, // 1960 Nov 18, 23:46 469 + -28516758, // 1960 Dec 18, 10:47 470 + -28262340, // 1961 Jan 16, 21:30 471 + -28007940, // 1961 Feb 15, 08:10 472 + -27753534, // 1961 Mar 16, 18:51 473 + -27499092, // 1961 Apr 15, 05:38 474 + -27244476, // 1961 May 14, 16:54 475 + -26989464, // 1961 Jun 13, 05:16 476 + -26733894, // 1961 Jul 12, 19:11 477 + -26477784, // 1961 Aug 11, 10:36 478 + -26221380, // 1961 Sep 10, 02:50 479 + -25965042, // 1961 Oct 9, 18:53 480 + -25709052, // 1961 Nov 8, 09:58 481 + -25453488, // 1961 Dec 7, 23:52 482 + -25198350, // 1962 Jan 6, 12:35 483 + -24943620, // 1962 Feb 5, 00:10 484 + -24689334, // 1962 Mar 6, 10:31 485 + -24435450, // 1962 Apr 4, 19:45 486 + -24181770, // 1962 May 4, 04:25 487 + -23927958, // 1962 Jun 2, 13:27 488 + -23673648, // 1962 Jul 1, 23:52 489 + -23418576, // 1962 Jul 31, 12:24 490 + -23162706, // 1962 Aug 30, 03:09 491 + -22906206, // 1962 Sep 28, 19:39 492 + -22649370, // 1962 Oct 28, 13:05 493 + -22392546, // 1962 Nov 27, 06:29 494 + -22136046, // 1962 Dec 26, 22:59 495 + -21880188, // 1963 Jan 25, 13:42 496 + -21625164, // 1963 Feb 24, 02:06 497 + -21370986, // 1963 Mar 25, 12:09 498 + -21117432, // 1963 Apr 23, 20:28 499 + -20864160, // 1963 May 23, 04:00 500 + -20610804, // 1963 Jun 21, 11:46 501 + -20357022, // 1963 Jul 20, 20:43 502 + -20102556, // 1963 Aug 19, 07:34 503 + -19847214, // 1963 Sep 17, 20:51 504 + -19590942, // 1963 Oct 17, 12:43 505 + -19333860, // 1963 Nov 16, 06:50 506 + -19076364, // 1963 Dec 16, 02:06 507 + -18819096, // 1964 Jan 14, 20:44 508 + -18562674, // 1964 Feb 13, 13:01 509 + -18307356, // 1964 Mar 14, 02:14 510 + -18053052, // 1964 Apr 12, 12:38 511 + -17799468, // 1964 May 11, 21:02 512 + -17546268, // 1964 Jun 10, 04:22 513 + -17293134, // 1964 Jul 9, 11:31 514 + -17039778, // 1964 Aug 7, 19:17 515 + -16785876, // 1964 Sep 6, 04:34 516 + -16531080, // 1964 Oct 5, 16:20 517 + -16275144, // 1964 Nov 4, 07:16 518 + -16018092, // 1964 Dec 4, 01:18 519 + -15760398, // 1965 Jan 2, 21:07 520 + -15502824, // 1965 Feb 1, 16:36 521 + -15246024, // 1965 Mar 3, 09:56 522 + -14990274, // 1965 Apr 2, 00:21 523 + -14735544, // 1965 May 1, 11:56 524 + -14481642, // 1965 May 30, 21:13 525 + -14228322, // 1965 Jun 29, 04:53 526 + -13975290, // 1965 Jul 28, 11:45 527 + -13722174, // 1965 Aug 26, 18:51 528 + -13468572, // 1965 Sep 25, 03:18 529 + -13214088, // 1965 Oct 24, 14:12 530 + -12958500, // 1965 Nov 23, 04:10 531 + -12701862, // 1965 Dec 22, 21:03 532 + -12444558, // 1966 Jan 21, 15:47 533 + -12187146, // 1966 Feb 20, 10:49 534 + -11930124, // 1966 Mar 22, 04:46 535 + -11673870, // 1966 Apr 20, 20:35 536 + -11418582, // 1966 May 20, 09:43 537 + -11164266, // 1966 Jun 18, 20:09 538 + -10910700, // 1966 Jul 18, 04:30 539 + -10657512, // 1966 Aug 16, 11:48 540 + -10404282, // 1966 Sep 14, 19:13 541 + -10150608, // 1966 Oct 14, 03:52 542 + -9896238, // 1966 Nov 12, 14:27 543 + -9641076, // 1966 Dec 12, 03:14 544 + -9385164, // 1967 Jan 10, 18:06 545 + -9128616, // 1967 Feb 9, 10:44 546 + -8871660, // 1967 Mar 11, 04:30 547 + -8614680, // 1967 Apr 9, 22:20 548 + -8358150, // 1967 May 9, 14:55 549 + -8102436, // 1967 Jun 8, 05:14 550 + -7847640, // 1967 Jul 7, 17:00 551 + -7593552, // 1967 Aug 6, 02:48 552 + -7339818, // 1967 Sep 4, 11:37 553 + -7086096, // 1967 Oct 3, 20:24 554 + -6832152, // 1967 Nov 2, 05:48 555 + -6577860, // 1967 Dec 1, 16:10 556 + -6323166, // 1967 Dec 31, 03:39 557 + -6067980, // 1968 Jan 29, 16:30 558 + -5812224, // 1968 Feb 28, 06:56 559 + -5555952, // 1968 Mar 28, 22:48 560 + -5299434, // 1968 Apr 27, 15:21 561 + -5043060, // 1968 May 27, 07:30 562 + -4787130, // 1968 Jun 25, 22:25 563 + -4531740, // 1968 Jul 25, 11:50 564 + -4276818, // 1968 Aug 23, 23:57 565 + -4022232, // 1968 Sep 22, 11:08 566 + -3767856, // 1968 Oct 21, 21:44 567 + -3513588, // 1968 Nov 20, 08:02 568 + -3259326, // 1968 Dec 19, 18:19 569 + -3004926, // 1969 Jan 18, 04:59 570 + -2750250, // 1969 Feb 16, 16:25 571 + -2495208, // 1969 Mar 18, 04:52 572 + -2239824, // 1969 Apr 16, 18:16 573 + -1984164, // 1969 May 16, 08:26 574 + -1728306, // 1969 Jun 14, 23:09 575 + -1472328, // 1969 Jul 14, 14:12 576 + -1216338, // 1969 Aug 13, 05:17 577 + -960504, // 1969 Sep 11, 19:56 578 + -705006, // 1969 Oct 11, 09:39 579 + -449934, // 1969 Nov 9, 22:11 580 + -195228, // 1969 Dec 9, 09:42 581 + 59250, // 1970 Jan 7, 20:35 582 + 313638, // 1970 Feb 6, 07:13 583 + 567978, // 1970 Mar 7, 17:43 584 + 822300, // 1970 Apr 6, 04:10 585 + 1076706, // 1970 May 5, 14:51 586 + 1331406, // 1970 Jun 4, 02:21 587 + 1586628, // 1970 Jul 3, 15:18 588 + 1842468, // 1970 Aug 2, 05:58 589 + 2098812, // 1970 Aug 31, 22:02 590 + 2355312, // 1970 Sep 30, 14:32 591 + 2611608, // 1970 Oct 30, 06:28 592 + 2867484, // 1970 Nov 28, 21:14 593 + 3122892, // 1970 Dec 28, 10:42 594 + 3377850, // 1971 Jan 26, 22:55 595 + 3632328, // 1971 Feb 25, 09:48 596 + 3886338, // 1971 Mar 26, 19:23 597 + 4140012, // 1971 Apr 25, 04:02 598 + 4393632, // 1971 May 24, 12:32 599 + 4647582, // 1971 Jun 22, 21:57 600 + 4902210, // 1971 Jul 22, 09:15 601 + 5157678, // 1971 Aug 20, 22:53 602 + 5413938, // 1971 Sep 19, 14:43 603 + 5670714, // 1971 Oct 19, 07:59 604 + 5927676, // 1971 Nov 18, 01:46 605 + 6184458, // 1971 Dec 17, 19:03 606 + 6440712, // 1972 Jan 16, 10:52 607 + 6696174, // 1972 Feb 15, 00:29 608 + 6950730, // 1972 Mar 15, 11:35 609 + 7204506, // 1972 Apr 13, 20:31 610 + 7457808, // 1972 May 13, 04:08 611 + 7711020, // 1972 Jun 11, 11:30 612 + 7964514, // 1972 Jul 10, 19:39 613 + 8218596, // 1972 Aug 9, 05:26 614 + 8473488, // 1972 Sep 7, 17:28 615 + 8729328, // 1972 Oct 7, 08:08 616 + 8986086, // 1972 Nov 6, 01:21 617 + 9243504, // 1972 Dec 5, 20:24 618 + 9501018, // 1973 Jan 4, 15:43 619 + 9757938, // 1973 Feb 3, 09:23 620 + 10013802, // 1973 Mar 5, 00:07 621 + 10268550, // 1973 Apr 3, 11:45 622 + 10522410, // 1973 May 2, 20:55 623 + 10775724, // 1973 Jun 1, 04:34 624 + 11028834, // 1973 Jun 30, 11:39 625 + 11282034, // 1973 Jul 29, 18:59 626 + 11535630, // 1973 Aug 28, 03:25 627 + 11789964, // 1973 Sep 26, 13:54 628 + 12045342, // 1973 Oct 26, 03:17 629 + 12301890, // 1973 Nov 24, 19:55 630 + 12559362, // 1973 Dec 24, 15:07 631 + 12817092, // 1974 Jan 23, 11:02 632 + 13074324, // 1974 Feb 22, 05:34 633 + 13330584, // 1974 Mar 23, 21:24 634 + 13585782, // 1974 Apr 22, 10:17 635 + 13840044, // 1974 May 21, 20:34 636 + 14093616, // 1974 Jun 20, 04:56 637 + 14346756, // 1974 Jul 19, 12:06 638 + 14599806, // 1974 Aug 17, 19:01 639 + 14853150, // 1974 Sep 16, 02:45 640 + 15107190, // 1974 Oct 15, 12:25 641 + 15362238, // 1974 Nov 14, 00:53 642 + 15618390, // 1974 Dec 13, 16:25 643 + 15875400, // 1975 Jan 12, 10:20 644 + 16132782, // 1975 Feb 11, 05:17 645 + 16390008, // 1975 Mar 12, 23:48 646 + 16646634, // 1975 Apr 11, 16:39 647 + 16902390, // 1975 May 11, 07:05 648 + 17157174, // 1975 Jun 9, 18:49 649 + 17411100, // 1975 Jul 9, 04:10 650 + 17664462, // 1975 Aug 7, 11:57 651 + 17917668, // 1975 Sep 5, 19:18 652 + 18171138, // 1975 Oct 5, 03:23 653 + 18425184, // 1975 Nov 3, 13:04 654 + 18679980, // 1975 Dec 3, 00:50 655 + 18935520, // 1976 Jan 1, 14:40 656 + 19191720, // 1976 Jan 31, 06:20 657 + 19448430, // 1976 Feb 29, 23:25 658 + 19705368, // 1976 Mar 30, 17:08 659 + 19962120, // 1976 Apr 29, 10:20 660 + 20218242, // 1976 May 29, 01:47 661 + 20473500, // 1976 Jun 27, 14:50 662 + 20727954, // 1976 Jul 27, 01:39 663 + 20981880, // 1976 Aug 25, 11:00 664 + 21235650, // 1976 Sep 23, 19:55 665 + 21489540, // 1976 Oct 23, 05:10 666 + 21743706, // 1976 Nov 21, 15:11 667 + 21998208, // 1976 Dec 21, 02:08 668 + 22253106, // 1977 Jan 19, 14:11 669 + 22508502, // 1977 Feb 18, 03:37 670 + 22764438, // 1977 Mar 19, 18:33 671 + 23020776, // 1977 Apr 18, 10:36 672 + 23277192, // 1977 May 18, 02:52 673 + 23533338, // 1977 Jun 16, 18:23 674 + 23789022, // 1977 Jul 16, 08:37 675 + 24044226, // 1977 Aug 14, 21:31 676 + 24299058, // 1977 Sep 13, 09:23 677 + 24553626, // 1977 Oct 12, 20:31 678 + 24808020, // 1977 Nov 11, 07:10 679 + 25062318, // 1977 Dec 10, 17:33 680 + 25316640, // 1978 Jan 9, 04:00 681 + 25571124, // 1978 Feb 7, 14:54 682 + 25825896, // 1978 Mar 9, 02:36 683 + 26081010, // 1978 Apr 7, 15:15 684 + 26336442, // 1978 May 7, 04:47 685 + 26592132, // 1978 Jun 5, 19:02 686 + 26848026, // 1978 Jul 5, 09:51 687 + 27104046, // 1978 Aug 4, 01:01 688 + 27360054, // 1978 Sep 2, 16:09 689 + 27615846, // 1978 Oct 2, 06:41 690 + 27871236, // 1978 Oct 31, 20:06 691 + 28126194, // 1978 Nov 30, 08:19 692 + 28380816, // 1978 Dec 29, 19:36 693 + 28635234, // 1979 Jan 28, 06:19 694 + 28889550, // 1979 Feb 26, 16:45 695 + 29143794, // 1979 Mar 28, 02:59 696 + 29398050, // 1979 Apr 26, 13:15 697 + 29652480, // 1979 May 26, 00:00 698 + 29907348, // 1979 Jun 24, 11:58 699 + 30162846, // 1979 Jul 24, 01:41 700 + 30418986, // 1979 Aug 22, 17:11 701 + 30675522, // 1979 Sep 21, 09:47 702 + 30932058, // 1979 Oct 21, 02:23 703 + 31188264, // 1979 Nov 19, 18:04 704 + 31443978, // 1979 Dec 19, 08:23 705 + 31699200, // 1980 Jan 17, 21:20 706 + 31953906, // 1980 Feb 16, 08:51 707 + 32208096, // 1980 Mar 16, 18:56 708 + 32461836, // 1980 Apr 15, 03:46 709 + 32715360, // 1980 May 14, 12:00 710 + 32969034, // 1980 Jun 12, 20:39 711 + 33223236, // 1980 Jul 12, 06:46 712 + 33478260, // 1980 Aug 10, 19:10 713 + 33734166, // 1980 Sep 9, 10:01 714 + 33990780, // 1980 Oct 9, 02:50 715 + 34247778, // 1980 Nov 7, 20:43 716 + 34504770, // 1980 Dec 7, 14:35 717 + 34761384, // 1981 Jan 6, 07:24 718 + 35017284, // 1981 Feb 4, 22:14 719 + 35272266, // 1981 Mar 6, 10:31 720 + 35526360, // 1981 Apr 4, 20:20 721 + 35779794, // 1981 May 4, 04:19 722 + 36032952, // 1981 Jun 2, 11:32 723 + 36286218, // 1981 Jul 1, 19:03 724 + 36539952, // 1981 Jul 31, 03:52 725 + 36794424, // 1981 Aug 29, 14:44 726 + 37049808, // 1981 Sep 28, 04:08 727 + 37306164, // 1981 Oct 27, 20:14 728 + 37563348, // 1981 Nov 26, 14:38 729 + 37820940, // 1981 Dec 26, 10:10 730 + 38078256, // 1982 Jan 25, 04:56 731 + 38334684, // 1982 Feb 23, 21:14 732 + 38589948, // 1982 Mar 25, 10:18 733 + 38844174, // 1982 Apr 23, 20:29 734 + 39097686, // 1982 May 23, 04:41 735 + 39350832, // 1982 Jun 21, 11:52 736 + 39603942, // 1982 Jul 20, 18:57 737 + 39857310, // 1982 Aug 19, 02:45 738 + 40111254, // 1982 Sep 17, 12:09 739 + 40366104, // 1982 Oct 17, 00:04 740 + 40622100, // 1982 Nov 15, 15:10 741 + 40879188, // 1982 Dec 15, 09:18 742 + 41136888, // 1983 Jan 14, 05:08 743 + 41394432, // 1983 Feb 13, 00:32 744 + 41651184, // 1983 Mar 14, 17:44 745 + 41906874, // 1983 Apr 13, 07:59 746 + 42161550, // 1983 May 12, 19:25 747 + 42415428, // 1983 Jun 11, 04:38 748 + 42668754, // 1983 Jul 10, 12:19 749 + 42921828, // 1983 Aug 8, 19:18 750 + 43175010, // 1983 Sep 7, 02:35 751 + 43428696, // 1983 Oct 6, 11:16 752 + 43683246, // 1983 Nov 4, 22:21 753 + 43938876, // 1983 Dec 4, 12:26 754 + 44195496, // 1984 Jan 3, 05:16 755 + 44452722, // 1984 Feb 1, 23:47 756 + 44710026, // 1984 Mar 2, 18:31 757 + 44966940, // 1984 Apr 1, 12:10 758 + 45223116, // 1984 May 1, 03:46 759 + 45478368, // 1984 May 30, 16:48 760 + 45732714, // 1984 Jun 29, 03:19 761 + 45986346, // 1984 Jul 28, 11:51 762 + 46239636, // 1984 Aug 26, 19:26 763 + 46492986, // 1984 Sep 25, 03:11 764 + 46746768, // 1984 Oct 24, 12:08 765 + 47001222, // 1984 Nov 22, 22:57 766 + 47256402, // 1984 Dec 22, 11:47 767 + 47512248, // 1985 Jan 21, 02:28 768 + 47768658, // 1985 Feb 19, 18:43 769 + 48025434, // 1985 Mar 21, 11:59 770 + 48282252, // 1985 Apr 20, 05:22 771 + 48538686, // 1985 May 19, 21:41 772 + 48794388, // 1985 Jun 18, 11:58 773 + 49049262, // 1985 Jul 17, 23:57 774 + 49303476, // 1985 Aug 16, 10:06 775 + 49557360, // 1985 Sep 14, 19:20 776 + 49811238, // 1985 Oct 14, 04:33 777 + 50065326, // 1985 Nov 12, 14:21 778 + 50319690, // 1985 Dec 12, 00:55 779 + 50574372, // 1986 Jan 10, 12:22 780 + 50829456, // 1986 Feb 9, 00:56 781 + 51085032, // 1986 Mar 10, 14:52 782 + 51341088, // 1986 Apr 9, 06:08 783 + 51597420, // 1986 May 8, 22:10 784 + 51853686, // 1986 Jun 7, 14:01 785 + 52109610, // 1986 Jul 7, 04:55 786 + 52365096, // 1986 Aug 5, 18:36 787 + 52620186, // 1986 Sep 4, 07:11 788 + 52874970, // 1986 Oct 3, 18:55 789 + 53129532, // 1986 Nov 2, 06:02 790 + 53383938, // 1986 Dec 1, 16:43 791 + 53638260, // 1986 Dec 31, 03:10 792 + 53892630, // 1987 Jan 29, 13:45 793 + 54147186, // 1987 Feb 28, 00:51 794 + 54402036, // 1987 Mar 29, 12:46 795 + 54657204, // 1987 Apr 28, 01:34 796 + 54912678, // 1987 May 27, 15:13 797 + 55168422, // 1987 Jun 26, 05:37 798 + 55424388, // 1987 Jul 25, 20:38 799 + 55680474, // 1987 Aug 24, 11:59 800 + 55936494, // 1987 Sep 23, 03:09 801 + 56192208, // 1987 Oct 22, 17:28 802 + 56447478, // 1987 Nov 21, 06:33 803 + 56702310, // 1987 Dec 20, 18:25 804 + 56956836, // 1988 Jan 19, 05:26 805 + 57211164, // 1988 Feb 17, 15:54 806 + 57465372, // 1988 Mar 18, 02:02 807 + 57719520, // 1988 Apr 16, 12:00 808 + 57973746, // 1988 May 15, 22:11 809 + 58228284, // 1988 Jun 14, 09:14 810 + 58483398, // 1988 Jul 13, 21:53 811 + 58739226, // 1988 Aug 12, 12:31 812 + 58995660, // 1988 Sep 11, 04:50 813 + 59252334, // 1988 Oct 10, 21:49 814 + 59508840, // 1988 Nov 9, 14:20 815 + 59764896, // 1988 Dec 9, 05:36 816 + 60020412, // 1989 Jan 7, 19:22 817 + 60275382, // 1989 Feb 6, 07:37 818 + 60529794, // 1989 Mar 7, 18:19 819 + 60783678, // 1989 Apr 6, 03:33 820 + 61037202, // 1989 May 5, 11:47 821 + 61290678, // 1989 Jun 3, 19:53 822 + 61544514, // 1989 Jul 3, 04:59 823 + 61799076, // 1989 Aug 1, 16:06 824 + 62054550, // 1989 Aug 31, 05:45 825 + 62310888, // 1989 Sep 29, 21:48 826 + 62567808, // 1989 Oct 29, 15:28 827 + 62824926, // 1989 Nov 28, 09:41 828 + 63081840, // 1989 Dec 28, 03:20 829 + 63338160, // 1990 Jan 26, 19:20 830 + 63593610, // 1990 Feb 25, 08:55 831 + 63848088, // 1990 Mar 26, 19:48 832 + 64101768, // 1990 Apr 25, 04:28 833 + 64354962, // 1990 May 24, 11:47 834 + 64608090, // 1990 Jun 22, 18:55 835 + 64861524, // 1990 Jul 22, 02:54 836 + 65115594, // 1990 Aug 20, 12:39 837 + 65370516, // 1990 Sep 19, 00:46 838 + 65626422, // 1990 Oct 18, 15:37 839 + 65883270, // 1990 Nov 17, 09:05 840 + 66140772, // 1990 Dec 17, 04:22 841 + 66398340, // 1991 Jan 15, 23:50 842 + 66655272, // 1991 Feb 14, 17:32 843 + 66911106, // 1991 Mar 16, 08:11 844 + 67165788, // 1991 Apr 14, 19:38 845 + 67419576, // 1991 May 14, 04:36 846 + 67672836, // 1991 Jun 12, 12:06 847 + 67925916, // 1991 Jul 11, 19:06 848 + 68179122, // 1991 Aug 10, 02:27 849 + 68432766, // 1991 Sep 8, 11:01 850 + 68687154, // 1991 Oct 7, 21:39 851 + 68942586, // 1991 Nov 6, 11:11 852 + 69199176, // 1991 Dec 6, 03:56 853 + 69456660, // 1992 Jan 4, 23:10 854 + 69714360, // 1992 Feb 3, 19:00 855 + 69971538, // 1992 Mar 4, 13:23 856 + 70227732, // 1992 Apr 3, 05:02 857 + 70482870, // 1992 May 2, 17:45 858 + 70737102, // 1992 Jun 1, 03:57 859 + 70990668, // 1992 Jun 30, 12:18 860 + 71243850, // 1992 Jul 29, 19:35 861 + 71496972, // 1992 Aug 28, 02:42 862 + 71750400, // 1992 Sep 26, 10:40 863 + 72004524, // 1992 Oct 25, 20:34 864 + 72259626, // 1992 Nov 24, 09:11 865 + 72515778, // 1992 Dec 24, 00:43 866 + 72772722, // 1993 Jan 22, 18:27 867 + 73029996, // 1993 Feb 21, 13:06 868 + 73287090, // 1993 Mar 23, 07:15 869 + 73543614, // 1993 Apr 21, 23:49 870 + 73799322, // 1993 May 21, 14:07 871 + 74054118, // 1993 Jun 20, 01:53 872 + 74308104, // 1993 Jul 19, 11:24 873 + 74561568, // 1993 Aug 17, 19:28 874 + 74814900, // 1993 Sep 16, 03:10 875 + 75068496, // 1993 Oct 15, 11:36 876 + 75322644, // 1993 Nov 13, 21:34 877 + 75577482, // 1993 Dec 13, 09:27 878 + 75832980, // 1994 Jan 11, 23:10 879 + 76089060, // 1994 Feb 10, 14:30 880 + 76345590, // 1994 Mar 12, 07:05 881 + 76602342, // 1994 Apr 11, 00:17 882 + 76858962, // 1994 May 10, 17:07 883 + 77115042, // 1994 Jun 9, 08:27 884 + 77370342, // 1994 Jul 8, 21:37 885 + 77624910, // 1994 Aug 7, 08:45 886 + 77878998, // 1994 Sep 5, 18:33 887 + 78132930, // 1994 Oct 5, 03:55 888 + 78386970, // 1994 Nov 3, 13:35 889 + 78641244, // 1994 Dec 2, 23:54 890 + 78895770, // 1995 Jan 1, 10:55 891 + 79150608, // 1995 Jan 30, 22:48 892 + 79405848, // 1995 Mar 1, 11:48 893 + 79661568, // 1995 Mar 31, 02:08 894 + 79917696, // 1995 Apr 29, 17:36 895 + 80173962, // 1995 May 29, 09:27 896 + 80430060, // 1995 Jun 28, 00:50 897 + 80685798, // 1995 Jul 27, 15:13 898 + 80941146, // 1995 Aug 26, 04:31 899 + 81196170, // 1995 Sep 24, 16:55 900 + 81450936, // 1995 Oct 24, 04:36 901 + 81705498, // 1995 Nov 22, 15:43 902 + 81959892, // 1995 Dec 22, 02:22 903 + 82214220, // 1996 Jan 20, 12:50 904 + 82468620, // 1996 Feb 18, 23:30 905 + 82723230, // 1996 Mar 19, 10:45 906 + 82978134, // 1996 Apr 17, 22:49 907 + 83233356, // 1996 May 17, 11:46 908 + 83488896, // 1996 Jun 16, 01:36 909 + 83744730, // 1996 Jul 15, 16:15 910 + 84000804, // 1996 Aug 14, 07:34 911 + 84256968, // 1996 Sep 12, 23:08 912 + 84512970, // 1996 Oct 12, 14:15 913 + 84768576, // 1996 Nov 11, 04:16 914 + 85023696, // 1996 Dec 10, 16:56 915 + 85278396, // 1997 Jan 9, 04:26 916 + 85532796, // 1997 Feb 7, 15:06 917 + 85787004, // 1997 Mar 9, 01:14 918 + 86041092, // 1997 Apr 7, 11:02 919 + 86295162, // 1997 May 6, 20:47 920 + 86549424, // 1997 Jun 5, 07:04 921 + 86804160, // 1997 Jul 4, 18:40 922 + 87059604, // 1997 Aug 3, 08:14 923 + 87315792, // 1997 Sep 1, 23:52 924 + 87572472, // 1997 Oct 1, 16:52 925 + 87829212, // 1997 Oct 31, 10:02 926 + 88085604, // 1997 Nov 30, 02:14 927 + 88341462, // 1997 Dec 29, 16:57 928 + 88596726, // 1998 Jan 28, 06:01 929 + 88851396, // 1998 Feb 26, 17:26 930 + 89105484, // 1998 Mar 28, 03:14 931 + 89359086, // 1998 Apr 26, 11:41 932 + 89612472, // 1998 May 25, 19:32 933 + 89866020, // 1998 Jun 24, 03:50 934 + 90120144, // 1998 Jul 23, 13:44 935 + 90375138, // 1998 Aug 22, 02:03 936 + 90631092, // 1998 Sep 20, 17:02 937 + 90887820, // 1998 Oct 20, 10:10 938 + 91144962, // 1998 Nov 19, 04:27 939 + 91402098, // 1998 Dec 18, 22:43 940 + 91658796, // 1999 Jan 17, 15:46 941 + 91914714, // 1999 Feb 16, 06:39 942 + 92169648, // 1999 Mar 17, 18:48 943 + 92423652, // 1999 Apr 16, 04:22 944 + 92676990, // 1999 May 15, 12:05 945 + 92930058, // 1999 Jun 13, 19:03 946 + 93183264, // 1999 Jul 13, 02:24 947 + 93436974, // 1999 Aug 11, 11:09 948 + 93691452, // 1999 Sep 9, 22:02 949 + 93946890, // 1999 Oct 9, 11:35 950 + 94203318, // 1999 Nov 8, 03:53 951 + 94460592, // 1999 Dec 7, 22:32 952 + 94718244, // 2000 Jan 6, 18:14 953 + 94975584, // 2000 Feb 5, 13:04 954 + 95231982, // 2000 Mar 6, 05:17 955 + 95487192, // 2000 Apr 4, 18:12 956 + 95741352, // 2000 May 4, 04:12 957 + 95994804, // 2000 Jun 2, 12:14 958 + 96247920, // 2000 Jul 1, 19:20 959 + 96501030, // 2000 Jul 31, 02:25 960 + 96754434, // 2000 Aug 29, 10:19 961 + 97008438, // 2000 Sep 27, 19:53 962 + 97263348, // 2000 Oct 27, 07:58 963 + 97519392, // 2000 Nov 25, 23:12 964 + 97776492, // 2000 Dec 25, 17:22 965 + 98034162, // 2001 Jan 24, 13:07 966 + 98291652, // 2001 Feb 23, 08:22 967 + 98548332, // 2001 Mar 25, 01:22 968 + 98803956, // 2001 Apr 23, 15:26 969 + 99058602, // 2001 May 23, 02:47 970 + 99312468, // 2001 Jun 21, 11:58 971 + 99565830, // 2001 Jul 20, 19:45 972 + 99818970, // 2001 Aug 19, 02:55 973 + 100072248, // 2001 Sep 17, 10:28 974 + 100326024, // 2001 Oct 16, 19:24 975 + 100580640, // 2001 Nov 15, 06:40 976 + 100836288, // 2001 Dec 14, 20:48 977 + 101092854, // 2002 Jan 13, 13:29 978 + 101349966, // 2002 Feb 12, 07:41 979 + 101607138, // 2002 Mar 14, 02:03 980 + 101863926, // 2002 Apr 12, 19:21 981 + 102120030, // 2002 May 12, 10:45 982 + 102375282, // 2002 Jun 10, 23:47 983 + 102629676, // 2002 Jul 10, 10:26 984 + 102883410, // 2002 Aug 8, 19:15 985 + 103136820, // 2002 Sep 7, 03:10 986 + 103390308, // 2002 Oct 6, 11:18 987 + 103644210, // 2002 Nov 4, 20:35 988 + 103898730, // 2002 Dec 4, 07:35 989 + 104153898, // 2003 Jan 2, 20:23 990 + 104409654, // 2003 Feb 1, 10:49 991 + 104665890, // 2003 Mar 3, 02:35 992 + 104922468, // 2003 Apr 1, 19:18 993 + 105179130, // 2003 May 1, 12:15 994 + 105435480, // 2003 May 31, 04:20 995 + 105691194, // 2003 Jun 29, 18:39 996 + 105946158, // 2003 Jul 29, 06:53 997 + 106200516, // 2003 Aug 27, 17:26 998 + 106454574, // 2003 Sep 26, 03:09 999 + 106708620, // 2003 Oct 25, 12:50 1000 + 106962834, // 2003 Nov 23, 22:59 1001 + 107217258, // 2003 Dec 23, 09:43 1002 + 107471910, // 2004 Jan 21, 21:05 1003 + 107726868, // 2004 Feb 20, 09:18 1004 + 107982246, // 2004 Mar 20, 22:41 1005 + 108238086, // 2004 Apr 19, 13:21 1006 + 108494232, // 2004 May 19, 04:52 1007 + 108750402, // 2004 Jun 17, 20:27 1008 + 109006344, // 2004 Jul 17, 11:24 1009 + 109261944, // 2004 Aug 16, 01:24 1010 + 109517214, // 2004 Sep 14, 14:29 1011 + 109772208, // 2004 Oct 14, 02:48 1012 + 110026962, // 2004 Nov 12, 14:27 1013 + 110281494, // 2004 Dec 12, 01:29 1014 + 110535858, // 2005 Jan 10, 12:03 1015 + 110790168, // 2005 Feb 8, 22:28 1016 + 111044586, // 2005 Mar 10, 09:11 1017 + 111299232, // 2005 Apr 8, 20:32 1018 + 111554190, // 2005 May 8, 08:45 1019 + 111809490, // 2005 Jun 6, 21:55 1020 + 112065138, // 2005 Jul 6, 12:03 1021 + 112321110, // 2005 Aug 5, 03:05 1022 + 112577316, // 2005 Sep 3, 18:46 1023 + 112833528, // 2005 Oct 3, 10:28 1024 + 113089470, // 2005 Nov 2, 01:25 1025 + 113344926, // 2005 Dec 1, 15:01 1026 + 113599872, // 2005 Dec 31, 03:12 1027 + 113854410, // 2006 Jan 29, 14:15 1028 + 114108666, // 2006 Feb 28, 00:31 1029 + 114362730, // 2006 Mar 29, 10:15 1030 + 114616704, // 2006 Apr 27, 19:44 1031 + 114870756, // 2006 May 27, 05:26 1032 + 115125150, // 2006 Jun 25, 16:05 1033 + 115380186, // 2006 Jul 25, 04:31 1034 + 115636020, // 2006 Aug 23, 19:10 1035 + 115892550, // 2006 Sep 22, 11:45 1036 + 116149404, // 2006 Oct 22, 05:14 1037 + 116406108, // 2006 Nov 20, 22:18 1038 + 116662326, // 2006 Dec 20, 14:01 1039 + 116917926, // 2007 Jan 19, 04:01 1040 + 117172884, // 2007 Feb 17, 16:14 1041 + 117427218, // 2007 Mar 19, 02:43 1042 + 117680976, // 2007 Apr 17, 11:36 1043 + 117934362, // 2007 May 16, 19:27 1044 + 118187718, // 2007 Jun 15, 03:13 1045 + 118441464, // 2007 Jul 14, 12:04 1046 + 118695972, // 2007 Aug 12, 23:02 1047 + 118951464, // 2007 Sep 11, 12:44 1048 + 119207886, // 2007 Oct 11, 05:01 1049 + 119464938, // 2007 Nov 9, 23:03 1050 + 119722200, // 2007 Dec 9, 17:40 1051 + 119979222, // 2008 Jan 8, 11:37 1052 + 120235584, // 2008 Feb 7, 03:44 1053 + 120491004, // 2008 Mar 7, 17:14 1054 + 120745410, // 2008 Apr 6, 03:55 1055 + 120998988, // 2008 May 5, 12:18 1056 + 121252098, // 2008 Jun 3, 19:23 1057 + 121505154, // 2008 Jul 3, 02:19 1058 + 121758552, // 2008 Aug 1, 10:12 1059 + 122012628, // 2008 Aug 30, 19:58 1060 + 122267592, // 2008 Sep 29, 08:12 1061 + 122523564, // 2008 Oct 28, 23:14 1062 + 122780490, // 2008 Nov 27, 16:55 1063 + 123038058, // 2008 Dec 27, 12:23 1064 + 123295656, // 2009 Jan 26, 07:56 1065 + 123552570, // 2009 Feb 25, 01:35 1066 + 123808356, // 2009 Mar 26, 16:06 1067 + 124062978, // 2009 Apr 25, 03:23 1068 + 124316706, // 2009 May 24, 12:11 1069 + 124569930, // 2009 Jun 22, 19:35 1070 + 124823010, // 2009 Jul 22, 02:35 1071 + 125076246, // 2009 Aug 20, 10:01 1072 + 125329944, // 2009 Sep 18, 18:44 1073 + 125584398, // 2009 Oct 18, 05:33 1074 + 125839884, // 2009 Nov 16, 19:14 1075 + 126096492, // 2009 Dec 16, 12:02 1076 + 126353952, // 2010 Jan 15, 07:12 1077 + 126611592, // 2010 Feb 14, 02:52 1078 + 126868686, // 2010 Mar 15, 21:01 1079 + 127124814, // 2010 Apr 14, 12:29 1080 + 127379910, // 2010 May 14, 01:05 1081 + 127634130, // 2010 Jun 12, 11:15 1082 + 127887726, // 2010 Jul 11, 19:41 1083 + 128140968, // 2010 Aug 10, 03:08 1084 + 128394180, // 2010 Sep 8, 10:30 1085 + 128647704, // 2010 Oct 7, 18:44 1086 + 128901912, // 2010 Nov 6, 04:52 1087 + 129157056, // 2010 Dec 5, 17:36 1088 + 129413178, // 2011 Jan 4, 09:03 1089 + 129670026, // 2011 Feb 3, 02:31 1090 + 129927156, // 2011 Mar 4, 20:46 1091 + 130184112, // 2011 Apr 3, 14:32 1092 + 130440546, // 2011 May 3, 06:51 1093 + 130696218, // 2011 Jun 1, 21:03 1094 + 130951044, // 2011 Jul 1, 08:54 1095 + 131205120, // 2011 Jul 30, 18:40 1096 + 131458704, // 2011 Aug 29, 03:04 1097 + 131712174, // 2011 Sep 27, 11:09 1098 + 131965896, // 2011 Oct 26, 19:56 1099 + 132220140, // 2011 Nov 25, 06:10 1100 + 132474996, // 2011 Dec 24, 18:06 1101 + 132730434, // 2012 Jan 23, 07:39 1102 + 132986370, // 2012 Feb 21, 22:35 1103 + 133242702, // 2012 Mar 22, 14:37 1104 + 133499274, // 2012 Apr 21, 07:19 1105 + 133755762, // 2012 May 20, 23:47 1106 + 134011818, // 2012 Jun 19, 15:03 1107 + 134267190, // 2012 Jul 19, 04:25 1108 + 134521890, // 2012 Aug 17, 15:55 1109 + 134776146, // 2012 Sep 16, 02:11 1110 + 135030258, // 2012 Oct 15, 12:03 1111 + 135284448, // 2012 Nov 13, 22:08 1112 + 135538812, // 2012 Dec 13, 08:42 1113 + 135793344, // 2013 Jan 11, 19:44 1114 + 136048080, // 2013 Feb 10, 07:20 1115 + 136303146, // 2013 Mar 11, 19:51 1116 + 136558656, // 2013 Apr 10, 09:36 1117 + 136814574, // 2013 May 10, 00:29 1118 + 137070702, // 2013 Jun 8, 15:57 1119 + 137326770, // 2013 Jul 8, 07:15 1120 + 137582586, // 2013 Aug 6, 21:51 1121 + 137838102, // 2013 Sep 5, 11:37 1122 + 138093330, // 2013 Oct 5, 00:35 1123 + 138348300, // 2013 Nov 3, 12:50 1124 + 138603018, // 2013 Dec 3, 00:23 1125 + 138857484, // 2014 Jan 1, 11:14 1126 + 139111794, // 2014 Jan 30, 21:39 1127 + 139366080, // 2014 Mar 1, 08:00 1128 + 139620510, // 2014 Mar 30, 18:45 1129 + 139875210, // 2014 Apr 29, 06:15 1130 + 140130240, // 2014 May 28, 18:40 1131 + 140385654, // 2014 Jun 27, 08:09 1132 + 140641452, // 2014 Jul 26, 22:42 1133 + 140897598, // 2014 Aug 25, 14:13 1134 + 141153924, // 2014 Sep 24, 06:14 1135 + 141410142, // 2014 Oct 23, 21:57 1136 + 141665958, // 2014 Nov 22, 12:33 1137 + 141921216, // 2014 Dec 22, 01:36 1138 + 142175964, // 2015 Jan 20, 13:14 1139 + 142430322, // 2015 Feb 18, 23:47 1140 + 142684416, // 2015 Mar 20, 09:36 1141 + 142938342, // 2015 Apr 18, 18:57 1142 + 143192238, // 2015 May 18, 04:13 1143 + 143446350, // 2015 Jun 16, 14:05 1144 + 143700990, // 2015 Jul 16, 01:25 1145 + 143956404, // 2015 Aug 14, 14:54 1146 + 144212652, // 2015 Sep 13, 06:42 1147 + 144469476, // 2015 Oct 13, 00:06 1148 + 144726408, // 2015 Nov 11, 17:48 1149 + 144982980, // 2015 Dec 11, 10:30 1150 + 145238946, // 2016 Jan 10, 01:31 1151 + 145494234, // 2016 Feb 8, 14:39 1152 + 145748850, // 2016 Mar 9, 01:55 1153 + 146002824, // 2016 Apr 7, 11:24 1154 + 146256300, // 2016 May 6, 19:30 1155 + 146509560, // 2016 Jun 5, 03:00 1156 + 146763006, // 2016 Jul 4, 11:01 1157 + 147017070, // 2016 Aug 2, 20:45 1158 + 147272064, // 2016 Sep 1, 09:04 1159 + 147528072, // 2016 Oct 1, 00:12 1160 + 147784914, // 2016 Oct 30, 17:39 1161 + 148042194, // 2016 Nov 29, 12:19 1162 + 148299444, // 2016 Dec 29, 06:54 1163 + 148556202, // 2017 Jan 28, 00:07 1164 + 148812114, // 2017 Feb 26, 14:59 1165 + 149066988, // 2017 Mar 28, 02:58 1166 + 149320896, // 2017 Apr 26, 12:16 1167 + 149574150, // 2017 May 25, 19:45 1168 + 149827146, // 2017 Jun 24, 02:31 1169 + 150080316, // 2017 Jul 23, 09:46 1170 + 150334020, // 2017 Aug 21, 18:30 1171 + 150588540, // 2017 Sep 20, 05:30 1172 + 150844032, // 2017 Oct 19, 19:12 1173 + 151100532, // 2017 Nov 18, 11:42 1174 + 151357860, // 2017 Dec 18, 06:30 1175 + 151615542, // 2018 Jan 17, 02:17 1176 + 151872870, // 2018 Feb 15, 21:05 1177 + 152129232, // 2018 Mar 17, 13:12 1178 + 152384382, // 2018 Apr 16, 01:57 1179 + 152638488, // 2018 May 15, 11:48 1180 + 152891898, // 2018 Jun 13, 19:43 1181 + 153145008, // 2018 Jul 13, 02:48 1182 + 153398148, // 2018 Aug 11, 09:58 1183 + 153651606, // 2018 Sep 9, 18:01 1184 + 153905682, // 2018 Oct 9, 03:47 1185 + 154160652, // 2018 Nov 7, 16:02 1186 + 154416720, // 2018 Dec 7, 07:20 1187 + 154673808, // 2019 Jan 6, 01:28 1188 + 154931424, // 2019 Feb 4, 21:04 1189 + 155188824, // 2019 Mar 6, 16:04 1190 + 155445420, // 2019 Apr 5, 08:50 1191 + 155700996, // 2019 May 4, 22:46 1192 + 155955612, // 2019 Jun 3, 10:02 1193 + 156209496, // 2019 Jul 2, 19:16 1194 + 156462912, // 2019 Aug 1, 03:12 1195 + 156716142, // 2019 Aug 30, 10:37 1196 + 156969516, // 2019 Sep 28, 18:26 1197 + 157223394, // 2019 Oct 28, 03:39 1198 + 157478076, // 2019 Nov 26, 15:06 1199 + 157733718, // 2019 Dec 26, 05:13 1200 + 157990212, // 2020 Jan 24, 21:42 1201 + 158247192, // 2020 Feb 23, 15:32 1202 + 158504208, // 2020 Mar 24, 09:28 1203 + 158760876, // 2020 Apr 23, 02:26 1204 + 159016914, // 2020 May 22, 17:39 1205 + 159272172, // 2020 Jun 21, 06:42 1206 + 159526638, // 2020 Jul 20, 17:33 1207 + 159780486, // 2020 Aug 19, 02:41 1208 + 160034040, // 2020 Sep 17, 11:00 1209 + 160287666, // 2020 Oct 16, 19:31 1210 + 160541682, // 2020 Nov 15, 05:07 1211 + 160796262, // 2020 Dec 14, 16:17 1212 + 161051400, // 2021 Jan 13, 05:00 1213 + 161307036, // 2021 Feb 11, 19:06 1214 + 161563086, // 2021 Mar 13, 10:21 1215 + 161819466, // 2021 Apr 12, 02:31 1216 + 162075960, // 2021 May 11, 19:00 1217 + 162332238, // 2021 Jun 10, 10:53 1218 + 162587982, // 2021 Jul 10, 01:17 1219 + 162843060, // 2021 Aug 8, 13:50 1220 + 163097592, // 2021 Sep 7, 00:52 1221 + 163351830, // 2021 Oct 6, 11:05 1222 + 163606050, // 2021 Nov 4, 21:15 1223 + 163860378, // 2021 Dec 4, 07:43 1224 + 164114844, // 2022 Jan 2, 18:34 1225 + 164369436, // 2022 Feb 1, 05:46 1226 + 164624250, // 2022 Mar 2, 17:35 1227 + 164879424, // 2022 Apr 1, 06:24 1228 + 165135048, // 2022 Apr 30, 20:28 1229 + 165391020, // 2022 May 30, 11:30 1230 + 165647112, // 2022 Jun 29, 02:52 1231 + 165903090, // 2022 Jul 28, 17:55 1232 + 166158822, // 2022 Aug 27, 08:17 1233 + 166414284, // 2022 Sep 25, 21:54 1234 + 166669488, // 2022 Oct 25, 10:48 1235 + 166924422, // 2022 Nov 23, 22:57 1236 + 167179062, // 2022 Dec 23, 10:17 1237 + 167433438, // 2023 Jan 21, 20:53 1238 + 167687676, // 2023 Feb 20, 07:06 1239 + 167941938, // 2023 Mar 21, 17:23 1240 + 168196398, // 2023 Apr 20, 04:13 1241 + 168451158, // 2023 May 19, 15:53 1242 + 168706302, // 2023 Jun 18, 04:37 1243 + 168961872, // 2023 Jul 17, 18:32 1244 + 169217868, // 2023 Aug 16, 09:38 1245 + 169474200, // 2023 Sep 15, 01:40 1246 + 169730610, // 2023 Oct 14, 17:55 1247 + 169986762, // 2023 Nov 13, 09:27 1248 + 170242392, // 2023 Dec 12, 23:32 1249 + 170497422, // 2024 Jan 11, 11:57 1250 + 170751954, // 2024 Feb 9, 22:59 1251 + 171006126, // 2024 Mar 10, 09:01 1252 + 171260046, // 2024 Apr 8, 18:21 1253 + 171513852, // 2024 May 8, 03:22 1254 + 171767748, // 2024 Jun 6, 12:38 1255 + 172022022, // 2024 Jul 5, 22:57 1256 + 172276998, // 2024 Aug 4, 11:13 1257 + 172532856, // 2024 Sep 3, 01:56 1258 + 172789500, // 2024 Oct 2, 18:50 1259 + 173046528, // 2024 Nov 1, 12:48 1260 + 173303412, // 2024 Dec 1, 06:22 1261 + 173559762, // 2024 Dec 30, 22:27 1262 + 173815416, // 2025 Jan 29, 12:36 1263 + 174070350, // 2025 Feb 28, 00:45 1264 + 174324588, // 2025 Mar 29, 10:58 1265 + 174578232, // 2025 Apr 27, 19:32 1266 + 174831498, // 2025 May 27, 03:03 1267 + 175084752, // 2025 Jun 25, 10:32 1268 + 175338426, // 2025 Jul 24, 19:11 1269 + 175592916, // 2025 Aug 23, 06:06 1270 + 175848444, // 2025 Sep 21, 19:54 1271 + 176104956, // 2025 Oct 21, 12:26 1272 + 176362128, // 2025 Nov 20, 06:48 1273 + 176619504, // 2025 Dec 20, 01:44 1274 + 176876592, // 2026 Jan 18, 19:52 1275 + 177132966, // 2026 Feb 17, 12:01 1276 + 177388344, // 2026 Mar 19, 01:24 1277 + 177642672, // 2026 Apr 17, 11:52 1278 + 177896166, // 2026 May 16, 20:01 1279 + 178149204, // 2026 Jun 15, 02:54 1280 + 178402224, // 2026 Jul 14, 09:44 1281 + 178655616, // 2026 Aug 12, 17:36 1282 + 178909722, // 2026 Sep 11, 03:27 1283 + 179164740, // 2026 Oct 10, 15:50 1284 + 179420772, // 2026 Nov 9, 07:02 1285 + 179677752, // 2026 Dec 9, 00:52 1286 + 179935344, // 2027 Jan 7, 20:24 1287 + 180192936, // 2027 Feb 6, 15:56 1288 + 180449820, // 2027 Mar 8, 09:30 1289 + 180705546, // 2027 Apr 6, 23:51 1290 + 180960114, // 2027 May 6, 10:59 1291 + 181213806, // 2027 Jun 4, 19:41 1292 + 181467012, // 2027 Jul 4, 03:02 1293 + 181720110, // 2027 Aug 2, 10:05 1294 + 181973406, // 2027 Aug 31, 17:41 1295 + 182227176, // 2027 Sep 30, 02:36 1296 + 182481696, // 2027 Oct 29, 13:36 1297 + 182737224, // 2027 Nov 28, 03:24 1298 + 182993832, // 2027 Dec 27, 20:12 1299 + 183251238, // 2028 Jan 26, 15:13 1300 + 183508788, // 2028 Feb 25, 10:38 1301 + 183765792, // 2028 Mar 26, 04:32 1302 + 184021842, // 2028 Apr 24, 19:47 1303 + 184276902, // 2028 May 24, 08:17 1304 + 184531128, // 2028 Jun 22, 18:28 1305 + 184784772, // 2028 Jul 22, 03:02 1306 + 185038104, // 2028 Aug 20, 10:44 1307 + 185291424, // 2028 Sep 18, 18:24 1308 + 185545062, // 2028 Oct 18, 02:57 1309 + 185799348, // 2028 Nov 16, 13:18 1310 + 186054516, // 2028 Dec 16, 02:06 1311 + 186310590, // 2029 Jan 14, 17:25 1312 + 186567312, // 2029 Feb 13, 10:32 1313 + 186824280, // 2029 Mar 15, 04:20 1314 + 187081080, // 2029 Apr 13, 21:40 1315 + 187337412, // 2029 May 13, 13:42 1316 + 187593066, // 2029 Jun 12, 03:51 1317 + 187847946, // 2029 Jul 11, 15:51 1318 + 188102136, // 2029 Aug 10, 01:56 1319 + 188355870, // 2029 Sep 8, 10:45 1320 + 188609490, // 2029 Oct 7, 19:15 1321 + 188863344, // 2029 Nov 6, 04:24 1322 + 189117672, // 2029 Dec 5, 14:52 1323 + 189372534, // 2030 Jan 4, 02:49 1324 + 189627888, // 2030 Feb 2, 16:08 1325 + 189883650, // 2030 Mar 4, 06:35 1326 + 190139778, // 2030 Apr 2, 22:03 1327 + 190396152, // 2030 May 2, 14:12 1328 + 190652526, // 2030 Jun 1, 06:21 1329 + 190908570, // 2030 Jun 30, 21:35 1330 + 191164026, // 2030 Jul 30, 11:11 1331 + 191418882, // 2030 Aug 28, 23:07 1332 + 191673330, // 2030 Sep 27, 09:55 1333 + 191927622, // 2030 Oct 26, 20:17 1334 + 192181962, // 2030 Nov 25, 06:47 1335 + 192436392, // 2030 Dec 24, 17:32 1336 + 192690906, // 2031 Jan 23, 04:31 1337 + 192945534, // 2031 Feb 21, 15:49 1338 + 193200414, // 2031 Mar 23, 03:49 1339 + 193455702, // 2031 Apr 21, 16:57 1340 + 193711422, // 2031 May 21, 07:17 1341 + 193967430, // 2031 Jun 19, 22:25 1342 + 194223480, // 2031 Jul 19, 13:40 1343 + 194479392, // 2031 Aug 18, 04:32 1344 + 194735082, // 2031 Sep 16, 18:47 1345 + 194990526, // 2031 Oct 16, 08:21 1346 + 195245700, // 2031 Nov 14, 21:10 1347 + 195500556, // 2031 Dec 14, 09:06 1348 + 195755082, // 2032 Jan 12, 20:07 1349 + 196009344, // 2032 Feb 11, 06:24 1350 + 196263504, // 2032 Mar 11, 16:24 1351 + 196517760, // 2032 Apr 10, 02:40 1352 + 196772256, // 2032 May 9, 13:36 1353 + 197027112, // 2032 Jun 8, 01:32 1354 + 197282412, // 2032 Jul 7, 14:42 1355 + 197538192, // 2032 Aug 6, 05:12 1356 + 197794422, // 2032 Sep 4, 20:57 1357 + 198050922, // 2032 Oct 4, 13:27 1358 + 198307350, // 2032 Nov 3, 05:45 1359 + 198563358, // 2032 Dec 2, 20:53 1360 + 198818742, // 2033 Jan 1, 10:17 1361 + 199073520, // 2033 Jan 30, 22:00 1362 + 199327818, // 2033 Mar 1, 08:23 1363 + 199581786, // 2033 Mar 30, 17:51 1364 + 199835556, // 2033 Apr 29, 02:46 1365 + 200089302, // 2033 May 28, 11:37 1366 + 200343282, // 2033 Jun 26, 21:07 1367 + 200597838, // 2033 Jul 26, 08:13 1368 + 200853240, // 2033 Aug 24, 21:40 1369 + 201109560, // 2033 Sep 23, 13:40 1370 + 201366534, // 2033 Oct 23, 07:29 1371 + 201623640, // 2033 Nov 22, 01:40 1372 + 201880362, // 2033 Dec 21, 18:47 1373 + 202136412, // 2034 Jan 20, 10:02 1374 + 202391700, // 2034 Feb 18, 23:10 1375 + 202646250, // 2034 Mar 20, 10:15 1376 + 202900116, // 2034 Apr 18, 19:26 1377 + 203153472, // 2034 May 18, 03:12 1378 + 203406636, // 2034 Jun 16, 10:26 1379 + 203660010, // 2034 Jul 15, 18:15 1380 + 203914038, // 2034 Aug 14, 03:53 1381 + 204169044, // 2034 Sep 12, 16:14 1382 + 204425118, // 2034 Oct 12, 07:33 1383 + 204682056, // 2034 Nov 11, 01:16 1384 + 204939444, // 2034 Dec 10, 20:14 1385 + 205196778, // 2035 Jan 9, 15:03 1386 + 205453572, // 2035 Feb 8, 08:22 1387 + 205709460, // 2035 Mar 9, 23:10 1388 + 205964268, // 2035 Apr 8, 10:58 1389 + 206218104, // 2035 May 7, 20:04 1390 + 206471280, // 2035 Jun 6, 03:20 1391 + 206724234, // 2035 Jul 5, 09:59 1392 + 206977386, // 2035 Aug 3, 17:11 1393 + 207231114, // 2035 Sep 2, 01:59 1394 + 207485682, // 2035 Oct 1, 13:07 1395 + 207741234, // 2035 Oct 31, 02:59 1396 + 207997788, // 2035 Nov 29, 19:38 1397 + 208255146, // 2035 Dec 29, 14:31 1398 + 208512822, // 2036 Jan 28, 10:17 1399 + 208770120, // 2036 Feb 27, 05:00 1400 + 209026422, // 2036 Mar 27, 20:57 1401 + 209281518, // 2036 Apr 26, 09:33 1402 + 209535582, // 2036 May 25, 19:17 1403 + 209788980, // 2036 Jun 24, 03:10 1404 + 210042102, // 2036 Jul 23, 10:17 1405 + 210295290, // 2036 Aug 21, 17:35 1406 + 210548826, // 2036 Sep 20, 01:51 1407 + 210802980, // 2036 Oct 19, 11:50 1408 + 211058010, // 2036 Nov 18, 00:15 1409 + 211314090, // 2036 Dec 17, 15:35 1410 + 211571124, // 2037 Jan 16, 09:34 1411 + 211828644, // 2037 Feb 15, 04:54 1412 + 212085942, // 2037 Mar 16, 23:37 1413 + 212342448, // 2037 Apr 15, 16:08 1414 + 212597970, // 2037 May 15, 05:55 1415 + 212852586, // 2037 Jun 13, 17:11 1416 + 213106512, // 2037 Jul 13, 02:32 1417 + 213360012, // 2037 Aug 11, 10:42 1418 + 213613350, // 2037 Sep 9, 18:25 1419 + 213866850, // 2037 Oct 9, 02:35 1420 + 214120818, // 2037 Nov 7, 12:03 1421 + 214375554, // 2037 Dec 6, 23:39 1422 + 214631172, // 2038 Jan 5, 13:42 1423 + 214887552, // 2038 Feb 4, 05:52 1424 + 215144370, // 2038 Mar 5, 23:15 1425 + 215401218, // 2038 Apr 4, 16:43 1426 + 215657760, // 2038 May 4, 09:20 1427 + 215913744, // 2038 Jun 3, 00:24 1428 + 216169032, // 2038 Jul 2, 13:32 1429 + 216423600, // 2038 Aug 1, 00:40 1430 + 216677592, // 2038 Aug 30, 10:12 1431 + 216931302, // 2038 Sep 28, 18:57 1432 + 217185078, // 2038 Oct 28, 03:53 1433 + 217439202, // 2038 Nov 26, 13:47 1434 + 217693812, // 2038 Dec 26, 01:02 1435 + 217948896, // 2039 Jan 24, 13:36 1436 + 218204388, // 2039 Feb 23, 03:18 1437 + 218460240, // 2039 Mar 24, 18:00 1438 + 218716410, // 2039 Apr 23, 09:35 1439 + 218972748, // 2039 May 23, 01:38 1440 + 219228966, // 2039 Jun 21, 17:21 1441 + 219484764, // 2039 Jul 21, 07:54 1442 + 219739980, // 2039 Aug 19, 20:50 1443 + 219994698, // 2039 Sep 18, 08:23 1444 + 220249134, // 2039 Oct 17, 19:09 1445 + 220503516, // 2039 Nov 16, 05:46 1446 + 220757952, // 2039 Dec 15, 16:32 1447 + 221012430, // 2040 Jan 14, 03:25 1448 + 221266950, // 2040 Feb 12, 14:25 1449 + 221521602, // 2040 Mar 13, 01:47 1450 + 221776560, // 2040 Apr 11, 14:00 1451 + 222031968, // 2040 May 11, 03:28 1452 + 222287778, // 2040 Jun 9, 18:03 1453 + 222543810, // 2040 Jul 9, 09:15 1454 + 222799836, // 2040 Aug 8, 00:26 1455 + 223055724, // 2040 Sep 6, 15:14 1456 + 223311396, // 2040 Oct 6, 05:26 1457 + 223566816, // 2040 Nov 4, 18:56 1458 + 223821918, // 2040 Dec 4, 07:33 1459 + 224076648, // 2041 Jan 2, 19:08 1460 + 224331018, // 2041 Feb 1, 05:43 1461 + 224585154, // 2041 Mar 2, 15:39 1462 + 224839260, // 2041 Apr 1, 01:30 1463 + 225093522, // 2041 Apr 30, 11:47 1464 + 225348096, // 2041 May 29, 22:56 1465 + 225603102, // 2041 Jun 28, 11:17 1466 + 225858612, // 2041 Jul 28, 01:02 1467 + 226114656, // 2041 Aug 26, 16:16 1468 + 226371126, // 2041 Sep 25, 08:41 1469 + 226627740, // 2041 Oct 25, 01:30 1470 + 226884096, // 2041 Nov 23, 17:36 1471 + 227139876, // 2041 Dec 23, 08:06 1472 + 227394972, // 2042 Jan 21, 20:42 1473 + 227649474, // 2042 Feb 20, 07:39 1474 + 227903538, // 2042 Mar 21, 17:23 1475 + 228157314, // 2042 Apr 20, 02:19 1476 + 228410970, // 2042 May 19, 10:55 1477 + 228664728, // 2042 Jun 17, 19:48 1478 + 228918912, // 2042 Jul 17, 05:52 1479 + 229173846, // 2042 Aug 15, 18:01 1480 + 229429740, // 2042 Sep 14, 08:50 1481 + 229686498, // 2042 Oct 14, 02:03 1482 + 229943688, // 2042 Nov 12, 20:28 1483 + 230200734, // 2042 Dec 12, 14:29 1484 + 230457198, // 2043 Jan 11, 06:53 1485 + 230712882, // 2043 Feb 9, 21:07 1486 + 230967774, // 2043 Mar 11, 09:09 1487 + 231221922, // 2043 Apr 9, 19:07 1488 + 231475446, // 2043 May 9, 03:21 1489 + 231728610, // 2043 Jun 7, 10:35 1490 + 231981786, // 2043 Jul 6, 17:51 1491 + 232235418, // 2043 Aug 5, 02:23 1492 + 232489902, // 2043 Sep 3, 13:17 1493 + 232745472, // 2043 Oct 3, 03:12 1494 + 233002068, // 2043 Nov 1, 19:58 1495 + 233259342, // 2043 Dec 1, 14:37 1496 + 233516808, // 2043 Dec 31, 09:48 1497 + 233773944, // 2044 Jan 30, 04:04 1498 + 234030312, // 2044 Feb 28, 20:12 1499 + 234285636, // 2044 Mar 29, 09:26 1500 + 234539892, // 2044 Apr 27, 19:42 1501 + 234793320, // 2044 May 27, 03:40 1502 + 235046304, // 2044 Jun 25, 10:24 1503 + 235299300, // 2044 Jul 24, 17:10 1504 + 235552716, // 2044 Aug 23, 01:06 1505 + 235806858, // 2044 Sep 21, 11:03 1506 + 236061936, // 2044 Oct 20, 23:36 1507 + 236318028, // 2044 Nov 19, 14:58 1508 + 236575038, // 2044 Dec 19, 08:53 1509 + 236832630, // 2045 Jan 18, 04:25 1510 + 237090186, // 2045 Feb 16, 23:51 1511 + 237347010, // 2045 Mar 18, 17:15 1512 + 237602682, // 2045 Apr 17, 07:27 1513 + 237857202, // 2045 May 16, 18:27 1514 + 238110870, // 2045 Jun 15, 03:05 1515 + 238364094, // 2045 Jul 14, 10:29 1516 + 238617234, // 2045 Aug 12, 17:39 1517 + 238870608, // 2045 Sep 11, 01:28 1518 + 239124462, // 2045 Oct 10, 10:37 1519 + 239379054, // 2045 Nov 8, 21:49 1520 + 239634606, // 2045 Dec 8, 11:41 1521 + 239891184, // 2046 Jan 7, 04:24 1522 + 240148500, // 2046 Feb 5, 23:10 1523 + 240405936, // 2046 Mar 7, 18:16 1524 + 240662832, // 2046 Apr 6, 11:52 1525 + 240918816, // 2046 May 6, 02:56 1526 + 241173852, // 2046 Jun 4, 15:22 1527 + 241428114, // 2046 Jul 4, 01:39 1528 + 241681830, // 2046 Aug 2, 10:25 1529 + 241935270, // 2046 Aug 31, 18:25 1530 + 242188710, // 2046 Sep 30, 02:25 1531 + 242442462, // 2046 Oct 29, 11:17 1532 + 242696820, // 2046 Nov 27, 21:50 1533 + 242951994, // 2046 Dec 27, 10:39 1534 + 243207984, // 2047 Jan 26, 01:44 1535 + 243464556, // 2047 Feb 24, 18:26 1536 + 243721344, // 2047 Mar 26, 11:44 1537 + 243978000, // 2047 Apr 25, 04:40 1538 + 244234242, // 2047 May 24, 20:27 1539 + 244489896, // 2047 Jun 23, 10:36 1540 + 244744854, // 2047 Jul 22, 22:49 1541 + 244999176, // 2047 Aug 21, 09:16 1542 + 245253066, // 2047 Sep 19, 18:31 1543 + 245506848, // 2047 Oct 19, 03:28 1544 + 245760834, // 2047 Nov 17, 12:59 1545 + 246015228, // 2047 Dec 16, 23:38 1546 + 246270072, // 2048 Jan 15, 11:32 1547 + 246525312, // 2048 Feb 14, 00:32 1548 + 246780888, // 2048 Mar 14, 14:28 1549 + 247036800, // 2048 Apr 13, 05:20 1550 + 247292988, // 2048 May 12, 20:58 1551 + 247549260, // 2048 Jun 11, 12:50 1552 + 247805304, // 2048 Jul 11, 04:04 1553 + 248060874, // 2048 Aug 9, 17:59 1554 + 248315910, // 2048 Sep 8, 06:25 1555 + 248570550, // 2048 Oct 7, 17:45 1556 + 248825034, // 2048 Nov 6, 04:39 1557 + 249079500, // 2048 Dec 5, 15:30 1558 + 249333990, // 2049 Jan 4, 02:25 1559 + 249588456, // 2049 Feb 2, 13:16 1560 + 249842952, // 2049 Mar 4, 00:12 1561 + 250097634, // 2049 Apr 2, 11:39 1562 + 250352706, // 2049 May 2, 00:11 1563 + 250608240, // 2049 May 31, 14:00 1564 + 250864146, // 2049 Jun 30, 04:51 1565 + 251120202, // 2049 Jul 29, 20:07 1566 + 251376234, // 2049 Aug 28, 11:19 1567 + 251632110, // 2049 Sep 27, 02:05 1568 + 251887770, // 2049 Oct 26, 16:15 1569 + 252143136, // 2049 Nov 25, 05:36 1570 + 252398112, // 2049 Dec 24, 17:52 1571 + 252652662, // 2050 Jan 23, 04:57 1572 + 252906858, // 2050 Feb 21, 15:03 1573 + 253160886, // 2050 Mar 23, 00:41 1574 + 253414956, // 2050 Apr 21, 10:26 1575 + 253669266, // 2050 May 20, 20:51 1576 + 253923972, // 2050 Jun 19, 08:22 1577 + 254179182, // 2050 Jul 18, 21:17 1578 + 254434962, // 2050 Aug 17, 11:47 1579 + 254691294, // 2050 Sep 16, 03:49 1580 + 254947974, // 2050 Oct 15, 20:49 1581 + 255204612, // 2050 Nov 14, 13:42 1582 + 255460788, // 2050 Dec 14, 05:18 1583 + 255716268, // 2051 Jan 12, 18:58 1584 + 255971046, // 2051 Feb 11, 06:41 1585 + 256225272, // 2051 Mar 12, 16:52 1586 + 256479114, // 2051 Apr 11, 01:59 1587 + 256732734, // 2051 May 10, 10:29 1588 + 256986336, // 2051 Jun 8, 18:56 1589 + 257240214, // 2051 Jul 8, 04:09 1590 + 257494710, // 2051 Aug 6, 15:05 1591 + 257750118, // 2051 Sep 5, 04:33 1592 + 258006522, // 2051 Oct 4, 20:47 1593 + 258263634, // 2051 Nov 3, 14:59 1594 + 258520902, // 2051 Dec 3, 09:37 1595 + 258777756, // 2052 Jan 2, 03:06 1596 + 259033860, // 2052 Jan 31, 18:30 1597 + 259289136, // 2052 Mar 1, 07:36 1598 + 259543602, // 2052 Mar 30, 18:27 1599 + 259797366, // 2052 Apr 29, 03:21 1600 + 260050620, // 2052 May 28, 10:50 1601 + 260303700, // 2052 Jun 26, 17:50 1602 + 260557026, // 2052 Jul 26, 01:31 1603 + 260811042, // 2052 Aug 24, 11:07 1604 + 261066078, // 2052 Sep 22, 23:33 1605 + 261322218, // 2052 Oct 22, 15:03 1606 + 261579252, // 2052 Nov 21, 09:02 1607 + 261836730, // 2052 Dec 21, 04:15 1608 + 262094112, // 2053 Jan 19, 23:12 1609 + 262350912, // 2053 Feb 18, 16:32 1610 + 262606752, // 2053 Mar 20, 07:12 1611 + 262861488, // 2053 Apr 18, 18:48 1612 + 263115258, // 2053 May 18, 03:43 1613 + 263368386, // 2053 Jun 16, 10:51 1614 + 263621316, // 2053 Jul 15, 17:26 1615 + 263874486, // 2053 Aug 14, 00:41 1616 + 264128256, // 2053 Sep 12, 09:36 1617 + 264382878, // 2053 Oct 11, 20:53 1618 + 264638490, // 2053 Nov 10, 10:55 1619 + 264895080, // 2053 Dec 10, 03:40 1620 + 265152444, // 2054 Jan 8, 22:34 1621 + 265410084, // 2054 Feb 7, 18:14 1622 + 265667316, // 2054 Mar 9, 12:46 1623 + 265923552, // 2054 Apr 8, 04:32 1624 + 266178600, // 2054 May 7, 17:00 1625 + 266432640, // 2054 Jun 6, 02:40 1626 + 266686044, // 2054 Jul 5, 10:34 1627 + 266939208, // 2054 Aug 3, 17:48 1628 + 267192468, // 2054 Sep 2, 01:18 1629 + 267446094, // 2054 Oct 1, 09:49 1630 + 267700326, // 2054 Oct 30, 20:01 1631 + 267955404, // 2054 Nov 29, 08:34 1632 + 268211466, // 2054 Dec 28, 23:51 1633 + 268468434, // 2055 Jan 27, 17:39 1634 + 268725834, // 2055 Feb 26, 12:39 1635 + 268983006, // 2055 Mar 28, 07:01 1636 + 269239422, // 2055 Apr 26, 23:17 1637 + 269494902, // 2055 May 26, 12:57 1638 + 269749530, // 2055 Jun 25, 00:15 1639 + 270003528, // 2055 Jul 24, 09:48 1640 + 270257124, // 2055 Aug 22, 18:14 1641 + 270510594, // 2055 Sep 21, 02:19 1642 + 270764214, // 2055 Oct 20, 10:49 1643 + 271018284, // 2055 Nov 18, 20:34 1644 + 271273050, // 2055 Dec 18, 08:15 1645 + 271528620, // 2056 Jan 16, 22:10 1646 + 271784880, // 2056 Feb 15, 14:00 1647 + 272041512, // 2056 Mar 16, 06:52 1648 + 272298186, // 2056 Apr 14, 23:51 1649 + 272554596, // 2056 May 14, 16:06 1650 + 272810544, // 2056 Jun 13, 07:04 1651 + 273065880, // 2056 Jul 12, 20:20 1652 + 273320568, // 2056 Aug 11, 07:48 1653 + 273574722, // 2056 Sep 9, 17:47 1654 + 273828600, // 2056 Oct 9, 03:00 1655 + 274082526, // 2056 Nov 7, 12:21 1656 + 274336746, // 2056 Dec 6, 22:31 1657 + 274591374, // 2057 Jan 5, 09:49 1658 + 274846386, // 2057 Feb 3, 22:11 1659 + 275101710, // 2057 Mar 5, 11:25 1660 + 275357346, // 2057 Apr 4, 01:31 1661 + 275613312, // 2057 May 3, 16:32 1662 + 275869506, // 2057 Jun 2, 08:11 1663 + 276125682, // 2057 Jul 1, 23:47 1664 + 276381552, // 2057 Jul 31, 14:32 1665 + 276636924, // 2057 Aug 30, 03:54 1666 + 276891840, // 2057 Sep 28, 16:00 1667 + 277146474, // 2057 Oct 28, 03:19 1668 + 277401012, // 2057 Nov 26, 14:22 1669 + 277655532, // 2057 Dec 26, 01:22 1670 + 277910004, // 2058 Jan 24, 12:14 1671 + 278164422, // 2058 Feb 22, 22:57 1672 + 278418900, // 2058 Mar 24, 09:50 1673 + 278673654, // 2058 Apr 22, 21:29 1674 + 278928858, // 2058 May 22, 10:23 1675 + 279184530, // 2058 Jun 21, 00:35 1676 + 279440520, // 2058 Jul 20, 15:40 1677 + 279696618, // 2058 Aug 19, 07:03 1678 + 279952662, // 2058 Sep 17, 22:17 1679 + 280208550, // 2058 Oct 17, 13:05 1680 + 280464174, // 2058 Nov 16, 03:09 1681 + 280719426, // 2058 Dec 15, 16:11 1682 + 280974222, // 2059 Jan 14, 03:57 1683 + 281228562, // 2059 Feb 12, 14:27 1684 + 281482590, // 2059 Mar 14, 00:05 1685 + 281736534, // 2059 Apr 12, 09:29 1686 + 281990610, // 2059 May 11, 19:15 1687 + 282245022, // 2059 Jun 10, 05:57 1688 + 282499908, // 2059 Jul 9, 17:58 1689 + 282755388, // 2059 Aug 8, 07:38 1690 + 283011486, // 2059 Sep 6, 23:01 1691 + 283268100, // 2059 Oct 6, 15:50 1692 + 283524906, // 2059 Nov 5, 09:11 1693 + 283781454, // 2059 Dec 5, 01:49 1694 + 284037360, // 2060 Jan 3, 16:40 1695 + 284292492, // 2060 Feb 2, 05:22 1696 + 284546952, // 2060 Mar 2, 16:12 1697 + 284800908, // 2060 Apr 1, 01:38 1698 + 285054546, // 2060 Apr 30, 10:11 1699 + 285308064, // 2060 May 29, 18:24 1700 + 285561708, // 2060 Jun 28, 02:58 1701 + 285815820, // 2060 Jul 27, 12:50 1702 + 286070736, // 2060 Aug 26, 00:56 1703 + 286326684, // 2060 Sep 24, 15:54 1704 + 286583556, // 2060 Oct 24, 09:26 1705 + 286840896, // 2060 Nov 23, 04:16 1706 + 287098080, // 2060 Dec 22, 22:40 1707 + 287354616, // 2061 Jan 21, 15:16 1708 + 287610306, // 2061 Feb 20, 05:31 1709 + 287865138, // 2061 Mar 21, 17:23 1710 + 288119190, // 2061 Apr 20, 03:05 1711 + 288372618, // 2061 May 19, 11:03 1712 + 288625698, // 2061 Jun 17, 18:03 1713 + 288878826, // 2061 Jul 17, 01:11 1714 + 289132440, // 2061 Aug 15, 09:40 1715 + 289386942, // 2061 Sep 13, 20:37 1716 + 289642572, // 2061 Oct 13, 10:42 1717 + 289899240, // 2061 Nov 12, 03:40 1718 + 290156598, // 2061 Dec 11, 22:33 1719 + 290414118, // 2062 Jan 10, 17:53 1720 + 290671266, // 2062 Feb 9, 12:11 1721 + 290927598, // 2062 Mar 11, 04:13 1722 + 291182862, // 2062 Apr 9, 17:17 1723 + 291437058, // 2062 May 9, 03:23 1724 + 291690432, // 2062 Jun 7, 11:12 1725 + 291943398, // 2062 Jul 6, 17:53 1726 + 292196400, // 2062 Aug 5, 00:40 1727 + 292449852, // 2062 Sep 3, 08:42 1728 + 292704054, // 2062 Oct 2, 18:49 1729 + 292959198, // 2062 Nov 1, 07:33 1730 + 293215326, // 2062 Nov 30, 23:01 1731 + 293472342, // 2062 Dec 30, 16:57 1732 + 293729898, // 2063 Jan 29, 12:23 1733 + 293987388, // 2063 Feb 28, 07:38 1734 + 294244140, // 2063 Mar 30, 00:50 1735 + 294499752, // 2063 Apr 28, 14:52 1736 + 294754242, // 2063 May 28, 01:47 1737 + 295007916, // 2063 Jun 26, 10:26 1738 + 295261170, // 2063 Jul 25, 17:55 1739 + 295514382, // 2063 Aug 24, 01:17 1740 + 295767846, // 2063 Sep 22, 09:21 1741 + 296021796, // 2063 Oct 21, 18:46 1742 + 296276454, // 2063 Nov 20, 06:09 1743 + 296532024, // 2063 Dec 19, 20:04 1744 + 296788542, // 2064 Jan 18, 12:37 1745 + 297045738, // 2064 Feb 17, 07:03 1746 + 297303030, // 2064 Mar 18, 01:45 1747 + 297559812, // 2064 Apr 16, 19:02 1748 + 297815730, // 2064 May 16, 09:55 1749 + 298070766, // 2064 Jun 14, 22:21 1750 + 298325076, // 2064 Jul 14, 08:46 1751 + 298578894, // 2064 Aug 12, 17:49 1752 + 298832466, // 2064 Sep 11, 02:11 1753 + 299086044, // 2064 Oct 10, 10:34 1754 + 299339910, // 2064 Nov 8, 19:45 1755 + 299594334, // 2064 Dec 8, 06:29 1756 + 299849490, // 2065 Jan 6, 19:15 1757 + 300105372, // 2065 Feb 5, 10:02 1758 + 300361770, // 2065 Mar 7, 02:15 1759 + 300618366, // 2065 Apr 5, 19:01 1760 + 300874860, // 2065 May 5, 11:30 1761 + 301131030, // 2065 Jun 4, 03:05 1762 + 301386696, // 2065 Jul 3, 17:16 1763 + 301641756, // 2065 Aug 2, 05:46 1764 + 301896234, // 2065 Aug 31, 16:39 1765 + 302150304, // 2065 Sep 30, 02:24 1766 + 302404248, // 2065 Oct 29, 11:48 1767 + 302658360, // 2065 Nov 27, 21:40 1768 + 302912802, // 2065 Dec 27, 08:27 1769 + 303167604, // 2066 Jan 25, 20:14 1770 + 303422706, // 2066 Feb 24, 08:51 1771 + 303678084, // 2066 Mar 25, 22:14 1772 + 303933774, // 2066 Apr 24, 12:29 1773 + 304189788, // 2066 May 24, 03:38 1774 + 304445970, // 2066 Jun 22, 19:15 1775 + 304702044, // 2066 Jul 22, 10:34 1776 + 304957740, // 2066 Aug 21, 00:50 1777 + 305212962, // 2066 Sep 19, 13:47 1778 + 305467812, // 2066 Oct 19, 01:42 1779 + 305722476, // 2066 Nov 17, 13:06 1780 + 305977062, // 2066 Dec 17, 00:17 1781 + 306231576, // 2067 Jan 15, 11:16 1782 + 306485982, // 2067 Feb 13, 21:57 1783 + 306740334, // 2067 Mar 15, 08:29 1784 + 306994824, // 2067 Apr 13, 19:24 1785 + 307249680, // 2067 May 13, 07:20 1786 + 307505046, // 2067 Jun 11, 20:41 1787 + 307760856, // 2067 Jul 11, 11:16 1788 + 308016936, // 2067 Aug 10, 02:36 1789 + 308273094, // 2067 Sep 8, 18:09 1790 + 308529168, // 2067 Oct 8, 09:28 1791 + 308785044, // 2067 Nov 7, 00:14 1792 + 309040590, // 2067 Dec 6, 14:05 1793 + 309295668, // 2068 Jan 5, 02:38 1794 + 309550224, // 2068 Feb 3, 13:44 1795 + 309804342, // 2068 Mar 3, 23:37 1796 + 310058226, // 2068 Apr 2, 08:51 1797 + 310312122, // 2068 May 1, 18:07 1798 + 310566258, // 2068 May 31, 04:03 1799 + 310820826, // 2068 Jun 29, 15:11 1800 + 311075970, // 2068 Jul 29, 03:55 1801 + 311331768, // 2068 Aug 27, 18:28 1802 + 311588208, // 2068 Sep 26, 10:48 1803 + 311845062, // 2068 Oct 26, 04:17 1804 + 312101892, // 2068 Nov 24, 21:42 1805 + 312358224, // 2068 Dec 24, 13:44 1806 + 312613776, // 2069 Jan 23, 03:36 1807 + 312868542, // 2069 Feb 21, 15:17 1808 + 313122678, // 2069 Mar 23, 01:13 1809 + 313376388, // 2069 Apr 21, 09:58 1810 + 313629876, // 2069 May 20, 18:06 1811 + 313883364, // 2069 Jun 19, 02:14 1812 + 314137158, // 2069 Jul 18, 11:13 1813 + 314391618, // 2069 Aug 16, 22:03 1814 + 314647050, // 2069 Sep 15, 11:35 1815 + 314903538, // 2069 Oct 15, 04:03 1816 + 315160788, // 2069 Nov 13, 22:38 1817 + 315418188, // 2069 Dec 13, 17:38 1818 + 315675138, // 2070 Jan 12, 11:23 1819 + 315931278, // 2070 Feb 11, 02:53 1820 + 316186512, // 2070 Mar 12, 15:52 1821 + 316440900, // 2070 Apr 11, 02:30 1822 + 316694568, // 2070 May 10, 11:08 1823 + 316947744, // 2070 Jun 8, 18:24 1824 + 317200764, // 2070 Jul 8, 01:14 1825 + 317454066, // 2070 Aug 6, 08:51 1826 + 317708094, // 2070 Sep 4, 18:29 1827 + 317963166, // 2070 Oct 4, 07:01 1828 + 318219378, // 2070 Nov 2, 22:43 1829 + 318476484, // 2070 Dec 2, 16:54 1830 + 318734010, // 2071 Jan 1, 12:15 1831 + 318991416, // 2071 Jan 31, 07:16 1832 + 319248192, // 2071 Mar 2, 00:32 1833 + 319503978, // 2071 Mar 31, 15:03 1834 + 319758660, // 2071 Apr 30, 02:30 1835 + 320012382, // 2071 May 29, 11:17 1836 + 320265480, // 2071 Jun 27, 18:20 1837 + 320518416, // 2071 Jul 27, 00:56 1838 + 320771616, // 2071 Aug 25, 08:16 1839 + 321025446, // 2071 Sep 23, 17:21 1840 + 321280134, // 2071 Oct 23, 04:49 1841 + 321535794, // 2071 Nov 21, 18:59 1842 + 321792402, // 2071 Dec 21, 11:47 1843 + 322049730, // 2072 Jan 20, 06:35 1844 + 322307298, // 2072 Feb 19, 02:03 1845 + 322564452, // 2072 Mar 19, 20:22 1846 + 322820622, // 2072 Apr 18, 11:57 1847 + 323075634, // 2072 May 18, 00:19 1848 + 323329662, // 2072 Jun 16, 09:57 1849 + 323583096, // 2072 Jul 15, 17:56 1850 + 323836326, // 2072 Aug 14, 01:21 1851 + 324089682, // 2072 Sep 12, 09:07 1852 + 324343410, // 2072 Oct 11, 17:55 1853 + 324597726, // 2072 Nov 10, 04:21 1854 + 324852834, // 2072 Dec 9, 16:59 1855 + 325108866, // 2073 Jan 8, 08:11 1856 + 325365720, // 2073 Feb 7, 01:40 1857 + 325622976, // 2073 Mar 8, 20:16 1858 + 325880004, // 2073 Apr 7, 14:14 1859 + 326136330, // 2073 May 7, 06:15 1860 + 326391792, // 2073 Jun 5, 19:52 1861 + 326646462, // 2073 Jul 5, 07:17 1862 + 326900544, // 2073 Aug 3, 17:04 1863 + 327154272, // 2073 Sep 2, 01:52 1864 + 327407886, // 2073 Oct 1, 10:21 1865 + 327661638, // 2073 Oct 30, 19:13 1866 + 327915792, // 2073 Nov 29, 05:12 1867 + 328170570, // 2073 Dec 28, 16:55 1868 + 328426062, // 2074 Jan 27, 06:37 1869 + 328682160, // 2074 Feb 25, 22:00 1870 + 328938600, // 2074 Mar 27, 14:20 1871 + 329195088, // 2074 Apr 26, 06:48 1872 + 329451384, // 2074 May 25, 22:44 1873 + 329707314, // 2074 Jun 24, 13:39 1874 + 329962722, // 2074 Jul 24, 03:07 1875 + 330217554, // 2074 Aug 22, 14:59 1876 + 330471888, // 2074 Sep 21, 01:28 1877 + 330725946, // 2074 Oct 20, 11:11 1878 + 330980016, // 2074 Nov 18, 20:56 1879 + 331234320, // 2074 Dec 18, 07:20 1880 + 331488942, // 2075 Jan 16, 18:37 1881 + 331743846, // 2075 Feb 15, 06:41 1882 + 331998990, // 2075 Mar 16, 19:25 1883 + 332254410, // 2075 Apr 15, 08:55 1884 + 332510172, // 2075 May 14, 23:22 1885 + 332766234, // 2075 Jun 13, 14:39 1886 + 333022386, // 2075 Jul 13, 06:11 1887 + 333278346, // 2075 Aug 11, 21:11 1888 + 333533892, // 2075 Sep 10, 11:02 1889 + 333789018, // 2075 Oct 9, 23:43 1890 + 334043850, // 2075 Nov 8, 11:35 1891 + 334298538, // 2075 Dec 7, 23:03 1892 + 334553130, // 2076 Jan 6, 10:15 1893 + 334807566, // 2076 Feb 4, 21:01 1894 + 335061864, // 2076 Mar 5, 07:24 1895 + 335316162, // 2076 Apr 3, 17:47 1896 + 335570712, // 2076 May 3, 04:52 1897 + 335825724, // 2076 Jun 1, 17:14 1898 + 336081270, // 2076 Jul 1, 07:05 1899 + 336337236, // 2076 Jul 30, 22:06 1900 + 336593424, // 2076 Aug 29, 13:44 1901 + 336849642, // 2076 Sep 28, 05:27 1902 + 337105740, // 2076 Oct 27, 20:50 1903 + 337361568, // 2076 Nov 26, 11:28 1904 + 337616958, // 2076 Dec 26, 00:53 1905 + 337871790, // 2077 Jan 24, 12:45 1906 + 338126082, // 2077 Feb 22, 23:07 1907 + 338379984, // 2077 Mar 24, 08:24 1908 + 338633760, // 2077 Apr 22, 17:20 1909 + 338887668, // 2077 May 22, 02:38 1910 + 339141930, // 2077 Jun 20, 12:55 1911 + 339396726, // 2077 Jul 20, 00:41 1912 + 339652188, // 2077 Aug 18, 14:18 1913 + 339908358, // 2077 Sep 17, 05:53 1914 + 340165122, // 2077 Oct 16, 23:07 1915 + 340422120, // 2077 Nov 15, 17:00 1916 + 340678836, // 2077 Dec 15, 10:06 1917 + 340934844, // 2078 Jan 14, 01:14 1918 + 341189988, // 2078 Feb 12, 13:58 1919 + 341444382, // 2078 Mar 14, 00:37 1920 + 341698230, // 2078 Apr 12, 09:45 1921 + 341951736, // 2078 May 11, 17:56 1922 + 342205134, // 2078 Jun 10, 01:49 1923 + 342458688, // 2078 Jul 9, 10:08 1924 + 342712752, // 2078 Aug 7, 19:52 1925 + 342967674, // 2078 Sep 6, 07:59 1926 + 343223676, // 2078 Oct 5, 23:06 1927 + 343480656, // 2078 Nov 4, 16:56 1928 + 343738128, // 2078 Dec 4, 12:08 1929 + 343995420, // 2079 Jan 3, 06:50 1930 + 344252010, // 2079 Feb 1, 23:35 1931 + 344507688, // 2079 Mar 3, 13:48 1932 + 344762460, // 2079 Apr 2, 01:30 1933 + 345016422, // 2079 May 1, 10:57 1934 + 345269766, // 2079 May 30, 18:41 1935 + 345522786, // 2079 Jun 29, 01:31 1936 + 345775878, // 2079 Jul 28, 08:33 1937 + 346029492, // 2079 Aug 26, 17:02 1938 + 346284036, // 2079 Sep 25, 04:06 1939 + 346539720, // 2079 Oct 24, 18:20 1940 + 346796460, // 2079 Nov 23, 11:30 1941 + 347053872, // 2079 Dec 23, 06:32 1942 + 347311410, // 2080 Jan 22, 01:55 1943 + 347568546, // 2080 Feb 20, 20:11 1944 + 347824836, // 2080 Mar 21, 12:06 1945 + 348080040, // 2080 Apr 20, 01:00 1946 + 348334176, // 2080 May 19, 10:56 1947 + 348587520, // 2080 Jun 17, 18:40 1948 + 348840486, // 2080 Jul 17, 01:21 1949 + 349093518, // 2080 Aug 15, 08:13 1950 + 349347030, // 2080 Sep 13, 16:25 1951 + 349601304, // 2080 Oct 13, 02:44 1952 + 349856502, // 2080 Nov 11, 15:37 1953 + 350112660, // 2080 Dec 11, 07:10 1954 + 350369652, // 2081 Jan 10, 01:02 1955 + 350627142, // 2081 Feb 8, 20:17 1956 + 350884542, // 2081 Mar 10, 15:17 1957 + 351141210, // 2081 Apr 9, 08:15 1958 + 351396774, // 2081 May 8, 22:09 1959 + 351651246, // 2081 Jun 7, 09:01 1960 + 351904944, // 2081 Jul 6, 17:44 1961 + 352158264, // 2081 Aug 5, 01:24 1962 + 352411566, // 2081 Sep 3, 09:01 1963 + 352665138, // 2081 Oct 2, 17:23 1964 + 352919184, // 2081 Nov 1, 03:04 1965 + 353173896, // 2081 Nov 30, 14:36 1966 + 353429448, // 2081 Dec 30, 04:28 1967 + 353685876, // 2082 Jan 28, 20:46 1968 + 353942928, // 2082 Feb 27, 14:48 1969 + 354200070, // 2082 Mar 29, 09:05 1970 + 354456732, // 2082 Apr 28, 02:02 1971 + 354712602, // 2082 May 27, 16:47 1972 + 354967656, // 2082 Jun 26, 05:16 1973 + 355222044, // 2082 Jul 25, 15:54 1974 + 355475988, // 2082 Aug 24, 01:18 1975 + 355729704, // 2082 Sep 22, 10:04 1976 + 355983420, // 2082 Oct 21, 18:50 1977 + 356237394, // 2082 Nov 20, 04:19 1978 + 356491860, // 2082 Dec 19, 15:10 1979 + 356746980, // 2083 Jan 18, 03:50 1980 + 357002730, // 2083 Feb 16, 18:15 1981 + 357258942, // 2083 Mar 18, 09:57 1982 + 357515340, // 2083 Apr 17, 02:10 1983 + 357771684, // 2083 May 16, 18:14 1984 + 358027782, // 2083 Jun 15, 09:37 1985 + 358283484, // 2083 Jul 14, 23:54 1986 + 358538670, // 2083 Aug 13, 12:45 1987 + 358793322, // 2083 Sep 12, 00:07 1988 + 359047578, // 2083 Oct 11, 10:23 1989 + 359301690, // 2083 Nov 9, 20:15 1990 + 359555910, // 2083 Dec 9, 06:25 1991 + 359810382, // 2084 Jan 7, 17:17 1992 + 360065118, // 2084 Feb 6, 04:53 1993 + 360320064, // 2084 Mar 6, 17:04 1994 + 360575232, // 2084 Apr 5, 05:52 1995 + 360830718, // 2084 May 4, 19:33 1996 + 361086558, // 2084 Jun 3, 10:13 1997 + 361342668, // 2084 Jul 3, 01:38 1998 + 361598784, // 2084 Aug 1, 17:04 1999 + 361854630, // 2084 Aug 31, 07:45 2000 + 362110056, // 2084 Sep 29, 21:16 2001 + 362365122, // 2084 Oct 29, 09:47 2002 + 362619954, // 2084 Nov 27, 21:39 2003 + 362874642, // 2084 Dec 27, 09:07 2004 + 363129162, // 2085 Jan 25, 20:07 2005 + 363383472, // 2085 Feb 24, 06:32 2006 + 363637662, // 2085 Mar 25, 16:37 2007 + 363891954, // 2085 Apr 24, 02:59 2008 + 364146618, // 2085 May 23, 14:23 2009 + 364401828, // 2085 Jun 22, 03:18 2010 + 364657578, // 2085 Jul 21, 17:43 2011 + 364913706, // 2085 Aug 20, 09:11 2012 + 365170002, // 2085 Sep 19, 01:07 2013 + 365426280, // 2085 Oct 18, 17:00 2014 + 365682366, // 2085 Nov 17, 08:21 2015 + 365938068, // 2085 Dec 16, 22:38 2016 + 366193224, // 2086 Jan 15, 11:24 2017 + 366447762, // 2086 Feb 13, 22:27 2018 + 366701784, // 2086 Mar 15, 08:04 2019 + 366955518, // 2086 Apr 13, 16:53 2020 + 367209246, // 2086 May 13, 01:41 2021 + 367463232, // 2086 Jun 11, 11:12 2022 + 367717692, // 2086 Jul 10, 22:02 2023 + 367972788, // 2086 Aug 9, 10:38 2024 + 368228622, // 2086 Sep 8, 01:17 2025 + 368485176, // 2086 Oct 7, 17:56 2026 + 368742198, // 2086 Nov 6, 11:53 2027 + 368999208, // 2086 Dec 6, 05:48 2028 + 369255666, // 2087 Jan 4, 22:11 2029 + 369511260, // 2087 Feb 3, 12:10 2030 + 369765990, // 2087 Mar 4, 23:45 2031 + 370020036, // 2087 Apr 3, 09:26 2032 + 370273626, // 2087 May 2, 17:51 2033 + 370526988, // 2087 Jun 1, 01:38 2034 + 370780386, // 2087 Jun 30, 09:31 2035 + 371034120, // 2087 Jul 29, 18:20 2036 + 371288568, // 2087 Aug 28, 05:08 2037 + 371544042, // 2087 Sep 26, 18:47 2038 + 371800614, // 2087 Oct 26, 11:29 2039 + 372057984, // 2087 Nov 25, 06:24 2040 + 372315498, // 2087 Dec 25, 01:43 2041 + 372572514, // 2088 Jan 23, 19:39 2042 + 372828654, // 2088 Feb 22, 11:09 2043 + 373083846, // 2088 Mar 23, 00:01 2044 + 373338150, // 2088 Apr 21, 10:25 2045 + 373591734, // 2088 May 20, 18:49 2046 + 373844844, // 2088 Jun 19, 01:54 2047 + 374097828, // 2088 Jul 18, 08:38 2048 + 374351130, // 2088 Aug 16, 16:15 2049 + 374605188, // 2088 Sep 15, 01:58 2050 + 374860314, // 2088 Oct 14, 14:39 2051 + 375116592, // 2088 Nov 13, 06:32 2052 + 375373752, // 2088 Dec 13, 00:52 2053 + 375631308, // 2089 Jan 11, 20:18 2054 + 375888696, // 2089 Feb 10, 15:16 2055 + 376145424, // 2089 Mar 12, 08:24 2056 + 376401156, // 2089 Apr 10, 22:46 2057 + 376655784, // 2089 May 10, 10:04 2058 + 376909464, // 2089 Jun 8, 18:44 2059 + 377162562, // 2089 Jul 8, 01:47 2060 + 377415528, // 2089 Aug 6, 08:28 2061 + 377668782, // 2089 Sep 4, 15:57 2062 + 377922690, // 2089 Oct 4, 01:15 2063 + 378177450, // 2089 Nov 2, 12:55 2064 + 378433146, // 2089 Dec 2, 03:11 2065 + 378689736, // 2089 Dec 31, 19:56 2066 + 378947004, // 2090 Jan 30, 14:34 2067 + 379204476, // 2090 Mar 1, 09:46 2068 + 379461528, // 2090 Mar 31, 03:48 2069 + 379717632, // 2090 Apr 29, 19:12 2070 + 379972614, // 2090 May 29, 07:29 2071 + 380226666, // 2090 Jun 27, 17:11 2072 + 380480154, // 2090 Jul 27, 01:19 2073 + 380733468, // 2090 Aug 25, 08:58 2074 + 380986938, // 2090 Sep 23, 17:03 2075 + 381240774, // 2090 Oct 23, 02:09 2076 + 381495168, // 2090 Nov 21, 12:48 2077 + 381750294, // 2090 Dec 21, 01:29 2078 + 382006260, // 2091 Jan 19, 16:30 2079 + 382262988, // 2091 Feb 18, 09:38 2080 + 382520076, // 2091 Mar 20, 03:46 2081 + 382776960, // 2091 Apr 18, 21:20 2082 + 383033202, // 2091 May 18, 13:07 2083 + 383288646, // 2091 Jun 17, 02:41 2084 + 383543376, // 2091 Jul 16, 14:16 2085 + 383797572, // 2091 Aug 15, 00:22 2086 + 384051444, // 2091 Sep 13, 09:34 2087 + 384305214, // 2091 Oct 12, 18:29 2088 + 384559092, // 2091 Nov 11, 03:42 2089 + 384813324, // 2091 Dec 10, 13:54 2090 + 385068102, // 2092 Jan 9, 01:37 2091 + 385323492, // 2092 Feb 7, 15:02 2092 + 385579416, // 2092 Mar 8, 05:56 2093 + 385835646, // 2092 Apr 6, 21:41 2094 + 386091954, // 2092 May 6, 13:39 2095 + 386348142, // 2092 Jun 5, 05:17 2096 + 386604066, // 2092 Jul 4, 20:11 2097 + 386859570, // 2092 Aug 3, 09:55 2098 + 387114564, // 2092 Sep 1, 22:14 2099 + 387369090, // 2092 Oct 1, 09:15 2100 + 387623328, // 2092 Oct 30, 19:28 2101 + 387877536, // 2092 Nov 29, 05:36 2102 + 388131900, // 2092 Dec 28, 16:10 2103 + 388386492, // 2093 Jan 27, 03:22 2104 + 388641276, // 2093 Feb 25, 15:06 2105 + 388896228, // 2093 Mar 27, 03:18 2106 + 389151432, // 2093 Apr 25, 16:12 2107 + 389407002, // 2093 May 25, 06:07 2108 + 389662950, // 2093 Jun 23, 21:05 2109 + 389919096, // 2093 Jul 23, 12:36 2110 + 390175164, // 2093 Aug 22, 03:54 2111 + 390430902, // 2093 Sep 20, 18:17 2112 + 390686238, // 2093 Oct 20, 07:33 2113 + 390941262, // 2093 Nov 18, 19:57 2114 + 391196082, // 2093 Dec 18, 07:47 2115 + 391450710, // 2094 Jan 16, 19:05 2116 + 391705098, // 2094 Feb 15, 05:43 2117 + 391959264, // 2094 Mar 16, 15:44 2118 + 392213388, // 2094 Apr 15, 01:38 2119 + 392467734, // 2094 May 14, 12:09 2120 + 392722578, // 2094 Jun 13, 00:03 2121 + 392978022, // 2094 Jul 12, 13:37 2122 + 393233982, // 2094 Aug 11, 04:37 2123 + 393490266, // 2094 Sep 9, 20:31 2124 + 393746664, // 2094 Oct 9, 12:44 2125 + 394002972, // 2094 Nov 8, 04:42 2126 + 394258980, // 2094 Dec 7, 19:50 2127 + 394514478, // 2095 Jan 6, 09:33 2128 + 394769334, // 2095 Feb 4, 21:29 2129 + 395023554, // 2095 Mar 6, 07:39 2130 + 395277336, // 2095 Apr 4, 16:36 2131 + 395530956, // 2095 May 4, 01:06 2132 + 395784708, // 2095 Jun 2, 09:58 2133 + 396038844, // 2095 Jul 1, 19:54 2134 + 396293574, // 2095 Jul 31, 07:29 2135 + 396549036, // 2095 Aug 29, 21:06 2136 + 396805284, // 2095 Sep 28, 12:54 2137 + 397062198, // 2095 Oct 28, 06:33 2138 + 397319364, // 2095 Nov 27, 00:54 2139 + 397576230, // 2095 Dec 26, 18:25 2140 + 397832310, // 2096 Jan 25, 09:45 2141 + 398087448, // 2096 Feb 23, 22:28 2142 + 398341770, // 2096 Mar 24, 08:55 2143 + 398595504, // 2096 Apr 22, 17:44 2144 + 398848896, // 2096 May 22, 01:36 2145 + 399102192, // 2096 Jun 20, 09:12 2146 + 399355686, // 2096 Jul 19, 17:21 2147 + 399609720, // 2096 Aug 18, 03:00 2148 + 399864660, // 2096 Sep 16, 15:10 2149 + 400120734, // 2096 Oct 16, 06:29 2150 + 400377816, // 2096 Nov 15, 00:36 2151 + 400635396, // 2096 Dec 14, 20:06 2152 + 400892760, // 2097 Jan 13, 15:00 2153 + 401149374, // 2097 Feb 12, 07:49 2154 + 401405022, // 2097 Mar 13, 21:57 2155 + 401659716, // 2097 Apr 12, 09:26 2156 + 401913600, // 2097 May 11, 18:40 2157 + 402166884, // 2097 Jun 10, 02:14 2158 + 402419868, // 2097 Jul 9, 08:58 2159 + 402672960, // 2097 Aug 7, 16:00 2160 + 402926598, // 2097 Sep 6, 00:33 2161 + 403181190, // 2097 Oct 5, 11:45 2162 + 403436934, // 2097 Nov 4, 02:09 2163 + 403693722, // 2097 Dec 3, 19:27 2164 + 403951158, // 2098 Jan 2, 14:33 2165 + 404208684, // 2098 Feb 1, 09:54 2166 + 404465772, // 2098 Mar 3, 04:02 2167 + 404722002, // 2098 Apr 1, 19:47 2168 + 404977152, // 2098 May 1, 08:32 2169 + 405231258, // 2098 May 30, 18:23 2170 + 405484596, // 2098 Jun 29, 02:06 2171 + 405737586, // 2098 Jul 28, 08:51 2172 + 405990672, // 2098 Aug 26, 15:52 2173 + 406244256, // 2098 Sep 25, 00:16 2174 + 406498614, // 2098 Oct 24, 10:49 2175 + 406753866, // 2098 Nov 22, 23:51 2176 + 407010024, // 2098 Dec 22, 15:24 2177 + 407266962, // 2099 Jan 21, 09:07 2178 + 407524350, // 2099 Feb 20, 04:05 2179 + 407781636, // 2099 Mar 21, 22:46 2180 + 408038220, // 2099 Apr 20, 15:30 2181 + 408293736, // 2099 May 20, 05:16 2182 + 408548220, // 2099 Jun 18, 16:10 2183 + 408801966, // 2099 Jul 18, 01:01 2184 + 409055364, // 2099 Aug 16, 08:54 2185 + 409308780, // 2099 Sep 14, 16:50 2186 + 409562472, // 2099 Oct 14, 01:32 2187 + 409816614, // 2099 Nov 12, 11:29 2188 + 410071374, // 2099 Dec 11, 23:09 2189 + 410326896, // 2100 Jan 10, 12:56 2190 + 410583210, // 2100 Feb 9, 04:55 2191 + 410840094, // 2100 Mar 10, 22:29 2192 + 411097062, // 2100 Apr 9, 16:17 2193 + 411353604, // 2100 May 9, 08:54 2194 + 411609426, // 2100 Jun 7, 23:31 2195 + 411864516, // 2100 Jul 7, 12:06 2196 + 412119012, // 2100 Aug 5, 23:02 2197 + 412373094, // 2100 Sep 4, 08:49 2198 + 412626972, // 2100 Oct 3, 18:02 2199 + 412880844, // 2100 Nov 2, 03:14 2200 + 413134920, // 2100 Dec 1, 13:00 2201 + 413389416, // 2100 Dec 30, 23:56 2202 + 413644464, // 2101 Jan 29, 12:24 2203 +}; +enum { kNewMoonDatesCount = sizeof(newMoonDates)/sizeof(newMoonDates[0]) }; + +static const UDate newMoonDatesFirst = 10000.0 * -221149158; // newMoonDates[0]; +static const UDate newMoonDatesLast = 10000.0 * 413644464; // newMoonDates[kNewMoonDatesCount-1]; +static const UDate newMoonDatesRange = 10000.0 * (413644464 + 221149158); // newMoonDatesLast - newMoonDatesFirst; + +// To get the full moon date/time in millis, +// first we use the newMoonDates data to estimate the full moon time for a given lunation +// as halfway between the new moon for the current lunation and the new moon for the next, +// then we add the correction from the table below. +// These adjustment values are in millis/10000.0 (i.e. in units of 10 seconds) to fit +// into 16 bits. +// This fullMoonAdjustmts array has one fewer entry than the newMoonDates array. +static const int16_t fullMoonAdjustmts[] = { +// adj/10K lunation number + -6411, // -285 + -4500, // -284 + -1641, // -283 + 1527, // -282 + 4353, // -281 + 6303, // -280 + 7017, // -279 + 6402, // -278 + 4572, // -277 + 1866, // -276 + -1224, // -275 + -4092, // -274 + -6126, // -273 + -6873, // -272 + -6183, // -271 + -4230, // -270 + -1410, // -269 + 1689, // -268 + 4425, // -267 + 6279, // -266 + 6933, // -265 + 6288, // -264 + 4443, // -263 + 1701, // -262 + -1419, // -261 + -4251, // -260 + -6192, // -259 + -6849, // -258 + -6114, // -257 + -4125, // -256 + -1332, // -255 + 1692, // -254 + 4362, // -253 + 6210, // -252 + 6894, // -251 + 6237, // -250 + 4305, // -249 + 1458, // -248 + -1710, // -247 + -4509, // -246 + -6360, // -245 + -6903, // -244 + -6075, // -243 + -4095, // -242 + -1353, // -241 + 1653, // -240 + 4377, // -239 + 6258, // -238 + 6882, // -237 + 6084, // -236 + 4023, // -235 + 1122, // -234 + -2004, // -233 + -4692, // -232 + -6417, // -231 + -6894, // -230 + -6093, // -229 + -4143, // -228 + -1371, // -227 + 1716, // -226 + 4470, // -225 + 6303, // -224 + 6837, // -223 + 5955, // -222 + 3837, // -221 + 921, // -220 + -2154, // -219 + -4785, // -218 + -6489, // -217 + -6987, // -216 + -6156, // -215 + -4119, // -214 + -1236, // -213 + 1911, // -212 + 4677, // -211 + 6477, // -210 + 6918, // -209 + 5895, // -208 + 3675, // -207 + 756, // -206 + -2289, // -205 + -4893, // -204 + -6561, // -203 + -6987, // -202 + -6054, // -201 + -3924, // -200 + -951, // -199 + 2271, // -198 + 5010, // -197 + 6654, // -196 + 6891, // -195 + 5769, // -194 + 3561, // -193 + 681, // -192 + -2328, // -191 + -4893, // -190 + -6531, // -189 + -6918, // -188 + -5916, // -187 + -3651, // -186 + -558, // -185 + 2637, // -184 + 5211, // -183 + 6705, // -182 + 6891, // -181 + 5775, // -180 + 3564, // -179 + 666, // -178 + -2376, // -177 + -4980, // -176 + -6612, // -175 + -6885, // -174 + -5688, // -173 + -3282, // -172 + -213, // -171 + 2862, // -170 + 5343, // -169 + 6774, // -168 + 6906, // -167 + 5727, // -166 + 3456, // -165 + 510, // -164 + -2571, // -163 + -5139, // -162 + -6630, // -161 + -6726, // -160 + -5439, // -159 + -3045, // -158 + -39, // -157 + 2970, // -156 + 5358, // -155 + 6708, // -154 + 6801, // -153 + 5601, // -152 + 3300, // -151 + 309, // -150 + -2766, // -149 + -5262, // -148 + -6666, // -147 + -6699, // -146 + -5373, // -145 + -2973, // -144 + -9, // -143 + 2928, // -142 + 5289, // -141 + 6663, // -140 + 6768, // -139 + 5514, // -138 + 3105, // -137 + 27, // -136 + -3057, // -135 + -5490, // -134 + -6780, // -133 + -6705, // -132 + -5334, // -131 + -2970, // -130 + -42, // -129 + 2913, // -128 + 5340, // -127 + 6708, // -126 + 6702, // -125 + 5298, // -124 + 2787, // -123 + -291, // -122 + -3300, // -121 + -5604, // -120 + -6795, // -119 + -6711, // -118 + -5376, // -117 + -3003, // -116 + -9, // -115 + 3021, // -114 + 5436, // -113 + 6723, // -112 + 6618, // -111 + 5136, // -110 + 2595, // -109 + -468, // -108 + -3405, // -107 + -5673, // -106 + -6873, // -105 + -6792, // -104 + -5391, // -103 + -2910, // -102 + 183, // -101 + 3249, // -100 + 5649, // -99 + 6867, // -98 + 6633, // -97 + 5031, // -96 + 2436, // -95 + -612, // -94 + -3519, // -93 + -5760, // -92 + -6912, // -91 + -6729, // -90 + -5229, // -89 + -2649, // -88 + 528, // -87 + 3624, // -86 + 5925, // -85 + 6939, // -84 + 6552, // -83 + 4908, // -82 + 2346, // -81 + -654, // -80 + -3540, // -79 + -5757, // -78 + -6867, // -77 + -6633, // -76 + -5025, // -75 + -2301, // -74 + 927, // -73 + 3906, // -72 + 6036, // -71 + 6954, // -70 + 6555, // -69 + 4914, // -68 + 2343, // -67 + -699, // -66 + -3621, // -65 + -5853, // -64 + -6909, // -63 + -6510, // -62 + -4713, // -61 + -1938, // -60 + 1200, // -59 + 4071, // -58 + 6126, // -57 + 6993, // -56 + 6531, // -55 + 4833, // -54 + 2199, // -53 + -888, // -52 + -3822, // -51 + -5967, // -50 + -6849, // -49 + -6306, // -48 + -4482, // -47 + -1755, // -46 + 1320, // -45 + 4116, // -44 + 6093, // -43 + 6900, // -42 + 6411, // -41 + 4689, // -40 + 2013, // -39 + -1107, // -38 + -3996, // -37 + -6051, // -36 + -6858, // -35 + -6267, // -34 + -4422, // -33 + -1710, // -32 + 1308, // -31 + 4047, // -30 + 6033, // -29 + 6873, // -28 + 6369, // -27 + 4545, // -26 + 1755, // -25 + -1410, // -24 + -4266, // -23 + -6228, // -22 + -6924, // -21 + -6258, // -20 + -4407, // -19 + -1731, // -18 + 1278, // -17 + 4083, // -16 + 6102, // -15 + 6885, // -14 + 6228, // -13 + 4275, // -12 + 1437, // -11 + -1686, // -10 + -4443, // -9 + -6288, // -8 + -6924, // -7 + -6279, // -6 + -4449, // -5 + -1734, // -4 + 1374, // -3 + 4218, // -2 + 6180, // -1 + 6855, // 0 + 6114, // 1 + 4104, // 2 + 1257, // 3 + -1818, // 4 + -4518, // 5 + -6357, // 6 + -7008, // 7 + -6333, // 8 + -4395, // 9 + -1560, // 10 + 1617, // 11 + 4467, // 12 + 6381, // 13 + 6957, // 14 + 6078, // 15 + 3969, // 16 + 1110, // 17 + -1941, // 18 + -4617, // 19 + -6423, // 20 + -6999, // 21 + -6213, // 22 + -4173, // 23 + -1248, // 24 + 1989, // 25 + 4803, // 26 + 6561, // 27 + 6939, // 28 + 5964, // 29 + 3873, // 30 + 1053, // 31 + -1971, // 32 + -4626, // 33 + -6399, // 34 + -6930, // 35 + -6063, // 36 + -3894, // 37 + -855, // 38 + 2346, // 39 + 4992, // 40 + 6603, // 41 + 6939, // 42 + 5976, // 43 + 3873, // 44 + 1020, // 45 + -2040, // 46 + -4731, // 47 + -6492, // 48 + -6906, // 49 + -5844, // 50 + -3546, // 51 + -540, // 52 + 2541, // 53 + 5100, // 54 + 6666, // 55 + 6951, // 56 + 5919, // 57 + 3756, // 58 + 840, // 59 + -2262, // 60 + -4914, // 61 + -6528, // 62 + -6774, // 63 + -5628, // 64 + -3348, // 65 + -405, // 66 + 2610, // 67 + 5097, // 68 + 6591, // 69 + 6840, // 70 + 5784, // 71 + 3585, // 72 + 633, // 73 + -2472, // 74 + -5055, // 75 + -6582, // 76 + -6768, // 77 + -5595, // 78 + -3315, // 79 + -402, // 80 + 2565, // 81 + 5031, // 82 + 6558, // 83 + 6816, // 84 + 5697, // 85 + 3378, // 86 + 339, // 87 + -2772, // 88 + -5292, // 89 + -6714, // 90 + -6804, // 91 + -5580, // 92 + -3321, // 93 + -429, // 94 + 2574, // 95 + 5112, // 96 + 6624, // 97 + 6765, // 98 + 5493, // 99 + 3075, // 100 + 30, // 101 + -3000, // 102 + -5400, // 103 + -6732, // 104 + -6804, // 105 + -5613, // 106 + -3339, // 107 + -366, // 108 + 2721, // 109 + 5247, // 110 + 6669, // 111 + 6702, // 112 + 5355, // 113 + 2907, // 114 + -114, // 115 + -3093, // 116 + -5460, // 117 + -6804, // 118 + -6879, // 119 + -5619, // 120 + -3210, // 121 + -129, // 122 + 2991, // 123 + 5490, // 124 + 6834, // 125 + 6744, // 126 + 5268, // 127 + 2769, // 128 + -237, // 129 + -3189, // 130 + -5541, // 131 + -6837, // 132 + -6810, // 133 + -5433, // 134 + -2925, // 135 + 234, // 136 + 3369, // 137 + 5757, // 138 + 6912, // 139 + 6669, // 140 + 5163, // 141 + 2697, // 142 + -282, // 143 + -3216, // 144 + -5541, // 145 + -6798, // 146 + -6708, // 147 + -5217, // 148 + -2577, // 149 + 621, // 150 + 3639, // 151 + 5856, // 152 + 6915, // 153 + 6672, // 154 + 5172, // 155 + 2685, // 156 + -345, // 157 + -3321, // 158 + -5661, // 159 + -6855, // 160 + -6597, // 161 + -4926, // 162 + -2241, // 163 + 858, // 164 + 3762, // 165 + 5925, // 166 + 6948, // 167 + 6645, // 168 + 5076, // 169 + 2520, // 170 + -561, // 171 + -3549, // 172 + -5796, // 173 + -6813, // 174 + -6417, // 175 + -4731, // 176 + -2100, // 177 + 945, // 178 + 3792, // 179 + 5886, // 180 + 6852, // 181 + 6519, // 182 + 4926, // 183 + 2319, // 184 + -792, // 185 + -3744, // 186 + -5901, // 187 + -6846, // 188 + -6414, // 189 + -4710, // 190 + -2088, // 191 + 921, // 192 + 3732, // 193 + 5838, // 194 + 6837, // 195 + 6477, // 196 + 4776, // 197 + 2058, // 198 + -1101, // 199 + -4011, // 200 + -6084, // 201 + -6930, // 202 + -6420, // 203 + -4704, // 204 + -2106, // 205 + 909, // 206 + 3786, // 207 + 5940, // 208 + 6867, // 209 + 6354, // 210 + 4518, // 211 + 1746, // 212 + -1365, // 213 + -4173, // 214 + -6138, // 215 + -6933, // 216 + -6441, // 217 + -4734, // 218 + -2082, // 219 + 1038, // 220 + 3963, // 221 + 6054, // 222 + 6867, // 223 + 6261, // 224 + 4374, // 225 + 1596, // 226 + -1476, // 227 + -4236, // 228 + -6201, // 229 + -7005, // 230 + -6483, // 231 + -4659, // 232 + -1872, // 233 + 1320, // 234 + 4242, // 235 + 6273, // 236 + 6981, // 237 + 6243, // 238 + 4266, // 239 + 1473, // 240 + -1581, // 241 + -4335, // 242 + -6267, // 243 + -6993, // 244 + -6345, // 245 + -4413, // 246 + -1536, // 247 + 1707, // 248 + 4581, // 249 + 6447, // 250 + 6972, // 251 + 6150, // 252 + 4173, // 253 + 1416, // 254 + -1614, // 255 + -4353, // 256 + -6252, // 257 + -6924, // 258 + -6189, // 259 + -4128, // 260 + -1149, // 261 + 2043, // 262 + 4752, // 263 + 6477, // 264 + 6969, // 265 + 6156, // 266 + 4173, // 267 + 1380, // 268 + -1704, // 269 + -4482, // 270 + -6360, // 271 + -6918, // 272 + -5994, // 273 + -3810, // 274 + -873, // 275 + 2202, // 276 + 4830, // 277 + 6525, // 278 + 6975, // 279 + 6090, // 280 + 4038, // 281 + 1176, // 282 + -1953, // 283 + -4689, // 284 + -6417, // 285 + -6804, // 286 + -5808, // 287 + -3657, // 288 + -777, // 289 + 2247, // 290 + 4821, // 291 + 6456, // 292 + 6858, // 293 + 5949, // 294 + 3852, // 295 + 942, // 296 + -2184, // 297 + -4842, // 298 + -6492, // 299 + -6825, // 300 + -5811, // 301 + -3648, // 302 + -789, // 303 + 2199, // 304 + 4764, // 305 + 6432, // 306 + 6849, // 307 + 5868, // 308 + 3648, // 309 + 645, // 310 + -2481, // 311 + -5076, // 312 + -6633, // 313 + -6876, // 314 + -5811, // 315 + -3660, // 316 + -810, // 317 + 2229, // 318 + 4869, // 319 + 6522, // 320 + 6816, // 321 + 5673, // 322 + 3357, // 323 + 354, // 324 + -2691, // 325 + -5172, // 326 + -6648, // 327 + -6879, // 328 + -5832, // 329 + -3660, // 330 + -714, // 331 + 2418, // 332 + 5049, // 333 + 6600, // 334 + 6777, // 335 + 5565, // 336 + 3219, // 337 + 234, // 338 + -2766, // 339 + -5229, // 340 + -6714, // 341 + -6945, // 342 + -5820, // 343 + -3498, // 344 + -438, // 345 + 2721, // 346 + 5310, // 347 + 6777, // 348 + 6831, // 349 + 5496, // 350 + 3096, // 351 + 132, // 352 + -2859, // 353 + -5313, // 354 + -6753, // 355 + -6867, // 356 + -5610, // 357 + -3189, // 358 + -57, // 359 + 3102, // 360 + 5577, // 361 + 6855, // 362 + 6768, // 363 + 5403, // 364 + 3036, // 365 + 84, // 366 + -2895, // 367 + -5325, // 368 + -6717, // 369 + -6762, // 370 + -5394, // 371 + -2850, // 372 + 309, // 373 + 3348, // 374 + 5661, // 375 + 6855, // 376 + 6771, // 377 + 5412, // 378 + 3012, // 379 + 9, // 380 + -3021, // 381 + -5466, // 382 + -6783, // 383 + -6666, // 384 + -5136, // 385 + -2550, // 386 + 510, // 387 + 3444, // 388 + 5709, // 389 + 6876, // 390 + 6735, // 391 + 5304, // 392 + 2826, // 393 + -234, // 394 + -3273, // 395 + -5619, // 396 + -6765, // 397 + -6522, // 398 + -4974, // 399 + -2451, // 400 + 555, // 401 + 3456, // 402 + 5664, // 403 + 6783, // 404 + 6609, // 405 + 5142, // 406 + 2613, // 407 + -480, // 408 + -3477, // 409 + -5733, // 410 + -6822, // 411 + -6549, // 412 + -4983, // 413 + -2457, // 414 + 525, // 415 + 3402, // 416 + 5634, // 417 + 6783, // 418 + 6579, // 419 + 5001, // 420 + 2355, // 421 + -786, // 422 + -3744, // 423 + -5925, // 424 + -6915, // 425 + -6567, // 426 + -4986, // 427 + -2469, // 428 + 534, // 429 + 3486, // 430 + 5766, // 431 + 6843, // 432 + 6474, // 433 + 4758, // 434 + 2064, // 435 + -1029, // 436 + -3891, // 437 + -5967, // 438 + -6912, // 439 + -6576, // 440 + -5007, // 441 + -2418, // 442 + 708, // 443 + 3711, // 444 + 5913, // 445 + 6864, // 446 + 6405, // 447 + 4632, // 448 + 1935, // 449 + -1125, // 450 + -3945, // 451 + -6024, // 452 + -6987, // 453 + -6606, // 454 + -4908, // 455 + -2169, // 456 + 1029, // 457 + 4008, // 458 + 6150, // 459 + 6996, // 460 + 6399, // 461 + 4542, // 462 + 1833, // 463 + -1212, // 464 + -4032, // 465 + -6090, // 466 + -6969, // 467 + -6456, // 468 + -4635, // 469 + -1815, // 470 + 1422, // 471 + 4347, // 472 + 6315, // 473 + 6984, // 474 + 6312, // 475 + 4467, // 476 + 1779, // 477 + -1260, // 478 + -4071, // 479 + -6093, // 480 + -6906, // 481 + -6309, // 482 + -4359, // 483 + -1455, // 484 + 1728, // 485 + 4488, // 486 + 6336, // 487 + 6975, // 488 + 6318, // 489 + 4455, // 490 + 1722, // 491 + -1374, // 492 + -4224, // 493 + -6216, // 494 + -6915, // 495 + -6132, // 496 + -4071, // 497 + -1209, // 498 + 1854, // 499 + 4548, // 500 + 6369, // 501 + 6975, // 502 + 6243, // 503 + 4302, // 504 + 1491, // 505 + -1644, // 506 + -4446, // 507 + -6297, // 508 + -6825, // 509 + -5982, // 510 + -3960, // 511 + -1158, // 512 + 1869, // 513 + 4524, // 514 + 6297, // 515 + 6864, // 516 + 6102, // 517 + 4116, // 518 + 1251, // 519 + -1887, // 520 + -4614, // 521 + -6387, // 522 + -6873, // 523 + -6015, // 524 + -3978, // 525 + -1182, // 526 + 1830, // 527 + 4485, // 528 + 6294, // 529 + 6864, // 530 + 6027, // 531 + 3906, // 532 + 960, // 533 + -2175, // 534 + -4845, // 535 + -6528, // 536 + -6936, // 537 + -6015, // 538 + -3978, // 539 + -1179, // 540 + 1887, // 541 + 4623, // 542 + 6423, // 543 + 6858, // 544 + 5850, // 545 + 3636, // 546 + 696, // 547 + -2367, // 548 + -4935, // 549 + -6540, // 550 + -6930, // 551 + -6033, // 552 + -3963, // 553 + -1050, // 554 + 2124, // 555 + 4845, // 556 + 6519, // 557 + 6840, // 558 + 5760, // 559 + 3525, // 560 + 597, // 561 + -2427, // 562 + -4977, // 563 + -6603, // 564 + -6987, // 565 + -6000, // 566 + -3768, // 567 + -735, // 568 + 2454, // 569 + 5124, // 570 + 6711, // 571 + 6906, // 572 + 5712, // 573 + 3423, // 574 + 501, // 575 + -2517, // 576 + -5061, // 577 + -6639, // 578 + -6906, // 579 + -5775, // 580 + -3441, // 581 + -354, // 582 + 2826, // 583 + 5379, // 584 + 6783, // 585 + 6846, // 586 + 5631, // 587 + 3366, // 588 + 450, // 589 + -2568, // 590 + -5094, // 591 + -6618, // 592 + -6810, // 593 + -5571, // 594 + -3123, // 595 + -9, // 596 + 3045, // 597 + 5436, // 598 + 6777, // 599 + 6846, // 600 + 5628, // 601 + 3330, // 602 + 354, // 603 + -2715, // 604 + -5259, // 605 + -6705, // 606 + -6735, // 607 + -5340, // 608 + -2862, // 609 + 153, // 610 + 3108, // 611 + 5469, // 612 + 6789, // 613 + 6804, // 614 + 5514, // 615 + 3123, // 616 + 87, // 617 + -2991, // 618 + -5430, // 619 + -6708, // 620 + -6618, // 621 + -5214, // 622 + -2799, // 623 + 171, // 624 + 3102, // 625 + 5424, // 626 + 6699, // 627 + 6681, // 628 + 5346, // 629 + 2904, // 630 + -165, // 631 + -3204, // 632 + -5556, // 633 + -6783, // 634 + -6669, // 635 + -5256, // 636 + -2826, // 637 + 141, // 638 + 3072, // 639 + 5418, // 640 + 6720, // 641 + 6666, // 642 + 5211, // 643 + 2649, // 644 + -471, // 645 + -3465, // 646 + -5742, // 647 + -6882, // 648 + -6693, // 649 + -5253, // 650 + -2817, // 651 + 177, // 652 + 3195, // 653 + 5586, // 654 + 6804, // 655 + 6582, // 656 + 4983, // 657 + 2379, // 658 + -690, // 659 + -3597, // 660 + -5781, // 661 + -6873, // 662 + -6693, // 663 + -5253, // 664 + -2739, // 665 + 387, // 666 + 3453, // 667 + 5769, // 668 + 6852, // 669 + 6534, // 670 + 4887, // 671 + 2280, // 672 + -759, // 673 + -3636, // 674 + -5832, // 675 + -6942, // 676 + -6714, // 677 + -5127, // 678 + -2457, // 679 + 735, // 680 + 3774, // 681 + 6012, // 682 + 6987, // 683 + 6540, // 684 + 4815, // 685 + 2187, // 686 + -846, // 687 + -3726, // 688 + -5904, // 689 + -6927, // 690 + -6555, // 691 + -4839, // 692 + -2091, // 693 + 1122, // 694 + 4092, // 695 + 6168, // 696 + 6981, // 697 + 6456, // 698 + 4743, // 699 + 2130, // 700 + -900, // 701 + -3780, // 702 + -5919, // 703 + -6873, // 704 + -6417, // 705 + -4587, // 706 + -1761, // 707 + 1398, // 708 + 4212, // 709 + 6171, // 710 + 6963, // 711 + 6456, // 712 + 4725, // 713 + 2055, // 714 + -1047, // 715 + -3960, // 716 + -6069, // 717 + -6900, // 718 + -6261, // 719 + -4335, // 720 + -1563, // 721 + 1491, // 722 + 4245, // 723 + 6189, // 724 + 6954, // 725 + 6378, // 726 + 4554, // 727 + 1806, // 728 + -1338, // 729 + -4200, // 730 + -6168, // 731 + -6840, // 732 + -6147, // 733 + -4260, // 734 + -1539, // 735 + 1485, // 736 + 4218, // 737 + 6126, // 738 + 6855, // 739 + 6240, // 740 + 4362, // 741 + 1560, // 742 + -1584, // 743 + -4380, // 744 + -6267, // 745 + -6906, // 746 + -6201, // 747 + -4299, // 748 + -1569, // 749 + 1455, // 750 + 4203, // 751 + 6147, // 752 + 6873, // 753 + 6174, // 754 + 4161, // 755 + 1272, // 756 + -1869, // 757 + -4602, // 758 + -6408, // 759 + -6969, // 760 + -6210, // 761 + -4293, // 762 + -1545, // 763 + 1551, // 764 + 4383, // 765 + 6312, // 766 + 6891, // 767 + 6021, // 768 + 3912, // 769 + 1029, // 770 + -2031, // 771 + -4677, // 772 + -6417, // 773 + -6963, // 774 + -6216, // 775 + -4245, // 776 + -1374, // 777 + 1824, // 778 + 4635, // 779 + 6432, // 780 + 6888, // 781 + 5952, // 782 + 3822, // 783 + 957, // 784 + -2076, // 785 + -4713, // 786 + -6477, // 787 + -7014, // 788 + -6159, // 789 + -4023, // 790 + -1029, // 791 + 2181, // 792 + 4920, // 793 + 6627, // 794 + 6966, // 795 + 5919, // 796 + 3744, // 797 + 873, // 798 + -2169, // 799 + -4806, // 800 + -6519, // 801 + -6927, // 802 + -5928, // 803 + -3693, // 804 + -648, // 805 + 2538, // 806 + 5160, // 807 + 6693, // 808 + 6903, // 809 + 5835, // 810 + 3678, // 811 + 813, // 812 + -2235, // 813 + -4851, // 814 + -6510, // 815 + -6840, // 816 + -5733, // 817 + -3396, // 818 + -348, // 819 + 2724, // 820 + 5196, // 821 + 6672, // 822 + 6897, // 823 + 5829, // 824 + 3627, // 825 + 684, // 826 + -2415, // 827 + -5043, // 828 + -6618, // 829 + -6789, // 830 + -5535, // 831 + -3174, // 832 + -219, // 833 + 2760, // 834 + 5217, // 835 + 6675, // 836 + 6855, // 837 + 5703, // 838 + 3408, // 839 + 399, // 840 + -2706, // 841 + -5226, // 842 + -6639, // 843 + -6699, // 844 + -5448, // 845 + -3144, // 846 + -228, // 847 + 2745, // 848 + 5178, // 849 + 6600, // 850 + 6738, // 851 + 5535, // 852 + 3186, // 853 + 144, // 854 + -2925, // 855 + -5367, // 856 + -6723, // 857 + -6768, // 858 + -5505, // 859 + -3183, // 860 + -249, // 861 + 2736, // 862 + 5196, // 863 + 6645, // 864 + 6744, // 865 + 5412, // 866 + 2931, // 867 + -147, // 868 + -3174, // 869 + -5544, // 870 + -6828, // 871 + -6801, // 872 + -5496, // 873 + -3156, // 874 + -174, // 875 + 2892, // 876 + 5403, // 877 + 6759, // 878 + 6678, // 879 + 5205, // 880 + 2694, // 881 + -342, // 882 + -3288, // 883 + -5574, // 884 + -6810, // 885 + -6792, // 886 + -5478, // 887 + -3042, // 888 + 75, // 889 + 3195, // 890 + 5607, // 891 + 6822, // 892 + 6648, // 893 + 5136, // 894 + 2619, // 895 + -393, // 896 + -3315, // 897 + -5616, // 898 + -6876, // 899 + -6801, // 900 + -5331, // 901 + -2733, // 902 + 450, // 903 + 3528, // 904 + 5853, // 905 + 6960, // 906 + 6663, // 907 + 5076, // 908 + 2535, // 909 + -477, // 910 + -3414, // 911 + -5703, // 912 + -6867, // 913 + -6636, // 914 + -5040, // 915 + -2370, // 916 + 822, // 917 + 3822, // 918 + 5997, // 919 + 6945, // 920 + 6582, // 921 + 5004, // 922 + 2478, // 923 + -546, // 924 + -3486, // 925 + -5736, // 926 + -6825, // 927 + -6510, // 928 + -4803, // 929 + -2070, // 930 + 1059, // 931 + 3915, // 932 + 5982, // 933 + 6924, // 934 + 6579, // 935 + 4971, // 936 + 2376, // 937 + -723, // 938 + -3696, // 939 + -5907, // 940 + -6873, // 941 + -6387, // 942 + -4596, // 943 + -1911, // 944 + 1116, // 945 + 3927, // 946 + 5991, // 947 + 6915, // 948 + 6495, // 949 + 4794, // 950 + 2109, // 951 + -1032, // 952 + -3954, // 953 + -6021, // 954 + -6837, // 955 + -6300, // 956 + -4548, // 957 + -1920, // 958 + 1101, // 959 + 3906, // 960 + 5946, // 961 + 6825, // 962 + 6360, // 963 + 4596, // 964 + 1863, // 965 + -1275, // 966 + -4134, // 967 + -6132, // 968 + -6921, // 969 + -6375, // 970 + -4605, // 971 + -1944, // 972 + 1089, // 973 + 3918, // 974 + 5994, // 975 + 6870, // 976 + 6315, // 977 + 4410, // 978 + 1584, // 979 + -1542, // 980 + -4338, // 981 + -6264, // 982 + -6981, // 983 + -6381, // 984 + -4581, // 985 + -1890, // 986 + 1221, // 987 + 4134, // 988 + 6186, // 989 + 6912, // 990 + 6174, // 991 + 4185, // 992 + 1371, // 993 + -1689, // 994 + -4401, // 995 + -6270, // 996 + -6969, // 997 + -6369, // 998 + -4509, // 999 + -1683, // 1000 + 1536, // 1001 + 4422, // 1002 + 6333, // 1003 + 6927, // 1004 + 6132, // 1005 + 4119, // 1006 + 1323, // 1007 + -1719, // 1008 + -4434, // 1009 + -6321, // 1010 + -7011, // 1011 + -6297, // 1012 + -4266, // 1013 + -1314, // 1014 + 1905, // 1015 + 4707, // 1016 + 6525, // 1017 + 7011, // 1018 + 6108, // 1019 + 4050, // 1020 + 1236, // 1021 + -1815, // 1022 + -4536, // 1023 + -6375, // 1024 + -6930, // 1025 + -6063, // 1026 + -3933, // 1027 + -948, // 1028 + 2238, // 1029 + 4923, // 1030 + 6576, // 1031 + 6945, // 1032 + 6024, // 1033 + 3981, // 1034 + 1167, // 1035 + -1899, // 1036 + -4608, // 1037 + -6387, // 1038 + -6864, // 1039 + -5895, // 1040 + -3669, // 1041 + -687, // 1042 + 2391, // 1043 + 4944, // 1044 + 6543, // 1045 + 6930, // 1046 + 6012, // 1047 + 3915, // 1048 + 1020, // 1049 + -2109, // 1050 + -4815, // 1051 + -6513, // 1052 + -6828, // 1053 + -5727, // 1054 + -3483, // 1055 + -591, // 1056 + 2400, // 1057 + 4941, // 1058 + 6546, // 1059 + 6888, // 1060 + 5874, // 1061 + 3681, // 1062 + 714, // 1063 + -2415, // 1064 + -5019, // 1065 + -6555, // 1066 + -6771, // 1067 + -5670, // 1068 + -3486, // 1069 + -618, // 1070 + 2382, // 1071 + 4917, // 1072 + 6489, // 1073 + 6783, // 1074 + 5718, // 1075 + 3456, // 1076 + 456, // 1077 + -2631, // 1078 + -5160, // 1079 + -6648, // 1080 + -6852, // 1081 + -5742, // 1082 + -3525, // 1083 + -624, // 1084 + 2400, // 1085 + 4968, // 1086 + 6558, // 1087 + 6801, // 1088 + 5604, // 1089 + 3225, // 1090 + 186, // 1091 + -2865, // 1092 + -5328, // 1093 + -6747, // 1094 + -6882, // 1095 + -5724, // 1096 + -3477, // 1097 + -519, // 1098 + 2598, // 1099 + 5208, // 1100 + 6705, // 1101 + 6762, // 1102 + 5424, // 1103 + 3006, // 1104 + 12, // 1105 + -2958, // 1106 + -5352, // 1107 + -6732, // 1108 + -6864, // 1109 + -5688, // 1110 + -3333, // 1111 + -234, // 1112 + 2934, // 1113 + 5442, // 1114 + 6783, // 1115 + 6747, // 1116 + 5373, // 1117 + 2952, // 1118 + -18, // 1119 + -2982, // 1120 + -5394, // 1121 + -6798, // 1122 + -6867, // 1123 + -5523, // 1124 + -2997, // 1125 + 159, // 1126 + 3261, // 1127 + 5679, // 1128 + 6918, // 1129 + 6771, // 1130 + 5325, // 1131 + 2877, // 1132 + -105, // 1133 + -3093, // 1134 + -5487, // 1135 + -6792, // 1136 + -6705, // 1137 + -5226, // 1138 + -2649, // 1139 + 507, // 1140 + 3537, // 1141 + 5802, // 1142 + 6900, // 1143 + 6690, // 1144 + 5241, // 1145 + 2808, // 1146 + -198, // 1147 + -3192, // 1148 + -5550, // 1149 + -6771, // 1150 + -6594, // 1151 + -5022, // 1152 + -2391, // 1153 + 702, // 1154 + 3600, // 1155 + 5775, // 1156 + 6864, // 1157 + 6675, // 1158 + 5202, // 1159 + 2691, // 1160 + -402, // 1161 + -3423, // 1162 + -5739, // 1163 + -6840, // 1164 + -6507, // 1165 + -4848, // 1166 + -2265, // 1167 + 732, // 1168 + 3591, // 1169 + 5778, // 1170 + 6858, // 1171 + 6594, // 1172 + 5016, // 1173 + 2406, // 1174 + -717, // 1175 + -3690, // 1176 + -5865, // 1177 + -6825, // 1178 + -6447, // 1179 + -4833, // 1180 + -2295, // 1181 + 708, // 1182 + 3579, // 1183 + 5748, // 1184 + 6783, // 1185 + 6468, // 1186 + 4830, // 1187 + 2160, // 1188 + -966, // 1189 + -3870, // 1190 + -5976, // 1191 + -6918, // 1192 + -6528, // 1193 + -4896, // 1194 + -2313, // 1195 + 729, // 1196 + 3633, // 1197 + 5835, // 1198 + 6855, // 1199 + 6441, // 1200 + 4656, // 1201 + 1902, // 1202 + -1212, // 1203 + -4065, // 1204 + -6111, // 1205 + -6981, // 1206 + -6528, // 1207 + -4851, // 1208 + -2223, // 1209 + 900, // 1210 + 3888, // 1211 + 6063, // 1212 + 6918, // 1213 + 6321, // 1214 + 4452, // 1215 + 1713, // 1216 + -1335, // 1217 + -4110, // 1218 + -6099, // 1219 + -6954, // 1220 + -6501, // 1221 + -4758, // 1222 + -1986, // 1223 + 1245, // 1224 + 4194, // 1225 + 6219, // 1226 + 6951, // 1227 + 6294, // 1228 + 4410, // 1229 + 1680, // 1230 + -1359, // 1231 + -4140, // 1232 + -6159, // 1233 + -6996, // 1234 + -6423, // 1235 + -4494, // 1236 + -1602, // 1237 + 1617, // 1238 + 4479, // 1239 + 6402, // 1240 + 7026, // 1241 + 6282, // 1242 + 4341, // 1243 + 1602, // 1244 + -1458, // 1245 + -4257, // 1246 + -6222, // 1247 + -6921, // 1248 + -6189, // 1249 + -4164, // 1250 + -1254, // 1251 + 1920, // 1252 + 4665, // 1253 + 6438, // 1254 + 6963, // 1255 + 6192, // 1256 + 4269, // 1257 + 1512, // 1258 + -1572, // 1259 + -4356, // 1260 + -6255, // 1261 + -6867, // 1262 + -6039, // 1263 + -3939, // 1264 + -1032, // 1265 + 2031, // 1266 + 4659, // 1267 + 6393, // 1268 + 6939, // 1269 + 6174, // 1270 + 4188, // 1271 + 1338, // 1272 + -1812, // 1273 + -4590, // 1274 + -6405, // 1275 + -6867, // 1276 + -5916, // 1277 + -3795, // 1278 + -969, // 1279 + 2028, // 1280 + 4656, // 1281 + 6405, // 1282 + 6903, // 1283 + 6036, // 1284 + 3942, // 1285 + 1020, // 1286 + -2118, // 1287 + -4800, // 1288 + -6459, // 1289 + -6828, // 1290 + -5886, // 1291 + -3819, // 1292 + -1011, // 1293 + 2016, // 1294 + 4647, // 1295 + 6366, // 1296 + 6816, // 1297 + 5886, // 1298 + 3723, // 1299 + 771, // 1300 + -2334, // 1301 + -4935, // 1302 + -6558, // 1303 + -6921, // 1304 + -5964, // 1305 + -3858, // 1306 + -996, // 1307 + 2067, // 1308 + 4737, // 1309 + 6468, // 1310 + 6861, // 1311 + 5793, // 1312 + 3504, // 1313 + 516, // 1314 + -2544, // 1315 + -5091, // 1316 + -6654, // 1317 + -6945, // 1318 + -5931, // 1319 + -3780, // 1320 + -849, // 1321 + 2310, // 1322 + 5019, // 1323 + 6633, // 1324 + 6831, // 1325 + 5622, // 1326 + 3315, // 1327 + 375, // 1328 + -2622, // 1329 + -5106, // 1330 + -6630, // 1331 + -6918, // 1332 + -5874, // 1333 + -3612, // 1334 + -537, // 1335 + 2667, // 1336 + 5256, // 1337 + 6726, // 1338 + 6828, // 1339 + 5598, // 1340 + 3288, // 1341 + 351, // 1342 + -2646, // 1343 + -5151, // 1344 + -6696, // 1345 + -6915, // 1346 + -5694, // 1347 + -3261, // 1348 + -135, // 1349 + 2994, // 1350 + 5484, // 1351 + 6852, // 1352 + 6858, // 1353 + 5556, // 1354 + 3210, // 1355 + 255, // 1356 + -2772, // 1357 + -5268, // 1358 + -6702, // 1359 + -6756, // 1360 + -5409, // 1361 + -2925, // 1362 + 180, // 1363 + 3231, // 1364 + 5589, // 1365 + 6822, // 1366 + 6774, // 1367 + 5469, // 1368 + 3126, // 1369 + 141, // 1370 + -2895, // 1371 + -5349, // 1372 + -6699, // 1373 + -6666, // 1374 + -5235, // 1375 + -2709, // 1376 + 342, // 1377 + 3270, // 1378 + 5547, // 1379 + 6786, // 1380 + 6753, // 1381 + 5421, // 1382 + 2985, // 1383 + -78, // 1384 + -3147, // 1385 + -5553, // 1386 + -6792, // 1387 + -6612, // 1388 + -5100, // 1389 + -2616, // 1390 + 345, // 1391 + 3252, // 1392 + 5550, // 1393 + 6780, // 1394 + 6672, // 1395 + 5223, // 1396 + 2691, // 1397 + -408, // 1398 + -3423, // 1399 + -5691, // 1400 + -6792, // 1401 + -6570, // 1402 + -5109, // 1403 + -2661, // 1404 + 318, // 1405 + 3258, // 1406 + 5547, // 1407 + 6729, // 1408 + 6564, // 1409 + 5043, // 1410 + 2460, // 1411 + -645, // 1412 + -3597, // 1413 + -5805, // 1414 + -6888, // 1415 + -6669, // 1416 + -5172, // 1417 + -2661, // 1418 + 372, // 1419 + 3348, // 1420 + 5664, // 1421 + 6831, // 1422 + 6558, // 1423 + 4893, // 1424 + 2220, // 1425 + -873, // 1426 + -3774, // 1427 + -5928, // 1428 + -6948, // 1429 + -6654, // 1430 + -5103, // 1431 + -2538, // 1432 + 582, // 1433 + 3639, // 1434 + 5922, // 1435 + 6912, // 1436 + 6456, // 1437 + 4713, // 1438 + 2061, // 1439 + -975, // 1440 + -3807, // 1441 + -5916, // 1442 + -6921, // 1443 + -6618, // 1444 + -4989, // 1445 + -2274, // 1446 + 957, // 1447 + 3960, // 1448 + 6084, // 1449 + 6951, // 1450 + 6444, // 1451 + 4689, // 1452 + 2040, // 1453 + -987, // 1454 + -3840, // 1455 + -5982, // 1456 + -6966, // 1457 + -6531, // 1458 + -4707, // 1459 + -1881, // 1460 + 1326, // 1461 + 4227, // 1462 + 6255, // 1463 + 7023, // 1464 + 6435, // 1465 + 4629, // 1466 + 1956, // 1467 + -1107, // 1468 + -3975, // 1469 + -6060, // 1470 + -6894, // 1471 + -6300, // 1472 + -4395, // 1473 + -1566, // 1474 + 1590, // 1475 + 4392, // 1476 + 6279, // 1477 + 6954, // 1478 + 6339, // 1479 + 4539, // 1480 + 1845, // 1481 + -1245, // 1482 + -4095, // 1483 + -6114, // 1484 + -6864, // 1485 + -6180, // 1486 + -4212, // 1487 + -1386, // 1488 + 1674, // 1489 + 4368, // 1490 + 6222, // 1491 + 6924, // 1492 + 6315, // 1493 + 4446, // 1494 + 1653, // 1495 + -1503, // 1496 + -4350, // 1497 + -6282, // 1498 + -6888, // 1499 + -6090, // 1500 + -4104, // 1501 + -1356, // 1502 + 1650, // 1503 + 4356, // 1504 + 6237, // 1505 + 6903, // 1506 + 6180, // 1507 + 4191, // 1508 + 1326, // 1509 + -1818, // 1510 + -4566, // 1511 + -6348, // 1512 + -6870, // 1513 + -6078, // 1514 + -4146, // 1515 + -1398, // 1516 + 1647, // 1517 + 4377, // 1518 + 6228, // 1519 + 6828, // 1520 + 6039, // 1521 + 3984, // 1522 + 1086, // 1523 + -2028, // 1524 + -4698, // 1525 + -6444, // 1526 + -6963, // 1527 + -6162, // 1528 + -4170, // 1529 + -1350, // 1530 + 1740, // 1531 + 4503, // 1532 + 6363, // 1533 + 6897, // 1534 + 5970, // 1535 + 3792, // 1536 + 858, // 1537 + -2217, // 1538 + -4839, // 1539 + -6531, // 1540 + -6987, // 1541 + -6117, // 1542 + -4065, // 1543 + -1173, // 1544 + 2019, // 1545 + 4812, // 1546 + 6552, // 1547 + 6888, // 1548 + 5820, // 1549 + 3624, // 1550 + 738, // 1551 + -2274, // 1552 + -4845, // 1553 + -6510, // 1554 + -6948, // 1555 + -6042, // 1556 + -3867, // 1557 + -825, // 1558 + 2391, // 1559 + 5064, // 1560 + 6645, // 1561 + 6900, // 1562 + 5811, // 1563 + 3609, // 1564 + 720, // 1565 + -2304, // 1566 + -4908, // 1567 + -6582, // 1568 + -6945, // 1569 + -5856, // 1570 + -3513, // 1571 + -432, // 1572 + 2706, // 1573 + 5271, // 1574 + 6765, // 1575 + 6927, // 1576 + 5769, // 1577 + 3528, // 1578 + 618, // 1579 + -2442, // 1580 + -5037, // 1581 + -6600, // 1582 + -6792, // 1583 + -5577, // 1584 + -3201, // 1585 + -153, // 1586 + 2910, // 1587 + 5355, // 1588 + 6729, // 1589 + 6834, // 1590 + 5676, // 1591 + 3432, // 1592 + 480, // 1593 + -2592, // 1594 + -5139, // 1595 + -6618, // 1596 + -6732, // 1597 + -5439, // 1598 + -3030, // 1599 + -33, // 1600 + 2922, // 1601 + 5295, // 1602 + 6678, // 1603 + 6810, // 1604 + 5616, // 1605 + 3279, // 1606 + 237, // 1607 + -2865, // 1608 + -5364, // 1609 + -6732, // 1610 + -6702, // 1611 + -5343, // 1612 + -2970, // 1613 + -45, // 1614 + 2895, // 1615 + 5307, // 1616 + 6693, // 1617 + 6744, // 1618 + 5421, // 1619 + 2976, // 1620 + -102, // 1621 + -3144, // 1622 + -5508, // 1623 + -6744, // 1624 + -6684, // 1625 + -5364, // 1626 + -3024, // 1627 + -66, // 1628 + 2925, // 1629 + 5334, // 1630 + 6669, // 1631 + 6651, // 1632 + 5256, // 1633 + 2754, // 1634 + -324, // 1635 + -3306, // 1636 + -5610, // 1637 + -6840, // 1638 + -6783, // 1639 + -5424, // 1640 + -3003, // 1641 + 24, // 1642 + 3057, // 1643 + 5493, // 1644 + 6801, // 1645 + 6666, // 1646 + 5124, // 1647 + 2535, // 1648 + -525, // 1649 + -3462, // 1650 + -5724, // 1651 + -6900, // 1652 + -6765, // 1653 + -5337, // 1654 + -2847, // 1655 + 270, // 1656 + 3384, // 1657 + 5766, // 1658 + 6894, // 1659 + 6582, // 1660 + 4965, // 1661 + 2403, // 1662 + -606, // 1663 + -3489, // 1664 + -5712, // 1665 + -6864, // 1666 + -6711, // 1667 + -5199, // 1668 + -2556, // 1669 + 666, // 1670 + 3717, // 1671 + 5937, // 1672 + 6933, // 1673 + 6576, // 1674 + 4956, // 1675 + 2397, // 1676 + -621, // 1677 + -3534, // 1678 + -5790, // 1679 + -6918, // 1680 + -6618, // 1681 + -4914, // 1682 + -2166, // 1683 + 1020, // 1684 + 3966, // 1685 + 6090, // 1686 + 7008, // 1687 + 6567, // 1688 + 4896, // 1689 + 2295, // 1690 + -759, // 1691 + -3693, // 1692 + -5886, // 1693 + -6861, // 1694 + -6402, // 1695 + -4626, // 1696 + -1884, // 1697 + 1245, // 1698 + 4089, // 1699 + 6096, // 1700 + 6930, // 1701 + 6468, // 1702 + 4794, // 1703 + 2166, // 1704 + -918, // 1705 + -3840, // 1706 + -5958, // 1707 + -6849, // 1708 + -6318, // 1709 + -4482, // 1710 + -1746, // 1711 + 1302, // 1712 + 4056, // 1713 + 6033, // 1714 + 6897, // 1715 + 6441, // 1716 + 4686, // 1717 + 1959, // 1718 + -1200, // 1719 + -4110, // 1720 + -6144, // 1721 + -6900, // 1722 + -6258, // 1723 + -4407, // 1724 + -1731, // 1725 + 1263, // 1726 + 4050, // 1727 + 6069, // 1728 + 6882, // 1729 + 6306, // 1730 + 4434, // 1731 + 1632, // 1732 + -1515, // 1733 + -4320, // 1734 + -6222, // 1735 + -6891, // 1736 + -6261, // 1737 + -4455, // 1738 + -1776, // 1739 + 1284, // 1740 + 4101, // 1741 + 6087, // 1742 + 6837, // 1743 + 6183, // 1744 + 4242, // 1745 + 1410, // 1746 + -1701, // 1747 + -4443, // 1748 + -6312, // 1749 + -6987, // 1750 + -6345, // 1751 + -4470, // 1752 + -1701, // 1753 + 1419, // 1754 + 4266, // 1755 + 6252, // 1756 + 6927, // 1757 + 6135, // 1758 + 4068, // 1759 + 1203, // 1760 + -1875, // 1761 + -4575, // 1762 + -6396, // 1763 + -7005, // 1764 + -6279, // 1765 + -4332, // 1766 + -1482, // 1767 + 1731, // 1768 + 4599, // 1769 + 6459, // 1770 + 6933, // 1771 + 6009, // 1772 + 3927, // 1773 + 1107, // 1774 + -1923, // 1775 + -4578, // 1776 + -6369, // 1777 + -6957, // 1778 + -6186, // 1779 + -4113, // 1780 + -1113, // 1781 + 2121, // 1782 + 4854, // 1783 + 6549, // 1784 + 6948, // 1785 + 6009, // 1786 + 3921, // 1787 + 1092, // 1788 + -1953, // 1789 + -4647, // 1790 + -6450, // 1791 + -6957, // 1792 + -6003, // 1793 + -3756, // 1794 + -735, // 1795 + 2412, // 1796 + 5040, // 1797 + 6660, // 1798 + 6978, // 1799 + 5964, // 1800 + 3837, // 1801 + 966, // 1802 + -2115, // 1803 + -4797, // 1804 + -6486, // 1805 + -6822, // 1806 + -5745, // 1807 + -3480, // 1808 + -495, // 1809 + 2574, // 1810 + 5094, // 1811 + 6609, // 1812 + 6876, // 1813 + 5862, // 1814 + 3720, // 1815 + 807, // 1816 + -2292, // 1817 + -4923, // 1818 + -6534, // 1819 + -6789, // 1820 + -5640, // 1821 + -3348, // 1822 + -414, // 1823 + 2568, // 1824 + 5037, // 1825 + 6564, // 1826 + 6852, // 1827 + 5802, // 1828 + 3549, // 1829 + 549, // 1830 + -2583, // 1831 + -5166, // 1832 + -6657, // 1833 + -6783, // 1834 + -5577, // 1835 + -3315, // 1836 + -438, // 1837 + 2538, // 1838 + 5055, // 1839 + 6588, // 1840 + 6798, // 1841 + 5604, // 1842 + 3252, // 1843 + 216, // 1844 + -2853, // 1845 + -5307, // 1846 + -6684, // 1847 + -6780, // 1848 + -5607, // 1849 + -3369, // 1850 + -450, // 1851 + 2598, // 1852 + 5118, // 1853 + 6594, // 1854 + 6720, // 1855 + 5457, // 1856 + 3048, // 1857 + 12, // 1858 + -2997, // 1859 + -5403, // 1860 + -6777, // 1861 + -6873, // 1862 + -5658, // 1863 + -3321, // 1864 + -318, // 1865 + 2775, // 1866 + 5313, // 1867 + 6750, // 1868 + 6759, // 1869 + 5346, // 1870 + 2856, // 1871 + -168, // 1872 + -3141, // 1873 + -5508, // 1874 + -6822, // 1875 + -6843, // 1876 + -5547, // 1877 + -3135, // 1878 + -30, // 1879 + 3123, // 1880 + 5604, // 1881 + 6858, // 1882 + 6690, // 1883 + 5211, // 1884 + 2745, // 1885 + -234, // 1886 + -3162, // 1887 + -5493, // 1888 + -6789, // 1889 + -6780, // 1890 + -5394, // 1891 + -2826, // 1892 + 372, // 1893 + 3459, // 1894 + 5769, // 1895 + 6903, // 1896 + 6690, // 1897 + 5211, // 1898 + 2739, // 1899 + -258, // 1900 + -3225, // 1901 + -5583, // 1902 + -6852, // 1903 + -6693, // 1904 + -5106, // 1905 + -2442, // 1906 + 705, // 1907 + 3684, // 1908 + 5904, // 1909 + 6963, // 1910 + 6684, // 1911 + 5145, // 1912 + 2625, // 1913 + -414, // 1914 + -3405, // 1915 + -5700, // 1916 + -6810, // 1917 + -6498, // 1918 + -4845, // 1919 + -2202, // 1920 + 891, // 1921 + 3783, // 1922 + 5901, // 1923 + 6882, // 1924 + 6579, // 1925 + 5031, // 1926 + 2484, // 1927 + -594, // 1928 + -3570, // 1929 + -5799, // 1930 + -6819, // 1931 + -6444, // 1932 + -4743, // 1933 + -2106, // 1934 + 918, // 1935 + 3732, // 1936 + 5835, // 1937 + 6852, // 1938 + 6546, // 1939 + 4914, // 1940 + 2250, // 1941 + -891, // 1942 + -3852, // 1943 + -5997, // 1944 + -6894, // 1945 + -6408, // 1946 + -4692, // 1947 + -2109, // 1948 + 882, // 1949 + 3732, // 1950 + 5877, // 1951 + 6855, // 1952 + 6423, // 1953 + 4668, // 1954 + 1935, // 1955 + -1200, // 1956 + -4062, // 1957 + -6078, // 1958 + -6894, // 1959 + -6423, // 1960 + -4746, // 1961 + -2145, // 1962 + 924, // 1963 + 3819, // 1964 + 5934, // 1965 + 6834, // 1966 + 6324, // 1967 + 4494, // 1968 + 1731, // 1969 + -1371, // 1970 + -4173, // 1971 + -6159, // 1972 + -6990, // 1973 + -6498, // 1974 + -4746, // 1975 + -2034, // 1976 + 1101, // 1977 + 4029, // 1978 + 6132, // 1979 + 6945, // 1980 + 6288, // 1981 + 4341, // 1982 + 1542, // 1983 + -1521, // 1984 + -4287, // 1985 + -6237, // 1986 + -6996, // 1987 + -6420, // 1988 + -4578, // 1989 + -1782, // 1990 + 1440, // 1991 + 4380, // 1992 + 6345, // 1993 + 6960, // 1994 + 6183, // 1995 + 4218, // 1996 + 1473, // 1997 + -1560, // 1998 + -4293, // 1999 + -6213, // 2000 + -6951, // 2001 + -6318, // 2002 + -4344, // 2003 + -1410, // 2004 + 1827, // 2005 + 4629, // 2006 + 6438, // 2007 + 6978, // 2008 + 6189, // 2009 + 4227, // 2010 + 1452, // 2011 + -1608, // 2012 + -4383, // 2013 + -6309, // 2014 + -6957, // 2015 + -6132, // 2016 + -3999, // 2017 + -1047, // 2018 + 2091, // 2019 + 4788, // 2020 + 6531, // 2021 + 7002, // 2022 + 6144, // 2023 + 4125, // 2024 + 1311, // 2025 + -1791, // 2026 + -4551, // 2027 + -6363, // 2028 + -6837, // 2029 + -5901, // 2030 + -3759, // 2031 + -849, // 2032 + 2223, // 2033 + 4821, // 2034 + 6471, // 2035 + 6900, // 2036 + 6033, // 2037 + 3996, // 2038 + 1131, // 2039 + -1995, // 2040 + -4704, // 2041 + -6426, // 2042 + -6828, // 2043 + -5838, // 2044 + -3672, // 2045 + -801, // 2046 + 2196, // 2047 + 4755, // 2048 + 6429, // 2049 + 6879, // 2050 + 5967, // 2051 + 3816, // 2052 + 852, // 2053 + -2292, // 2054 + -4950, // 2055 + -6570, // 2056 + -6852, // 2057 + -5796, // 2058 + -3651, // 2059 + -825, // 2060 + 2175, // 2061 + 4794, // 2062 + 6474, // 2063 + 6834, // 2064 + 5781, // 2065 + 3522, // 2066 + 534, // 2067 + -2550, // 2068 + -5088, // 2069 + -6597, // 2070 + -6852, // 2071 + -5832, // 2072 + -3705, // 2073 + -819, // 2074 + 2268, // 2075 + 4899, // 2076 + 6513, // 2077 + 6783, // 2078 + 5652, // 2079 + 3336, // 2080 + 348, // 2081 + -2691, // 2082 + -5178, // 2083 + -6687, // 2084 + -6948, // 2085 + -5874, // 2086 + -3633, // 2087 + -645, // 2088 + 2490, // 2089 + 5121, // 2090 + 6693, // 2091 + 6840, // 2092 + 5559, // 2093 + 3174, // 2094 + 192, // 2095 + -2808, // 2096 + -5274, // 2097 + -6735, // 2098 + -6909, // 2099 + -5739, // 2100 + -3408, // 2101 + -324, // 2102 + 2862, // 2103 + 5430, // 2104 + 6804, // 2105 + 6780, // 2106 + 5445, // 2107 + 3078, // 2108 + 141, // 2109 + -2832, // 2110 + -5265, // 2111 + -6702, // 2112 + -6834, // 2113 + -5568, // 2114 + -3090, // 2115 + 78, // 2116 + 3189, // 2117 + 5580, // 2118 + 6843, // 2119 + 6792, // 2120 + 5454, // 2121 + 3078, // 2122 + 108, // 2123 + -2901, // 2124 + -5370, // 2125 + -6774, // 2126 + -6753, // 2127 + -5298, // 2128 + -2730, // 2129 + 381, // 2130 + 3378, // 2131 + 5694, // 2132 + 6900, // 2133 + 6777, // 2134 + 5373, // 2135 + 2946, // 2136 + -75, // 2137 + -3111, // 2138 + -5511, // 2139 + -6750, // 2140 + -6579, // 2141 + -5067, // 2142 + -2529, // 2143 + 522, // 2144 + 3450, // 2145 + 5673, // 2146 + 6807, // 2147 + 6666, // 2148 + 5253, // 2149 + 2787, // 2150 + -282, // 2151 + -3300, // 2152 + -5625, // 2153 + -6786, // 2154 + -6555, // 2155 + -5004, // 2156 + -2466, // 2157 + 528, // 2158 + 3390, // 2159 + 5619, // 2160 + 6786, // 2161 + 6636, // 2162 + 5130, // 2163 + 2544, // 2164 + -585, // 2165 + -3588, // 2166 + -5829, // 2167 + -6873, // 2168 + -6549, // 2169 + -4977, // 2170 + -2481, // 2171 + 495, // 2172 + 3414, // 2173 + 5685, // 2174 + 6810, // 2175 + 6525, // 2176 + 4887, // 2177 + 2232, // 2178 + -879, // 2179 + -3786, // 2180 + -5910, // 2181 + -6876, // 2182 + -6567, // 2183 + -5025, // 2184 + -2496, // 2185 + 564, // 2186 + 3537, // 2187 + 5778, // 2188 + 6813, // 2189 + 6447, // 2190 + 4734, // 2191 + 2052, // 2192 + -1035, // 2193 + -3885, // 2194 + -5985, // 2195 + -6966, // 2196 + -6633, // 2197 + -5001, // 2198 + -2352, // 2199 + 792, // 2200 + 3792, // 2201 + 6006, // 2202 +}; + /** * The position of the moon at the time set on this * object, in equatorial coordinates. @@ -997,82 +6634,82 @@ UDate CalendarAstronomer::getSunRiseSet(UBool rise) */ const CalendarAstronomer::Equatorial& CalendarAstronomer::getMoonPosition() { - // - // See page 142 of "Practial Astronomy with your Calculator", - // by Peter Duffet-Smith, for details on the algorithm. - // - if (moonPositionSet == FALSE) { - // Calculate the solar longitude. Has the side effect of - // filling in "meanAnomalySun" as well. - getSunLongitude(); - - // - // Find the # of days since the epoch of our orbital parameters. - // TODO: Convert the time of day portion into ephemeris time - // - double day = getJulianDay() - JD_EPOCH; // Days since epoch - - // Calculate the mean longitude and anomaly of the moon, based on - // a circular orbit. Similar to the corresponding solar calculation. - double meanLongitude = norm2PI(13.1763966*PI/180*day + moonL0); - meanAnomalyMoon = norm2PI(meanLongitude - 0.1114041*PI/180 * day - moonP0); - - // - // Calculate the following corrections: - // Evection: the sun's gravity affects the moon's eccentricity - // Annual Eqn: variation in the effect due to earth-sun distance - // A3: correction factor (for ???) - // - double evection = 1.2739*PI/180 * ::sin(2 * (meanLongitude - sunLongitude) - - meanAnomalyMoon); - double annual = 0.1858*PI/180 * ::sin(meanAnomalySun); - double a3 = 0.3700*PI/180 * ::sin(meanAnomalySun); - - meanAnomalyMoon += evection - annual - a3; - - // - // More correction factors: - // center equation of the center correction - // a4 yet another error correction (???) - // - // TODO: Skip the equation of the center correction and solve Kepler's eqn? // - double center = 6.2886*PI/180 * ::sin(meanAnomalyMoon); - double a4 = 0.2140*PI/180 * ::sin(2 * meanAnomalyMoon); - - // Now find the moon's corrected longitude - moonLongitude = meanLongitude + evection + center - annual + a4; - - // - // And finally, find the variation, caused by the fact that the sun's - // gravitational pull on the moon varies depending on which side of - // the earth the moon is on - // - double variation = 0.6583*CalendarAstronomer::PI/180 * ::sin(2*(moonLongitude - sunLongitude)); - - moonLongitude += variation; - - // - // What we've calculated so far is the moon's longitude in the plane - // of its own orbit. Now map to the ecliptic to get the latitude - // and longitude. First we need to find the longitude of the ascending - // node, the position on the ecliptic where it is crossed by the moon's - // orbit as it crosses from the southern to the northern hemisphere. + // See page 142 of "Practical Astronomy with your Calculator", + // by Peter Duffet-Smith, for details on the algorithm. // - double nodeLongitude = norm2PI(moonN0 - 0.0529539*PI/180 * day); - - nodeLongitude -= 0.16*PI/180 * ::sin(meanAnomalySun); - - double y = ::sin(moonLongitude - nodeLongitude); - double x = cos(moonLongitude - nodeLongitude); - - moonEclipLong = ::atan2(y*cos(moonI), x) + nodeLongitude; - double moonEclipLat = ::asin(y * ::sin(moonI)); - - eclipticToEquatorial(moonPosition, moonEclipLong, moonEclipLat); - moonPositionSet = TRUE; - } - return moonPosition; + if (moonPositionSet == FALSE) { + // Calculate the solar longitude. Has the side effect of + // filling in "meanAnomalySun" as well. + getSunLongitude(); + + // + // Find the # of days since the epoch of our orbital parameters. + // TODO: Convert the time of day portion into ephemeris time + // + double day = getJulianDay() - JD_EPOCH; // Days since epoch + + // Calculate the mean longitude and anomaly of the moon, based on + // a circular orbit. Similar to the corresponding solar calculation. + double meanLongitude = norm2PI(13.1763966*PI/180*day + moonL0); + meanAnomalyMoon = norm2PI(meanLongitude - 0.1114041*PI/180 * day - moonP0); + + // + // Calculate the following corrections: + // Evection: the sun's gravity affects the moon's eccentricity + // Annual Eqn: variation in the effect due to earth-sun distance + // A3: correction factor (for ???) + // + double evection = 1.2739*PI/180 * ::sin(2 * (meanLongitude - sunLongitude) + - meanAnomalyMoon); + double annual = 0.1858*PI/180 * ::sin(meanAnomalySun); + double a3 = 0.3700*PI/180 * ::sin(meanAnomalySun); + + meanAnomalyMoon += evection - annual - a3; + + // + // More correction factors: + // center equation of the center correction + // a4 yet another error correction (???) + // + // TODO: Skip the equation of the center correction and solve Kepler's eqn? + // + double center = 6.2886*PI/180 * ::sin(meanAnomalyMoon); + double a4 = 0.2140*PI/180 * ::sin(2 * meanAnomalyMoon); + + // Now find the moon's corrected longitude + moonLongitude = meanLongitude + evection + center - annual + a4; + + // + // And finally, find the variation, caused by the fact that the sun's + // gravitational pull on the moon varies depending on which side of + // the earth the moon is on + // + double variation = 0.6583*CalendarAstronomer::PI/180 * ::sin(2*(moonLongitude - sunLongitude)); + + moonLongitude += variation; + + // + // What we've calculated so far is the moon's longitude in the plane + // of its own orbit. Now map to the ecliptic to get the latitude + // and longitude. First we need to find the longitude of the ascending + // node, the position on the ecliptic where it is crossed by the moon's + // orbit as it crosses from the southern to the northern hemisphere. + // + double nodeLongitude = norm2PI(moonN0 - 0.0529539*PI/180 * day); + + nodeLongitude -= 0.16*PI/180 * ::sin(meanAnomalySun); + + double y = ::sin(moonLongitude - nodeLongitude); + double x = cos(moonLongitude - nodeLongitude); + + moonEclipLong = ::atan2(y*cos(moonI), x) + nodeLongitude; + double moonEclipLat = ::asin(y * ::sin(moonI)); + + eclipticToEquatorial(moonPosition, moonEclipLong, moonEclipLat); + moonPositionSet = TRUE; + } + return moonPosition; } /** @@ -1086,15 +6723,40 @@ const CalendarAstronomer::Equatorial& CalendarAstronomer::getMoonPosition() * @deprecated ICU 2.4. This class may be removed or modified. */ double CalendarAstronomer::getMoonAge() { - // See page 147 of "Practial Astronomy with your Calculator", - // by Peter Duffet-Smith, for details on the algorithm. - // - // Force the moon's position to be calculated. We're going to use - // some the intermediate results cached during that calculation. - // - getMoonPosition(); - - return norm2PI(moonEclipLong - sunLongitude); + // See page 147 of "Practical Astronomy with your Calculator", + // by Peter Duffet-Smith, for details on the algorithm. + // + // Force the moon's position to be calculated. We're going to use + // some the intermediate results cached during that calculation. + // + // Currently, the only client is IslamicCalendar. All it cares + // about is that the method returns new moon (0) and full moon (PI) + // at the correct date & time, and otherwise that the returned value + // is monotonically increasing from 0 to PI for the range new moon date + // to full moon date, and monotonically increasing from PI to just under + // 2*PI for the range full moon date to just before next new moon date. + + if (fTime >= newMoonDatesFirst && fTime < newMoonDatesLast) { + int32_t offset = (int32_t)(((double)kNewMoonDatesCount)*(fTime - newMoonDatesFirst)/newMoonDatesRange); + const int32_t * newMoonDatesPtr = newMoonDates + offset; // approximate starting position + int32_t curTime = (int32_t)(fTime/10000.0); + while (curTime < *newMoonDatesPtr) { + newMoonDatesPtr--; + } + while (curTime >= *(newMoonDatesPtr+1)) { + newMoonDatesPtr++; + } + offset = newMoonDatesPtr - newMoonDates; + int32_t fullMoonDate = (*newMoonDatesPtr + *(newMoonDatesPtr+1))/2 + fullMoonAdjustmts[offset]; + if (curTime < fullMoonDate) { + return PI*((double)(curTime - *newMoonDatesPtr))/((double)(fullMoonDate - *newMoonDatesPtr)); + } + return PI + PI*((double)(curTime - fullMoonDate))/((double)(*(newMoonDatesPtr+1) - fullMoonDate)); + } + + getMoonPosition(); + + return norm2PI(moonEclipLong - sunLongitude); } /** @@ -1113,9 +6775,9 @@ double CalendarAstronomer::getMoonAge() { * @deprecated ICU 2.4. This class may be removed or modified. */ double CalendarAstronomer::getMoonPhase() { - // See page 147 of "Practial Astronomy with your Calculator", - // by Peter Duffet-Smith, for details on the algorithm. - return 0.5 * (1 - cos(getMoonAge())); + // See page 147 of "Practical Astronomy with your Calculator", + // by Peter Duffet-Smith, for details on the algorithm. + return 0.5 * (1 - cos(getMoonAge())); } /** @@ -1125,7 +6787,7 @@ double CalendarAstronomer::getMoonPhase() { * @deprecated ICU 2.4. This class may be removed or modified. */ const CalendarAstronomer::MoonAge CalendarAstronomer::NEW_MOON() { - return CalendarAstronomer::MoonAge(0); + return CalendarAstronomer::MoonAge(0); } /** @@ -1134,9 +6796,9 @@ const CalendarAstronomer::MoonAge CalendarAstronomer::NEW_MOON() { * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -const CalendarAstronomer::MoonAge CalendarAstronomer::FIRST_QUARTER() { +/*const CalendarAstronomer::MoonAge CalendarAstronomer::FIRST_QUARTER() { return CalendarAstronomer::MoonAge(CalendarAstronomer::PI/2); -} +}*/ /** * Constant representing a full moon. @@ -1145,7 +6807,7 @@ const CalendarAstronomer::MoonAge CalendarAstronomer::FIRST_QUARTER() { * @deprecated ICU 2.4. This class may be removed or modified. */ const CalendarAstronomer::MoonAge CalendarAstronomer::FULL_MOON() { - return CalendarAstronomer::MoonAge(CalendarAstronomer::PI); + return CalendarAstronomer::MoonAge(CalendarAstronomer::PI); } /** * Constant representing the moon's last quarter. @@ -1156,13 +6818,48 @@ const CalendarAstronomer::MoonAge CalendarAstronomer::FULL_MOON() { class MoonTimeAngleFunc : public CalendarAstronomer::AngleFunc { public: - virtual double eval(CalendarAstronomer&a) { return a.getMoonAge(); } + virtual ~MoonTimeAngleFunc(); + virtual double eval(CalendarAstronomer&a) { return a.getMoonAge(); } }; -const CalendarAstronomer::MoonAge CalendarAstronomer::LAST_QUARTER() { +MoonTimeAngleFunc::~MoonTimeAngleFunc() {} + +/*const CalendarAstronomer::MoonAge CalendarAstronomer::LAST_QUARTER() { return CalendarAstronomer::MoonAge((CalendarAstronomer::PI*3)/2); +}*/ + +/** + * Find the next or previous time of a new moon if date is in the + * range handled by this function (approx gregorian 1900-2100), + * else return 0. + *

+ * @param theTime the time relative to which the function should find + * the next or previous new moon + * @param next true if the next occurrance of the new moon + * is desired, false for the previous occurrance. + * @internal + */ +UDate CalendarAstronomer::getNewMoonTimeInRange(UDate theTime, UBool next) +{ + if (theTime < newMoonDatesFirst || theTime >= newMoonDatesLast) { + return 0.0; + } + int32_t offset = (int32_t)(((double)kNewMoonDatesCount)*(theTime - newMoonDatesFirst)/newMoonDatesRange); + const int32_t * newMoonDatesPtr = newMoonDates + offset; // approximate starting position + int32_t curTime = (int32_t)(theTime/10000.0); + while (curTime < *newMoonDatesPtr) { + newMoonDatesPtr--; + } + while (curTime >= *(newMoonDatesPtr+1)) { + newMoonDatesPtr++; + } + if (next) { + newMoonDatesPtr++; + } + return 10000.0 * (UDate)(*newMoonDatesPtr); } + /** * Find the next or previous time at which the Moon's ecliptic * longitude will have the desired value. @@ -1175,12 +6872,22 @@ const CalendarAstronomer::MoonAge CalendarAstronomer::LAST_QUARTER() { */ UDate CalendarAstronomer::getMoonTime(double desired, UBool next) { - MoonTimeAngleFunc func; - return timeOfAngle( func, - desired, - SYNODIC_MONTH, - MINUTE_MS, - next); + // Currently, we only get here via a call from ChineseCalendar, + // with desired == CalendarAstronomer::NEW_MOON().value + if (desired == CalendarAstronomer::NEW_MOON().value) { + UDate newMoonTime = CalendarAstronomer::getNewMoonTimeInRange(fTime, next); + if (newMoonTime != 0.0) { + return newMoonTime; + } + // else fall through to the full calculation + } + + MoonTimeAngleFunc func; + return timeOfAngle( func, + desired, + SYNODIC_MONTH, + MINUTE_MS, + next); } /** @@ -1194,14 +6901,19 @@ UDate CalendarAstronomer::getMoonTime(double desired, UBool next) * @deprecated ICU 2.4. This class may be removed or modified. */ UDate CalendarAstronomer::getMoonTime(const CalendarAstronomer::MoonAge& desired, UBool next) { - return getMoonTime(desired.value, next); + // Currently, the only client is ChineseCalendar, which calls + // this with desired == CalendarAstronomer::NEW_MOON() + return getMoonTime(desired.value, next); } class MoonRiseSetCoordFunc : public CalendarAstronomer::CoordFunc { public: - virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer&a) { result = a.getMoonPosition(); } + virtual ~MoonRiseSetCoordFunc(); + virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer&a) { result = a.getMoonPosition(); } }; +MoonRiseSetCoordFunc::~MoonRiseSetCoordFunc() {} + /** * Returns the time (GMT) of sunrise or sunset on the local date to which * this calendar is currently set. @@ -1210,12 +6922,12 @@ public: */ UDate CalendarAstronomer::getMoonRiseSet(UBool rise) { - MoonRiseSetCoordFunc func; - return riseOrSet(func, - rise, - .533 * DEG_RAD, // Angular Diameter - 34 /60.0 * DEG_RAD, // Refraction correction - MINUTE_MS); // Desired accuracy + MoonRiseSetCoordFunc func; + return riseOrSet(func, + rise, + .533 * DEG_RAD, // Angular Diameter + 34 /60.0 * DEG_RAD, // Refraction correction + MINUTE_MS); // Desired accuracy } //------------------------------------------------------------------------- @@ -1225,142 +6937,112 @@ UDate CalendarAstronomer::getMoonRiseSet(UBool rise) UDate CalendarAstronomer::timeOfAngle(AngleFunc& func, double desired, double periodDays, double epsilon, UBool next) { - // Find the value of the function at the current time - double lastAngle = func.eval(*this); - - // Find out how far we are from the desired angle - double deltaAngle = norm2PI(desired - lastAngle) ; - - // Using the average period, estimate the next (or previous) time at - // which the desired angle occurs. - double deltaT = (deltaAngle + (next ? 0.0 : - CalendarAstronomer_PI2 )) * (periodDays*DAY_MS) / CalendarAstronomer_PI2; + // Find the value of the function at the current time + double lastAngle = func.eval(*this); - double lastDeltaT = deltaT; // Liu - UDate startTime = fTime; // Liu + // Find out how far we are from the desired angle + double deltaAngle = norm2PI(desired - lastAngle) ; - setTime(fTime + uprv_ceil(deltaT)); + // Using the average period, estimate the next (or previous) time at + // which the desired angle occurs. + double deltaT = (deltaAngle + (next ? 0.0 : - CalendarAstronomer_PI2 )) * (periodDays*DAY_MS) / CalendarAstronomer_PI2; - // Now iterate until we get the error below epsilon. Throughout - // this loop we use normPI to get values in the range -Pi to Pi, - // since we're using them as correction factors rather than absolute angles. - do { - // Evaluate the function at the time we've estimated - double angle = func.eval(*this); + double lastDeltaT = deltaT; // Liu + UDate startTime = fTime; // Liu - // Find the # of milliseconds per radian at this point on the curve - double factor = uprv_fabs(deltaT / normPI(angle-lastAngle)); - - // Correct the time estimate based on how far off the angle is - deltaT = normPI(desired - angle) * factor; + setTime(fTime + uprv_ceil(deltaT)); - // HACK: - // - // If abs(deltaT) begins to diverge we need to quit this loop. - // This only appears to happen when attempting to locate, for - // example, a new moon on the day of the new moon. E.g.: - // - // This result is correct: - // newMoon(7508(Mon Jul 23 00:00:00 CST 1990,false))= - // Sun Jul 22 10:57:41 CST 1990 - // - // But attempting to make the same call a day earlier causes deltaT - // to diverge: - // CalendarAstronomer.timeOfAngle() diverging: 1.348508727575625E9 -> - // 1.3649828540224032E9 - // newMoon(7507(Sun Jul 22 00:00:00 CST 1990,false))= - // Sun Jul 08 13:56:15 CST 1990 - // - // As a temporary solution, we catch this specific condition and - // adjust our start time by one eighth period days (either forward - // or backward) and try again. - // Liu 11/9/00 - if (uprv_fabs(deltaT) > uprv_fabs(lastDeltaT)) { - double delta = uprv_ceil (periodDays * DAY_MS / 8.0); - setTime(startTime + (next ? delta : -delta)); - return timeOfAngle(func, desired, periodDays, epsilon, next); + // Now iterate until we get the error below epsilon. Throughout + // this loop we use normPI to get values in the range -Pi to Pi, + // since we're using them as correction factors rather than absolute angles. + do { + // Evaluate the function at the time we've estimated + double angle = func.eval(*this); + + // Find the # of milliseconds per radian at this point on the curve + double factor = uprv_fabs(deltaT / normPI(angle-lastAngle)); + + // Correct the time estimate based on how far off the angle is + deltaT = normPI(desired - angle) * factor; + + // HACK: + // + // If abs(deltaT) begins to diverge we need to quit this loop. + // This only appears to happen when attempting to locate, for + // example, a new moon on the day of the new moon. E.g.: + // + // This result is correct: + // newMoon(7508(Mon Jul 23 00:00:00 CST 1990,false))= + // Sun Jul 22 10:57:41 CST 1990 + // + // But attempting to make the same call a day earlier causes deltaT + // to diverge: + // CalendarAstronomer.timeOfAngle() diverging: 1.348508727575625E9 -> + // 1.3649828540224032E9 + // newMoon(7507(Sun Jul 22 00:00:00 CST 1990,false))= + // Sun Jul 08 13:56:15 CST 1990 + // + // As a temporary solution, we catch this specific condition and + // adjust our start time by one eighth period days (either forward + // or backward) and try again. + // Liu 11/9/00 + if (uprv_fabs(deltaT) > uprv_fabs(lastDeltaT)) { + double delta = uprv_ceil (periodDays * DAY_MS / 8.0); + setTime(startTime + (next ? delta : -delta)); + return timeOfAngle(func, desired, periodDays, epsilon, next); + } + + lastDeltaT = deltaT; + lastAngle = angle; + + setTime(fTime + uprv_ceil(deltaT)); } + while (uprv_fabs(deltaT) > epsilon); - lastDeltaT = deltaT; - lastAngle = angle; - - setTime(fTime + uprv_ceil(deltaT)); - } - while (uprv_fabs(deltaT) > epsilon); - - return fTime; + return fTime; } UDate CalendarAstronomer::riseOrSet(CoordFunc& func, UBool rise, double diameter, double refraction, double epsilon) { - Equatorial pos; - double tanL = ::tan(fLatitude); - double deltaT = 0; - int32_t count = 0; - - // - // Calculate the object's position at the current time, then use that - // position to calculate the time of rising or setting. The position - // will be different at that time, so iterate until the error is allowable. - // - U_DEBUG_ASTRO_MSG(("setup rise=%s, dia=%.3lf, ref=%.3lf, eps=%.3lf\n", - rise?"T":"F", diameter, refraction, epsilon)); - do { - // See "Practical Astronomy With Your Calculator, section 33. - func.eval(pos, *this); - double angle = ::acos(-tanL * ::tan(pos.declination)); - double lst = ((rise ? CalendarAstronomer_PI2-angle : angle) + pos.ascension ) * 24 / CalendarAstronomer_PI2; - - // Convert from LST to Universal Time. - UDate newTime = lstToUT( lst ); - - deltaT = newTime - fTime; - setTime(newTime); - U_DEBUG_ASTRO_MSG(("%d] dT=%.3lf, angle=%.3lf, lst=%.3lf, A=%.3lf/D=%.3lf\n", - count, deltaT, angle, lst, pos.ascension, pos.declination)); - } - while (++ count < 5 && uprv_fabs(deltaT) > epsilon); + Equatorial pos; + double tanL = ::tan(fLatitude); + double deltaT = 0; + int32_t count = 0; - // Calculate the correction due to refraction and the object's angular diameter - double cosD = ::cos(pos.declination); - double psi = ::acos(sin(fLatitude) / cosD); - double x = diameter / 2 + refraction; - double y = ::asin(sin(x) / ::sin(psi)); - long delta = (long)((240 * y * RAD_DEG / cosD)*SECOND_MS); - - return fTime + (rise ? -delta : delta); -} + // + // Calculate the object's position at the current time, then use that + // position to calculate the time of rising or setting. The position + // will be different at that time, so iterate until the error is allowable. + // + U_DEBUG_ASTRO_MSG(("setup rise=%s, dia=%.3lf, ref=%.3lf, eps=%.3lf\n", + rise?"T":"F", diameter, refraction, epsilon)); + do { + // See "Practical Astronomy With Your Calculator, section 33. + func.eval(pos, *this); + double angle = ::acos(-tanL * ::tan(pos.declination)); + double lst = ((rise ? CalendarAstronomer_PI2-angle : angle) + pos.ascension ) * 24 / CalendarAstronomer_PI2; + + // Convert from LST to Universal Time. + UDate newTime = lstToUT( lst ); + + deltaT = newTime - fTime; + setTime(newTime); + U_DEBUG_ASTRO_MSG(("%d] dT=%.3lf, angle=%.3lf, lst=%.3lf, A=%.3lf/D=%.3lf\n", + count, deltaT, angle, lst, pos.ascension, pos.declination)); + } + while (++ count < 5 && uprv_fabs(deltaT) > epsilon); -/** - * Find the "true anomaly" (longitude) of an object from - * its mean anomaly and the eccentricity of its orbit. This uses - * an iterative solution to Kepler's equation. - * - * @param meanAnomaly The object's longitude calculated as if it were in - * a regular, circular orbit, measured in radians - * from the point of perigee. - * - * @param eccentricity The eccentricity of the orbit - * - * @return The true anomaly (longitude) measured in radians - */ -double CalendarAstronomer::trueAnomaly(double meanAnomaly, double eccentricity) -{ - // First, solve Kepler's equation iteratively - // Duffett-Smith, p.90 - double delta; - double E = meanAnomaly; - do { - delta = E - eccentricity * ::sin(E) - meanAnomaly; - E = E - delta / (1 - eccentricity * ::cos(E)); - } - while (uprv_fabs(delta) > 1e-5); // epsilon = 1e-5 rad + // Calculate the correction due to refraction and the object's angular diameter + double cosD = ::cos(pos.declination); + double psi = ::acos(sin(fLatitude) / cosD); + double x = diameter / 2 + refraction; + double y = ::asin(sin(x) / ::sin(psi)); + long delta = (long)((240 * y * RAD_DEG / cosD)*SECOND_MS); - return 2.0 * ::atan( ::tan(E/2) * ::sqrt( (1+eccentricity) - /(1-eccentricity) ) ); + return fTime + (rise ? -delta : delta); } - /** * Return the obliquity of the ecliptic (the angle between the ecliptic * and the earth's equator) at the current time. This varies due to @@ -1370,19 +7052,19 @@ double CalendarAstronomer::trueAnomaly(double meanAnomaly, double eccentricity) * measured in radians. */ double CalendarAstronomer::eclipticObliquity() { - if (isINVALID(eclipObliquity)) { - const double epoch = 2451545.0; // 2000 AD, January 1.5 + if (isINVALID(eclipObliquity)) { + const double epoch = 2451545.0; // 2000 AD, January 1.5 - double T = (getJulianDay() - epoch) / 36525; + double T = (getJulianDay() - epoch) / 36525; - eclipObliquity = 23.439292 - - 46.815/3600 * T - - 0.0006/3600 * T*T - + 0.00181/3600 * T*T*T; + eclipObliquity = 23.439292 + - 46.815/3600 * T + - 0.0006/3600 * T*T + + 0.00181/3600 * T*T*T; - eclipObliquity *= DEG_RAD; - } - return eclipObliquity; + eclipObliquity *= DEG_RAD; + } + return eclipObliquity; } @@ -1390,19 +7072,19 @@ double CalendarAstronomer::eclipticObliquity() { // Private data //------------------------------------------------------------------------- void CalendarAstronomer::clearCache() { - const double INVALID = uprv_getNaN(); - - julianDay = INVALID; - julianCentury = INVALID; - sunLongitude = INVALID; - meanAnomalySun = INVALID; - moonLongitude = INVALID; - moonEclipLong = INVALID; - meanAnomalyMoon = INVALID; - eclipObliquity = INVALID; - siderealTime = INVALID; - siderealT0 = INVALID; - moonPositionSet = FALSE; + const double INVALID = uprv_getNaN(); + + julianDay = INVALID; + julianCentury = INVALID; + sunLongitude = INVALID; + meanAnomalySun = INVALID; + moonLongitude = INVALID; + moonEclipLong = INVALID; + meanAnomalyMoon = INVALID; + eclipObliquity = INVALID; + siderealTime = INVALID; + siderealT0 = INVALID; + moonPositionSet = FALSE; } //private static void out(String s) { @@ -1421,7 +7103,7 @@ void CalendarAstronomer::clearCache() { * @internal * @deprecated ICU 2.4. This class may be removed or modified. */ -UDate CalendarAstronomer::local(UDate localMillis) { +/*UDate CalendarAstronomer::local(UDate localMillis) { // TODO - srl ? TimeZone *tz = TimeZone::createDefault(); int32_t rawOffset; @@ -1430,40 +7112,40 @@ UDate CalendarAstronomer::local(UDate localMillis) { tz->getOffset(localMillis, TRUE, rawOffset, dstOffset, status); delete tz; return localMillis - rawOffset; -} +}*/ // Debugging functions UnicodeString CalendarAstronomer::Ecliptic::toString() const { #ifdef U_DEBUG_ASTRO - char tmp[800]; - sprintf(tmp, "[%.5f,%.5f]", longitude*RAD_DEG, latitude*RAD_DEG); - return UnicodeString(tmp, ""); + char tmp[800]; + sprintf(tmp, "[%.5f,%.5f]", longitude*RAD_DEG, latitude*RAD_DEG); + return UnicodeString(tmp, ""); #else - return UnicodeString(); + return UnicodeString(); #endif } UnicodeString CalendarAstronomer::Equatorial::toString() const { #ifdef U_DEBUG_ASTRO - char tmp[400]; - sprintf(tmp, "%f,%f", - (ascension*RAD_DEG), (declination*RAD_DEG)); - return UnicodeString(tmp, ""); + char tmp[400]; + sprintf(tmp, "%f,%f", + (ascension*RAD_DEG), (declination*RAD_DEG)); + return UnicodeString(tmp, ""); #else - return UnicodeString(); + return UnicodeString(); #endif } UnicodeString CalendarAstronomer::Horizon::toString() const { #ifdef U_DEBUG_ASTRO - char tmp[800]; - sprintf(tmp, "[%.5f,%.5f]", altitude*RAD_DEG, azimuth*RAD_DEG); - return UnicodeString(tmp, ""); + char tmp[800]; + sprintf(tmp, "[%.5f,%.5f]", altitude*RAD_DEG, azimuth*RAD_DEG); + return UnicodeString(tmp, ""); #else - return UnicodeString(); + return UnicodeString(); #endif } @@ -1487,71 +7169,71 @@ UnicodeString CalendarAstronomer::Horizon::toString() const // =============== Calendar Cache ================ void CalendarCache::createCache(CalendarCache** cache, UErrorCode& status) { - ucln_i18n_registerCleanup(UCLN_I18N_ASTRO_CALENDAR, calendar_astro_cleanup); - *cache = new CalendarCache(32, status); - if(cache == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - } - if(U_FAILURE(status)) { - delete *cache; - *cache = NULL; - } + ucln_i18n_registerCleanup(UCLN_I18N_ASTRO_CALENDAR, calendar_astro_cleanup); + if(cache == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } else { + *cache = new CalendarCache(32, status); + if(U_FAILURE(status)) { + delete *cache; + *cache = NULL; + } + } } int32_t CalendarCache::get(CalendarCache** cache, int32_t key, UErrorCode &status) { - int32_t res; + int32_t res; - if(U_FAILURE(status)) { - return 0; - } - umtx_lock(&ccLock); - - if(*cache == NULL) { - createCache(cache, status); if(U_FAILURE(status)) { - umtx_unlock(&ccLock); - return 0; + return 0; + } + umtx_lock(ccLock()); + + if(*cache == NULL) { + createCache(cache, status); + if(U_FAILURE(status)) { + umtx_unlock(ccLock()); + return 0; + } } - } - res = uhash_igeti((*cache)->fTable, key); - U_DEBUG_ASTRO_MSG(("%p: GET: [%d] == %d\n", (*cache)->fTable, key, res)); + res = uhash_igeti((*cache)->fTable, key); + U_DEBUG_ASTRO_MSG(("%p: GET: [%d] == %d\n", (*cache)->fTable, key, res)); - umtx_unlock(&ccLock); - return res; + umtx_unlock(ccLock()); + return res; } void CalendarCache::put(CalendarCache** cache, int32_t key, int32_t value, UErrorCode &status) { - - if(U_FAILURE(status)) { - return; - } - umtx_lock(&ccLock); - - if(*cache == NULL) { - createCache(cache, status); if(U_FAILURE(status)) { - umtx_unlock(&ccLock); - return; + return; + } + umtx_lock(ccLock()); + + if(*cache == NULL) { + createCache(cache, status); + if(U_FAILURE(status)) { + umtx_unlock(ccLock()); + return; + } } - } - uhash_iputi((*cache)->fTable, key, value, &status); - U_DEBUG_ASTRO_MSG(("%p: PUT: [%d] := %d\n", (*cache)->fTable, key, value)); + uhash_iputi((*cache)->fTable, key, value, &status); + U_DEBUG_ASTRO_MSG(("%p: PUT: [%d] := %d\n", (*cache)->fTable, key, value)); - umtx_unlock(&ccLock); + umtx_unlock(ccLock()); } CalendarCache::CalendarCache(int32_t size, UErrorCode &status) { - fTable = uhash_openSize(uhash_hashLong, uhash_compareLong, size, &status); - U_DEBUG_ASTRO_MSG(("%p: Opening.\n", fTable)); + fTable = uhash_openSize(uhash_hashLong, uhash_compareLong, NULL, size, &status); + U_DEBUG_ASTRO_MSG(("%p: Opening.\n", fTable)); } CalendarCache::~CalendarCache() { - if(fTable != NULL) { - U_DEBUG_ASTRO_MSG(("%p: Closing.\n", fTable)); - uhash_close(fTable); - } + if(fTable != NULL) { + U_DEBUG_ASTRO_MSG(("%p: Closing.\n", fTable)); + uhash_close(fTable); + } } U_NAMESPACE_END